【问题标题】:Mobicent EJB Injection in a sip servlet/ rest service projectsip servlet/rest 服务项目中的 Mobicent EJB 注入
【发布时间】:2013-03-21 11:12:38
【问题描述】:

问题:在一个项目中使用 REST 服务和 SIP Servlet 会导致异常,如果还使用通过 EJB 进行注入。

哪些步骤会重现问题?

  1. 在项目中添加 Sip Servlet 和 REST 服务(REST 服务通过扩展 Application 的类激活并使用 @ApplicationPath 注释,这是 Java EE 6“无 XML”方法,激活 JAX-RS )

  2. 使用 REST 服务和/或 SIP servlet 不会产生任何错误。

  3. 通过@EJB 将注入的服务添加到项目中。

  4. 使用 REST 服务会导致以下异常:

错误:

Exception sending request destroyed lifecycle event to listener instance of class org.jboss.weld.servlet.WeldListener: java.lang.NullPointerException
    at org.jboss.weld.context.AbstractBoundContext.deactivate(AbstractBoundContext.java:71) [weld-core-1.1.8.Final.jar:2012-04-29 10:45]
    at org.jboss.weld.context.http.HttpRequestContextImpl.deactivate(HttpRequestContextImpl.java:86) [weld-core-1.1.8.Final.jar:2012-04-29 10:45]
    at org.jboss.weld.servlet.WeldListener.requestDestroyed(WeldListener.java:103) [weld-core-1.1.8.Final.jar:2012-04-29 10:45]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.16.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.16.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.16.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.16.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.16.Final.jar:]
    at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_37]

我正在使用:

  • Mobicents:mss-2.0.0.FINAL-jboss-as-7.1.2.Final
  • 操作系统:Mac OS X 10.6.8、Ubuntu 12.04、Windows 8

我也将问题发布到Google Code,那里已经上传了一个测试项目,可以用来运行实际的测试用例。 src/test/java 中有一个测试文件正在调用部署的 REST 服务。在原始项目中,这应该会导致上述错误。

如果 SIP Servlet 未激活(例如通过重命名 sip.xml),调用 REST 服务时不会发生错误。

如果 SIP Servlet 被激活并且注入的服务HelloWorldService 被移除,那么调用 REST 服务也不会出错。

【问题讨论】:

    标签: java rest ejb jboss7.x sip


    【解决方案1】:

    有两种解决方案。您等到weld-core-1.1.8.FINAL.jar 更新!或者您获取源代码并在 org.jboss.weld.context.AbstractBoundContext 中进行硬修复:

    public void deactivate() {
    if (getBeanStore() != null )
    { getBeanStore().detach(); super.deactivate(); }
    }
    

    欲了解更多信息,请参阅https://issues.jboss.org/browse/WELD-1020?_sscc=t

    【讨论】:

    • 你好,有人解决了吗?我在融合的 WEB/SIP 应用程序中面临同样的问题。如果该应用程序甚至有一个 sip servlet,那么任何 servlet 或托管 bean 中的 EJB 注入都将不起作用。我已将 MSS-JBoss 7.1.2 焊芯升级到焊芯 1.1.16,但没有区别。谢谢。
    【解决方案2】:

    我正在运行 mss-3.0.0-SNAPSHOT-jboss-as-7.1.3.Final,并通过使用 @EJB 而不是 @Inject 注入 EJB(并删除 beans.xml 文件)来解决此问题.

    我的应用程序部署为由多个模块组装而成的 EAR:EJB、SIP servlet 和 Web servlet 以及 JAX-RS/RESTEasy 应用程序和资源(打包在一起)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多