EJB FAQ: https://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB
本地:
Properties props = new Properties();
//props.setProperty("java.naming.factory.initial", "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", host);
props.setProperty("org.omg.CORBA.ORBInitialPort", port);
Context ctx = new InitialContext(props);
EJBRemote remoteEjb= (EJBRemote )ctx.lookup("java:global/" + app/ejbName);;//见控制台输出.
remoteEjb.xxxx();
------------------
远程: 具体的方法实现
远程接口:
<jvm-options>-Dorg.omg.CORBA.ORBSingletonClass=com.sun.corba.se.impl.orb.ORBSingleton</jvm-options>
glassfish domain.xml文件配置
//配置server端的jvm。
普通的java客户端可以正常访问远程EJB,儿在javaee环境中无法访问的情况:
1)<jvm-options>-Dorg.omg.CORBA.ORBSingletonClass=com.sun.corba.se.impl.orb.ORBSingleton</jvm-options>
glassfish domain.xml文件配置//默认的这个类无法加载..
2)出现Character does not map to negotiated transmission code set vmcid: SUN minor code: 1 completed: No异常
详细: 00810007: Underflow in BufferManagerReadStream after last fragment in message vmcid: OMG minor code: 7 completed: No
存在未序列化的类
发生诸如character 无法映射到trans......之类的错误,其实是项目的路径中存在非英文字符
ejb在glassfish web环境下只需要像上面的配置即可远程访问,系统会自动读取System.getProperty()中的属性,独立的java 程序则需要将
远程接口的包结构要与他在远程ejb中时候的结构一致,否则运行的时候会报找不到远程接口的错误.