0

I am getting the EntityNotFoundException when i try to register a Customer and redirect him to the PayPal payment gateway service. The customer is registered successfully and record is saved in database. When redirecting to paypal sandbox url I am getting this error.

ROOT CAUSE EXCEPTION:

javax.persistence.EntityNotFoundException: Unable to find org.broadleafcommerce.profile.core.domain.CustomerImpl with id 253104

STACKTRACE:

Posting only important lines of stacktrace for readability:

[artifact:mvn] org.broadleafcommerce.core.payment.service.exception.PaymentException: CompositePaymentServiceImpl - Unable to execute payment for order -- id: null
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.CompositePaymentServiceImpl.executePayment(CompositePaymentServiceImpl.java:77)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.CompositePaymentServiceImpl.executePayment(CompositePaymentServiceImpl.java:82)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.CompositePaymentServiceImpl.executePaymentForGateway(CompositePaymentServiceImpl.java:105)
[artifact:mvn]  at org.broadleafcommerce.vendor.paypal.service.payment.PayPalCheckoutServiceImpl.initiateExpressCheckout(PayPalCheckoutServiceImpl.java:89)
[artifact:mvn]  at com.siggitt.controller.checkout.UpdateBroadleafPayPalController.paypalCheckout(UpdateBroadleafPayPalController.java:117)
[artifact:mvn]  at com.siggitt.controller.checkout.PayPalController.paypalCheckout(PayPalController.java:21)
[artifact:mvn]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[artifact:mvn]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[artifact:mvn]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[artifact:mvn]  at java.lang.reflect.Method.invoke(Method.java:601)
[artifact:mvn]  at java.lang.Thread.run(Thread.java:722)
[artifact:mvn] Caused by: org.broadleafcommerce.core.workflow.WorkflowException: org.broadleafcommerce.core.workflow.WorkflowException: javax.persistence.EntityNotFoundException: Unable to find org.broadleafcommerce.profile.core.domain.CustomerImpl with id 253104
[artifact:mvn]  at org.broadleafcommerce.core.workflow.DefaultErrorHandler.handleError(DefaultErrorHandler.java:57)
[artifact:mvn]  at org.broadleafcommerce.core.workflow.SequenceProcessor.doActivities(SequenceProcessor.java:88)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.CompositePaymentServiceImpl.executePayment(CompositePaymentServiceImpl.java:62)
[artifact:mvn]  ... 102 more
[artifact:mvn] Caused by: org.broadleafcommerce.core.workflow.WorkflowException: javax.persistence.EntityNotFoundException: Unable to find org.broadleafcommerce.profile.core.domain.CustomerImpl with id 253104
[artifact:mvn]  at org.broadleafcommerce.core.workflow.DefaultErrorHandler.handleError(DefaultErrorHandler.java:57)
[artifact:mvn]  at org.broadleafcommerce.core.workflow.SequenceProcessor.doActivities(SequenceProcessor.java:88)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.workflow.CompositeActivity.execute(CompositeActivity.java:36)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.workflow.CompositeActivity.execute(CompositeActivity.java:23)
[artifact:mvn]  at org.broadleafcommerce.core.workflow.SequenceProcessor.doActivities(SequenceProcessor.java:79)
[artifact:mvn]  ... 103 more
[artifact:mvn] Caused by: javax.persistence.EntityNotFoundException: Unable to find org.broadleafcommerce.profile.core.domain.CustomerImpl with id 253104
[artifact:mvn]  at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.java:155)
[artifact:mvn]  at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:210)
[artifact:mvn]  at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:409)
[artifact:mvn]  at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:214)
[artifact:mvn]  at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
[artifact:mvn]  at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
[artifact:mvn]  at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:903)
[artifact:mvn]  at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:887)
[artifact:mvn]  at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:891)
[artifact:mvn]  at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:889)
[artifact:mvn]  at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366)
[artifact:mvn]  at $Proxy104.merge(Unknown Source)
[artifact:mvn]  at sun.reflect.GeneratedMethodAccessor104.invoke(Unknown Source)
[artifact:mvn]  at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:241)
[artifact:mvn]  at $Proxy104.merge(Unknown Source)
[artifact:mvn]  at org.broadleafcommerce.core.payment.dao.PaymentInfoDaoImpl.save(PaymentInfoDaoImpl.java:47)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.PaymentInfoServiceImpl.save(PaymentInfoServiceImpl.java:41)
[artifact:mvn]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[artifact:mvn]  at $Proxy145.save(Unknown Source)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.PaymentServiceImpl.logResponseItem(PaymentServiceImpl.java:232)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.PaymentServiceImpl.authorizeAndDebit(PaymentServiceImpl.java:82)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.workflow.PaymentActivity.execute(PaymentActivity.java:83)
[artifact:mvn]  at org.broadleafcommerce.core.payment.service.workflow.PaymentActivity.execute(PaymentActivity.java:1)
[artifact:mvn]  at org.broadleafcommerce.core.workflow.SequenceProcessor.doActivities(SequenceProcessor.java:79)
[artifact:mvn]  ... 106 more
[artifact:mvn] 2014-01-08 12:40:08.971:WARN:oejs.ServletHandler:/siggitt/paypal/checkout
[artifact:mvn] java.lang.NullPointerException
[artifact:mvn]  at com.siggitt.controller.checkout.UpdateBroadleafPayPalController.paypalCheckout(UpdateBroadleafPayPalController.java:120)
[artifact:mvn]  at com.siggitt.controller.checkout.PayPalController.paypalCheckout(PayPalController.java:21)
[artifact:mvn]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[artifact:mvn]  at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
[artifact:mvn]  at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
[artifact:mvn]  at java.lang.Thread.run(Thread.java:722)
[artifact:mvn]  Errr***org.broadleafcommerce.core.workflow.WorkflowException: javax.persistence.EntityNotFoundException: Unable to find org.broadleafcommerce.profile.core.domain.CustomerImpl with id 253104

