EJB组件

1、     EJBsun的服务器端组件模型,最大的用处是部署分布式应用程序[当然,还有许多方式可以实现分布式应用],类似微软的.net技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台

2、     J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)

3、    jboss不支持中文文件名,只能使用英文文件名。

4、     Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。

5、     无状态bean:

1)  无状态会话Bean的含义

a)  通过方法调用,实现一定的功能

2)  无状态会话Bean的特性

b)  执行方法调用,直接返回结果

c)  不保存客户的状态

d)  需要的系统资源更少

e)  执行速度更快

3)  用途:

任何的单一功能的实现

a)   登陆的验证

b)   完成单一的算法

6、     编写无状态会话Bean需要三个部分

1) Home interface (主接口)

- 创建EJB的实例

- 提供生命周期管理方法,管理EJB实例

a) 无状态homeInterface主接口的书写规范

-     必须extend javax.ejb.EJBHome 接口

EJBHome 提供一些有用的方法,getHomeHandle(),getEJBMetaData()remove()

-     必须有一个create 方法

-     必须返回会话Bean的远程接口的类型

-     必须throw CreateException

-     所有定义的方法,包括create方法,必须throw RemoteException

-     在Home interface定义的方法,应该在Bean class中有相应的方法

   名称要对应

   举例:create( )方法对应ejbCreate( )

   方法参数的数目和类型要一致

例如:

public interface HomeInterface extends EJBHome {

                  public RemoteInterface create() throws CreateException, RemoteException;

}

 

2) Remote interface(远程接口)          

- 定义自己的商务方法

- 提供一些辅助的方法,例如:getHandle()

a)远程接口的书写规范

-     必须 extend javax.ejb.EJBObject 接口,提供方法有:

getEJBHome()

getHandle()

getPrimaryKey()

isIdentical()

remove()

 

-     所有的方法必须throws RemoteException

例如:

public interface RemoteInterface extends EJBObject{

         public int getInt(int i)throws RemoteException;

}

3) Bean class(Bean类)

- 实施所有的在Home interfaceRemote interface定义的方法

- 实施自己定义的商务方法

* 必须实现 javax.ejb.SessionBean 接口

* SessionBean接口提供一些callback(回调)方法

- ejbActivate( )

- ejbPassivate()

- setSessionContext(…)

- ejbRemove()

- Class必须为public

* 必须有一个public 构造方法而且没有参数

* 必须实现远程接口中定义的每个方法

* ejbCreate()方法和home接口中定义的方法一致

* 必须实现在SessionBean interface 中定义的每个方法

      例如:

public class SessionBean implements javax.ejb.SessionBean {

 

   /** The session context */

   private SessionContext context;

   private int number=10;

   public SessionBean() {

      // TODO Auto-generated constructor stub

   }

 

   //创建

   public void ejbCreate() throws EJBException, RemoteException {

      // TODO Auto-generated method stub

 

   }

   //激活

   public void ejbActivate() throws EJBException, RemoteException {

      // TODO Auto-generated method stub

 

   }

   //钝化

   public void ejbPassivate() throws EJBException, RemoteException {

      // TODO Auto-generated method stub

 

   }

   //移除

   public void ejbRemove() throws EJBException, RemoteException {

      // TODO Auto-generated method stub

 

   }

 

   public void setSessionContext(SessionContext newContext)

      throws EJBException {

      context = newContext;

   }

 

   public int getInt(int i)throws RemoteException{

      return i+number;

   }

 

}

 

7、     EJB的生成和部署

1)  编写EJBJava源文件:Remote接口,Home接口,EJBBean

2)  将源文件编译成class文件

3)  编写部署描述文件

4)  使用jar工具,创建一个包含部署描述和类文件的ejb-Jar文件

5)  将新生成Ejb-Jar文件部署到容器中.

8、     客户端如果调用EJB

1)  寻找Home对象

2)  利用Home对象创建EJB对象

3)  调用EJB对象的商业方法

4)  清除EJB对象

实例:

public static void main(String[] args) throws NamingException, RemoteException, CreateException {

       // TODO Auto-generated method stub

       //配置上下文环境

       Properties p = new Properties();

       p.put(Context.INITIAL_CONTEXT_FACTORY,

              "org.jnp.interfaces.NamingContextFactory");

       p.put(Context.URL_PKG_PREFIXES, "jboss.nameing:org.jnp.interfaces");

       p.put(Context.PROVIDER_URL, "127.0.0.1:1099");

       // 根据Properties对象对上下文环境进行设置

       Context jndiContext = new InitialContext(p);

       // 根据EJB的名称寻找服务

       Object ref = jndiContext.lookup("stateless");

       HomeInterface home =(HomeInterface)PortableRemoteObject.narrow(ref,

              HomeInterface.class);

       RemoteInterface remote = home.create();

        System.out.println(remote.getInt(10));      

      }

}

9、     部署描述文件ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd" >

<ejb-jar>

<enterprise-beans>

   <session>

    <ejb-name>stateless</ejb-name>

       <home>com.lovo.stateless.HomeInterface</home>

       <remote>com.lovo.stateless.RemoteInterface</remote>

       <ejb-class>com.lovo.stateless.SessionBean</ejb-class>

       <session-type>Stateless</session-type>

       <transaction-type>Container</transaction-type>

    </session>   

   

    <session>

       <ejb-name>stateful</ejb-name>

       <home>com.lovo.stateful.HomeInterfaceful</home>

       <remote>com.lovo.stateful.RemoteInterfaceful</remote>

       <ejb-class>com.lovo.stateful.SessionBeanful</ejb-class>

       <session-type>Stateful</session-type>

       <transaction-type>Container</transaction-type>

    </session>

</enterprise-beans>

</ejb-jar>

10、  整个EJB的执行过程

a)客户端通过JNDI检索Home对象的引用;

b)JNDI返回Home对象的引用;

c)请求创建一个新的EJB对象;

d)创建EJB对象;

e)返回EJB对象;

f)调用商务方法;

 

11、  有状态的bean

主接口中可以有多个create()方法,主接口有几个create()方法,sessionbean里面就要写几个ejbCreate()方法。

 

12、   Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。

13、   Entity Bean分两种:

1)  BMP 书写一个Bean去管理实体Bean;好处:灵活性增加,效率有所提升;

2)  CMP 容器去管理实体Bean;好处:简单,自动,但灵活性相当要低。

14、   .MessageDriven BeanEJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

15、    

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值