获取罐子,耳朵和战争的版本,并在Weblogic服务器和Glassfish服务器中以编程方式读取它们

时间:2014-08-11 02:16:15

标签: glassfish weblogic manifest.mf

我的客户希望获得网络逻辑服务器/ glassfish服务器的所有部署模块(罐子,战争和耳朵)的版本。

客户需要一个UI,他们需要查看所有罐子的列表及其版本。他们将使用weblogic和glassfish服务器。

是否存在对罐子进行版本控制并对其进行监控的行业惯例?

方法我尝试过:

  1. 在创建jar时,我已经包含了Manifest.MF文件,其中包含Implementation-Version(密钥)和版本号(值)。

  2. 通过java weblogic部署apis,我可以获得已部署模块的名称列表(如ear,war等),但我仍然无法获取每个已部署模块的内容。

    < / LI>
  3. 同样,我必须编写用于阅读glassfish服务器的代码

1 个答案:

答案 0 :(得分:1)

您可以使用Java和JMX列出weblogic中的所有已部署应用和版本信息,如下所示:

private static final String RUNTIME_MBEAN_SERVER_JNDI_NAME 
   = "java:comp/env/jmx/runtime";
...
private static MBeanServer getMBeanServer() {
MBeanServer mBeanServer = null;

try {
    InitialContext initialContext = new InitialContext();
    mBeanServer = 
           (MBeanServer) initialContext.lookup(RUNTIME_MBEAN_SERVER_JNDI_NAME);
} catch (NamingException e) {
    LOGGER.error("Error connecting to the MBean server", e);
}

  return mBeanServer;
}

public static Map<String, String> getDeployedApplications() {
Map<String, String> deployedApplications = 
       new HashMap<String, String>();

try {
    MBeanServer mBeanServer = getMBeanServer();
    ObjectName domainConfiguration =
           (ObjectName) mBeanServer.getAttribute(
                  new ObjectName(RuntimeServiceMBean.OBJECT_NAME), 
                  "DomainConfiguration");
    ObjectName[] appDeployments = 
           (ObjectName[]) mBeanServer.getAttribute(
                  domainConfiguration, 
                  "AppDeployments");
    for (ObjectName appDeployment : appDeployments) {
        try {
            Object applicationName = 
                   mBeanServer.getAttribute(
                          appDeployment, 
                          "ApplicationName");
            Object versionIdentifier = 
                   mBeanServer.getAttribute(
                          appDeployment, 
                          "VersionIdentifier");
            if (versionIdentifier != null) {
                deployedApplications.put(
                       applicationName.toString(), 
                       versionIdentifier.toString());
            }
        } catch (Exception e) {
            LOGGER.error(String.format("Error fetching deploy info for '%s'", 
                   appDeployment), e);
        }
    }
  } catch (Exception e) {
    LOGGER.error("Error fetching deployed applications", e);
  }

   return Collections.unmodifiableMap(deployedApplications);
}

请参阅Oracle API了解应用程序运行时here

在JMX部署文档here

中查看更多属性

以上示例here