アプリケーションごとに 1 つの SessionFactory オブジェクトのみを使用するのはなぜですか? アプリケーションごとに単一のセッション ファクトリ オブジェクトを使用する利点は何ですか?
4 に答える
セッション ファクトリ オブジェクトは、シングルトンデザイン パターンを使用して実装されます。SessionFactory のインスタンスはスレッドセーフであり、通常はアプリケーション全体で共有されます。これらのオブジェクトには、接続情報、休止状態の構成情報、マッピング ファイル、ロケーション パスが含まれているため、重量があります。したがって、多数のインスタンスを作成すると、アプリケーションが重くなります。ただし、セッション オブジェクトはスレッド セーフではありません。つまり、SessionFactory オブジェクトはアプリケーションごとに 1 つ、Session オブジェクトはクライアントごとに 1 つです。
したがって、DataSource ごとに 1 つの SessionFactory になります。アプリケーションには複数の DataSource がある場合があるため、そのインスタンスに複数の SessionFactory がある場合があります。ただし、アプリケーションで SessionFactory を複数回作成することは望ましくありません。
利点:明らかに、アプリケーションのパフォーマンスが向上します:)
更新 - Hibernate Docから抽出
SessionFactory の内部状態は不変です。作成されると、この内部状態が設定されます。この内部状態には、オブジェクト/リレーショナル マッピングに関するすべてのメタデータが含まれます。
の作成は、SessionFactory
hibernate 構成/マッピング プロパティの解析とデータベース接続プールの作成を含む非常にコストのかかるプロセスであるためです。 server 、通信チャネルを確立し、情報を交換して認証を行います。
したがって、SessionFactory
for every リクエストを作成する場合、リクエストを処理するためにデータベース接続プールを使用していないことを意味します。データベース接続から開かれた接続を取得するだけでなく、リクエストごとに上記のオーバーヘッドのあるプロセスによって新しい接続をセットアップする必要があります。プール。
アプリケーションごとに 1 つの SessionFactory オブジェクトに関する重要なポイントがいくつかあります。
1.Single Data Store : – アプリケーション全体の単一のデータ ストアです。複数の SessionFactory を持つことができますが、各 SessionFactory には 1 つの異なるデータベースが関連付けられています。
2.スレッドセーフ: – SessionFactory はスレッドセーフであるため、この機能により、多くのスレッドが SessionFactory にアクセスできます。
3.不変: - SessionFactory のオブジェクトが作成されると、Session Facotyr の値を変更または設定することはできません。その内部状態は、作成時に設定されます。
4.Singleton : – アプリケーションの起動時に SessionFactory を構築し、singleton 設計パターンに従います。
これがあなたの質問に答えてくれることを願っています..
sessionfactory の作成方法の詳細については、次の URL を参照してください: http://techpost360.blogspot.in/2015/07/what-is-hibernate-sessionfactory.html
はい、sessionFactory がシングルトン設計パターンに従っていることを理解するのは非常に簡単です。そのため、ホール アプリケーションで作成できるオブジェクトは 1 つだけです。また、SessionFactory はスレッド セーフであるため、一度に 1 つのスレッドのみがそのコードを実行できます。sessionFactory のインスタンスは、接続、休止状態の構成、マッピング ファイル、ロケーション パスを含むため重み付けされているため、sessionFactory のインスタンスを多数作成すると、コードが非常に重くなります。そのため、1 つのアプリケーションに対して 1 つの sessionFactory インスタンスのみを使用しています。アプリケーションのパフォーマンスを向上させるために、1 つのアプリケーションで sessionFactory のインスタンスを 1 つだけ使用しています。