EJB3.0开发指南之有状态会话Bean

玲凌921

玲凌921

2016-01-29 12:57

EJB3.0开发指南之有状态会话Bean,EJB3.0开发指南之有状态会话Bean
  和无状态会话Bean一样,一个有状态会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生。这样,你可以只写一个文件,就可以生成业务逻辑实现类、远程接口、本地接口等。

  在目前jboss的实现中,必须要有一个独立的业务接口。

  这个接口不必实现EJBObject或者EJBLocalObject。

  一个有状态会话Bean 必须使用Statelfull注释,以表明它是一个有状态的会话Bean。EJB容器将根据这个注释来判定它的类型。或者实现javax.ejb.SessionBean接口。

  一个有状态的会话Bean可以实现setSessionContext方法,也可以不实现。

  在EJB2.0中调用EJBObject.remove方法以达到从容器中删除有状态会话Bean的功能。在EJB3.0中只需在一些方法加上Remove注释。一旦这些被标记的方法被调用后,此EJB将从容器中删除。

  一个有状态的会话Bean可以通过依赖注入获取容器的资源和环境属性。

  在Eclipse中导入本文提供的例子Stateful。

  这个例子和无状态会话Bean的例子类似,下面只列出了不同的代码。

  这个例子主要有5个文件:

   Counter.java:业务接口。

   CounterBean.java:业务实现类。将来我们开发的EJB也都是这样命名(在接口名上加上Bean)。

   Client.java:测试EJB的客户端类。

   jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。

   Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB。

  下面针对每个文件的内容做一个介绍。

  Counter.java
  ……
  import javax.ejb.Remove;
  ……
  @Remote

  public interface Counter
  {
  ……
  @Remove
  public void clean();
  }


  这个接口很简单,和无状态会话Bean基本相同,但新增加了一个Clean方法,并为此方法加上Remove注释。一旦此方法被执行完毕,此Bean将被从容器中删除。

  JBOSS默认使用接口的全称作为它的JNDI名。在上面的例子中,它的全称就是:com.kuaff.ejb3.stateful.Counter,你也可以通过Counter.class得到。

  CounterBean.java
  ……
  import javax.ejb.Stateful;
  ……
  @Stateful

  public class CounterBean implements Counter
  {
  //增加事务支持
  @Tx(TxType.REQUIRESNEW)
  public int getNumber()
  {
  return number;
  }

  @Remove

  public void clean()
  {
  System.out.println("我,被删除了!");
  }
  }

  这个是计数器的实现类。注意这个类使用Stateful做了注释,这是必须的。同时,这个例子也演示了如何使用事务。事务的详细用法将在后面的章节中介绍。

  Client.java
  package com.kuaff.ejb3.stateful;

  import javax.ejb.EJBException;
  import java.rmi.NoSuchObjectException;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;

  public class Client
  {
  public static void main(String[] args)
  {
  InitialContext ctx;
  try
  {
   ctx = new InitialContext();
   Counter counter = (Counter) ctx.lookup(Counter.class.getName());
   counter.add(10);
   System.out.println("当前的number:" + counter.getNumber());
   counter.add(10);
   System.out.println("当前的number:" + counter.getNumber());
   Counter counter2 = (Counter) ctx.lookup(Counter.class.getName());
   counter2.add(10);
   System.out.println("当前的number:" + counter2.getNumber());
   //删除
   counter2.clean();
   //下面如果再使用counter2,将出错
   try
   {
    System.out.println("当前的number:" + counter2.getNumber());
   }
   catch(EJBException ex)
   {
    if (ex.getCausedByException() instanceof NoSuchObjectException)
    {
     System.out.println("我都被删除啦,还找我!");
    }
    else
    {
     throw ex;
    }
   }
  }
  catch (NamingException e)
  {
   e.printStackTrace();
  }
  }
  }

  这个类用来测试我们发布的计数器EJB。首先通过

  ctx = new InitialContext();得到上下文,然后
展开更多 50%)
分享

猜你喜欢

EJB3.0开发指南之有状态会话Bean

Java JAVA基础
EJB3.0开发指南之有状态会话Bean

EJB3.0开发指南之无状态会话Bean

Java JAVA基础
EJB3.0开发指南之无状态会话Bean

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

EJB3.0开发指南之实体Bean的继承

编程语言 网络编程
EJB3.0开发指南之实体Bean的继承

EJB 3.0 开发指南之实体Bean

Java JAVA基础
EJB 3.0 开发指南之实体Bean

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

EJB 3.0开发指南之消息驱动Bean

Java JAVA基础
EJB 3.0开发指南之消息驱动Bean

EJB 3.0开发指南之依赖注入

Java JAVA基础
EJB 3.0开发指南之依赖注入

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《炉石传说》大王术士进化攻略

《炉石传说》大王术士进化攻略

Flash入门及学ActionScript编程的正确途径

Flash入门及学ActionScript编程的正确途径
下拉加载更多内容 ↓