【发布时间】:2012-12-24 08:36:32
【问题描述】:
我是新来的,也是 CDI 世界的新手,我工作中的第一个任务是找到一种控制 CDI 上传的方法。
我们同时使用EJB 3.1 和CDI 1.0,因为它们由不同的容器控制,所以我们可以通过使用@Startup 和@Singleton 注释来控制EJB Managed Beans 的启动时间和顺序。
但是我在课堂上声明的 @Inject CDI bean 将变为 null,因为 CDI 容器尚未启动。
我已经尝试了几天来寻找解决方案,但我发现 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 接口:
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();
}
}
【问题讨论】:
-
您能添加一些示例代码吗?
-
我已经用代码示例编辑了问题。
-
只是想知道,但“受控上传”与问题的其余部分有什么关系?
-
我正在尝试控制 CDI 的起点。我用上传这个词来描述容器在服务器启动时的起点。
标签: java jakarta-ee java-ee-6 cdi ejb-3.1