2012-03-22 71 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

振形支持使用標準的API,以獲得從RepositoryFactory存儲庫,並登錄到存儲庫來獲取會話。所以大多數客戶可以/應該只使用標準接口。但標準的JCR API沒有指定一個存儲庫是否有名稱,因此不提供獲取存儲庫名稱列表的方式。 ModeShape確實將存儲庫與名稱相關聯,因此提供了上面顯示的ModeShape特定的接口。 – 2012-03-22 12:04:57

回答

4

javax.jcr.Repository接口可以讓你獲得資源庫的描述符和登錄到建立會話存儲庫中的工作區。但所有其他操作都需要身份驗證和授權,這意味着它們可以通過javax.jcr.Session或通過其他會話特定的接口(例如javax.jcr.Workspace)執行。

下面顯示的所有示例都使用標準的JCR API。

,獲得會話,只需登錄到存儲庫:

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

注意,這個調用不提供任何憑證,結果在使用默認的工作區「匿名」會議。匿名會話可能沒有特權,因此您可能需要使用login方法的其他重載表單之一,該方法允許您提供憑證和/或工作區名稱的各種組合。 (ModeShape配置允許您規定默認工作區的名稱,以控制是否允許匿名會話,並指定匿名會話允許的角色。)如果指定工作區名稱並且該工作區不存在,則方法會拋出一個javax.jcr.NoSuchWorkspaceException異常(這是javax.jcr.RepositoryException的一個子類)。

爲了得到工作區的名單,得到會議的工作區對象,並調用getAccessibleWorkspaceNames()方法:

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

然後,您可以做與工作區的名稱,如檢查東西是否需要已經工作區存在。

要創建一個新工作空間,只需使用Workspace對象:

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

或者,你可以創建一個新的工作區是一個副本現有工作區的

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

注意,mix:referenceable節點將在原始和新的工作區相同的標識符。這是JCR工作空間的一個重要特性,並且通常是使用單獨工作空間(而不是單個工作空間的單獨區域)的重要原因。有關更多詳細信息,請參閱JSR-283規範。

最後,你可以摧毀現有的工作區,也:

String existingWorkspaceName 
workspace.deleteWorkspace(existingWorkspaceName); 
+0

完美 - 謝謝 – user1016765 2012-03-23 14:08:30