2016-12-12 10 views
0

У меня есть кластер как автономные экземпляры с Hazelcast и Payara, я добавил репликацию сеанса и балансировку нагрузки с помощью HAProxy. Все работает нормально.Репликация объектов сеанса с session.setAttribute

Когда я использую Session Bean, все глобальные переменные реплицируются в узлы кластера, но когда я пытаюсь совместно использовать объект в no-SessionBean несколько раз, это не работает. Это ниже мой простой пример:

У меня есть простая страница, извлекающая 2 списка «String» (Hazelcast Распределенный список и список сеансов):

Index Page

боб позади страница имеет пользовательский объем.

@Named 
@RomeoScoped //this is my custom scope 
public class RomeoBean implements Serializable { 

Метод "увеличение" вызывается при нажатии на кнопку "добавить":

public void increase(){ 
    FacesContext currentInstance = FacesContext.getCurrentInstance(); 
    HttpServletRequest request = (HttpServletRequest) currentInstance.getExternalContext().getRequest(); 
    HttpSession session = request.getSession(); 

    String example = Math.random() + ""; 

    if(session != null){ 
     CopyOnWriteArrayList<String> list = (CopyOnWriteArrayList<String>) session.getAttribute("List"); 
     list.add(example); 
     session.setAttribute("List", list); 
    } 

    try { 
     Context ctx = new InitialContext(); 
     HazelcastInstance instance = (HazelcastInstance) ctx.lookup("payara/Hazelcast"); 
     IList<String> list = instance.getList("list"); 
     list.add(example); 
    } catch (NamingException ex) { 
     Logger.getLogger(RomeoBean.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

После 4 нажимает на кнопки, situazione это:

Click for view Example

Только 2 строки разделяются в списке сеансов, в то время как все строки с Hazelcast. Мне нужно использовать свою собственную область видимости, и в этом же случае объекты должны быть разделены только в сеансе, а не в приложении (в виде распределенного списка Hazelcast).

Могу ли я исправить проблему с помощью метода setAttribute?

Заранее благодарим за поддержку.

+0

Можете ли вы поделиться своей конфигурацией 'WebFilter', возможно, в вашем файле' web.xml'? В частности, включена ли функция «отложенная запись»? – emre

+0

@emre, это мой web.xml –

+0

Luca, я не вижу ваш web.xml – emre

ответ

1

Для того чтобы репликация сеанса работала над Hazelcast на сервере Payara Server, вам необходимо включить доступность веб-контейнера через Hazelcast. См. Это screenshot.

Вам также необходимо включить элемент <distributable/> в web.xml в приложение, иначе сеанс не будет распространен.

+0

Да, я включил доступность веб-контейнера, и я включил тег '' в 'web.xml'. –

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

  • Нет связанных вопросов^_^