如何以程式設計方式存取AEM JCR

您可以以程式設計方式修改位於Adobe CQ存放庫(屬於Adobe Marketing Cloud的一部分)內的節點和屬性。 若要存取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。 相反地,您可以使用JCR API從OSGi套件組合內修改JCR。 如需詳細資訊,請參閱「在Java內容存放庫中保存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 CQ JCR,請參閱使用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物件:

  • 用戶名;
  • 對應的密碼

傳遞第二個參數時,呼叫字串物件的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方法,並傳遞代表完全限定路徑的字串值至節點。 請考量上一個程式碼範例中建立的節點結構。 若要擷取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代碼示例表示一個Java類,該類連接到Adobe CQ、建立Session實例並添加新節點。 節點被分配一個資料值,然後節點的值及其路徑被寫入控制台。 完成工作階段後,請務必登出。

/*
 * 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

本頁內容