问题标签 [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 - java.lang.IllegalStateException:无法加载缓存项
当我将 Java 模块化添加到我的项目中时,从单元测试中引发了上述异常。我找不到此异常的解决方案。
我已添加到 MAVEN_OPTS
在surefire插件的配置中也是如此(无济于事),因为以下是堆栈跟踪的一部分:
我的项目是一个包含两个模块的 Maven 多项目:
这是堆栈跟踪第一部分的片段。任何帮助,将不胜感激。
信息:捕获并报告了异常。消息:java.lang.reflect.InaccessibleObjectException:无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,by te[],int,int,java.security.ProtectionDomain) 抛出java.lang.ClassFormatError 可访问:模块 java.base 没有“打开 java.lang”到模块 com.google.guice java.lang.IllegalStateException:无法在 com.google.guice@4.2.2/com 加载缓存项。 google.inject.internal.cglib.core.internal.$LoadingCache.createEntry(LoadingCache.java:79) 在 com.google.guice@4.2.2/com.google.inject.internal.cglib.core.internal.$LoadingCache .get(LoadingCache.java:34) 在 com.google.guice@4.2.2/com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116) 在 com.google。
java - 如何防止使用 guice-persist 和 @Transactional 重用 EntityManager?
根据这个问题,使用时guice-persist
,EntityManager
是事务范围的。如果我理解正确,这意味着EntityManager
将为每笔交易创建一个新的。使用时guice-persist
,建议使用JpaPersistModule
,它提供了所有的绑定,并简单地注入Provider<EntityManager>
到某个类中,如下所示:
注意:在这个答案中,它说不EntityManager
应该直接注入,而是使用Provider<EntityManager>
,以避免这个问题,因此注入Provider<EntityManager>
. 此外,通过查看JpaPersistService的代码,EntityManager
实例存储在ThreadLocal
. 同时,@Transactional
注解及其JpaLocalTxnInterceptor
对应物应确保在每次事务后在字段.set()
上.remove()
调用。ThreadLocal<EntityManager>
现在,我已经尝试过了,每个线程都有自己的EntityManager
. 但是,它似乎并没有被删除并重新设置,而是被重复用于后续事务,即没有清除 Hibernate 的一级缓存。
这是一个完整的示例,它从两个不同的线程(按顺序,而不是并行)插入和删除一些实体,这导致一个线程具有陈旧信息:
项目(一个简单的实体)
项目DAO
项目服务
主班
pom.xml
持久性.xml
1) 这是将 EntityManager 与 guice-persist 一起使用并解决不同线程可能具有不同状态的事实的常用方法吗?
2)如果没有,如何确保在每次事务后在 ThreadLocal 上重新设置 EntityManager?
guice - 如何调试 Guice 类/方法拦截器?
我正在尝试使用 guice-persist,但我无法让它在一个简单的测试用例中工作。这是一个从调度程序调用的通用请求处理程序:
我的测试处理程序是:
Guice 设置:
这将为所有带有注释的类和方法添加一个绑定拦截器@Transactional
测试用例:
问题:
为什么会这样?
我如何调试它以找出它发生的原因?有没有办法将日志记录添加到类/方法匹配器中?
guice - Google guice persist 抛出错误 No Persistence provider for EntityManager named test
嗨,我搜索了网络,但发现结果不足。如果您将我指向一个有帮助的网站,我会很高兴。我尝试使用 guice persist 启动 google guice,但不断收到 No Persistence provider for EntityManager named test 的错误。
这是我的persistence.xml
我尝试如下创建一个 AbstractModule
最后是我的 pom.xml
非常感谢您的帮助。问候克里斯