问题标签 [guice-persist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1442 浏览

mysql - Maven 休眠与 Guice-Persist

我正在尝试使用 Maven 组织一个 GWT(准确地说是 GWT 平台)项目,该项目使用 Guice-persist 将我的数据对象从 Eclipse 映射回 MySQL。我没有运气。

我的代码基于 GWTP 基本示例的 Maven 配置,我能够开始工作。现在我将 Hibernate 依赖项添加到pom.xml文件中,我似乎无法让它再次成功运行。目前,我收到以下错误:

我在设置注入器时创建了我的 PersistModule,如下所示:

我的持久文件如下所示:

我的pom.xml文件如下:

如您所见,单位名称匹配。此外,我将persistance.xml文件保存在src/main/webapp/META-INF项目目录中。我尝试使用该/src/main/webapp/目录作为war文件的基础以及其中的匹配目录来运行项目/target/,但都无法克服此错误。

任何指针将不胜感激!我已经盯着这个看了2天了。

0 投票
1 回答
171 浏览

java - 在不启动事务的情况下通过 Hibernate 对 MySQL 数据库运行查询有什么影响?

在我看来,我们有一些代码尚未启动事务,用于只读操作,我们通过 JPA/Hibernate 和直接 SQL 的查询似乎可以工作。我们的框架会打开一个 hibernate/jpa 会话,但是对于遗留代码中的一些地方,我们发现没有打开任何事务。

似乎最终发生的事情是代码通常只要不使用 EntityManager.persist 和 EntityManager.merge 就可以运行。但是偶尔(可能是 1/10)次 servlet 容器会因此错误而失败...

据我所知,我们的应用程序代码中只有少数几个在查询之前没有启动事务的地方会出现这个问题。有没有其他人认为可能是导致这种行为的非事务性查询运行?

仅供参考,这是我们的堆栈...

-Guice -Guice-Persist -Guice-Servlet -MySql 5.1.63 -Hibernate/C3P0 4.1.4.Final -Jetty

0 投票
1 回答
1617 浏览

jpa - 如何使用 google guice 向 hibernate.ejb.interceptor 注入服务?

我在使用 google guice 向预定义的拦截器注入服务时遇到问题。

我想要做的是用来emptyinterceptor拦截实体的变化。拦截器本身工作正常,问题是我不知道如何向它注入服务。注入本身在整个应用程序中都可以正常工作。

持久性.xml

我是如何尝试注入的

JpaPersistModule 是如何启动的

如何启动服务

0 投票
2 回答
1003 浏览

java - EJB 覆盖 JPA javax.persistence

我对 Java EE 领域还很陌生,所以请原谅我的无知;我继承了一个使用 guice-persist 和 hibernate 来处理 ORM 的应用程序。

我正在尝试使用CriteriaQuery,但我发现我的jaxax.persistence.EntityManager似乎是这个接口(来自 EJB),而不是我想要的接口(来自 JPA),所以我无法使用createQuery(CriteriaQuery).

这是一个 Maven 项目,我不清楚这个 EJB 代码是从哪里来的——我从 Guice-Persist 和 Hibernate 中看到的一切都显示了 JPA 接口,而不是 EJB 接口,所以我不知道这个 EJB 包在哪里来自。

这里有什么想法吗?我是否有一个杂散的 Maven 依赖项将 EJB 引入我的项目,或者听起来我误解了持久层并且实际上在我的应用程序中需要 EJB?

如果您让我知道您需要什么,我将很乐意发布更多信息。

编辑:

经过仔细检查,我开始怀疑我的“远程”项目有一个格式错误的 pom.xml。下面的依赖树。

RemoteR 应该是一个自主运行的 CXF SOAP Web 服务。我在这个项目中想要的只是“客户端”部分,它能够向其他地方托管的 Web 服务发出请求。因此,在我当前的项目中看到 spring 依赖项让我怀疑我可能在这里遇到了一些 JPA 冲突。

0 投票
3 回答
17375 浏览

jpa - Guice JPA - “此连接已关闭。” 错误

在 DB 断开空闲连接或 DB 关闭并备份后,我在我的 webapp 中收到以下错误:

当这开始时,我得到一个

但在那之后它只是:

问题是:我已经设置了 testOnBorrow,所以我希望只获得打开的连接。

如果这有帮助:池通常包含好连接和坏连接,问题似乎随着时间的推移而消失,但我让服务器运行了 >12 小时,但仍然返回了坏连接。重新启动后一切正常(一段时间)。

我已经对问题进行了更多调试,似乎池返回了错误的连接,例如,如果我在 DB 上杀死了所有连接后,我得到:

然后是通常的东西 - 从池中返回被杀死的连接。问题是:这是应用程序问题吗?

我尝试通过 JMX 清除池,但这似乎没有任何效果。另一个奇怪的事情是,即使应用程序显然没有做任何事情(通过线程转储检查),JMX bean 仍显示 7 个活动连接和 0 个空闲连接。当我执行一个需要访问数据库的请求时,我会立即得到响应(尽管没有可用的空闲连接),但之后 JMX 显示 7 个活动连接和 0 个空闲连接。

PS。也许我遗漏了一些明显的东西,这是我的连接管理问题?我正在使用通过 persistence.xml 配置的 JPA EntityManager,所以也许我做错了什么并且使用后连接没有正确关闭(返回)?

0 投票
1 回答
1236 浏览

java - 将 Guice Persist 与 JTA / bitronix 一起使用时遇到问题

我们有一个已经使用 JPA 和 guice-persist 的现有 j2se 项目。现在,因为我们要添加 JMS 功能,所以需要 2-phase-commit 和 JTA。我们将使用 bitronix 事务管理器,因为没有容器(如 spring)。

据我了解,我们要做的第一件事就是将持久化单元的事务类型从RESSOURCE-LOCAL更改为JTA,因为我们希望数据库事务投票支持提交而不是提交。收集所有选票后,提交在第 2 阶段完成。

使用 guice-persist,我们将@Transactional注解用于应该在单个事务中运行的方法。提供JPAPersistModule了一个 EnitiyManagerFactory ,它用于 guice-persist 内部类,就像JpaLocalTxnInterceptor包装了带注释的方法一样。

现在我得到了例外

因为对提供的实体管理器的JpaLocalTxnInterceptor调用。getTransaction()

我现在很困惑。有什么方法可以将 guice-persist 与 JTA 一起使用,或者我们真的必须从项目中删除 guice-persist 吗?或者,如果我们想做 JTA(使用 Bitronix),是否有任何替代 guice-persist 的方法?

0 投票
1 回答
13943 浏览

java - Hibernate 4 connection.autocommit=false 被忽略

我们在 tomcat 6 上有一个使用 Java、hibernate 4、guice 3、guice-persist 3 的应用程序

connection.autocommit 在 hibernate.cfg.xml 文件中配置为 false:

但是在部署时,日志文件显示自动提交设置为 true:

为什么休眠忽略自动提交属性?我们应该关心吗?(正如我们的测试向我们展示的那样,正确注释的方法中的异常会回滚,所以一切看起来都很好)

0 投票
2 回答
2557 浏览

java - JPA 和 Guice-persist:永久打开的连接问题?

使用 Hibernate、c3p0、Guice 和 Guice-persist,我们遇到了奇怪的问题,即事务后数据连接没有释放到池中。

似乎它与JpaPersistService的完成方式有关,将 EntityManager 缓存在 threadLocal 变量中:

我的问题是:

  • 我们是否应该删除 guice-persist 并将其替换为创建新 entityManager 的东西,然后在每次需要时关闭它(如此建议)?
  • 或者缓存 entityManager 是要走的路,我们应该用别的东西来解决我们的问题?

(我们的问题:1)mysqld在经典的8h超时后终止mysql连接,因此entityManager不再可用。可以通过开启c3p0 keep-alive来解决,但由于应用程序有时会长时间不使用,我们希望避免保持无用的活动连接。2)似乎每个EntityManager都做了一些缓存,entite在entityManager之间是不连贯的。没看怎么解决)

