Playframework Neo4j OGM不';迁移到版本3后,无法在Play Framework HTTP GET中工作
今天,我将neo4j ogm迁移到了最新版本(3.0.1)。我遵循了所有的建议,但现在当我尝试查询一个实体时,我得到了一个MappingException,因为系统似乎无法找到实体类。在进一步的调查和阅读之后,我尝试在HTTP POST响应中进行查询,它工作得很好,因此使用neo4j ogm会话在GET HTTP响应中进行查询似乎是一个问题,正如在另一个问题回答中所建议的那样。对这里可能发生的事情有什么想法吗 例外情况如下所示:Playframework Neo4j OGM不';迁移到版本3后,无法在Play Framework HTTP GET中工作,playframework,neo4j-ogm,Playframework,Neo4j Ogm,今天,我将neo4j ogm迁移到了最新版本(3.0.1)。我遵循了所有的建议,但现在当我尝试查询一个实体时,我得到了一个MappingException,因为系统似乎无法找到实体类。在进一步的调查和阅读之后,我尝试在HTTP POST响应中进行查询,它工作得很好,因此使用neo4j ogm会话在GET HTTP响应中进行查询似乎是一个问题,正如在另一个问题回答中所建议的那样。对这里可能发生的事情有什么想法吗 例外情况如下所示: play.api.http.HttpErrorHandlerExc
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[MappingException: Error mapping GraphModel to instance of nodes.UserNode]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:255)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:180)
at play.core.server.AkkaHttpServer$$anonfun$13$$anonfun$apply$1.applyOrElse(AkkaHttpServer.scala:251)
at play.core.server.AkkaHttpServer$$anonfun$13$$anonfun$apply$1.applyOrElse(AkkaHttpServer.scala:250)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:346)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:345)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at play.api.libs.streams.Execution$trampoline$.execute(Execution.scala:70)
at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)
at scala.concurrent.impl.Promise$DefaultPromise.scala$concurrent$impl$Promise$DefaultPromise$$dispatchOrAddCallback(Promise.scala:280)
Caused by: org.neo4j.ogm.exception.core.MappingException: Error mapping GraphModel to instance of nodes.UserNode
at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:206)
at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:135)
at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:89)
at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:70)
at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:46)
at org.neo4j.ogm.session.Neo4jSession.load(Neo4jSession.java:155)
at controllers.UsersController.getUserMetrics(UsersController.java:372)
at controllers.UsersController.index(UsersController.java:66)
at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$2$$anonfun$apply$2.apply(Routes.scala:891)
at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$2$$anonfun$apply$2.apply(Routes.scala:891)
Caused by: org.neo4j.ogm.exception.core.MappingException: Unable to load class with FQN: nodes.UserNode
at org.neo4j.ogm.metadata.reflect.EntityFactory.instantiateObjectFromTaxa(EntityFactory.java:109)
at org.neo4j.ogm.metadata.reflect.EntityFactory.newObject(EntityFactory.java:58)
at org.neo4j.ogm.context.GraphEntityMapper.mapNodes(GraphEntityMapper.java:217)
at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:203)
at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:135)
at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:89)
at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:70)
at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:46)
at org.neo4j.ogm.session.Neo4jSession.load(Neo4jSession.java:155)
at controllers.UsersController.getUserMetrics(UsersController.java:372)
Caused by: java.lang.ClassNotFoundException: nodes.UserNode
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.neo4j.ogm.metadata.reflect.EntityFactory.instantiateObjectFromTaxa(EntityFactory.java:106)
at org.neo4j.ogm.metadata.reflect.EntityFactory.newObject(EntityFactory.java:58)
at org.neo4j.ogm.context.GraphEntityMapper.mapNodes(GraphEntityMapper.java:217)
at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:203)
at org.neo4j.ogm.context.GraphEntityMapper.map(GraphEntityMapper.java:135)
neo4j调试日志如下所示:
[info] o.n.o.d.b.r.BoltRequest - Request: MATCH (n:`UserNode`) WHERE ID(n) = { id } WITH n RETURN n,[ [ (n)<-[r_p1:`PEER`]-(u1:`UserNode`) | [ r_p1, u1 ] ] ] with params {id=1}
[debug] o.n.o.d.b.d.BoltDriver - No current transaction, starting a new one
[debug] o.n.o.d.b.d.BoltDriver - Native transaction: org.neo4j.driver.internal.ExplicitTransaction@6acdd993
[debug] o.n.o.d.b.t.BoltTransaction - Committing native transaction: org.neo4j.driver.internal.ExplicitTransaction@6acdd993
[debug] o.n.o.t.Transaction - Thread 62: Commit transaction extent: 0
[debug] o.n.o.t.Transaction - Thread 62: Committed
[debug] o.n.o.t.Transaction - Thread 62: Close transaction extent: 0
[debug] o.n.o.t.Transaction - Thread 62: Closing transaction
[debug] o.n.o.m.MetaData - looking for concrete class to resolve label: UserNode
[debug] o.n.o.m.MetaData - concrete class found: org.neo4j.ogm.metadata.ClassInfo@7abf416c. comparing with what's already been found previously...
[debug] o.n.o.m.MetaData - UserNode resolving class: org.neo4j.ogm.metadata.ClassInfo@7abf416c
[error] application -
[info]o.n.o.d.b.r.BoltRequest-请求:匹配(n:`UserNode`),其中ID(n)={ID}和n返回n,[[(n)核心问题似乎是ClassNotFoundException
。看起来neo4j ogm正在尝试加载节点。UserNode
类,但找不到它
neo4j ogm可能没有使用正确的类加载器
。这是一个常见的问题,因为在“开发模式”中使用了几个类加载器
,而默认的类加载器通常不正确
要解决此问题,首先通过注入Play.Environment
(Play的Java API)或Play.API.Environment
(Play的Scala API)来获取Play的正确ClassLoader
。然后调用环境上的ClassLoader
属性来获取Play的ClassLoader
接下来,通过显式地将类加载器
传递给neo4j ogm(如果API支持),或者使用Thread.setContextClassLoader()
设置当前线程的默认类加载器
(确保完成后还原旧的类加载器
)
neo4j ogm可能没有使用正确的类加载器
。这是一个常见的问题,因为在“开发模式”中使用了几个类加载器
,而默认的类加载器通常不正确
要解决此问题,首先通过注入Play.Environment
(Play的Java API)或Play.API.Environment
(Play的Scala API)来获取Play的正确ClassLoader
。然后调用环境上的ClassLoader
属性来获取Play的ClassLoader
接下来,通过显式地将类加载器
传递给neo4j ogm(如果API支持),或者使用Thread.setContextClassLoader()
设置当前线程的默认类加载器
(确保完成后还原旧的类加载器
).建议的类加载器问题实际上就是问题所在。但是,neo4j ogm有一种方法可以自行解决。正如建议的那样,neo4j ogm在加载类型时也可以不依赖类加载器。代码已经修复,在ogm的下一个版本上这应该是可以的(出现问题的当前版本是3.0.1).建议的类加载器问题实际上就是问题所在。但是,neo4j ogm有一种方法可以自行解决。正如建议的那样,neo4j ogm在加载类型时也可以不依赖类加载器。代码已经修复,在ogm的下一个版本上这应该是可以的(出现问题的当前版本是3.0.1).neo4j ogm团队正在对其进行调查。neo4j ogm团队正在对其进行调查