问题标签 [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.
jpa - 具有多个持久性单元的 Guice JpaRepositoryModule
我在 persistence.xml 上声明了我的 2 个 PU,如下所示:
配置 JpaPersistenceModule 如下:
绑定存储库类:
存储库类用 @Transacional 注释,声明它是 PU:
我只有一个实体映射在“anotherJpaUnit”上,这样声明:
但是当我启动我的应用程序时,Guice 初始化会引发错误:
表“_user”仅存在于“anotherJpaUnit”上,为什么它会尝试与“MyJpaUnit”绑定?我不知道我在这里做错了什么。任何人都有多个 PU 工作的 JpaRepositoryModule 示例?
guice - 扩展 Guice JPA 支持以提供事务挂钩
我发现自己需要一个事务提交后挂钩。我正在使用事件存储,并且需要保证在提交事务之前不会发布事件,因为事件处理程序可能需要来自前一个事务的数据。
我正在使用带有 JPA 模块的 Guice 来连接所有内容。我想我可以很容易地通过更改JpaLocalTxnInterceptor
guice-persist 模块来添加一个钩子,我可以停止使用@Transactional
并手动执行它,但更愿意隐藏这个样板,有更好的解决方案吗?
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。
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类的绑定
一切正常....但正如我所说的重新部署时保持缓存实例
我是如何解决的?
我改变了方法 JPAInitializer
公共静态类 JPAInitializer {
/li>我创建了一个停止服务的方法 stop () ..但是 WTF!我被迫将注入的持久性服务保存在静态变量中:((
从作为入口点的 guice / listener 过滤器调用停止应用程序时取消部署(onContextDestroyed)
公共无效 contextDestroyed(ServletContextEvent servletContextEvent) { JPAInitializer.stop();
}
现在,当我重新部署时,没有缓存问题或问题,也无需重新启动服务器
它是这样工作的,但我不知道是否可以创建一个静态实例 PesistenceService.,所以我试图找到另一种方法来调用停止.....
有什么建议吗?
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。
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.
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 文档,但我的数据源属性仍然没有设置。
有人可以帮忙吗?谢谢一堆。
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/错误,并且连接永远处于断开状态。
java - 使用 Guice 实现 Restlet
随着Guice的引入,Java 开发向前迈出了一大步。我的项目严重依赖Warp-persist及其后继者GuicePersist来实现持久性。
但是 Guice 和 Restlet 的使用似乎不匹配。看起来它只能@Inject
从 servlet 级别进行会话和持久化工厂。对于事务处理,我需要 Guice 来创建 Restlet ServerResources
,它使我能够@Inject
持久化诸如@Transactional或UnitOfWork 之类的东西。
在 Restlet 的路线图上,Guice 有什么变化吗?
是否有将 Guice 与 Restlet 结合使用的最佳实践?
问候,
罗兰·伯克
jpa - 带有运行时配置的 guice JpaPersistModule
我需要与JpaPersistModule
. 此数据源由 guice 注入器提供。
现在的问题是我必须在配置阶段构建模块,但数据源仅在运行时可用。
目前我有以下代码:
我已经检查过,似乎 jpa 属性映射到处都是通过引用注入的,所以我的运行时更改应该变得可见,但是如果将来发生变化怎么办?
解决此类冲突的正确方法是什么?