0 投票
4 回答
2476 浏览

google-app-engine - Google App Engine 上的 JPA:调用persist(...) 时,是否总是在事务中发生?

在我的应用程序中,我坚持一个具有许多无主子级的实体。

似乎persist对持久化实体和所有子级的调用发生在事务内部,因为当我不启用跨组事务时出现错误(并且子级作为父实体生活在不同的实体组中)。

是否有可能以非交易方式进行持久化?

(如果需要此信息:我正在使用 Guice 将请求范围内的请求注入Provider<EntityManager>到我的服务对象中。)

添加:

这是一个简单的测试用例:

现在,当我这样做时:

我得到:

造成的:

javax.persistence.PersistenceException:在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:197) 在 org.datanucleus.api.jpa.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:298) 的非法参数。 .jpa.JpaServlet.doGet(JpaServlet.java:23) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org. mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 在 com.google.appengine.api.socket.dev。 DevSocketFilter.doFilter(DevSocketFilter.java:74) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development。ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java: 34) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 在 org.mortbay .jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain .doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.StaticFileFilter。doFilter(StaticFileFilter.java:125) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 在 org.mortbay.jetty.security.SecurityHandler .handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在 org. mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:409) 在 org.mortbay.jetty .handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java:326) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 在 org. mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread。QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 原因:java.lang.IllegalArgumentException:需要明确指定跨组事务,请参阅 TransactionOptions.Builder.withXG 找到 Element { type: "Department" id: 17 } 和元素{类型:“员工”ID:18}

