gpt4 book ai didi

jcr - 创建新工作区

转载 作者:行者123 更新时间:2023-12-02 08:49:12 25 4
gpt4 key购买 nike

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接口(interface)允许您获取存储库的描述符并登录以与存储库中的工作区建立 session 。但所有其他操作都需要身份验证和授权,这意味着它们可以使用 javax.jcr.Session 执行或通过其他特定于 session 的接口(interface)(例如 javax.jcr.Workspace )。

下面显示的所有示例都使用标准 JCR API。

要获得 session ,只需登录到存储库:

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

请注意,此调用不提供任何凭据并导致使用默认工作区的“匿名” session 。匿名 session 可能没有太多权限,因此您可能需要使用 login 的其他重载形式之一。允许您提供凭据和/或工作区名称的各种组合的方法。 (ModeShape 配置允许您指定默认工作空间的名称,控制是否允许匿名 session ,以及指定匿名 session 允许的角色。)如果您指定工作空间名称并且该工作空间不存在,方法将抛出 javax.jcr.NoSuchWorkspaceException 异常(这是 javax.jcr.RepositoryException 的子类)。

要获取工作区列表,请获取 session 的工作区对象并调用 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);

关于jcr - 创建新工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9820396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com