2017-10-08 56 views
0

我有一个无状态的ejb需要一些时间来初始化。为了避免这种代价,我希望在那里总是有这个EJB实例化的最小数量。是否有类似于MDB minInstances的类似minInstances的类似于bean的配置?我怎样才能做到这一点?如何配置无状态EJB(JBOSS)的最小实例?

+0

有人吗?在发布问题之前,我已经环顾四周,只发现了一个特定于jboss的注解@StatelessDeployment。 –

回答

0

看看Wildfly 10.x中使用的StrictMaxPoolimplementation,没有选项可以设置最小大小。

的XSD wildfly-ejb3_4_0.xsd也不会不知道的东西约一分钟尺寸:

<xs:complexType name="strict-max-poolType"> 
    <xs:attribute name="name" type="xs:string" use="required"/> 
    <xs:attribute name="max-pool-size" type="xs:positiveInteger" default="20" use="optional"/> 
    <xs:attribute name="derive-size" type="xs:string" use="optional"/> 
    <xs:attribute name="instance-acquisition-timeout" type="xs:positiveInteger" default="5" use="optional"/> 
    <xs:attribute name="instance-acquisition-timeout-unit" type="timeout-unitType" 
        default="MINUTES" use="optional"/> 
</xs:complexType> 

在另一方面,StricMaxPoolrelease方法并把所有豆释放回:

public void release(T obj) { 
     if (ROOT_LOGGER.isTraceEnabled()) { 
      ROOT_LOGGER.tracef("%s/%s Free instance: %s", pool.size(), maxSize, this); 
     } 

     pool.add(obj); 

     semaphore.release(); 
    } 

这意味着一旦创建了max-pool-size bean,该池将不会收缩。因此,您可以实施一些在启动期间填充池的@Startup bean。

+0

林不知道如何处理上述信息。对日志记录的回顾表明所讨论的会话bean一遍又一遍地被实例化。我的阅读表明这是预期的。基本上在一段时间的活动中会话bean被破坏。 –

+0

你如何跟踪每次再次实例化?像@PostConstruct这样的生命周期方法在从池中取出后执行,但是没有得到新的实例。 – siom

+0

登录对象的构造函数 –