3

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

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

4

1 回答 1

4

Infinispan是JBoss 7上的默认缓存提供程序。如果您想要一个应用程序服务器附带的解决方案,那么您将不得不坚持这个框架。

对于JPA 实体二级缓存已经存在(实际上是预定义的 Infinispan 缓存)。只需按照JPA 参考指南开始。

如果您需要更通用的解决方案,您还可以创建自定义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在项目中添加为模块依赖项。

于 2013-06-18T19:09:04.647 回答