問題タブ [lazy-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++でのシングルトンのスレッドセーフな遅延構築
次のような C++ でシングルトン オブジェクトを実装する方法はありますか。
- スレッド セーフな方法で遅延構築します (2 つのスレッドが同時にシングルトンの最初のユーザーになる可能性がありますが、構築は 1 回だけにする必要があります)。
- 事前に構築されている静的変数に依存しません (そのため、静的変数の構築中にシングルトン オブジェクト自体を安全に使用できます)。
(私は自分の C++ を十分に理解していませんが、コードが実行される前に整数および定数の静的変数が初期化される場合 (つまり、静的コンストラクターが実行される前であっても - それらの値はプログラムで既に「初期化」されている可能性があります)もしそうなら - おそらくこれは、シングルトンミューテックスを実装するために悪用される可能性があります - これは、実際のシングルトンの作成を保護するために使用できます..)
すばらしい、私は今、いくつかの良い答えを持っているようです (残念ながら、2 つまたは 3 つを答えとしてマークすることはできません)。2 つの大まかな解決策があるようです。
- POD 静的変数の静的初期化 (動的初期化ではなく) を使用し、組み込みのアトミック命令を使用して独自のミューテックスを実装します。これは私の質問でほのめかしていた解決策のタイプであり、私はすでに知っていたと思います.
- pthread_onceやboost::call_onceなどの他のライブラリ関数を使用します。これらは確かに知りませんでした-そして、投稿された回答に非常に感謝しています.
java - JPA と Hibernate を使用する場合の LazyInitializationException の解決方法
遅延初期化を使用したい顧客向けのプロジェクトに取り組んでいます。クラスをデフォルトの遅延読み込みモードでマッピングすると、常に「遅延初期化例外」が発生します。
このエラーを回避するために JPA クラスを使用する標準パターンはありますか?
スニペットは大歓迎です。お時間をいただきありがとうございます。
java - hibernate 遅延初期化の問題: LazyInitializationException: ロールのコレクションを遅延初期化できませんでした
永続化レイヤーでトランザクションを管理したいのですが、結果を遅延取得しようとすると、次のエラーが発生します。
org.hibernate.LazyInitializationException: ロールのコレクションを遅延初期化できませんでした
この問題を解決するために、LockMode またはその他の方法を使用できますか? トランザクションなしでIDでオブジェクトを見つけることができますか?
hibernate - Grails と Hibernate の遅延初期化例外
Grailsでエラーが発生する最も一般的な場所はどこorg.hibernate.LazyInitializationException
ですか?原因は何ですか?どのように解決しましたか?
この 1 つの例外は初心者によく出てくると思います。そのため、より多くの例を提供していただければ幸いです。
spring - Spring IBatis を使用したキャッシュの遅延初期化
従来の実装を Spring IBatis モデルに移行しています。Springモデルを使用して、これらのオブジェクトをよりクリーンな方法でモデル化することに行き詰まっています
2つのクラスがあるとしましょう[どちらもシングルトンです]
DAOImplは DAOInterface を実装します
CacheDAOImplは DAOInterfaceを実装します
CacheDAOImplでのオブジェクトの初期化を示すコード スニペット
CacheDAOImplオブジェクトの使用法を示すDAOImplのコード スニペット
上記の実装では、DAOImpl でメソッドが呼び出されたときにのみキャッシュが初期化されますが、初期化の Spring モデルでは、これを行うことができますか?. オブジェクト DAOImpl は常に非遅延 Bean によってアクセスされるため、ここでは lazy-init が機能しない場合があります。
c++ - C++ での遅延/多段階構築
C ++でのオブジェクトの多段階構築/初期化に適した既存のクラス/デザインパターンは何ですか?
プログラムのフローのさまざまな時点で初期化する必要があるいくつかのデータ メンバーを持つクラスがあるため、それらの初期化を遅らせる必要があります。たとえば、1 つの引数をファイルから読み取り、別の引数をネットワークから読み取ることができます。
現在、データメンバーの遅延構築にboost::optionalを使用していますが、optionalがdelay-constructedと意味的に異なることが気になります。
私が必要としているのは、boost::bind と lambda の部分関数アプリケーションの機能を思い出させるものであり、これらのライブラリを使用すると、おそらく多段階の構築を設計できますが、既存のテスト済みのクラスを使用することを好みます。(または、私がよく知らない別の多段階構築パターンがあるかもしれません)。
c++ - トリプルチェックロック?
そのため、現時点では、ダブルチェック ロックをそのまま使用しても C++ では機能しないことがわかっています。少なくとも、移植性のある方法では機能しません。
テレイン レイ トレーサーに使用する遅延四分木に脆弱な実装があることに気付きました。そこで、メモリ使用量を 4 倍にしたり、実装されたアルゴリズムの大部分を並べ替えたりしたくないので、安全な方法で遅延初期化を引き続き使用する方法を見つけようとしました。
このトラバーサルは、 C++の 12 ページのパターンと二重チェックのロックの危険性に触発されていますが、より安価に実行しようとしています。
#pragma flush
また、コンパイラとプロセッサがそれらの間で操作の順序を変更することが許可されないハードシーケンスポイントとしても機能すると想定されています。
どのような問題が見られますか?
編集:バージョン 2、Vlads の回答を考慮しようとしています (3 番目のフラッシュを導入):
編集:バージョン 3、これはバージョン 2 とかなり同等であることがわかりました。これは、子自体を使用しているのではなく、有効性をチェックするためにプリミティブ フラグを使用しているためです。基本的には、子の作成とそのフラグへの書き込みの間のメモリ バリアに依存しています。
hibernate - プロキシを初期化できませんでした - セッションが再びありません
ページを表示すると、これらのエラー ログが表示されます
問題はセッションが閉じられていることです。しかし、根本的な原因がわからないほど頻繁にこのエラーが発生しない理由は本当にわかりません。
環境:
Tapestry5、JPA、Hibernate 3.3.2.GA
設定しました
web.xml でも
c++ - boost.serializationとレイジー初期化
ディレクトリツリーをシリアル化する必要があります。私はこのタイプに問題はありません:
しかし、シリアル化のために、私が他のタイプを必要とするコンテンツを含むディレクトリツリー:
シリアル化の瞬間に「std::pair」タイプのオブジェクトを初期化するにはどうすればよいですか?つまり、ファイルの一部を読み取り、crc32の合計を計算します。
上
hibernate - GWT 2.0 統合における Gilead での Hibernate Lazy 初期化例外の問題
プロジェクトの UI レイヤーとして GWT 2.0 を使用しています。サーバー側では、Hibernate を使用します。たとえば、これは私が持っている 2 つのドメイン エンティティです。
私の DAO 層では、Spring からHibernateDAOSupportを拡張するUserDAOを使用します。UserDAO には、すべてのユーザーを返すgetAllメソッドがあります。
また、私の DAO サービスでは、userDAO を使用してすべてのユーザーを取得するUserServiceを使用しています。
したがって、UsersService からすべてのユーザーを取得すると、返されたユーザー エンティティは Hibernate セッションから切り離されます。そのため、サービスから取得した Users インスタンスでgetRoles()メソッドを使用したくありません。
私が望むのは、RPC サービスのおかげでユーザーのリストを転送して、GWT を使用してクライアント側でユーザーの他の情報を使用できるようにすることです。
したがって、私の主な問題は、Users.roles の PersistentBag を単純なリストに変換して、RPC 経由でユーザーを転送できるようにすることです。そのために、Gilead Framework が解決策になり得ることを私は見てきました。
Gilead を使用するために、ドメイン エンティティを変更しました。現在、これらはnet.sf.gilead.pojo.gwt.LightEntityを拡張し、JavaBean 仕様を尊重しています。
サーバーでは、GwtRpcSpring フレームワーク ( http://code.google.com/p/gwtrpc-spring/ )のおかげで RPC 経由でサービスを公開しています。このフレームワークには、ギリアドの統合を容易にするアドバイスがあります。
私の applicationContext には、 Gilead の次の構成が含まれています。
メソッド doBasicProfiling のコードは次のとおりです。
この構成でアプリケーションを実行し、すべてのユーザーを取得する RPC サービスを使用すると、Hibernate から Users.roles から遅延初期化例外が発生します。
エンティティに PersistentBag が含まれていたとしても、Gilead ではドメイン エンティティをシリアル化できると思っていたので、がっかりしました。
それはギレアデの目標の一つではないのですか?
だから、誰かがギリアドを(GwtRpcSpringまたは他のソリューションで)構成して、Lazy例外なしでドメインエンティティを転送できるようにする方法を知っているでしょうか?
ご協力いただきありがとうございます。
シルヴァン