无法将不可序列化类型的 bean 注入钝化范围的 bean
Cannot inject bean of non-serializable type into bean of passivating scope
我正在学习 Java EE 7。
我正在尝试将用户会话存储在 @SessionScoped
Backing Bean 中,但我的 IDE 告诉我出现错误,因为 "Cannot inject bean of non-serializable type into bean of passivating scope".
@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
}
@Stateless 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;
...
为什么我不能在 backing bean 中注入 EJB?
IDE: Intellij IDEA 14.1.4
这是一个误报。有问题的 IDE 显然不够聪明,无法检测到它实际上是一个 EJB,而不是 "simple" CDI(或 JSF)管理的 bean。 EJB 始终是隐式可序列化的。
您有 4 个选项:
忽略它。它会 运行 完全没问题。
为假错误鞠躬,让 EJB class 实现 Serializable
无论如何。
使用@javax.ejb.EJB
代替@javax.inject.Inject
注入。它还会注入 EJB,但平均 IDE 必须足够聪明,不会以这种方式抱怨序列化,因为 IDE 现在可以确定它实际上是一个 EJB,而不是 CDI 管理的 bean .
将 IDE 升级到已修复此问题的较新版本(如果有)。自 Java EE 7 以来,在 EJB 上使用 @Inject
而不是 @EJB
的能力是新的(尽管支持不太完整;例如,在 @Asynchronous
中引用 self 时将不起作用使用 @Inject
)。如果在最新的 IDE 版本中仍未修复,即使它声称与 Java EE 7 兼容,请向他们报告错误。
我正在学习 Java EE 7。
我正在尝试将用户会话存储在 @SessionScoped
Backing Bean 中,但我的 IDE 告诉我出现错误,因为 "Cannot inject bean of non-serializable type into bean of passivating scope".
@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
}
@Stateless 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;
...
为什么我不能在 backing bean 中注入 EJB?
IDE: Intellij IDEA 14.1.4
这是一个误报。有问题的 IDE 显然不够聪明,无法检测到它实际上是一个 EJB,而不是 "simple" CDI(或 JSF)管理的 bean。 EJB 始终是隐式可序列化的。
您有 4 个选项:
忽略它。它会 运行 完全没问题。
为假错误鞠躬,让 EJB class 实现
Serializable
无论如何。使用
@javax.ejb.EJB
代替@javax.inject.Inject
注入。它还会注入 EJB,但平均 IDE 必须足够聪明,不会以这种方式抱怨序列化,因为 IDE 现在可以确定它实际上是一个 EJB,而不是 CDI 管理的 bean .将 IDE 升级到已修复此问题的较新版本(如果有)。自 Java EE 7 以来,在 EJB 上使用
@Inject
而不是@EJB
的能力是新的(尽管支持不太完整;例如,在@Asynchronous
中引用 self 时将不起作用使用@Inject
)。如果在最新的 IDE 版本中仍未修复,即使它声称与 Java EE 7 兼容,请向他们报告错误。