2016-12-12 8 views
0

클러스터에 Hazelcast 및 Payara가 포함 된 독립 실행 형 인스턴스가 있고 세션 복제 및 HAProxy가있는로드 밸런서를 추가했습니다. 모든 것이 잘 작동합니다.session.setAttribute를 사용하여 세션 개체 복제

세션 빈을 사용할 때 모든 전역 변수는 클러스터 노드에 복제되지만 no-SessionBean에서 객체를 몇 번 공유하려고하면 작동하지 않습니다. 페이지가있다 뒤에

Index Page

빈을 : 나는 (분산 목록 및 세션 목록 Hazelcast) "문자열"의 2 목록을 검색하는 간단한 페이지가

: 은 아래에있는 내 간단한 예제이 사용자 정의 범위.

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

은 "증가"방법은 내가 "추가"버튼을 클릭 할 때 호출됩니다

Click for view Example

: 버튼 4 클릭 후

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); 
    } 
} 

는 situazione이있다

세션 목록에서는 2 개의 문자열 만 공유되며, Hazelcast가있는 모든 문자열은 공유됩니다. 내 사용자 지정 범위를 사용해야하며 같은 경우 개체가 세션에서만 공유되고 응용 프로그램에서는 공유되지 않아야합니다 (Hazelcast Distributed List).

"setAttribute"방법으로 문제를 해결할 수 있습니까?

미리 도움을 주셔서 감사합니다.

+0

아마도'web.xml' 파일에서'WebFilter' 설정을 공유 할 수 있습니까? 특히 '지연된 쓰기'가 활성화되어 있습니까? – emre

+0

@emre, 이것은 나의 web.xml입니다. –

+0

Luca, 웹을 볼 수 없습니다. – emre

답변

1

페이 라라 서버의 Hazelcast에서 세션 복제를 작동 시키려면 Hazelcast를 통한 웹 컨테이너 가용성을 활성화해야합니다. 이 screenshot을 참조하십시오.

또한 <distributable/> 요소를 애플리케이션의 web.xml에 포함해야합니다. 그렇지 않으면 세션이 배포되지 않습니다.

+0

예, 웹 컨테이너 가용성을 활성화했으며''태그를'web.xml '에 포함 시켰습니다. –