我的客户希望获得网络逻辑服务器/ glassfish服务器的所有部署模块(罐子,战争和耳朵)的版本。
客户需要一个UI,他们需要查看所有罐子的列表及其版本。他们将使用weblogic和glassfish服务器。
是否存在对罐子进行版本控制并对其进行监控的行业惯例?
方法我尝试过:
在创建jar时,我已经包含了Manifest.MF文件,其中包含Implementation-Version(密钥)和版本号(值)。
通过java weblogic部署apis,我可以获得已部署模块的名称列表(如ear,war等),但我仍然无法获取每个已部署模块的内容。
< / LI>同样,我必须编写用于阅读glassfish服务器的代码
答案 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