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接口,而在配置时发现一些错误。
实现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。
所有的方法都必须有相应的实现
在一个典型的rmi实现中,这一点是毫无疑问的,这是由于实现类将会实现remote接口。但是对于ejb,由于实现类并不需要实现home和remote接口,对于实现类和home及remote接口的关系,编译器并没有一个强制的规定。
对于home接口的每个create方法,在实现类中都必须有一个相应的ejbcreate方法。还有,create方法抛出createexception。
扩展其它的接口
要支持enterprise javabeans的子类,home和remote接口可以扩展其它的接口,只要父接口是扩展ejbobject(对于remote接口)或者ejbhome(对于home接口)。
在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接口,而在配置时发现一些错误。
实现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。
所有的方法都必须有相应的实现
在一个典型的rmi实现中,这一点是毫无疑问的,这是由于实现类将会实现remote接口。但是对于ejb,由于实现类并不需要实现home和remote接口,对于实现类和home及remote接口的关系,编译器并没有一个强制的规定。
对于home接口的每个create方法,在实现类中都必须有一个相应的ejbcreate方法。还有,create方法抛出createexception。
扩展其它的接口
要支持enterprise javabeans的子类,home和remote接口可以扩展其它的接口,只要父接口是扩展ejbobject(对于remote接口)或者ejbhome(对于home接口)。
闽公网安备 35060202000074号