在 com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:70) 在 com.google.appengine 的 com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:33)。 com.google.appengine.api.datastore.FutureHelper$CumulativeAggregateFuture.get(FutureHelper.java:142) com.google.appengine.api.datastore.FutureHelper$ 上的 api.utils.FutureWrapper.get(FutureWrapper.java:94) TxnAwareFuture.get(FutureHelper.java:218) 在 com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:86) 在 com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java: 71) 在 com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:32) 在 com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:85) 在 com.google.appengine.datanucleus.WrappedDatastoreService.put(WrappedDatastoreService.java:112) 在 com.google.appengine.datanucleus.EntityUtils.putEntitiesIntoDatastore(EntityUtils.java:766) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler .insertObjectsInternal(DatastorePersistenceHandler.java:314) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:218) 在 org.datanucleus.state.JDOStateManager.internalMakePersistent(JDOStateManager.java:2381) 在 org.datanucleus。 state.JDOStateManager.flush(JDOStateManager.java:3778) 在 org.datanucleus.store.types.sco.SCOUtils.validateObjectForWriting(SCOUtils.java:1518) 在 com.google.appengine.datanucleus.scostore.AbstractFKStore.validateElementForWriting(AbstractFKStore.爪哇:396) 在 com.google.appengine.datanucleus.scostore.FKListStore.internalAdd(FKListStore.java:195) 在 com.google.appengine 的 com.google.appengine.datanucleus.scostore.FKListStore.validateElementForWriting(FKListStore.java:1036) .datanucleus.scostore.FKListStore.addAll(FKListStore.java:114) 在 org.datanucleus.store.mapped.mapping.CollectionMapping.postInsert(CollectionMapping.java:134) 在 com.google.appengine.datanucleus.StoreFieldManager.storeRelations(StoreFieldManager .java:809) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObjectsInternal(DatastorePersistenceHandler.java:367) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:218) 在 org.datanucleus.state。 JDOStateManager.internalMakePersistent(JDOStateManager.java:2381) 在 org.datanucleus.state.JDOStateManager.flush(JDOStateManager.java:3778) 在 org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) 在 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) 在org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3751) at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) at org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) at org.datanucleus.TransactionImpl .internalPreCommit(TransactionImpl.java:398) 在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager。关闭(JPAEntityManager.java:193)... 36 更多还有 36 个还有 36 个还有 36 个还有 36 个datanucleus.state.JDOStateManager.flush(JDOStateManager.java:3778) at org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) at org.datanucleus.ObjectManagerImpl .flush(ObjectManagerImpl.java:3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在 org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl. java:398) 在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java :193) ... 36 更多datanucleus.state.JDOStateManager.flush(JDOStateManager.java:3778) at org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) at org.datanucleus.ObjectManagerImpl .flush(ObjectManagerImpl.java:3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在 org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl. java:398) 在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java :193) ... 36 更多JDOStateManager.flush(JDOStateManager.java:3778) at org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl .java:3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在 org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398)在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) 。 .. 还有 36 个JDOStateManager.flush(JDOStateManager.java:3778) at org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl .java:3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在 org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398)在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) 。 .. 还有 36 个3778) 在 org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) 在 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) 在 org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3751) 在 org. datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) at org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398) at org.datanucleus.TransactionImpl.commit (TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 还有 36 个3778) 在 org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) 在 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) 在 org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3751) 在 org. datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) at org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398) at org.datanucleus.TransactionImpl.commit (TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 还有 36 个java:3888) 在 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) 在 org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398) 在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl .close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 36 更多java:3888) 在 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) 在 org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398) 在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl .close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 36 更多3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在 org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398) 在 org. datanucleus.TransactionImpl.commit(TransactionImpl.java:287) at org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 36更多的3751) 在 org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) 在 org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) 在 org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:398) 在 org. datanucleus.TransactionImpl.commit(TransactionImpl.java:287) at org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 36更多的datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 36 更多datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) ... 36 更多

