【发布时间】:2011-08-11 11:51:57
【问题描述】:
我试图将多个对象传递给未部署 Glassfish 3.1.1 的 EJB 远程接口。无论第一个对象是什么,它都会很好地传递第二个对象始终为空。是因为 rmi-iiop 的规格还是属性设置?
这是我的属性设置:
final Properties props = new Properties();
props.setProperty(InitialContext.STATE_FACTORIES,
"com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs",
"com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state",
"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.192");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
// props.setProperty("com.sun.appserv.iiop.orbconnections","5");
// Increase ORB Response Timeout to 5 min instead of 30 min:
// props.setProperty("com.sun.corba.ee.transport.ORBTCPTimeouts",
// "500:90000:20");
props.setProperty(
"com.sun.corba.ee.transport.ORBWaitForResponseTimeout",
"300000");
try {
InitialContext ic=new InitialContext(props);
TestRemote remote=(TestRemote) ic.lookup("java:global/com.capmtech_test.ear-ear_ear_1.0-SNAPSHOT/test.ear-ejb-1.0-SNAPSHOT/Test!com.capmtech.TestRemote");
Person p = new Person();
p.setName("Smith");
Phone m = new Phone();
remote.test(p, m);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是无状态的 EJB:
@Stateless
public class Test implements TestRemote {
@EJB
private PersonFacadeLocal personFacade;
@Override
public void test(Person person, Phone mobile) {
Person p = person;
p.setMobile(mobile);
personFacade.create(p);
}
// Add business logic below. (Right-click in editor and choose
// "Insert Code > Add Business Method")
}
在这种情况下,移动设备将始终为空,如果我交换参数,人将是空的!如果 IP 设置为 localhost 一切都会正常工作。
请帮忙
【问题讨论】:
-
“传递多个对象”是什么意思?你的意思是你有一个远程接口上有两个参数的方法,你的第一个参数很好,但第二个参数为空?这看起来很奇怪。
-
我看到你设置了很多属性来让它工作。根据documentation,您应该使用无参数 InitialContext()。设置ip地址时行为会发生变化,这很奇怪。也许您对 /etc/hosts 的设置方式或防火墙有问题? Glassfish 是关于 /etc/hosts 配置的picky。
-
这看起来很奇怪。我从未见过这种行为。我想我会建议创建一个独立的测试用例并使用 Glassfish 打开一个错误报告。
标签: rmi glassfish-3 ejb-3.1