Простая конфигурация кэша Infinispan с использованием cdi и jcache на Wildfly 18 - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь настроить простой кэш 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

...