2

以下のコードを使用して、apacheスリングのjackrabbitに新しいカスタムタイプを作成するのに問題があります。これはJackrabbitでは問題なく機能しましたが、ApacheSlingでは機能しませんでした。私はスリングのためにこれを正しく行っていますか?ありがとう

次のコードは、「javax.jcr.InvalidItemStateException:Conflict」を表示します。私はスタンドアロンのスリングを使用しており、唯一のユーザーであるため、競合は発生しません。

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

2 に答える 2

5

Slingを使用している場合は、CNDファイルをOSGiバンドル(とにかくJavaコードが存在するはずの場所)に入れ、Slingにファイルの場所を指示するヘッダーを付けることで、これをすべて回避できます。

バンドルがアクティブ化されると、ノードタイプが自動的に登録されます。この例については、そのモジュールのpom.xmlで(またはMavenを使用していない場合は他の方法で)設定されているSling-Nodetypesバンドルヘッダーで宣言されているevent.cndファイルを参照してください。

とにかくSlingでJcrUtils.getRepositoryを必要としないことにも注意してください。リポジトリを取得する正しい方法は、すべてのSlingコンポーネントに対して一貫した方法でリポジトリのログインと構成を処理するSlingRepositoryOSGiサービスを使用することです。JavaコードのSlingRepositoryへの@Referenceを介してリポジトリを取得するか、Slingがサーブレットやスクリプトなどのリクエストハンドラに提供するリソースからJCRセッションを取得できます。Slingbucksサンプルは両方のメカニズムを使用します。

于 2013-01-17T08:39:27.227 に答える
0

InvalidItemStateExceptionのJavaDocsは、次の手がかりを提供します。

ノードとプロパティの書き込みメソッド、および試行された変更が別のセッションを介して行われた永続ワークスペースへの変更と競合する場合に保存および更新によってスローされる例外。また、そのオブジェクトがワークスペースから削除されたアイテムを表す場合、NodeおよびPropertyのメソッドによってスローされます。

古いセッションがまだ実行されていないことを確認しますか?デーモンプロセスが適切にシャットダウンされていない可能性がありますか?

于 2013-01-16T14:39:04.043 に答える