2011-08-08 40 views
8

我在Websphere應用服務器7.0(WAS7)和Environment Varaibles的閱讀中遇到了一些問題。使用Websphere閱讀Java中的環境變量

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

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

我該怎麼做才能解決我的問題?

回答

-3

我沒有看到任何說那些條目可以通過ctx.lookup(「java:comp/env/...」)讀取;

+7

這是一個值得評論的內容,但幾乎沒有答案。 –

+0

@Nicola Musatti我不同意。它顯示OP可能完全吠叫錯誤的樹。 – EJP

+5

我可以同意,如果最初的問題沒有任何解決方案,但至少有兩種解決方案已經提出,其中之一涉及問題中提出的方法。再次,這不是一個答案。 –

4

你可以把類似的東西在你的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結合使用。它可以像您在示例中一樣進行查詢。

3

你應該能夠通過WebSphere的AdminOperationsMBean解決這些:

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

+2

我不想要Websphere的特定代碼。我的Web應用程序必須在TomCat和Websphere上工作。 – lookfire

4

如果您想要定義和管理自己的變量,請查看Environment-> Naming-> Name space bindings。你可以綁定jndi的名字到String常量那裏。看到String binding settings

+0

那麼這與alzobair提到的有什麼區別呢! - 請注意ibm,爲什麼你要我做100個步驟來完成tomcat在1行xml中所做的工作? –

+0

我提到的方法是一種將字符串值綁定到jndi條目的方法。 Alzobair的提及爲您提供了更多複雜對象的功能,這些對象可以通過管理控制檯進行配置,對於單個字符串來說是過度殺傷性的。 – svachon

+0

@KalpeshSoni哈!你認爲他們會讀嗎? – 2016-05-12 20:56:13

6

定義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"); 
+0

這對我來說是最正確的答案,可以在大多數情況下工作,如果不是所有的包裝 – Kirby

3

您正在尋找在錯誤的地方。

您應該在Environment-> Naming-> Name space bindings-> New中添加變量。 - 8

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

的Websphere 7.0:

如果選擇綁定類型的字符串, 「綁定標識符」 和 「名稱命名空間......」 myVar的,你可以得到變量的值。5

設置變量 管理控制檯---> WebSphere應用程序服務器-----> Your_sever_name ---> Java和進程管理 - >進程定義 - > Java虛擬機 - >自定義屬性在Java中 System.getProperty( 「Your_Variable」)

獲得價值

4

On WebSphere follow this settings

上就是按照上面的設置,其中name是你的鑰匙和價值是你的屬性值。在我的例子中,我使用名稱:測試值:這是測試值。設置此值後,重新啓動應用程序服務器。在您的Java代碼中調用System.getProperty(「TEST」),其中test是您的屬性的名稱,並且值將顯示