我遇到了嘗試在liferay中的portlet之間發送共享自定義對象的嚴重問題。我有一個Hook插件,帶有一個servlet過濾器,它加載一個類型爲MyCustomClass的對象並將其作爲參數插入到請求對象中。在liferay中的portlet之間發送自定義對象
當我嘗試讀取Portlet的render()中的這個對象時,我得到一個ClassCastException,但我將該對象轉換爲同一個類。
據我所知,Liferay的插件有不同的背景,我已經嘗試過在bean和portlet這樣在加載對象前更改類裝載器:
ClassLoader portalcl = PortalClassLoaderUtil.getClassLoader();
ClassLoader currentcl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(portalcl);
//do my stuff
Thread.currentThread().setContextClassLoader(currentcl);
但是
,它並沒有解決這個問題,我發現解決問題的唯一方法是將對象序列化爲json字符串,並在需要時將其反序列化。
這難道不是跛腳嗎?有誰知道更好的解決方案?
問候,DS
嗯,我想你是對的,這似乎是最合法的方法,但它使我們的系統管理員的部署過程稍微複雜一些,因爲我們仍處於開發的早期階段,並且將這些類更改爲許多。所以我們最終使用json將對象從一個portlet發送到另一個portlet,直到我們到達更加穩定的狀態,或者直到liferay修復它爲止。感謝您的反饋意見 ! – madoke 2013-03-01 10:54:00
這個線程有點舊了,但是我們最後把所有的bean移動到一個jar文件中,並將這個jar文件放在tomcat的lib目錄中,就像你所建議的一樣。 – madoke 2015-06-16 18:53:01