EJB入门例子


说明:本文从一个实例说明EJB的基本理念

1. 简单说一下EJB概念

引用几句比较官方的话来定义EJB

"EJB(Enterprise JavaBeans) is a server-side component framework that simplifies the process of building enterprise-class distributed component applications in java. By using EJB, you can write scalable, reliable, secure applications without writing your own complex distibuted component framework."

这句话主要说明EJB是服务器端的组件框架,用来构建分布式应用;

"EJB is a standard for developing and deploying server-side distributed components in Java. It defines an agreement (contract) between components and application servers that enables any component to run in any compliant application server."

这句话定义了EJB。

看一个图说明EJB的分类



2. EJB运行环境JBoss安装

下载4.2版本以后,我这里就用4.2.1因为工作中用的就是这个版本,下载链接http://www.jboss.org/jbossas/downloads/

下载完解压,我将其解压到C盘根目录,解压完成配置JBoss Home,如下图:



单机C:\jboss-4.2.1.GA\bin下run.bat可以启动JBoss,如果启动过程不抛出异常,说明JBoss启动正常。

3.安装Ant

下载http://ant.apache.org/下载完我同样解压到C盘根目录,配置Ant Home,如下图



将路径C:\apache-ant-1.8.1\bin添加到系统path.

4. 开发只实现Remote接口的无状态Session Bean

Step1: Eclipse下新建一个JavaProject com.ejb.helloworld;

Step2: 定义一个包括业务方法的接口。调用EJB的客户端只需要使用这个接口变可以调用服务器内部这个接口的实现,接口代码:

Java代码 收藏代码
  1. packagecom.ejb.helloworld;
  2. publicinterfaceHelloWorld{
  3. publicStringsayHello(Stringname);
  4. }

Step3:编写Bean Class,此类是上述接口在服务器端的实现,代码

Java代码 收藏代码
  1. packagecom.ejb.helloworld.impl;
  2. importjavax.ejb.Remote;
  3. importjavax.ejb.Stateless;
  4. importcom.ejb.helloworld.HelloWorld;
  5. <strong>@Stateless
  6. @Remote({HelloWorld.class})</strong>
  7. publicclassHelloWorldBeanimplementsHelloWorld{
  8. publicStringsayHello(Stringname){
  9. returnname+"sayingHelloWorldLoudly...";
  10. }
  11. }

注意加粗两行代表该Bean定义EJB规范。

Step4:Ant将上述工程打包,发布到JBoss。

在com.ejb.helloworld根目录下构建build.xml,XML内容:

Xml代码 收藏代码
  1. <?xmlversion="1.0"?>
  2. <projectname="com.ejb.helloworld"default="deploy"basedir="..">
  3. <propertyenvironment="env"/>
  4. <propertyname="app.dir"value="${basedir}\com.ejb.helloworld"/>
  5. <propertyname="src.dir"value="${app.dir}\src"/>
  6. <propertyname="jboss.home"value="${env.JBOSS_HOME}"/>
  7. <propertyname="jboss.server.config"value="default"/>
  8. <propertyname="build.dir"value="${app.dir}\build"/>
  9. <propertyname="build.classes.dir"value="${build.dir}\classes"/>
  10. <pathid="build.classpath">
  11. <filesetdir="${jboss.home}\client">
  12. <includename="*.jar"/>
  13. </fileset>
  14. <pathelementlocation="${build.classes.dir}"/>
  15. </path>
  16. <targetname="prepare"depends="clean">
  17. <mkdirdir="${build.dir}"/>
  18. <mkdirdir="${build.classes.dir}"/>
  19. </target>
  20. <targetname="compile"depends="prepare"description="compile">
  21. <javacsrcdir="${src.dir}"destdir="${build.classes.dir}"debug="on"deprecation="on"optimize="off"includes="com/**">
  22. <classpathrefid="build.classpath"/>
  23. </javac>
  24. </target>
  25. <targetname="ejbjar"depends="compile"description="caeatehelloworldjarfile...">
  26. <jarjarfile="${app.dir}\HelloWorld.jar">
  27. <filesetdir="${build.classes.dir}">
  28. <includename="com/**/*.class"/>
  29. </fileset>
  30. </jar>
  31. </target>
  32. <targetname="deploy"depends="ejbjar">
  33. <copyfile="${app.dir}\HelloWorld.jar"todir="${jboss.home}\server\${jboss.server.config}\deploy"/>
  34. </target>
  35. <targetname="clean">
  36. <deletedir="${build.dir}"/>
  37. <deletefile="${jboss.home}\server\${jboss.server.config}\deploy\HelloWorld.jar"/>
  38. </target>
  39. </project>

