【发布时间】: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)]
【问题讨论】: