JAVAEE之EJB client访问remote EJB的几个注意点

本文详细介绍了EJBClient在访问部署于不同操作系统上的EJB时遇到的问题及其解决方案,包括配置玻璃鱼服务器、使用JNDI查找接口、以及提供了一段访问远程EJB的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一,EJBClient不能为javafx项目,因为会导致

 java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory

无解

第二,引入gf-client.jar和jndi-properties.jar的时候,不能将其拷贝出来,必须放在原位置,因为这两个文件还引用了glassfish其他的文件,如果移动位置,会导致错误

这里有个题外话,如果发布项目不可能带一个glassfish吧,其实我测试过,只有glassfish的lib文件夹和modules文件夹有用,其他文件夹都可以删除,这两个文件夹100M

其实里面大多数都没用,但是因为我只测试了jdni,如果需要其他东西的话,比如JPA,那么乱删一通可能就会出现问题,还是先保留

第三,使用jdni的客户端必须具备查找接口的class或者java文件,这里netbeans做了优化,简化了操作,当创建一个远程接口的时候,必须让你制定一个应用程序客户端,这样,EJB引用这个应用程序的jar,这样,方便了来回拷来拷去,client这边一保存,那边同步修改,

第四,远程访问的问题,windows的ejb client访问部署在windows上的ejb没有问题,linux上的client访问windows上部署的ejb没有问题,但是windows访问linux上部署的ejb就会出现错误,程序卡死不动,其实这个和查找不到对象是一个现象,可以将其IP或端口修改到一个不存在的地址,现象和windows client上访问linux上部署ejb一样,都是卡死不动,

这个问题我弄了两天,在国内的论坛上见到有人描述了这个现象,但是没有提出解决方案,最后在老外的一篇帖子上找到了解决方案,综合两篇帖子,虽然不能完全明白,但是也可以解决这个问题了,这里说一个现象,就是在winows上部署一个ejb在linux上部署一个ejb,先开启linux glassfish,关闭windows glassfish,用windows ejb client访问linux ejb,这时你会发现无法访问,程序卡死在那里,这时,开启windows上的glassfish,会发现,程序开始向下执行了,所以,不是windows上的glassfish自己访问自己,是在linux那里饶了一个圈又回来了,这个问题我也没想清楚,但是解决这个问题很简单,就是在glassfish的控制台上的server-config:ORB->IIOP->orb-listener-1的IP地址修改为本机IP地址即可,注意:localhost和127.0.0.1都不行,另外default-config不需要修改。

至此,EJB Client应该就可以远程访问EJB了,这里说下题外话,为什么需要用EJB Client:虽然现在B/S架构能解决大多数问题,但是,浏览器毕竟权限太低,如果要对本地文件进行操作的话,最好还是用client形式,毕竟自由得多。

最后,给出一个EJB Client访问部署在glassfish上的remote EJB的源代码

         try {
                    // TODO code application logic here
                    Properties props=new Properties();
                    props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");//glassfish专用字符串JBOSS和此不同
                    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", "localhost");//IP
        //            props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");//PORT
                     InitialContext ctx = new InitialContext(props);
                    Object sss= ctx.lookup("java:global/ApplicationEJB/CallEJB");
                    JOptionPane.showMessageDialog(null,"ok");
                } catch (NamingException ex) {
                    JOptionPane.showMessageDialog(null,"error");
                    Logger.getLogger(JavaFXApplication1.class.getName()).log(Level.SEVERE, null, ex);
                }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值