创建新工作区

2023-12-23

Modeshape 文档的第 7.1.6 节说“您的应用程序现在可以使用标准 JCR 2.0 API 创建和删除工作区。”

JCR 2.0 文档说使用 Workspace.createWorkspace(String name)

如何使用本文底部的代码获取存储库的这一部分?

另外,如何获取存储库中已有的工作区列表?

Thanks

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();
    }
}

The 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();

然后,您可以对工作区名称执行某些操作,例如检查所需的工作区是否已存在。

创建一个新的empty工作区,只需使用 Workspace 对象:

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

或者,您可以创建一个新工作区copy现有工作区的。

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

请注意,mix:referenceable节点在原始工作区和新工作区中将具有相同的标识符。这是 JCR 工作区的一个重要特征,也是使用单独工作区(而不是单个工作区的单独区域)的一个重要原因。有关更多详细信息,请参阅 JSR-283 规范。

最后,您也可以销毁现有的工作区:

String existingWorkspaceName
workspace.deleteWorkspace(existingWorkspaceName);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建新工作区 的相关文章

随机推荐

  • 更新linq相关表

    我有一个像 Id Name UserAddressId 这样的用户表和像 Id AddressOne 一样的用户地址表 带有一个FormView Control我想在里面有一个更新命令 这是我的表格
  • 默认 asp.net mvc 5 模板中 input-group-addon 之前的未知间隙

    如何重现 创建新的 ASP Net MVC 项目 添加模型 添加带有脚手架视图的控制器 在浏览器中打开 Create cshtml 然后使用 firebug 或开发人员工具更改任何 表单组 From div class form group
  • 内置函数 sum 对 sum(list, []) 有何作用?

    当我想展开列表时 我找到了如下方法 gt gt gt a 1 2 3 4 5 6 gt gt gt a 1 2 3 4 5 6 gt gt gt sum a 1 2 3 4 5 6 我不知道这些行中发生了什么 并且文档 https docs
  • 复制到剪贴板,无需 Flash - Firefox、Chrome、Safari、Opera [重复]

    这个问题在这里已经有答案了 可能的重复 复制到剪贴板 无需 Flash https stackoverflow com questions 6355300 copy to clipboard without flash 我想将给定 id 的
  • 使用 cabal 和 ghc 构建运行时标志

    我有一个用 Haskell 编写的程序 打算用 GHC 编译 该程序在多核上的扩展性非常好 因此启用多线程非常重要 在我的 cabal我添加的文件ghc options O3 threaded与线程运行时链接 问题是 使用这种方法 用户需要
  • MYSQL:带有 GROUP BY、LEFT JOIN 和 WHERE 子句的 COUNT 不返回零值

    我确信这有一个非常简单的答案 但我似乎找不到它 不知道要搜索什么 标准计数 按查询分组可能如下所示 SELECT COUNT t2 name FROM table 1 t1 LEFT JOIN table 2 t2 ON t1 key id
  • ES6 中按键过滤对象属性

    假设我有一个对象 item1 key sdfd value sdfd item2 key sdfd value sdfd item3 key sdfd value sdfd 我想通过过滤上面的对象来创建另一个对象 所以我有类似的东西 ite
  • 列出域内远程计算机上的硬盘信息

    我正在尝试获取硬盘信息列表 目前我只想列表显示每台计算机包含的硬盘型号 我有以下内容 Get WMIObject win32 diskdrive computer Get Content C Temp DiskDrives Computer
  • java中继承是编译时还是运行时

    有人告诉我继承是运行时的 但我想问如果继承是运行时的 那么当我们尝试通过子类对象访问父类数据成员时 编译器如何在编译时生成错误 class PrivateData private int x 50 void show System out
  • 哪些原因可能会阻止显式和隐式样式的应用?

    我有一个 WPF 测试项目 我用它来回答 SO 问题 不知何故 随着时间的推移 这个项目变得非常混乱 有些东西不再正常工作 这可能不是一个real问题 因为我可以把它扔掉并创建一个新的 但显然这并不是在每种情况下都是一个可行的解决方案 所以
  • 如何从MVC控制器返回Json对象来查看

    我正在做一个 MVC 应用程序 我需要将 json 对象从控制器传递到视图 var dictionary listLocation ToDictionary x gt x label x gt x value return Json new
  • OData v4 WebAPI 响应中的项目计数

    如何返回 OData v4 HTTP 响应中的项目数 我需要这个数字来分页 所以它应该是过滤后 跳过 和 顶部 之前的项目数 我已经尝试在 url 的查询选项中传递 inlinecount allpages 和 count true 参数
  • 找到两个节点(顶点)之间的最短路径

    我有一个互连边的列表 E 如何找到从一个顶点连接到另一个顶点的最短路径 我正在考虑使用 但边缘没有明确定义的根 所以我认为该解决方案不起作用 最短路径由经过的最少顶点数定义 Note There could be a multi path
  • MySQL获取两列之间的所有唯一值

    我有一个包含 ID 的两列的表 我想查询该表以显示两列中每个 ID 的一个列表 TABLE A B 1 2 2 3 5 4 6 2 我希望结果是 TABLE A 1 2 3 5 4 6 使用 UNION 运算符 SELECT A FROM
  • Spring-Batch 复合编写器如何跳过异常

    我正在使用 Spring Batch 我的步骤配置如下 Bean public Step testStep JdbcCursorItemReader
  • Azure 模拟器卡住

    我正在从事 azure WorkerRole 项目VS2015 SDK 2 9 该角色在云中运行良好 但是当我尝试使用 FullEmulator 在本地运行它时 角色无法启动 面料 角色实例 部署29 116 MyComp Engine D
  • PresentModalViewController 使我的应用程序崩溃

    我知道 这是最简单的事情之一 但几天来我一直在努力反对这一点 我过去已经做过很多次了 但由于某种原因 尝试呈现模式视图控制器只会使应用程序崩溃到黑屏 控制台中没有报告任何内容 我希望有人可能遇到过这个问题并提供一些建议 此代码是从 UIVi
  • 如何使用 angular.foreach 比较两个 JavaScript 数组

    我有两个 javascript 对象 var obj1 key1 value1 key2 value2 And var obj2 key1 value1 key2 someOtherValue 正如您所看到的 两个对象之间存在一个差异key
  • 用于在字段级别区分 CSV 文件并将结果输出到 CSV 并保持颜色的工具

    我正在尝试比较 2 个 csv 文件在字段级别的差异 并用颜色编码差异 我尝试了这个命令 git diff color words space x csv y csv 但有两个问题 它将彼此不同的单元格数据放在一起 我不想要这样 我只需要在
  • 创建新工作区

    Modeshape 文档的第 7 1 6 节说 您的应用程序现在可以使用标准 JCR 2 0 API 创建和删除工作区 JCR 2 0 文档说使用 Workspace createWorkspace String name 如何使用本文底部