2011-08-08 27 views
8

Websphereアプリケーションサーバー7.0(WAS7)と環境変数の読み取りには少し問題があります。 TomcatでWebsphereでJavaの環境変数を読み取る

、私は

<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を持っています。

http://fullahead.org/work/stackoverflow/was-environment-variables.png

は、どのように私は私の問題を解決するために行うことができますか?

答えて

-3

これらのエントリはctx.lookup( "java:comp/env/...")で読むことができるとは限りません。これは、標準の構文で、すべてのアプリケーション・サーバー間で動作するはずですちなみに

<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> 

+7

これは価値あるコメントですが、ほとんど答えはありません。 –

+0

@Nicola Musatti私は同意しない。それは、OPが恐らく間違った木全体を吠えることを示している。 – EJP

+5

元の問題には何の解決策もなく、少なくとも2つの解決策が提案されていますが、そのうちの1つがその問題で提案されたアプローチを必要とする場合、私は同意することができます。繰り返しますが、これは答えではありません。 –

4

あなたは、アプリケーションのWEB-INFディレクトリにある必要があり、あなたのweb.xmlファイルに次のようなものを置くことができます。 WebSphere、JBoss、WebLogicで使用しています。あなたの例のように正確に問い合わせることができます。

//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"}); 
} 

を参照してください。Creating, editing and deleting WebSphere variables

3

は、WebSphereのAdminOperationsMBeanを経由してこれらを解決することができるはずです。

+2

私はWebsphereの特定のコードを望んでいません。私のWebアプリケーションはTomCatとWebsphereで動作する必要があります。 – lookfire

4

自分の変数を定義して管理することが必要な場合は、Environment-> Naming-> Name space bindingを見てください。そこにjndi名をString定数にバインドすることができます。あなたは間違った場所を見ているのjava

Context envEntryContext = (Context) new InitialContext().lookup("java:comp/env"); 
String mydata = (String)envEntryContext.lookup("varName"); 
+0

これとalzobairの言い回しの違いは何ですか? - ibmに注意してください。なぜ、xmlの1行でtomcatが何をするのかを100ステップ実行したいのですか? –

+0

私が言及した方法は、文字列値をjndiエントリにバインドする方法です。 Alzobairの言及は、管理コンソールで設定できるより複雑なオブジェクトに対応し、単一の文字列を過剰に使用することができます。 – svachon

+0

@Kalpeshソニハ!彼らはそれを読むと思いますか? –

6

を参照してください。

Environment-> Naming-> Name space bindings-> Newに変数を追加する必要があります。 - 8

Context ctx = new InitialContext(); 
String myVar = (String) ctx.lookup("cell/persistent/myVar"); 
+0

これは私にとって、すべてのコンテナではないにしてもほとんどで動作する最も正しい答えです – Kirby

3

で見ることが

<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> 

のweb.xml内を定義するために String binding settings

3

のWebsphere 7.0:あなたはバインディングString型を選択した場合

、 "バインディング識別子" と "名前の名前空間で..." myVarを、あなたがして、変数の値を取得することができます。5 管理コンソール---> Websphereアプリケーションサーバー----- Your_sever_name ---> Javaおよびプロセス管理--->プロセス定義 - > Java仮想マシン - >カスタムプロパティ

Javaで値 はSystem.getProperty(「Your_Variable」)

4

On WebSphere follow this settings

での取得は、名前があなたのキーと値は、あなたのプロパティの値です上記の設定に従いました。私の例で私は名前を使用しました:テスト値:これはテスト値です。この値を設定した後、アプリケーションサーバーを再起動します。あなたのJavaコードの呼び出しSystem.getProperty( "TEST")ここでtestはあなたのプロパティの名前であり、値は表示されます

関連する問題