Я пытаюсь найти пример или демонстрацию «Как интегрировать OGM с неуправляемым расширением», но не могу найти хороший пример.
Я попытался использовать restapi как неуправляемое расширение, и индивидуально он работает нормально, но OGM имеет возможность сопоставления интеллектуальных объектов и может быть достигнуто с помощью Session, а Session получен из
SessionFactory.
private final static SessionFactory sessionFactory = new SessionFactory("some.domain");
sessionFactory .openSession();
Теперь, как OGM можно использовать в интеграции с неуправляемым расширением?
Может ли кто-нибудь помочь мне в этом же.
Редактировать 1
Пожалуйста, проверьте снимок экрана ниже: 
РЕДАКТИРОВАТЬ 2
Ниже приведен код, который мы написали
import org.neo4j.ogm.drivers.embedded.extension.OgmPluginInitializer;
public class MyApplicationPluginInitializer extends OgmPluginInitializer {
public MyApplicationPluginInitializer(String packages) {
super(packages);
}
}
Класс TopologyExtController
@Path("/")
public class TopologyExtController {
@javax.ws.rs.core.Context
public org.neo4j.ogm.session.Session session;
public TopologyExtController( ) {
}
@POST
@Path("/uiv/topology")
public Response getTopology(TopologyDescription topology, @javax.ws.rs.core.Context HttpHeaders headers) {
try{
ObjectMapper mapper = new ObjectMapper();
Map convertValue = mapper.convertValue(topology, Map.class);
Map<String, Object> map = new HashMap<>();
map.put("topology", convertValue);
//OGM session used execute the procedure and return the mapped result to end user.
Result query = session.query("call uiv.traversal($topology)",map);
Iterator<Map<String, Object>> iterator = query.iterator();
if (iterator.hasNext()) {
Map<String, Object> next = iterator.next();
Object object = next.get("rootNodes");
return Response.ok(object).status(200).build();
}
}catch (Exception e)
{
e.printStackTrace();
}
return Response.ok("Something went wrong").status(400).build();
}
}
Запись в META-INF \ META-INF \ services \ org.neo4j.server.plugins.PluginLifecycle
- framework.traversal.ext.config.MyApplicationPluginInitializer
Но мы получаем ошибку
Nov 30 15:17:27 surerest2 neo4j: 2018-11-30 09:47:27.611+0000 ERROR The following errors and warnings have been detected with resource and/or provider classes: Nov 30 15:17:27 surerest2 neo4j: SEVERE: Missing dependency for field: public org.neo4j.ogm.session.Session framework.traversal.ext.ogm.controller.TopologyExtController.session Nov 30 15:17:27 surerest2 neo4j: 2018-11-30 09:47:27.612+0000 WARN unavailable Nov 30 15:17:27 surerest2 neo4j: com.sun.jersey.spi.inject.Errors$ErrorMessagesException Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) Nov 30 15:17:27 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577) Nov 30 15:17:27 surerest2 neo4j: at javax.servlet.GenericServlet.init(GenericServlet.java:244) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:665) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:423) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:760) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:348) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:785) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:261) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:133) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:115) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:133) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.server.Server.start(Server.java:418) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.server.Server.doStart(Server.java:385) Nov 30 15:17:27 surerest2 neo4j: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:320) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:152) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:321) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:102) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:527) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:445) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:212) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:111) Nov 30 15:17:27 surerest2 neo4j: at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:79) Nov 30 15:17:27 surerest2 neo4j: at com.neo4j.server.enterprise.CommercialEntryPoint.main(CommercialEntryPoint.java:22) Nov 30 15:17:27 surerest2 neo4j: 2018-11-30 09:47:27.639+0000 ERROR Failed to start Neo4j on 127.0.0.1:7474: org.neo4j.server.web.NeoServletContainer-737fd68@2dde7c07==org.neo4j.server.web.NeoServletContainer,jsp=null,order=-1,inst=false Nov 30 15:17:27 surerest2 neo4j: 2018-11-30 09:47:27.658+0000 INFO Stopping... Nov 30 15:17:28 surerest2 neo4j: 2018-11-30 09:47:28.279+0000 INFO Stopped. Nov 30 15:17:28 surerest2 neo4j: 2018-11-30 09:47:28.281+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@6c49db66' was successfully initialized, but failed to start. Please see the attached cause exception "null". Starting Neo4j failed: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@6c49db66' was successfully initialized, but failed to start. Please see the attached cause exception "null". Nov 30 15:17:28 surerest2 neo4j: org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@6c49db66' was successfully initialized, but failed to start. Please see the attached cause exception "null". Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:68) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:220) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:111) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:79) Nov 30 15:17:28 surerest2 neo4j: at com.neo4j.server.enterprise.CommercialEntryPoint.main(CommercialEntryPoint.java:22) Nov 30 15:17:28 surerest2 neo4j: Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@6c49db66' was successfully initialized, but failed to start. Please see the attached cause exception "null". Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:466) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:212) Nov 30 15:17:28 surerest2 neo4j: ... 3 more Nov 30 15:17:28 surerest2 neo4j: Caused by: javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-737fd68@2dde7c07==org.neo4j.server.web.NeoServletContainer,jsp=null,order=-1,inst=false Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:686) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:423) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:760) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:348) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:785) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:261) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:133) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:115) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:133) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.server.Server.start(Server.java:418) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.server.Server.doStart(Server.java:385) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:320) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:152) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:321) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:102) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:527) Nov 30 15:17:28 surerest2 neo4j: at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:445) Nov 30 15:17:28 surerest2 neo4j: ... 5 more Nov 30 15:17:28 surerest2 neo4j: Caused by: com.sun.jersey.spi.inject.Errors$ErrorMessagesException Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) Nov 30 15:17:28 surerest2 neo4j: at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577) Nov 30 15:17:28 surerest2 neo4j: at javax.servlet.GenericServlet.init(GenericServlet.java:244) Nov 30 15:17:28 surerest2 neo4j: at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:665) Nov 30 15:17:28 surerest2 neo4j: ... 27 more





