4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
使用glassfish开发ejb3的session bean - 黑桃 - ITeye博客
来自 : www.iteye.com/blog/geoconst-42 发布时间:2021-03-24
项目结构如下:


HelloWorldClient类是HelloWorld的ejb3客户端调用类
IHelloWorldRemote是接口(两年没做C++,还是喜欢C++的表示法)
HelloWorldBean是IHelloWorldRemote的实现类

所需的jar包如下:
appserv-deployment-client.jar
appserv-ext.jar
appserv-rt.jar
javaee.jar
这些jar包在glassfish_home/lib目录下均可找到

IHelloWorldRemote代码如下:
package my.ejb3.iface;public interface IHelloWorldRemote public String sayHello();

HelloWorldBean代码如下:
package my.ejb3.impl;import javax.ejb.Remote;import javax.ejb.Stateless;import my.ejb3.iface.IHelloWorldRemote;@Stateless(mappedName=\"HelloWorldBean\")@Remote(IHelloWorldRemote.class)public class HelloWorldBean implements IHelloWorldRemote public String sayHello() return \"Hey, Hello World!\";

@Stateless标签表明这个类是一个无状态会话Bean,mappedName最好设置,理由后面解释
@Remote(IHelloWorldRemote.class)表明IHelloWorldRemote接口是一个远程接口,只能以远程方式来访问

至此,一个简单的EJB3会话Bean已完成,打包helloworld.jar
打开glassfish web控制台,部署helloworld.jar至“EJB模块”

HelloWorldBean的客户端调用代码:
import ... //此处省略public class HelloWorldClient public static void main(String[] args) 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\", \"localhost\"); props.setProperty(\"org.omg.CORBA.ORBInitialPort\", \"3700\"); InitialContext ctx = new InitialContext(props); IHelloWorldRemote helloWorld = (IHelloWorldRemote)ctx.lookup(\"HelloWorldBean\"); String result = helloWorld.sayHello(); System.out.println(result); catch (NamingException e) e.printStackTrace();

当然这里由于glassfish是在本机所以Host设置为localhost,如果非本地,请改为对应IP
glassfish的EJB端口默认为3700,如果安装过程有改动,请改为对应端口

如果顺利的话,控制台将打印出:
Hey, Hello World!

如果客户端和服务器是在同一台机器上,客户端的调用代码可以简化为:
public class HelloWorldClient public static void main(String[] args) InitialContext ctx = new InitialContext(); IHelloWorldRemote helloWorld = (IHelloWorldRemote)ctx.lookup(\"HelloWorldBean\"); String result = helloWorld.sayHello(); System.out.println(result); catch (NamingException e) e.printStackTrace();

这是因为InitialContext默认会读取jndi.properties文件,而appserv-rt.jar包中提供了一个这样的jndi.properties文件。另外,Host默认是localhost,端口默认是3700。

至此,一个HelloWorld的EJB3无状态会话Bean已完成。


注意:
mappedName就是在InitialContext lookup时使用的名称。
如果我们不设置这个mappedName,那么部署后的EJB名称是什么呢?在jboss中将会是HelloWorldBean/remote,而在glassfish中将使用IHelloWorldRemote接口的全名,即my.ejb3.iface.IHelloWorldRemote(注意是接口的全名)。为了去掉这些不必要的麻烦,建议设置mappedName。


glassfish上开发ejb的一些参考资料:
http://groups.google.com/group/glassfish_china/web/ejb
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment

本文链接: http://benaglobal.immuno-online.com/view-711788.html

发布于 : 2021-03-24 阅读(0)