我正在为将在具有多个JVM的大型集群上运行的应用程序中的缓存数据寻找最佳解决方案。我需要在高速缓存中存储“value_to_cache”,并可以将其在另一个JVM(最有可能)上与其他值进行比较,并在需要时进行删除/更新(或删除并创建新的)。应用程序将使用Java-EJB 3.1技术进行开发,并部署在Jboss 6或7上。
我正在搜寻答案,所以我发现:
使用JPA休眠
Infinispan
HA分区服务

我希望得到严格的答案,但找不到答案。所以我的问题是最好的方法是什么?又为什么呢

最佳答案

Infinispan 上的默认缓存提供程序JBoss 7 。如果您想要应用程序服务器随附的解决方案,则必须坚持使用此框架。

对于 JPA实体second-level cache已经存在(实际上是预定义的Infinispan缓存)。只需按照JPA reference guide开始。

如果需要更通用的解决方案,还可以创建自定义 Infinispan 缓存。假设您正在JBoss 7(基本集群模式)上以ha模式运行domain概要文件:

   <profile name="ha">
   ...
   <subsystem xmlns="urn:jboss:domain:infinispan:1.2" default-cache-container="cluster">
     ...
     <cache-container name="myCacheCont" default-cache="myCache">
       <!-- Adjust replication settings below (sync/async etc.) -->
       <transport lock-timeout="60000"/>
       <replicated-cache name="myCache" mode="SYNC" batching="true">
          <locking isolation="REPEATABLE_READ"/>
       </replicated-cache>
     </cache-container>
    </subsystem>
   ...
   </profile>

在这种情况下,可以通过标准@Resource查找来获取缓存参考:
@Stateless
public class MyEJB implements SomeService {

    @Resource(lookup="java:jboss/infinispan/myCacheCont")
    private org.infinispan.manager.CacheContainer container;
    ...
    void doSomethingWithCache() {
       org.infinispan.Cache cache = container.getCache("myCache");
       ...
       cache.put(...); // Data will be replicated to different nodes, if configured properly
    }
}

不要忘记在项目中添加org.infinispan作为模块依赖项。

08-18 18:33
查看更多