CDI extension and distributed cache
viniciuscarvalho Aug 16, 2011 1:50 PMHi. I'm trying to get the CDI extensions (5.1.0-SNAPSHOT) to work as described no the docs. If I use the exact same config it does work, but I need a clustered cache, and hence I use this config instead:
@Infinispan("sample") @ClusteredCache @Produces public Configuration getDefault(){ GlobalConfiguration gc = GlobalConfiguration.getClusteredDefault(); gc.fluent().transport().clusterName("shared-cache-cluster").addProperty("configurationFile", "jgroups-tcp.xml"); Configuration c = new Configuration().fluent().clustering().mode(CacheMode.REPL_ASYNC).build(); c.setGlobalConfiguration(gc); return c; } //on the service: @Inject @ClusteredCache private Cache<String,String> cache; @POST @Path("/{key}") public void put(@PathParam(value="key") String key, @QueryParam("value") String value){ cache.put(key, value); }
That exact configuration snippet works if I decide to use a regular CDI produces method to create a CacheManager and then return a cache. So I believe it's valid.
But using the CDI extension, when I try to put something on the cache:
18:39:10,635 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/cache].[com.fb.cache.CacheApp]] (http-127.0.0.1-127.0.0.1-8080-1) Servlet.service() for servlet com.fb.cache.CacheApp threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.RuntimeException: Exception invoking method [getAdvancedCache] on object [org.infinispan.cdi.CacheManager@1aff9e8], using arguments [Manager Enabled alternatives: [] [] Registered contexts: [interface javax.enterprise.context.ConversationScoped, interface javax.enterprise.context.ApplicationScoped, interface javax.inject.Singleton, interface javax.enterprise.context.SessionScoped, interface javax.enterprise.context.RequestScoped, interface javax.enterprise.context.Dependent] Registered beans: 129 Specialized beans: 0 ] at org.jboss.resteasy.core.SynchronousDispatcher.unwrapException(SynchronousDispatcher.java:345) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:321) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:214) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:190) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:534) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:496) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.2.1.GA.jar:] at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [jbossweb-7.0.0.CR4.jar:7.0.0.Final] at java.lang.Thread.run(Thread.java:619) [:1.6.0_21] Caused by: java.lang.RuntimeException: Exception invoking method [getAdvancedCache] on object [org.infinispan.cdi.CacheManager@1aff9e8], using arguments [Manager Enabled alternatives: [] [] Registered contexts: [interface javax.enterprise.context.ConversationScoped, interface javax.enterprise.context.ApplicationScoped, interface javax.inject.Singleton, interface javax.enterprise.context.SessionScoped, interface javax.enterprise.context.RequestScoped, interface javax.enterprise.context.Dependent] Registered beans: 129 Specialized beans: 0 ] at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:547) [seam-solder-3.0.0.Final.jar:] at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:458) [seam-solder-3.0.0.Final.jar:] at org.jboss.seam.solder.reflection.annotated.InjectableMethod.invoke(InjectableMethod.java:187) [seam-solder-3.0.0.Final.jar:] at org.jboss.seam.solder.reflection.annotated.InjectableMethod.invoke(InjectableMethod.java:139) [seam-solder-3.0.0.Final.jar:] at org.jboss.seam.solder.bean.generic.GenericProducerMethod.getValue(GenericProducerMethod.java:77) [seam-solder-3.0.0.Final.jar:] at org.jboss.seam.solder.bean.generic.AbstractGenericProducerBean.create(AbstractGenericProducerBean.java:70) [seam-solder-3.0.0.Final.jar:] at org.jboss.seam.solder.bean.generic.GenericProducerMethod.create(GenericProducerMethod.java:42) [seam-solder-3.0.0.Final.jar:] at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:67) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:693) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:775) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:138) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:875) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:887) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1$1.proceed(ManagedBean.java:182) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:54) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:176) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:142) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:170) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.resteasy.cdi.JaxrsInjectionTarget.inject(JaxrsInjectionTarget.java:36) [resteasy-cdi-2.2.1.GA.jar:] at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:339) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:122) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at com.fb.cache.CacheEndpoint$Proxy$_$$_WeldClientProxy.put(CacheEndpoint$Proxy$_$$_WeldClientProxy.java) [classes:] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_21] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_21] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_21] at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_21] at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:255) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:220) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:209) [resteasy-jaxrs-2.2.1.GA.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:519) [resteasy-jaxrs-2.2.1.GA.jar:] ... 24 more Caused by: org.infinispan.config.ConfigurationException: Cache cannot use a clustered mode (REPL_ASYNC) mode and not define a transport! at org.infinispan.config.Configuration.assertValid(Configuration.java:1547) [infinispan-core-5.1.0-20110807.185553-4.jar:] at org.infinispan.manager.DefaultCacheManager.wireCache(DefaultCacheManager.java:606) [infinispan-core-5.1.0-20110807.185553-4.jar:] at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:568) [infinispan-core-5.1.0-20110807.185553-4.jar:] at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:453) [infinispan-core-5.1.0-20110807.185553-4.jar:] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_21] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_21] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_21] at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_21] at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:48) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:125) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26] at org.jboss.weld.proxies.CacheContainer$EmbeddedCacheManager$Lifecycle$Listenable$1328373168$Proxy$_$$_WeldClientProxy.getCache(CacheContainer$EmbeddedCacheManager$Lifecycle$Listenable$1328373168$Proxy$_$$_WeldClientProxy.java) [weld-core-1.1.2.AS7.jar:] at org.infinispan.cdi.CacheManager.getAdvancedCache(CacheManager.java:87) [infinispan-cdi-5.1.0-20110807.190812-1.jar:] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_21] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_21] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_21] at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_21] at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:535) [seam-solder-3.0.0.Final.jar:] ... 56 more
The error happens inside the CacheManager from CDI:
@Produces @ApplyScope public <K, V> AdvancedCache<K, V> getAdvancedCache(BeanManager beanManager) { final String name = infinispan.value(); Cache<K, V> cache; if (name.isEmpty()) { cache = getCacheContainer().getCache(); } else { cache = getCacheContainer().getCache(name); // -> Error is thrown here } cacheEventBridge.registerObservers( getQualifiers(beanManager, annotatedMember.getAnnotations()), cache );
I'm using JBoss 7, but I'm bundling the entire Infinispan core + libs inside + war file and the other ear file on another node.
Any ideas?
Regards