我在使用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
如何解决问题?
答案 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)
在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"});
}
答案 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或任何其他值)。
在此示例中,创建了一个名为ENV且变量值为“ dev”的变量。
接下来,将需要将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,就应该显示环境,这就是我知道能够从应用程序服务器成功获取变量的方式。
答案 8 :(得分:-3)
我没有看到任何说明可以通过ctx.lookup(“java:comp / env / ...”)读取这些条目的内容;