首先,我将描述我要在这里完成的工作。我有一个 Java 应用程序,它定期读取数据并在 JBoss AS 7.1.1 上调用无状态 EJB 以进行进一步操作(计算数据并将其保存到数据库中)。然后我有使用 JSF 2.0 的前端。在作为@ApplicationScoped CDI bean 并且驻留在JSF 项目中的控制器中,我将EJB 注入其中。现在我需要 EJB 从数据库中获取数据。由于这个原因,我正在使用@ApplicationScoped CDI bean:
应用程序上下文在所有servlet 请求、Web 服务调用、EJB 远程方法调用、EJB 异步方法调用、EJB 超时和向在同一应用程序中执行的消息驱动 bean 的消息传递之间共享。当应用程序关闭时,应用程序上下文被销毁。
我只希望所有客户端使用一个 CDI bean,因为数据独立于用户。
现在我想更新 @ApplicationScoped CDI bean 中的数据,它是在 EJB bean 的帮助下在 JSF 项目下定义的,当新数据到达时执行该方法。我已经在@ApplicationScoped CDI bean 中成功使用了@Inject,我从EJB 项目中注入了EJB。现在我想反其道而行之。我试图将 JSF 项目中的 ApplicationScoped CDI bean 注入 EJB bean。但是当我写这篇文章时,我得到了@Inject 下划线作为警告:
@Inject
private CurrentDataController currentDataController;
警告是:
没有 bean 有资格注入到注入点 [JSR-299 §5.2.1]
当我尝试发布项目时,我收到有关CurrentDataController 的类未找到异常的错误。
引起:java.lang.ClassNotFoundException: controllers.CurrentDataController from [Module "deployment.TestEAR.ear.TestEJB.jar:main" from Service Module Loader]
似乎 EJB 项目无法引用 JSF 项目中的类。它还在 TestEJB.jar 中而不是在 TestJSF.jar 中寻找 CurentDataController 类。我在这里缺少什么?
我整个项目的结构如下:
- 测试EAR
- 测试EJB
- 测试EJBClient
- 测试JPA
- 测试JSF
现在我认为,在修复有关未找到类定义的错误之后,我将遇到与我发布的警告相关的另一个问题。