CompositePaymentServiceImpl

public CompositePaymentResponse executePayment(Order order, Map<PaymentInfo, Referenced> payments, PaymentResponse response) throws PaymentException {
        /*
         * TODO add validation that checks the order and payment information for
         * validity.
         */
        try {
            System.out.print("\n\n order<>>>>!!"+order);
            System.out.println("\n\npayments<<>>!!"+payments);
            System.out.println("\n\nresponse<<>>!!"+response);
            
            PaymentSeed seed = new PaymentSeed(order, payments, response);
            System.out.print("\n\n seed<>>>>!!"+seed.getPaymentResponse());
            paymentWorkflow.doActivities(seed);//exception thrown here
            System.out.println("done payment workflow activities");
            return seed;
        } catch (WorkflowException e) {
            Throwable cause = null;
            while (e.getCause() != null) {
                if (cause != null && cause.equals(e.getCause())) {
                    break;
                }
                cause = e.getCause();
            }
            if (cause != null && PaymentException.class.isAssignableFrom(cause.getClass())) {
                throw (PaymentException) cause;
            }
            System.out.print("\n Errr***"+e.getMessage());
            throw new PaymentException("CompositePaymentServiceImpl75 - Unable to execute payment for order -- id: " + order.getId(), e);
        }
    }

doActivities():

@Override
    public ProcessContext doActivities(Object seedData) throws WorkflowException {
        if (LOG.isDebugEnabled()) {
            LOG.debug(getBeanName() + " processor is running..");
        }
        ActivityStateManager activityStateManager = ((ActivityStateManager) getBeanFactory().getBean("blActivityStateManager"));
        if (activityStateManager == null) {
            throw new IllegalStateException("Unable to find an instance of ActivityStateManager registered under bean id blActivityStateManager");
        }
        ProcessContext context = null;
        RollbackStateLocal rollbackStateLocal = RollbackStateLocal.getRollbackStateLocal();
        if (rollbackStateLocal == null) {
            rollbackStateLocal = new RollbackStateLocal();
            rollbackStateLocal.setThreadId(String.valueOf(Thread.currentThread().getId()));
            rollbackStateLocal.setWorkflowId(getBeanName());
            RollbackStateLocal.setRollbackStateLocal(rollbackStateLocal);
        }
        try {
            //retrieve injected by Spring
            List<Activity<ProcessContext>> activities = getActivities();

            //retrieve a new instance of the Workflow ProcessContext
            context = createContext(seedData);

            for (Activity<ProcessContext> activity : activities) {
                if (activity.shouldExecute(context)) {
                    if (LOG.isDebugEnabled()) {
                        LOG.debug("running activity:" + activity.getBeanName() + " using arguments:" + context);
                    }
    
                    try {
                        context = activity.execute(context);
                    } catch (Throwable th) {
                        if (getAutoRollbackOnError()) {
                            LOG.info("Automatically rolling back state for any previously registered RollbackHandlers. RollbackHandlers may be registered for workflow activities in appContext.");
                            ActivityStateManagerImpl.getStateManager().rollbackAllState();
                        }
                        ErrorHandler errorHandler = activity.getErrorHandler();
                        if (errorHandler == null) {
                            LOG.info("no error handler for this action, run default error" + "handler and abort processing ");
                            getDefaultErrorHandler().handleError(context, th);
                            break;
                        } else {
                            LOG.info("run error handler and continue");
                            errorHandler.handleError(context, th);
                        }
                    }
    
                    //ensure its ok to continue the process
                    if (processShouldStop(context, activity)) {
                        break;
                    }
    
                    //register the RollbackHandler
                    if (activity.getRollbackHandler() != null && activity.getAutomaticallyRegisterRollbackHandler()) {
                        ActivityStateManagerImpl.getStateManager().registerState(activity, context, activity.getRollbackRegion(), activity.getRollbackHandler(), activity.getStateConfiguration());
                    }
                } else {
                    LOG.debug("Not executing activity: " + activity.getBeanName() + " based on the context: " + context);
                }
            }
        } finally {
            rollbackStateLocal = RollbackStateLocal.getRollbackStateLocal();
            if (rollbackStateLocal != null && rollbackStateLocal.getWorkflowId().equals(getBeanName())) {
                activityStateManager.clearAllState();
                RollbackStateLocal.setRollbackStateLocal(null);
            }
        }
        LOG.debug(getBeanName() + " processor is done.");

        return context;
    }

I got a solution from this answer to add fetch type to lazy in @ManytoOne mapping. But it dint work for me. How can i solve this problem?. Have anyone come across with a solution for this issue?

Community
  • 1
  • 1
Lucky
  • 16,787
  • 19
  • 117
  • 151
  • Have you tried to call `em.flush()`? Also show us a bit of code. – V G Jan 08 '14 at 10:46
  • @AndreiI i think the problem is with finding the entity which is in the db, i dont think the problem is not in saving the entity..however em.flush dint work for me.. – Lucky Jan 08 '14 at 11:25
  • Well, post some code. I suppose you have a more complicated scenario in which you save the customer and immediately after that you search for that customer. Have you tried to debug the code and to check whether the customer is in DB when the exception is thrown (NOT later)? – V G Jan 08 '14 at 14:26
  • @AndreiI I had tried to read the customer entity immediately saving to the db..i can access to customer entity w/o any error..the exception is occured after the customer object is persited in db.. – Lucky Jan 09 '14 at 05:45
  • 1
    you must understand that searching an entity in the same transaction X (after persisting) should return that entity, but this could be invisible to another transaction Y, if transaction X did not commit. Also I don't understand at what line in `doActivities()` the exception is thrown. – V G Jan 09 '14 at 09:40

0 Answers0