Subject: 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
 		 	   		   
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users