造成的:

java.lang.IllegalArgumentException:需要显式指定跨组事务,请参阅 TransactionOptions.Builder.withXG 发现 Element { type: "Department" id: 17 } 和 Element { type: "Employee" id: 18 }

在 com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:70) 在 com.google.appengine 的 com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:33)。 com.google.appengine.api.datastore.FutureHelper$CumulativeAggregateFuture.get(FutureHelper.java:142) com.google.appengine.api.datastore.FutureHelper$ 上的 api.utils.FutureWrapper.get(FutureWrapper.java:94) TxnAwareFuture.get(FutureHelper.java:218) 在 com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:86) 在 com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java: 71) 在 com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:32) 在 com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:85) 在 com.google.appengine.datanucleus.WrappedDatastoreService.put(WrappedDatastoreService.java:112) 在 com.google.appengine.datanucleus.EntityUtils.putEntitiesIntoDatastore(EntityUtils.java:766) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler .insertObjectsInternal(DatastorePersistenceHandler.java:314) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:218) 在 org.datanucleus.state.JDOStateManager.internalMakePersistent(JDOStateManager.java:2381) 在 org.datanucleus。 state.JDOStateManager.flush(JDOStateManager.java:3778) 在 org.datanucleus.store.types.sco.SCOUtils.validateObjectForWriting(SCOUtils.java:1518) 在 com.google.appengine.datanucleus.scostore.AbstractFKStore.validateElementForWriting(AbstractFKStore.爪哇:396) 在 com.google.appengine.datanucleus.scostore.FKListStore.internalAdd(FKListStore.java:195) 在 com.google.appengine 的 com.google.appengine.datanucleus.scostore.FKListStore.validateElementForWriting(FKListStore.java:1036) .datanucleus.scostore.FKListStore.addAll(FKListStore.java:114) 在 org.datanucleus.store.mapped.mapping.CollectionMapping.postInsert(CollectionMapping.java:134) 在 com.google.appengine.datanucleus.StoreFieldManager.storeRelations(StoreFieldManager .java:809) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObjectsInternal(DatastorePersistenceHandler.java:367) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:218) 在 org.datanucleus.state。 JDOStateManager.internalMakePersistent(JDOStateManager.java:2381) 在 org.datanucleus.state.JDOStateManager.flush(JDOStateManager.java:3778) 在 org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering(ObjectManagerImpl.java:3888) 在 org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3811) 在org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3751) at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:4141) at org.datanucleus.ObjectManagerImpl.transactionPreCommit(ObjectManagerImpl.java:428) at org.datanucleus.TransactionImpl .internalPreCommit(TransactionImpl.java:398) 在 org.datanucleus.TransactionImpl.commit(TransactionImpl.java:287) 在 org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1090) 在 org.datanucleus.api.jpa.JPAEntityManager。在 com.example 处关闭(JPAEntityManager.java:193)。jpa.JpaServlet.doGet(JpaServlet.java:23) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.mortbay .jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 在 com.google.appengine.api.socket.dev.DevSocketFilter .doFilter(DevSocketFilter.java:74) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123 ) 在 com.google.appengine.tools.development.HeaderVerificationFilter 的 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)。doFilter(HeaderVerificationFilter.java:34) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java: 61) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 在 org.mortbay.jetty .servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter (ServletHandler.java:1157) 在 com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 在 org.mortbay.jetty.security .SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 在 org.mortbay.jetty.handler.HandlerWrapper。 org.mortbay 的 com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:409) 的句柄(HandlerWrapper.java:152)。jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org .mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212 ) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run( QueuedThreadPool.java:582)java:542) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 在 org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread。 QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)java:542) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 在 org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread。 QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 运行(SelectChannelEndPoint.java:409)在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 运行(SelectChannelEndPoint.java:409)

