Liferayのポートレット間で共有カスタムオブジェクトを送信しようとすると、深刻な問題が発生します。タイプMyCustomClassのオブジェクトをロードし、それをパラメーターとして要求オブジェクトに挿入するサーブレットフィルターを備えたフックプラグインがあります。
ポートレットのrender()でこのオブジェクトを読み取ろうとすると、同じクラスにオブジェクトをキャストしていますが、ClassCastExceptionが発生します。
私はliferayプラグインが異なるコンテキストを持っていることを理解しており、次のようにBeanとポートレットにオブジェクトをロードする前にクラスローダーを変更しようとしました。
ClassLoader portalcl = PortalClassLoaderUtil.getClassLoader();
ClassLoader currentcl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(portalcl);
//do my stuff
Thread.currentThread().setContextClassLoader(currentcl);
ただし、問題は解決しませんでした。問題を解決するために私が見つけた唯一の方法は、オブジェクトをjson文字列にシリアル化し、必要なときにいつでも逆シリアル化することです。
これはちょっとラメじゃないですか?誰かがより良い解決策を知っていますか?
よろしく、DS