gpt4 book ai didi

java - 在 EJB 3.1 中控制 CDI 启动

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:12 24 4
gpt4 key购买 nike

我是新来的,也是 CDI 世界的新手,我工作的第一个任务是找到一种控制 CDI 上传的方法。

我们同时使用 EJB 3.1CDI 1.0,因为它们由不同的容器控制,所以我们可以控制 EJB Managed Beans 的运行时间和顺序通过使用 @Startup@Singleton 注释启动。

但是由于 CDI 容器尚未启动,我在类中声明的 @Inject CDI bean 将变为 null。

几天来我一直在努力寻找解决方案,我找到了一个 here没有用(仍然是空的)。

我们使用 Java EE 6 并在 WebSphere Application Server 8 上运行应用程序。

拜托,如果你能帮我找到一种方法来控制 CDI 在内部上传而不考虑 EJB?

这是它的示例代码:

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Singleton
@Startup
public class BaseStartupLoader{


/**
* Default constructor.
*/
@Inject @MyStartup
BaseStartUp myStartup;

private static Logger m_logger = LoggerFactory.getLogger(BaseStartupLoader.class);
public BaseStartupLoader() {

}

@PostConstruct
public void init(){

String applicationName = null;

try {

applicationName = myStartup.getClass().getName();
myStartup.load();

} catch (IllegalAccessException e) {
m_logger.error("Faild to load data into preload system. "+e);
} catch (InstantiationException e) {
m_logger.error("Faild to load data into preload system. "+e);
} catch (ClassNotFoundException e) {
m_logger.error("Faild to load data into preload system - Class "+ applicationName + "Not found. "+e);
}
}
}

这是 BaseStartup 接口(interface):

public interface BaseStartUp {
public void load() throws IllegalAccessException, InstantiationException, ClassNotFoundException;
}

限定符和实现:

@Retention(RetentionPolicy.RUNTIME)
@Target ({ElementType.PARAMETER, ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
@Qualifier
@Dependent
public @interface MyStartup {
}


@MyStartup
public class MyStartUpLoader implements BaseStartUp {

@Inject
SomeConfigLoader config;

@Override
public void load() throws IllegalAccessException, InstantiationException, ClassNotFoundException {
conifg.init();
}
}

最佳答案

经过大量研究,我从 IBM 的人员那里找到了一些帮助,因为我们正在使用 WebSphere Application Server,我可以添加一个 JVM 属性,名为:

"com.ibm.ws.cdi.immediate.ejb.start"= true

到管理控制台中的 WAS,他将确保一旦我进入我创建的 @Startup bean 中的 EJB @PostConstruct 方法,CDI 容器将已经启动并运行并且已经注入(inject)。

有效!!

这是 IBM 站点中问题和解决方案的链接:

http://www-01.ibm.com/support/docview.wss?uid=swg1PM62774

关于java - 在 EJB 3.1 中控制 CDI 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14019030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com