Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] NullPointerException returned using a StoredProcedureCall class

Hi James,

Thanks a lot for your interesting.

I did what you say but using a Function instead of a Stored Procedure.

Here is the code of the function,

CREATE OR REPLACE FUNCTION ALMACEN.fn_Obtener_MaxId
RETURN NUMBER
IS
  result NUMBER;
BEGIN
  SELECT MAX(ID_PEDIDOUSUARIO) INTO result
  FROM ALMACEN.PEDIDO_USUARIO;
  return(result);
EXCEPTION
WHEN NO_DATA_FOUND THEN
  return 0;
END ;
/

The code of the method in the session bean left as follows,

public long ObtenerMaxId() throws Exception {

        final Logger logger = Logger.getLogger("ObtenerMaxIdPedidoUsuario");
       
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("AlmacenJPA");
        EntityManager em = emf.createEntityManager();
       
        try {
       
            //JpaEntityManager jpaEntityManager = JpaHelper.getEntityManager(em);
            //Session session = jpaEntityManager.getSession();
            StoredFunctionCall call = new StoredFunctionCall();
            call.setProcedureName("ALMACEN.fn_Obtener_MaxId");
            //call.addNamedOutputArgument("RESULT");
                       
            ValueReadQuery query = new ValueReadQuery();
            query.setCall(call);
           
            return (Long)em.unwrap(JpaEntityManager.class).createQuery(query).getSingleResult();
           
        } catch (Exception ex) {
            logger.severe("ERROR: " + ex.getMessage());
            throw ex;
        }
    }

But I get from GF 3.1.1 server the following exception,

[#|2011-11-09T18:27:30.750+0100|WARNING|oracle-glassfish3.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=37;_ThreadName=Thread-1;|A system exception occurred during an invocation on EJB ObtenerMaxIdPedidoUsuario method public long session.ObtenerMaxIdPedidoUsuario.ObtenerMaxId() throws java.lang.Exception
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
    at com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:5050)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4885)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    at $Proxy261.ObtenerMaxId(Unknown Source)
    at session.__EJB31_Generated__ObtenerMaxIdPedidoUsuario__Intf____Bean__.ObtenerMaxId(Unknown Source)
    at session.ManejadorPedido.placeOrder(ManejadorPedido.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5367)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:862)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5339)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5327)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    at $Proxy266.placeOrder(Unknown Source)
    at session.__EJB31_Generated__ManejadorPedido__Intf____Bean__.placeOrder(Unknown Source)
    at controladores.CarroCompraController.doConfirmarCarroCompra(CarroCompraController.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:619)
Caused by: javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.throwNoResultException(EJBQueryImpl.java:1278)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:786)
    at session.ObtenerMaxIdPedidoUsuario.ObtenerMaxId(ObtenerMaxIdPedidoUsuario.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5367)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:862)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5339)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5327)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    ... 70 more
|#]

[#|2011-11-09T18:27:30.750+0100|SEVERE|oracle-glassfish3.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=37;_ThreadName=Thread-1;|javax.ejb.EJBTransactionRolledbackException
    at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2305)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2088)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    at $Proxy261.ObtenerMaxId(Unknown Source)
    at session.__EJB31_Generated__ObtenerMaxIdPedidoUsuario__Intf____Bean__.ObtenerMaxId(Unknown Source)
    at session.ManejadorPedido.placeOrder(ManejadorPedido.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5367)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:862)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5339)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5327)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    at $Proxy266.placeOrder(Unknown Source)
    at session.__EJB31_Generated__ManejadorPedido__Intf____Bean__.placeOrder(Unknown Source)
    at controladores.CarroCompraController.doConfirmarCarroCompra(CarroCompraController.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:619)
Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
    at com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:5050)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4885)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
    ... 72 more
Caused by: javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.throwNoResultException(EJBQueryImpl.java:1278)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:786)
    at session.ObtenerMaxIdPedidoUsuario.ObtenerMaxId(ObtenerMaxIdPedidoUsuario.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5367)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.ejb.containers.interceptors.Arou|#]

