Affable Bean Java EJB Glassfish教程问题

时间:2012-04-03 13:11:15

标签: java glassfish ejb

我一直在关注位于here的NetBeans站点的affableBean教程。

代码回购here

我遇到了一个无法提交采购订单(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)
  

ControllerServlet的第184行是: Map orderMap =   orderManager.getOrderDetails(订单ID);

     

OrderManager第111行:客户客户= order.getCustomer();

在运行调试会话时,罪魁祸首似乎是 getOrderDetails()方法中的OrderManger中的行。据我所知,该行应该用订单的客户填充客户对象。

查看。 getCustomer ()方法的来源是来自CustomerOrder Entity类:

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

看起来很简单,它返回Customer对象。令我困惑的是为什么我会收到一个nullpointer异常,为什么这个对象为空?

我认为可能是因为我的实体类不正确,这反过来意味着我从实体图中转发的数据库不正确,我是否在正确的道路上?

修改

ordermanager 类中的 placeOrder()方法中删除了try catch块 由于它将返回值修改为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 方法我看到客户ID为null,这没关系吗?我假设它是因为ID数据库字段被设置为自动递增,但在这种情况下,在实体中根本没有可设置的id字段似乎很奇怪。

EDIT3: 事实证明,我的实体类中的自动生成的[NotNull]标签导致bean验证失败,删除了标签并且工作正常。

1 个答案:

答案 0 :(得分:1)

我看到NPE抛出的唯一可能原因是order本身是一个空对象。

由于订单由以下人员发出:

CustomerOrder order = customerOrderFacade.find(orderId);

我的结论是,数据库中没有orderId的订单。