【问题标题】:Can I use instance variables in stateless session bean?我可以在无状态会话 bean 中使用实例变量吗?
【发布时间】:2012-04-30 00:29:26
【问题描述】:

我知道无状态 bean 不维护会话状态,但我需要的只是一个记录器。我应该在每个被调用的方法中获取记录器吗?如果没有,我应该在哪里初始化它?

这是肯定的,如果我写这样的代码,我不会在某些使用记录器的方法中得到 NullPointerException 吗?

 @PostConstruct
 public void init() {
   logger = Logger.getLogger();
 }

【问题讨论】:

  • 这不是“有争议的”而是“对话的”状态,尽管这个话题可能会引起争议:)
  • 谢谢,托马斯!我真的很抱歉我的英语。

标签: java jakarta-ee javabeans stateless


【解决方案1】:

我猜你不希望有一个特定于请求/会话的记录器,对吧?在这种情况下,您甚至可以使用静态类成员来添加记录器并让所有 bean 实例使用相同的记录器。

【讨论】:

    【解决方案2】:

    创建一个具有以下属性的单例类:

    1. 类本身类型的静态字段
    2. 私有构造函数以确保该记录器只有一个实例 课程开始
    3. getInstance() 方法将给出该类的唯一实例
    4. getLogger()获取记录器的方法

    在这个类的构造函数中初始化记录器和
    每次需要使用时都可以从 getLogger() 方法中获取记录器

    【讨论】:

      【解决方案3】:

      试试:

      private static final Logger log = Logger.getLogger();
      

      如果您需要线程特定的值,请注意 Logger 的输出处理程序在每一行中写入线程名称,您应该没问题。

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        相关资源
        最近更新 更多