2016-12-12 10 views
0

私はHazelcastとPayaraを持つスタンドアロンインスタンスとしてクラスタを持っています。セッションレプリケーションとHAProxyを持つロードバランサを追加しました。すべてうまく動作します。session.setAttributeを使用したセッションオブジェクトの複製

セッションBeanを使用すると、すべてのグローバル変数がクラスタのノードに複製されますが、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'設定を共有できますか?特に、 'deferred-write'を有効にしていますか? – emre

+0

@emre、これは私のweb.xml –

+0

ルカ、あなたのweb.xmlは見えません。 – emre

答えて

1

Payara ServerのHazelcastでセッション複製を機能させるには、HazelcastでWebコンテナの可用性を有効にする必要があります。このscreenshotを参照してください。

また、<distributable/>要素をアプリケーションのweb.xmlに含める必要があります。そうしないと、セッションは配信されません。

+0

はい、Webコンテナの可用性を有効にして、 ''タグを 'web.xml 'に含めました。 –

関連する問題