gpt4 book ai didi

java - 在 JAX-RS 中初始化实体管理器以实现规模化

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:03 25 4
gpt4 key购买 nike

<小时/>

我正在使用部署在heroku 中的JAX-RS RESTful 服务。该服务仅检索信息或插入数据库。每次启动线程时,我都会执行以下代码来创建实体管理器:

@PostConstruct
public void init() {
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceUnit", System.getProperties());
//InitialContext context = new InitialContext();
entityManager = emf.createEntityManager();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

我认为这段代码使我的应用程序不可扩展。有人知道初始化实体管理器的其他方法吗?

pd:我在heroku 中使用jetty 嵌入式服务器。

谢谢!

最佳答案

您的 EntityManagerFactory 应该只初始化一次并重用,因为创建它的成本很高。 EntityManagerFactory 也是线程安全的。您可以创建 EntityManagerFactory 的静态实例(例如通过创建单例类来存储它)。然后,您可以在需要创建 EntityManager 实例时调用 getInstance 方法

单例示例:

public class Emf {

private static Emf theInstance = null;
private EntityManagerFactory entityManagerFactory = null;

private Emf() {
try {
entityManagerFactory = Persistence.createEntityManagerFactory("PersistenceUnit", System.getProperties());
//InitialContext context = new InitialContext();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static synchronized Emf getInstance() {
if (theInstance == null) {
theInstance = new Emf();
}
return theInstance;
}

public EntityManagerFactory getFactory() {
return entityManagerFactory;
}

}

这样调用它:

@PostConstruct
public void init() {
try {
entityManager = Emf.getInstance().getFactory().createEntityManager();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

关于java - 在 JAX-RS 中初始化实体管理器以实现规模化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24923915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com