|
三、无状态会话Bean实例 在上一篇文章里,其实我们已经应用到了无状态会话Bean,那好,下面我们详细的来分析下上一篇文章里给出的示例程序。 没有阅读过的朋友请点击这里阅读:<<一步一步学EJB 3.0(二):初探企业EJB模块开发>> .
首先我们来看看接口的定义:
1 /** 2 * 远程接口 3 * @author Beniao 4 */ 5 @Remote 6 public interface HelloRemote { 7 void sayHello(String str); 8 } 这里我们定义了一个接口,并通过@Remote将此接口标记为远程接口.下面是实现类的定义:
1/** *//** 2 * 无状态会话Bean 3 * @author Beniao 4 */ 5@Stateless(mappedName="myejb/hello") 6@Remote(HelloRemote.class) //所实现的远程接口 7public class HelloBean implements HelloRemote { 8 public void sayHello(String str) { 9 System.out.println("Hello " + str); 10 } 11}
这个实现类很简单,就是直接在参数前加上"Hello "后输出.这里我们需要注意的就是在类上面的两个标注符: 1. @Stateless: 用于标记当前Java Bean为无会话状态Bean. 通过指定属性mappedName来生成JNDI. 2. @Remote: 用于标记当前Java Bean所实现的远程接口
OK,上面就是一个无会话Bean的简单示例,客户端可以直接通过@Stateless中配置的mappedName来获取实例.
1 public class Main { 2 public static void main(String[] args) throws Exception { 3 Context ctx = new InitialContext(); 4 HelloRemote hw = (HelloRemote)ctx.lookup("myejb/hello"); 5 hw.sayHello(" Beniao!"); 6 } 7 } 更详细的开发请大家查看相应的资料,我写这些文章只是一个引导而已.
四、有状态会话Bean实例 我们还是从商业接口开始分析,下面是一个简单购物车的商业接口:
1 /** 2 * 购物车的商业接口 3 * @author Beniao 4 */ 5 @Remote 6 public interface ShoppingCatRemote { 7 void addItem(String item, int quantity); 8 void removeItem(String item, String quantity); 9 Map<String, Integer> getItems(); 10 void clearItems(); 11 } 业务实现类如下: 1 /** 2 * 通过@Stateful来标注该Java Bean为有会话状态Bean 3 * @author Beniao 4 */ 5 @Stateful(mappedName="ejb/ShoppingCat") 6 public class ShoppingCatBean implements ShoppingCatRemote { 7 8 private HashMap<String ,Integer> items = new HashMap<String, Integer>(); 9 10 11 public void addItem(String item, int quantity) { 12 Integer orderQuantity = items.get(item); 13 if(orderQuantity == null) { 14 orderQuantity = 0; 15 } 16 orderQuantity += quantity; 17 items.put(item, orderQuantity); 18 } 19 20 public void removeItem(String item, String quantity) { 21 System.out.println("将商品移出购物车"); 22 } 23 24 public Map<String, Integer> getItems() { 25 //..代码略 26 return null; 27 } 28 29 @Remove 30 public void clearItems() { 31 items.clear(); 32 } 33 } 从上面可以看出,我们要开发一个有会话状态Java Bean可以通过@Stateful来标注该Java Bean为有会话状态Bean. 这与无会话状态Bean不同的是在最后一个方法上便可以看出,加上了@Remove标注. 1. @Stateful : 用于标注一个Java Bean为有状态会话Bean. 2. @Remove : 當呼叫它, 就會清除這個 Instance.
有状态会话Bean在实际开发中用得不是很多,这里就不做详细介绍, 记得前面说过,这些文章只是引导性文章,要深入详细的学习EJB请查看相关资料和书籍.
|