无国籍的ejb没有被摧毁

时间:2012-07-05 17:06:17

标签: java java-ee

我有一个用于开发目的的REST接口,它支持无状态EJB。它反过来注入另一个无状态EJB。我的理解是每次需要实例时都会销毁无状态EJB而不是钝化和重构。

使用这个逻辑,我添加了@PostConstruct(对于REST和其他无状态ejb),但两者都只被调用一次(从日志记录中推断)。重复调用REST层将重用相同的bean(及其状态!),而不是创建一个新的。

无状态bean没有被破坏的可能原因是什么?或者我误解了无状态ejb的生命周期?

编辑:我所指的“状态”是bean构造的临时缓存,以加快执行速度。也许是一个糟糕的选择:)

EDIT2 :一些框架代码:

import javax.ejb.Stateless;
import javax.ejb.EJB;
import javax.ws.rs.Path;

@Path("tools")
@Stateless
public class RESTTools {

@EJB
private CatalogueLocal catalogue;

@PostConstruct
public void initialize() {
    logger.debug("Initializing REST client");
}
}

@Stateless
@Local(CatalogueLocal.class)
@TransactionManagement(TransactionManagementType.BEAN)
public class Catalogue {

@PostConstruct
public void initialize() {
    logger.debug("Initializing catalogue");
}

}

1 个答案:

答案 0 :(得分:2)

我相信你误解了生命周期。

无状态bean根据需要进行实例化,并由容器从实例池中激活。