在Java SE中使用CDI和JPA的最简单方法是什么?

 chenhe86888 发布于 2023-02-06 13:51

我想在Java SE中使用

@Stateless
public class CarDAO {
    @Inject
    private EntityManager em;

    public Car findById(Long id) {
        return em.find(Car.class, id);
    }
}

@Singleton
public class Application {
    @Inject
    private CarDAO carDAO;

    public void run() {
        Car car = carDAO.findById(44);
        System.out.println(car);
    }
}

public class EntryPoint {
    public static void main(String[] args) {
        Application application = // missing code
        application.run();
    }
}

我必须做些什么才能实现这一目标?我在我的项目中使用postgres数据库和maven.

我已经读过一些关于Weld的内容(但它看起来只有CDI).我不知道如何添加到Weld possibilty来注入实体管理器.我知道我可以获得实体经理

EntityManagerFactory emf = Persistence.createEntityManagerFactory("mgr");
EntityManager em = emf.createEntityManager();

但它不如注射方便.

如果有任何相关的教程,那将是很棒的.无论如何,谢谢你的帮助!

1 个回答
  • 首先,EJB是Java EE的一部分,因此您无法在Java SE中使用它们.但是,CDI可以在Java SE环境中使用,我的示例将向您展示如何将其与Weld一起使用,但也有其他实现 - 请注意,CDI只是规范,而Weld是该规范的实现之一.

    要使用Weld,您需要放置weld-se-x.x.x-Final.jar类路径或在Maven中指定其依赖关系

    <dependency>
        <groupId>org.jboss.weld.se</groupId>
        <artifactId>weld-se</artifactId>
        <version><!-- See https://mvnrepository.com/artifact/org.jboss.weld.se/weld-se for current version --></version>
    </dependency>
    

    然后你需要在main方法中启动容器,所以做这样的事情

    public static void main(String[] args) throws IOException {
        Weld weld = new Weld();
        WeldContainer container = weld.initialize();
        Application application = container.instance().select(Application.class).get();
        application.run();
        weld.shutdown();
    }
    

    这应该让你开始,然后你可以使用CDI生产者来制作你的EntityManager注射剂

    @Produces
    @RequestScoped
    public EntityManager createEntityManager() {
       return Persistence.createEntityManagerFactory("mgr").createEntityManager();
    }
    
    public void closeEM(@Disposes EntityManager manager) {
       manager.close();
    }
    

    另请参阅有关在Java SE中使用CDI的Weld文档.

    2023-02-06 13:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有