Разверните процедуру на Neo4J при использовании встроенного драйвера

У меня есть логика, которая требует прямого доступа к узлу neo4j, но остальная часть приложения использует Spring Data Neo4j (SDN) для простоты. Я думал использовать процедуру с @Procedure, но я не уверен, как использовать эту процедуру при использовании встроенного драйвера neo4j и SDN4. Моя конфигурация очень скромна, как показано ниже:

@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();
}

С файлом свойств здесь:

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

С этой настройкой, где я могу разместить класс с @Procedure и @Context (для доступа к БД), где реализация SDN имеет доступ к нему во время развертывания войны.

1 ответ

Решение

Сам SDN не имеет функций для управления процедурами для вас. Тем не менее, есть способ получить доступ к базовому GraphDatabaseService:

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

Используя это, вы можете зарегистрировать вашу процедуру

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

Однако, не совсем уверен, работает ли это с вашим классом процедур в classpath приложения, хотя стоит попробовать.

Другие вопросы по тегам