我的应用程序包含“服务定位器”模式的实现。 ServiceLocator 是一个中央组件,它为远程 EJB 执行 (JNDI) 查找,并被我们的几个应用程序/组件(r6-core、Java-API 等)使用。 ServiceLocator 有多个配置选项,其主要目标是实现灵活的(机器独立/应用独立)部署场景。另一个目标是从业务逻辑(代码)中屏蔽 JNDI/EJB 查找样板。
如果特定的 EJB 配置为仅通过本地调用进行调用,则 ServiceLocator 实现首先实例化一个空的 InitialContext 并执行 JNDI 查找:
InitialContext ic = new InitialContext();
ic.lookup(jndiName);
当前意外的行为是我们在执行这段代码时得到以下异常:
lookup for jndi-name 'java:global/.../ar-common-impl/ArPropertiesDaoBean' failed: 'Communication exception for SerialContext[myEnv=
{java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,
java.naming.corba.orb=com.sun.corba.ee.impl.orb.ORBImpl@4f92338d,
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,
java.naming.factory.url.pkgs=com.sun.enterprise.naming,
com.sun.appserv.ee.iiop.endpointslist=corbaloc:iiop:1.2@sprprd01:23700}
这个异常说明尝试了远程调用!由于这些(仅本地)EJB 未配置为远程 bean(因此不可序列化),因此抛出异常。
问题是:即使我们没有提供任何这些参数,端点列表从何而来?
最佳答案
问题已通过使用 EJB 注入(inject)而不是本地查找得到解决
关于java - SerialContext 的通信异常 [myEnv= Glassfish 3.1.2.2 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25685416/