gpt4 book ai didi

jsf - 无法将不可序列化类型的 bean 注入(inject)到钝化范围的 bean 中

转载 作者:行者123 更新时间:2023-12-02 16:18:25 25 4
gpt4 key购买 nike

我正在学习 Java EE 7。

我正在尝试将用户 session 存储在 @SessionScoped Backing Bean 中,但我的 IDE 告诉我有一个错误,因为“无法将不可序列化类型的 bean 注入(inject)到钝化的 bean 中”范围”。

@SessionScoped bean:

import negocio.Autenticacion;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.Serializable;

@Named
@SessionScoped
public class UserSesion implements Serializable{

@Inject
private Autenticacion auth; // Error by IDE


}

@无状态EJB代码:

import modelo.Usuario;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.security.MessageDigest;

@Stateless
public class AutenticacionBean implements Autenticacion{

@PersistenceContext(unitName = "Banco-PU")
private EntityManager em;
...

为什么我不能在支持 bean 中注入(inject) EJB?

IDE:Intellij IDEA 14.1.4

最佳答案

这是一个虚假错误。所讨论的 IDE 显然不够智能,无法检测到它实际上是一个 EJB,而不是一个“简单”CDI(或 JSF)托管 bean。 EJB 始终是隐式可序列化的。

您有 4 个选择:

  1. 忽略它。它会运行得很好。

  2. 承认错误并让 EJB 类实现 Serializable无论如何。

  3. 使用@javax.ejb.EJB而不是@javax.inject.Inject注入(inject)它。它还会注入(inject) EJB,但一般的 IDE 必须足够聪明,不会以这种方式提示序​​列化,因为 IDE 现在可以确定它实际上是 EJB,而不是 CDI 托管 bean。

  4. 将 IDE 升级到已修复此问题的较新版本(如果有)。使用能力@Inject而不是@EJB自 Java EE 7 以来,EJB 上的新功能(尽管支持不太完整;例如,在使用 @Asynchronous 时,在 @Inject 中引用 self 将不起作用)。如果在最新的 IDE 版本中仍未修复,即使它声称兼容 Java EE 7,请向他们报告错误。

关于jsf - 无法将不可序列化类型的 bean 注入(inject)到钝化范围的 bean 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138472/

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