EntityManager初始化最佳实践

发布于 2024-08-16 03:41:28 字数 293 浏览 3 评论 0原文

使用 EntityManager 时,最好使用 PersistenceContext 获取一个实例并将其在我的程序中传递,还是应该多次使用依赖项注入?

在我的应用程序中,每个客户端都将与有状态会话 bean 进行通信,并且每个 bean 在某个时刻都需要使用 EntityManager。 我猜想 bean 方法是同时调用的(但我什至不确定)。 如何保证以线程安全的方式使用 EntityManager?有交易吗?每个 bean 都有一个单独的实例?

抱歉,如果这令人困惑,我是 EJB/JPA 的新手,我找不到任何可以解决我的问题的材料。

When using EntityManager, is it better to get one instance with PersistenceContext and pass it around in my program, or should I use dependency injection more than once?

In my application each client will communicate with a stateful session bean, and each bean needs to use EntityManager at some point.
I guess that bean methods are invocated concurrently (but I'm not even sure).
How do I guarantee that I use EntityManager in a thread-safe manner? With transactions? With a separate instance in each bean?

Sorry if this is confusing, I'm new to EJB/JPA and I couldn't find any material which addresses my questions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

撩起发的微风 2024-08-23 03:41:28

是的,您应该将 EntityManager 实例(对于每个线程/客户端请求都不同)注入到有状态会话 bean(不会同时调用,至少不会从不同的客户端调用)。

不过,创建 DAO 类是没有意义的。 JPA 已经是一个高级持久性 API,它为您提供 RDBMS 独立性以及不同 JPA 实现之间的可移植性。因此,DAO 只会给代码库带来混乱。

对于交易,您实际上不需要执行任何操作。默认情况下,会话 bean 中的业务方法具有“必需”事务属性,因此它们将始终在特定于客户端的事务内运行。

Yes, you should inject the EntityManager instances (which will be different for each thread/client request) into your stateful session beans (which are not invoked concurrently, at least not from different clients).

There is no point in creating DAO classes, though. JPA already is a high-level persistence API that gives you RDBMS independence and portability between different JPA implementations. So, DAOs would only add clutter to the codebase.

For transactions, you don't really need to do anything. Business methods in session beans have a "Required" transaction attribute by default, so they will always run inside a client-specific transaction.

请你别敷衍 2024-08-23 03:41:28

使用 @PersistenceContext 将 EntityManager 注入 DAO 类中。这些是将处理数据库操作的类。然后在所有其他(服务)类中注入您的 DAO 类。您的 DAO 应该是无状态 bean(不需要远程接口,只需本地接口)

Use @PersistenceContext to inject your EntityManager in your DAO class(es). These are the classes that will handle the database operations. Then in all other (service) classes inject your DAO class(es). Your DAO should be a stateless bean (no need of a remote interface, only local)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文