4

是否可以在 websphere的应用程序级别设置环境变量?

Websphere 服务器可以托管多个应用程序。在服务器级别应用的任何环境变量都适用于该服务器上的所有应用程序。是否可以创建仅适用于单个应用程序的变量?

例如:假设我们有一个SpreadsheetApp和一个DocsApp在同一台服务器上运行。它们都共享一些可以通过名为DocStorageLocation的环境变量配置的通用代码。是否可以为两个应用程序设置不同的DocStorageLocation

或者,是否有另一种方法可以配置在同一台服务器上运行的多个应用程序

4

1 回答 1

7

问题 1

是否可以为两个应用程序设置不同的 DocStorageLocation?

我不认为这是可能的。Websphere 的环境变量旨在供服务器本身使用。一个变量只有三个可能的作用域,分别是 Server、Cluster 和 Node。

例如,server1 上的ORACLE_JDBC_DRIVER_PATH环境变量,node1范围可用于 node1 上的 JDBC 提供程序( classPath = ${ORACLE_JDBC_DRIVER_PATH}/ojdbc14.jar)。

问题是:“为什么我不能只为我的应用程序设置不同的值”?但我的猜测是,只要启动了服务器、集群和节点,为已部署的应用程序覆盖这个值是没有意义的。

虽然我觉得不可能,但我还是尝试了。但是我没有设法覆盖为 websphere 服务器设置的环境变量。

问题2

或者,是否有另一种配置在同一服务器上运行的多个应用程序的方法?

环境入口

您可以将环境条目添加到您的 web.xml 部署描述符,这是您可以查找的变量。

<env-entry>
    <env-entry-name>DocStorageLocation</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>C:/DocStorage</env-entry-value>
</env-entry>

然后测试,在java类中查找这个变量:

//TEST
Object l_test = null;
try {
    Context l_ctx = new InitialContext();
    l_test = l_ctx.lookup("java:comp/env/DocStorageLocation");
} catch (NamingException e1) {
    // TODO
    e1.printStackTrace();
}

.properties 文件的 URL 资源

您可以创建 URL 资源。它将链接到本地​​主机或任​​何服务器上设置的 .properties 文件,因此可以根据环境将每个属性设置为不同的值。

例如,JNDI 名称url/environmentJndiName在 server1 上的值为file:///server1/environment.properties ,在 server2 上的值为 file:///server2/environment.properties。

然后在服务器 1 上,您可以在 environment.properties 文件中设置docStorageLocation=value1 ,在 server2 上设置docStorageLocation=value2

在您的部署描述符 web.xml 中,资源的引用将是相同的。您不必在 java 源代码中更改此引用:

   <resource-ref>
         <res-ref-name>url/environment</res-ref-name>
         <res-type>java.net.URL</res-type>
         <res-auth>Application</res-auth>
         <res-sharing-scope>Shareable</res-sharing-scope>
   </resource-ref>

然后使用此资源读取属性。

try {
    Context l_ctx = new InitialContext();
    URL l_url = (URL) l_ctx.lookup("java:comp/env/url/environment");
    // New properties
    Properties l_properties = new Properties();
    // Load properties
    this.loadProps(l_properties, l_url.getPath());

} catch (NamingException e1) {
    // TODO
    e1.printStackTrace();
} catch (IOException e) {
    // TODO Bloc catch auto-généré
    e.printStackTrace();
}

    ...

private void loadProps(final Properties p_properties, final String p_fileLocation)
    throws IOException
{
    // Open stream
    BufferedInputStream l_is = new BufferedInputStream(
            new FileInputStream(
                    new File(p_fileLocation)));

    p_properties.load(l_is);
    // Close stream
    l_is.close();
}

您需要将 web.xml 的资源引用url/环境绑定到 websphere 服务器上为此资源设置的 JNDI 名称url/environmentJndiName 。用websphere修改ibm-web-bnd.xml文件,用glassfish修改sun-web.xml文件等。

谢谢

如果有更好的解决方案,或者没有回答问题,请告诉我。我仍在学习,但我使用 websphere 已经有一段时间了——即使我更喜欢其他解决方案。谢谢,@+。

于 2013-04-17T13:45:14.930 回答