2016-07-13 3 views
0

JPAを使用してレコードをOracleデータベースに保存しています。アプリケーションを実行するたびに、特定のディレクトリに移動し、そこにあるすべてのファイルを解析してテーブルにロードします。通常、処理されるファイルは何千もあります。EntityManagerFactoryを何度も作成しないでください。

ファイルを処理するたびに、およびレコードが挿入されるたびに、新しいEntityManagerFactoryが作成されます。したがって、EMFは毎回何千回も開かれます。私がそれをデバッグしているとき、私はEMFの作成がランタイムの90%以上を要する最も時間のかかるステップであることを発見しました。平均して新しいEMFを作成するには約2〜3秒かかります。多分、アプリケーションの開始時に一度EMF接続を開くだけで、ファイルの反復が始まるはずです。 EMFを全期間オープンさせるのがよい方法ですか?

+1

EntityManagerFactoryはスレッドセーフであり、発見したように、永続ユニットに必要なすべてのものを取得、ロード、検証するための設定が豊富です。 EntityManagersは軽量ですがスレッドセーフではありません。これらのオブジェクトは必要に応じて取得する必要がありますが、EMFは中央/静的にロードされます。 – Chris

+0

@Chris違いを説明してくれてありがとう。それを答えてください。私はそれを閉じます。 – ddd

答えて

1

私のコメントから抜粋: EntityManagerFactoryはスレッドセーフであり、発見したように、永続ユニットに必要なすべてのものを取得、ロード、検証するための設定が豊富です。 EntityManagersは軽量ですがスレッドセーフではありません。これらのオブジェクトは必要に応じて取得する必要がありますが、EMFは中央/静的にロードされます。

関連する問題