会话Bean定义的方法如ejbCreate,ejbRemove实现?

时间:2011-06-17 10:16:47

标签: ejb

我对无状态和有状态会话bean中的ejbcreate和ejbremove的功能感到有点困惑?这是我的理解和怀疑: -

1)StatefulSessionBeans:在调用创建home接口的方法时,当我们可以初始化我们想要的任何内容时,后续调用将转到ejbcreate方法。 同样在调用时删除远程接口的方法(这里是远程不是hemoe)后续调用转到ejbremove方法时我们 可以随心所欲地发布资源。

这里的问题是客户端是否有任何控制权,如果他想销毁一些bean实例或是否由容器处理?如果通过容器它钝化 如果在将来的请求中出现相同的实例,那么在销毁bean之前的状态是什么?

类似地,如果我们想要钝化任何bean,我们在此方法中编写代码以将对象的状态保存到某个文件。这是对的吗?

2)StatelesSessionBeans:调用home接口的创建方法。 call不会自动转到会话bean的ejbcreate方法 调用remove远程接口的方法是不是调用会话bean的ejbremove方法? 如果在StatelesSessionBeans的情况下,容器何时调用ejbcreate和ejbremove方法?

1 个答案:

答案 0 :(得分:2)

1)StatefulSessionBeans

  

这里的问题是客户有什么问题   控制他是否要摧毁一些   bean实例或是由它照顾   容器

两者。在EJB 3.0+中,您可以使用@Remove注释方法,以指示您希望在方法完成后删除bean。在EJB 3.1之前,您将使用EJBObject.remove或EJBLocalObject.remove方法。如果没有显式删除它,容器将在超时后自动清理bean。在EJB 3.1中,您可以使用@StatefulTimeout批注控制持续时间。

  

如果按容器进行钝化   如果在摧毁bean之前的状态   未来的要求也是如此   实例

容器将根据特定于供应商的策略在不再需要Bean时对其进行钝化。例如,如果有太多活动SFSB,则容器可能会钝化最近最少使用的bean。只要在超时之前再次使用bean,容器就会自动进行。重新创建/激活bean。

  

类似地,如果我们想要钝化任何   bean,我们在这里写代码   保存对象状态的方法   一些文件。这是对的吗?

不,容器会自动保留bean中所有非瞬态字段的值,即使bean没有标记为Serializable,但是如果你想要更多控制,你可以实现Serializable。

2)StatelesSessionBeans

  

致电创建家庭方法   接口。打电话不去   会话bean的ejbcreate方法。

正确,为无状态bean创建只会返回一个包装器/代理。一旦调用方法,容器就会分配一个bean(通常来自池),调用该方法,然后释放bean(通常返回池)。

  

同样调用删除方法   远程接口不拨打电话   到会话bean的ejbremove方法?

正确,remove方法对无状态bean没有影响。容器管理池化的bean实例。

  

如果容器是真的话   打电话给ejbcreate和ejbremove   的情况下的方法   StatelesSessionBeans?

容器可以随时自由地进行。通常,当池中没有可用的容器且池未达到其最大硬件大小时,容器将创建一个新bean。通常,容器只有在创建的实例太多时才会删除它,或者如果服务器中的bean太多而且一段时间内没有使用bean。