2016-07-29 5 views
3

Ich habe eine Logik, die direkten Zugriff auf den Knoten neo4j benötigt, aber der Rest der App verwendet Spring Data Neo4j (SDN) zur Vereinfachung. Ich dachte, eine Prozedur mit @Procedure zu verwenden, aber ich bin nicht sicher, wie man diese Prozedur benutzt, wenn man den eingebetteten Treiber neo4j und SDN4 benutzt. Meine Konfiguration ist sehr Barebones wie folgt:Bereitstellen einer Prozedur zu Neo4J bei Verwendung des eingebetteten Treibers

@Configuration 
@EnableNeo4jRepositories(basePackages = "recommender.repository") 
@ComponentScan(basePackages = "recommender") 
@EnableTransactionManagement 
public class MyNeo4jConfiguration extends Neo4jConfiguration { 

@Bean 
public SessionFactory getSessionFactory() { 

    System.out.println("******* GET SESSION FACTORY!!!!"); 
    // with domain entity base package(s) 
    return new SessionFactory("recommender.model"); 
} 

// needed for session in view in web-applications 
@Bean 
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) 
public Session getSession() throws Exception { 
    return super.getSession(); 
} 

Mit einer Eigenschaftendatei hier:

#EmbeddedSetup 
driver=org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver 
#URI=file:/neo4j/data/graph.db 

Mit diesem Setup, wo kann ich die Klasse mit @Procedure und @Context setzen (für den DB-Zugriff), in dem Die SDN-Implementierung hat während der Kriegsbereitstellung Zugriff darauf.

Antwort

3

SDN selbst hat keine Funktionalität, um Prozeduren für Sie zu verwalten. Allerdings gibt es eine Möglichkeit, die zugrunde liegende GraphDatabaseService zuzugreifen:

EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver(); 
GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService(); 

diese verwenden, können Sie Ihr Verfahren

((GraphDatabaseAPI) getDatabase()).getDependencyResolver().resolveDependency(Procedures.class).register(YourProcedure.class); 

jedoch nicht wirklich sicher registrieren, wenn dies mit der Prozedur Klasse in der Anwendung funktioniert Klassenpfad, aber es lohnt sich.

+0

Könnten Sie bitte aus Gründen der Klarheit hinzufügen, woher 'getDatabase()' kommt? –

+0

getDatabase() würde den Datenbankservice zurückgeben, der in den vorhergehenden Zeilen eingerichtet wurde – Luanne

Verwandte Themen