您可以程式設計方式修改位於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 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
物件的建構函式並傳遞下列字串值來建立<a0/>物件:
傳遞第二個參數時,請呼叫String物件的toCharArray
方法。 以下代碼說明如何調用返回javax.jcr.Sessioninstance
的login
方法。
//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());
以下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中查看新節點,如下圖所示。