公司项目上需要写一个监控websphere的插件,马上开始找资料,半天下来还是看的迷迷糊糊的,我X,IBM的东西真TM的难弄,哎,难弄归难弄,还是需要做下去的,网上的资料大部分都是时间比较长的,下面自己写一个自己在这一过程中碰到的问题。
首先,下载搭建websphere的实际环境,这里就不一一写了,非常简单,在网上一搜一大堆,安装完之后,我们先远程用jconsole连接websphere,websphere里面需要的配置如下:
服务器——》应用服务器——》server1——》java和进程管理——》进程定义——》java虚拟机,通用JVM参数里面填入:
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099
中间不要有空格。
还有初始的堆栈需要设置下,大家根据自己的情况自己设置。
然后需要设置JDK的环境,默认的JDK是不带IBM连接包的,只有到安装了websphere上的机器上copy下来,
这里网上有个bat文件,大家可以按文件里的内容copy包的内容。用搜索功能来找到websphere机器上的这几个包。
set JAVA_HOME="D:\jdk1.6"
set WAS6.1_JARS="C:\Documents and Settings\Administrator\桌面\lib"
set BOOTJARS=%WAS6.1_JARS%\ibmorbapi.jar
set BOOTJARS=%BOOTJARS%;%WAS6.1_JARS%\ibmorb.jar
set BOOTJARS=%BOOTJARS%;%WAS6.1_JARS%\ibmcfw.jar
set CLASSPATH=%WAS6.1_JARS%\com.ibm.ws.admin.client_6.1.0.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\lib\tools.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\lib\jconsole.jar
%JAVA_HOME%\bin\jconsole -J-Xbootclasspath/p:%BOOTJARS% -J-Djava.class.path=%CLASSPATH%
大家把它复制到bat文件里,根据情况修改里面这个代码里的内容(其实也没什么就是一些路径)。大家也可以先把ws_runtime.jar这个包copy下来,呆会要用到。
最后就可以用jconsole来连接websphere了。
service:jmx:iiop://your host ip:port/jndi/JMXConnector
OK,连接成功。
如果你不想用IBM的包连接,用sun自带的包连接的URL为:
service:jmx:iiop://<host>/jndi/corbaname:iiop:<host>:<port>/WsnAdminNameService#JMXConnector
下面我们需要用程序连接到websphere,IBM提供给了我们接口和方法,这里有二点,第一点没有开启SOAP安全机制的,这种就好办多了,
直接把com.ibm.ws.admin.client_6.1.0.jar这个包加到工程里面。
AdminClinet ac = null;
java.util.Properties props = new java.util.Properties();
props.setProperty(AdminClient.CONNECTOR_TYPE,AdminClient.CONNECTOR_TYPE_SOAP);
props.setProperty(AdminClient.CONNECTOR_HOST,IpAddr);
props.setProperty(AdminClient.CONNECTOR_PORT,Port);
ac = AdminClient.createAdminClient(props);
ObjectName objName = new ObjectName("WebSphere:name=JVM,process=server1,platform=proxy,node=WWWF6897B0C501Node02,j2eeType=JVM,J2EEServer=server1,version=6.1.0.3,type=JVM,mbeanIdentifier=JVM,cell=WWW-F6897B0C501Node02Cell,spec=1.0");
ac.getAttribute(objName,"freeMemory");
这样就可以取到数了,非常的简单,但前提是需要把 安全性——启用管理安全性的选项给关掉,很明显,企业方面是不可能把这个项安全认证关掉的。
如果上面的程序直接运行在启用安全机制的机器上会出现如下错误:
com.ibm.websphere.management.exception.ConnectorException: ADMC0053E: 启用 SOAP 连接器安全性时,系统无法创建连接到端口 8880 上的主机 192.168.133.195 的 SOAP 连接器。
at com.ibm.websphere.management.AdminClientFactory.createAdminClient(AdminClientFactory.java:476)
at check_websphere.CreateConnect(check_websphere.java:90)
at check_websphere.main(check_websphere.java:27)
下面就来说启用安全认证后,我们的程序如何连接到远程websphere,
首先,需要制作和导入安全证书,这里我不就写了,网上有非常多的教程,还是贴个地址出来,大家按照这样做就行了。
http://hi.baidu.com/lff0305/item/10e2664262a3a4f5dd0f6c64
这里到后面制作完成之后,激活SSL证书我也不知道他这样做能不能连接上,我是后来又参考了另外一个证书导入的方法,
http://verisign.itrus.com.cn/html/fuwuyuzhichi/fuwuqizhengshuanzhuangpeizhizhinan/414.html
这样应该就可以了,然后在程序中添加如下代码:
adminProps.setProperty(AdminClient.USERNAME, "jbns");
adminProps.setProperty(AdminClient.PASSWORD, "jbns");
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", "jbns");
adminProps.setProperty("javax.net.ssl.keyStorePassword", "jbns");
OK,这样就可以运行上面的程序了。
如果运行还有错误,错误为:
setting up default SSLSocketFactory
SSLSocketFactory instantiation failed: java.lang.ClassNotFoundException: com.ibm.websphere.ssl.protocol.SSLSocketFactory
这是因为jre的包里面没有
com.ibm.websphere.ssl.protocol.SSLSocketFactory 这个类。
这就要用到上面已经复制好了的那个包了,ws_runtime.jar。把它也加到工程中来。
在加上
Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
这二句,
我感觉加不加好像一样勒,把那个包加进来之后就可以取数了,但是这个包里面木有这个类呐,其它好童鞋知道了顺便说下,我就不去追踪拉,嘿嘿。
到这里程序远程获取websphere性能数据环境就OK拉,剩下的就是大家畅心的编出自己想拿到数据的代码了。
顺便贴个websphere可以获取的性能数据:
转载于:https://blog.51cto.com/thgenius/977556