【问题标题】:Programmatically access Websphere Application Server and its resources以编程方式访问 Websphere Application Server 及其资源
【发布时间】:2011-07-15 05:01:50
【问题描述】:

这是我在 StackOverflow 上的第一个问题,所以请多多包涵。

我想达到什么目的?

我需要编写一个独立程序来访问 Websphere Application Server 的一个或多个特定实例并从中获取详细信息。就我的研究而言,有两种方法可以做到这一点。

  1. 适配器
  2. 连接器

我目前正在采用“连接器”方法以及 SOAP 连接器(因为它的防火墙友好性)

所以,我的代码应该是这样的......


// Initialize the AdminClient.
Properties adminProps = new Properties();

adminProps.setProperty("type", AdminClient.CONNECTOR_TYPE_SOAP );
adminProps.setProperty("host", "localhost");
adminProps.setProperty("port", "8880");
AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);

String query = "WebSphere:*";
//String query = "WebSphere:type=Server,*";
ObjectName queryName = new ObjectName(query);
Set s = adminClient.queryNames(queryName, null);
if (!s.isEmpty()) {
    iter = s.iterator();
    while (iter.hasNext()) {
        ObjectName nodeagent = (ObjectName) iter.next();
    System.out.println("*********************************************");
        System.out.println("KeyPropertyList: " + nodeagent.getKeyPropertyListString());
    }
}

通过这段代码,我可以获取该特定 WAS 实例(C:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01)上所有 MBean 的列表,并成功打印密钥- 属性列表。

现在我有一个 MBean 列表。接下来是什么? 链接:_http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.javadoc.doc/web/mbeanDocs/index.html

这是我的查询:

如何获取我感兴趣的特定 MBean 的实例并获取所有相关属性?

例如:

AppManagement appM = AppManagementProxy.getJMXProxyForClient (adminClient);
System.out.println(appM.listApplications(null, null, null));

将列出该特定 WAS 实例上的所有应用程序

[查询、SamplesGallery、ivtApp、DefaultApplication、PlantsByWebSphere]

我有兴趣了解有关已安装应用程序的更多信息,比如它们是否已启动并正在运行?如果是这样,IP 地址、内部版本号、是否正在维护等,(仅引用它们作为示例)如果我可以获得 MBean 可以提供的应用程序的所有可能详细信息,那么它将完成我的任务(部分)

上述只是一个示例,我想从 MBean 中获得更多信息。因此,请提供一个解决方案/示例代码,以帮助我从 WAS 实例必须提供的任何 MBean 中获取信息。 (使用 JMX)

其他细节: IBM WebSphere Application Server,7.0.0.0(基本安装)

提前致谢, 阿杰

【问题讨论】:

    标签: websphere jmx


    【解决方案1】:

    您可以通过查询所有服务器并检查应用程序是否在每个服务器上运行,然后找到从每个服务器获取主机来间接获得 IP 地址。我不确定内部版本号是否可用。 “维护中”是什么意思?

    您可以从 Application 和 J2EEApplication (JSR 88) MBean 获得更多信息。因此,ObjectName("WebSphere:type=Application,name=myapp") 是特定于 WebSphere 的,或者 ObjectName("WebSphere:type=J2EEApplication,name=myapp")。

    您可以使用 ConfigServiceProxy 并查询 getid("/DefaultApplication:myapp/") 来获取配置信息。您可以查看 PROFILE_HOME/config/cells/CELL/applications/APP.ear/deployments/APP/deployment.xml 以查看配置中可用的信息类型。您可以将其与 WAS_HOME/web/configDocs/ 中的类型信息相匹配,从 appdeployment 包开始。

    【讨论】:

    • 感谢您的快速回复。 “维护中”是指应用程序可能在维护期间关闭。因此,当它关闭时,它可能无法从中获取数据。无论如何,ConfigServiceProxy 可以用于 ConfigService 类型的 MBean(如果我错了,请纠正我)。我在哪里可以找到访问 MBean 的更全面的方法列表,以及我们是否有像这里提到的代理(AppManagementProxy、ConfigServiceProxy),还是我们必须依赖繁琐且容易出错的 AdminClient.invoke(ObjectName,operation,params,签名);方法?
    • 是的,ConfigServiceProxy 允许访问 ConfigService,这是一个用于导航所有 WAS 配置的 MBean。我不确定是否有完整的代理列表。我会说编写自己的代码是个好主意,这样可以避免 MBean 交互使您的主要逻辑混乱。
    • 再次感谢您如此快速的回复。这是我第一次做的事情。那么,您能指导我学习编写自己的代理的教程吗?是不是我们最后要写的类似于 Helper 的东西?像 MBeanHelper.getServerMbeans 之类的东西? (我们编写的MBeanHelper类)
    • 只需编写一个具有 AdminClient 实例变量的辅助类,然后根据需要添加委托给 AdminClient.invoke(ObjectName, op, params, sig) 的方法。无论如何,这就是预先提供的代理所做的一切。
    【解决方案2】:

    试试

    String query = "WebSphere:*,mbeanIdentifier=<XXX>";
    

    mbean的标识符在哪里

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 2014-11-30
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2013-06-07
      • 2015-08-15
      • 2019-06-15
      相关资源
      最近更新 更多