Я пытаюсь настроить простой кэш infinispan в автономной конфигурации wildfly. xml и использовать его в приложении java ee (ear with war и ejb-jar), но я получаю исключение:
Caused by: java.lang.UnsupportedOperationException: ISPN000376: Interceptor stack is not supported in simple cache
at org.infinispan.core:ispn-10.1@10.1.3.Final//org.infinispan.interceptors.EmptyAsyncInterceptorChain.invokeAsync(EmptyAsyncInterceptorChain.java:74)
at org.infinispan.core:ispn-10.1@10.1.3.Final//org.infinispan.functional.impl.AbstractFunctionalMap.invokeAsync(AbstractFunctionalMap.java:127)
at org.infinispan.core:ispn-10.1@10.1.3.Final//org.infinispan.functional.impl.ReadWriteMapImpl.eval(ReadWriteMapImpl.java:56)
at org.infinispan.jcache:ispn-10.1@10.1.3.Final//org.infinispan.jcache.embedded.JCache.get(JCache.java:191)
at org.infinispan.jcache:ispn-10.1@10.1.3.Final//org.infinispan.jcache.annotation.AbstractCacheResultInterceptor.cacheResult(AbstractCacheResultInterceptor.java:62)
at org.infinispan.jcache:ispn-10.1@10.1.3.Final//org.infinispan.jcache.annotation.InjectedCacheResultInterceptor.cacheResult(InjectedCacheResultInterceptor.java:33)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:73)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.interceptor.proxy.WeldInvocationContextImpl.invokeNext(WeldInvocationContextImpl.java:92)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.interceptor.proxy.WeldInvocationContextImpl.proceed(WeldInvocationContextImpl.java:124)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.bean.InterceptorImpl.intercept(InterceptorImpl.java:105)
at org.jboss.as.weld.ejb@18.0.1.Final//org.jboss.as.weld.ejb.DelegatingInterceptorInvocationContext.proceed(DelegatingInterceptorInvocationContext.java:82)
at org.jboss.as.weld.ejb@18.0.1.Final//org.jboss.as.weld.interceptors.EjbComponentInterceptorSupport.delegateInterception(EjbComponentInterceptorSupport.java:60)
at org.jboss.as.weld.common@18.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:77)
at org.jboss.as.weld.common@18.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:89)
at org.jboss.as.weld.common@18.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:102)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.jpa@18.0.1.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:237)
... 103 more
Кроме того, когда я запустил его, первый раз кеш работал, но конфигурация выселения (я настроил максимум 3 объекта в кеше) не была применена, и после перезапуска / повторного развертывания я начал получать это исключение.
Wildfly 18.0.1.Final Infinispan 10.1.3.Final (я скачал модули wildp ispn и скопировал их в папку модулей со слиянием)
standalone.xml configuration:
<server xmlns="urn:jboss:domain:10.0">
<extensions>
<extension module="org.infinispan.extension:ispn-10.1"/>
......
<subsystem xmlns="urn:infinispan:server:core:10.1">
<cache-container name="blog" default-cache="default-cache" module="org.infinispan.extension:ispn-10.1">
<local-cache name="default-cache" simple-cache="true">
<memory>
<object size="1000" strategy="REMOVE"/>
</memory>
</local-cache>
<local-cache name="posts" simple-cache="true">
<memory>
<object size="3" strategy="REMOVE"/>
</memory>
</local-cache>
</cache-container>
</subsystem>
jboss-deploy-structure. xml:
<jboss-deployment-structure>
<deployment>
<module-alias name="deployment.magic-blog" />
<dependencies>
<module name="org.infinispan.cdi.embedded" slot="ispn-10.1" export="true" services="export" />
<module name="org.infinispan.jcache" slot="ispn-10.1" export="true" services="export" />
<module name="javax.cache.api" slot="ispn-10.1" export="true"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
Конфигурация менеджера и кеша:
package com.magicvalleyworks.magicblog.service.config;
import org.infinispan.Cache;
import org.infinispan.manager.EmbeddedCacheManager;
import javax.annotation.Resource;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Produces;
public class CacheConfig {
@Produces
@Dependent
@Resource(lookup = "java:comp/env/container/blog")
private EmbeddedCacheManager blogCacheManager;
@Produces
@Dependent
@Resource(lookup = "java:comp/env/cache/blog/posts")
private Cache<Object, Object> postsCache;
}
Использование кеша через аннотацию jcache:
@Stateless(name = "BlogPostBean")
@Local(value = ILocalBlogPostBean.class)
public class BlogPostBean implements ILocalBlogPostBean {
private static final Logger logger = LoggerFactory.getLogger(BlogPostBean.class);
@Inject
private BlogPostsMockStore blogPostsMockStore;
@CacheResult(cacheName = "posts")
@Override
public BlogPost getBlogPost(Integer id) {
logger.info(String.format("!!!!!!!!!!!!!!!!**********Getting data #%d from mock**********!!!!!!!!!!!!!!!!", id));
BlogPost blogPost = blogPostsMockStore.getBlogPost(id);
return blogPost;
}
}
bean. xml:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all">
<interceptors>
<class>org.infinispan.jcache.annotation.InjectedCacheResultInterceptor</class>
</interceptors>
</beans>
ejb-jar. xml:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<module-name>magic-blog-service</module-name>
<enterprise-beans>
<session>
<ejb-name>BlogPostBean</ejb-name>
<resource-ref>
<res-ref-name>container/blog</res-ref-name>
<lookup-name>java:jboss/datagrid-infinispan/container/blog</lookup-name>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>cache/blog/posts</resource-env-ref-name>
<lookup-name>java:jboss/datagrid-infinispan/container/blog/cache/posts</lookup-name>
</resource-env-ref>
</session>
</enterprise-beans>
</ejb-jar>
Я также попробовал ту же конфигурацию (кроме версии ispn) с infinispan 9.4, но получил еще одно исключение:
Caused by: java.lang.NullPointerException
at org.infinispan.core:ispn-9.4@9.4.17.Final//org.infinispan.functional.impl.AbstractFunctionalMap.invokeAsync(AbstractFunctionalMap.java:127)
at org.infinispan.core:ispn-9.4@9.4.17.Final//org.infinispan.functional.impl.ReadWriteMapImpl.eval(ReadWriteMapImpl.java:56)
at org.infinispan.jcache:ispn-9.4@9.4.17.Final//org.infinispan.jcache.embedded.JCache.get(JCache.java:186)
at org.infinispan.jcache:ispn-9.4@9.4.17.Final//org.infinispan.jcache.annotation.AbstractCacheResultInterceptor.cacheResult(AbstractCacheResultInterceptor.java:62)
at org.infinispan.jcache:ispn-9.4@9.4.17.Final//org.infinispan.jcache.annotation.InjectedCacheResultInterceptor.cacheResult(InjectedCacheResultInterceptor.java:33)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:73)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.interceptor.proxy.WeldInvocationContextImpl.invokeNext(WeldInvocationContextImpl.java:92)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.interceptor.proxy.WeldInvocationContextImpl.proceed(WeldInvocationContextImpl.java:124)
at org.jboss.weld.core@3.1.2.Final//org.jboss.weld.bean.InterceptorImpl.intercept(InterceptorImpl.java:105)
at org.jboss.as.weld.ejb@18.0.1.Final//org.jboss.as.weld.ejb.DelegatingInterceptorInvocationContext.proceed(DelegatingInterceptorInvocationContext.java:82)
at org.jboss.as.weld.ejb@18.0.1.Final//org.jboss.as.weld.interceptors.EjbComponentInterceptorSupport.delegateInterception(EjbComponentInterceptorSupport.java:60)
at org.jboss.as.weld.common@18.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:77)
at org.jboss.as.weld.common@18.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:89)
at org.jboss.as.weld.common@18.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:102)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.jpa@18.0.1.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:237)
... 103 more
По некоторым причинам org.infinispan.functional.impl.AbstractFunctionalMap # fmap.chain fie ld был нулевым.
Проект на github - https://github.com/netfisher777/magic-blog-back/tree/jcache