2012-11-16 12 views
8

私はejb 3を使用していて、@Inject HttpServletRequestを試していますが、配備中は例外が発生します。HttpServletRequestの注入

コード:

@Inject private HttpServletRequest httpRequest; 

例外:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [HttpServletRequest] with qualifiers [@Default] at injection point [[field] @Inject private com.kmware.ttk.highway.beans.session.UserSessionBean.httpRequest] 

私はそれで何ができますか?

答えて

17

HttpServletRequestのライフサイクルは、CDIコンテナではなくEJB/Webコンテナによって管理されます。インジェクションを実行しようとすると、問題が発生します。通常、インターフェイスの実装が多く、CDIコンテナにはインジェクションする実装を決定するための情報が不足しています。インスタンスを正常にインジェクションしても、ではなく、がEJBコンテナによって管理されているインスタンスと同じになります。その後、上記の答えを注意して、あなたの依存は、JAX-RS(RESTfulな)クラスの場合

@Context 
private HttpServletRequest httpRequest; 
+2

をもしかしてことでしょうか? –

+1

@KirillBazarov - はい、使用する注釈です。 – Perception

+0

@KirillBazarov - これで問題は解決しましたか?もしそうなら、この回答をupvote/acceptに自由に感じてください。ありがとう。 – Perception

7

:適切リクエストのインスタンスを管理し、代わりにこれを行う取得する

。一方、依存性注入のより複雑な配置をしている場合、その質問は確かに有効です。

この機能は、新しいJava EE 7仕様に追加されたCDI 1.1仕様(JSR-346)に追加されました。つまり、Java Enterprise Application Serverの最新クラスがこれを処理できます。

その間、実際のHttpServletRequest情報にアクセスする必要のあるリクエストスコープの依存関係を管理できるようにするには、あなたのアプローチを使用してJBoss Solderツールを使用します。 (ウェブサイトが無くなっても慌てないでください。その事実は、CDI 1.1仕様の公式実装(つまり「溶接2」)に移行したことになります。つまり、はんだをもう使用していません。 CDI 1.0のために完璧に適しています。)

Mavenの依存関係は、あなたはjavax.ws.rs.core.Context @

<dependency> 
    <groupId>org.jboss.solder</groupId> 
    <artifactId>solder-api</artifactId> 
    <version>3.2.0.Final</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.jboss.solder</groupId> 
    <artifactId>solder-impl</artifactId> 
    <version>3.2.0.Final</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency>