2011-12-30 53 views
1
    時產生的異常使用NetBeans 7在GlassFish 3.1
  1. 啓動一個新的Web應用程序
  2. 在的index.xhtml身上帶有字符串添加一個h:outputText標籤與value="#{myBean.message}"
  3. 創建SessionScopedManagedBeanMyBean財產message;創建getter和setter;使其實現Serializable
  4. 創建StatelessSessionBean和使用@EJB註釋
  5. 從這點上來說,只要更改Java代碼並保存該項目將其注入MyBean,你會得到很多錯誤(NPE,IO錯誤,EJB的錯誤)在取消部署期間。部署很好,應用程序運行良好。但是我想避免在取消部署期間的例外情況。

這是正常的嗎?或者我做錯了什麼?注入EJB到SessionScoped ManagedBean取消部署

這裏我的代碼:

的index.xhtml(身體的一部分)

<h:body> 
     <h:outputText value="#{myBean.message}"></h:outputText> 
    </h:body> 

MyBean.Java

@ManagedBean 
@SessionScoped 
public class MyBean implements Serializable { 

    @EJB NewSessionBean nsb; 

    public String getMessage() { 
     return " " + nsb.toString(); 
    } 

    public MyBean() { 
    } 
} 

NewSessionBean.java

@Stateless 
@LocalBean 
public class NewSessionBean { 
} 

爲了獲取錯誤,只需加載網頁,在消息字符串中添加空格,保存java文件(自動部署已切換,否則手動重新部署)。

一些例外

EJB5014: Exception resolving object 
java.lang.NullPointerException at  
com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate$SerializableLocalObjectDelegate.createObject(EJBLocalObjectInvocationHandlerDelegate.java:158) 

IOException while loading persisted sessions: java.io.IOException 
java.io.IOException 
at com.sun.ejb.base.io.EJBObjectInputStream.resolveObject(EJBObjectInputStream.java:114) 

UPDATE

如果我Named更換ManagedBean註解,因此使用CDI,因此更換javax.faces.bean.SessionScopedjavax.enterprise.context.SessionScoped,我有完全一樣的取消部署時的問題,以及後綴折runs流暢。

拋出的異常與以前完全一樣。

+0

你爲什麼使用*** @ SessionScoped ***?這是絕對必要的嗎? – Lion 2011-12-30 13:33:28

+0

@Lion呃,這裏沒有什麼是絕對必要的,還有其他方法可以實現我們的目標。但在這種情況下,「會話」是豆的正確範圍......順便說一句:只有SessionScoped拋出異常,而不是其他的作用域。 – perissf 2011-12-30 13:36:35

回答

0

您的服務器嘗試序列化並保存http會話。我的會話bean應該可序列化以使會話持久性可用。 Ir看起來像這樣的引用:NewSessionBean nsb;不可序列化。你可以讓它瞬變,你應該擺脫錯誤。但在sesson恢復後,nsb將爲空。我不確定它是如何在EJB中處理的,但是這個引用必須以某種方式重新注入。