Czajah, Cześć, Twój obejście 3.0.6 działa również w produkcji tryb wbudowany (starszy paxos HA) 3.1.0 - dziękuję.
Źródło
projekt github (Maven, Tomcat 8 WAR) w https://github.com/obrienlabs/nbi-neo4j-embedded-aws-war
Endpoints
Dodaj węzeł do osadzonego wykresu db http://neo4j.ca-central-1.elasticbeanstalk.com/FrontController?action=graph
przeglądarka jest na porcie 7575
Dzięki kilku modyfikacjom udało mi się owinąć HighlyAv ailableGraphDatabase z EnterpriseBootstrapper.
Istnieje kilka niekrytycznych wyjątków związanych z raportowaniem JMX w debug.log prawdopodobnie związanych z moją wersją tomcat 8.0.28, ale graficzna baza danych uruchomiona w Tomcat jest w porządku.
2016-12-21 16:20:00.574+0000 INFO Bolt enabled on 0.0.0.0:7688.
2016-12-21 16:20:09.554+0000 INFO Attempting to join cluster of [127.0.0.1:5001]
2016-12-21 16:20:11.566+0000 INFO Creating new cluster with name [neo4j.ha]...
2016-12-21 16:20:11.607+0000 INFO Instance 1 (this server) entered the cluster
2016-12-21 16:20:12.164+0000 INFO I am 1, moving to master
2016-12-21 16:20:12.293+0000 INFO Instance 1 (this server) was elected as coordinator
2016-12-21 16:20:12.462+0000 INFO I am 1, successfully moved to master
2016-12-21 16:20:12.513+0000 INFO Instance 1 (this server) is available as master at ha://127.0.0.1:6001?serverId=1 with StoreId{creationTime=1482199697648, randomId=7800059877674392627, storeVersion=15531981201765894, upgradeTime=1482199697648, upgradeId=1}
2016-12-21 16:20:14.495+0000 INFO Database available for write transactions
2016-12-21 16:20:31.917+0000 INFO Mounted REST API at: /db/manage
2016-12-21 16:20:53.264+0000 INFO Remote interface available at http://localhost:7575/
register: [email protected]
public class ExtendedHighlyAvailableGraphDatabaseFactory extends HighlyAvailableGraphDatabaseFactory {
private Log log = LogFactory.getLog(ExtendedHighlyAvailableGraphDatabaseFactory.class);
private HaMonitor haMonitor;
@Override
public GraphDatabaseService newDatabase(final Map<String, String> config) {
EnterpriseBootstrapper serverBootstrapper = new EnterpriseBootstrapper();
List<Pair> pairs = new ArrayList<>();
for(Entry<String, String> entry : config.entrySet()) {
pairs.add(Pair.of(entry.getKey(), entry.getValue()));
}
Pair pairArray[] = new Pair[pairs.size()];
// will resolve to /dir/data/databases/graph.db
serverBootstrapper.start(storeDir, Optional.empty(), pairs.toArray(pairArray));
GraphDatabaseService graph = serverBootstrapper.getServer().getDatabase().getGraph();
// set the paxos HA listener only when dbms.mode=HA
if(graph instanceof HighlyAvailableGraphDatabase) {
haMonitor.setDb((HighlyAvailableGraphDatabase) graph);
HighAvailabilityMemberStateMachine memberStateMachine =
((HighlyAvailableGraphDatabase)graph).getDependencyResolver()
.resolveDependency(HighAvailabilityMemberStateMachine.class);
if (memberStateMachine != null) {
memberStateMachine.addHighAvailabilityMemberListener(haMonitor);
log.info("register: " + haMonitor);
}
}
return graph;
} };
}
Wiosna config
<util:map id="config">
<entry key="ha.server_id" value="1"/>
<entry key="ha.initial_hosts" value="127.0.0.1:5001"/>
<entry key="dbms.mode" value="HA"/>
<entry key="browser.allow_outgoing_connection" value="true" />
<entry key="unsupported.dbms.ephemerall" value="false" />
<entry key="dbms.connector.http.address" value="0.0.0.0:7575" />
<entry key="dbms.connector.bolt.address" value="0.0.0.0:7688" />
<entry key="dbms.connector.http.enabled" value="true" />
<entry key="dbms.connector.bolt.enabled" value="true" />
<entry key="dbms.connector.http.type" value="HTTP" />
<entry key="dbms.connector.bolt.type" value="BOLT" />
<entry key="dbms.connector.http.tls_level" value="DISABLED" />
<entry key="dbms.connector.bolt.tls_level" value="DISABLED" />
<entry key="dbms.security.auth_enabled" value="true"/>
<entry key="dbms.logs.debug.level" value="DEBUG"/>
<entry key="dbms.logs.http.enabled" value="true" />
<entry key="dbms.logs.query.enabled" value="true"/>
<entry key="dbms.shell.enabled" value="true"/>
</util:map>
<bean id="haMonitor" class="org.obrienlabs.nbi.graph.service.HaMonitor"/>
<bean id="graphDbFactory" class="org.obrienlabs.nbi.graph.service.ExtendedHighlyAvailableGraphDatabaseFactory">
<constructor-arg ref="haMonitor" />
</bean>
<bean id="graphDbBuilder"
factory-bean="graphDbFactory"
factory-method="newEmbeddedDatabaseBuilder">
<constructor-arg value="/ec2-user"/>
</bean>
<bean id="graphDbBuilderFinal"
factory-bean="graphDbBuilder"
factory-method="setConfig">
<constructor-arg ref="config"/>
</bean>
<!-- HighlyAvailableGraphDatabase wrapped by an EnterpriseBootstrapper NeoServer created in this constructor -->
<bean id="graphDatabaseService"
factory-bean="graphDbBuilderFinal"
factory-method="newGraphDatabase"
destroy-method="shutdown" />
Transakcje przejść
2016-12-21 20:51:07.478+0000 INFO [o.n.k.i.s.c.CountsTracker] About to rotate counts store at transaction 9 to [/ec2-user/data/databases/graph.db/neostore.counts.db.b], from [/ec2-user/data/databases/graph.db/neostore.counts.db.a].
2016-12-21 20:51:07.480+0000 INFO [o.n.k.i.s.c.CountsTracker] Successfully rotated counts store at transaction 9 to [/ec2-user/data/databases/graph.db/neostore.counts.db.b], from [/ec2-user/data/databases/graph.db/neostore.counts.db.a].
2016-12-21 20:51:07.483+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] Check Pointing triggered by scheduler for time threshold [9]: Store flush completed
ustawienia z MBean w JConsole są
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] Kernel version: 3.1.0,16a782b42d76ca37db72958eb2565cf6aa671a29
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] Neo4j Kernel properties:
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.logs.query.enabled=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.security.auth_enabled=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.bolt.tls_level=DISABLED
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.shell.enabled=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] ha.server_id=1
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.logs.http.enabled=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] ha.initial_hosts=127.0.0.1:5001
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.allow_format_migration=false
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.http.address=0.0.0.0:7575
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.bolt.enabled=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.http.tls_level=DISABLED
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.http.enabled=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.mode=HA
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] unsupported.dbms.block_size.labels=56
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.bolt.type=BOLT
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] unsupported.dbms.directories.neo4j_home=/ec2-user
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] unsupported.dbms.ephemerall=false
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] browser.allow_outgoing_connection=true
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.logs.debug.level=DEBUG
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.http.type=HTTP
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] unsupported.dbms.block_size.strings=120
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] unsupported.dbms.block_size.array_properties=120
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] unsupported.dbms.edition=enterprise
2016-12-23 13:28:12.708+0000 INFO [o.n.k.i.DiagnosticsManager] dbms.connector.bolt.address=0.0.0.0:7688
7575 (serwer pomost) i 7688 (śruba) porty są otwarte
obrienlabs-mbp15:_deployment michaelobrien$ netstat -vatn | grep 7575
tcp46 0 0 *.7575 *.* LISTEN 131072 131072 49013 0
tcp4 0 0 127.0.0.1.7575 127.0.0.1.60685 TIME_WAIT 407296 146988 49013 0
tcp6 0 0 ::1.7575 ::1.60699 TIME_WAIT 407284 146808 49013 0
tcp6 0 0 ::1.7575 ::1.60700 TIME_WAIT 407284 146808 49013 0
obrienlabs-mbp15:_deployment michaelobrien$ netstat -vatn | grep 7688
tcp6 0 0 ::1.7688 ::1.60704 ESTABLISHED 406582 146808 49013 0
tcp6 0 0 ::1.60704 ::1.7688 ESTABLISHED 398196 146808 48165 0
tcp6 0 0 ::1.7688 ::1.60702 ESTABLISHED 406570 146808 49013 0
tcp6 0 0 ::1.60702 ::1.7688 ESTABLISHED 398185 146808 48165 0
tcp6 0 0 ::1.7688 ::1.60701 ESTABLISHED 407255 146808 49013 0
tcp6 0 0 ::1.60701 ::1.7688 ESTABLISHED 407628 146808 48165 0
tcp46 0 0 *.7688 *.* LISTEN 131072 131072 49013 0
obrienlabs-mbp15:_deployment michaelobrien$ netstat -vatn | grep 8080
tcp4 0 0 127.0.0.1.8080 127.0.0.1.60584 FIN_WAIT_2 408104 146988 49013 0
tcp4 994 0 127.0.0.1.60584 127.0.0.1.8080 CLOSE_WAIT 408128 146988 42992 0
tcp46 0 0 *.8080 *.* LISTEN 131072 131072 49013 0
udp4 0 0 *.* *.* 196724 9216 38080 0
/ec2-user/logs/http.log
2016-12-23 02:53:21.505+0000 INFO [REQUEST] [AsyncLog @ 2016-12-23 02:53:21.505+0000] 0:0:0:0:0:0:0:1 - [Thu Dec 22 21:53:21 EST 2016] "/browser/views/frame-cypher.html?null" 200 22972 "http://localhost:7575/browser/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14" 2
query.log
2016-12-23 13:33:39.059+0000 INFO 175 ms: bolt-session bolt neo4j neo4j-javascript/[object Object] client/0:0:0:0:0:0:0:1:64019 server/0:0:0:0:0:0:0:1:7688> neo4j - MATCH (a)-[r]->(b) WHERE id(a) IN {node_ids}
AND id(b) IN {new_node_ids}
RETURN r; - {node_ids: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], new_node_ids: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]} - {}
Zastrzeżenie: Wierzę właściwa architektura obejmuje klastrowego zestaw śrubą trybie serwera obsługującego Serwery Neo4j używające klastra przyczynowego w protokole tratwy. Ten nieudokumentowany/wewnętrzny interfejs API jest używany jako tymczasowe obejście, aby uzyskać przeglądarkę neo4j na osadzonym serwerze Neo4j w wersji 3.1.0, ponieważ działała ona pod WrappingNeoServerBootstrapper w wersji 2.3. Wykorzystanie wbudowanego serwera dla szybszych przejazdów było przypadkiem użycia - wydajność musi zostać ponownie oceniona, aby sprawdzić, czy architektura oparta na śrubach jest bardziej optymalna dla interfejsu API traversal. /Michael
Dzięki, pomyślałem, że mogło być tak, ale dokumentacja nie jest jasna! – wires
Tak, myślę, że dokumentacja mówi tylko, że jest przestarzała, nie wiele więcej. Nie wiem dokładnie, dlaczego go lekceważyli, ale moja odpowiedź jest powodem, dla którego myślę. Nie spodziewałbym się zastąpienia, ale mam nadzieję na niedługo binarny protokół alfa JDBC, który sprawiłby, że potrzeba tej funkcji jeszcze mniej. – FrobberOfBits
To niefortunne. Obsługa testów Neo4j opiera się na wbudowanych bazach danych. Gdybym mógł zbudować tymczasową bazę danych bez tej wbudowanej bazy danych, zaoszczędziłoby to dużo czasu i zasobów podczas jednoczesnego równoległego prowadzenia pojedynczych testów jednostkowych. Jednak wady związane z wyborem wbudowanej bazy danych oznaczają, że nie mogę mieć zarówno narzędzia do debugowania przeglądarki, jak i wbudowanych pomocników testowej bazy danych podczas uruchamiania testów. Zamiast tego będę musiał wyodrębnić nowy kontener dokera za każdym razem, gdy chcę mieć bazę danych i zarządzać tym wszystkim sam. –