- 基本はここで
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で練習
→ 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として活用されているようだ