Tomcat集群上的Eclipselink缓存协调

时间:2016-03-03 12:53:06

标签: tomcat jpa caching eclipselink


我已经设置了一个简单的Tomcat集群,使用粘性会话(mod_jk作为负载均衡器)可以正常工作。 2个节点在同一个盒子上运行但在不同的端口上运行(这是我的测试环境) 不幸的是,如果我关闭L2缓存,应用程序的性能会急剧下降。
为了启用它,我一直在尝试使用描述here的rmi方法。

  • 我在默认端口上运行 rmiregistry
  • 我添加了< distributable />到每个节点上我的应用程序的web.xml
  • 我在persistence.xml中添加了必要的eclipselink属性:

    < property name =" eclipselink.cache.coordination.protocol"值=" RMI" />
    < property name =" eclipselink.cache.coordination.rmi.url"值=" T3://127.0.0.1:1099 /" />

    运行此配置时,我会看到以下内容:

  • 如果我删除了node1上的实体,我可以在其catalina.out中看到一条错误消息,其中包含:
    ERROR org.apache.catalina.session.StandardManager-异常加载会话来自持久存储 java.io.WriteAbortedException:写入已中止; java.io.NotSerializableException:org.apache.catalina.connector.RequestFacade
    node2上的实体不会从共享缓存中删除。

  • 如果我在node1上添加一个实体,没有任何反应 - 我也没有在catalina.out中收到任何错误,也没有实体添加到node2的缓存中。

    任何提示都深表赞赏!

1 个答案:

答案 0 :(得分:0)

我实际上没有解决我的问题,但是我找到了解决方法。 过时缓存可能导致问题的地方,我调用EntityManagerFactory类的方法getCache()。evict(< Class name>)。 我意识到这不是一个合适的解决方案,但我没有时间进行进一步的研究,这个适合我的需要。