问题标签 [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 回答
1356 浏览

jpa - 具有多个持久性单元的 Guice JpaRepositoryModule

我在 persistence.xml 上声明了我的 2 个 PU,如下所示:

配置 JpaPersistenceModule 如下:

绑定存储库类:

存储库类用 @Transacional 注释,声明它是 PU:

我只有一个实体映射在“anotherJpaUnit”上,这样声明:

但是当我启动我的应用程序时,Guice 初始化会引发错误:

表“_user”仅存在于“anotherJpaUnit”上,为什么它会尝试与“MyJpaUnit”绑定?我不知道我在这里做错了什么。任何人都有多个 PU 工作的 JpaRepositoryModule 示例?

0 投票
1 回答
168 浏览

guice - 扩展 Guice JPA 支持以提供事务挂钩

我发现自己需要一个事务提交后挂钩。我正在使用事件存储,并且需要保证在提交事务之前不会发布事件,因为事件处理程序可能需要来自前一个事务的数据。

我正在使用带有 JPA 模块的 Guice 来连接所有内容。我想我可以很容易地通过更改JpaLocalTxnInterceptorguice-persist 模块来添加一个钩子,我可以停止使用@Transactional并手动执行它,但更愿意隐藏这个样板,有更好的解决方案吗?

0 投票
1 回答
2197 浏览

java - c3p0 连接过期

我正在使用 c3p0 0.9.2.1、GWT 2.6.0、SQLServer 2012。

我从 c3p0 收到间歇性 stackTrace

所以,它告诉我我没有在我指定的超时时间内完成连接

我不明白这怎么可能。我的代码很简单...

启动时,25 个线程启动,每个线程调用 getSomeQueueData()。大约 1/10 次失败。我检查调试输出,发现每个线程都按预期在几秒钟内成功进入和退出该方法,那么为什么 c3p0 告诉我连接仍在使用中?澄清一下,@Transactional 是 guice,而不是 spring。

---编辑---我花了很多时间研究这个问题,它只会变得更加令人费解......

我还将 c3p0 更新为 0.9.5

出于某种原因,@Transactional 似乎不稳定。偶尔它不会被调用。我检查通过我的 DAO 的每个方法的堆栈跟踪,并且每隔一段时间,它表明拦截器处理已被跳过??。

在我的 DAO 中,我有一个 getSession() 方法,当我添加任意 sleep 100ms 时,几乎每个 stackTrace 都表明注释已被跳过。

此外,这些设置几乎每次都会出现问题

...这些设置使问题很少发生

就我的测试显示而言,完全删除 c3p0 似乎可以完全解决问题。

我已经读过,对于 guice 使用反射的情况,使用 finally 是需要提防的,我一直小心避免这种情况。这些症状太奇怪了,我无法缩小范围。有时 guice 似乎没有正确绑定我的类,有时似乎是 c3p0 错误。

哦,我已经检查过我使用的是 com.google.inject.persist.Transactional。

0 投票
1 回答
706 浏览

caching - EclipseLink + JPA Guice 持久化和重新部署

我有一个基于 EclipseLink + JPA Guice Persist 的基础设施

当我重新部署应用程序时,我总是遇到缓存实体的缓存问题,我必须重新启动服务器(Oracle Weblogic 11g)。这个问题在这篇文章中得到了处理:https ://bugs.eclipse.org/bugs/show_bug.cgi ?id=326552 但是,也许不是错误¿?¿? ...

我设法解决了以下问题:

最初我将所有内容集中在一个 GuiceModule 中:

1.创建模块JAPersist

2.调用persistenceService.start()的Initializer类的绑定

一切正常....但正如我所说的重新部署时保持缓存实例

我是如何解决的?

  1. 我改变了方法 JPAInitializer

    公共静态类 JPAInitializer {

    /li>
  2. 我创建了一个停止服务的方法 stop () ..但是 WTF!我被迫将注入的持久性服务保存在静态变量中:((

  3. 从作为入口点的 guice / listener 过滤器调用停止应用程序时取消部署(onContextDestroyed)

    公共无效 contextDestroyed(ServletContextEvent servletContextEvent) { JPAInitializer.stop();
    }

现在,当我重新部署时,没有缓存问题或问题,也无需重新启动服务器

它是这样工作的,但我不知道是否可以创建一个静态实例 PesistenceService.,所以我试图找到另一种方法来调用停止.....

有什么建议吗?

0 投票
1 回答
165 浏览

hibernate - 使用 Warp-Persist 升级 Guice 的依赖问题

我们有一个使用带有 warp-servlet 和 warp-persist 的 Guice 1.0 的应用程序,我们想升级到 Guice 2 或 3。但是,我们遇到了一个复杂的依赖关系网络。

有谁知道一种简单的方法(尽可能接近直接替换)使经纱持久与较新的 Guice 一起工作,或者使 Guice-persist 与直接的 Hibernate 一起工作?

  • Warp-persist 需要 warp-servlet
  • Warp-servlet 和 warp-persist 仅支持 Guice 1.0
  • Guice-persist 似乎是 warp-persist 的替代品,但它只支持 JPA,而我们直接使用 Hibernate(有大量基于标准的代码遗留下来,这使得移植到 JPA 变得不简单)。
  • Guice-persist 还声称有一种支持非 JPA 数据访问的方法,但似乎没有任何关于此的文档。
  • Warp-persist 似乎不支持 Hibernate 4,所以我们也无法升级 Hibernate。
0 投票
1 回答
3215 浏览

java - Guice Provider vs EntityManager

I was trying to get simple webapp working with Guice and JPA on Jetty, using the persistence and servlet guice extensions.

I have written this Service implementation class:

}

And this is my servlet (annotated with @Singleton):

When I run this it works, and I get the name sent to the client, but when I look at the log I see that there is no DML generated for the insertion and selection from postgresql does not return any results, which means it wasn't really persisted.

I debugged through the code and I saw that JpaLocalTxnInterceptor called txn.commit().

Then I made a change to PersonServiceImpl and used Provider<EntityManager> instead of just EntityManager and it worked as expected. Now I don't really understand why and it's probably because I don't really understand the idea behind Provider. On the Guice wiki page it says:

Note that if you make MyService a @Singleton, then you should inject Provider instead.

However, my PersonServiceImpl is not a @Singleton so I am not sure why it applies, perhaps it's because of the Servlet?

I would really appreciate if you could clear this out for me.

0 投票
1 回答
4013 浏览

java - 在运行时配置 HikariCP + Hibernate + GuicePersist(JPA)

我有一个 java8 桌面应用程序,它使用 GuicePersist、Hibernate 和 HikariCP 与 Postgres DB 进行通信。我已经成功地让我的应用程序使用这个 META-INF/persistence.xml 向数据库发送/接收数据:

棘手的部分是在运行时配置我的 Guice JpaPersistModule。据我所知,我应该能够通过在 Map 对象中设置属性来覆盖 META-INF/persistence.xml 文件中的属性,如下所示:

然后是 jpaModule.properties(properties),然后将这一切传递给 GuicePersist。

我在地图中尝试了一些不同的属性名称组合,但到目前为止我还没有运气。我还查看了有关此主题的 pgsimpledatasource 文档和 hikariCP 文档,但我的数据源属性仍然没有设置。

有人可以帮忙吗?谢谢一堆。

0 投票
2 回答
3627 浏览

hibernate - 使用休眠从断开的数据库连接中恢复

我无法从断开的数据库连接中恢复。我的测试用例使用以下库。
guice-persist 4.0
Hibernate core 4.3.1
HikariCP-java6-2.3.9(连接池)。

我的测试在循环中运行一个简单的读取,每次读取之间有一个小的睡眠。

Dao 像这样获取它的 entityManager

guice 模块是这样绑定的

我的 persistence.xml 将事务类型定义为“RESOURCE-LOCAL”。

我有一些光设置,但我不确定这些是否相关

当测试循环读取时,我通过从任务管理器停止服务来中断 SQLServer 连接。如果当时循环不在 simplRead() 方法中,它会在下一次尝试读取时优雅地处理错误,并在服务再次启动时重新连接。但是,如果它在服务停止时是在 simpleRead() 方法中,它会失败并且永远不会恢复。第一次失败报如下


org.hibernate.TransactionException: JDBC begin transaction failed: javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed: at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1771) at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:64) at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:66) at net.impro.portal.server.model.dao.TestConnectionStuff.testConnectionBroken(TestConnectionStuff.java:40) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) at org.testng.TestRunner.privateRun(TestRunner.java:767) at org.testng.TestRunner.run(TestRunner.java:617) at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) at org.testng.SuiteRunner.run(SuiteRunner.java:240) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1197) at org.testng.TestNG.runSuitesLocally(TestNG.java:1122) at org.testng.TestNG.run(TestNG.java:1030) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) Caused by: org.hibernate.TransactionException: JDBC begin transaction failed: at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:76) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162) at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1431) at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:61) ... 26 more Caused by: java.sql.SQLException: I/O Error: Connection reset by peer: socket write error at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1059) at net.sourceforge.jtds.jdbc.TdsCore.submitSQL(TdsCore.java:905) at net.sourceforge.jtds.jdbc.JtdsConnection.setAutoCommit(JtdsConnection.java:2291) at com.zaxxer.hikari.proxy.ConnectionProxy.setAutoCommit(ConnectionProxy.java:334) at com.zaxxer.hikari.proxy.ConnectionJavassistProxy.setAutoCommit(ConnectionJavassistProxy.java) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:72) ... 29 more Caused by: java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at java.io.DataOutputStream.write(Unknown Source) at net.sourceforge.jtds.jdbc.SharedSocket.sendNetPacket(SharedSocket.java:717) at net.sourceforge.jtds.jdbc.RequestStream.putPacket(RequestStream.java:570) at net.sourceforge.jtds.jdbc.RequestStream.flush(RequestStream.java:518) at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1046) ... 34 more ...

