netbeans中的Affable Bean Java EJB Glassfish教程问题

时间:2013-09-16 15:35:28

标签: java java-ee netbeans glassfish ejb-3.0

我一直在关注位于here的NetBeans站点上的affableBean教程。 我遇到了一个无法提交采购订单(checkout.jsp)的问题。当我提交表单数据时,我收到http 500状态并出现以下错误:

  

警告:EJB5184:在EJB OrderManager上调用期间发生系统异常,方法:public int session.OrderManager.placeOrder(java.lang.String,java.lang.String,java.lang.String,java.lang。串,java.lang.String中,java.lang.String中,cart.ShoppingCart)   警告:EJB5184:在EJB OrderManager上调用期间发生系统异常,方法:public int session.OrderManager.placeOrder(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java .lang.String,java.lang.String中,cart.ShoppingCart)   警告:javax.ejb.EJBException       at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215)       at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113)       at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)       在com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)       at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)       at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)       at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89)       at com.sun.proxy。$ Proxy163.placeOrder(Unknown Source)       会话。 EJB31_Generated_ OrderManager _Intf _ Bean _。placeOrder(未知来源)       在controller.ControllerServlet.doPost(ControllerServlet.java:201)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:688)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:770)       在org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)       在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)       在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)       在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)       在org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)       在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)       在org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)       在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)       at com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call(ContainerMapper.java:317)       at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)       在com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)       at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)       在com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)       在com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)       at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)       在com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)       在com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)       在com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)       at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)       在com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)       在com.sun.grizzly.ContextTask.run(ContextTask.java:71)       at com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:532)       在com.sun.grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:513)       在java.lang.Thread.run(Thread.java:724)

     

引起:javax.validation.ConstraintViolationException:Bean   执行自动Bean时违反了验证约束   回调事件验证:' prePersist'。请参考嵌入式   ConstraintViolations了解详情。在   org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.validateOnCallbackEvent(BeanValidationListener.java:90)     在   org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.prePersist(BeanValidationListener.java:62)     在   org.eclipse.persistence.descriptors.DescriptorEventManager.notifyListener(DescriptorEventManager.java:698)     在   org.eclipse.persistence.descriptors.DescriptorEventManager.notifyEJB30Listeners(DescriptorEventManager.java:641)     在   org.eclipse.persistence.descriptors.DescriptorEventManager.executeEvent(DescriptorEventManager.java:200)     在   org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectClone(UnitOfWorkImpl.java:4257)     在   org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNotRegisteredNewObjectForPersist(UnitOfWorkImpl.java:4234)     在   org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.registerNotRegisteredNewObjectForPersist(RepeatableWriteUnitOfWork.java:513)     在   org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4176)     在   org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)     在   com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)     在session.OrderManager.addOrder(OrderManager.java:88)at   session.OrderManager.placeOrder(OrderManager.java:56)at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:606)at   org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)     在   org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)     在   com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)     at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)     在   com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)     在com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)at   com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)     在   com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:606)at   com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)     在   com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)     在   com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)     在   com.sun.ejb.containers.BaseContainer .__截距(BaseContainer.java:5360)     在   com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)     在   com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)     ......还有30多个

ControllerServlet的第201行是: int orderId = orderManager.placeOrder(name,email,phone,address,cityRegion,ccNumber,cart);

OrderManager的第88行和第56行是:em.persist(customer);                                   em.persist(顺序);

在运行调试会话时,似乎persist方法在两种情况下都具有空值。我的结论是因为没有数据库生成的id所以它持久化方法具有空值。 我不明白我现在做什么来保存我的数据库表中的数据。 谢谢你的回复。

1 个答案:

答案 0 :(得分:1)

customer_order表不期望datecreated的null值(尽管它提供了一个默认的时间戳)。 CustomerOrder ejb还在dateCreated上放置@NotNull注释。然而,第201行未传递CustomerOrder对象构造的dateCreated值。

所以你要么做以下其中一项   - 禁用@NotNull注释(虽然不好主意!)  要么   - 在CustomerOrder类的默认构造函数中提供dateCreated值。

public CustomerOrder() {
    // set dateCreated to timestamp ...
    java.util.Date date= new java.util.Date();
    dateCreated = new Timestamp(date.getTime());
}

埃德加