不同客户端调用EJB

来源:互联网 发布:阿里云服务器承载量 编辑:程序博客网 时间:2024/04/28 16:07

EJB支持的客户端类型:

  • 本地客户端 (必须与企业Bean运行在同一个JVM中)
  • 远程客户端 
  • Web service客户端

 

创建一个EJB项目:

1. 创建接口

public interface FirstEjb {public String saySomething(String name);}

2. 实现接口并加注解

@Stateless@Remote <a>/*@Local</a>  @Webservice*/public class FirstEjbBean implements FirstEjb {public String saySomething(String name) {return name;}}

3. 将EJB项目部署到JBoss

 

创建客户端

一、 远程客户端

  1. 创建一个java项目

  2. 配置客户端环境

       将EJB项目的接口打成jar包(如果有EntityBean,连同EntityBean一起打包),将这个jar包加入到客户端项目的类路径中。

        将Jboss_home/client中的所有jar包加到客户端项目中。

   3. 在客户端创建EJB对象(通过InitialContext得到EJB对象,InitialContext是JNDI的一个对象,JNDI是JBoss应用服务器提供的一种服务)

    private static Context context;    If(context==null){Hashtable  props = new Hashtable();props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");props.put(Context.PROVIDER_URL,"jnp://EJB所在的IP:1099");Context=new InitialContext(props);    }    FirstEjb firstEjb = (FirstEjb)context.lookup("FirstEjbBean/remote");    firstEjb.saySomething("liusong");

 

二、 本地客户端

  1. 创建一个java Web项目

  2. 配置客户端环境

          将EJB项目的接口打成jar包(如果有EntityBean,连同EntityBean一起打包),将这个jar包加入到客户端项目的类路径中。
  3. 在客户端创建EJB对象

<%@ page import="javax.naming.*,com.tgb.ejb.*" %><html><body><%InitialContext context= new InitialContext();FirstEjb firstEjb = (FirstEjb)context.lookup("FirstEjbBean/local");firstEjb.saySomething("liusong");%></body></html>


三、 Web service客户端

        暂时略

         Web Service客户端可以访问Stateless Session Bean的接口,业务逻辑方法需要用@WebMethod标识。

 

远程调用和本地调用比较:

@Remote

@Local

客户端需要ejb接口jar

需要

需要jndi配置

不需要

客户端需要Jboss客户端jar

不需要

EntityBena需要实现序列化接口

不需要

客户端不需要在EJB服务器中运行

需要在服务器中运行

参数通过传值方式传递

参数通过传地址方式传递

 

只能Remote方式访问

可以Remote和Local方式访问

如果Bean中没有注明@Remote或者@Local,默认为@Local接口。

如果在本机调用EJB,采用Local接口访问要优于Remote接口。Remote接口访问EJB需要经过远程方法调用(RPCS)环节,而Local接口访问EJB直接从JVM中返回EJB的引用。

由于远程调用的速度比较慢,所以在设计的时候,尽量使用粗粒度的接口,以减少方法的调用,并尽可能在一次方法调用中传输完毕所需要的数据。

原创粉丝点击