2011-12-30 67 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中处理的,但是这个引用必须以某种方式重新注入。