프로그래밍 방식으로 AEM JCR에 액세스하는 방법

Adobe Marketing Cloud의 일부인 Adobe CQ 저장소 내에 있는 노드와 속성을 프로그래밍 방식으로 수정할 수 있습니다. CQ 저장소에 액세스하려면 JCR(Java Content Repository) 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 Content Repository에서 CQ 데이터 지속을 참조하십시오.

노트

JCR API를 사용하려면 Java 애플리케이션의 클래스 경로에 jackrabbit-standalone-2.4.0.jar 파일을 추가합니다. 이 JAR 파일은 https://jackrabbit.apache.org/jcr/jcr-api.html의 Java JCR API 웹 페이지에서 얻을 수 있습니다.

노트

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개체를 만듭니다.

  • 사용자 이름;
  • 해당 암호

두 번째 매개 변수를 전달할 때 String 개체의 toCharArray메서드를 호출합니다. 다음 코드는 반환 login메서드를 호출하는 방법을 보여 줍니다 javax.jcr.Sessioninstance.

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

이 페이지에서는