2014-07-09 29 views
1

我使用Java EE 6和Glassfish 3.1.2.2。我有一個有無狀態會話bean的EJB項目和一個帶有命名會話範圍類的WEB項目。使用引用EJB的命名類的序列化,其中包含實體管理器

例如:

命名類

@Named 
@SessionScoped 
public class MyWebController implements Serializable { 

@EJB 
private MyBean myBean; 
} 

EJB類

@Stateless 
public class MyBean { 

@PersistenceContext 
private EntityManager em; 
} 

該項目正在運行,但是當我做代碼分析,我得到以下信息。

非瞬態在序列化類不可序列實例字段

這Serializable類定義了一個非原始實例字段既不是瞬時的,序列化的,或java.lang.Object中,並且不似乎實現Externalizable接口或readObject()和writeObject()方法。如果在此字段中存儲不可序列化的對象,則此類的對象將不會正確反序列化。

有人知不知道,我誰可以重構我的代碼,以避免這種情況?

回答

0

不會在這些議題的專家,但試試這個:

1)確保您使用的是正確@SessionScoped註釋:

@Named 
@javax.enterprise.context.SessionScoped 
public class MyWebController implements Serializable { 

    @EJB 
    private MyBean myBean; 

} 

2)嘗試用EJB序列化過:

@Stateless 
public class MyBean implements Serializable { 
    ... 
} 

3)如果此解決方案不斷打破。嘗試用@Inject代替@EJB

+0

的問題是無狀態的bean不能是序列化的,因爲EntityManager的,這是不序列化。 – user3819332

相關問題