假设我有一个特定的资源S(例如一个使用文件系统的奇怪数据库),我有一个管理该资源的Java类R(它提供高级api并管理诸如并发之类的东西在使用S)。现在我有一个约束,即如果一个R的实例管理S,那么R的其他实例不能同时访问S.
现在,让我们假设我有一个需要通过R访问S的servlet V1。我希望允许许多用户同时使用V1,因为容器会为每个用户分配一个新的V1线程,我想让R静态,在init()方法中初始化它,以便在线程之间共享它。这个可以吗?
案例二:现在我有许多不同的servlet V1,...,VM,每个都可以从许多用户访问。现在我希望所有这些servlet都可以访问S.我必须通过R访问S并且我不能简单地为每个servlet使用R的实例,因为只有一个实例可以处理S.是否存在在所有servlet的所有线程中共享R的任何方法?PS。在我的例子中,R是像neo4j这样的嵌入式数据库。
答案 0 :(得分:1)
您可以在R上创建一个静态初始化程序,以创建R的唯一实例并将其存储在某个静态字段中(可通过静态getter访问)。
您还可以通过实施ServletContextListener
来创建和初始化R的一个实例。在Web应用程序启动时调用contextInitialized
方法。