[#|2011-11-09T18:27:30.750+0100|SEVERE|oracle-glassfish3.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=37;_ThreadName=Thread-1;|ndInvokeInterceptor.intercept(InterceptorManager.java:862)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:801)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:371)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5339)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5327)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    ... 70 more
|#]

I hope this turns more helpfully.

Regards,
Jose

> Date: Wed, 9 Nov 2011 08:13:06 -0800
> From: jamesssss@xxxxxxxxx
> To: eclipselink-users@xxxxxxxxxxx
> Subject: Re: [eclipselink-users] NullPointerException returned using a StoredProcedureCall class
>
>
> My guess is that getActiveSession is null because you are not in a
> transaction. But looking at the line number in your stack trace would
> confirm it.
>
> Try using getSession, or,
>
> em.unwrap(JpaEntityManager).createQuery(query).getSingleResult();
>
>
> Oggie wrote:
> >
> >
> > Hi,
> >
> >
> >
> > I am developing a JPA, EJB and JSF 2.0 web app. I persist an entity
> > PedidoUsuario and after it I want to get its PK in
> >
> > the corresponding table ALMACEN.PEDIDO_USUARIO. To persist the entity I
> > use an special EJB that calls another EJBs.
> >
> >
> >
> > Here is the EJB,
> >
> > @Stateless
> > @TransactionManagement(TransactionManagementType.CONTAINER)
> > public class ManejadorPedido {
> >
> > @PersistenceContext(unitName = "AlmacenJPA")
> > private EntityManager em;
> > @Resource
> > private SessionContext context;
> > @EJB
> > private PedidoUsuarioFacade pedidoUsuarioFacade;
> > @EJB
> > private PiezaPedidaFacade piezaPedidaFacade;
> > @EJB
> > private ObtenerMaxIdPedidoUsuario obtenerMaxIdPedidoUsuario;
> >
> > @TransactionAttribute(TransactionAttributeType.REQUIRED)
> > public long placeOrder(Usuario usuario, ShoppingCart cart) {
> >
> > try {
> > //Usuario usuario = addUsuario(nombre, apellidos, email,
> > telefono, username, password);
> > PedidoUsuario pedido = addPedido(usuario, cart);
> > long orderId = obtenerMaxIdPedidoUsuario.ObtenerMaxId();
> > addPedidoItems(orderId, cart);
> > return orderId;
> > } catch (Exception e) {
> > e.printStackTrace();
> > context.setRollbackOnly();
> > return 0L;
> > }
> > }
> >
> > /*
> > private Usuario addUsuario(String nombre, String apellidos, String
> > email, String telefono, String username, String password) {
> >
> > Usuario usuario = new Usuario();
> > usuario.setNombre(nombre);
> > usuario.setApellidos(apellidos);
> > usuario.setEmail(email);
> > usuario.setTelefono(telefono);
> > usuario.setUsername(username);
> > usuario.setPassword(password);
> >
> > em.persist(usuario);
> > return usuario;
> > }
> > */
> >
> > private PedidoUsuario addPedido(Usuario usuario, ShoppingCart cart) {
> >
> > // set up customer order
> > PedidoUsuario order = new PedidoUsuario();
> > order.setIdUsuario(new BigDecimal(usuario.getIdUsuario()));
> > java.util.Date utilDate = Calendar.getInstance().getTime();
> > java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
> > order.setFechaPedido(sqlDate);
> > cart.calculateTotal();
> > order.setTotal(BigDecimal.valueOf(cart.getTotal()));
> >
> > // create confirmation number
> > Random random = new Random();
> > int i = random.nextInt(999999999);
> > order.setNumeroConfirmacion(new BigDecimal(i));
> >
> > //em.persist(order);
> > pedidoUsuarioFacade.create(order);
> > return order;
> > }
> >
> > private void addPedidoItems(long orderId, ShoppingCart cart) {
> >
> > //em.flush();
> >
> > List<ShoppingCartItem> items = cart.getItems();
> >
> > // iterate through shopping cart and create OrderedProducts
> > for (ShoppingCartItem scItem : items) {
> >
> > long idPieza = scItem.getPieza().getIdPieza();
> >
> > // set up primary key object
> > PiezaPedidaPK piezaPedidaPK = new PiezaPedidaPK();
> > piezaPedidaPK.setIdPedidousuario(orderId);
> > piezaPedidaPK.setIdPieza(idPieza);
> >
> > // create ordered item using PK object
> > PiezaPedida itemPedido = new PiezaPedida();
> > itemPedido.setId(piezaPedidaPK);
> >
> > // set quantity
> > itemPedido.setCantidad(new BigDecimal(scItem.getCantidad()));
> >
> > //em.persist(itemPedido);
> > piezaPedidaFacade.create(itemPedido);
> > }
> > }
> >
> > }
> >
> > The problem is in the method placeOrder(Usuario
> > usuario, ShoppingCart cart) when I try to get the PK of the persisted
> > PedidoUsuario.
> >
> > For it I use an EJB that implements a StoredProcedureCall class. Why? The
> > reason why is that if I use JPQL, being the PK type of sequence,
> >
> > it returns a wrong PK. So I guessed it could be resolved attacking the
> > database directly.
> >
> >
> >
> > Here is the EJB,
> >
> >
> >
> > @Stateless
> > public class ObtenerMaxIdPedidoUsuario implements Serializable {
> >
> > private static final long serialVersionUID = 1L;
> >
> > /**
> > * Default constructor.
> > */
> > public ObtenerMaxIdPedidoUsuario() {
> > // TODO Auto-generated constructor stub
> > }
> >
> > public long ObtenerMaxId() throws Exception {
> >
> > final Logger logger =
> > Logger.getLogger("ObtenerMaxIdPedidoUsuario");
> >
> > EntityManagerFactory emf =
> > Persistence.createEntityManagerFactory("AlmacenJPA");
> > EntityManager em = emf.createEntityManager();
> >
> > try {
> >
> > JpaEntityManager jpaEntityManager =
> > JpaHelper.getEntityManager(em);
> > Session session = jpaEntityManager.getActiveSession();
> > StoredProcedureCall call = new StoredProcedureCall();
> >
> > call.setProcedureName("ALMACEN.OBTENER_MAX_ID_PEDIDO_USUARIO");
> > call.addNamedOutputArgument("RESULT");
> >
> > ValueReadQuery query = new ValueReadQuery();
> > query.setCall(call);
> >
> > return (Long)session.executeQuery(query);
> >
> > } catch (Exception ex) {
> > logger.severe("ERROR: " + ex.getMessage());
> > throw ex;
> > }
> > }
> >
> > }
> >
> > being the Oracle SP as follows,
> >
> >
> > CREATE OR REPLACE PROCEDURE ALMACEN.OBTENER_MAX_ID_PEDIDO_USUARIO (result
> > OUT NUMBER)
> > IS
> > BEGIN
> > SELECT MAX(ID_PEDIDOUSUARIO) INTO result
> > FROM PEDIDO_USUARIO;
> > EXCEPTION
> > WHEN NO_DATA_FOUND THEN
> > result := 0;
> > END;
> > /
> >
> > But it fails. The EJB method ObtenerMaxId() returns a
> > NullPointerException.
> >
> >
> >
> > Maybe I am wrong in the code of the SP or maybe in the EJBs, I do not
> > know.
> >
> >
> >
> > Please help.
> >
> >
>
>
> -----
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
> http://www.eclipse.org/eclipselink/
> EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
> TopLink
> Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
> http://wiki.oracle.com/page/TopLink TopLink
> Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink
> Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
> Blog: http://java-persistence-performance.blogspot.com/ Java Persistence
> Performance
> --
> View this message in context: http://old.nabble.com/NullPointerException-returned-using-a-StoredProcedureCall-class-tp32796267p32811977.html
> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Back to the top