使用infinispan-cdi时,在驱逐后读取文件存储时出错

时间:2012-09-03 09:42:48

标签: jboss7.x infinispan

我在尝试使用JBoss AS 7.1.1.Final上的infinispan-cdi版本5.1.5.FINAL进行小型测试时遇到了麻烦。我确实尝试过快速入门,一切正常。

错误是:

  

17:28:05,963 ERROR [org.infinispan.loaders.file.FileCacheStore]   (http - 0.0.0.0-8080-1)ISPN000062:从文件读取时出错:   d:\ jboss的\独立\ DATA \学习\学习缓存\ 1450574848:   抛出java.lang.ClassNotFoundException:   来自[Module。的org.infinispan.cdi.interceptor.DefaultCacheKey   来自本地模块加载器的“org.jboss.as.clustering.infinispan:main”   @ 43f46f3b(roots:D:\ jboss \ modules)]

在maven POM文件上我有

<dependency>
    <groupId>org.infinispan</groupId>
    <artifactId>infinispan-cdi</artifactId>
    <version>5.1.5.FINAL</version>
</dependency>

<manifestEntries>  
  <Dependencies>org.infinispan</Dependencies>  
</manifestEntries>  

在jboss standalone-ha.xml上我有:

<subsystem xmlns="urn:jboss:domain:infinispan:1.2" default-cache-container="learning">
    <cache-container name="learning" default-cache="learning-cache">
        <local-cache name="learning-cache" start="EAGER">
            <eviction strategy="LRU" max-entries="2"/>
            <file-store/>
        </local-cache>
    </cache-container>
</subsystem>

要在java上设置缓存我有:

public class Config {
    @Resource(lookup = "java:jboss/infinispan/container/learning")
    @Produces
    EmbeddedCacheManager defaultCacheManager;
}

使用的数据是:

public class User implements Serializable{  
  private static final long serialVersionUID = -577278578670082130L;  

  private long id;  
  private String name = "abs";  

  ... getters and setters...  
}

我在服务上使用拦截器,例如:

  @CacheResult(cacheName = "learning-cache")  
  public User findUser(String id) {  

          User user = new User();  
          user.setName(id);  
          return user;  
  }  

  @CachePut(cacheName = "learning-cache")  
  public void storeUser(String id, @CacheValue User user) {  
     Log("Stored:" + user.getName());  
  }  

我必须说一切都很好,直到它试图从文件库中读取。那是我得到上面提到的错误的时候。 当我用文本编辑器打开缓存文件时,我可以看到 org.infinispan.cdi.interceptor.DefaultCacheKey 引用..

任何帮助或方向都会有很高的偏见。

干杯,

EDIT1: 所以我一直在玩,试图在没有拦截器的情况下做同样的事情:

@Inject
Cache<String, User> cache;

public User findUser(String id) {
                    if (cache.containsKey(id)) {
                              return cache.get(id);
                    } else {
                              User user = new User();
               user.setId(id);
                              user.setName("asdad");
                              cache.put(id, user);
                              return user;
                    }
    }

现在错误:

  

引起:java.lang.ClassNotFoundException:   org.infinispan.quickstart.cdi.config.User来自[Module   来自本地模块加载器的“org.jboss.as.clustering.infinispan:main”   @ 64b2ad57(roots:D:\ jboss \ modules)]

所以这与类加载器没有找到正在编组到磁盘的类有关 - 可能是jboss问题而不是infinispan? 我一直在研究,但它不应该只与Serializable一起使用吗? 我也在考虑storeAsBinary属性,但是,作为本地缓存,我认为它不会有任何好处。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

交叉发布到https://community.jboss.org/message/757323#757323 - 已在JBoss论坛中提供的帮助。