0

会話スコープを持つ CDI Bean を使用しています。次のように、Bean のアクション メソッドで新しい会話を開始します。

    if (conversation.isTransient()) {
        conversation.begin();
        logger.fine("start new conversation, id=" + conversation.getId());
    }

CDI によって与えられる ID は、'1' や '2' などの単純な小さな数字であることがわかりました。いくつかのテストの後、最後に同じ ID を取得したさまざまなブラウザー セッションを開始することができました。したがって、両方のブラウザは、たとえば ID '1' を要求します。そして、これは会話中に衝突を引き起こします。

この動作は正常なのだろうか (私は Wildfly で実行しています)?

生成された一意の ID を自分で指定することから会話を開始する必要がありますか?

    if (conversation.isTransient()) {
        conversation.begin(UUID.randomUUID().toString());
        logger.fine("start new conversation, id=" + conversation.getId());
    }

更新: Siliarus のコメントとして、ID はブラウザー セッション内で一意です。同じ CID を使用している 2 つの異なるブラウザー セッションでの競合に関する私自身の観察は間違っていました。自分で一意の ID を作成する必要はありません。

4

1 に答える 1

0

Siliarus のコメントのとおり、ID はブラウザー URL で同じかもしれませんが、ID はセッション内で一意です。したがって、競合は発生せず、一意の ID を手動で生成する必要はありません。

于 2016-10-07T20:29:35.080 に答える