保持每个群集节点的EJB方法的统计信息的最佳方法

时间:2016-03-14 07:54:51

标签: java performance timer singleton ejb-3.1

我在websphere 8.5中有2个集群,在Ejb 3.1无状态bean中有一个frecvent使用的方法。我想使用一个计时器,每小时记录失败和成功计数以及平均执行时间。非常准确并不重要。保持每个集群节点的统计信息的最佳/最快方法是什么:EJB单例,dynacache,具有静态或同步方法的类,AtomicLong?

2 个答案:

答案 0 :(得分:0)

我的解决方案是在Postconstruct中使用带有计时器(@Schedule)的EJB Singleton。

@Singleton
public class NodeStatistics {
private long totalTime = 0;
private int fail = 0;
private int success = 0;

@PostConstruct
@Schedule(hour = "*/1", minute = "0", second = "0", persistent = false)
public void run() {
    int count = this.fail + this.success;
    long avgTime = 0;
    if (count > 0) {
        avgTime = this.totalTime / count;
    }
    logStatistics();
    reset();
}

public void addFail(long time) {
    this.fail++;
    totalTime += time;
}

public void addSuccess(long time) {
    this.success++;
    totalTime += time;
}

public void reset() {
    this.fail = 0;
    this.success = 0;
}
}

答案 1 :(得分:-1)

如果您可以使用直接网址访问每个群集。 如何创建一个批处理文件来每小时执行一次。