我是新來的,也是CDI世界的新手,我在工作中得到的第一個任務是找到一種控制CDI上傳的方法。控制EJB 3.1內的CDI啓動
我們同時使用EJB 3.1
和CDI 1.0
,因爲它們是由不同的容器控制的,我們可以控制何時以及以什麼順序EJB管Bean將使用@Startup
和@Singleton
註釋待漲。
但是我在我的類中聲明的@Inject
CDI bean由於CDI容器尚未啓動而變爲null。
我一直在嘗試幾天尋找解決方案,我發現here沒有工作(仍然爲空)。
我們使用的是Java EE 6和運行WebSphere Application Server 8
請在應用程序中,如果你能幫助我找到一個方法來控制內,無論EJB的CDI上傳?
這裏是它的一個示例代碼:
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();
}
}
您可以加入一些示例代碼,你是怎麼做到的 –
我用Code Samples編輯了這個問題。 – user1917984
只是想知道,但是有什麼「控制上傳」來處理問題的其餘部分呢? –