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コンテンツリポジトリへのCQデータの永続化を参照してください。

メモ

JCR APIを使用するには、Javaアプリケーションのクラスパスにjackrabbit-standalone-2.4.0.jarファイルを追加します。 この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番目のパラメーターを渡す際に、Stringオブジェクトの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

このページ