在我的应用程序中,我有以下启动bean:
@Startup
@Singleton
@DependsOn("RecordAcumulator")
public class StartupBean {
private static final Logger logger = Logger.getLogger(StartupBean.class);
@Inject
RecordAcumulator recordAcumulator;
/**
* Initializes the EJB system on the post construct event
*/
@PostConstruct
public void init() {
记录累加器是访问数据库的EJB。启动旨在将数据库表预加载到缓存中。
@Stateless
public class RecordAcumulator {
当这个发布时,我得到了
Caused by: com.ibm.ws.exception.RuntimeWarning: CNTR0200E: The StartupBean singleton session bean in the EJB.jar module depends on the RecordAcumulator enterprise bean in the EJB.jar, but the target is not a singleton session bean.
我已经尝试了很多这方面的变化,我似乎无法注入这些东西。我的日志文件表明RecordAcumulator EJB在加载启动bean之前已绑定,所以我无法弄清楚为什么我不能将EJB注入我的启动。
如果我删除@DependsOn,我会得到这个:
Caused by: javax.ejb.NoSuchEJBException: An error occurred during initialization of singleton session bean bla#EJB.jar#StartupBean, resulting in the discarding of the singleton instance.; nested exception is: javax.ejb.EJBException: The @Inject java.lang.reflect.Field.recordAcumulator reference of type com.foo.bar.accum.RecordAcumulator for the StartupBean component in the EJB.jar module of the bla application cannot be resolved.
任何想法如何解决这个问题?
EDIT ---------- 我找到了这个链接: Controlling CDI Startup inside EJB 3.1
但问题是我使用WAS 8.5.5.0,该问题本应在8.5.0.2中解决
答案 0 :(得分:0)
从我所看到的:
@DependsOn
@Singleton
可以complexities with singleton EJBs,因为通过您的应用程序的所有流量都将通过该实例。在您的情况下,这可能不是问题。