EJB3Unit функция сохранения не спасает мою сущность - PullRequest
1 голос
/ 11 февраля 2010

Я выполняю тесты на ejb3-проекте, используя тест сессионного компонента ejb3unit . Следующий тест не пройден с последней проверкой assertNotSame().

public void testSave() {
   Entity myEntity = new Entity();
   myEntity.setName("name1");
   myEntity = getBeanToTest().save(myEntity);
   assertNotSame("id should be set", 0l, myEntity.getId());
   // now the problem itself ...
   int count = getBeanToTest().findAll().size();
   assertNotSame("should find at least 1 entity", 0, count);
}

Итак, что происходит. Метод save (entity) доставляет мой «сохраненный» объект с установленным идентификатором. Но когда я попытаюсь найти объект, используя findAll(), он не даст ни одного результата. Как я могу заставить мой метод ServiceBean.save работать, чтобы найти постоянную сущность?

Редактировать

Мой ServiceBean выглядит так

 @Stateless
 @Local(IMyServiceBean.class)
 public class MyServiceBean implements IMyServiceBean {

   @PersistenceContext(unitName = "appDataBase")
   private EntityManager em;

   public Entity save(Entity entity) {
     em.merge(entity);
   }
   public List<Entity> findAll() {
     ... uses Query to find all Entities ..
   }
 }

и для ejb3unit ejb3unit.properties:

ejb3unit_jndi.1.isSessionBean=false
ejb3unit_jndi.1.jndiName=project/MyServiceBean/local
ejb3unit_jndi.1.className=de.prj.MyServiceBean

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Вот и мы ..

public void testSave() {
  Entity myEntity = .. // create some valid Instance
  // ...
  EntityTransaction tx = this.getEntityManager().getTransaction();
  try {
    tx.begin();
    myEntity = getBeanToTest().save(myEntity);
    tx.commit();
  } catch (Exception e) {
    tx.rollback();
    fail("saving failed");
  }
  // ...
}

Может быть, это поможет некоторым из вас.

0 голосов
/ 11 февраля 2010

Возможно, у вас нет запущенной транзакции, следовательно, ваша сущность не сохранена.

Один из вариантов - запустить транзакцию вручную, введя в тест @PersistenceContext, но лучше поискать автоматическое управление транзакциями в ejb3unit.

...