我有一个关于JCache/Ehcache-XML配置的问题。
我将JSR 107缓存注释CDI参考实现与Ehcache一起使用。
我想用@CacheResult注释特定方法,以便这些方法的结果将缓存在为该特定方法生成的缓存中。在我们的例子中,这些方法的返回值是可选的,您可能知道,可选实例不可序列化,因此默认情况下不能缓存。默认使用的序列化拷贝器和PlainJavaSerializer在这方面失败。
为了解决这个问题,我实现了我们自己的自定义OptionalSerializer和OptionalCopier,以能够处理可选值。
但是,当涉及可选返回值时,我无法使JCache/Ehcache清楚地使用我的自定义序列化程序和复制程序。我试着把ehcache放进去。xml在JBoss EAP 6.4.0的类路径上(使用JBoss模块),我尝试放置ehcache。xml在Maven模块的resources文件夹中,但它们显然被忽略了。即使我使这些XML无效,我也不会得到任何错误。
我希望避免创建CacheManager,即我们自己的ehcache。xml配置文件,因为此时我必须创建缓存。我不想要这个。我希望缓存由缓存注释CDI CacheResultInterceptor创建,我似乎没有选择覆盖一个方法来创建我自己的CacheManager。。。
有人知道我应该做什么来解决这个问题吗?我只想使用提供的拦截器,并具有一个XML配置,指定特定返回类型将需要使用自定义序列化器和复制器。
豆。xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_0.xsd">
<interceptors>
<class>org.jsr107.ri.annotations.cdi.CacheResultInterceptor</class>
<class>org.jsr107.ri.annotations.cdi.CachePutInterceptor</class>
<class>org.jsr107.ri.annotations.cdi.CacheRemoveEntryInterceptor</class>
<class>org.jsr107.ri.annotations.cdi.CacheRemoveAllInterceptor</class>
</interceptors>
</beans>
示例方法:
@CacheResult
public Optional<User> findUser(String username) {
return userDao.findUser(user);
}
您当前使用的Ehcache版本;Ehcache 3.4.0
粘贴有问题的缓存/缓存管理器的配置;
<ehcache:config xmlns:ehcache="http://www.ehcache.org/v3"
xmlns:jcache="http://www.ehcache.org/v3/jsr107">
<ehcache:service>
<jcache:defaults default-template="defaultTemplate"/>
</ehcache:service>
<ehcache:cache-template name="defaultTemplate">
<ehcache:value-type
serializer="be.post.min.client.cache.OptionalSerializer"
copier="be.post.min.client.cache.OptionalCopier">java.util.Optional</ehcache:value-type>
</ehcache:cache-template>
<ehcache:default-serializers>
<ehcache:serializer type="java.util.Optional">be.post.min.client.cache.OptionalSerializer</ehcache:serializer>
</ehcache:default-serializers>
<ehcache:default-copiers>
<ehcache:copier type="java.util.Optional">be.post.min.client.cache.OptionalCopier</ehcache:copier>
</ehcache:default-copiers>
</ehcache:config>
添加您使用Ehcache的其他库或框架的任何名称和版本(例如Hibernate);
提供JDK和操作系统版本可能也很有用。
从我对CDI的模糊理解来看,把它放在src/main/resources中应该行得通。你确定它最终会出现在你的罐子/战争中吗?
我们的Thorntail(2.4.0.Final)webapp使用Infinispan作为JCache(JSR-107)提供商。除了JCache的属性(如按值存储选项)之外,我们还想修改Infinispan特定的属性(如默认获取超时)。 我们当前的解决方案不起作用。以下是我们迄今为止所做的尝试。 定义: 然后下面的类使用上面的配置: 接口定义为: 下面是我们如何使用JCache API配置缓存:
我得到了。了解调用相同的反序列化器。是否有一种方法可以在custome反序列化器中使用或?
我有一个lib枚举,如下所示: 我不能修改这个枚举。我需要从xml反序列化,如下所示: 我知道如何创建和使用混搭与杰克逊。但是如何告诉杰克逊使用外部函数进行反序列化呢?
我想使用Spring和自定义实现来转换来自Spring XML配置的值。 配置如下所示: 转换器按预期注入方法,以便正确初始化。但是无法执行xml配置中参数的转换。错误消息为: org.springframework.beans.factory.unsatisfiedDependencyException:在通过SAX inputsource加载的资源中创建名为“A1”的bean时出错:未满足的依
ehcache-jcache 是 ehcache 对 JCache 标准 API (JSR107) 的实现。
但现在的目标是只检索该URL下的最新事务,因为我不想序列化整个数据库表。所以我写了一个控制器: 当我现在尝试访问http://localhost:8080/transactions时,有一个 因为用户和帐户之间的循环引用。当我通过向用户中的帐户列表添加@JSONBackReference注释来解决这个问题时,我可以检索事务列表,但只能使用以下“经典”格式: