Modeshape文档的7.1.6节说:“您的应用程序现在可以使用标准JCR 2.0 API创建和删除工作区。”
JCR 2.0文档说要使用Workspace.createWorkspace(String name)
如何使用此博文底部的代码来获取我的存储库的这一部分?
另外,如何获取存储库中已经存在的工作区列表?
谢谢
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();
    }
}
该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的子类)。
要获取工作空间列表,请获取会话的Workspace对象并调用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);
| 归档时间: | 
 | 
| 查看次数: | 3156 次 | 
| 最近记录: |