[英]EJB injection and EntityManager are both null
我正在使用带有 GlassFish 5 的 Eclipse。我正在使用 Swing 制作一个三层应用程序。 首先我做了一个 JPA 项目,然后添加了 EJB Facet。 正在使用实体类成功创建架构。
我的 EJB 注入和 EntityManager 注入为空。
在我的控制器中,我按如下方式注入了 EJB:
public class BookQueries {
@EJB
private BookService bs;
public BookQueries() {
/*try {
Context context = new InitialContext();
Object fObj = context
.lookup("java:global/LMS/BookService!com.lms.service.BookService");
bs=(BookService)fObj;
}catch(NamingException e) {
System.out.println("Naming Exception while lookup of bean object");
}
*/
}
正如您在控制器构造函数中看到的,我也尝试过 JNDI 查找,但我仍然得到 null。这是我的 EJB 类,其中我注入了 EntityManager,它也是 null。
@Stateless
@LocalBean
public class BookService {
@PersistenceContext(name = "LMS")
EntityManager em;
}
这是我的 Persistence.xml 文件
<persistence-unit name="LMS">
<jta-data-source>jdbc/lms</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation"
value="drop-and-create-tables" />
</properties>
</persistence-unit>
我以前在 Eclipse 上制作了 Web 动态应用程序,并且在那里一切正常。
请让我知道我做错了什么。 谢谢你。
首先是后者,您的BookService
应该具有:
@PersistenceContext(unitName = "LMS") // not 'name'
或者,如果没有其他 PU 正在使用,您可以尝试不使用任何unitName
。
那么关于你的BookQueries
它本身是一个托管 bean 我看不到任何与 bean 相关的注释吗? 如果不是,那么@EJB
东西将不会被初始化。 例如,如果它是一个Singleton
bean 添加注释:
@Singleton
@Startup // makes it to be initialized at app startup
或者
@LocalBean
像new BookQueries()
那样做并不能管理它,因此不会发生注入或此类事情。 您需要将其注释(或在 Glassfish 的控制面板或 beans.xml 中的某处配置)为已知 bean。 然后将其注入到某个托管上下文(UI 类?),例如使用@Inject
或@Resource
就像注入BookService
。
此外,我建议您检查是否应该使用@Inject
或@Resource
类的注释而不是@EJB
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.