提问者:小点点

在吊索中创建一个新的混音


我在使用下面的代码为apache吊索中的jackRabbit创建新的自定义类型时遇到了问题。这在JackRabbit上直接工作得很好,但在Apache Sling上却不行。我对吊索这样做正确吗?谢谢

下面的代码给了我一个“javax. jcr.InvalidItemStateException:冲突”。我使用的是独立的吊索,是唯一的用户,所以绝对没有冲突。

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);

共2个答案

匿名用户

如果您正在使用Sling,您可以通过将CND文件放在OSGi包中(无论如何您的java代码都应该驻留在其中)来避免这一切,并使用一个标头告诉Sling在哪里可以找到它。

当您的捆绑包被激活时,您的节点类型将自动注册。有关此示例,请参阅event. cnd文件,该文件在该模块的pom.xml中设置的Sling-Nodetypes捆绑包标头中声明(如果您不使用Maven,则以任何其他方式)。

还要注意,无论如何,你不应该在Sling中需要JcrUtils. getRepository,获取存储库的正确方法是通过SlingRepository OSGi服务,该服务以一致的方式为所有Sling组件处理存储库登录和配置。您可以通过java代码中的@引用SlingRepository来获取存储库,或者从Sling提供的资源中获取JCR会话以请求servlet和脚本等处理程序。Sling的示例使用这两种机制。

匿名用户

InvalidItemStateException的JavaDocs提供了以下线索:

如果尝试的更改会与通过另一个Session对持久工作区进行的更改发生冲突,则由Node和Property的write方法以及保存和刷新引发异常。如果该对象表示已从工作区中删除的项目,则由Node和Property的方法引发。

您确定没有任何旧会话仍在运行,可能是守护进程尚未正确关闭?