繁体   English   中英

Servlet中的Singleton和Tomcat7上的其他类

[英]Singleton in Servlets and other Classes on Tomcat7

我有一些Web应用程序。 每个位于Tomcat7上的不同虚拟主机中。 所有这些Web应用程序都使用相同的库集合(由我自己编写),以.jar的形式存储在WEB-INF / lib中。该库具有一些静态类(记录器,配置等)。 它接缝了web-app X可以看到/使用web-app Y的静态实例。“随机地” X写入Y的日志文件。Y使用X的配置。

这通常与Tomcat中的JVM有关吗?

仅对于Servlet,我可以将静态类存储在ServletContext中,但非Servlet无法访问它们,对吗?

这里是Config.java类中的构造方法

public class Config{
    public static Config instance;

    private Config(){

    }
    public static Config getInstance(){
         if(instance==null) instance = new Config();
         return instance;
    }
}

在Servlet和其他类中,我使用

private static Config config = Config.getInstance();

还有其他方法可以在整个Web应用程序中共享一个Class的一个实例,但只能在此Web应用程序中共享吗?

在上下文/X运行的任何内容都不会在/Y/WEB-INF/libY/WEB-INF/classes看到任何内容。 原因是/X/WEB-INF/lib中的jar和/X/WEB-INF/classes 中的类与上下文/Y的jar和类位于不同的类加载器中 这不是Tomcat的“问题”,这是根据J2EE Servlet规范。

我将重新设计,但是如果您确实需要在两个或多个上下文之间共享一个类,请将这些类放在一个jar中,然后将该jar放在${CATALINA_HOME}/lib 该文件夹中的类对于所有上下文都是可见的,因为它们是作为上下文类加载器的父类加载到类加载器中的。

执行此操作的“正确”方法是在JNDI中注册对象,应用程序的每个组件都可以在其中查找对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM