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