繁体   English   中英

EJB 注入和 EntityManager 都为 null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM