jakarta-ee - 为什么 GlassFish 4.1 中的 Weld 在调用 invalidateSession 后对已经销毁的 ViewScoped bean 调用 @PreDestroy 方法?

标签 jakarta-ee glassfish-4 weld

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

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

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

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

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

    测试 1
  • 已登录应用程序。
  • 退出应用程序。

  • 测试 2
  • 已登录应用程序。
  • 允许 session 过期。

  • 调试消息在两个测试中都显示以下行为:
  • MyAuthenticator 已创建并显示登录表单。
  • MyAuthenticator 在用户登录表单提交并登录后立即销毁。
  • 当 session 失效或过期时,Weld 会抛出报告的错误。

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

    问题
  • 这是 Weld 中的错误吗?
  • 我可以安全地忽略吗?
  • 最佳答案

    此问题已在 GlassFish 4.1.2 中解决。

    关于jakarta-ee - 为什么 GlassFish 4.1 中的 Weld 在调用 invalidateSession 后对已经销毁的 ViewScoped bean 调用 @PreDestroy 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796048/

    相关文章:

    java - Web 应用程序 session 与 token 的安全性

    Java RS Rest API 方法成功返回值,状态码为 500,服务器日志中无异常

    dependency-injection - 可以注入(inject) CDI 中生成的对象吗?

    postgresql - JPA 和 Postgres 序列预分配大小设置不正确

    java - 如何在 JUnit 测试中引导 weld-se

    intellij idea 中的 tomcat 7.0 + JSF + CDI 支持

    java - Weblogic 服务器中的连接泄漏

    java - resultSet.rowUpdated() 抛出 createSQLFeatureNotSupportedException

    hibernate - createQuery()不提供选择查询的结果