Java (DataNucleus)JDO-服务/存储库分层和@Transactional
对于个人教育,我目前正在围绕Java (DataNucleus)JDO-服务/存储库分层和@Transactional,java,persistence,jdo,datanucleus,transactional,Java,Persistence,Jdo,Datanucleus,Transactional,对于个人教育,我目前正在围绕Guice开发一个小应用程序框架,通过Spring等在幕后工作来学习 简介 仅出于上下文的考虑,以下是我到目前为止所拥有的并计划这样做的内容,您会对我试图归档的内容有一种感觉: 上下文(核心) ApplicationContext/-Configuration 模块(自动发现,设置Guice绑定) 扩展 配置:@Config 语言环境:@Locale和i18n服务 资源:@Property,@Resource和一些提供对资源的轻松访问的类 坚持:问题-我们开始了
Guice
开发一个小应用程序框架,通过Spring
等在幕后工作来学习
简介
仅出于上下文的考虑,以下是我到目前为止所拥有的并计划这样做的内容,您会对我试图归档的内容有一种感觉:
上下文(核心)
- ApplicationContext/-Configuration
- 模块(自动发现,设置
绑定)Guice
- 配置:
@Config
- 语言环境:
和i18n服务@Locale
- 资源:
,@Property
和一些提供对资源的轻松访问的类@Resource
- 坚持:问题-我们开始了李>
DataNucleus
)用于持久层。设置PersistenceManagerFactory
很简单,以基本方式使用它也很简单。但是,我的目标是典型的服务/存储库层体系结构,例如:
- 人
- PersonRepository(JDO)
- PersonService(事务,使用PersonRepository)
class PersonService {
@Transactional(TxType.REQUIRED)
public Set<Person> doX() {
// multiple repository methods called here
}
}
class PersonRepository {
private PersistenceManagerFactory pmf;
public Set<Person> doX() {
try (PersistenceManager pm = pmf.getPersistenceManager()) {
pm.....
}
}
}
class个人服务{
@事务性(TxType.REQUIRED)
公共集doX(){
//这里调用了多个存储库方法
}
}
类PersonRepository{
私有PersistenceManagerFactory pmf;
公共集doX(){
try(PersistenceManager pm=pmf.getPersistenceManager()){
下午。。。。。
}
}
}
困难
支持DataNucleus
(RESOURCE\u LOCAL
)以及pm.currentTransaction()
事务,我希望同时支持这两种事务(用户不必在配置之外区分这两种事务)。无论如何,他都不必担心事务处理,这是注释的方法拦截器的一部分(我猜)JTA
- 我希望支持可以放在服务层方法上的
(来自@Transactional
)注释。知道注释本身在JDO中不可用,我认为它也可以使用JTA
- 存储库层应该如何“说话”
?每个方法是否应该从JDO
获取一个PersistenceManager工厂
,然后将其关闭(如示例中所示),还是应该获得一个PersistenceManager(代理)
注入(而不是工厂)?每个方法是否都应该关闭PersistenceManager(在两种情况下)?我想这对PersistenceManager
事务不起作用,因为一个事务绑定到一个RESOURCE\u LOCAL
PersistenceManager
class PersonService {
@Transactional(TxType.REQUIRED)
public Set<Person> doX() {
// multiple repository methods called here
}
}
class PersonRepository {
private PersistenceManagerFactory pmf;
public Set<Person> doX() {
try (PersistenceManager pm = pmf.getPersistenceManager()) {
pm.....
}
}
}
- 我有一个
(使用jtTransactionAlinterceptor
)和一个pmf.getPersistenceManagerProxy
(非常类似于使用jtTransactionAlinterceptor
)ThreadLocal
- 我知道我的问题可能没有预期的那么清楚,并且混合了服务/存储库层问题(我认为这是我的主要问题)和事务处理问题(我认为,一旦我了解如何在存储库层正确使用PMF/PM,我就可以解决这些问题)
- 这里没有作用域a
等。我只希望第一个requestscope
方法调用是整个事情的起点(这就是问题的关键:这是不可能的,PMF/PM必须在之前确定作用域,我必须将我的想法引导到那个方向吗?)@Transactional