为什么GlassFish 4.1中的Weld在调用invalidateSession后调用已销毁的ViewScoped bean上的@PreDestroy方法?

Ree*_*ott 5 java-ee weld glassfish-4

我今天早上注意到,当我的用户退出Web应用程序时,我在GlassFish 4.1上运行的JSF应用程序抛出了以下错误:

  • WELD-000019:使用限定符[@Default @Named @Any]销毁Managed Bean [... MyAuthenticator]的实例null时出错

MyAuthenticator是一个带有@PreDestroy注释方法的javax.faces.view.ViewScoped CDI bean.

作为测试,我删除了@PreDestroy注释并验证错误消失了.

然后我将@PreDestroy注释与许多调试消息一起添加回MyAuthenticator并执行以下测试:

测试1

  1. 登录到应用程序.
  2. 退出应用程序.

测试2

  1. 登录到应用程序.
  2. 允许的会话到期.

调试消息在两个测试中都显示以下行为:

  1. 创建MyAuthenticator并显示登录表单.
  2. 提交用户登录表单并且用户登录后,MyAuthenticator会立即销毁.
  3. 会话失效或过期时,Weld会抛出报告的错误.

我相信错误是Weld在我已经销毁的MyAuthenticator上调用@PreDestroy方法的结果.

问题

  • 这是Weld的一个错误吗?
  • 我能安全地忽略吗?

Ree*_*ott 0

此问题在 GlassFish 4.1.2 中已得到解决。