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

于今腐草无萤火,终古垂杨有暮鸦。这篇文章主要讲述在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="https://www.songbingjia.com/android/true"/> < /session>

【在Websphere Application Server上的应用程序启动时未调用MDB的ejbCreate()方法】提升WAS / EJB版本并使用它是您最好的选择。

    推荐阅读