Deploying JBoss Cache as MBean in microcontainer
amit.bhayani Jan 15, 2009 12:38 AMThis is in continuation to
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=148625
Since this question is related to MC I thought I should post here.
I can start the JBoss cache programmatically by using
Configuration config = new Configuration(); config.setTransactionManagerLookupClass( JBossTransactionManagerLookup.class.getName() ); config.setIsolationLevel(IsolationLevel.REPEATABLE_READ); config.setNodeLockingScheme(Configuration.NodeLockingScheme.MVCC); config.setCacheMode(Configuration.CacheMode.LOCAL); CacheFactory factory = new DefaultCacheFactory(); Cache cache = factory.createCache(config); return cache;
However this way if user needs to make any changes he/she needs to re-compile the code.
I tried deploying the Cache as MBean using JMX annotation
<bean name="MobicentsCacheConfig" class="org.jboss.cache.config.Configuration"> <!-- Externally injected services --> <property name="runtimeConfig"> <bean name="ExampleCacheRuntimeConfig" class="org.jboss.cache.config.RuntimeConfig"> <property name="transactionManager"> <inject bean="TransactionManager" property="transactionManager" /> </property> <property name="muxChannelFactory"> <inject bean="JChannelFactory" /> </property> </bean> </property> <!-- Node locking level : SERIALIZABLE REPEATABLE_READ (default) READ_COMMITTED READ_UNCOMMITTED NONE --> <property name="isolationLevel">REPEATABLE_READ</property> <!-- Valid modes are LOCAL REPL_ASYNC REPL_SYNC --> <property name="cacheMode">LOCAL</property> <!-- Max number of milliseconds to wait for a lock acquisition --> <property name="lockAcquisitionTimeout">15000</property> <property name="exposeManagementStatistics">true</property> <!-- Specific eviction policy configurations. This is LRU --> <property name="evictionConfig"> <bean name="ExampleEvictionConfig" class="org.jboss.cache.config.EvictionConfig"> <property name="defaultEvictionPolicyClass"> org.jboss.cache.eviction.LRUPolicy </property> <property name="wakeupIntervalSeconds">5</property> <property name="evictionRegionConfigs"> <list> <bean name="ExampleDefaultEvictionRegionConfig" class="org.jboss.cache.config.EvictionRegionConfig"> <property name="regionName"> /_default_ </property> <property name="evictionPolicyConfig"> <bean name="ExampleDefaultLRUConfig" class="org.jboss.cache.eviction.LRUConfiguration"> <property name="maxNodes"> 5000 </property> <property name="timeToLiveSeconds"> 1000 </property> </bean> </property> </bean> </list> </property> </bean> </property> </bean> <bean name="Mobicents.JAINSLEE.RuntimeTreeCache" class="org.jboss.cache.Cache"> <constructor factoryMethod="createCache"> <factory bean="DefaultCacheFactory" /> <parameter class="org.jboss.cache.config.Configuration"> <inject bean="MobicentsCacheConfig" /> </parameter> <parameter class="boolean">false</parameter> </constructor> </bean> <bean name="Mobicents.JAINSLEE.RuntimeTreeCacheMBean" class="org.jboss.cache.jmx.CacheJmxWrapper"> <annotation> @org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.cache:service=RuntimeTreeCache",exposedInterface=org.jboss.cache.jmx.CacheJmxWrapperMBean.class, registerDirectly=true) </annotation> <constructor> <parameter class="org.jboss.cache.Cache"> <inject bean="Mobicents.JAINSLEE.RuntimeTreeCache" /> </parameter> </constructor> </bean>
However I get
2009-01-15 09:32:05,653 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (main) Error installing to PreInstall: name=Mobicents.JAINSLEE.TransactionManagerMBean state=Real
java.lang.RuntimeException: Error creating annotation for
@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="slee:name=TransactionManagerMBean",exposedInterface=org.mobicents.slee.runtime.transaction.TransactionManagerImpl.class,
registerDirectly=true)
at org.jboss.beans.metadata.plugins.AbstractAnnotationMetaData.getAnnotationInstance(AbstractAnnotationMetaData.java:128)
at org.jboss.kernel.plugins.dependency.KernelScopeInfo.updateAnnotations(KernelScopeInfo.java:319)
at org.jboss.kernel.plugins.dependency.KernelScopeInfo.updateClassAnnotations(KernelScopeInfo.java:151)
.............
..............
...............
Caused by: java.lang.RuntimeException: Error getting root expression
@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="slee:name=TransactionManagerMBean",exposedInterface=org.mobicents.slee.runtime.transaction.TransactionManagerImpl.class,
registerDirectly=true)
at org.jboss.annotation.factory.AnnotationCreator.getRootExpr(AnnotationCreator.java:361)
Is there some mistake in how the annotation is used?
Thanks