发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

一步一步学EJB3.0(三):悟透会话Bean(下)



一步一步学EJB3.0(三):悟透会话Bean(下)

http://www.blogjava.net/beniao/archive/2008/08/09/220792.html
三、无状态会话Bean实例
在上一篇文章里,其实我们已经应用到了无状态会话Bean,那好,下面我们详细的来分析下上一篇文章里给出的示例程序。 没有阅读过的朋友请点击这里阅读:<<一步一步学EJB 3.0(二):初探企业EJB模块开发>> .

首先我们来看看接口的定义:
/**
 * 远程接口
 * @author Beniao
 */
 @Remote
 public interface HelloRemote {
     void sayHello(String str);
 }



这里我们定义了一个接口,并通过@Remote将此接口标记为远程接口.下面是实现类的定义:
/**
  * 无状态会话Bean
  * @author Beniao
  */
 @Stateless(mappedName="myejb/hello")
 @Remote(HelloRemote.class)  //所实现的远程接口
 public class HelloBean implements HelloRemote {
     public void sayHello(String str) {
         System.out.println("Hello " + str);
    }
}



这个实现类很简单,就是直接在参数前加上"Hello "后输出.这里我们需要注意的就是在类上面的两个标注符:
1. @Stateless: 用于标记当前Java Bean为无会话状态Bean. 通过指定属性mappedName来生成JNDI.
2. @Remote: 用于标记当前Java Bean所实现的远程接口

OK,上面就是一个无会话Bean的简单示例,客户端可以直接通过@Stateless中配置的mappedName来获取实例.
 public class Main {
     public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        HelloRemote hw = (HelloRemote)ctx.lookup("myejb/hello");
        hw.sayHello(" Beniao!");
     }
 }


更详细的开发请大家查看相应的资料,我写这些文章只是一个引导而已.

四、有状态会话Bean实例
我们还是从商业接口开始分析,下面是一个简单购物车的商业接口:
  /**
   * 购物车的商业接口
   * @author Beniao
   */
  @Remote
  public interface ShoppingCatRemote {
      void addItem(String item, int quantity);
      void removeItem(String item, String quantity);
      Map<String, Integer> getItems();
     void clearItems();
 }


业务实现类如下:
  /**
   * 通过@Stateful来标注该Java Bean为有会话状态Bean
   * @author Beniao
   */
  @Stateful(mappedName="ejb/ShoppingCat")
  public class ShoppingCatBean implements ShoppingCatRemote {
  
      private HashMap<String ,Integer> items = new HashMap<String, Integer>();
      
     
     public void addItem(String item, int quantity) {
         Integer orderQuantity = items.get(item);
         if(orderQuantity == null) {
             orderQuantity = 0;
         }
         orderQuantity += quantity;
         items.put(item, orderQuantity);
     }
     public void removeItem(String item, String quantity) {
         System.out.println("将商品移出购物车");
     }
     public Map<String, Integer> getItems() {
         //..代码略
         return null;
     }
 
     @Remove
     public void clearItems() {
         items.clear();
     } 
 }


从上面可以看出,我们要开发一个有会话状态Java Bean可以通过@Stateful来标注该Java Bean为有会话状态Bean. 这与无会话状态Bean不同的是在最后一个方法上便可以看出,加上了@Remove标注.
1. @Stateful : 用于标注一个Java Bean为有状态会话Bean.
2. @Remove : 當呼叫它, 就會清除這個 Instance.

有状态会话Bean在实际开发中用得不是很多,这里就不做详细介绍, 记得前面说过,这些文章只是引导性文章,要深入详细的学习EJB请查看相关资料和书籍.
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:一步一步学EJB3.0(三):悟透会话Bean(下)

顶了,老大又看是讲座EJB了,学习了!
好好做人,好好做事!
编辑 回复 快速回复 TOP

Re:一步一步学EJB3.0(三):悟透会话Bean(下)

好..不过还没理解为什么"@...."这个东东

...这些是EJB的经典啥玩意吧..看到Hibernate现在也有这个功能了..
1+1 >=2
编辑 回复 快速回复 TOP

Re:一步一步学EJB3.0(三):悟透会话Bean(下)


我怎么没看到 (上) 呢
编辑 回复 快速回复 TOP

Re:一步一步学EJB3.0(三):悟透会话Bean(下)

加上了!谢谢你的提醒
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:一步一步学EJB3.0(三):悟透会话Bean(下)

好..不过还没理解为什么"@...."这个东东

...这些是EJB的经典啥玩意吧..看到Hibernate现在也有这个功能了..

那个是java5的功能,annotation,网上有很多资料可以去看看
编辑 回复 快速回复 TOP
发新话题