向左走,向右走。。。
永远不回头
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 16,comments - 17,trackbacks - 0
<
2005年2月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
网 名:
非飞
性 别:
男
籍 贯:
广西桂林
Q Q:
8038052
MSN:
towerhe@hotmail.com
Email:
towerhe@gmail.com
爱 好:
爱好广泛,不在此处做详细说明。
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(14)
Flash相关技术(1)
JAVA 相关技术(6)
JavaScript相关技术(2)
生活琐事(3)
软件工程(2)
随笔档案
(16)
2005年5月 (2)
2005年4月 (4)
2005年3月 (6)
2005年2月 (2)
2005年1月 (2)
文章分类
(2)
JMX(2)
文章档案
(3)
2005年4月 (1)
2005年2月 (2)
收藏夹
(3)
JAVA(3)
友情链接
杨彦
陶文
文章
JMX相关文章
搜索
最新评论
1. re: 回实验室上班
兄台,好久不更新, 这就是你的不对了!我等着你写博客啊
--YZ
2. re: JMX设计模式之MBeanWriteToLog模式
good
--hellochen
3. re: Hibernate中的继承映射
错别字也太多了点吧
--无可奈何花落去
4. re: 程序员应该怎么过生活???
程序员很苦,但有个老姐就很幸福了!哈哈.....
--dwj
5. re: JMX设计模式之MBeanWriteToLog模式
好!
--王琼
6. re: JavaScript读取服务器端的xml
很好,谢谢~
--lovelywcm
7. re: 各层共享使用PO的代价
我的观点,大部分实体对象只要vo、po重用就可以了,只有vo、po差距较大的地方才分开,这样就做到了简洁性和可扩展性的良好折中。
--CowNew开源团队
8. re: 各层共享使用PO的代价
都TMD的人云亦云,很少有说PO变动之后,VO不变动的,既然两个都要动,何不只动一个?
--TMD
9. re: 程序员应该怎么过生活???
我很按时睡觉的都是 晚上1:00
--smilerain
10. re: NIO中Selector的工作原理
sorry, 我说的是SelectionKey.interestOps
--zhangwei
阅读排行榜
1. NIO中Selector的工作原理 (17351)
2. 通过mx4j实现JMXConnectorServer和JMXConnector(5682)
3. JavaScript读取服务器端的xml(4702)
4. Hibernate中的继承映射(4585)
5. 使用JavaScript来实现页面间的参数传递(4086)
6. Linux下JNI调用(3340)
7. 用了一下flash的反编译(2693)
8. 设计模式精解 [读书笔记](2623)
9. JMX设计模式之MBeanWriteToLog模式(2450)
10. 各层共享使用PO的代价(2439)
11. 组织团队开发项目的方式(2295)
12. JMX设计模式之MBeanForAppConfig模式(2217)
13. 程序员应该怎么过生活???(2106)
14. 看《难兄难弟》有感要说呀!(1948)
15. 一天的工作终于结束了。。。(1552)
16. 回实验室上班(620)
评论排行榜
1. NIO中Selector的工作原理 (3)
2. 使用JavaScript来实现页面间的参数传递(3)
3. 程序员应该怎么过生活???(3)
4. 各层共享使用PO的代价(2)
5. JMX设计模式之MBeanWriteToLog模式(2)
6. Hibernate中的继承映射(1)
7. 回实验室上班(1)
8. JavaScript读取服务器端的xml(1)
9. 用了一下flash的反编译(1)
10. Linux下JNI调用(0)
通过mx4j实现JMXConnectorServer和JMXConnector
看了两天文档,总算对JMX有了一个整体的认识。发现使用mx4j实现JMX还是相当的轻松的。MBeans可以使用mx4j-tools中的 Xdoclet偷一下懒,让它自动的生成MBeans和Descriptions,ant有相应的支持,还是比较方便的,对于MBean接口的实现,自己写了。
对于如何产生和注册MBeans,mx4j提供了一个相当方便的工具,为什么说相当方便,是因为它真的实在是太方便了。通过写一个xml配置文件可以完成所有的工作。比起M-LET确实是强了不少。下面就是一个在MBean Server产生注册一个NamingService、JMXConnectorServer和一个自写的MBean的配置文件。
<?
xml version="1.0" encoding="UTF-8"
?>
<
configuration
port
="9999"
>
<
startup
>
<
create
classname
="mx4j.tools.naming.NamingService"
objectname
="naming:type=rmiregistry"
>
<
arg
type
="int"
>
1099
</
arg
>
</
create
>
<
call
operation
="start"
objectname
="naming:type=rmiregistry"
/>
<
object
objectid
="rmi"
>
<
call
classname
="javax.management.remote.JMXConnectorServerFactory"
method
="newJMXConnectorServer"
>
<
arg
type
="javax.management.remote.JMXServiceURL"
>
<
new
classname
="javax.management.remote.JMXServiceURL"
>
<
arg
type
="string"
>
service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx
</
arg
>
</
new
>
</
arg
>
<
arg
type
="java.util.Map"
/>
<
arg
type
="javax.management.MBeanServer"
/>
</
call
>
</
object
>
<
register
objectname
="connectors:type=rmi,protocol=jrmp"
>
<
arg
type
="object"
refobjectid
="rmi"
/>
</
register
>
<
call
method
="start"
refobjectid
="rmi"
/>
<
create
classname
="nsmp.examples.mbeans.rmi.MyRemoteServiceObject"
objectname
="services:type=my-remote"
/>
</
startup
>
<
shutdown
>
<
call
operation
="stop"
objectname
="services:type=my-remote"
/>
<
call
method
="stop"
refobjectid
="rmi"
/>
<
call
operation
="stop"
objectname
="naming:type=rmiregistry"
/>
<
unregister
objectname
="services:type=my-remote"
/>
<
unregister
objectname
="connectors:type=rmi,protocol=jrmp"
/>
<
unregister
objectname
="naming:type=rmiregistry"
/>
</
shutdown
>
</
configuration
>
java代码:
package nsmp.agent;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
import java.net.Socket;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import mx4j.tools.config.ConfigurationLoader;
import nsmp.util.NsmpGlobals;
/**/
/*
*
* @version 1.0
* @author tower
*
* TODO write the comment of this type
*/
public
class
NsmpServer
{
public
void
startup() throws Exception
{
MBeanServer server
=
MBeanServerFactory.newMBeanServer();
ConfigurationLoader loader
=
new
ConfigurationLoader();
server.registerMBean(loader, ObjectName.getInstance(
"
config:service=loader
"
));
Reader reader
=
new
BufferedReader(
new
FileReader(NsmpGlobals.NSMP_HOME
+
"
/conf/config.xml
"
));
loader.startup(reader);
reader.close();
System.
out
.println(
"
Start the nsmp server successfully!
"
);
}
public
void
shutdown() throws Exception
{
String shutdownCommand
=
"
shutdown
"
;
Socket socket
=
new
Socket(
"
127.0.0.1
"
,
9999
);
socket.getOutputStream().write(shutdownCommand.getBytes());
socket.close();
}
}
startup方法调用配置文件的startup部分完成创建和注册,shutdown方法调用配置文件的shutdown部分释放相应的资源。通过调用 startup方法就可以起动MBeanServer提供服务了。对于shutdown开始搞了我半天startup后 ConfigurationLoader都没有创建一个侦听端口来接收shutdown命令,看了看mx4j的源码发现 ConfigurationLoader也没有发现什么特殊地方。捉摸半天终于发现了自己放了一个愚笨的错误,eclipse是用普通用户权限开的,没有办法创建侦听,改成root后一切ok。
接下就随便写了一个JMXConnector,代码:
/**/
/*
* Copyright (C) The MX4J Contributors.
* All rights reserved.
*
* This software is distributed under the terms of the MX4J License version 1.0.
* See the terms of the MX4J License in the documentation provided with this software.
*/
package nsmp.examples.mbeans.rmi;
import java.util.Map;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
/**/
/*
*
* @version $Revision: 1.3 $
*/
public
class
Client
{
public
static
void
main(String[] args) throws Exception
{
JMXServiceURL address
=
new
JMXServiceURL(
"
service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx
"
);
Map creationEnv
=
null
;
JMXConnector connector
=
JMXConnectorFactory.newJMXConnector(address, creationEnv);
Map connectionEnv
=
null
;
connector.connect(connectionEnv);
MBeanServerConnection serverConnection
=
connector.getMBeanServerConnection();
ObjectName name
=
ObjectName.getInstance(
"
services:type=my-remote
"
);
MBeanInfo mbInfo
=
serverConnection.getMBeanInfo(name);
MBeanOperationInfo[] operationInfo
=
mbInfo.getOperations();
for
(
int
i
=
0
; i
<
operationInfo.length; i
++
)
{
System.
out
.println(operationInfo[i].getName());
}
serverConnection.invoke(name,
"
sayHello
"
,
new
Object[]
{
"
Tower He
"
}
,
new
String[]
{
"
java.lang.String
"
}
);
}
}
JMXConnector是通过获取一个MBeanServerConnection来实现远程调用的,运行了一下一切顺利通过。
下载:
MX4JExample.rar
posted on 2005-02-05 19:07
非飞
阅读(5682)
评论(0)
编辑
收藏
所属分类:
JAVA 相关技术
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
JMX设计模式之MBeanWriteToLog模式
JMX设计模式之MBeanForAppConfig模式
NIO中Selector的工作原理
Linux下JNI调用
Hibernate中的继承映射
通过mx4j实现JMXConnectorServer和JMXConnector