У меня проблема с использованием entityManager, управляемого EJB Container.Исключение null null указателя EntityManager из Persistence Context Java EE
В моем ухе у меня есть 3 модуля:
-область - Есть классы сущностей и DAO Реализация с интерфейсами как EJBs.
-services - Там у меня была бы логика, связанная с запросами обработки, вызывая исключения бизнес-класса на основе исключений библиотек (например, исключения баз данных).
-Rest Services - Там у меня были бы конечные точки отдыха для приема и отправки некоторых бизнес-объектов.
Таким образом, основная проблема заключается в использовании EJB в слое услуг, я могу объявить класс конечной точки отдыха, класс обслуживания и класс DAO как EJB. Но таким образом я не могу поймать исключения, связанные с базой данных, потому что, поскольку я краснею, я получаю исключение transactionRollback в контейнере EJB, предоставленном WildFly, и это исключение существует при совершении транзакции.
Я думал об удалении аннотации @Stateless из класса сервиса, но когда я это делаю, контейнер EJB не вводит entityManager в мой класс DAO. Также я попытался использовать аннотацию @Inject в классе службы, но все равно получаю то же исключение NullPointer в entityManager в Dao Class.
Ниже я добавляю реализации примеры кода в моем проекте:
DAO Класс:
@Stateless
public class CardDaoImpl implements CardDao {
@PersistenceContext(unitName = "test")
protected EntityManager em;
public CardBase addCardToDatabase(CardBase card) {
em.persist(card);
return card;
}
Service Class (здесь я хочу обрабатывать businessExceptions):
@Stateless
public class TestService implements TestServiceIf {
@EJB(beanInterface = CardDao.class)
private CardDao dao;
@Override
public CardBase addCard(CardBase card) {
dao.addCardToDatabase(card);
return card;
}
}
Rest Конечная точка класса :
@Stateless
@Path("/test")
public class Test {
@EJB(beanInterface = TestServiceIf.class)
private TestServiceIf service;
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String addCard() {
CardBase card = new SampleCard();
//Setting card object fields//
service.addCard(card);
return "Hello";
}
}
Это только одно решение, которое я обнаружил. Но что с метанием моих businsesExceptions? Может быть, это не хорошая практика бросить их в этот уровень сервиса?
что ваш сервер и ваш EJB версии? К сожалению, по словам сервера, у вас есть особенности даже для спецификации, как EJB. – davidxxx
Я использую Wildfly 10. В модулях этого сервера приложений я нашел EJB3.2 api –