Создать новое рабочее пространство - PullRequest
1 голос
/ 22 марта 2012

Раздел 7.1.6 документов Modeshape гласит: «Ваше приложение теперь может создавать и удалять рабочие пространства с использованием стандартного API JCR 2.0.»

В документе 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();
    }
}

1 Ответ

4 голосов
/ 22 марта 2012

Интерфейс 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);
...