【发布时间】:2013-09-20 20:00:41
【问题描述】:
我一直在关注位于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 在 com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215) 在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113) 在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901) 在 com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045) 在 com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994) 在 com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222) 在 com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89) 在 com.sun.proxy.$Proxy163.placeOrder(未知来源) 在会话中。EJB31_Generated_OrderManager_Intf_Bean_.placeOrder(未知来源) 在控制器.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) 在 com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 在 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) 在 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) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 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) 在 session.OrderManager.placeOrder(OrderManager.java:56) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 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) 在 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) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 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.__intercept(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(order);
在运行调试会话时,似乎persist 方法在这两种情况下都具有空值。我的结论是,由于数据库没有生成id,因此它的persist 方法具有空值。 我不明白我现在做什么来将数据保存在我的数据库表中。 谢谢回复。
【问题讨论】:
-
@BalusC - 先生,感谢您的建议,我很抱歉我没有正确地写它我编辑了我的问题,我希望你现在能很好地理解。我需要帮助,没有人可以帮助我谢谢先生回复
标签: java jakarta-ee netbeans glassfish ejb-3.0