AEM JCR へのプログラムからのアクセス方法 how-to-programmatically-access-the-aem-jcr
Adobe Experience の構成要素の 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 を参照してください。
jackrabbit-standalone-2.4.0.jar
ファイルを追加します。この JAR ファイルは Java™ JCR API web ページ(https://jackrabbit.apache.org/jcr/jcr-api.html)から取得できます。リポジトリインスタンスの作成 create-a-repository-instance
リポジトリに接続して接続を確立するには様々な方法がありますが、この開発向け記事では、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 インスタンスの作成 create-a-session-instance
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()));
ノードインスタンスの作成 create-a-node-instance
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!");
ノードの値の取得 retrieve-node-values
ノードとその値を取得するには、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 リポジトリ内でのノードの作成 create-nodes-in-the-adobe-cq-repository
次の 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 で新しいノードを確認できます。