2016-03-03 90 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()。逐出(<類名>)。 我意識到這不是一個適當的解決方案,但我沒有時間進一步的調查,這個適合我的需要。