2012-03-22 5 views
1

Modeshape 문서의 7.1.6 절에서 '이제 귀하의 응용 프로그램은 표준 JCR 2.0 API를 사용하여 작업 영역을 생성 및 제거 할 수 있습니다.'라고 말합니다.새로운 작업 영역 만들기

JCR 2.0 문서는 Workspace.createWorkspace (문자열 이름)

가 어떻게이 게시물의 하단에있는 코드를 사용하여 얻은 내 저장소의이 부분을 어떻게해야합니까 사용 말한다?

또한 저장소에 이미있는 작업 영역 목록을 얻는 방법은 무엇입니까?

감사

for (RepositoryFactory factory : ServiceLoader.load(RepositoryFactory.class)) { 

    if (factory instanceof org.modeshape.jcr.api.RepositoryFactory) { 
     org.modeshape.jcr.api.RepositoryFactory modeshapeRepositoryFactory = (org.modeshape.jcr.api.RepositoryFactory) factory; 

     final Repositories repositories = modeshapeRepositoryFactory.getRepositories(JCR_CONFIG_FILE_URL); 

     if (repositories != null) { 

      Set<String> repositoryNames = repositories.getRepositoryNames(); 
      if (repositoryNames != null) { 
       for (String repoName : repositoryNames) { 
        log.info(repoName); 
       } 
      } 
     } 
     else { 
      System.out.println("repositories reference was null"); 
     } 
    } 

    try { 

     repository = factory.getRepository(parameters); 
     if (repository != null) { 
      printRepoDetails(repository, parameters, factory); 
      repositoryFactory = factory; // Keep reference to allow clean shutdown. Not part of JCR 2.0 
      break; 
     } 
    } 
    catch (RepositoryException e) { 
     log.error("Error getting repository: \n" + e.toString()); 
     e.printStackTrace(); 
    } 
} 
+0

ModeShape이 RepositoryFactory에서 저장소를 얻기 위해 표준 API를 사용하여 지원하고, 세션을 얻기 위해 저장소에 로그인 :

그리고 마지막으로, 당신도 기존의 작업 공간을 파괴 할 수있다. 따라서 대부분의 클라이언트는 표준 인터페이스 만 사용할 수 있습니다. 그러나 표준 JCR API는 저장소에 이름이 있는지 여부를 지정하지 않으므로 저장소 이름 목록을 가져 오는 방법을 제공하지 않습니다. ModeShape는 리포지토리와 이름을 연결하므로 위에 표시된 ModeShape 관련 인터페이스를 제공합니다. –

답변

4

javax.jcr.Repository 인터페이스를 사용하면 저장소의 기술자를 얻을 수 및 저장소의 작업 공간에 세션을 설정하기 위해 로그인 할 수 있습니다. 그러나 다른 모든 작업에는 인증 및 권한 부여가 필요합니다. 즉, javax.jcr.Session 또는 다른 세션 관련 인터페이스 (예 :)를 통해 수행 할 수 있습니다.

아래에 표시된 모든 예제는 표준 JCR API에서 사용됩니다.

단순히 저장소에 로그인 세션을 구하는 방법이 호출이 기본 작업 공간을 사용하는 "익명"세션에서 자격 증명 및 결과를 제공하지 않습니다

javax.jcr.Repository repository = ... 
javax.jcr.Session session = repository.login(); 

참고. 익명 세션에는 많은 작업을 수행 할 수있는 권한이 없을 수도 있으므로 자격 증명 및/또는 작업 영역 이름의 다양한 조합을 제공 할 수있는 login 메서드의 다른 오버로드 된 양식 중 하나를 사용해야 할 수도 있습니다. ModeShape 구성을 사용하면 기본 작업 영역의 이름을 지정하고 익명 세션을 허용할지 여부를 제어하고 익명 세션에서 허용되는 역할을 지정할 수 있습니다. 작업 영역 이름을 지정하고 해당 작업 영역이없는 경우 메서드 javax.jcr.NoSuchWorkspaceException 예외 (javax.jcr.RepositoryException의 서브 클래스)가 throw됩니다.

은() 메소드, 작업 공간의 목록을 가져 세션의 작업 공간 객체를 얻고 getAccessibleWorkspaceNames를 호출하려면 :

javax.jcr.Workspace workspace = session.getWorkspace(); 
String[] workspaceNames = workspace.getAccessibleWorkspaceNames(); 

당신은 다음과 같은 검사 등의 작업 공간 이름으로 뭔가를 할 수 있는지 여부가 이미 필요한 작업 공간 존재합니다.

String newWorkspaceName = ... 
workspace.createWorkspace(newWorkspaceName); 

또는 당신이 사본 기존 작업 공간의하는 새로운 작업 공간을 만들 수 있습니다

단순히 사용, 작업 공간 객체를 새로운 작업 공간을 만듭니다. mix:referenceable 노드가 모두 원본과 새로운 작업 공간에서 동일한 식별자를 가질 것

String newWorkspaceName = ... 
String originalWorkspaceName = ... 
workspace.createWorkspace(newWorkspaceName,originalWorkspaceName); 

참고. 이는 JCR 작업 영역의 중요한 특성이며 종종 단일 작업 영역의 별도 영역이 아닌 별도의 작업 영역을 사용하는 큰 이유입니다. 자세한 내용은 JSR-283 사양을 참조하십시오.

String existingWorkspaceName 
workspace.deleteWorkspace(existingWorkspaceName); 
+0

완벽한 - 감사합니다. – user1016765