How to programmatically access custom workManager defined in standalone.xml
jboss7_newbie Oct 10, 2012 5:16 AMI have defined a custome workManager in standalone.xml as given below -
<subsystem xmlns="urn:jboss:domain:jca:1.1">
<archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
<bean-validation enabled="true"/>
<default-workmanager>
<short-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</short-running-threads>
<long-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</long-running-threads>
</default-workmanager>
<workmanager name="NewWorkManager">
<short-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</short-running-threads>
</workmanager>
<bootstrap-contexts>
<bootstrap-context name="NewBootStrapContext" workmanager="NewWorkManager"/>
</bootstrap-contexts>
<cached-connection-manager debug="true" error="false"/>
</subsystem>
The <bootstrap-context> is also included in the activemq resource adapter as in the post - https://community.jboss.org/thread/169380 it is mentioned to do so.
I can see the new customer workmanager from Jboss Admin conole and would like to access it programatically from my application via Spring.
This is the piece of code trying to that -
MBeanServer server = java.lang.management.ManagementFactory.getPlatformMBeanServer();
ObjectName on = new ObjectName("jboss.as:subsystem=jca,workmanager=NewWorkManager");
ObjectInstance instance = server.getObjectInstance(on);
But on running my application I get -
Caused by: javax.management.InstanceNotFoundException: JBAS011340: No MBean found with name jboss.as:subsystem=jca,workmanager=NewWorkManager
at org.jboss.as.jmx.model.ModelControllerMBeanHelper.createInstanceNotFoundException(ModelControllerMBeanHelper.java:398)
at org.jboss.as.jmx.model.ModelControllerMBeanHelper.getObjectInstance(ModelControllerMBeanHelper.java:291)
at org.jboss.as.jmx.model.ModelControllerMBeanServerPlugin.getObjectInstance(ModelControllerMBeanServerPlugin.java:122)
at org.jboss.as.jmx.PluggableMBeanServerImpl.getObjectInstance(PluggableMBeanServerImpl.java:217)
... 78 more
I have started Jconsole and I can see the object as well.I also tried listing the MBeans from my application and the output does not show it -
MBeanServer server = java.lang.management.ManagementFactory.getPlatformMBeanServer();
System.out.println("Got the MBeanServer - " + server);
ObjectName serviceRef = new ObjectName("*.*:*");
Set<ObjectName> mbeans = server.queryNames(serviceRef, null);
for (ObjectName on :mbeans)
{
System.out.println("\t ObjectName : " + on);
}
Output -
18:18:41,471 INFO [stdout] (MSC service thread 1-1) Got the MBeanServer - org.jboss.as.jmx.PluggableMBeanServerImpl@f8c570
18:18:41,471 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=Memory
18:18:41,471 INFO [stdout] (MSC service thread 1-1) ObjectName : jboss.jta:type=ObjectStore
18:18:41,471 INFO [stdout] (MSC service thread 1-1) ObjectName : jboss.modules:type=ModuleLoader,name=ModuleLoaderIntegration-7
18:18:41,472 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=Compilation
18:18:41,472 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=GarbageCollector,name=MarkSweepCompact
18:18:41,472 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=MemoryPool,name=Perm Gen
18:18:41,472 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=OperatingSystem
18:18:41,472 INFO [stdout] (MSC service thread 1-1) ObjectName : jboss.modules:type=ModuleLoader,name=ServiceModuleLoader-5
18:18:41,472 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=MemoryManager,name=CodeCacheManager
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=GarbageCollector,name=Copy
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=MemoryPool,name=Code Cache
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=Runtime
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=ClassLoading
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : org.apache.derby:type=Version,jar=derby.jar,system=c013800d-013a-4688-f518-00000e04d4d0
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=Threading
18:18:41,473 INFO [stdout] (MSC service thread 1-1) ObjectName : org.apache.derby:type=Management,system=c013800d-013a-4688-f518-00000e04d4d0
18:18:41,474 INFO [stdout] (MSC service thread 1-1) ObjectName : java.util.logging:type=Logging
18:18:41,474 INFO [stdout] (MSC service thread 1-1) ObjectName : org.apache.derby:type=JDBC,system=c013800d-013a-4688-f518-00000e04d4d0
18:18:41,474 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=MemoryPool,name=Eden Space
18:18:41,474 INFO [stdout] (MSC service thread 1-1) ObjectName : jboss.msc:type=container,name=jboss-as
18:18:41,474 INFO [stdout] (MSC service thread 1-1) ObjectName : jboss.ws:service=ServerConfig
18:18:41,474 INFO [stdout] (MSC service thread 1-1) ObjectName : com.sun.management:type=HotSpotDiagnostic
18:18:41,475 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=MemoryPool,name=Survivor Space
18:18:41,475 INFO [stdout] (MSC service thread 1-1) ObjectName : jboss.modules:type=ModuleLoader,name=LocalModuleLoader-3
18:18:41,475 INFO [stdout] (MSC service thread 1-1) ObjectName : java.lang:type=MemoryPool,name=Tenured Gen
Am I doing something wrong and is there a better way of accessing the custom workmanager.Please do let me know.