我想拦截JPA调用(不需要触及实体类),因此需要$ subject?有没有人试过类似的东西?有没有办法覆盖openjpa中的javax.persistence.EntityManager.persist()方法
回答
在那里的每个容器都会创建一个代理EM,因此您可以轻松查看spring或glassfish如何操作。在persistence.xml中,您指定要使用的提供程序类,因此请将其指向您的实现。
但您可以使用ORM.xml文件添加事件侦听器 - JPA允许添加适用于所有实体的默认侦听器,因此您无需触摸其中的任何一个。 JPA尚未提供什么内容?
嗨克里斯, 其实我试过了,但是当我指定类的时候它并没有被拾起。我所做的就是,MyProvider扩展了openjpa.PersistenceProviderImpl。必须检查玻璃鱼/春天是如何做到的。 \ – 2013-04-29 17:32:08
您需要将您的提供程序类注册到Persistence类才能使用它。它需要一个META-INF \ services \ javax.persistence.spi.PersistenceProvider文件来指定您的提供者类,以便它知道它是与持久性单元一起使用的JPA提供程序。通过听众是更好的方法。 – Chris 2013-04-29 18:02:05
我已经将提供程序类名添加到persistence.xml和javax.persistence.spi.PersistenceProvider文件中。是的,通过听众是更好的方式,但出于某种原因,它没有被打。有没有办法检查我的听众是否在openjpa中注册? – 2013-04-30 01:47:20
您可以通过为orm.xml
文件中的所有实体指定默认实体侦听器来拦截JPA生命周期事件,如“onPersist”。没有必要触摸实体。例如:
class SomeListener {
@PrePersist
private void prePersist(Object entity){
//do some stuff before persisting the entity
}
@PostPersist
private void postPersist(Object entity){
//do some staff after persisting the entity
}
}
<entity-mappings>
<persistence-unit-metadata>
<persistence-unit-defaults>
<entity-listeners>
<entity-listener class="SomeListener">
<pre-persist method-name="prePersist"/>
<post-persist method-name="postPersist"/>
</entity-listener>
</entity-listeners>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings
- 1. 有没有办法来覆盖ConfigurationManager.AppSettings?
- 2. 有没有办法用反射“覆盖”一个方法?
- 3. 有没有办法覆盖blobstore中的现有Blob
- 4. 有没有办法覆盖AssemblyInfo.cs中的属性(例如AssemblyVersionAttribute)
- 5. 有没有办法覆盖模板中的表单值?
- 6. 有没有办法调用被覆盖的对象的基类方法? (C++)
- 7. 没有合适的方法来覆盖
- 8. 有没有办法在Ruby中覆盖实例变量查找?
- 9. 有没有办法来覆盖编译器::模板中定义()
- 10. 有没有办法在res/values中覆盖strings.xml?
- 11. 有没有办法在Ruby中覆盖<<运算符?
- 12. 有没有办法在单元测试中覆盖处理器?
- 13. 有没有办法让我的类覆盖jQuery主题的类?
- 14. 有没有办法让web.config的值覆盖app.config的值?
- 15. Checkstyle检查ParameterNumber没有覆盖方法
- 16. 有没有办法覆盖刷新按钮的动作?
- 17. 有没有办法覆盖的URL,而在骨干呼吁model.destroy
- 18. 有没有办法来防止覆盖的PHP设置?
- 19. 有没有办法自动覆盖类的ToString()?
- 20. 有没有办法在本地覆盖ZF2的application.config.php指令?
- 21. 有没有办法测试Google地图覆盖图的存在?
- 22. 有没有办法来覆盖[DataType(DataType.Password)]的错误消息
- 23. 有没有办法覆盖在Python 2.x的日志文件
- 24. 有没有办法可以覆盖Twitter的iframe?
- 25. 有没有办法将Rails测试覆盖率视为“覆盖的方法/未覆盖的方法”,而不是逐行?
- 26. Java私有方法覆盖
- 27. 覆盖私有方法
- 28. 有没有办法让覆盖对象不可点击?
- 29. asp.net MVC多租户:有没有办法来覆盖/影响User.Identity.IsAuthenticated?
- 30. 有没有办法覆盖OmniAuth默认配置?
嗨克里斯和dcernahoschi 感谢您的线索,都是对我来说是非常有用的信息。我认为这正是我需要的。我完全按照dcernahoschi的说法。但听众没有受到打击。我可以调试openjpa EntityManager等。我怎么知道我的听众是否已注册。或者给定配置中缺少什么? – 2013-04-29 15:04:51
请看看我在xml配置更新的答案。还添加了2个标签。 – dcernahoschi 2013-04-29 15:34:13
同样的结果。我把每个方法的日志放在listener中。我认为我的听众可能没有注册。在这种情况下,我正在处理Apache JUDDI的持久层。所以我在jar里添加了一个新创建的orm.xml文件。 META-INF /其中persistence.xml也驻留。看来它不是在那个地方采摘。任何想法为什么? – 2013-04-29 15:52:26