Grailsアプリで作成/編集/削除操作をログに記録するために、Grails Audit Logging Pluginを使用しています。
実際のロギング (ログを DB に保存する) が別のスレッドで実行されるのか、それともリクエストに対する応答 (偶発的にいくつかのレコードを変更するなど) がロギングの完了後にのみ返されるのかを知っている人はいますか? ドキュメントまたは外部のどこにも、これについて何も見つかりませんでした。
Grailsアプリで作成/編集/削除操作をログに記録するために、Grails Audit Logging Pluginを使用しています。
実際のロギング (ログを DB に保存する) が別のスレッドで実行されるのか、それともリクエストに対する応答 (偶発的にいくつかのレコードを変更するなど) がロギングの完了後にのみ返されるのかを知っている人はいますか? ドキュメントまたは外部のどこにも、これについて何も見つかりませんでした。
Hibernate Event Systemは、このプラグインによって内部的に使用されます。メッセージはブロック方式で処理されるため、ロギングが完了すると応答が受信されます。
再現するのは非常に簡単です。カスタムの Hibernate リスナーを作成するだけです。
import org.hibernate.event.PostInsertEvent;
import org.hibernate.event.PostInsertEventListener;
import org.hibernate.event.PostUpdateEvent;
import org.hibernate.event.PostUpdateEventListener;
class HibernateDummyListener implements PostInsertEventListener, PostUpdateEventListener {
public void onPostInsert(final PostInsertEvent event) {
println "Hibernate: ON POST INSERT"
//No delay
}
public void onPostUpdate(final PostUpdateEvent event) {
println "Hibernate: ON POST UPDATE"
Thread.sleep(10000)
}
}
...そしてresources.groovy:
beans = {
hibernateDummyListener(HibernateDummyListener)
hibernateEventListeners(HibernateEventListeners) {
listenerMap = ['post-insert':hibernateDummyListener,
'post-update':hibernateDummyListener]
}
}