【问题标题】:Alternative to using property files for enviroment settings of Java EE application在 Java EE 应用程序的环境设置中使用属性文件的替代方法
【发布时间】:2014-07-03 09:19:02
【问题描述】:

我正在开发在属性文件中存储环境相关数据(如邮件详细信息、数据库连接密码)的胖客户端 java 应用程序。

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

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

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

【问题讨论】:

  • 您可以在管理控制台上设置系统属性。

标签: jakarta-ee properties configuration websphere jndi


【解决方案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. 定义Resource Environment Entry并将其绑定到新注册的提供者——Resource environment entry settings

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

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

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

至于存储凭证,有一个特殊的工具——J2C Authentication Alias,正如Gas 所指出的那样。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

      您可以通过控制台(环境 > 命名 > 命名空间绑定)将字符串属性存储在 JNDI 树中,然后通过 InitialContext 访问它们。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 2013-01-02
        • 2020-10-17
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多