2

Modeshapeドキュメントのセクション7.1.6には、「アプリケーションは、標準のJCR2.0APIを使用してワークスペースを作成および削除できるようになりました」と記載されています。

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

1 に答える 1

6

このjavax.jcr.Repositoryインターフェースを使用すると、リポジトリーの記述子を取得し、ログインしてリポジトリー内のワークスペースへのセッションを確立できます。ただし、他のすべての操作には認証と承認が必要です。つまり、javax.jcr.Sessionまたは他のセッション固有のインターフェイス(などjavax.jcr.Workspace)を介して実行できます。

以下に示すすべての例は、標準のJCRAPIで使用されます。

セッションを取得するには、リポジトリにログインするだけです。

javax.jcr.Repository repository = ...
javax.jcr.Session session = repository.login();

この呼び出しは資格情報を提供せず、デフォルトのワークスペースを使用する「匿名」セッションになることに注意してください。匿名セッションには多くのことを行う特権がない場合があるためlogin、資格情報やワークスペース名のさまざまな組み合わせを提供できる、他のオーバーロードされた形式のメソッドの1つを使用する必要がある場合があります。(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);
于 2012-03-22T11:55:26.360 に答える