这就是为什么我一直认为这persist会发生在交易中,尽管我还没有明确地开始交易。

以下是来自 DataNucleus 的相关调试消息:

ObjectManagerImpl@e4eb585 08:38:18,027 调试 [DataNucleus.Persistence] - ObjectManager.internalFlush() 进程开始使用有序刷新 - 2 个脏对象 08:38:18,105 调试 [DataNucleus.Persistence] - 管理类的持久性:com.example。 jpa.Employee [表:com.example.jpa.Employee,InheritanceStrategy:new-table] 08:38:18,136 调试 [DataNucleus.Persistence] - 管理类的持久性:com.example.jpa.Department [表:com.example .jpa.Department, InheritanceStrategy : new-table] 08:38:18,316 DEBUG [DataNucleus.Persistence] - 字段“com.example.jpa.Department.employees”正在为“cascade-persist”保留。08:38:18,331 INFO [DataNucleus.Persistence] - 对象“com.example.jpa.Department@55b7bf86”有一个集合“com.example.jpa.Department.employees” 然而元素“com.example.jpa.Employee@95d0a50”没有所有者集。管理关系并设置所有者。08:38:18,333 WARN [DataNucleus.MetaData] - com.example.jpa.Employee.department 的元数据警告:com.example.jpa.Employee.department 的元数据错误:数据存储不支持连接和因此不能接受将相关对象放在默认提取组中的请求。该字段将在首次访问时延迟获取。您可以通过在配置中设置 datanucleus.appengine.ignorableMetaDataBehavior 属性来修改此警告。NONE 值将使警告静音。ERROR 值会将警告转换为异常。08:38:18,354 DEBUG [DataNucleus.Persistence] - ObjectManager.internalFlush() 进程完成 08:38:18,355 DEBUG [DataNucleus.

0 投票
1 回答
478 浏览

java - 如何配置 JpaPersistModule?

这是我的情况。我有一个带有基本 JPA 属性的“persistence.xml”。我还有几个额外的属性需要注入到 JpaPersistModule 中。这些属性(连接字符串等)来自外部组件,它们本身受一些外部 guice 模块的约束。

这导致了明显的问题 - 我无法创建 java.util.Properties 类的实例以传递给 JpaPersistModule,因为在配置绑定时我不知道这些属性。处理这个问题的最佳方法是什么?

PS通过setter明确地将属性传递给guice模块的整个想法对我来说似乎很奇怪。伙计,这是依赖注入,不是吗?