2013-02-28 3 views
2

У меня возникли серьезные проблемы с попыткой отправить общие пользовательские объекты между портлетами в liferay. У меня есть плагин Hook с фильтром сервлета, который загружает объект Type MyCustomClass и вставляет его в объект запроса в качестве параметра.Отправка пользовательских объектов через портлеты в liferay

Когда я пытаюсь прочитать этот объект в рендере портлета(), я получаю исключение ClassCastException, хотя я бросаю объект в тот же класс.

Я понимаю, что Liferay плагины имеют различные контексты, и я уже пытался изменить загрузчик классов перед загрузкой объекта в компоненте и портлета, как это:

ClassLoader portalcl = PortalClassLoaderUtil.getClassLoader(); 
ClassLoader currentcl = Thread.currentThread().getContextClassLoader(); 
Thread.currentThread().setContextClassLoader(portalcl); 

//do my stuff 

Thread.currentThread().setContextClassLoader(currentcl); 

однако, это не решило проблему, и единственный способ решить эту проблему - сериализовать объект в строку json и десериализовать его всякий раз, когда мне это нужно.

Разве это не лак? Кто-нибудь знает лучшее решение?

С уважением, DS

ответ

4

Похоже, главной проблемой, вы видите, что два различных класс погрузчики загружают класс, который techncally делает их различные классами (которые, кажется, как вы уже определили).

Я не использовал LifeRay много, но это была проблема, которую я видел и на других платформах. Мы использовали WebSphere и решили эту проблему, поставив общий MyCustomClass в общую библиотеку, которая находилась на пути к классу сервера. Таким образом, сервер загрузит класс и сделает его доступным для всех приложений на сервере через один загрузчик классов. Если вы позволяете каждому приложению загружать класс, вы увидите это исключение.

+0

Ну, я думаю, вы правы, это, по-видимому, самый законный подход, но это немного усложняет процесс развертывания для наших системных администраторов, поскольку мы все еще находимся на ранней стадии разработки и меняем эти классы. много. Таким образом, мы закончили использование json для отправки объектов из одного портлета в другой, пока мы не достигнем более твердого состояния, или пока liferay не исправит его. Спасибо за ваш отзыв ! – madoke

+0

Эта ветка немного устарела, но мы закончили тем, что переместили все бобы в банку и поместили эту банку в каталог lib tomcat, как вы предложили. – madoke

Смежные вопросы