Java 创建一个新的mixin-in-sling
我在使用下面的代码为ApacheSling中的jackrabbit创建一个新的自定义类型时遇到困难。这在Jackrabbit上直接起作用,但在Apache Sling上不起作用。我这样做正确吗?谢谢 下面的代码给出了一个“javax.jcr.InvalidItemStateException:Conflict”。我使用一个独立的吊索,是唯一的用户,所以绝对没有冲突Java 创建一个新的mixin-in-sling,java,jackrabbit,jcr,sling,Java,Jackrabbit,Jcr,Sling,我在使用下面的代码为ApacheSling中的jackrabbit创建一个新的自定义类型时遇到困难。这在Jackrabbit上直接起作用,但在Apache Sling上不起作用。我这样做正确吗?谢谢 下面的代码给出了一个“javax.jcr.InvalidItemStateException:Conflict”。我使用一个独立的吊索,是唯一的用户,所以绝对没有冲突 Repository repository = JcrUtils.getRepository("http://localhost:8
Repository repository = JcrUtils.getRepository("http://localhost:8080/server");
Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry();
registry.registerNamespace("my", "http://my.com/v1.0");
CndImporter.registerNodeTypes(new FileReader("C:\\test.cnd"), session);
的JavaDocs提供了以下线索:
节点和属性的写入方法以及save引发的异常
如果尝试的更改与对的更改冲突,则刷新
通过另一个会话创建的持久工作区。也被
方法的节点和属性,如果该对象表示
已从工作区中删除
您是否确定没有任何旧会话仍在运行,可能是守护进程未正确关闭?如果您使用的是Sling,您可以通过将CND文件放在OSGi包(java代码应该驻留的地方)中来避免这一切,该包的头告诉Sling在哪里可以找到它 当您的包被激活时,您的节点类型将自动注册。有关这个示例,请参见在该模块中设置的Sling NodeType捆绑包头中声明的文件(或者如果您不使用Maven,则以任何其他方式) 另外请注意,您不应该在Sling中需要JcrUtils.getRepository。无论如何,获取存储库的正确方法是通过SlingRepository OSGi服务,它以一致的方式为您的所有Sling组件管理存储库登录和配置。您可以通过对java代码中SlingRepository的@Reference来获取存储库,或者从Sling提供给servlet和脚本等请求处理程序的资源中获取JCR会话。这两种机制都使用