在tomcat上共享Web应用程序之间的属性

时间:2014-05-06 19:30:52

标签: java tomcat web-applications tomcat6 java-6

在两个Web应用程序之间共享服务,访问资源(例如属性文件),而不在两个Web应用程序中复制代码,最有效的设计模式/编码实践是什么?

在Tomcat上运行的两个Web应用程序,每个应用程序都读取Tomcat的context.xml中的属性文件和一些环境条目。这很好,但基本上我只复制了读取两个Web应用程序的代码。像这样重复代码是好的设计和/或编程实践吗?

我考虑过创建一个包含服务(它们的接口和实现)的JAR文件,以及一个单独的单元,它将成为获取服务的入口点。我已经阅读并搜索并想出了一个单身人士:

public class PropertyService {
    private static volatile ExternalPropertyService eps;
    private static volatile SettingsPropertyService sps;
    private static volatile AuditPropertyService aps;

    private PropertyService () {
    }

    private static class ServiceHolder {
        private static final PropertyService propertyService = new PropertyService();
    }

    public static PropertyService getInstance() {
        return ServiceHolder.propertyService;
    }

    public ExternalPropertyService getExternalPropertyService() {
        ExternalPropertyService tmp = eps;
        if (tmp == null) {
            synchronized(this) {
                tmp = eps;
                if (tmp== null) {
                    tmp = new ExternalPropertyServiceImpl();
                    eps = tmp;
                }
           }
        }
        return tmp;
    }
    // Rest of the property member accessors omitted
}

Singleton是延迟加载的(按需初始化)并且服务也是延迟加载的(双重检查锁定)。基本上单身就是包装服务。拥有它需要甚至是明智的吗?服务读取,缓存和刷新值,它们是同步的和线程安全的。

如果我将此JAR放在Tomcat的公共文件夹中,它将由公共类加载器拾取并可供两个Web应用程序使用。这两个Web应用程序也会使用与普通类加载器相同的单例吗?它是线程安全的吗?从我可以收集到的应该是。

我在这里做错了吗?有没有更好的方法呢?

0 个答案:

没有答案