问题 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 已经有一段时间了——即使我更喜欢其他解决方案。谢谢,@+。