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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Websphere Application Server上的应用程序启动时未调用MDB的ejbCreate()方法相关的知识,希望对你有一定的参考价值。

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

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

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

答案

编辑我的回答更正确,并突出显示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版本并使用它是您最好的选择。

以上是关于在Websphere Application Server上的应用程序启动时未调用MDB的ejbCreate()方法的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 IBM WebSphere Application Server 上使用 WebSockets?

EJB 3.1绑定在Websphere Application Server上不起作用

Eclipse 远程调试 WebSphere Application Server (WAS)

在 Websphere Application Server 8.5 上运行的 Web 应用程序中的字符编码

Websphere Application Server 7 中的 HTTP 标头 Mime 类型

EJB 3.1 绑定在 Websphere Application Server 上不起作用