替代将属性文件用于Java EE应用程序的环境设置

时间:2014-07-03 09:19:02

标签: java-ee properties configuration websphere jndi

正在处理胖客户端java应用程序,它在属性文件中存储了与环境相关的数据(如邮件详细信息,数据库连接密码)。

如果在尝试加载应用程序时缺少属性文件,则需要发送致命邮件。但是为了发送邮件,它需要属性文件。因为它包含所有邮件详细信息。由于缺少属性文件,因此导致大问题。

所以请建议我除了java代码之外的属性文件的替代方法。

是否可以在websphere中存储属性文件?

3 个答案:

答案 0 :(得分:1)

在WebSphere Application Server中,这是通过使用Resource Environment Entry来完成的。您需要执行以下操作:

  1. 创建一个从JNDI读取属性的javax.naming.spi.ObjectFactory实现。 基本代码可能如下所示:

    public Object getObjectInstance(Object object, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
        Properties properties = new Properties();
        Reference ref = (Reference) object;
        Enumeration addrs = ref.getAll();
    
        while (addrs.hasMoreElements()) {
            RefAddr addr = (RefAddr) addrs.nextElement();
            String entryName = addr.getType();
            String value = (String) addr.getContent();
            properties.setProperty(entryName, value);
        }
        return properties;
    }
    
  2. 在服务器中将实现类注册为Resource Environment Provider。按照New Resource environment provider

  3. 中描述的步骤操作
  4. 定义Resource Environment Entry并将其绑定到新注册的提供商 - Resource environment entry settings

  5. 在条目中创建您需要的自定义属性。

  6. Resource Environment Entry绑定到应用程序中的Java EE模块 - 这可以通过不同方式完成,具体取决于模块的类型。

  7. 如果您需要更多详细信息,请参阅此处的综合指南 - Using resource environment providers in WebSphere Application Server。如果您使用的是WAS 7.0或更高版本,则无需将提供程序放在共享库中 - 它可以直接驻留在应用程序中。

    至于存储凭据,有一个特殊的工具 - J2C Authentication Alias,如Gas所述。

答案 1 :(得分:0)

您可以始终拥有应用程序属性的默认值,因此这可能是邮件配置的解决方案,前提是存在固定的默认值。

另一种方法是使用存储在数据库中的应用程序属性。当然,这需要具有数据库连接(但在应用程序或容器的持久性配置中通常具有这种连接)。

正如在this post's answer中已经说过的,我们在所有的Web应用程序中使用这种技术,主要有两个原因:

  1. 对属性的更改可以在运行时进行,无需监视文件更改,它们可以由应用程序本身完成,并且不需要知道已部署应用程序之外的路径。

  2. 属性可以包含其他信息,例如类型(例如数字,日期,字符串),默认值,注释或更改它的用户。

  3. 为了实现它,您将创建一个应用程序范围的组件,该组件访问应用程序其余部分的数据库属性。

答案 2 :(得分:0)

您可以通过控制台(环境&gt;命名&gt;名称空间占用)在JNDI树中存储字符串属性,然后通过InitialContext访问它们。

但对于数据库或邮件服务器等资源,您应该创建DataSource,J2C身份验证别名或MailSession条目,然后在应用程序安装期间将其映射到应用程序资源。