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

ユーザーおよびグループをパッケージ化する場合は、管理者ユーザーや匿名ユーザーなど、あらかじめ用意されているユーザーはパッケージ化しないでください。

結合パッケージフィルターモードを使用する必要があります。

問題を解決するには、次の手順に従います

  1. CRXDE lite アプリ /crx/de/index.jsp ージに移動して、(古いシステムの)管理者ユーザーとしてログインします。

  2. ツール に移動 > クエリ

  3. 下部の クエリ ボックスに次のクエリを入力して、管理者ユーザーを見つけます。

    code language-none
    /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="admin"]
    
  4. 実行 」をクリックして、結果に含まれる管理者ユーザーノードのパスをテキストファイルにコピーします。

  5. 匿名ユーザーについて、次のクエリを使用して 手順 3 を繰り返します。

    code language-none
    /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="anonymous"]
    
  6. 実行 」をクリックして、結果に含まれる匿名ユーザーノードのパスをテキストファイルにコピーします(これで、「管理者」用と「匿名」用の 2 つのパスが得られるはずです)。

    例:

    /home/users/Q/QY5FIMXeQIbGpwZtQ3Dv - パッケージを作成するシステムの管理者ユーザー

    /home/users/K/Kj1406Qo9IDODc_nk5Ib - パッケージを作成しているシステムの匿名ユーザー

  7. AEM パッケージマネージャー(http://host:port/crx/packmgr/index.jsp)に移動して、admin としてログインします。

  8. users という名前のパッケージを作成します。

  9. /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
    
  10. パッケージをビルドします。

  11. パッケージをダウンロードします。

  12. package.zip ファイルをコンピューターに解凍します。

  13. META-INF/vault/filter.xml ファイルをテキストエディターで開きます。

  14. タグに 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>
    
  15. 変更したパッケージコンテンツを再圧縮して、変更内容を含めるようにします。

  16. フィルタールール /home/groups を含む groups パッケージを作成します。

  17. groups パッケージに対して 手順 10~15 を繰り返します。

  18. アップグレードのみ ):新しいAEM バージョンへの移行を行う場合は、新しいローカル AEM インスタンス(nosamplecontent 付き)をインストールし、そこに users パッケージと groups パッケージをインストールします。 次に、そのインスタンスに対してインプレースアップグレードを実行します。 アップグレード後、ユーザーを再度パッケージ化してから、グループを再度パッケージ化し、パッケージの新しいバージョンをダウンロードします。

  19. 新しいシステムに users パッケージをインストールします。

  20. 新しいシステムに groups パッケージをインストールします。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f