AEM JCR へのプログラムからのアクセス方法

Adobe Marketing Cloud に搭載されている Adobe CQ リポジトリ内にあるノードとプロパティを、プログラムから変更できます。CQ リポジトリにアクセスするには、Java Content Repository(JCR)API を使用します。Java JCR API を使用すれば、Adobe CQ リポジトリ内にあるコンテンツに対して、作成、置換、更新および削除(CRUD)の操作を実行できます。Java JCR APIについて詳しくは、https://jackrabbit.apache.org/jcr/jcr-api.htmlを参照してください。

メモ

この開発向けの記事では、外部 Java アプリケーションから Adobe CQ JCR を変更します。これに対して、OSGi バンドル内から JCR API を使用して JCR を変更することもできます。詳しくは、Java Content RepositoryにCQデータを保存するを参照してください。

メモ

JCR APIを使用するには、jackrabbit-standalone-2.4.0.jarファイルをJavaアプリケーションのクラスパスに追加します。 このJARファイルは、Java JCR APIのWebページ(https://jackrabbit.apache.org/jcr/jcr-api.html)から取得できます。

メモ

JCR Query API を使用して Adobe CQ JCR へのクエリーを実行する方法については、JCR API を使用した Adobe Experience Manager データのクエリーを参照してください。

Repository インスタンスの作成

リポジトリに接続して接続を確立するには様々な方法がありますが、この開発向け記事では、org.apache.jackrabbit.commons.JcrUtils クラスに属する静的メソッドを使用します。このメソッドの名前は getRepository です。このメソッドは、Adobe CQ サーバーの URL を表す文字列パラメーターを受け取ります。例えば、http://localhost:4503/crx/server のように指定します。

getRepository メソッドは、Repository インスタンスを返します。次に、このコード例に示します。

//Create a connection to the AEM JCR repository running on local host
Repository repository = JcrUtils.getRepository("http://localhost:4503/crx/server");

Session インスタンスの作成

RepositoryインスタンスはCRXリポジトリを表します。 Repositoryインスタンスを使用して、リポジトリとのセッションを確立します。 セッションを作成するには、Repositoryインスタンスのloginメソッドを呼び出し、javax.jcr.SimpleCredentialsオブジェクトを渡します。 loginメソッドは、javax.jcr.Sessionインスタンスを返します。

SimpleCredentialsオブジェクトを作成するには、コンストラクターを使用し、次の文字列値を渡します。

  • ユーザー名
  • 対応するパスワード

2番目のパラメーターを渡す場合は、文字列オブジェクトのtoCharArrayメソッドを呼び出します。 次のコードは、javax.jcr.Sessioninstanceを返すloginメソッドを呼び出す方法を示しています。

//Create a Session instance
javax.jcr.Session session = repository.login( new SimpleCredentials("admin", "admin".toCharArray()));

Node インスタンスの作成

Sessionインスタンスを使用してjavax.jcr.Nodeインスタンスを作成します。 Nodeインスタンスを使用して、ノード操作を実行できます。 例えば、新しいノードを作成できます。 ルートノードを表すノードを作成するには、次のコード行に示すように、SessionインスタンスのgetRootNodeメソッドを呼び出します。

//Create a Node
Node root = session.getRootNode();

Nodeインスタンスを作成したら、別のノードの作成や値の追加などのタスクを実行できます。 例えば、次のコードは2つのノードを作成し、2番目のノードに値を追加します。

// Store content
Node day = adobe.addNode("day");
day.setProperty("message", "Adobe CQ is part of the Adobe Digital Marketing Suite!");

ノードの値の取得

ノードとその値を取得するには、NodeインスタンスのgetNodeメソッドを呼び出し、ノードへの完全修飾パスを表す文字列値を渡します。 前のコードの例で作成したノード構造を考えてみましょう。 dayノードを取得するには、次のコードに示すように、adobe/dayを指定します。

// Retrieve content
Node node = root.getNode("adobe/day");
System.out.println(node.getPath());
System.out.println(node.getProperty("message").getString());

Adobe CQ リポジトリ内でのノードの作成

以下のJavaコードの例は、Adobe CQに接続し、Sessionインスタンスを作成し、新しいノードを追加するJavaクラスを表しています。 ノードにデータ値が割り当てられ、ノードの値とパスがコンソールに書き出されます。 セッションが終了したら、必ずログアウトします。

/*
 * This Java Quick Start uses the jackrabbit-standalone-2.4.0.jar
 * file. See the previous section for the location of this JAR file
 */

import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Node;

import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.core.TransientRepository;

public class GetRepository {

public static void main(String[] args) throws Exception {

try {

    //Create a connection to the CQ repository running on local host
    Repository repository = JcrUtils.getRepository("http://localhost:4503/crx/server");

   //Create a Session
   javax.jcr.Session session = repository.login( new SimpleCredentials("admin", "admin".toCharArray()));

  //Create a node that represents the root node
  Node root = session.getRootNode();

  // Store content
  Node adobe = root.addNode("adobe");
  Node day = adobe.addNode("day");
  day.setProperty("message", "Adobe CQ is part of the Adobe Digital Marketing Suite!");

  // Retrieve content
  Node node = root.getNode("adobe/day");
  System.out.println(node.getPath());
  System.out.println(node.getProperty("message").getString());

  // Save the session changes and log out
  session.save();
  session.logout();
  }
 catch(Exception e){
  e.printStackTrace();
  }
 }
}

完全なコードの例を実行してノードを作成した後、次の図に示すように、CRXDE Lite​に新しいノードを表示できます。

chlimage_1-68

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now