Glassfish部署错误,包含无信息的错误消息



我正在使用NetBeans IDE开发一个Java EE企业应用程序。我可以在与NetBeans IDE捆绑的Glassfish实例上开发和测试我的整个应用程序,但当我试图在我们的生产Glassfish服务器上部署我的应用程序时,我会遇到一些模糊的错误。每次我尝试在服务器上部署.ear包时,Glassfish都会报告以下错误:

SEVERE: Exception while loading the app
SEVERE: Exception while shutting down application container
SEVERE: Exception while shutting down application container : java.lang.NullPointerException
SEVERE: java.lang.RuntimeException: Error occurred during deployment: Exception while shutting down application container : java.lang.NullPointerException. Please see server.log for more details.

该应用程序是在NetBeans 7.2、Java EE 6、JDK 7上从头开始开发的,并部署在GlassFish 3.1.2.2上。将日志级别更改为ALL不会使GlassFish产生更有用的错误消息。网上还提到了其他解决方案,包括创建一个空的0字节beans.xml文件和使用另一个应用程序服务器(如JBoss)。我没有尝试JBoss或其他应用服务器,但在Glassfish上找不到导致错误的原因。

这不是一个通用的答案,但我在定义会话范围类而不实现Serializable接口时遇到了这个问题。具有NullPointerException的示例:

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class someBean(){
}

示例没有NullPointerException:

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class someBean() implements Serializable{
}

系统环境:Windows x64,jdk x64,glassfish x64。

如果你的应用程序很好,那么glassfish就无法干净地取消部署。这当然意味着你之前已经部署了那个特定的应用程序。我通常要做的是:

  • 停止玻璃鱼
  • 转到你的域和/或实例目录,如果有类似你的应用程序的名称,请检查以下目录并将其删除:"application","generated"下的所有子文件夹
  • 删除osgi下的felix目录(确保不要在安装目录中删除该目录!)
  • 启动玻璃鱼
  • 部署

如果您正在运行一个glassfish集群,您通常需要在DAS和实例上都这样做。非常烦人,但这种情况通常只有在进行了相当多的部署之后才会发生。

奇怪的是,在64位Debian 6系统上运行的32位JDK导致了这个错误。我已经尝试了我能想到的所有可能的相关和非相关的事情,包括使用相同的JDK更新,更改/etc/hosts以匹配开发系统,在生产服务器上安装带有捆绑Glassfish的NetBeans(!),使用无效的IP地址代替有效的IP地址,使用Oracle Glassfish服务器代替社区版本,等等。这些都没有帮助。直到我注意到32位JDK并将其替换为64位版本后,问题才得到修复。

这个错误,它模糊的报告和不知何故无关的原因浪费了我5天的时间。我决定分享我的经历,希望它能帮助处于类似沮丧境地的人。

相关内容

最新更新