(1) ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC
'-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN'
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>statefulSession</ejb-name>
<home>examples.ejb20.basic.statefulSession.TraderHome</home>
<remote>examples.ejb20.basic.statefulSession.Trader</remote>
<ejb-class>examples.ejb20.basic.statefulSession.TraderBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
<env-entry>
<env-entry-name>BEAS</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>100.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>MSFT</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>150.0</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>statefulSession</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
<ejb-client-jar>ejb20_basic_statefulSession_client.jar</ejb-client-jar>
</ejb-jar>
(2) weblogic-ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN'
'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>statefulSession</ejb-name>
<stateful-session-descriptor>
<allow-remove-during-transaction>true</allow-remove-during-transaction>
</stateful-session-descriptor>
<enable-call-by-reference>True</enable-call-by-reference>
<jndi-name>ejb20-statefulSession-TraderHome</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
没有缓冲池,需要消耗大量内存来存储。每个ejb都是唯一的。
钝化和激活(passivation, activation)
闲置超时,bean被销毁
释放remote对象的引用,使得remote对象被垃圾回收。
缓冲管理
<max-beans-in-cache>标签: 设置缓冲池多大
<idle-timeout-seconds>: 当缓冲池满了将发生什么事
<cache-type> NRU(使用数量), LRU(最近最不常用)
没有超时的,当前没有方法调用的,没有事务参与的,>=85% 钝化,销毁
>=99% 钝化,销毁
如果没有办法了,就抛出CacheFullException.
钝化Bean的时候会钝化相应的所有可到达对象,递归嵌套。
不能钝化
(1) null
(2) transient
(3) 对SessionContext的引用
(4) 对UserTransaction的引用
(5) 对 "java:comp/env" 上下文的引用
(6) 对其它EJB的Home或者Remote接口的引用
必须在ejbPassivate和ejbActivate方法中关闭和重新打开这些资源。