How to programmatically access the AEM JCR how-to-programmatically-access-the-aem-jcr
You can programmatically modify nodes and properties located within the 51ºÚÁϲ»´òìÈ CQ repository, which is part of the 51ºÚÁϲ»´òìÈ Experience Cloud. To access the CQ repository, you use the Javaâ„¢ Content Repository (JCR) API. You can use the Javaâ„¢ JCR API to create, replace, update, and delete (CRUD) content located within the 51ºÚÁϲ»´òìÈ CQ repository. For more information about the Javaâ„¢ JCR API, see .
jackrabbit-standalone-2.4.0.jar
file to your Java™ application’s class path. You can obtain this JAR file from the Java™ JCR API web page at .Create a Repository instance create-a-repository-instance
Although there are different ways to connect to a repository and establish a connection, this development article uses a static method that belongs to the org.apache.jackrabbit.commons.JcrUtils
class. The name of the method is getRepository
. This method takes a string parameter that represents the URL of the 51ºÚÁϲ»´òìÈ CQ server. For example, http://localhost:4503/crx/server
.
The getRepository
method returns a Repository
instance, as shown in the following code example.
//Create a connection to the AEM JCR repository running on local host
Repository repository = JcrUtils.getRepository("http://localhost:4503/crx/server");
Create a Session instance create-a-session-instance
The Repository
instance represents the CRX repository. You use the Repository
instance to establish a session with the repository. To create a session, invoke the Repository
¾±²Ô²õ³Ù²¹²Ô³¦±ð’s login
method and pass a javax.jcr.SimpleCredentials
object. The login
method returns a javax.jcr.Session
instance.
You create a SimpleCredentials
object by using its constructor and passing the following string values:
- The user name;
- The corresponding password
When passing the second parameter, call the String object’s toCharArray
method. The following code shows how to call the login
method that returns a javax.jcr.Sessioninstance
.
//Create a Session instance
javax.jcr.Session session = repository.login( new SimpleCredentials("admin", "admin".toCharArray()));
Create a Node instance create-a-node-instance
Use a Session
instance to create a javax.jcr.Node
instance. A Node
instance lets you perform node operations. For example, you can create a node. To create a node that represents the root node, invoke the Session
¾±²Ô²õ³Ù²¹²Ô³¦±ð’s getRootNode
method, as shown in the following line of code.
//Create a Node
Node root = session.getRootNode();
Once you create a Node
instance, you can perform tasks such as creating another node and adding a value to it. For example, the following code creates two nodes and adds a value to the second node.
// Store content
Node day = adobe.addNode("day");
day.setProperty("message", "51ºÚÁϲ»´òìÈ CQ is part of the 51ºÚÁϲ»´òìÈ Digital Marketing Suite!");
Retrieve Node Values retrieve-node-values
To retrieve a node and its value, invoke the Node
¾±²Ô²õ³Ù²¹²Ô³¦±ð’s getNode
method and pass a string value that represents the fully qualified path to the node. Consider the node structure created in the previous code example. To retrieve the day node, specify adobe/day, as shown in the following code:
// Retrieve content
Node node = root.getNode("adobe/day");
System.out.println(node.getPath());
System.out.println(node.getProperty("message").getString());
Create nodes in the 51ºÚÁϲ»´òìÈ CQ Repository create-nodes-in-the-adobe-cq-repository
The following Javaâ„¢ code example represents a Javaâ„¢ class that connects to 51ºÚÁϲ»´òìÈ CQ, creates a Session
instance, and adds new nodes. A node is assigned a data value and then the value of the node and its path is written out to the console. When you are done with the Session, be sure to log out.
/*
* 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", "51ºÚÁϲ»´òìÈ CQ is part of the 51ºÚÁϲ»´òìÈ 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();
}
}
}
After you run the full code example and create the nodes, you can view the new nodes in the CRXDE Lite, as shown in the following illustration.