- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 DataNucleus 我在下面的第二个 INFO 语句(从底部开始的第二个条目)中发现了一个问题。
在使用 makePersistent()
持久化对象后尝试读取或编辑该对象时,我只得到空值,INFO 日志表明该对象不再由持久化管理器管理(尽管我在 makePersistent()
调用后立即执行这些编辑)。
我的猜测是,与我的数据存储(本地嵌入/文件模式下的 NeoDatis)的连接正在关闭,因此持久性管理器停止管理它。但我只是使用 DataNucleus org.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
最佳答案
我喜欢学习新事物,但为什么有时这是一个如此痛苦的过程?好吧,这是一个答案,不是一个问题......
所以,我确实删除了一个可以帮助其他人看到问题的关键日志行:
1795 [main] INFO DataNucleus.Transaction - Non-tx updates are being committed to the datastore
重点是,上述问题是由于我在事务之外执行操作造成的。
实际上这只是第一步,真正发生的是我正在针对与事务启动时不同的 PersistenceManager
执行操作。
我使用 Spring 管理事务,但我调用了 jdoPersistenceManager.getPersistenceManager()
,这产生了一个新的 PersistenceManager
实例(详细的调试 session 发现了这一点)。
我应该使用 spring 来获取 spring 事务定义的 PersistenceManager
。最终,这意味着在我的 DAO 对象中扩展JdoDaoSupport
。
我现在感觉更聪明了,但不知何故,学习永无止境。
关于java - DataNucleus/NeoDatis - 数据库连接似乎关闭,导致持久对象丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177421/
我的代码符合要求,但是当我尝试运行 DataNucleus 增强器时,我无法完成后编译步骤。我想我丢失了一个 jar 文件,但是是哪个??我已经包含了错误和 pom.xml 我从谷歌页面复制说明:
当为 Google App Engine 运行 Maven 构建时,我收到构建错误: org.apache.maven.plugin.MojoExecutionException: The DataN
我在我的 appengine java 应用程序中使用查询游标,如下所述: https://cloud.google.com/appengine/docs/java/datastore/jdo/que
考虑使用具有以下持久性结构的 DataNucleus 的应用程序: 你有一个类有两个属性,比如 created (Date) 和 lastUpdate (Date):当这个类的对象将被提交时,你如何自
对于上下文,客户端我使用 MVP 模式,因此具有 One 列表的 View 仅知道 ID,并且当我的新 Many 收到时服务器,我希望能够使用“setOneId”或 ID 设置为所需值的空 One 对
我有这些注释: public class Account { @Persistent(defaultFetchGroup = "true", dependent = "false") @Column(
使用 DataNucleus,我很高兴使用抽象基类为子类提供“长”ID(请注意原始类型)。 当调整 example from JPA 时我想到了参数化基类。目的是支持不同的 ID 类型,例如 Stri
我试图用 datanucleus jdo(和 neodatis 作为数据存储)制作一些基本的持久类。 我有以下三个类(从教程中复制) 库存.java @PersistenceCapable publi
DataNucleus 支持缓存协调吗?如果是,我该如何启用和使用它? 我还没有积极使用 DataNucleus,但如果它支持缓存协调,我想考虑它。 背景:多个缓存实例使用缓存协调来相互通知已更改的实
我有两个不同的数据源,我需要两个不同的 PersistenceManagerFactory。这一点我总是可以通过编写一个 persistence.xml 文件来实现。但我希望以编程方式表示它。尽管第二
如何使用 Eclipse maven 项目解决此问题: Plugin execution not covered by lifecycle configuration: org.datanucleus
我正在尝试将 JDBC webapp 移动到 JDO DataNucleus 2.1.1。 假设我有一些看起来像这样的类: 公共(public)类职位{ 私有(private)整数 id; 私有(pr
我正在尝试将 Maven 项目迁移到 Bazel,但在 Datanucleus 增强方面遇到了麻烦。 后 jar -file 已构建,Datanucleus 会查看其中的内部并执行一些字节码操作以增强
使用 JDO 和 DataNucleus 如果我有一个 @PersistenceCapable 类,例如 @PersistenceCapable public class Topic {
如果我没看错的话,它是说NeoDatis 不支持 JDO 获取组。我的解释正确吗? 在 NeoDatis 的 DataNucleus 页面上: The following are known limi
我有一个包含 Map 的类,但是当我尝试保留这个实体时,会抛出空指针异常。我的代码/设置可能有什么问题? 我的类(class): @PersistenceCapable(detachable="tru
我创建了一个转换器插件,如描述的 here对于 X 型。 然后我创建了该类 class A { @Basic(fetch = FetchType.Eager) X x; } 当我尝试保
DataNucleus.JDO - All messages general to JDO DataNucleus.JPA - All messages general to JPA DataNucl
我正在使用带有 JDO(DataNucleus) 的 GAE 1.7.0。当我保留一个具有集合属性的类时,已删除的集合成员不会从数据存储中删除。我从分离的副本中删除集合成员。新成员已正确添加,现有成员
我正在尝试使用 DataNucleus 和 MySQL 创建一个 Maven 项目。但是,当我尝试构建和 mvn datanucleus:schema-create项目,我失败了。我不明白为什么。 这
我是一名优秀的程序员,十分优秀!