Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpServletRequest的注入_Java_Dependency Injection_Ejb_Jboss7.x - Fatal编程技术网

Java HttpServletRequest的注入

Java HttpServletRequest的注入,java,dependency-injection,ejb,jboss7.x,Java,Dependency Injection,Ejb,Jboss7.x,我正在使用EJB3并尝试@InjectHttpServletRequest,但在部署时出现异常 代码: 例外情况: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [HttpServletRequest] with qualifiers [@Default] at injection point [[field] @Inject private com.kmw

我正在使用EJB3并尝试@InjectHttpServletRequest,但在部署时出现异常

代码:

例外情况:

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]

我该怎么办?

HttpServletRequest的生命周期由EJB/web容器管理,而不是由CDI容器管理。尝试注入会导致问题,因为接口通常有许多实现,并且您的CDI容器没有足够的信息来决定要注入哪个实现。即使您成功地注入了它的一个实例,它也不会是由EJB容器管理的同一个实例

要获取正确管理的请求实例,请执行以下操作:

@Context
private HttpServletRequest httpRequest;

如果您的依赖项是JAX-RS(Restful)类,请注意上面的答案。另一方面,如果您有一个更复杂的依赖注入安排,那么这个问题肯定是正确的

此功能已添加到CDI1.1规范(JSR-346)中,该规范又添加到新的JavaEE7规范中。换句话说,最新的Java企业应用服务器将能够处理这个问题

同时,如果您需要能够管理某些请求范围依赖项,这些依赖项实际上需要访问实际的HttpServletRequest信息,那么您可以使用您的方法和工具。(如果网站看起来不存在,请不要惊慌,事实是工作已经转移到官方的CDI 1.1规范实施中,即“Weld 2”-因此他们不再进行焊接工作。但它仍然非常适合CDI 1.0。)

maven依赖项将是

<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>

org.jboss.org
焊料原料药
3.2.0.1最终版本
罐子
编译
org.jboss.org
焊料注入
3.2.0.1最终版本
罐子
编译

你的意思是@javax.ws.rs.core.Context吗?@KirillBazarov-是的,这就是要使用的注释。@KirillBazarov-这解决了你的问题吗?如果是,请随意投票/接受这个答案。谢谢。应该注意的是,
@Context
只在JAX-RSWebService类中起作用,在EJB类中肯定不起作用。也许OP实际上碰巧也在使用JAX-RS,尽管问题中没有提到这一点。因此,这个答案乍一看是完全盲目的猜测和无知的猜测,毕竟是一次幸运的尝试。不,当您在一个web服务实现中工作了一年后,您可能会意识到其他人在这个过程中遇到了与您早期相同的问题。
<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>