10

何かが洗い流されていません。何が起こっているかの簡単な例:

def testDemo() {
    def person = new Person(...)
    person.save(flush: true)

    println "Number of people after save: " + Person.all.size()

    def dummyList = [1, 2, 3, 4, 5]

    GParsPool.withPool { num ->
        println "Number of people after withPool: " + Person.all.size()
        dummyList.eachParallel {
            println "Number of people after eachParallel " + Person.all.size()
            Person.withTransaction {
            ...

これは以下を出力します:

Number of people after save: 1
Number of people after withPool: 1
Number of people after eachParallel: 0

データを永続化するためにセッションとトランザクションで何かをする必要があるのか​​ 、それともこれが GPars のバグなのかわかりません。基礎となる休止状態レベルで何が起こっているのでしょうか?

最近作成された Person を並列クロージャー内に表示したいと思います。

4

2 に答える 2

12

Gpars はマルチスレッド ツールであり、ドメイン クラスに注入された休止状態セッションはスレッドセーフではありません。

これらのメソッドを使用するか、SessionFactory を直接呼び出してみてください。

  • withNewSession
  • withNewTransaction

スレッドごとにセッションを開くと、非常にコストがかかり、データベースが新しい接続であふれてしまう可能性があることに注意してください。

于 2012-12-31T02:21:17.413 に答える
1

私は最近、同様の問題を抱えています。私が理解しているように、スレッドが休止状態セッションをバインドできなかったようです。私もそれを機能させることができません。本当に必要ない場合は、GPar から永続性を扱うコードを書いてみてください。それが私がそれを機能させる方法です。

于 2012-12-30T05:51:00.043 に答える