Навигационный крюк Liferay

Можно ли создать хук в Liferay Navigation? Я хотел бы создать его для взаимодействия с изменениями сайта. Например, на сайте «А» все портлеты подключаются к схеме БД «А», но на сайте «Б» те же самые портлеты подключаются к схеме «Б».

В настоящее время я использую PhaseListener, чтобы получить сайт из ThemeDisplay и установить его в глобальной переменной сеанса, например:

//get the theme display from the current request
ThemeDisplay theme = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
theme.getSiteGroupName();  //connect to datastore based on this value

Я считаю, что было бы более эффективно, если бы это изменение основывалось на навигации по сайту, чтобы не помещать этот прослушиватель во все портлеты.

Мысли и комментарии?


person Floresj4    schedule 03.09.2014    source источник


Ответы (1)


Нет. Соединения не выполняются по требованию, они исходят из пула соединений. Таким образом, пока вы использовали A, в пуле были открыты соединения, указывающие на схему A. Когда вы пытаетесь перейти к B, соединения в пуле все еще хороши, открыты и доступны, поэтому они будут отключены, и вы по-прежнему будет использовать B.

Liferay не очень хорошо справляется с переключением между схемами для любых данных, которые он использует, и такие вещи, вероятно, нанесут ущерб вашей среде.

person Clara Sell    schedule 03.09.2014
comment
Я использую MyBatis для обработки взаимодействий с хранилищем данных. На этапе RESTORE_VIEW каждый портлет получает текущий сайт и загружает соответствующую среду; Mybatis должен обрабатывать соединения/пулы и т. д. Меня интересует только выполнение этой проверки (хотя и очень маленькой) каждый раз при загрузке портлета; следовательно, навигационный крючок, но я постепенно начинаю верить, что это невозможно. - person Floresj4; 03.09.2014