JMX基本

  • 基本はここで

http://www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/MonitoringAndManagement/JMX/JMX1.html

  • MBean作る練習

http://neverbird.sourceforge.jp/cgi-bin/ja/hiki.cgi?%28JBoss%29JBoss%A4%C8JMX
JBossでは
StandardMBean→ServiceMBean
DynamicMBean(ModelMBean)→XMBean
かな

ServiceMBean*1じゃなくても*-service.xmlで自動デプロイできる!(SARDeployerがやってくれた)

First#start()が呼ばれたスタック:

First.start() line: 31
NativeMethodAccessorImpl.invoke0(Method, Object, Object) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object) line: 25
Method.invoke(Object, Object) line: 324
ReflectedDispatcher.invoke(Invocation) line: 141
Invocation.dispatch() line: 80
Invocation.invoke() line: 72
XMBean(AbstractMBeanInvoker).invoke(String, Object, String) line: 249
MBeanServerImpl.invoke(ObjectName, String, Object, String) line: 644
ServiceController$ServiceProxy.invoke(Object, Method, Object) line: 914
$Proxy0.start() line: not available
ServiceController.start(ObjectName) line: 418
GeneratedMethodAccessor10.invoke(Object, Object) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object) line: 25
Method.invoke(Object, Object) line: 324
ReflectedDispatcher.invoke(Invocation) line: 141
Invocation.dispatch() line: 80
Invocation.invoke() line: 72
XMBean(AbstractMBeanInvoker).invoke(String, Object, String) line: 249
MBeanServerImpl.invoke(ObjectName, String, Object, String) line: 644
MBeanProxyExt.invoke(Object, Method, Object) line: 177
$Proxy4.start(ObjectName) line: not available
SARDeployer.start(DeploymentInfo) line: 273
MainDeployer.start(DeploymentInfo) line: 964
MainDeployer.deploy(DeploymentInfo) line: 775
MainDeployer.deploy(URL) line: 738
NativeMethodAccessorImpl.invoke0(Method, Object, Object) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object) line: 25
Method.invoke(Object, Object) line: 324
ReflectedDispatcher.invoke(Invocation) line: 141
Invocation.dispatch() line: 80
NullInterceptor(AbstractInterceptor).invoke(Invocation) line: 121
Invocation.invoke() line: 74
ModelMBeanOperationInterceptor.invoke(Invocation) line: 127
Invocation.invoke() line: 74
XMBean(AbstractMBeanInvoker).invoke(String, Object, String) line: 249
MBeanServerImpl.invoke(ObjectName, String, Object, String) line: 644
MBeanProxyExt.invoke(Object, Method, Object) line: 177
$Proxy8.deploy(URL) line: not available
URLDeploymentScanner.deploy(URLDeploymentScanner$DeployedURL) line: 325
URLDeploymentScanner.scan() line: 501
AbstractDeploymentScanner$ScannerThread.doScan() line: 204
URLDeploymentScanner(AbstractDeploymentScanner).startService() line: 277
URLDeploymentScanner(ServiceMBeanSupport).jbossInternalStart() line: 272
URLDeploymentScanner(ServiceMBeanSupport).jbossInternalLifecycle(String) line: 222
GeneratedMethodAccessor2.invoke(Object, Object) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object) line: 25
Method.invoke(Object, Object) line: 324
ReflectedDispatcher.invoke(Invocation) line: 141
Invocation.dispatch() line: 80
Invocation.invoke() line: 72
XMBean(AbstractMBeanInvoker).invoke(String, Object, String) line: 249
MBeanServerImpl.invoke(ObjectName, String, Object, String) line: 644
ServiceController$ServiceProxy.invoke(Object, Method, Object) line: 897
$Proxy0.start() line: not available
ServiceController.start(ObjectName) line: 418
GeneratedMethodAccessor10.invoke(Object, Object) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object) line: 25
Method.invoke(Object, Object) line: 324
ReflectedDispatcher.invoke(Invocation) line: 141
Invocation.dispatch() line: 80
Invocation.invoke() line: 72
XMBean(AbstractMBeanInvoker).invoke(String, Object, String) line: 249
MBeanServerImpl.invoke(ObjectName, String, Object, String) line: 644
MBeanProxyExt.invoke(Object, Method, Object) line: 177
$Proxy4.start(ObjectName) line: not available
SARDeployer.start(DeploymentInfo) line: 273
MainDeployer.start(DeploymentInfo) line: 964
MainDeployer.deploy(DeploymentInfo) line: 775
MainDeployer.deploy(URL) line: 738
MainDeployer.deploy(String) line: 722
NativeMethodAccessorImpl.invoke0(Method, Object, Object) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object) line: 25
Method.invoke(Object, Object) line: 324
ReflectedDispatcher.invoke(Invocation) line: 141
Invocation.dispatch() line: 80
NullInterceptor(AbstractInterceptor).invoke(Invocation) line: 121
Invocation.invoke() line: 74
ModelMBeanOperationInterceptor.invoke(Invocation) line: 127
Invocation.invoke() line: 74
XMBean(AbstractMBeanInvoker).invoke(String, Object, String) line: 249
MBeanServerImpl.invoke(ObjectName, String, Object, String) line: 644
MBeanProxyExt.invoke(Object, Method, Object) line: 177
$Proxy5.deploy(String) line: not available
ServerImpl.doStart() line: 434
ServerImpl.start() line: 315
Main.boot(String) line: 195
Main$1.run() line: 463
Thread.run() line: 534

深い…XMBeanを経由してるのがミソか

SAR形式でのデプロイも確認

secondservice.sar - secondservice.jar
                  - META-INF - jboss-service.xml

同じくSARDeployerがデプロイしてくれる

  • XMBean

http://wiki.jboss.org/wiki/Wiki.jsp?pageXMBean

server/default/conf/xmdesc/に*-xmbean.xmlがある。XBean化されるサービス。

JBossBookの2.4.3.2 XMBean Examplesで練習

    • とりあえずServiceMBeanSupportをextendsしておく
    • *-service.xmlでxmbean-dd属性を使って、*-xmbean.xmlのパスを与える(META-INFの下とか)
    • 登録されると、MBeanの実装クラス名はorg.jboss.mx.modelmbean.XMBeanになってる

 → xmbean-ddはStandard MBeanをXMBean化する、ということ

org.jboss.system.ServiceCreator#install()で、サービスが作成される。
このとき"About to create XXX"とログが出る。xmbeandd属性が指定されていればXMBeanを生成する(XMBeanが元のクラスを包含するような感じ)
ただしXMBeanではない、Standard MBeanが登録される場合でもそのクラスをresourceとしたXMBeanがBasicMBeanRegistry#registerMBean()内でinvokerとして生成されている(MBeanのエントリは対象オブジェクトとinvokerがセットで登録される)XMBeanは内部でもinvokerとして活用されているようだ

*1:ServiceMBeanをeclipseのTypeHierarchyでみると実装クラスがいっぱい出てくる