(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方法中关闭和重新打开这些资源。