1

Glassfish と jetty-servlet の両方に純粋な JAX-RS アプリケーションがあります。Quartz ジョブにいくつかの豆を注入しようとしています。

Job フィールドに で注釈を付けまし@javax.inject.Injectたが、ジョブ ファクトリをコンテナーで使用できるようにする必要があると考えています。

どうすればそれを達成できますか?

4

1 に答える 1

0

こんにちはビクター、あなたのアプリケーションに関する詳細はありませんが、私はあなたがサーブレットコンテナで実行していると仮定します. 「純粋な」JAX-RS アプリケーションを使用してそれを行う方法はありません。

ただし、CDI (Weld または OpenWebBeans) を使用することをお勧めします。次に、Deltaspike を使用して、Quartz ジョブ内のリクエスト コンテキストがリクエスト スコープ Bean への参照を取得できるようにします。

サーブレット コンテナーで Weld を有効にするのは非常に簡単です。

HTTP リクエストの外部でリクエスト コンテキストを有効にするためのガイドは、こちらから入手できます。

デフォルトでは、@RequestScoped Bean を Quartz ジョブに注入することはできません (HTTP 要求がないため、要求コンテキストがありません)。これを回避するには、上記のリンクをたどってリクエストコンテキストを有効にするか、(おそらく私のアプローチで) @Dependent スコープ Bean (これが機能します) を JAX RS Bean (本質的にはラッパー) に挿入します。その後、参照を簡単に取得できます。 Quartz ジョブ内の @Dependent スコープ Bean に。

これは、jetty 内で Weld と Jersey を実行するための私のweb.xmlpom.xmlです。jetty-plus、jetty-jndi、および Weld の依存関係が必要です。

Jetty 内での JNDI セットアップの取得に関する情報を次に示します。ただし、SE アプリケーション内の組み込みコンテナーとして jetty を開始するため、この方法は使用しません。これは、私が行っていることのコード スニペットです。

String[] configurationClasses =
{
    "org.eclipse.jetty.webapp.WebInfConfiguration",
    "org.eclipse.jetty.webapp.WebXmlConfiguration",
    "org.eclipse.jetty.webapp.MetaInfConfiguration",
    "org.eclipse.jetty.webapp.FragmentConfiguration",
    "org.eclipse.jetty.plus.webapp.EnvConfiguration",
    "org.eclipse.jetty.webapp.JettyWebXmlConfiguration"
};
WebAppContext webapp = new WebAppContext();
webapp.setConfigurationClasses(configurationClasses);
webapp.setDescriptor("/path/to/webapp/WEB-INF/web.xml");
webapp.setContextPath("/");
webapp.setResourceBase("/path/to/webapp");
webapp.setClassLoader(Thread.currentThread().getContextClassLoader());
于 2012-05-22T08:46:40.580 に答える