11

デイCQを使用しています。Felix コンソールで利用可能な接続プールを使用して、SQL Server DB にデータを保存したいと考えています。defineObjects タグで定義されたタイプ SlingScriptHelper の「sling」オブジェクトを使用して、JSP からこれを行うことができます。

sling.getService(DataSourcePool.class).

しかし、OSGi バンドルで作成されたサーブレットを使用して、クライアントからの要求を処理したいと考えています。サーブレットには defineObjects タグがないため、「sling」オブジェクトは定義されていません。サーブレットで有効な SlingScriptHelper オブジェクトを作成する方法がわかりませんが、可能でなければならないようです。

方法はありますか?

4

3 に答える 3

17

SlingScriptHelper を必要としない Java OSGi コンポーネントからサービスを取得するには、BundleContext.getService(...) メソッドを使用するか、SCR アノテーションを使用して SCR がコンポーネントにサービスを挿入できるようにします。

例として、Sling のSlingbucks サンプルの一部のコンポーネントがSCR アノテーションを使用する方法を確認できます。たとえば、ConfirmedOrdersObserver クラスは次の方法で SlingRepository を取得します。

   @Reference
   private SlingRepository repository;

これらの注釈を処理する Maven プラグインについては、http://felix.apache.org/site/apache-felix-maven-scr-plugin.htmlを参照してください。

于 2011-12-22T13:38:22.560 に答える
9

#getServiceReference および #getService メソッドを使用して、BundleContext を使用して Service にアクセスできます。たとえば、ResourceResolverFactory に興味がある場合は、次のように取得できます。

BundleContext bundleContext = FrameworkUtil.getBundle(MyClass.class).getBundleContext();
ServiceReference factoryRef =
     bundleContext.getServiceReference(ResourceResolverFactory.class.getName());
ResourceResolverFactory resolverFactory = 
    (ResourceResolverFactory) bundleContext.getService(factoryRef);
于 2012-05-10T02:19:22.473 に答える