Tenemos el administrador genérico básico que es heredado por todos los administradores. El administrador de Base está anotado con @ Anotaciones Transactional.Administradores de transacciones múltiples con anotación @Transactional
Hay 2 grupos de transaccionales servicios:
x.y.service1.*
- han de ser gestionados portransactionManager1
x.y.service2.*
- tienen que ser gestionados portransactionManager2
Cómo las transacciones pueden ser configuradas sin nessesity para anular TODOS los métodos transaccionales y especificar el administrador de transacciones?
@Transactional(readOnly = true)
public abstract class GenericManagerImpl<D extends IGenericDao, T extends BaseObject, PK extends Serializable>
implements IGenericManager<T, PK> {
protected D dao;
@Autowired
public void setDao(D dao) {
this.dao = dao;
}
@Transactional(readOnly = false)
public void save(T object) {
dao.save(object);
}
@Transactional(readOnly = false)
public void remove(T object) {
dao.remove(object);
}
}
@Service
class UserManagerImpl
extends GenericManagerImpl<IUserDao, User, Long>
implements IUserManager {
// Everything is OK. User is managed by txManager1
}
@Service
class BillingManagerImpl
extends GenericManagerImpl<IBillingDao, Billing, Long>
implements IBillingManager {
@Override
@Transactional(readOnly = false, value="txManager2") // <--have to override method only to specify txManager
public void save(final Billing billing) {
super.save(billing);
}
@Override
@Transactional(readOnly = false, value="txManager2") // <--have to override method only to specify txManager
public void remove(final Billing billing) {
super.remove(billing);
}
}
Lo más probable es que necesito para combinar con la anotación AOP @Transactional.
En realidad, lo que quiero es:
1) Para poder configurar transacciones (indicador de solo lectura, propagación, aislamiento, etc.) con la anotación @Transactional.
2) definir la estrategia para elegir administrador de transacciones fuera de mis clases (AOP utilizando, por ejemplo)
xyservice1. * -> usar txManager1
xyservice2. * -> usar txManager2
¿Es posible ?
He leído solo y no tengo métodos de solo lectura en el administrador de bases. tengo 2 opciones aquí: 1) tener un nivel de clase de anotación @Transactional (readOnly = true) y el nivel de método de anotación @Transactional (readOnly = false) por cada NO leer sólo los métodos 2) tienen nivel de clase de anotación @Transactional (readOnly = false) y la anotación de nivel de método @Transactional (readOnly = true) para cada método de solo lectura En cualquier caso, tendré que anular las anotaciones transaccionales a nivel de método para los servicios que deben ser gestionados por txManager2 – Seyran