一.EJB简介
EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)
二.EJB与DUBBO的区别
Dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架。(必须依赖于Spring框架,必须启动Zookeeper服务,用于注册接口),与EJB一样,都可以实现接口与实现类的远程类调用,实现接口,可以将核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应。
三.EJB在同项目中的应用(只有一个实现类)
1、定义接口(加@Local注解,代表本地接口)
@Localpublic interfaceIejb {
String sayHelloWord(String userName);
}
View Code
2、编写实现类(加注解@Stateless,无状态bean)
@Stateless
@Localpublic class EjbBean implementsIejb {
@OverridepublicString sayHelloWord(String userName) {return userName+":HelloWord!";
}
}
View Code
3.客户端调用
@Statelesspublic class HelloWorldLocalController extendsHttpServlet {
@EJBprivateIejb iejb;
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse response) throwsServletException, IOException {
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
String s= JSON.toJSONString(helloWorld.sayHello("wangping"));
pw.write(s);
pw.close();
}
}
View Code
四.EJB在同项目中的应用(一个接口对应多个实现类)
1、定义接口(加@Local注解,代表本地接口)
@Localpublic interfaceIejb2 {
String sayHelloWord(String userName);
}
View Code
2、编写实现类
1(加注解@Alternative,代表取消自动注入)
@Stateless
@Alternativepublic class IejbBean implementsIejb2 {
@OverridepublicString sayHello(String userName) {return userName+":Hello";
}
}
View Code
2(加注解@Alternative,代表取消自动注入)
@Stateless
@Alternativepublic class NewIejbBean implementsIejb2 {
@OverridepublicString sayHello(String userName) {return userName+":HelloWorld";
}
}
View Code
3编写bean.xml指定接口的实现类(指定实现类为NewIejbBean)
com.phhc.ejb_eg2.NewIejbBean
View Code
3、编写客户端(加注解@Inject表示注入)
public class DemoServlet2 extendsHttpServlet {
@InjectprivateIejb2 iejb;
@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse response) {try{
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
String s= JSON.toJSONString(iejb.sayHello("wangping"));
pw.write(s);
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
View Code
五.EJB在同类容器不同项目中的远程调用
1.编写接口(加@Remote,代表远程调用接口)
@Remotepublic interface HelloWordRemote extendsSerializable {
Model sayHello(String world);
}
View Code
2、编写实现类(加@Stateless表示无状态的bean)
@Stateless(name = "HelloWorldBeanEJB")
@Remote(HelloWordRemote.class)
@Local(HelloWordLocal.class)public class HelloWorldBean implementsHelloWordRemote,HelloWordLocal {
@OverridepublicString sayHello(String world) {return "HelloWorld:"+world;
}
}
View Code
3、在项目根目录下创建META-INF目录,下面添加ejb-jar.xml配置文件
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"version="3.1">
HelloWorldBeanEJB
com.phhc.ejb.servcices.HelloWordRemote
com.phhc.ejb.servcices.HelloWordLocal
com.phhc.ejb.servcices.impl.HelloWorldBean
Stateless
Container
View Code
4、创建客户端程序(加EJB注解,表示EJB远程调用)
public class HelloWordController extendsHttpServlet {
@EJB(name= "ejb/HelloWorldBeanEJB")private HelloWordRemote helloWord;
View Code
5、部署EJB程序和客户端程序,访问客户端程序
六.不同Glassfish之间的EJB远程调用
1、编写接口项目
@Remotepublic interface HelloWordRemote extendsSerializable {
Model sayHello(String world);
}
View Code
2、编写实现类
@Stateless(name = "HelloWorldBeanEJB")public class HelloWorldBean implementsHelloWordRemote {publicHelloWorldBean() {
}
@OverridepublicModel sayHello(String world) {
Model model= newModel();
model.setName(world);
model.setSex("男");
model.setHobby("女");returnmodel;
}
}
View Code
3、编写配置
version="3.1">
HelloWorldBeanEJB
com.phhc.ejb.servcices.HelloWordRemote
com.phhc.ejb.servcices.impl.HelloWorldBean
Stateless
Container
View Code
4、编写客户端
public class HelloWordController extendsHttpServlet {
@EJB(name= "ejb/HelloWorldBeanEJB")privateHelloWordRemote helloWord;
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse response) throwsServletException, IOException {
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
String s= JSON.toJSONString(helloWord.sayHello("wanping"));
pw.write(s);
pw.close();
}
}
View Code
5、客户端配置(jndi)
?xml version="1.0" encoding="UTF-8"?>-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN‘
‘http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_3-0.dtd‘>
com.phhc.controller.HelloWordController/helloWorld
View Code
6、结构目录
原文:http://www.cnblogs.com/javawan/p/6636098.html