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的分类


EJB入门例子_第1张图片
2. EJB运行环境JBoss安装

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

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


EJB入门例子_第2张图片
单机C:\jboss-4.2.1.GA\bin下run.bat可以启动JBoss,如果启动过程不抛出异常,说明JBoss启动正常。

3.安装Ant

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


EJB入门例子_第3张图片
将路径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. @Stateless
  6. @Remote({HelloWorld.class})
  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中会有相应提示,如下图:


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

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

在打开页面中


EJB入门例子_第5张图片
单机service=JNDIView查看JNDI名称

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


EJB入门例子_第6张图片
在弹出页面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.总结



EJB入门例子_第7张图片

本例子主要流程:

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

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

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

4 将结果返回客户

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

  • dev-workspace.rar(871.5 KB)
  • 下载次数: 24
  • 查看图片附件

你可能感兴趣的:(EJB入门例子)