2011-12-14 4 views
2

私たちのWebアプリケーションに接続されている150人以上のユーザーがいる場合、私のDBから返される矛盾したデータの奇妙な動作があります。EcipseLink JPA 2.0はrefresh()/ flush()が必要ですか?

私のEJBは、Netbeans 7.0で生成されたコードをほとんど使ってMySQLに接続します。再利用性のために少しカスタマイズしました。何が起こるかは、たびたび、ユーザーが(ブラウザ内で)必要なものではないデータを受け取ることです。私。ユーザーは製品Aの詳細を表示していますが、データの一部(一部の一対多の関係データ)は異なる製品に属しています。ログインユーザーが少ない場合、この問題は発生しません。約150人のユーザーで問題が発生しているようだ。

コードのの部分はem.create(...),em.persist(...)またはem.merge(...)です。 refresh()またはflush()はありません。共有キャッシュを無効にしました。ロードバランシングはありません。

何をどこで見ることができますか?

答えて

4

状況によって異なります。

refresh()は、データベーステーブル内のデータを持つエンティティを更新します。

は、しかし場合はあなたの情報のために、あなたはこれらのメソッドを使用します。

flush()は正反対で、エンティティの値をデータベーステーブルに保存します。

しかし、CMPを使用している場合は、デフォルトでEJBのすべてのメソッドがトランザクションで実行されます(トランザクション属性が使用されていない場合を除きます)。トランザクションはメソッド呼び出しから始まり、メソッドが終了すると終了します。最後にコミットされます。つまり、flush()に電話する必要はありません。しかし、コミットの前にエンティティとデータベースを同期させる必要がある場合は、flush()に電話する必要があります。

それ以外は、実際にはあなたの要件が何であるかによって異なります。

+0

ありがとうございました。これは私が最もフォーラムからつかんだことを確認します – JScoobyCed

+0

あなたは大歓迎です。 –

関連する問題