L'utilisation de DataNucleus J'ai rencontré un problème dans la deuxième instruction INFO sous (2ème entrée à partir du bas).DataNucleus/NeoDatis - La connexion DB semble se fermer provoquant la perte des objets Persistable
Lorsque vous essayez de lire ou modifier un objet après persistant avec makePersistent()
, je reçois juste des valeurs nulles, le journal INFO indique que l'objet n'est plus géré par le gestionnaire de persistance (bien que je l'exécution de ces modifications immédiatement après l'appel makePersistent()
).
Je pense que la connexion à mon datastore (NeoDatis en mode intégré/fichier local) est en cours fermé, donc les arrêts de gestionnaire de persistance gérer. Mais j'utilise simplement la classe DataNucleus org.datanucleus.jdo.JDOPersistenceManagerFactory
pour créer la connexion.
Une idée de ce qui pourrait arriver? Suis-je sur la bonne voie en pensant que les messages de connexion fermée sont le problème?
FQDN raccourcies, et les journaux étrangers enlevés par souci de concision:
DEBUG DataNucleus.Persistence - Making object persistent : "[email protected]"
INFO DataNucleus.Persistence - Managing Persistence of Class : a.b.c.User [Table : (none), InheritanceStrategy : new-table]
DEBUG DataNucleus.Connection - Connection added to the pool : [[email protected]37b, null] for [email protected] in factory=ConnectionFactory:tx[[email protected]]
DEBUG DataNucleus.Datastore - Opening NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : [email protected]
DEBUG DataNucleus.Datastore.Persist - Object "[email protected]" being inserted into NeoDatis with all reachable objects
DEBUG DataNucleus.Datastore.Persist - Object "[email protected]" (id="15) persisted to NeoDatis
DEBUG DataNucleus.Datastore - Committing NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : [email protected]
DEBUG DataNucleus.Connection - Connection removed from the pool : [[email protected]37b, null] for [email protected] in factory=ConnectionFactory:tx[[email protected]]
DEBUG DataNucleus.Connection - The connection has been closed : [[email protected]37b, null]
DEBUG DataNucleus.Reachability - Performing check of objects for "persistence-by-reachability" (commit) ...
DEBUG DataNucleus.Cache - Object "[email protected]" (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 "[email protected]" (id="15") has a lifecycle change : "P_NEW"->"HOLLOW"
DEBUG DataNucleus.Transaction - Object "[email protected]" (id="15") being evicted from transactional cache
DEBUG DataNucleus.Transaction - Transaction committed in 7 ms
DEBUG DataNucleus.Lifecycle - Object "[email protected]" (id="15") has a lifecycle change : "HOLLOW"->"P_NONTRANS"
DEBUG DataNucleus.Persistence - Fetching object "[email protected]" (id=15) fields [authorities,createdFromIP,dateCreated,password,timeZoneID,username]
DEBUG DataNucleus.Datastore.Retrieve - Object "[email protected]" (id="15") being retrieved from NeoDatis
DEBUG DataNucleus.Connection - Connection added to the pool : [[email protected]3d71, null] for [email protected] in factory=ConnectionFactory:tx[[email protected]]
DEBUG DataNucleus.Datastore - Opening NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : [email protected]
DEBUG DataNucleus.Datastore - Committing NeoDatis ODB for "neodatis:file:database/neodatis_primary_datastore.odb" : [email protected]
DEBUG DataNucleus.Connection - Connection removed from the pool : [[email protected]3d71, null] for [email protected] in factory=ConnectionFactory:tx[[email protected]]
DEBUG DataNucleus.Connection - The connection has been closed : [[email protected]3d71, null]
INFO DataNucleus.Persistence - Request to populate fields of [email protected] but this object is no longer managed by NeoDatis so replacing with [email protected]
DEBUG DataNucleus.Datastore.Retrieve - Execution Time = 5 ms
Pouvez-vous clarifier un peu plus loin, ou peut-être poster des échantillons de code? – Cojones
Quelle plateforme utilisez-vous? Je peux vous dire beaucoup de choses à faire en dehors de Spring et de Data Nucleus, à part que mon problème a été résolu en ouvrant et fermant correctement les transactions. Il y a beaucoup de gestionnaires de transactions qui vont démarrer et arrêter des transactions pour vous, ou vous pouvez le faire vous-même (bien que je ne sache rien sur la gestion de transactinos dans DatanNucleus directement). Mais finalement le problème était que je ne commençais pas et arrêtais la transaction correctement. Tout cela vient de la mémoire car je suis allé dans une direction complètement différente après cela de toute façon. –
Merci, mais peu importe. J'ai compris que mon problème était que quand maven construit et teste, tout va bien, mais quand Eclipse se construit (avec l'aide de Maven soi-disant), il ne tisse pas toujours dans le code transactionnel au moment de la compilation. – Cojones