session bean要求、限制和许可
在ejb规范中,对session bean有一些限制和要求。这些限制会指出哪些是bean必须做的,哪些是不能做的,以及bean必须实现的一些方法和接口。也有一些规范指出哪些处理是允许做的,这是为了避免你以为这些处理是被其它限制禁止的。
实现sessionbean接口
session bean必须实现javax.ejb.sessionbean接口
声明该类为public,而不是final或者abstract
要记住ejb容器需要创建bean实例,因此该类必须是public,而且不是抽象的。
创建一个pubic,无参数的构造器
同样,由于ejb容器必须创建bean的实例。如果构造器是protected或者private,容器就不能创建实例。
不要实现finalize方法
虽然你很少需要定义一个finalize方法,不过ejb规范中还是明文禁止在session和entity bean中定义finalize方法。如果你的bean需要做任何清除的操作,它们应该在ejbremove或者ejbpassivate方法中进行。
实现create方法和所有的remote方法
一个session bean必须实现home接口中指定的全部create方法,以及remote接口中指定的全部方法。在实现这些方法时,有一些额外的要求:
. 这些方法必须是public,而不能是static或者final
. 参数和返回的类型必须是有效的rmi/iiop返回类型。在通常的情况下,这意味着必须是原有的类型(int, char, double等),可串行化的对象或者remote接口。
. 方法名不能以ejb开头(这将令ejb的配置工具感到迷惑,并且可能带来冲突)
可选择的实现remote接口
对于一个bean可以实现remote接口,这个特性也是挺重要的。在实现类中,其中的方法签名必须和reomote接口中的一样,除了一点,就是实现类中的方法并不抛出remoteexception。也就是说,虽然对于remote接口的每个方法,在实现类中都必须要有相应的方法对应,而且不需要作如下的声明:
public class shoppingcartimpl implements sessionbean, shoppingcart
实现remote接口的原因是:在漏掉一个方法时编译器将会告诉你,也就是说,如果没有实现remote接口中的一个方法,编译器将会产生一个错误。否则,你将不知道漏掉了一个方法,直到你运行一个配置工具或者是打包工具为止。越迟发现错误,就要花越长的时间来改正它。
在实现remote接口时,可能会遇到的问题是使用this关键字来传送对象,而不是使用session context中的getejbobject方法。通常,当使用this而不是getejbobject时,编译器将会产生一个错误,因为它期待一个实现remote接口的对象,而实现类却这样做。通过实现remote接口,你通过了编译,但是你在运行时又碰到了错误,这是由于与ejb容器期待的不同,实现类并不是一个到remote接口的正确引用。
提示
虽然实现remote接口可以指出在编译时的错误,但是这样也会导致出现一些直到运行时才会发现的错误,令修改起来很费时间。所以你最好不要实现remote接口,而在配置时发现一些错误。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器