2

プログラムでコンテンツにアクセスしたいのですが、次のことを試しました。

private Session getSession(String user, String passwort) {
        Session session = null;
        try {
            Repository repository = JcrUtils.getRepository("http://localhost:4503/crx/server");
            JcrUtils.getRepository("http://localhost:4503/crx/server");
            session = repository.login(new SimpleCredentials(user, passwort.toCharArray()));
        } catch (RepositoryException e) {
            LOG.error(e.getMessage());
        }
        return session;
    }

getRepositoryメソッドを呼び出すと、次の例外が発生します。

 javax.jcr.RepositoryException: Unable to access a repository with the following settings:
        org.apache.jackrabbit.repository.uri: http://localhost:4503/crx/server
    The following RepositoryFactory classes were consulted:
    Perhaps the repository you are trying to access is not available at the moment.

私はバージョンcq5.4を持っています。何か案が?

PS: パブリッシュおよびオーサー インスタンスにアクセスしようとしましたが、同じ例外が発生しました。

4

4 に答える 4

5

Sling/CQ アプリを呼び出す必要はなく、呼び出したくない場合JcrUtils.getRepositoryは、CQ が提供する SlingRepository OSGi サービスにアクセスする必要があります。

最も簡単な方法は@Reference、OSGi 宣言型サービスでアノテーションを使用する@Componentことです。Apache Sling コードベースにはこの例が複数あります。http://svn.apache.org/repos/asf/sling/trunk/samples/slingbucksサンプルはそのための良い出発点。

コードがリクエスト処理の一部として実行される場合、Session を自分で作成する必要はありません。Sling サーブレットで取得するrequest.getResourceResolver().adaptTo(Session.class)where requestisを呼び出すことで取得できます。SlingHttpServletRequest

于 2013-09-05T06:31:34.767 に答える
0

OSGi サービスから JCR を操作する場合は、OSGi バンドルを使用しても問題ありません。ただし、外部の Java アプリから操作することはできます。Java ツールを作成して、AEM JCR 内でユーザーを取得し、それらをスプレッドシートにダンプしたい場合があります。

上記の例では、http://localhost:4503/crx/serverが適切な URL ではない可能性があります。あなたはhttp://localhost:4502/crx/serverかもしれません。しかし、これは機能します-http://scottsdigitalcommunity.blogspot.ca/2012/03/programmatically-accessing-day-cq.htmlを参照してください

そして、セッションを終了したら、それを閉じます: session.save(); session.logout();

于 2015-10-23T16:52:21.837 に答える