在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 应用程序中的字符编码