This doesn't work as I was hoping. I have added the below to JBOSS3.2.5/server/all/deploy/jmx-invoker-adaptor-server.sar/META-INF/jboss-service.xml:
<!-- HASingletonController to run the above MBean as a singleton -->
<mbean code="org.jboss.ha.singleton.HASingletonController"
name="jboss.hasingleton:service=RMIAdaptorSingletonController">
<depends>jboss:service=DefaultPartition</depends>
<depends>jboss.jmx:type=adaptor,name=Invoker</depends>
<attribute name="TargetName">jboss.jmx:type=adaptor,name=Invoker</attribute>
<attribute name="TargetStartMethod">start</attribute>
<attribute name="TargetStopMethod">stop</attribute>
</mbean>
</server>
With this configuration I can start JBoss cluster nodes with no errors.
In a Servlet I am using the RMIAdaptor like so:
// get the InitialContext and lookup the RMIAdaptor
Context context = new InitialContext();
RMIAdaptor rmiAdaptor = (RMIAdaptor) context.lookup("jmx/rmi/RMIAdaptor");
// if we have an RMIAdaptor and the AllUserInfo MBean is registered with it then we can invoke operations
if ((rmiAdaptor != null) && (rmiAdaptor.isRegistered(new ObjectName("grover.mbean:service=AllUserInfo"))))
{
// find out if the user is already in the table or not
Boolean isUserInTable = (Boolean) rmiAdaptor.invoke(new ObjectName("grover.mbean:service=AllUserInfo"),
"isUserInTable",
new Object[]{loginId},
new String[]{"java.lang.String"});
// if the user is in the table already then get their info
if (isUserInTable.booleanValue())
{
// get the pre-existing user's information
userInfo = (UserInfo) rmiAdaptor.invoke(new ObjectName("grover.mbean:service=AllUserInfo"),
"getUserInfo",
new Object[]{loginId},
new String[]{"java.lang.String"});
}
else
{
// create and populate a new user information object
userInfo = new UserInfo();
userInfo.setLoginTime(Calendar.getInstance());
userInfo.setUserId(loginId);
userInfo.setUserType(0); // 0 = HIM, 1 = WEB
}
// add this user's info to the MBean
rmiAdaptor.invoke(new ObjectName("grover.mbean:service=AllUserInfo"),
"addUserInfo",
new Object[]{userInfo},
new String[]{"com.hsp.grover.util.UserInfo"});
}
else
{
// log the error
m_logger.error("Unable to find an RMIAdaptor with a registered AllUserInfo singleton MBean");
// throw an exception
throw new ServletException("Unable to find an RMIAdaptor with a registered AllUserInfo singleton MBean");
}
On the master node this works fine, but when I run the Servlet from a second node I get an error because the RMIAdaptor does not have the singleton MBean registered. So the same exact problem as before.
I thought that this might be rectified by moving the entire jmx-invoker-adaptor-server.sar into the deploy-hasingleton directory. On the first (master) node this was no trouble, but on the second node I got loads of errors when I started JBoss, for example:
17:44:41,961 INFO [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=file:/export/jboss-3.2.5/se
rver/all/tmp/deploy/tmp448web-console.war/
17:44:42,165 INFO [STDOUT] java.lang.NullPointerException
17:44:42,168 INFO [STDOUT] at EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap.hash(ConcurrentReaderHashMap.java:298)
17:44:42,169 INFO [STDOUT] at EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap.get(ConcurrentReaderHashMap.java:410)
17:44:42,169 INFO [STDOUT] at org.jboss.system.Registry.lookup(Registry.java:51)
17:44:42,169 INFO [STDOUT] at org.jboss.console.plugins.helpers.AbstractPluginWrapper.findPluginManager(AbstractPluginWrapper.java:252)
17:44:42,169 INFO [STDOUT] at org.jboss.console.plugins.helpers.AbstractPluginWrapper.init(AbstractPluginWrapper.java:98)
17:44:42,169 INFO [STDOUT] at org.jboss.console.plugins.helpers.ServletPluginHelper.init(ServletPluginHelper.java:61)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1019)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3991)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.StandardContext.start(StandardContext.java:4335)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
17:44:42,170 INFO [STDOUT] at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
17:44:42,171 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17:44:42,171 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
17:44:42,171 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,171 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,171 INFO [STDOUT] at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
17:44:42,171 INFO [STDOUT] at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:109)
17:44:42,172 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,172 INFO [STDOUT] at org.apache.catalina.core.StandardContext.init(StandardContext.java:5412)
17:44:42,172 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17:44:42,172 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
17:44:42,172 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,172 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,172 INFO [STDOUT] at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
17:44:42,173 INFO [STDOUT] at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:109)
17:44:42,173 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,173 INFO [STDOUT] at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeployInternal(TomcatDeployer.java:286)
17:44:42,173 INFO [STDOUT] at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeploy(TomcatDeployer.java:70)
17:44:42,173 INFO [STDOUT] at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:306)
17:44:42,173 INFO [STDOUT] at org.jboss.web.WebModule.startModule(WebModule.java:62)
17:44:42,174 INFO [STDOUT] at org.jboss.web.WebModule.startService(WebModule.java:40)
17:44:42,174 INFO [STDOUT] at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:271)
17:44:42,174 INFO [STDOUT] at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:221)
17:44:42,174 INFO [STDOUT] at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
17:44:42,174 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,174 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,174 INFO [STDOUT] at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
17:44:42,175 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
17:44:42,175 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
17:44:42,175 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
17:44:42,175 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
17:44:42,175 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,175 INFO [STDOUT] at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:837)
17:44:42,176 INFO [STDOUT] at $Proxy17.start(Unknown Source)
17:44:42,176 INFO [STDOUT] at org.jboss.system.ServiceController.start(ServiceController.java:367)
17:44:42,176 INFO [STDOUT] at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
17:44:42,176 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,176 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,176 INFO [STDOUT] at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
17:44:42,176 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
17:44:42,177 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
17:44:42,177 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
17:44:42,177 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
17:44:42,177 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,177 INFO [STDOUT] at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
17:44:42,177 INFO [STDOUT] at $Proxy40.start(Unknown Source)
17:44:42,178 INFO [STDOUT] at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:313)
17:44:42,178 INFO [STDOUT] at org.jboss.deployment.MainDeployer.start(MainDeployer.java:836)
17:44:42,178 INFO [STDOUT] at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:645)
17:44:42,178 INFO [STDOUT] at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:608)
17:44:42,178 INFO [STDOUT] at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
17:44:42,178 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,178 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,179 INFO [STDOUT] at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
17:44:42,180 INFO [STDOUT] at $Proxy7.deploy(Unknown Source)
17:44:42,180 INFO [STDOUT] at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:304)
17:44:42,180 INFO [STDOUT] at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:478)
17:44:42,180 INFO [STDOUT] at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:201)
17:44:42,180 INFO [STDOUT] at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:274)
17:44:42,180 INFO [STDOUT] at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:271)
17:44:42,181 INFO [STDOUT] at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:221)
17:44:42,181 INFO [STDOUT] at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
17:44:42,181 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,181 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,181 INFO [STDOUT] at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
17:44:42,181 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
17:44:42,182 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
17:44:42,182 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
17:44:42,182 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
17:44:42,182 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,182 INFO [STDOUT] at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:837)
17:44:42,182 INFO [STDOUT] at $Proxy0.start(Unknown Source)
17:44:42,182 INFO [STDOUT] at org.jboss.system.ServiceController.start(ServiceController.java:367)
17:44:42,183 INFO [STDOUT] at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
17:44:42,183 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,183 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,183 INFO [STDOUT] at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
17:44:42,183 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
17:44:42,183 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
17:44:42,184 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
17:44:42,184 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
17:44:42,184 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,184 INFO [STDOUT] at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
17:44:42,184 INFO [STDOUT] at $Proxy4.start(Unknown Source)
17:44:42,184 INFO [STDOUT] at org.jboss.deployment.SARDeployer.start(SARDeployer.java:251)
17:44:42,184 INFO [STDOUT] at org.jboss.deployment.MainDeployer.start(MainDeployer.java:836)
17:44:42,185 INFO [STDOUT] at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:645)
17:44:42,185 INFO [STDOUT] at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:608)
17:44:42,185 INFO [STDOUT] at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:592)
17:44:42,185 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17:44:42,185 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
17:44:42,185 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
17:44:42,185 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
17:44:42,186 INFO [STDOUT] at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
17:44:42,186 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
17:44:42,186 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
17:44:42,186 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
17:44:42,186 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
17:44:42,186 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
17:44:42,187 INFO [STDOUT] at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
17:44:42,187 INFO [STDOUT] at $Proxy5.deploy(Unknown Source)
17:44:42,187 INFO [STDOUT] at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:407)
17:44:42,187 INFO [STDOUT] at org.jboss.system.server.ServerImpl.start(ServerImpl.java:311)
17:44:42,187 INFO [STDOUT] at org.jboss.Main.boot(Main.java:145)
17:44:42,187 INFO [STDOUT] at org.jboss.Main$1.run(Main.java:399)
17:44:42,187 INFO [STDOUT] at java.lang.Thread.run(Thread.java:534)
17:44:42,191 ERROR [Engine] StandardContext[/web-console]Servlet /web-console threw load() exception javax.servlet.ServletException
at org.jboss.console.plugins.helpers.ServletPluginHelper.init(ServletPluginHelper.java:66)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1019)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3991)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4335)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:109)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
at org.apache.catalina.core.StandardContext.init(StandardContext.java:5412)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:109)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeployInternal(TomcatDeployer.java:286)
at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeploy(TomcatDeployer.java:70)
at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:306)
at org.jboss.web.WebModule.startModule(WebModule.java:62)
at org.jboss.web.WebModule.startService(WebModule.java:40)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:271)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:221)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:61)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:53)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:185)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:473)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:837)
at $Proxy17.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:367)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.server.ReflectedDispatcher.dispatch(ReflectedDispatcher.java:60)
etc...
Any other ideas/suggestions ?
--James