我正在使用最新的 Spring3 和 JBoss Modeshape(指向使用文件系统连接器的联合存储库)开发“资源”控制器来检索资产。
当我使用控制器访问任何网页时,它会返回大部分图像,然后在“getNode”调用中在其他各种图像中抛出 NullPointerException ......
就我而言,我没有做任何特别的事情(我的测试用例工作正常):
- 创建/配置引擎(仅一次)
- 登录并获取会话
- 尝试找到节点
- 从会话中注销
代码看起来很像:
session = createSession();
Node node = session.getNode(path);
在第一次点击页面(有错误)之后,之后的每一次点击都很完美,从那时起一切正常。
我正在关注这个链接Heavy Concurrency: A better way to manage JCR Sessions for the session creation/management。
似乎我有多个线程试图在 Modeshape 中配置 JcrNodeDefinition。如果我将enureRequirePrimaryTypesLoaded()
方法标记为,synchronized
那么我永远不会收到错误。
有人对使用 Modeshape、并发和会话管理有任何经验/建议吗?
堆栈跟踪是:
java.lang.NullPointerException at org.modeshape.jcr.JcrNodeDefinition.ensureRequiredPrimaryTypesLoaded(JcrNodeDefinition.java:114) at org.modeshape.jcr.JcrNodeDefinition.allowsChildWithType(JcrNodeDefinition.java:275) at org.modeshape.jcr.RepositoryNodeTypeManager.findChildNodeDefinition( RepositoryNodeTypeManager.java:1142) 在 org.modeshape.jcr.JcrNodeTypeManager.findChildNodeDefinition(JcrNodeTypeManager.java:433) 在 org.modeshape.jcr.SessionCache$JcrNodeOperations.materialize(SessionCache.java:2711) 在 org.modeshape.graph.session .GraphSession$Node.load(GraphSession.java:1755) at org.modeshape.graph.session.GraphSession$Node.getPayload(GraphSession.java:3030) at org.modeshape.jcr.AbstractJcrNode.getNode(AbstractJcrNode.java:950 ) 在 org.modeshape.jcr.AbstractJcrNode.getNode(AbstractJcrNode.java:96)在 com.acme.beans.contents.FileNodeAdapter.(FileNodeAdapter.java:26) 在 com.acme.web.views.ResourceController.getStream(ResourceController.java:77) 在 com.acme.web.views.ResourceController。处理资源(ResourceController.java:46)