EJB入门例子
2013-12-11 12:32
337 查看
说明:本文从一个实例说明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的分类
![](http://dl.iteye.com/upload/attachment/330506/8ed16ea6-8360-3972-b274-b89f4f01d149.png)
2. EJB运行环境JBoss安装
下载4.2版本以后,我这里就用4.2.1因为工作中用的就是这个版本,下载链接http://www.jboss.org/jbossas/downloads/
下载完解压,我将其解压到C盘根目录,解压完成配置JBoss Home,如下图:
![](http://dl.iteye.com/upload/attachment/330512/30f00aeb-1bd5-3ef0-95bd-4664159170b2.png)
单机C:\jboss-4.2.1.GA\bin下run.bat可以启动JBoss,如果启动过程不抛出异常,说明JBoss启动正常。
3.安装Ant
下载http://ant.apache.org/下载完我同样解压到C盘根目录,配置Ant Home,如下图
![](http://dl.iteye.com/upload/attachment/330516/1337a46e-981d-3a9b-a5fc-60b0b70392ba.png)
将路径C:\apache-ant-1.8.1\bin添加到系统path.
4. 开发只实现Remote接口的无状态Session Bean
Step1: Eclipse下新建一个JavaProject com.ejb.helloworld;
Step2: 定义一个包括业务方法的接口。调用EJB的客户端只需要使用这个接口变可以调用服务器内部这个接口的实现,接口代码:
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
package com.ejb.helloworld;
public interface HelloWorld {
public StringsayHello(String name);
}
Step3:编写Bean Class,此类是上述接口在服务器端的实现,代码
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
package com.ejb.helloworld.impl;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import com.ejb.helloworld.HelloWorld;
<strong>@Stateless
@Remote ({HelloWorld.class})</strong>
public class HelloWorldBean implements HelloWorld {
public StringsayHello(String name) {
return name + " saying Hello World Loudly...";
}
}
注意加粗两行代表该Bean定义EJB规范。
Step4:Ant将上述工程打包,发布到JBoss。
在com.ejb.helloworld根目录下构建build.xml,XML内容:
Xml代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
<?xml version="1.0"?>
<project name="com.ejb.helloworld" default="deploy" basedir="..">
<property environment="env" />
<property name="app.dir" value="${basedir}\com.ejb.helloworld" />
<property name="src.dir" value="${app.dir}\src" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<property name="build.dir" value="${app.dir}\build" />
<property name="build.classes.dir" value="${build.dir}\classes" />
<path id="build.classpath">
<fileset dir="${jboss.home}\client">
<include name="*.jar" />
</fileset>
<pathelement location="${build.classes.dir}" />
</path>
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes.dir}" />
</target>
<target name="compile" depends="prepare" description="compile">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**">
<classpath refid="build.classpath" />
</javac>
</target>
<target name="ejbjar" depends="compile" description="caeate hello world jar file...">
<jar jarfile="${app.dir}\HelloWorld.jar">
<fileset dir="${build.classes.dir}">
<include name="com/**/*.class" />
</fileset>
</jar>
</target>
<target name="deploy" depends="ejbjar">
<copy file="${app.dir}\HelloWorld.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
</target>
<target name="clean">
<delete dir="${build.dir}" />
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\HelloWorld.jar" />
</target>
</project>
关于如何使用Ant这里不多说,Build成功后在JBoss的Console中会有相应提示,如下图:
![](http://dl.iteye.com/upload/attachment/330690/a2bf580e-4106-3b14-887a-de5a934ec9c8.png)
上图说明com.ejb.helloworldbuild成功是jar包已经部署到JBoss,并且部署成功,当然可以到C:\jboss-4.2.1.GA\server\default\deploy目录下查看,
另外还可以到http://127.0.0.1:8080/jmx-console/HtmlAdaptor处查看
在打开页面中
![](http://dl.iteye.com/upload/attachment/330692/59f7c77e-91f2-3176-bc1b-3b376e66ec0a.png)
单机service=JNDIView查看JNDI名称
在出现的页面中找到“List of Mbean opreations”点击invoke按钮
![](http://dl.iteye.com/upload/attachment/330698/0a778172-0e71-3903-9991-0179b766e80d.png)
在弹出页面Global JNDI Namespace最下端会出现HelloWorld.jar的JNDI信息
![](http://dl.iteye.com/upload/attachment/330700/9075f699-6209-3f13-b879-33372314a937.png)
5.客户端开发
客户端为简单的Web界面,就一个jsp文件
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.ejb.helloworld.HelloWorld, javax.naming.*, java.util.Properties"%>
<%
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
try {
InitialContext ctx = new InitialContext(props);
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
out.println(helloworld.sayHello("Kobe bryant"));
} catch (NamingException e) {
out.println(e.getMessage());
}
%>
同样build次项目
build.xml内容如下
Xml代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
<?xml version="1.0"?>
<project name="EJBTest" default="deploy" basedir=".">
<property environment="env" />
<property name="resouce.dir" value="${basedir}\web" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<target name="web-war" description="careate web war" depends="clean">
<war warfile="${basedir}\hello.war" webxml="${resouce.dir}\WEB-INF\web.xml">
<fileset dir="${resouce.dir}">
<include name="**/*"/>
</fileset>
</war>
</target>
<target name="deploy" depends="web-war">
<copy file="${basedir}\hello.war" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
</target>
<target name="clean">
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\hello.war" />
</target>
</project>
6。测试
http://127.0.0.1:8080/hello/hello.jsp会出现页面输出一行字符
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
Kobe bryant saying Hello World Loudly...
7.总结
![](http://dl.iteye.com/upload/attachment/330714/401e763b-4f7e-36f3-a4f5-8c621ba6ca9f.png)
本例子主要流程:
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
查看图片附件
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的分类
![](http://dl.iteye.com/upload/attachment/330506/8ed16ea6-8360-3972-b274-b89f4f01d149.png)
2. EJB运行环境JBoss安装
下载4.2版本以后,我这里就用4.2.1因为工作中用的就是这个版本,下载链接http://www.jboss.org/jbossas/downloads/
下载完解压,我将其解压到C盘根目录,解压完成配置JBoss Home,如下图:
![](http://dl.iteye.com/upload/attachment/330512/30f00aeb-1bd5-3ef0-95bd-4664159170b2.png)
单机C:\jboss-4.2.1.GA\bin下run.bat可以启动JBoss,如果启动过程不抛出异常,说明JBoss启动正常。
3.安装Ant
下载http://ant.apache.org/下载完我同样解压到C盘根目录,配置Ant Home,如下图
![](http://dl.iteye.com/upload/attachment/330516/1337a46e-981d-3a9b-a5fc-60b0b70392ba.png)
将路径C:\apache-ant-1.8.1\bin添加到系统path.
4. 开发只实现Remote接口的无状态Session Bean
Step1: Eclipse下新建一个JavaProject com.ejb.helloworld;
Step2: 定义一个包括业务方法的接口。调用EJB的客户端只需要使用这个接口变可以调用服务器内部这个接口的实现,接口代码:
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
package com.ejb.helloworld;
public interface HelloWorld {
public StringsayHello(String name);
}
Step3:编写Bean Class,此类是上述接口在服务器端的实现,代码
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
package com.ejb.helloworld.impl;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import com.ejb.helloworld.HelloWorld;
<strong>@Stateless
@Remote ({HelloWorld.class})</strong>
public class HelloWorldBean implements HelloWorld {
public StringsayHello(String name) {
return name + " saying Hello World Loudly...";
}
}
注意加粗两行代表该Bean定义EJB规范。
Step4:Ant将上述工程打包,发布到JBoss。
在com.ejb.helloworld根目录下构建build.xml,XML内容:
Xml代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
<?xml version="1.0"?>
<project name="com.ejb.helloworld" default="deploy" basedir="..">
<property environment="env" />
<property name="app.dir" value="${basedir}\com.ejb.helloworld" />
<property name="src.dir" value="${app.dir}\src" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<property name="build.dir" value="${app.dir}\build" />
<property name="build.classes.dir" value="${build.dir}\classes" />
<path id="build.classpath">
<fileset dir="${jboss.home}\client">
<include name="*.jar" />
</fileset>
<pathelement location="${build.classes.dir}" />
</path>
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes.dir}" />
</target>
<target name="compile" depends="prepare" description="compile">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**">
<classpath refid="build.classpath" />
</javac>
</target>
<target name="ejbjar" depends="compile" description="caeate hello world jar file...">
<jar jarfile="${app.dir}\HelloWorld.jar">
<fileset dir="${build.classes.dir}">
<include name="com/**/*.class" />
</fileset>
</jar>
</target>
<target name="deploy" depends="ejbjar">
<copy file="${app.dir}\HelloWorld.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
</target>
<target name="clean">
<delete dir="${build.dir}" />
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\HelloWorld.jar" />
</target>
</project>
关于如何使用Ant这里不多说,Build成功后在JBoss的Console中会有相应提示,如下图:
![](http://dl.iteye.com/upload/attachment/330690/a2bf580e-4106-3b14-887a-de5a934ec9c8.png)
上图说明com.ejb.helloworldbuild成功是jar包已经部署到JBoss,并且部署成功,当然可以到C:\jboss-4.2.1.GA\server\default\deploy目录下查看,
另外还可以到http://127.0.0.1:8080/jmx-console/HtmlAdaptor处查看
在打开页面中
![](http://dl.iteye.com/upload/attachment/330692/59f7c77e-91f2-3176-bc1b-3b376e66ec0a.png)
单机service=JNDIView查看JNDI名称
在出现的页面中找到“List of Mbean opreations”点击invoke按钮
![](http://dl.iteye.com/upload/attachment/330698/0a778172-0e71-3903-9991-0179b766e80d.png)
在弹出页面Global JNDI Namespace最下端会出现HelloWorld.jar的JNDI信息
![](http://dl.iteye.com/upload/attachment/330700/9075f699-6209-3f13-b879-33372314a937.png)
5.客户端开发
客户端为简单的Web界面,就一个jsp文件
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.ejb.helloworld.HelloWorld, javax.naming.*, java.util.Properties"%>
<%
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
try {
InitialContext ctx = new InitialContext(props);
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
out.println(helloworld.sayHello("Kobe bryant"));
} catch (NamingException e) {
out.println(e.getMessage());
}
%>
同样build次项目
build.xml内容如下
Xml代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
<?xml version="1.0"?>
<project name="EJBTest" default="deploy" basedir=".">
<property environment="env" />
<property name="resouce.dir" value="${basedir}\web" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<target name="web-war" description="careate web war" depends="clean">
<war warfile="${basedir}\hello.war" webxml="${resouce.dir}\WEB-INF\web.xml">
<fileset dir="${resouce.dir}">
<include name="**/*"/>
</fileset>
</war>
</target>
<target name="deploy" depends="web-war">
<copy file="${basedir}\hello.war" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
</target>
<target name="clean">
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\hello.war" />
</target>
</project>
6。测试
http://127.0.0.1:8080/hello/hello.jsp会出现页面输出一行字符
Java代码
![](http://kylinsoong.iteye.com/images/icon_star.png)
Kobe bryant saying Hello World Loudly...
7.总结
![](http://dl.iteye.com/upload/attachment/330714/401e763b-4f7e-36f3-a4f5-8c621ba6ca9f.png)
本例子主要流程:
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入门例子
- Beans入门必读之经典EJB例子代码
- EJB入门第一个小例子
- EJB入门例子
- 缓冲区溢出攻击-入门例子原理分析
- JPA入门例子(采用JPA的hibernate实现版本)
- 一个简单的iBatis入门例子
- kafka+spark streaming例子入门
- spring mvc构建WEB应用程序入门例子
- jbpm-很好的入门例子
- HttpClient4.1入门教程-利用官方例子讲解httpClient4.1的用法
- 服务端入门《六》(gdb 调试例子)
- Maya插件开发入门(5):一个完整的例子
- spark入门cogroup简单例子(JAVA)
- Android中关于JNI 的学习(零)简单的例子,简单地入门
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- 通过Redux源码学习基础概念一:简单例子入门
- [置顶] Activity工作流(2)-入门安装运行第一个例子
- spring boot 入门之security oauth2 jwt完美整合例子-java编程
- JPA入门例子(采用JPA的hibernate实现版本)