2017-02-07 8 views
1

私はAEM 5.6から6.2のアップグレードプロジェクトを進めています。 aem 5.6環境には、無効な文字が含まれているノードがいくつかあります(rte [2]のようなJCR命名規則は、命名規則に従わないノード名の1つです)が、どういうわけか5.6環境でそれらのノードを複製できます。それをaem 6.2にアップグレードした後は、JCRがより制限されているように見え、無効な​​文字がある場合、ノードが複製を許可しないように見えます。 エラー:com.day.cq.replication.ReplicationException:ノードインポート中のリポジトリエラー:インデックスを含む名前を使用して新しいノードを作成できません AEMを設定する方法はありますか6.2では、JCRノード名のチェックやその他の解決策を停止しますか?aem-6-2-node-containing-invalid-jcr-namesの複製の問題

+0

あなたの代わりに、レプリケーションの同じノード・フィルタのパッケージのインストールを試してみましたしましたか? – VAr

+0

はい私も試したことがあります...もし私たちがaem 6.2に直接コンテンツパッケージをインストールすると、無効なjcr名を持つノードをスキップします。 – Arpit

+0

オーク・ワークスペースの制限のために** if(oakName.contains( "[")){throw new RepositoryException( "インデックスを含む名前を使用して新しいノードを作成できません"); } **と私はあなたがこの制約から逃れることができるとは思わない。 – VAr

答えて

1

有効な文字として[を許可していないため、簡単な回避策はありません。それは同じ名前の兄弟のような限界の一つです。

6.2にアップグレード/移行する前に、これらのノードを変更することをお勧めします。これはビジネスにとって複雑でコストがかかるかもしれませんが、6.2ではそれが許されません。

背景として、同じ名前の兄弟のための文法構文のためのねじれたサポートのため、古いバージョンで許可されました。

これらはすべて、AEM 5.xですぐに使用されるものではないため、すべてのコンテンツノードであると仮定して、この命名規則に従います。

それを修正するにはいくつかの方法:

  1. は、すべての参照間でパスを照会し、名前を変更するカスタムサーブレットを書きます。これらの名前の変更については、コンテンツをテストする必要があります。
  2. ノードの名前を変更するには、Groovyコンソール(https://github.com/OlsonDigital/aem-groovy-console)を使用します。

どちらの場合でも、構造体がオークに準拠しないため、移行前にノードを変更する必要があるため、crx2oakコミットフックも使用できません。これは、インプレースアップグレードとサイドバイサイドマイグレーションの両方で実行できます。これは、マイグレーションの前に修正しなければならない同じ名前の兄弟の問題に似ています。

  1. 書き込みクエリは/コンテンツ/個人用サイト-、/コンテンツ/個人用サイト-Bなどしないでくださいのようなトップレベルのノード上の無効なノード名を検索する:

    役立つかもしれないいくつかの効率技術

    /contentにルートレベルのクエリを実行して、 のトラバーサルにダウングレードし、実行を停止します。
  2. すべての参照が同じコミットで更新されていることを確認してください。カスタムサーブレットを使用している場合は、すべてのノード名とそれに対応する参照を更新した後でsession.save()を呼び出します。私はコメントで言及したよう
+0

'['文字を含む4000個のノードがあります。これを削除/変更するにはどのような方法が最も効率的でしょうか。 – Arpit

+0

私の応答を更新しました –

+0

あなたの助けを借りてありがとう – Arpit

0

oak-upgradeのようなツールを使用して移行しても問題が解決しない場合は、教えてください。

toolは堅牢で、このツールを使用して移行するために特定のサブツリーを柔軟に設定することができます。

+0

はい、それは私たちが行ったことです...リポジトリをアップグレードするためにオークの移行ツールを使用しました – Arpit

+0

オークツールを使用してリポジトリをアップグレードした後でも、この問題は引き続き発生します。 – Arpit

1

は、このレプリケーション障害があるため

//handle index if (oakName.contains("[")) { throw new RepositoryException("Cannot create a new node using a name including an index"); }

以下のコードスニペットとしてオークワークスペースの制限の原因と私はあなたがそれを必要に応じて、この制約を免れることはできないと感じ一貫性

を維持するためのリポジトリでは、クエリ

以下による 「[」で終わるのノードを、見つけることができます
SELECT [jcr:path] FROM [nt:base] WHERE ISDESCENDANTNODE('/content/path/') AND [jcr:path] like '%\[' 

、あなたがCURLまたはSlingPostServlet方法

いくつかの有用な記事が打撃されているを使用することができますJCR/CRXノードを変更するには。

https://github.com/paulrohrbeck/aem-links/blob/master/curl_cheatsheet.md http://sling.apache.org/site/manipulating-content-the-slingpostservlet-servletspost.html

+0

あなたの助けてくれてありがとう。ちょうどあなたがクエリに基づいてノードの名前を変更することができるcurlコマンドを知っているのだろうか? – Arpit

関連する問題