使用Websphere在Java中读取环境变量

时间:2011-08-08 09:16:45

标签: java websphere

我在使用Websphere应用服务器7.0(WAS7)和阅读环境变量时遇到了一些问题。

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

如何解决问题?

9 个答案:

答案 0 :(得分:8)

定义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");

答案 1 :(得分: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一起使用。它可以像您在示例中那样完全查询。

答案 2 :(得分:4)

如果您想要定义和管理自己的变量,请查看Environment-&gt; Naming-&gt;名称空间绑定。您可以将jndi名称绑定到String常量。见String binding settings

答案 3 :(得分:4)

你正在寻找错误的地方。

您应该在Environment-&gt; Naming-&gt; Name space bindings-&gt; New中添加变量。

如果选择Binding type String,“Binding identifier”和“Name in namespace ...”myVar,您可以通过以下方式获取变量的值:

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

答案 4 :(得分:4)

On WebSphere follow this settings

在WAS上按照上面的设置,其中name是您的密钥,value是您的属性值。在我的例子中,我使用Name:Test Value:这是测试值。设置此值后,重新启动应用程序服务器。在您的Java代码上调用System.getProperty(&#34; TEST&#34;),其中test是您的属性的名称,值将显示

答案 5 :(得分:3)

您应该能够通过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"});
}

请参阅Creating, editing and deleting WebSphere variables

答案 6 :(得分:3)

Websphere 7.0 - 8.5

设置变量 管理控制台---&gt; Websphere应用程序服务器-----&gt; Your_sever_name ---&gt; Java和流程管理---&gt;流程定义 - &gt; Java虚拟机 - &gt;自定义属性

在Java中获取价值 System.getProperty( “Your_Variable”)

答案 7 :(得分:1)

我想详细说明如何在WebSphere中创建一个Java应用程序可以使用的变量,希望对其他人有所帮助,因为我不得不做一些额外的研究来弄清楚这一点。

假设您要在WebSphere中创建一个名为 ENV 的变量,该变量包含一个 dev 值(或int或prod或任何其他值)。

  1. 在WebSphere管理控制台的左侧面板中,选择服务器> 服务器类型> WebSphere应用程序服务器
  2. 选择包含应用程序的应用程序服务器。
  3. 展开 Java和流程管理,然后选择流程定义
  4. 选择 Java虚拟机
  5. 选择自定义属性
  6. 选择新建
  7. 创建变量的名称和值,然后选择确定
  8. 选择保存
  9. Restart the application server,以使此更改生效。

在此示例中,创建了一个名为ENV且变量值为“ dev”的变量。

enter image description here

接下来,将需要将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,就应该显示环境,这就是我知道能够从应用程序服务器成功获取变量的方式。

enter image description here

答案 8 :(得分:-3)

我没有看到任何说明可以通过ctx.lookup(“java:comp / env / ...”)读取这些条目的内容;