Websphereアプリケーションサーバー7.0(WAS7)とEnvironmentVaraiblesの読み取りに少し問題があります。
Tomcatを使用して、変数を次のように定義しました。
<Environment name="myVar" type="Java.lang.String" value="myVarOnServeur"
そして私はinitialContextのルックアップでそれを読みました:
Context ctx = new InitialContext();
String myVar = (String) ctx.lookup( "Java:comp/env/myVar" );
そしてそれは動作します!
しかし、Websphereを使用して、GUIで環境変数を定義しましたが、Javaコードでそれを読み取ることができません。NamingExceptionがあります。
(ソース: fullahead.org )
問題を解決するにはどうすればよいですか?
web.xml内で定義する
<env-entry>
<env-entry-name>varName</env-entry-name>
<env-entry-value>56</env-entry-value>
<env-entry-type>Java.lang.String</env-entry-type>
</env-entry>
javaで見る
Context envEntryContext = (Context) new InitialContext().lookup("Java:comp/env");
String mydata = (String)envEntryContext.lookup("varName");
WASでは、nameがキー、valueがプロパティ値である上記の設定に従います。私の例では、名前:テスト値:これはテスト値です。この値を設定した後、アプリケーションサーバーを再起動します。 Javaコード呼び出しSystem.getProperty( "TEST")で、testはプロパティの名前であり、値は次のように表示されます。
あなたは間違った場所を見ています。
[環境]-> [名前付け]-> [名前空間バインディング]-> [新規]で変数を追加する必要があります。
バインディングタイプ文字列、「バインディング識別子」、「名前空間の名前...」myVarを選択すると、次のようにして変数の値を取得できます。
Context ctx = new InitialContext();
String myVar = (String) ctx.lookup( "cell/persistent/myVar" );
独自の変数を定義および管理する必要がある場合は、[環境]-> [名前付け]-> [名前空間のバインディング]を確認してください。そこで、jndi名を文字列定数にバインドできます。 文字列バインディング設定 を参照してください
次のようなものをweb.xml
ファイルに入れることができます。このファイルは、アプリケーションのWEB-INF
ディレクトリにあるはずです。
<env-entry>
<env-entry-name>myVar</env-entry-name>
<env-entry-type>Java.lang.String</env-entry-type>
<env-entry-value>myVarOnServeur</env-entry-value>
</env-entry>
ちなみに、これは標準の構文であり、すべてのアプリケーションサーバーで機能するはずです。 WebSphere、JBoss、WebLogicで使用しています。例の場合とまったく同じようにクエリを実行できます。
Websphere 7.0-8.5
変数管理コンソールの設定---> Websphereアプリケーションサーバー-----> Your_sever_name ---> Javaおよびプロセス管理--->プロセス定義-> Java仮想マシン->カスタムプロパティ
Java System.getProperty( "Your_Variable")で値を取得
WebSphereのAdminOperations
MBean を介してこれらを解決できるはずです:
//sample code from WAS 7 Infocenter
private String expandVariable(String s) throws
javax.management.JMException {
com.ibm.websphere.management.AdminService as =
com.ibm.websphere.management.AdminServiceFactory.getAdminService();
String server = as.getProcessName();
String mBeanName = "*:*,type=AdminOperations,process=" + server;
Java.util.Set result = as.queryNames(
new javax.management.ObjectName(mBeanName) , null);
return (String) as.invoke((javax.management.ObjectName)
result.iterator().next(),
"expandVariable",
new Object[]{"${"+s+"}"},
new String[]{"Java.lang.String"});
}
WebSphere変数の作成、編集、および削除 を参照してください。
Javaアプリで使用できる変数をWebSphereで作成する方法について詳しく説明したいと思います。これを理解するために少し追加の調査を行う必要があったため、他の人を助けることができれば幸いです。
dev(またはint、prod、またはその他の値)の値を含む[〜#〜] env [〜#〜]という名前の変数をWebSphereで作成するとします。
この例では、値が「dev」のENVという名前の変数が作成されました。
次に、Javaアプリは、WebSphereでENV変数を使用するように構成する必要があります。以下のマークアップでは、Javaアプリには「Environment」という名前のクラスがあります。 "。このクラスはenvという名前の変数を作成します。System.getProperty(" ENV ")は、WebSphereから変数を取得する魔法です。このJavaコードは他のアプリケーションでも機能するはずです。 JBossやTomcatなどのサーバー。したがって、Javaコードを特定のプラットフォームに合わせてカスタマイズする必要はありません。
絶対に必要というわけではありませんが、envも返します。これはデモンストレーションのために行っているだけです。これにより、JSPページで変数を取得できるようになり、JSPページで変数を自分の目で確認して、これが期待どおりに機能することを検証できます。
package com.example.main;
public class Environment {
public String env;
public Environment() {
env = System.getProperty("ENV");
}
public String getEnvironment(){
return env;
}
}
JSPページのタグ内に、次のマークアップを追加して、Environmentクラスからenv変数を取得します。これにより、WebSphereからENV変数が取得されます。
<%@page import="com.sample.main.Environment"%>
<%
Environment foo = new Environment();
String env = foo.getEnvironment();
out.print("Environment : " + env;
%>
これで、アプリがWebSphereにデプロイされると、環境が表示されます。これにより、アプリケーションサーバーから変数を正常に取得できたことがわかります。