JPA 无法与 HttpSession 中管理的 CDI 范围一起使用?

发布于 2024-12-13 01:03:06 字数 520 浏览 0 评论 0 原文

属于最终绑定到 HttpSession 的范围的所有 CDI 托管 bean 都需要可序列化。这意味着所有属性都需要可序列化。 EntityManager 并不是,尽管这似乎被认为是一个错误(此处这里(我不知道为什么它被关闭。))。

这意味着如果您想遵守规范,则不能使用会话或对话等 CDI 范围中的 JPA。

看来 Java EE 几乎无法使用还是什么?

All CDI managed beans that belong to a scope that is ultimately bound to the HttpSession need to be serializable. Which means all attributes need to be serializable. EntityManager is not though this seems to be considered a bug (here and here (I don't know why it's closed.)).

This means if you want to adhere to the spec you cannot use JPA from CDI scopes like Session or Conversation.

Seems Java EE is close to unusable or what?

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

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

发布评论

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

评论(1

陌伤浅笑 2024-12-20 01:03:06

你是对的:EntityManager 不可序列化,但你认为 CDI EG 没有注意到这一点吗:-)?

因此,当 CDI bean 被序列化(即 SFSB 的钝化)时,EntityManager 被视为瞬态,但事实并非如此。当 Bean 被反序列化时,EntityManager 会自动重新注入 Bean 中,因此它会像以前一样工作。

问题是当您在 Bean 中使用扩展持久性上下文时。 Java EE 规范不支持此类 bean 的序列化。但是 Java EE 5 的 Seam 2 这样的框架或 Java EE 6 中的 Seam3 Persistence 这样的 CDI 扩展为您提供了管理这些特殊用例的可能性。

you're right : EntityManager is not serializable, but do you think CDI EG didn't notice that :-) ?

So when a CDI bean is Serialized (i.e. passivation of a SFSB) the EntityManager is considered as transient and is not. When then bean is unserialized the EntityManager is automatically re-injected in the Bean and so it works as it used to be.

The problem is when you use Extended Persistence Context in your Bean. Java EE spec doesn't support serialization of such bean. But framework like Seam 2 for Java EE 5 or CDI extension like Seam3 Persistence in Java EE 6 gives you possibilities to manage those special use cases.

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