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

时间:2015-03-01 16:34:17

标签: java-ee glassfish-4 weld

今天早上我注意到,当我的用户退出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. 退出了应用程序。
  3. 测试2

    1. 登录到应用程序。
    2. 允许会话过期。
    3. 调试消息在两个测试中都显示以下行为:

      1. 创建MyAuthenticator并显示登录表单。
      2. 在提交用户登录表单并且用户已登录后,MyAuthenticator会立即销毁。
      3. 当会话无效或过期时,Weld会抛出报告的错误。
      4. 我认为错误是Weld在我已经销毁的MyAuthenticator上调用@PreDestroy方法的结果。

        问题

        • 这是Weld的错误吗?
        • 我可以安全地忽略吗?

1 个答案:

答案 0 :(得分:0)

此问题已在GlassFish 4.1.2中解决。