2016-03-03 43 views
1


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

  • 我跑它的默认端口rmiregistry的
  • 我加入<分配/ >到我的应用程序的web.xml中的每个节点上
  • 我添加必要的EclipseLink性质persistence.xml中:

    <属性名= “eclipselink.cache.coordination.protocol”值= “RMI”/>
    <属性名= “eclipselink.cache.coordination.rmi.url” 值= “T3://127.0.0.1:1099 /”/>

    当运行这种配置我看到如下:

  • 如果我删除节点1的实体,我可以看到它的catalina.out中的错误信息,其表示:从持久存储 java.io.WriteAbortedException
    ERROR org.apache.catalina.session.StandardManager-异常加载会话:写作流产; java.io.NotSerializableException:org.apache.catalina.connector.RequestFacade
    节点2上的实体不会被从共享缓存中删除。

  • 如果我在node1上添加一个实体,没有任何反应 - 我也不得到任何错误catalina.out中也不是实体增加了节点2的缓存。

    任何提示深表感谢!
+0

错误似乎不相关的EclipseLink本身,更与你的Tomcat集群和您的可分配设置做到使其尝试序列东西是不可序列。您可以尝试移除该标记并打开EclipseLink日志记录,以查看会话尝试连接时发生的情况,这些情况可能会在部署时或首次访问持久性单元时发生。 – Chris

+0

删除可分发标签不会改变任何内容。此外,当我打开的EclipseLink记录在最好的水平,那里有只在日志中线路:有关RMI: 远程启动命令管理服务[EclipseLinkCommandChannel,3b41eba4-b6c4-4bf4-a42e-bc13b61b3e4c,T3://127.0。 0.1:1099 /] 当我删除一个实体时,它们不会与rmi管理器同步,也无法通过日志跟踪任何内容。 –

+0

专注于启动,因为每个服务器启动时,RCM都会将连接添加到rmi.url中指定的JNDI,并向其他服务器发送广播,让他们知道去哪里连接。远程服务器必须监听广播,连接到JNDI实例以查找连接对象,并反向连接。在更改开始发生之前检查日志中是否发生了这些情况,如果不是,则可能需要指定并打开端口并确保所有服务器都可以接收广播。 – Chris

回答

0

其实我didnt解决我的问题,但是我找到了解决办法。 只要陈旧缓存可引起麻烦,我打电话的EntityManagerFactory类的方法getCache()。逐出(<类名>)。 我意识到这不是一个适当的解决方案,但我没有时间进一步的调查,这个适合我的需要。