副标题#e#
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接口,而在设置时发明一些错误。
#p#副标题#e#
实现SessionSynchronization接口
SessionSynchronization接口可以令一个session bean更好地节制一个事务是如何产生。
在须要时扩展其它类
你的实现类也可以是其它类的子类。实际上,该超类也可以是另一类bean的实现类。
在须要时实现Helper要领
一个实现类大概尚有特另外helper要领,这些要领并不是Remote可能Home接口的一部门。对付这些要领的参数范例、返回值范例和可见性(public, protected, private)是没有限制的。
不要抛出RemoteException
假如需要抛出一个和EJB有关的异常,抛出javax.ejb.EJBException取代。
Remote和Home接口的限制
除了对实现类有限制外,对付Remote和Home接口也有一些限制。这些限制大部门和实现类雷同。
Remote接口必需扩展javax.ejb.EJBObject
当你利用一些设置东西时,譬喻WebLogic提供的东西,你将会发明它会自动知道哪个类包括有Remote接口。它寻找EJBObject接口来检测到Remote接口。尚有EJBObject接口包括有每个EJB都必需实现的一些要领。
Home接口必需扩展javax.ejb.EJBHome
和Remote接口必需扩展EJBObject一样,EJBHome接口辅佐标识Home接口,而且界说了一些你可以在每个Home接口上挪用的要领。
参数和返回范例必需切合RMI/IIOP
这意味着它们必需是原始范例、可串行化工具可能Remote接口。
所有的要领必需抛出java.rmi.RemoteException
由于Home和Remote接口扩展java.rmi.Remote接口,所以接口的全部要领都必需抛出java.rmi.RemoteException。RMI类型明晰划定在Remote接口的所有要领都必需抛出RemoteException。
所有的要领都必需有相应的实现
#p#分页标题#e#
在一个典范的RMI实现中,这一点是毫无疑问的,这是由于实现类将会实现Remote接口。可是对付EJB,由于实现类并不需要实现Home和Remote接口,对付实现类和Home及Remote接口的干系,编译器并没有一个强制的划定。
对付Home接口的每个create要领,在实现类中都必需有一个相应的ejbCreate要领。尚有,create要领抛出CreateException。
扩展其它的接口
要支持Enterprise JavaBeans的子类,Home和Remote接口可以扩展其它的接口,只要父接口是扩展EJBObject(对付Remote接口)可能EJBHome(对付Home接口)。