GlassFish 3.1 中客户端的 ctx.lookup() 时发生 CommunicationException
Posted
技术标签:
【中文标题】GlassFish 3.1 中客户端的 ctx.lookup() 时发生 CommunicationException【英文标题】:CommunicationException while client's ctx.lookup() in GlassFish 3.1 【发布时间】:2011-05-05 10:32:20 【问题描述】:我有一个实现 Serializable 的实体类,我在客户端收到此错误:
javax.naming.CommunicationException: 通信异常 SerialContext[myEnv=java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl [根例外是 java.rmi.MarshalException: CORBA BAD_PARAM 1398079494 也许;嵌套的 例外是: java.io.NotSerializableException: ----------BEGIN 服务器端堆栈跟踪---------- org.omg.CORBA.BAD_PARAM:警告: IOP00100006:类 com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate 不可序列化 vmcid:SUN 次要 代码:6 完成:也许
当我在做SomeService serv = (SomeService)ctx.lookup("java:global/MyProject/SomeServiceImpl");
Entity 类是否应该在服务器和客户端都在同一个包中? 现在Entity类在Client App的包(dir)和SomeService接口在服务端的包(dir)中。
【问题讨论】:
【参考方案1】:我在服务接口上添加了@Remote
注解,错误消失了。
【讨论】:
感谢您发布您的解决方案,我永远不会从错误中弄清楚这一点。【参考方案2】:我尝试了以下,一切正常。
当创建 InitialContext 为:
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);
后来,
myBeanService = (MyBeanService) ctx.lookup("java:global/AppName/MyBeanService");
显示该异常,但如果我只是这样调用:
myBeanService = (MyBeanService) new InitialContext().lookup("java:global/AppName/MyBeanService");
没有问题。问题是 JNDI 属性。
【讨论】:
以上是关于GlassFish 3.1 中客户端的 ctx.lookup() 时发生 CommunicationException的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?
使用 .NET Core 3.1 生成 WCF wsdl 客户端的问题
无法实例化提供程序 org.glassfish.jersey.client.JerseyClientBuilder