【问题标题】:Tomcat receiving NPE while trying to invoke EJB on JBoss 5Tomcat 在 JBoss 5 上尝试调用 EJB 时收到 NPE
【发布时间】:2011-06-17 14:58:28
【问题描述】:

我正在尝试从 Tomcat 6.0.14 的两个实例调用 JBoss 5.1.0 上的 EJB。一台机器工作正常,而另一台机器不工作。该代码是一个 Struts 操作,执行类似于:

try {
    MyInterface myInterface = (MyInterface)Component.getInstance(MyInterface.class);
    log.debug(new StringBuilder().append("Got a ").append(myInterface).toString());
    myInterface.doSomething();
} catch (Exception e) {
    logger.error(e.getMessage());
}

我最终在 catch 块内的 logger 调用中附加了一个断点,因为对 logger 的调用没有产生任何输出。

调试器显示异常是 NPE,但它没有消息。日志显示分配接口后立即进行调试调用工作正常,文本类似于“得到 jboss.j2ee 的代理:ear=ear.ear,jar=ear-internal-3.0.0.jar,name =MyInterfaceImpl,service=EJB3 实现 [interface com.myco.MyInterface]"。

我无法轻松访问服务器端,因此无法在此处附加调试器,而且我也无法轻松访问源代码(我使用 JDecompiler 找出在 jdb 中放置断点的位置 -代码是内部代码,我只是没有在正确的部门工作!)

我看不出如何,在上面的代码中 myInterface 可能为空,所以对我来说 NPE 要么来自服务器端,要么来自 Tomcat 的内部。

两台机器的配置有一些细微差别,但没有任何迹象表明代码中存在 NPE。主要配置差异有:

  • 从符号链接加载的配置文件
  • 工作中的 Tomcat 客户端与 JBoss 服务器在同一台机器上,而失败的 Tomcat 客户端在不同子网的另一台机器上(但是,代理返回,我可以看到网络流量流向正确的端口在使用 tcpdump 的 JBoss 服务器上,所以我认为这不是网络问题)

有人有什么想法吗?

(机器在 RHEL5 上运行,JDK 1.60_18)


我已设法将其从系统中移除 - 看起来它是 this 错误,但如果两个 Tomcat 上的客户端 jar 相同,那么错误会发生在两者上还是不会发生?

[org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:379)
 org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
 org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
 org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
 org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:891)
 org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:744)
 org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:697)
 org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:524)
 org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:232)
 org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:211)
 org.jboss.remoting.Client.invoke(Client.java:1724)
 org.jboss.remoting.Client.invoke(Client.java:629)
 org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
 org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
 org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)
 org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
 org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
 org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:61)
 $Proxy9.invoke(Unknown Source)
 org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
 org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
 $Proxy8.getRoster(Unknown Source)
 com.mycompany.MyAction.execute(GetNotificationsAction.java:33)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 com.mycompany.filters.EncodingFilter.doFilter(EncodingFilter.java:23)
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 java.lang.Thread.run(Thread.java:619)]

【问题讨论】:

    标签: ejb tomcat6 jboss5.x


    【解决方案1】:

    解决方案是在 Tomcat 的 lib 目录中存在 jboss-aspect-jdk50-client_4.2.2.jar - 删除此文件可使应用程序正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 2013-02-28
      • 2018-08-30
      • 2020-05-04
      相关资源
      最近更新 更多