javax.jcr.nodetype.ConstraintViolationException: AEMでユーザーとグループを移行する際に OakConstraint0027 エラーが発生する
ユーザーおよびグループをパッケージ化する場合は、管理者ユーザーや匿名ユーザーを含む、すぐに使用できるユーザーのパッケージ化を避けます。 結合パッケージフィルターモードを使用する必要があります。
説明 description
環境
Adobe Experience Manager 6.x (AEM 6.x)
AdobeCommunique 5.x (Adobe CQ5.x)
問題
パッケージマネージャーを使用してユーザーとグループをあるAEM インスタンスから別のインスタンスに移行すると、次のようなエラーが発生します。
26.01.2017 16:03:20.024 *ERROR* [ qtp2078058939-7783] org.apache.jackrabbit.vault.fs.io.Importer Error while committing : javax.jcr.nodetype.ConstraintViolationException: OakConstraint0027: The admin user cannot be removed.
javax.jcr.nodetype.ConstraintViolationException: OakConstraint0027: The admin user cannot be removed.
Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakConstraint0027: The admin user cannot be removed
解決策 resolution
ユーザーおよびグループをパッケージ化する場合は、管理者ユーザーや匿名ユーザーなど、あらかじめ用意されているユーザーはパッケージ化しないでください。
結合パッケージフィルターモードを使用する必要があります。
問題を解決するには、次の手順に従います 。
-
CRXDE lite アプリ
/crx/de/index.jspージに移動して、(古いシステムの)管理者ユーザーとしてログインします。 -
ツール に移動
>クエリ 。 -
下部の クエリ ボックスに次のクエリを入力して、管理者ユーザーを見つけます。
code language-none /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="admin"] -
「 実行 」をクリックして、結果に含まれる管理者ユーザーノードのパスをテキストファイルにコピーします。
-
匿名ユーザーについて、次のクエリを使用して 手順 3 を繰り返します。
code language-none /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="anonymous"] -
「 実行 」をクリックして、結果に含まれる匿名ユーザーノードのパスをテキストファイルにコピーします(これで、「管理者」用と「匿名」用の 2 つのパスが得られるはずです)。
例:
/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv- パッケージを作成するシステムの管理者ユーザー/home/users/K/Kj1406Qo9IDODc_nk5Ib- パッケージを作成しているシステムの匿名ユーザー -
AEM パッケージマネージャー(
http://host:port/crx/packmgr/index.jsp)に移動して、admin としてログインします。 -
users という名前のパッケージを作成します。
-
/home/usersのパッケージ設定フィルターに次の除外ルールを追加します(/home/usersフィルター上)。code language-none exclude /home/users/.*/.tokens exclude /home/users/Q/QY5FIMXeQIbGpwZtQ3Dv exclude /home/users/K/Kj1406Qo9IDODc_nk5Ib exclude /home/users/a/admin exclude /home/users/a/anonymous exclude /home/users/system exclude /home/users/geometrixx exclude /home/users/media exclude /home/users/projects exclude /home/users/mac -
パッケージをビルドします。
-
パッケージをダウンロードします。
-
package.zipファイルをコンピューターに解凍します。 -
META-INF/vault/filter.xmlファイルをテキストエディターで開きます。 -
タグに
mode="merge"を追加します。例:
code language-none <?xml version="1.0" encoding="UTF-8"?> <workspaceFilter version="1.0"> <filter root="/home/users" mode="merge"> <exclude pattern="/home/users/.*/.tokens"/> <exclude pattern="/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv"/> <exclude pattern="/home/users/K/Kj1406Qo9IDODc_nk5Ib"/> <exclude pattern="/home/users/a/admin"/> <exclude pattern="/home/users/a/anonymous"/> <exclude pattern="/home/users/system"/> <exclude pattern="/home/users/geometrixx"/> <exclude pattern="/home/users/media"/> <exclude pattern="/home/users/projects"/> <exclude pattern="/home/users/mac"/> </filter> </workspaceFilter> -
変更したパッケージコンテンツを再圧縮して、変更内容を含めるようにします。
-
フィルタールール
/home/groupsを含む groups パッケージを作成します。 -
groups パッケージに対して 手順 10~15 を繰り返します。
-
( アップグレードのみ ):新しいAEM バージョンへの移行を行う場合は、新しいローカル AEM インスタンス(
nosamplecontent付き)をインストールし、そこに users パッケージと groups パッケージをインストールします。 次に、そのインスタンスに対してインプレースアップグレードを実行します。 アップグレード後、ユーザーを再度パッケージ化してから、グループを再度パッケージ化し、パッケージの新しいバージョンをダウンロードします。 -
新しいシステムに users パッケージをインストールします。
-
新しいシステムに groups パッケージをインストールします。