如何以编程方式访问AEM JCR

您可以通过编程方式修改位于Adobe CQ存储库中的节点和属性,该存储库是Adobe Marketing Cloud的一部分。 要访问CQ存储库,请使用Java内容存储库(JCR)API。 您可以使用Java JCR API对位于Adobe CQ存储库中的内容执行创建、替换、更新和删除(CRUD)操作。 有关Java JCR API的详细信息,请参阅https://jackrabbit.apache.org/jcr/jcr-api.html

注意

本开发文章从外部Java应用程序修改Adobe CQJCR。 相反,您可以使用JCR API从OSGi捆绑包中修改JCR。 有关详细信息,请参阅Java内容存储库](https://helpx.adobe.com/experience-manager/using/persisting-cq-data-java-content1.html)中的[保持CQ数据。

注意

要使用JCR API,请将jackrabbit-standalone-2.4.0.jar文件添加到Java应用程序的类路径中。 可以从Java JCR API网页https://jackrabbit.apache.org/jcr/jcr-api.html获取此JAR文件。

注意

要了解如何使用JCR查询API查询Adobe CQJCR,请参阅使用JCR API查询Adobe Experience Manager数据。

创建存储库实例

虽然连接存储库和建立连接的方式不同,但本开发文章使用属于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");

创建会话实例

Repository实例表示CRX存储库。 使用Repository实例建立与存储库的会话。 要创建会话,请调用Repository实例的login方法并传递javax.jcr.SimpleCredentials对象。 login方法返回javax.jcr.Session实例。

使用SimpleCredentials对象的构造函数并传递以下字符串值可创建对象:

  • 用户名;
  • 相应的密码

传递第二个参数时,调用String对象的toCharArray方法。 下面的代码说明如何调用返回javax.jcr.Sessioninstancelogin方法。

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

创建节点实例

使用Session实例创建javax.jcr.Node实例。 Node实例允许您执行节点操作。 例如,您可以创建新节点。 要创建表示根节点的节点,请调用Session实例的getRootNode方法,如下面的代码行所示。

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

创建Node实例后,可以执行任务,如创建其他节点并向其添加值。 例如,以下代码创建两个节点并向第二个节点添加一个值。

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

检索节点值

要检索节点及其值,请调用Node实例的getNode方法,并将表示完全限定路径的字符串值传递给该节点。 请考虑在上一个代码示例中创建的节点结构。 要检索日节点,请指定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