Websphere应用程序级环境变量

时间:2013-04-17 08:47:03

标签: java java-ee websphere

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

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

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

或者,是否有其他方法可以在同一台服务器上运行多个应用程序

1 个答案:

答案 0 :(得分:7)

问题1

  

是否可以为两者设置不同的DocStorageLocation   应用

我认为不可能。 Websphere的环境变量意味着服务器本身使用。变量只有三个可能的范围,即服务器,集群和节点。

例如, server1,node1 范围内的 ORACLE_JDBC_DRIVER_PATH 环境变量可用于 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文件的网址资源

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

例如,在server1上具有值 file:///server1/environment.properties 的JNDI名称 url / environmentJndiName ,以及file:/// server2 / environment。 server2上的属性。

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

在部署描述符web.xml中,ressource的引用将是相同的。您不必在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>

然后使用此ressource读取属性。

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的ressource引用 url / environment 绑定到websphere服务器上为此ressource设置的JNDI名称 url / environmentJndiName 。使用websphere修改ibm-web-bnd.xml文件,使用glassfish修改sun-web.xml文件等。

<强>感谢

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