Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无状态ejb未被销毁_Java_Jakarta Ee - Fatal编程技术网

Java 无状态ejb未被销毁

Java 无状态ejb未被销毁,java,jakarta-ee,Java,Jakarta Ee,我有一个用于开发目的的REST接口,它支持无状态EJB。它反过来注入另一个无状态EJB。据我所知,无状态EJB在每次需要实例时都会被销毁,而不是被动化和重构 使用此逻辑,我添加了一个@PostConstruct(对REST和其他无状态ejb都添加了@PostConstruct),但它们都只被调用一次(从日志中推断)。对REST层的重复调用将重用同一个bean(及其状态!),而不是创建一个新的bean 无状态bean没有被销毁的可能原因是什么?还是我误解了无状态ejb的生命周期 编辑:我指的“状态

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

使用此逻辑,我添加了一个@PostConstruct(对REST和其他无状态ejb都添加了@PostConstruct),但它们都只被调用一次(从日志中推断)。对REST层的重复调用将重用同一个bean(及其状态!),而不是创建一个新的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");
}

}

我相信你误解了生命周期


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

可能是有助于理解问题的代码框架。因为无状态bean应该没有状态,所以根本不应该初始化它。如果你这样做,你可能是误用了一些东西。顺便说一句,RESTTools是一个REST服务,而不是REST客户端。你说得对,日志记录已关闭:)无论如何,我似乎必须更改/废弃缓存。你混淆了有状态bean和无状态bean。如果bean需要初始化,那么它应该是有状态的,并且这些bean确实是按需构造和销毁的(与无状态bean不同)。这是否意味着无状态bean永远不会被销毁?或者类似gc的东西:理论上是,但你不能指望它?这取决于容器。我建议在谷歌上搜索/阅读。