2014-10-22 5 views
0

Я использую JBoss 7.1.1 с Liferay 6.2GA. Мне нужен экземпляр портлета на каждой странице. Конструктор класса MVCPortlet вызывается только после развертывания портлета, поэтому он просто создается один раз (после развертывания).Как создать экземпляр Liferay Portlet несколько раз

Я попытался

<instanceable>true</instanceable> 

в Liferay-portlet.xml, но это ничего не изменилось.

Как создать новый экземпляр моего портлета, когда я перетаскиваю портлет из меню «добавить приложение», чтобы поместить его на созданную страницу, только для этого экземпляра?

Для того, чтобы контролировать количество экземпляров, я сделал:

public class Controller extends MVCPortlet { 
private final static Logger log = Logger.getLogger("Controller"); 
private int instance = 0; 
public Controller() { 
     instance++; 
     log.info("instance: " + instance); 
    } 
} 
+0

Зачем вам нужно вызвать конструктор для каждого добавления? –

+0

Я построил проект в идее, что он будет создан для каждой страницы. У меня есть специальное приложение, в котором каждый пользователь имеет ровно одну страницу, но пользователь не вошел в систему. – JeromeC

ответ

2

Это не ваш бизнес экземпляр классов портлетов. Портал сделает это за вас. Портлет не имеет состояния в классе: как только у вас есть переменная-член в вашем портлете, сохраняя любое личное состояние, это потенциальная проблема.

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

Независимо от того, что вы пытаетесь сделать, полагаясь на несколько (java) объектов: это неправильно. Вам необходимо изменить свою архитектуру

+0

Это грустно для меня, но спасибо. Я не вижу преимуществ такого рода портлетов, я имею в виду, что банка может работать на mulitple pc, почему портлет не работает на разных страницах. Спасибо, Олаф. – JeromeC

+0

Конечно, портлет может быть на нескольких страницах. Просто полное состояние находится не в самом объекте портлета, а в запросе/ответе или в сеансе. Ожидаете ли вы, что один объект на странице, по одному на пользователя, по одному за сеанс? Что относительно узлов кластера (разные JVM)? Этот запрос не имеет смысла, и реализация не ограничивает вас * вообще *. Именно эта реализация была реализована, и есть четкое решение для реализации вашей основной проблемы. Это просто не решение, которое вы предполагали. –

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