Вопросы учебника по Affable Bean Java EJB Glassfish - PullRequest
1 голос
/ 03 апреля 2012

Я следую руководству по affableBean с сайта NetBeans, расположенного здесь .

Код Репо здесь .

Я столкнулся с проблемой, когда не могу отправить заказ на покупку (checkout.jsp). Когда я отправляю данные формы, я получаю статус http 500 и следующие ошибки:

WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public java.util.Map session.OrderManager.getOrderDetails(int)
WARNING: javax.ejb.EJBException at controller.ControllerServlet.doPost(ControllerServlet.java:184)
Caused by: java.lang.NullPointerException at session.OrderManager.getOrderDetails(OrderManager.java:111)

Строка 184 ControllerServlet имеет вид: Map orderMap = orderManager.getOrderDetails (OrderId);

Строка 111 OrderManager равна : Customer customer = order.getCustomer ();

При выполнении сеанса отладки кажется, что виновником является строка в OrderManger внутри метода getOrderDetails () . Насколько я могу судить, строка должна заполнять объект customer клиентом заказов.

Поиск источника. getCustomer () из класса Entity CustomerOrder:

private Customer customer;    
...
public Customer getCustomer() {
        return customer;
    }

Кажется достаточно простым, он возвращает объект Customer. Что меня удивляет, так это то, почему я получаю исключение нулевого указателя, почему этот объект пуст?

Я полагаю, что это может быть связано с неправильностью моего класса сущностей, это, в свою очередь, будет означать, что моя база данных, которую я перенаправляю из диаграммы сущностей, будет неправильной, я на правильном пути?

Edit:

После удаления блока try catch из метода placeOrder () в классе ordermanager из-за этого изменяя возвращаемое значение на 0.

У меня возникли дополнительные проблемы:

WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public int session.OrderManager.placeOrder(java.lang.String,....,cart.ShoppingCart)
WARNING: javax.ejb.EJBException
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'.**

at session.OrderManager.addCustomer(OrderManager.java:58) (*em.persist()*)
    at session.OrderManager.placeOrder(OrderManager.java:42)   (*Customer customer = addCustomer()*)

В настоящее время я читаю, как перебрать ошибки и найти, какое ограничение я терплю неудачу.

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

Отладка метода addCustomer . Я вижу, что идентификатор клиента равен нулю, это нормально? я предполагаю, что это так, как поле базы данных идентификатора установлено в автоинкремент, но все же кажется странным иметь настраиваемое поле идентификатора в сущности вообще в этом случае.

Edit3: Оказывается, автоматически сгенерированные теги [NotNull] в моих классах сущностей приводили к сбою проверки bean-компонента, удаляли теги, и все работает нормально.

1 Ответ

1 голос
/ 03 апреля 2012

Единственная возможная причина, которую я вижу для NPE, это то, что order сам по себе является нулевым объектом.

Так как заказ дан:

CustomerOrder order = customerOrderFacade.find(orderId);

Мой вывод таков: порядок с этим orderId просто отсутствует в БД.

...