我已經建立了一個簡單的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的緩存。
任何提示深表感謝!
錯誤似乎不相關的EclipseLink本身,更與你的Tomcat集羣和您的可分配設置做到使其嘗試序列東西是不可序列。您可以嘗試移除該標記並打開EclipseLink日誌記錄,以查看會話嘗試連接時發生的情況,這些情況可能會在部署時或首次訪問持久性單元時發生。 – Chris
刪除可分發標籤不會改變任何內容。此外,當我打開的EclipseLink記錄在最好的水平,那裏有隻在日誌中線路:有關RMI: 遠程啓動命令管理服務[EclipseLinkCommandChannel,3b41eba4-b6c4-4bf4-a42e-bc13b61b3e4c,T3://127.0。 0.1:1099 /] 當我刪除一個實體時,它們不會與rmi管理器同步,也無法通過日誌跟蹤任何內容。 –
專注於啓動,因爲每個服務器啓動時,RCM都會將連接添加到rmi.url中指定的JNDI,並向其他服務器發送廣播,讓他們知道去哪裏連接。遠程服務器必須監聽廣播,連接到JNDI實例以查找連接對象,並反向連接。在更改開始發生之前檢查日誌中是否發生了這些情況,如果不是,則可能需要指定並打開端口並確保所有服務器都可以接收廣播。 – Chris