8

我正在将我的应用程序从 GlassFish 3.0.1 迁移到 GlassFish 3.1.1。部署失败,并显示以下错误消息:

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. 

没有堆栈跟踪。我将根日志记录级别设置为 FINEST,第一个 SEVERE 消息出现在 Weld 消息之后:

//...
FINE: WELD-000105 Enabled interceptor types for Manager
Enabled alternatives: [] []
Registered contexts: [interface javax.enterprise.context.SessionScoped, interface javax.enterprise.context.RequestScoped, interface javax.inject.Singleton, interface javax.enterprise.context.Dependent, interface javax.enterprise.context.ApplicationScoped, interface javax.enterprise.context.ConversationScoped]
Registered beans: 0
Specialized beans: 0
: []

在这样的几条消息之前(对于几个不同的类):

FINE: PWC4451: File cannot be read /opt/sun/glassfish-3.1.1/glassfish/domains/domain1/applications/QmsWeb/WEB-INF/classes/org/jboss/seam/transaction/SeamTransaction.class
FINE: PWC4451: File cannot be read /opt/sun/glassfish-3.1.1/glassfish/domains/domain1/applications/QmsWeb/WEB-INF/classes/org/jboss/seam/transaction/SeamTransaction.class
FINE: PWC4451: File cannot be read /opt/sun/glassfish-3.1.1/glassfish/domains/domain1/applications/QmsWeb/WEB-INF/classes/net/sf/ehcache/config/TerracottaConfiguration$ValueMode.class
//...

什么可能导致此错误?这些 PWC4451 消息是否表明某些库没有被加载?

4

6 回答 6

6

这是由于没有实现 Serializable 的 @ViewScoped bean。显然,我们正在使用的 Weld 的旧版本并不认为钝化范围的 bean 不可序列化是令人反感的,但是因为它,这个 bean 默默地失败了。哦,好吧,希望这可以节省一些时间。

于 2011-08-31T22:56:23.430 回答
4

经过三个小时的调试后,我解决了这样的问题,试图在 JBoss 6 中部署应用程序。

在 Glassfish 下似乎没有正确记录来自 Weld 的几条错误消息。就我而言,我用@Stateless @RequestScoped 注释了一个EJB(这是非法的,必须是@Statefull)。使用 Glassfish,我只能看到“加载应用程序时出错”,而在 JBoss 6 中,我得到了正确的错误消息,指示有问题的代码。

我建议您尝试在 JBoss 6 上进行部署,去除所有阻止 Weld 部署程序扫描应用程序并验证 CDI 内容的部分(例如,具有特定 JNDI 路径的@Resource)。

于 2011-08-31T22:27:32.540 回答
2

就我而言,问题在于我的 beans.xml 包含空的“beans”元素,它曾经可以工作,但显然不再有效。当我用一个完全空的、0 字节的 beans.xml 替换它时,它就起作用了。

于 2011-12-16T13:02:35.000 回答
2

在添加不可序列化的拦截器时,我遇到了同样的问题Glassfish 3.1.2.2。刚得到一个NullPointerException,没有任何进一步的解释。

当我让拦截器实现时它工作正常Serializable

于 2012-09-11T08:56:10.670 回答
2

我遇到的有关此问题的原因和解决方案:
-目标未更新(确保进行 maven 清理,目标文件夹可能被锁定,尝试手动删除它并重建您的耳朵(有几次这个问题)
-JDBC 问题池:刷新它们
- EJB 的构造函数问题(注意它是创建 bean 的容器):容器需要能够启动它们。因此必须存在没有参数的默认构造函数

如果这不起作用:团队->比较->最新的工作版本,并将每个 EJB bean 或 Web 服务的 DTO 视为可能的错误原因。注释您的更改并重试部署以找到您的问题。

无论如何,这是一个令人讨厌的错误:(祝你好运!

于 2013-05-22T10:04:44.753 回答
0

就我而言,本着拦截器的精神,我的很容易找到,因为我在那里玩。

我在我的拦截器上添加了无辜的@Interceptor,即使我将它与注释一起使用。

我的 glassfish 版本是 3.1.2.2。

这个页面说它是可选的Inteceptor Javadoc

于 2014-04-04T15:04:25.693 回答