public class ShoppingCartEJB implements SessionBean{
public boolean addItem(int itemNumber){
// the code for adding items to the cart
// may include JDBC code.
}
public boolean purchase(){
//the code for purchases
}
public ejbCreate(String accountName, String account){
// object initialization code
}
}
请注意, 企业Bean类不实现Bean的远程接口, 它是由EJBObject来完成的。另外, session Bean不支持自动的persistence。因而,
显式数据库访问必须在其方法中实现。例如, 在purchase()方法中, JDBCTM调用可被用来更新数据库, 而由容器在安装时生成的EJBObject可实现远程接口;EJBObject的作用就象是一个"代理人",
它将方法调用传递给安装在服务器中的Bean实例。
客户做的第一件事是使用JNDI为所需要的Bean定位EJBHome。在本例子中, EJBHome对象可能以下列形式出现:
public interface CartHome extends javax.ejb.EJBHome{
Cart create(String customerName , String account)
throws RemoteException, BadAccountException;
}
CartHome接口包含一个create()方法, 当客户请求一个新的Bean的时候该方法将被调用。请注意, 这个方法是在EJBObject中实现的并将在被调用时调用Bean类中的ejbCreate()方法。
ShoppingCart类的EJBHome对象可使用下列代码来定位:
Context initialContext = new InitialContext();
CartHome cartHome = (CartHome) initialContext.lookup
("application/mall/shopping-carts");
在本例中, 调用InitialContext()以得到JNDI命名层次的根;lookup()方法被用来得到CartHome。 在此种情况下,
"applications/mall/shopping.carts"是JNDI到达你感兴趣的CartHome的路径。此时, cartHome持有了ShoppingCartEJB的EJBHome对象的引用。然而,
请注意客户的JNDI的命名空间可能被设置为包括分布于网络上的多种机器上的EJB容器; EJB容器的实际位置一般来说对客户是透明的。
下例显示了客户是如何使用EJBHome对象并调用方法的:
ShoppingCart cart = cartHome.create("Emma","0507");
Cart.addItem(100);
Cart.addItem(251);
Cat.purchase();
在上述代码中, create()方法创建了一个新的session Bean, 变量cart 包括了一个对远程EJB Object的引用, EJB
Object允许你调用它的方法additem()和purchase()。cartHome中的create()方法将调用对应的Bean中的ejbCreate()方法。
EJB的未来
EJB规范1.0是在1998年JavaOne大会期间发布的, 它为建立分布式商务对象系统提供了坚实的结构体系基础, 它不应该被认为是这一研究主题的结束,
而应该是进一步完善这一体系结构的开始。该规范的一些内容还需改进, 特别是处理persistence对象的EJB模型。另外, 还应考虑标准化开发工具和开发系统之间的协定,以为所有开发环境提供统一的调试界面。
将来, SunMicrosystem还将研究兼容性问题。有两个领域涉及到兼容性问题, 一是"EJB兼容的"服务器到底是由什么组成的?
一个兼容性计划有望在不久的将来出现; 二是保证不同厂商的EJB服务器具有相互操作性。Sun正在就这些问题征求其合作伙伴的意见, 以决定如何发展。
结论
企业JavaBean技术为我们提供了一种开发、部署和管理分布式商务应用程序的新途径。它使开发人员编写作为可重复使用的服务器组件的分布式商务应用程序变得更简单,
并且不必担心系统级编程问题。企业JavaBean组件结构代表了在简化企业应用程序的开发、部署和管理方面的一个巨大进步。有关企业JavaBean技术的完整描述,
请访问企业JavaBean的网。