最近项目组的同事,在开发项目优化的时候,使用了SFSB,以至于在JBoss 的tmp文件下Session文件里面出现了恐怖的以 .ser临时文件。
什么是.ser 文件。
它是在SFSB被钝化以后,形成的一个文件,以便提供重新唤起的可能。
经过查找,我们发现,在jboss 的deploy文件夹下面,有一个叫ejb-interceptors-aop.xml的文件,这个文件中定义了各种不同形式的bean的Cache配置。
其中一条关于stateful Bean的
</pre><pre name="code" class="html"><domain name="Stateful Bean"extends="Base Stateful Bean" inheritBindings="true">
<!--NON Clustered cache configuration -->
<annotation expr="class(*) AND!class(@org.jboss.ejb3.annotation.Cache) AND!class(@org.jboss.ejb3.annotation.Clustered)">
@org.jboss.ejb3.annotation.Cache ("SimpleStatefulCache")
</annotation>
<annotation expr="class(*) AND !class(@org.jboss.ejb3.annotation.PersistenceManager)AND !class(@org.jboss.ejb3.annotation.Clustered)">
@org.jboss.ejb3.annotation.PersistenceManager("StatefulSessionFilePersistenceManager")
</annotation>
<annotation expr="class(*) AND !class(@org.jboss.ejb3.annotation.CacheConfig)AND !class(@org.jboss.ejb3.annotation.Clustered)">
@org.jboss.ejb3.annotation.CacheConfig (maxSize=100000,idleTimeoutSeconds=300, removalTimeoutSeconds=0)
</annotation>
<!--Clustered cache configuration -->
<annotation expr="class(*) AND!class(@org.jboss.ejb3.annotation.Cache) ANDclass(@org.jboss.ejb3.annotation.Clustered)">
@org.jboss.ejb3.annotation.Cache ("StatefulTreeCache")
</annotation>
<annotation expr="class(*) AND!class(@org.jboss.ejb3.annotation.CacheConfig) ANDclass(@org.jboss.ejb3.annotation.Clustered)">
@org.jboss.ejb3.annotation.CacheConfig (name="sfsb-cache",maxSize=100000, idleTimeoutSeconds=300, removalTimeoutSeconds=0)
</annotation>
</domain>
通过比较,发现 removalTimeoutSeconds=0是决定性的因素,0的意思是绝不删除。
修改以后我们将 removalTimeoutSeconds=10000,也就是在SFSB钝化后的2.5个小时再将此文件删除。
通过测试,达到了我们的预期。