Интерфейс javax.jcr.Repository
позволяет вам получить дескрипторы хранилища и войти в систему, чтобы установить сеанс в рабочей области в хранилище. Но все другие операции требуют аутентификации и авторизации, что означает, что они могут быть выполнены с javax.jcr.Session
или через другие специфичные для сеанса интерфейсы (такие как javax.jcr.Workspace
).
Все приведенные ниже примеры используются в стандартном API JCR.
Чтобы получить сеанс, просто войдите в репозиторий:
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);