0

Jetty 8にWARをデプロイしたいと思います。WARには、CDI(Weld)を介して依存関係が注入された単純なサーブレットが含まれています。

私がオンラインで見つけたすべての例/質問は、埋め込まれたJettyのみを扱っているようです-外部サーブレットコンテナとしてJettyを使用することについては何もありません。

私はこれらの部品がどのように組み合わされるかについての私の知識を最大限に活用してすべてを設定しましたが、システムがすべてが注入に問題ないと言ったとしても、注入は行われないようです。

META-INFに裸のbeans.xmlがあります。

私のpom.xml、jetty-context.xml + jetty-env(私のWEB-INF内)、サーブレット、インジェクトの実装+実装:

http://pastebin.com/qh7pGCn5

戦争が展開されると、最初はすべてが問題ないように見えます。

Mar 08, 2013 3:38:42 PM org.jboss.weld.bootstrap.WeldBootstrap <clinit> INFO: WELD-000900 1.1.10 (Final) Mar 08, 2013 3:38:42 PM org.jboss.weld.bootstrap.WeldBootstrap startContainer INFO: WELD-000101 Transactional services not available. Injection of @Inject Use rTransaction not available. Transactional observers will be invoked synchronousl y. Mar 08, 2013 3:38:42 PM org.jboss.weld.environment.jetty.JettyPost72Container in itialize INFO: Jetty7 detected, JSR-299 injection will be available in Listeners, Servlet s and Filters. init init init init init init init init init init init init init init init!!!!!! !!!!!!!!!!!!!!

...次に、サーブレットの41行目のインジェクティにアクセスしようとするとnullポインタを取得します。

明らかな何かが欠けていますか?Weldは、CDIにとってすべてが良いと言っていますが、そこには何も表示されません。

編集:私はまた、すべてをJetty 7.6.9.v20130131(ドキュメントによるとWeldでサポートされています)に合わせてこれを試しました

乾杯、あなたが提供できる洞察に感謝します。

4

1 に答える 1

0

GreeterオーバーライドされたServlet.init()メソッドからを呼び出しています。これは、その時点でサーブレットがまだ初期化されていないことを意味します。Javadocから-

サーブレットコンテナによって呼び出され、サーブレットがサービスを開始していることをサーブレットに示します。

サーブレットコンテナは、サーブレットをインスタンス化した後、initメソッドを1回だけ呼び出します。サーブレットがリクエストを受信する前に、initメソッドが正常に完了する必要があります。

さて、あなたはあなたのためにスコープを宣言しないので、Greeterそれは自動的に@Dependentスコープになります。したがって、@Dependentスコープは常にアクティブですが、依存オブジェクトのライフサイクルは、それらが注入されたインスタンスにバインドされます。つまり、依存オブジェクトはそれ自体では存在できません。CDI仕様のこの部分を参照してください。

とはいえ、他のすべての通常のスコープは、 Sevlet.serice()メソッドの間のみアクティブになります。したがって、サーブレットが完全に初期化されるまで、何も注入できません。CDI仕様のこの部分を参照してください。

結論-Greeterサービスメソッドから呼び出してみてください。これは、私が間違っていない場合にのみ、実際のリクエストで実行できます。お役に立てれば!

于 2013-03-09T00:51:55.553 に答える