我試圖將多個對象傳遞給EJB遠程接口沒有部署Glassfish 3.1.1。無論是第一個對象,它都會通過罰款,第二個對象始終爲空。這是由於rmi-iiop的規格還是屬性設置?將多個對象傳遞給EJB遠程接口
這裏是我的屬性設置:
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")
}
在這種情況下,手機會一直爲空,如果我換了aruguments人會爲空!如果IP被設置爲本地主機,一切都會正常工作。
請幫
你是什麼意思「通過多個對象」?你的意思是你在遠程接口上有兩個參數的方法,你的第一個參數是好的,但第二個參數是null?這似乎很奇怪。 –
這正是我的意思。 – mjeragh
我看到你設置了很多屬性來使它工作。根據[documentation](http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html),您應該使用無參數InitialContext()。設置IP地址時,行爲會發生變化,這很奇怪。也許你在設置/ etc/hosts的方式或防火牆方面遇到問題?關於/ etc/hosts配置,Glassfish是[picky](http://www.iniy.org/?p=275)。 – Jim