将EJB注入启动单例bean

时间:2015-05-13 12:19:17

标签: java java-ee java-ee-6

在我的应用程序中,我有以下启动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中解决

1 个答案:

答案 0 :(得分:0)

从我所看到的:

  1. 删除@DependsOn
  2. 制作您的EJB @Singleton
  3. 可以complexities with singleton EJBs,因为通过您的应用程序的所有流量都将通过该实例。在您的情况下,这可能不是问题。