1

我正在按照一些指南使用作为提供程序 Infinispan 在 Wildfly 14 环境中设置 JCache。

我遵循了这些步骤: - 我从 Infinispan 网站下载了 Wildfly 模块版本 9.4.14 - 我在 Wildfly 的模块目录中复制了 zip 的内容 - 我将文件 jboss-deployment-structure.xml 添加到我的应用程序中 - 我添加了拦截器到我的应用程序上的 beans.xml 文件 - 我将注释 @CacheResult 添加到函数 - 我启动 Wildfly 并收到以下错误 org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type InfinispanExtensionEmbedded在注入点使用限定符 @Default [BackedAnnotatedField] @Inject private org.infinispan.cdi.embedded.AdvancedCacheProducer.infinispanExtension

我添加了可能有用的信息。我在 wildfly 上部署的应用程序是一只耳朵蚂蚁,这是我正在使用的结构:

  • 耳朵文件
    • 元信息
    • JAR 库文件
    • 元信息
      • bean.xml 文件
      • jboss-部署-结构.xml
    • WAR文件

jboss-deployment-structure.xml :

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <dependencies>
            <module name="org.infinispan" slot="ispn-9.4" services="export"/>
            <module name="org.infinispan.cdi.embedded" slot="ispn-9.4" services="export"/>
            <module name="org.infinispan.jcache" slot="ispn-9.4" services="export"/>
        </dependencies>
  </deployment>
</jboss-deployment-structure>

豆类.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"
           version="1.1" bean-discovery-mode="all">
        <interceptors>
<class>org.infinispan.jcache.annotation.InjectedCacheResultInterceptor</class>

   <class>org.infinispan.jcache.annotation.InjectedCachePutInterceptor</class> 


<class>org.infinispan.jcache.annotation.InjectedCacheRemoveEntryInterceptor</class>


<class>org.infinispan.jcache.annotation.InjectedCacheRemoveAllInterceptor</class> 
    <class>org.infinispan.jcache.annotation.CacheResultInterceptor</class>
    <class>org.infinispan.jcache.annotation.CachePutInterceptor</class>


<class>org.infinispan.jcache.annotation.CacheRemoveEntryInterceptor</class> 

 <class>org.infinispan.jcache.annotation.CacheRemoveAllInterceptor</class>
        </interceptors>
    </beans>

使用此标准配置,我希望在 beans.xml 中定义的拦截器开始起作用,因此我可以在应用程序中使用默认缓存容器

4

1 回答 1

1

org.infinispan.cdi.embedded 和 org.infinispan.jcache 模块内部有 SPI 扩展(jar/META-INF/services 文件夹)。只需在 jboss-deployment-structure.xml 的模块依赖项中添加 services="export" 即可启用它们。这是我的 jboss-deployment-structure.xml:

<jboss-deployment-structure>
<deployment>
    <module-alias name="deployment.magic-blog" />
    <dependencies>
        <module name="org.infinispan.cdi.embedded" slot="ispn-9.4" export="true" services="export" />
        <module name="org.infinispan.jcache" slot="ispn-9.4" export="true" services="export" />
        <module name="javax.cache.api" slot="ispn-9.4" export="true"/>
    </dependencies>
</deployment>

于 2020-02-29T22:06:34.300 回答