我正在将我的应用从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,并在Weld消息之后发生第一条SEVERE消息:
//...
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消息是否可以指示某些库未加载?
答案 0 :(得分:6)
这是由于@ViewScoped bean没有实现Serializable。显然,我们使用的较旧版本的Weld并没有发现钝化范围的bean不是Serializable令人反感,但是这个因为它而无声地失败。哦,希望这能节省一些时间。
答案 1 :(得分:3)
经过三个小时的调试后,我修复了这样的问题,试图在JBoss 6中部署应用程序。
似乎来自Weld的几条错误消息未在Glassfish下正确记录。在我的例子中,我用@Stateless @RequestScoped注释了一个EJB(这是非法的,必须是@Statefull)。 使用Glassfish,我只能看到“加载应用程序时出错”,而在JBoss 6中,我收到正确的错误消息,指出有问题的代码。
我建议您尝试在JBoss 6上部署剥离所有部分(例如,具有特定JNDI路径的@Resource),以防止Weld部署者扫描应用程序并验证CDI内容。
答案 2 :(得分:2)
在我的情况下,问题是我的beans.xml由空的“beans”元素组成,它曾经起作用但显然不再存在。当我用一个完全空的0字节beans.xml替换它时,它工作。
答案 3 :(得分:2)
在添加Glassfish 3.1.2.2
中不可序列化的拦截器时,我遇到了同样的问题。刚收到NullPointerException
而没有任何进一步的解释。
当我创建拦截器Serializable
时,它工作正常。
答案 4 :(得分:1)
我遇到过有关此问题的原因和解决方案:
- 目标没有更新(确保maven干净,目标文件夹可能被锁定,尝试手动删除它并重建你的耳朵(有这个问题几次)
- JDBC池的问题:刷新它们
- EJB的构造函数问题(注意它是创建bean的容器):容器需要能够启动它们。因此,必须存在没有参数的默认构造函数
如果不起作用: team->比较 - >最新的工作版本,并考虑每个EJB bean或DTO for webservices作为可能的错误原因。评论您的更改并重试部署以找到您的问题。
无论如何,这是一个令人讨厌的错误:(祝你好运!
答案 5 :(得分:0)
在我的情况下,以及拦截器的精神,我很容易找到,因为我在那里玩耍。
我在我的拦截器上添加了无辜的@Interceptor,即使我正在使用注释。
我的glassfish版本是3.1.2.2。
此页面显示它是可选的Inteceptor Javadoc。