我的应用程序包含“服务定位器”模式的实现。 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(因此不可序列化),因此抛出异常。
问题是:即使我们没有提供任何这些参数,端点列表也来自哪里?
答案 0 :(得分:0)
使用EJB注入而不是本地查找解决了问题