代码之家  ›  专栏  ›  技术社区  ›  jthg

远程服务器重新启动后,InitialContext.lookup远程EJB失败

  •  2
  • jthg  · 技术社区  · 14 年前

    我们有一个设置,其中EJB a在服务器a上运行,另一个EJB B在服务器B上运行。EJB a通过IIOP连接到EJB B。此安装程序正常工作,但如果服务器B重新启动,EJBA将失败,直到服务器A也重新启动。

    问题是,如果重新启动服务器B,则在重新启动服务器A之前,EJB A对InitialContext.lookup的所有调用都将失败,并出现“java.io.IOException:End of stream”异常。我找不到关于app server(GlassFish)是否对InitialContext.lookup进行任何缓存的信息。在服务器重新启动之前,查找失败还有其他原因吗?如果InitialContext.lookup做缓存连接,我该如何解决这个问题?

    我们的服务器运行Sun应用服务器9.1。查找实际上是通过org.springframework.jndi.JndiTemplate完成的,但是堆栈跟踪显示JndiTemplate正在调用InitialContext.lookup()。

    谢谢你的洞察力。

    P、 我要澄清的是,我正在努力弄清楚是否有可能避免每次重启服务器B时都必须重启服务器A。

    JndiTemplate的定义(有些文本用“x”和“#”遮住)

    <bean id="xxxxxxxxxx"  class="org.springframework.jndi.JndiTemplate">
      <property name="environment">
       <props>
        <prop key="java.naming.factory.url.pkgs">com.sun.enterprise.naming</prop>
        <prop key="java.naming.factory.initial">com.sun.enterprise.naming.SerialInitContextFactory</prop>
        <prop key="java.naming.provider.url">iiop://xxxxxxxxxx:####</prop>
        <prop key="java.naming.factory.state">com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl</prop>
        <prop key="org.omg.CORBA.ORBInitialHost">xxxxxxxxxx</prop>
        <prop key="org.omg.CORBA.ORBInitialPort">####</prop>
       </props>
      </property>
     </bean> 
    

    以及堆栈跟踪(其中一部分替换为“[应用程序方法]”):

    NAM0004: Exception during name lookup : {0}
    java.rmi.MarshalException: CORBA COMM_FAILURE 1398079696 Maybe; nested exception is: 
     org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 208 completed: Maybe
     at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:271)
     at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
     at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
     at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
     at com.sun.enterprise.naming._SerialContextProvider_DynamicStub.lookup(com/sun/enterprise/naming/_SerialContextProvider_DynamicStub.java)
     at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:398)
     at javax.naming.InitialContext.lookup(InitialContext.java:351)
     at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
     at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88)
     at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:153)
     at [application methods]
     at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)
     at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:265)
     at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
     at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
     at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:299)
     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
     at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.process(SSLReadTask.java:440)
     at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.doTask(SSLReadTask.java:228)
     at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
     at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    Caused by: org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 208 completed: Maybe
     at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectionAbort(ORBUtilSystemException.java:2862)
     at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectionAbort(ORBUtilSystemException.java:2880)
     at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doOptimizedReadStrategy(SocketOrChannelConnectionImpl.java:1788)
     at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1263)
     at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
    Caused by: org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 211  completed: No
     at com.sun.corba.ee.impl.logging.ORBUtilSystemException.ioexceptionWhenReadingConnection(ORBUtilSystemException.java:2946)
     at com.sun.corba.ee.impl.logging.ORBUtilSystemException.ioexceptionWhenReadingConnection(ORBUtilSystemException.java:2965)
     at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.nonBlockingRead(SocketOrChannelConnectionImpl.java:2000)
     at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doOptimizedReadStrategy(SocketOrChannelConnectionImpl.java:1713)
     ... 2 more
    Caused by: java.io.IOException: End-of-stream
     at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.nonBlockingRead(SocketOrChannelConnectionImpl.java:1989)
     ... 3 more
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Isaac    14 年前

    通过堆栈跟踪,我可以得出结论,Spring框架本身并不缓存——它实际上调用 InitialContext.lookup() . 不过,堆栈跟踪和错误代码暗示存在连接中断。

    在过去的几天里,WebSphere曾经有一个类似的错误,从那以后就被修复了。结果发现是应用服务器本身造成的缓存问题。我怀疑SunAS在9.1中也有类似的漏洞。。。

    艾萨克

        2
  •  0
  •   Viktar    10 年前

    public class SyncOperationsService {
        private InitialContext context;
        private SyncOperationsRemote syncOperationsRemote = null; //RemoteBean
    
        public String syncChanges() {
            try {
                if (context == null) {
                    context = new InitialContext(properties);
                }
    
                if (context != null) {
                    syncOperationsRemote = (SyncOperationsRemote) context.lookup("PathToYourRemoteBean");
                }
    
                result = syncOperationsRemote.syncChanges(dbImportList);  //Try execute remote bean
    
            } catch (Exception e) {
                log.error(e.getMessage());
    
                try {
                    context.close();
                } catch (Exception e2) {
                    log.error(e2.getMessage());
                }
                context = null;
            }
        }
    }
    
    推荐文章