Создать новое рабочее пространство

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

В документе JCR 2.0 говорится об использовании Workspace.createWorkspace(имя строки)

Как сделать, чтобы эта часть моего репозитория была получена с помощью кода внизу этого поста?

Кроме того, как мне получить список рабочих областей, уже находящихся в репозитории?

Спасибо

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

person user1016765    schedule 22.03.2012    source источник
comment
ModeShape поддерживает использование стандартного API для получения репозитория из RepositoryFactory и вход в репозиторий для получения сеанса. Таким образом, большинство клиентов могут/должны использовать только стандартные интерфейсы. Но стандартный API JCR не указывает, имеет ли репозиторий имя, и поэтому не предоставляет способа получить список имен репозиториев. ModeShape действительно связывает репозиторий с именем и, следовательно, предоставляет специфичные для ModeShape интерфейсы, показанные выше.   -  person Randall Hauch    schedule 22.03.2012


Ответы (1)


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

Затем вы можете что-то сделать с именами рабочих областей, например проверить, существует ли уже нужная вам рабочая область.

Чтобы создать новую пустую рабочую область, просто используйте объект Workspace:

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

Кроме того, вы можете создать новую рабочую область, которая будет копией существующей рабочей области.

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

Обратите внимание, что узлы mix:referenceable будут иметь одинаковые идентификаторы как в исходной, так и в новой рабочей области. Это важная характеристика рабочих пространств JCR и часто важная причина для использования отдельных рабочих пространств (а не отдельных областей одного рабочего пространства). Подробнее см. в спецификации JSR-283.

И, наконец, вы также можете уничтожить существующие рабочие пространства:

String existingWorkspaceName
workspace.deleteWorkspace(existingWorkspaceName);
person Randall Hauch    schedule 22.03.2012