我对无状态和有状态会话bean中的ejbcreate和ejbremove的功能感到有点困惑?这是我的理解和怀疑: -
1)StatefulSessionBeans:在调用创建home接口的方法时,当我们可以初始化我们想要的任何内容时,后续调用将转到ejbcreate方法。 同样在调用时删除远程接口的方法(这里是远程不是hemoe)后续调用转到ejbremove方法时我们 可以随心所欲地发布资源。
这里的问题是客户端是否有任何控制权,如果他想销毁一些bean实例或是否由容器处理?如果通过容器它钝化 如果在将来的请求中出现相同的实例,那么在销毁bean之前的状态是什么?
类似地,如果我们想要钝化任何bean,我们在此方法中编写代码以将对象的状态保存到某个文件。这是对的吗?
2)StatelesSessionBeans:调用home接口的创建方法。 call不会自动转到会话bean的ejbcreate方法 调用remove远程接口的方法是不是调用会话bean的ejbremove方法? 如果在StatelesSessionBeans的情况下,容器何时调用ejbcreate和ejbremove方法?
答案 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。