問題タブ [staleobjectstate]

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.

0 投票する
2 に答える
1759 参照

java - org.hibernate.StaleObjectStateException をキャッチできません

StaleObjectStateException をキャッチできないのでしょうか? 私は StaleObjectStateException で catch ブロックを持っているので、メソッドがこのエラーをスローすると、この catch ブロックに来ますが、同じ例外が再びスローされます。この例外が発生する理由はわかっていますが、例外をキャッチしてさらに処理を進めたいと考えています。

0 投票する
0 に答える
678 参照

hibernate - grails、行が別のトランザクションによって更新または削除されました

updateコントローラーメソッドでいくつかのサービスを呼び出そうとしています。残念ながら、これは a にStaleObjectStateExceptionなり、サービスメソッドを「単に」呼び出しているだけなので、その理由はよくわかりません。transactional

例外は次のとおりです。

..そして、コントローラーの update メソッドの重要な部分:

2 つのサービス方法:

0 投票する
1 に答える
139 参照

grails - grails はいつオブジェクトの古さをチェックしますか?

私は Grails 2.5.1 を使用しています。サービス メソッドを呼び出すコントローラーがあり、StaleObjectStateException. サービス メソッドのコードにobj.save()は、例外を無視するだけの呼び出しの周りに try キャッチがあります。ただし、これらの競合のいずれかが発生するたびに、ログにエラーが出力され、クライアントにエラーが返されます。

私の GameController コード:

私の GameService コード:

スタック トレースは、私のメソッドから例外が生成されたことを示しGameController.finishていますが、それは私のメソッド内のコードを指していませんGameService.scoreGame。これは、オブジェクトの保存/更新が試行されたときではなく、トランザクションが開始されたときに Grails が古さをチェックすることを意味しますか?

私はこの例外に何度も遭遇しましたが、通常はオブジェクト グラフをトラバースしないことで修正します。

たとえば、この場合、game.rounds参照を削除して次のように置き換えます。

しかし、それは、トランザクションが作成されたときに古さがチェックされないことを意味し、それは常に実用的であるとは限らず、私の意見では、Grails の遅延コレクションの目的を無効にします。すべての関連付けを自分で管理したい場合は、そうします。

Pessimistic and Optimistic Lockingに関するドキュメントを読みましたが、コードはそこの例に従います。

Grails (GORM) が古さをチェックする方法/タイミング、およびそれを処理する場所について詳しく知りたいですか?

0 投票する
1 に答える
181 参照

java - コンカレント API LayoutLocalService.addLayout が LayoutSetLocalService で StaleObjectStateException をスローする

アップデート

Liferay チケットが承認されました。開発中の解決策: https://issues.liferay.com/browse/LPS-82954

状況

私のコンテキストは、liferay ポートレットを介した liferay レイアウトの並行インポートです。春で構築します。Liferay dxpで実行しているとき; レイアウトを追加するための API 呼び出しは、StaleObjectStateException をスローします。( https://github.com/liferay/liferay-portal/blob/d969e0e839db9ea64267f7bff0a76be93cd26fa0/portal-impl/src/com/liferay/portal/service/impl/LayoutLocalServiceImpl.java )

この例外は、対応する LayoutSet で API が内部的に更新を行うときに発生します (レイアウトが追加されたそのグループの PageCount を少し前に更新します)。

これは、シングル スレッド実行では発生しません。

行動

  1. まず、その通話を同期しました..より良い結果はありません
  2. その間、トランザクション自体が同期実行ブロック内にない可能性があるため、スレッドを同期するだけでは役に立たないということを読みました。したがって、トランザクションの注釈も追加しました。.. より良い結果なし

これまでのところ、次の洞察を得ました。

  • LayoutSetLocalService.updatePageCount() にバグがあります: 更新された LayoutSet が返されません.. したがって、(Liferay 7/DXP が導入された場合) LayoutSet の mvcc バージョンはインクリメントされません。..しかし、これが私の状況に影響を与えることはありませ)。

  • それに取り組む機会があるかどうか、だれかが私にヒントを与えることができますか?

  • それとも、これは楽観的ロックの結果であり、私はそれと一緒に暮らす必要がありますか?
  • スレッドを作成するときにパズルを見逃しましたか? たぶんいくつかの奇妙な..私の休止状態のセッションを構成する...こと?

コードの抜粋

-> 利用可能なテスト プロジェクト: https://github.com/andrebiegel/liferay-layout-issue.git