zhou050334
作者zhou050334·2012-01-28 11:05
系统工程师·蓝色快车

使用JMX获得WAS信息

字数 4781阅读 3539评论 3赞 2

基本上没什么可说的, 使用SOAP, 需要把ws_runtime.jar放到classpath中. 这个ws_runtime.jar可以搜索一下WAS6.1的安装目录, 有两个, 应该都能用.

Java代码:

            Properties adminProps = new Properties();
            adminProps.setProperty("type", AdminClient.CONNECTOR_TYPE_SOAP);
            adminProps.setProperty("host", "192.168.1.100");
            adminProps.setProperty("port", "8880");

            adminClient = AdminClientFactory.createAdminClient(adminProps);
            ObjectName objName = new ObjectName("WebSphere:name=JVM,process=server1,platform=proxy,node=test-e4dd24fa82Node02,j2eeType=JVM,J2EEServer=server1,version=6.1.0.0,type=JVM,mbeanIdentifier=JVM,cell=test-e4dd24fa82Node02Cell,spec=1.0");
            Object value = adminClient.getAttribute(objName, "freeMemory");
            System.out.println(value);

上面紫色的部分不是能通用的, 需要查询下自己的WAS Server.


运行结果:

2009-6-2 17:56:33 com.ibm.websphere.management.AdminClientFactory
警告: ADMC0046W
2009-6-2 17:56:33 com.ibm.ws.management.connector.interop.JMXClassLoader
警告: Could not find tmx4jTransform.jar in null/etc/tmx4jTransform.jar - Interoperability to older versions of WebSphere is disabled
2009-6-2 17:56:34 com.ibm.ws.ssl.config.SSLConfigManager
信息: ssl.disable.url.hostname.verification.CWPKI0027I
31406800

如果启用了安全(WAS6.1默认的), 会出现下面的错误:

2009-6-4 10:25:49 com.ibm.websphere.management.AdminClientFactory
警告: ADMC0046W
2009-6-4 10:25:50 com.ibm.ws.management.connector.interop.JMXClassLoader
警告: Could not find tmx4jTransform.jar in null/etc/tmx4jTransform.jar - Interoperability to older versions of WebSphere is disabled
2009-6-4 10:25:50 com.ibm.ws.ssl.config.SSLConfigManager
信息: ssl.disable.url.hostname.verification.CWPKI0027I
com.ibm.websphere.management.exception.ConnectorException: ADMC0016E: 系统无法创建 SOAP 连接器以连接到端口 8880 上的主机 192.168.1.100。

等等等等

如何判断安全已经启用了? 比较简单 , 如果WAS6.1 要求输入用户名和密码, 同时浏览器中查看控制台的协议是HTTPS, 那么就说明安全启用了 (默认的应该是启用的)

 


下面的步骤比较麻烦, 是WAS6.1特殊的. 因为需要WAS6.1的证书. 在WAS6.0里面, 这个步骤很简单, 默认的证书能直接用, 但是WAS6.1就不行, 默认的证书不能用, 必须生成自己的证书并配置到WAS6.1里面.

首先, 进入 <WAS_HOME>AppServer/bin, 运行ikeyman.bat文件, 进入证书配置工具:
 

点击添加:
 

选择类型JKS, 首先生成KeyStore. 目录设定为c:test , 名称是store.jks
 

点击 OK , 之后会询问密码: 这里要输入KeyStre的密码: (密码要记住! 后面会用到)
 

点击OK, 返回主界面. 下面列表中很多默认的证书, 没有用, Ctrl-A 全选, 然后点击右侧的DELETE, 都删掉:
 

删掉后, 创建自签署证书:
 

在弹出的界面中, 输入必填的信息. 基本上都是证书的标识, 可以填入自己的一些信息:
 
点击OK. 这时KeyStore就创建完毕了. 这里需要把它导出, 稍后创建TrustStore用:
 

点击右下角的Extract Certificate... , 导出证书. 这里命名为cert.arm, 放到c:test下面:
 

OK, 此时KeyStore就生成完毕了. 下面生成TrustStore. 再次点击New: (这次用的文件名是trust.jks , 同样放到了c:test下面, 同样要记住TrustStore的密码)

 

同样, 把下面没有用的证书删掉. 然后点击 Add:
 

在弹出的界面中选择刚刚导出的cert.arm文件:
 

这时会询问Label. 随便填点文本:
 

点击OK, TrustStore生成完毕了. 

这时 , 查看c:test 文件夹, 里面应该有三个文件 : store.jks (KeyStore), cert.arm (导出文件), trust.jks (TrustStore文件)

下面的工作就是让WAS6.1应用这些KeyStore和TrustStore.

登录WAS6.1控制台, 点击 Security - SSL certificate and key management - Key stores and certificates 选项:
 

点击 new :
 

在界面中输入KeyStore的名称(这里用testKeyStore), Path(刚刚创建的, c:teststore.jks), 密码 (创建的时候使用的密码, 这里用到了!!) 类型选择JKS:
 


一样的步骤, 加入TrustStore.jks:
 

这样, 自己生成的证书就导入到WAS中了. 下面要让WAS使用它. 点击证书配置项:
 
点击当前节点:
 
然后选择刚刚创建好的KeyStore和TrustStore, 然后点击"Get Certificate Alias", 获得别名.
 

之后, 点击OK 保存更改. 这时, WAS6.1的配置就完毕了. 重启WAS , 再重新登录控制台, 就可以在浏览器的证书信息中查看到刚才使用ikeyman生成证书时输入的一些信息了. 如果使用Firefox等浏览器, 可能还需要加入一个Exception, 因为这个证书是我们自己生成的, 不是Firefox认为"安全的"机构生成的, 所以会报告安全警告. 当Firefox询问的时候加入Exception, 忽略它就行了.

下面就是Java程序了. 把test文件夹拷贝到Java程序运行的机器上, 这里有两种方法.

第一种, 修改程序:

在创建adminClient前面加入下面的代码, 定义Keystore 和 TrustStore. 注意程序里面用到了上面生成KeyStore/TrustStore的口令!

            adminProps.setProperty(AdminClient.USERNAME, "websphere");
            adminProps.setProperty(AdminClient.PASSWORD, "websphere");
            adminProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
            adminProps.setProperty("javax.net.ssl.trustStore", "c:/test/trust.jks");
            adminProps.setProperty("javax.net.ssl.keyStore", "c:/test/store.jks");
            adminProps.setProperty("javax.net.ssl.trustStorePassword", "password for keystore");
            adminProps.setProperty("javax.net.ssl.keyStorePassword", "password for truststore");    

然后在文档(1) 中的程序就能正常运行了.

第二种, 导入生成的KeyStore.jks 到 Java程序运行的JRE中 , 就不用运行的时候指定了: 目标密匙口令, 即JDK/JRE中默认的, 如果没改过就是changeit; 源密匙口令即上面生成KeyStore的口令 (又一次用到了)
 

之后, 上面代码里面的青色的部分就可以忽略了. 注意运行Java程序的JRE/JDK, 应该指定为上面命令行导入目标的JDK/JRE, 即 -destkeystore 中的参数.

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论3 条评论

websphere1987websphere1987开发工程师zte
2013-04-12 19:54
默认的证书密码是多少?
guangsunguangsun系统工程师Sun
2012-03-11 15:03
TRUST.P12和KEY.P12都可以用来连接。无需自己创建KEYSTORE.
guangsunguangsun系统工程师Sun
2012-03-11 15:02
首先声明,默认的证书是可以用的,JMX连接当然可以用默认的证书
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广