1

DataNucleus を使用すると、下の2 番目の INFO ステートメント(下から 2 番目のエントリ) に問題が見られます。

で永続化した後にオブジェクトを読み取ったり編集したりしようとするとmakePersistent()、null 値だけが取得されます。INFO ログは、オブジェクトが永続マネージャーによって管理されなくなったことを示しています(呼び出しの直後にこれらの編集を実行していmakePersistent()ますが)。

私の推測では、私のデータストア (ローカルの埋め込み/ファイル モードの NeoDatis) への接続が閉じられているため、永続化マネージャーはそれを管理しなくなります。しかし、接続を作成するために DataNucleusorg.datanucleus.jdo.JDOPersistenceManagerFactoryクラスを使用しているだけです。

なぜこれが起こるのでしょうか?クローズされた接続メッセージが問題であると考えて、私は正しい軌道に乗っていますか?

FQDN の短縮された不要なログは、簡潔にするために削除されています。

DEBUG DataNucleus.Persistence  - Making object persistent : "a.b.c.User@22a866a9"
INFO  DataNucleus.Persistence  - Managing Persistence of Class : a.b.c.User [Table : (none), InheritanceStrategy : new-table]
DEBUG DataNucleus.Connection  - Connection added to the pool : [o.dn.s.neodatis.ConnectionFactoryImpl$ManagedConnectionImpl@28f337b, null] for key=o.dn.ExecutionContextImpl@59c12050 in factory=ConnectionFactory:tx[o.dn.s.neodatis.ConnectionFactoryImpl@3b626c6d]
DEBUG DataNucleus.Datastore  - Opening NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : org.neodatis.odb.impl.main.LocalODB@13a183d2
DEBUG DataNucleus.Datastore.Persist  - Object "a.b.c.User@22a866a9" being inserted into NeoDatis with all reachable objects
DEBUG DataNucleus.Datastore.Persist  - Object "a.b.c.User@22a866a9" (id="15) persisted to NeoDatis
DEBUG DataNucleus.Datastore  - Committing NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : org.neodatis.odb.impl.main.LocalODB@13a183d2
DEBUG DataNucleus.Connection  - Connection removed from the pool : [o.dn.s.neodatis.ConnectionFactoryImpl$ManagedConnectionImpl@28f337b, null] for key=o.dn.ExecutionContextImpl@59c12050 in factory=ConnectionFactory:tx[o.dn.s.neodatis.ConnectionFactoryImpl@3b626c6d]
DEBUG DataNucleus.Connection  - The connection has been closed : [o.dn.s.neodatis.ConnectionFactoryImpl$ManagedConnectionImpl@28f337b, null]
DEBUG DataNucleus.Reachability  - Performing check of objects for "persistence-by-reachability" (commit) ...
DEBUG DataNucleus.Cache  - Object "a.b.c.User@22a866a9" (id="15") added to Level 2 cache (loadedFlags="[YYYYYYY]", relationFields="null")
DEBUG DataNucleus.Transaction  - Committing [DataNucleus Transaction, ID=Xid=, enlisted resources=[]]
DEBUG DataNucleus.Lifecycle  - Object "a.b.c.User@22a866a9" (id="15") has a lifecycle change : "P_NEW"->"HOLLOW"
DEBUG DataNucleus.Transaction  - Object "a.b.c.User@22a866a9" (id="15") being evicted from transactional cache
DEBUG DataNucleus.Transaction  - Transaction committed in 7 ms
DEBUG DataNucleus.Lifecycle  - Object "a.b.c.User@22a866a9" (id="15") has a lifecycle change : "HOLLOW"->"P_NONTRANS"
DEBUG DataNucleus.Persistence  - Fetching object "a.b.c.User@22a866a9" (id=15) fields [authorities,createdFromIP,dateCreated,password,timeZoneID,username]
DEBUG DataNucleus.Datastore.Retrieve  - Object "a.b.c.User@22a866a9" (id="15") being retrieved from NeoDatis
DEBUG DataNucleus.Connection  - Connection added to the pool : [o.dn.s.neodatis.ConnectionFactoryImpl$ManagedConnectionImpl@39673d71, null] for key=o.dn.ExecutionContextImpl@59c12050 in factory=ConnectionFactory:tx[o.dn.s.neodatis.ConnectionFactoryImpl@3b626c6d]
DEBUG DataNucleus.Datastore  - Opening NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : org.neodatis.odb.impl.main.LocalODB@621f6c18
DEBUG DataNucleus.Datastore  - Committing NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : org.neodatis.odb.impl.main.LocalODB@621f6c18
DEBUG DataNucleus.Connection  - Connection removed from the pool : [o.dn.s.neodatis.ConnectionFactoryImpl$ManagedConnectionImpl@39673d71, null] for key=o.dn.ExecutionContextImpl@59c12050 in factory=ConnectionFactory:tx[o.dn.s.neodatis.ConnectionFactoryImpl@3b626c6d]
DEBUG DataNucleus.Connection  - The connection has been closed : [o.dn.s.neodatis.ConnectionFactoryImpl$ManagedConnectionImpl@39673d71, null]
INFO  DataNucleus.Persistence  - Request to populate fields of a.b.c.User@22a866a9 but this object is no longer managed by NeoDatis so replacing with a.b.c.User@7cf1cdfb
DEBUG DataNucleus.Datastore.Retrieve  - Execution Time = 5 ms
4

1 に答える 1

1

私は新しいことを学ぶのが大好きですが、なぜそれが時々こんなに苦痛なプロセスでなければならないのですか? わかりました、これは質問ではなく答えです...

そのため、他の人が問題を確認するのに役立つ重要なログ行を削除しました。

1795 [main] INFO DataNucleus.Transaction  - Non-tx updates are being committed to the datastore

要点は、上記の問題は、トランザクションの外部でアクションを実行していたという事実によるものです。

実際、それは最初のステップに過ぎませんでした。実際に起こったことはPersistenceManager、トランザクションが開始されたものとは異なるものに対してアクションを実行していたことです。

Spring でトランザクションを管理していましたがjdoPersistenceManager.getPersistenceManager()、 を呼び出していたため、新しいPersistenceManagerインスタンスが生成されました (詳細なデバッグ セッションでこれが明らかになりました)。

PersistenceManager春のトランザクションで定義されたを取得するには、春を使用する必要がありました。最終的に、それはJdoDaoSupport私の DAO オブジェクトを拡張することを意味しました。

今は頭が良くなった気がしますが、どういうわけか学習には終わりがありません。

于 2010-11-15T15:41:16.543 に答える