2016-10-04 17 views
0

Я пытаюсь использовать @Transactional библиотекой DeltaSpike, но у меня есть некоторые проблемы с ним. Давайте посмотрим:Использование EntityManager, уже созданного с помощью @Transactional DeltaSpike

1) У меня есть производитель DAO, который создает EntityManager с использованием настраиваемого классификатора.

@Produces 
    @PersistenceUnitName(value="") 
    public DAO criar(InjectionPoint ip) { 
     String persistenceUnit = ""; 
     EntityManager em = null; 

     for (Annotation annotation : ip.getQualifiers()) { 
      if (annotation instanceof PersistenceUnitName) { 

       persistenceUnit = ((PersistenceUnitName) annotation).value(); 
      } 
     } 
     em = Persistence.createEntityManagerFactory(persistenceUnit).createEntityManager(); 

     return new DAO(em); 
    } 

Теперь представьте себе, что я впрыснуть DAO в другом классе:

@Inject @PersistenceUnit(value="myPU01") 
    private DAO dao; 

продюсер называется и EntityManager создается с помощью myPU01. Но внутри класса DAO у меня есть метод сохранения и я хотел бы использовать @Transactional из DeltaSpike Lib:

@Transactional 
    public void save(AbstractEntity entidade) { 
     em.persist(entidade); 
     em.flush(); 
    } 

Проблема здесь живет. @Transactional попытается создать еще один EntityManager, но у меня уже есть EntityManager, созданный с помощью myPU01. Я не могу поместить persistenceUnitName рядом с «save».

+0

Вызов 'Persistence.createEntityManagerFactory (persistenceUnit)' для каждого созданного объекта кажется очень плохой идеей. –

ответ

0

Вам нужен собственный производитель для Entity-Manager (с полезной областью, например @TransactionScoped). Внесите этот Entity-Manager в ваши компоненты, а также в Producer-Method для вашего DAO (в качестве параметра). Это правила для CDI и no проблема/ограничение/... от DeltaSpike.

+0

FYI: Если бы вы спросили сообщество напрямую, вы получили бы ответ в течение нескольких часов. –

+0

Можете ли вы привести мне пример? – RonaldoLanhellas

 Смежные вопросы

  • Нет связанных вопросов^_^