2015-10-06 41 views
3

方案 - EAR安装在Websphere应用程序服务器上,并在超过30个JVM上运行。我只想在一个JVM上创建一个属性,并且想在我的java代码中读取它。 如何通过WAS控制台创建JVM级别属性并使用Java读取它。JAVA中的JVM属性

+0

对于30个实例,我建议您检查[Apache Zookeeper](http://zookeeper.apache.org/)。 –

+1

您可以使用JNDI替代..通过在群集级别创建它将可用于30多个JVM ... – Nayeem

回答

2

创建自定义属性格式

在WAS(服务器)或部署管理器管理控制台,导航到 服务器> ServerTypes>的WebSphere应用服务器对自定义属性 并点击JVM要在其中创建

服务器基础结构(部分)> Java和进程管理>进程定义

附加属性(部分)> Java虚拟机>对自定义属性

单击“新建”按钮添加新的自定义属性。

enter image description here

点击“应用”。 直接点击'保存'到主配置。

在独立或单节点环境中,您需要停止并重新启动服务器才能使更改生效。

在您定义部署管理器中的属性的集群环境中,您可能需要执行“完全重新同步”并重新启动集群。


  • 通过Java代码

访问在WebSphere Application Server或您定义的属性节点中定义自定义属性后,您可以像你将一个系统访问其值属性如下:

String custProperty = System.getProperty("wbe.home"); 

您可以同样使用在JSP页面的小脚本是这样的:

<% 
String custProperty = System.getProperty("wbe.home"); 
if (custProperty .equalsIgnoreCase("home")) { 
%> 

如果你想自动添加自定义属性30 JVM的 您可以使用Jython脚本的手动任务。您可以根据您的要求进行修改。

server = sys.argv[0] 
property = sys.argv[1] 
value = sys.argv[2] 
if (len(sys.argv) == 4): 
    descr = sys.argv[3] 
else : 
    descr = None 

# Convert a list of items separated by linefeeds into an array 
def getListArray(l): 
    return l.splitlines() 

# Obtain the "simple" server name 
def getServerName(s): 
    return AdminConfig.showAttribute(s, 'name') 

# Add common attr list to specified Server's JVM 
def addPropertiesToServer(s): 
    jvm = AdminConfig.list('JavaVirtualMachine', s) 

    # Look for existing property so we can replace it (by removing it first) 
    currentProps = getListArray(AdminConfig.list("Property", jvm)) 
    for prop in currentProps: 
     if property == AdminConfig.showAttribute(prop, "name"): 
      print "Removing existing property from Server %s" % getServerName(s) 
      AdminConfig.remove(prop) 

    # Store new property in 'systemProperties' object 
    print "Adding property to Server %s" % getServerName(s) 
    AdminConfig.modify(jvm,[['systemProperties',attr]]) 

# Construct list with new property name and value 
attr = [] 

if (descr is None): 
    print "Adding property %s=%s" % (property,value) 
    attr.append([['name',property],['value',value]]) 
else: 
    print "Adding property %s=%s,%s" % (property,value,descr) 
    attr.append([['name',property],['value',value],['description',descr]]) 

# Locate all Application Servers if server is 'all' 
if (server == 'all'): 
    servers = AdminConfig.list('Server') 
    for aServer in getListArray(servers): 
     type = AdminConfig.showAttribute(aServer,'serverType') 
     if (type == 'APPLICATION_SERVER'): 
      addPropertiesToServer(aServer) 

# TODO: support comma-separated list of servers 

else: 
    # Locate specified Server and its JVM 
    server = AdminConfig.getid('/Server:'+server+'/') 
    addPropertiesToServer(server) 

# Save changes 
if (AdminConfig.hasChanges()): 
    AdminConfig.save() 
+0

如果您必须将此应用于ND中的30台服务器,则应该对其进行编写脚本。 – Alasdair

0

您可以创建在群集级别在WebSphere变量上您的服务器从运行:

Environment --> WebSphere Variable --> <SelectYour_cluster_From_Dropdown> --> New 

说,如果变量名是“MY.CUSTOM.PROPERTY”那么你就可以通过编写以下代码在您的java代码中访问它:

String myCustomProperty = (String) System.getenv("MY.CUSTOM.PROPERTY"); 

希望这适用于您。