而且因为现在没有正确清理,后续请求会像这样失败

我发现很难确定哪一层是造成这个问题的原因。根据我的阅读,连接池应该测试断开的连接并清理内容,但我怀疑它的 guice-persist 永远具有与其线程本地对象关联的损坏的 EntityManager 引用。当然,这也可能是我使用它们的方式。

编辑

经过进一步调查,我注意到如果我在每次测试读取之间等待 > 1000 毫秒,那么代码就会按预期运行。我得到下面的 StackTrace,然后在我恢复 SQLServer 服务后,它很高兴地重新连接。任何小于 1000 毫秒的时间,我都会在原始帖子中收到上面列出的错误。似乎休眠没有以相同的方式处理 IO/错误,并且连接永远处于断开状态。

0 投票
1 回答
282 浏览

java - 使用 Guice 实现 Restlet

随着Guice的引入,Java 开发向前迈出了一大步。我的项目严重依赖Warp-persist及其后继者GuicePersist来实现持久性。

但是 Guice 和 Restlet 的使用似乎不匹配。看起来它只能@Inject从 servlet 级别进行会话和持久化工厂。对于事务处理,我需要 Guice 来创建 Restlet ServerResources,它使我能够@Inject持久化诸如@TransactionalUnitOfWork 之类的东西。

  • 在 Restlet 的路线图上,Guice 有什么变化吗?

  • 是否有将 Guice 与 Restlet 结合使用的最佳实践?

问候,

罗兰·伯克

0 投票
0 回答
580 浏览

jpa - 带有运行时配置的 guice JpaPersistModule

我需要与JpaPersistModule. 此数据源由 guice 注入器提供。

现在的问题是我必须在配置阶段构建模块,但数据源仅在运行时可用。

目前我有以下代码:

我已经检查过,似乎 jpa 属性映射到处都是通过引用注入的,所以我的运行时更改应该变得可见,但是如果将来发生变化怎么办?

解决此类冲突的正确方法是什么?