質問1
両方のアプリケーションで異なる DocStorageLocation を設定することは可能ですか?
私はそれが可能だとは思わない。Websphere の環境変数は、サーバー自体によって使用されることを意図しています。変数には、サーバー、クラスター、およびノードの 3 つのスコープしかありません。
たとえば、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を設定し、サーバー 2 で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にバインドする必要があります。ibm-web-bnd.xml ファイルを websphere で、sun-web.xml ファイルを glassfish で、などに変更します。
ありがとう
より良い解決策がある場合、または質問に対する回答がない場合は、お知らせください。私はまだ学んでいますが、他のソリューションを好む場合でも、しばらく websphere を使用しています。@+さん、ありがとうございます。