java访问远程ejb_EJB远程接口调用

一.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注解,代表本地接口)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Localpublic interfaceIejb {

String sayHelloWord(String userName);

}

View Code

2、编写实现类(加注解@Stateless,无状态bean)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Stateless

@Localpublic class EjbBean implementsIejb {

@OverridepublicString sayHelloWord(String userName) {return userName+":HelloWord!";

}

}

View Code

3.客户端调用

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@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注解,代表本地接口)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Localpublic interfaceIejb2 {

String sayHelloWord(String userName);

}

View Code

2、编写实现类

1(加注解@Alternative,代表取消自动注入)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Stateless

@Alternativepublic class IejbBean implementsIejb2 {

@OverridepublicString sayHello(String userName) {return userName+":Hello";

}

}

View Code

2(加注解@Alternative,代表取消自动注入)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Stateless

@Alternativepublic class NewIejbBean implementsIejb2 {

@OverridepublicString sayHello(String userName) {return userName+":HelloWorld";

}

}

View Code

3编写bean.xml指定接口的实现类(指定实现类为NewIejbBean)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

com.phhc.ejb_eg2.NewIejbBean

View Code

3、编写客户端(加注解@Inject表示注入)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

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,代表远程调用接口)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Remotepublic interface HelloWordRemote extendsSerializable {

Model sayHello(String world);

}

View Code

2、编写实现类(加@Stateless表示无状态的bean)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@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配置文件

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

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远程调用)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

public class HelloWordController extendsHttpServlet {

@EJB(name= "ejb/HelloWorldBeanEJB")private HelloWordRemote helloWord;

View Code

5、部署EJB程序和客户端程序,访问客户端程序

六.不同Glassfish之间的EJB远程调用

1、编写接口项目

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@Remotepublic interface HelloWordRemote extendsSerializable {

Model sayHello(String world);

}

View Code

2、编写实现类

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

@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、编写配置

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

version="3.1">

HelloWorldBeanEJB

com.phhc.ejb.servcices.HelloWordRemote

com.phhc.ejb.servcices.impl.HelloWorldBean

Stateless

Container

View Code

4、编写客户端

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

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)

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

?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、结构目录

3bb4971340caf8611e50f1e77dab4de7.png

759dbd6a4977e80dd55c3e97706cb9fe.png

afb4bd818de1cff83e4f1789782d8487.png

fff1152b1ca59de0a6c4ad223bd40d89.png

原文:http://www.cnblogs.com/javawan/p/6636098.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值