在Websphere Application Server上的应用程序启动时未调用MDB的ejbCreate()方法

问题描述 投票:1回答:1

我尝试在Websphere Application Server v7.0.0.23上部署基于EJB 2.1的应用程序,并将一些Spring初始化代码部署到MDB的onEjbCreate方法中:

@Override
protected void onEjbCreate() {      
    getBeanFactory().getBean("myBean");     
}

但是这种方法在接收消息时调用,而不是在应用程序启动时调用。如何在收到消息之前强制WAS实现我的MDB?

java java-ee websphere ejb-2.x
1个回答
0
投票

编辑我的回答更正确,并突出显示Tracy提到的信息:

默认情况下,EJBContainer会延迟初始化bean,直到它们首次被调用。此外,每次创建新bean时都会调用ejbCreate()。在关系资源适配器(RAR)请求MDB实例之前,不会创建MDB实例;通常在传递消息时。因为,ejbCreate为每个实例运行,所以如果RAR要求说50,那么ejbCreate将被调用50次。

您可以以编程方式查找bean并在收到触发初始化代码的消息之前以某种方式创建它,但是您可能不希望每次创建bean时都运行初始化代码,因此最好的选择是使用启动bean。由于您使用的是EJB2.1 bean,因此Was7 EJB Container具有“遗留”启动Bean

在EJB3.0 Startup中引入了Singleton bean,可以通过使用@Singleton @Startup注释类或使用ejb-jar.xml文件在单个bean上配置来添加:

<session name="[bean-name]">
    <start-at-app-start value="true"/>
</session>

提升WAS / EJB版本并使用它是您最好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.