conf/jboss-service.xmlその10

Invoker関連。
Invokerっていろいろあるけど、ここでは「JMXを通じてMBeanを呼び出す」Invoker。引数invocationをMBeanServerに渡すinvokeメソッドを持っているが、MBeanのオペレーションとして持っているわけではなく、どのように利用されるかというと、、、

  • jboss:service=invoker,type=jrmp

JRMP/RMI経由でのアクセスを受け付けるInvoker。待ち受けポート(デフォルトは4444)やアドレスなどを指定してServerSocketFactoryを用意し、自分自身をJRMPInvokerProxyにラップしてorg.jboss.system.Registryにbindする。
利用する側はざっとみたところ
org.jboss.invocation.jrmp.server.JRMPProxyFactory(UserTransactionとか)

org.jboss.proxy.ejb.ProxyFactory(EJBのInvoker。standardjboss.xmlに記述されている)
くらいだけど、どちらも

ObjectName oname = new ObjectName(invokerMetaData.getInvokerMBean());
Invoker invoker = (Invoker) Registry.lookup(oname);

というようにorg.jboss.system.Registryを使ってJRMPInvokerProxyのインスタンスを引っこ抜いてそのまま使う。つまりRegistryに入っていることが前提でMBeanServerをすっ飛ばしている。

このRegistry、実態は単なるMapでJBossソースコード内のいたるところで便利使いされてるんだけど、どうなんだろう?MBeanServer経由しないで使われるMBeanって。まあdependsやライフサイクルとかで恩恵は受けてるからMBeanにする理由はあるんだろうけど。

  • jboss:service=invoker,type=local

ローカルアクセスを受け付けるInvoker。のようだけど使われている形跡なし。こちらもRegistryにbindしている

  • jboss:service=invoker,type=pooled

こちらは一転して、ServerSocketを開き、クライアント接続を待ち受けるInvokerサーバ。クライアントからinvocationオブジェクトを読み込んで、invokeする。コネクションプールの最大数はプロパティMaxPoolSizeで指定する*1


他にも「jboss:service=invoker,type=http」があり、HTTP経由でのアクセスを受け付ける。このMBeanはdeploy/http-invoker.sarで定義されている。

*1:ClientMaxPoolSizeは何に使いたいのか不明、、、