Это вообще невозможно. Neo4j-OGM абстрагирует все транспортные режимы (Bolt, HTTP, встроенный) с помощью Cypher.
... но если ваше неуправляемое расширение работает полностью отдельно от вашей бизнес-логики (например, без границ транзакций, которые также содержат вызовы Neo4j-OGM), вы можете создать вызов напрямую через HTTP-драйвер (Neo4j-OGM):
HttpDriver httpDriver = (HttpDriver) sessionFactory.getDriver();
CloseableHttpResponse response = httpDriver.executeHttpRequest(new HttpGet("http://somewhere"));
response.getEntity().getContent()....
обратите внимание, что это всего лишь хитрость для использования необработанного соединения.
Редактировать (добавить информацию для запуска внутри Neo4j):
Как описано в документации, вам необходимо предоставить свой собственный OgmPluginInitializer, как вы уже сделали. Но ваша реализация / конструктор действительно ожидает, что пакет будет где-то предоставлен. Расширение службы, загружающее расширение, не знает о структуре вашего пакета, поэтому класс инициализатора должен выглядеть как sth. как
public class MyApplicationPluginInitializer extends OgmPluginInitializer {
public MyApplicationPluginInitializer() {
super("Your package to scan");
}
}
В качестве предупреждения: API, используемый для предоставления этой функции, устарел в Neo4j 3.5. и может быть удален в следующих версиях. Как следствие, эта функция может подвергнуться рефакторингу или удалению в зависимости от изменений.
Использование его в неуправляемом расширении на стороне сервера - не лучшая идея. Если вы получаете все зависимости в расширении, теоретически возможно передать GraphDatabaseService в экземпляр EmbeddedDriver, но вы потеряете все преимущества прямого доступа к базе данных, и, самое главное, вы также должны перенести весь свой домен как библиотеку в расширение.
Пожалуйста, посмотрите эту [ссылку] (neo4j.com/docs/ogm-manual/current/referenceneo4j.com/docs/ogm-manual/current/reference/…). Мы пробуем этот подход, но не можем заставить его работать?
OGM мы используем здесь для сопоставления сущностей домена, потому что расширение ничего не знает о сопоставлении.
Я добавил код, который мы пробовали, и исключение, которое мы получаем. Нужна ваша помощь. Спасибо
Разве проблема не в том, что вы не передаете фактические пакеты в MyApplicationPluginInitializer? Пожалуйста, посмотрите документацию еще раз, там написано, что вам нужно установить свои собственные пакеты в конструкторе. Расширение службы не знает, как создать экземпляр инициализатора вашего плагина.
Возможно, мне что-то не хватает в вашем комментарии, но вы можете поделиться кодом или примером.
Можете ли вы сказать мне, какую функцию вы собираетесь удалить OGM, неуправляемое расширение или OgmPluginInitializer?
Глядя на эту документацию neo4j.com/docs/java-reference/current/exnding-neo4j/… и проверяя класс Neo4j, от которого зависит Neo4j-OGM, который устарел в 3.5, SessionFactory должен создаваться в конструкторе расширения вручную (пример в документации).
Спасибо за вашу помощь, проверю его в эти выходные и задам дополнительные вопросы, если возникнут сомнения.
Спасибо за ответ. Мне нужен сеанс OGM в моем неуправляемом расширении, возможно ли это?