关于如何使用Ant这里不多说,Build成功后在JBoss的Console中会有相应提示,如下图:



上图说明com.ejb.helloworldbuild成功是jar包已经部署到JBoss,并且部署成功,当然可以到C:\jboss-4.2.1.GA\server\default\deploy目录下查看,

另外还可以到http://127.0.0.1:8080/jmx-console/HtmlAdaptor处查看

在打开页面中



单机service=JNDIView查看JNDI名称

在出现的页面中找到“List of Mbean opreations”点击invoke按钮



在弹出页面Global JNDI Namespace最下端会出现HelloWorld.jar的JNDI信息



5.客户端开发

客户端为简单的Web界面,就一个jsp文件

Java代码 收藏代码
  1. <%@pagecontentType="text/html;charset=GBK"%>
  2. <%@pageimport="com.ejb.helloworld.HelloWorld,javax.naming.*,java.util.Properties"%>
  3. <%
  4. Propertiesprops=newProperties();
  5. props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
  6. props.setProperty("java.naming.provider.url","localhost:1099");
  7. try{
  8. InitialContextctx=newInitialContext(props);
  9. HelloWorldhelloworld=(HelloWorld)ctx.lookup("HelloWorldBean/remote");
  10. out.println(helloworld.sayHello("Kobebryant"));
  11. }catch(NamingExceptione){
  12. out.println(e.getMessage());
  13. }
  14. %>

同样build次项目

build.xml内容如下

Xml代码 收藏代码
  1. <?xmlversion="1.0"?>
  2. <projectname="EJBTest"default="deploy"basedir=".">
  3. <propertyenvironment="env"/>
  4. <propertyname="resouce.dir"value="${basedir}\web"/>
  5. <propertyname="jboss.home"value="${env.JBOSS_HOME}"/>
  6. <propertyname="jboss.server.config"value="default"/>
  7. <targetname="web-war"description="careatewebwar"depends="clean">
  8. <warwarfile="${basedir}\hello.war"webxml="${resouce.dir}\WEB-INF\web.xml">
  9. <filesetdir="${resouce.dir}">
  10. <includename="**/*"/>
  11. </fileset>
  12. </war>
  13. </target>
  14. <targetname="deploy"depends="web-war">
  15. <copyfile="${basedir}\hello.war"todir="${jboss.home}\server\${jboss.server.config}\deploy"/>
  16. </target>
  17. <targetname="clean">
  18. <deletefile="${jboss.home}\server\${jboss.server.config}\deploy\hello.war"/>
  19. </target>
  20. </project>

6。测试

http://127.0.0.1:8080/hello/hello.jsp会出现页面输出一行字符

Java代码 收藏代码
  1. KobebryantsayingHelloWorldLoudly...

7.总结





本例子主要流程:

1 客户端(Web Client)请求hello.jsp文件

2 应用服务器引擎编译hello.jsp

3 hello.jsp通过JNDI查找HelloWorldBean的EJB存根,调运sayHello方法

4 将结果返回客户

8。由于时间关系,本例子写的比较粗,如果有人提出不同意见欢迎。项目在附件dev-workspace.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值