0

AFAIK @Singleton EJB 适合计算页面浏览量,例如:

@Singleton
public class CounterBean {
    private int hits = 1;

    // Increment and return the number of hits
    public int getHits() {
        return hits++;
    }
}

这适用于一个页面的 Web 应用程序,如果 Web 应用程序有 1K 个页面,并且我们希望在每次加载时显示每个视图的计数器。

会为此分配@Singleton 吗?我的意思是,这会有效吗?(有许多bean 经常更新单个实例)

我猜测管理所有网页计数器的单个实例效率不高。想象一下,成千上万的 @RequestScoped bean 更新Map <ViewID, Count>@Singleton 中的 a,将导致大量并发......

为了更新重新部署的持久值,我正在考虑使用@PostConstruct(从数据库中提取)、@PreDestroy(推送到数据库)注释。

页面浏览计数器将显示在每个视图中。

网页的数量是动态的。

我知道 Google Analytics 可以完成这项工作,但问题是如何在 Java EE 中完成这项工作。

应用服务器:Jboss 7.1

4

1 回答 1

1

如果你真的想实现一个页面浏览计数器,你最好让它持久化,否则每次重新部署或重新启动应用程序时计数将从 0 重新开始。如果应用程序集群在多台服务器上,那么这些数字就不对了。

如果这只是一个练习,您应该使用bean-managed concurrencyConcurrentHashMap,并使用AtomicInteger. 请参阅这两个类的文档以了解它们的工作原理,尤其是文档putIfAbsent()(除非您提前知道所有页面并且可以使用设置为 0 的计数器预填充地图,在这种情况下您甚至不需要使用putIfAbsent())。

于 2012-12-21T13:46:16.860 回答