Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #7975

JSF/JPA problem

From markspace <-@.>
Newsgroups comp.lang.java.programmer
Subject JSF/JPA problem
Date 2011-09-13 09:19 -0700
Organization A noiseless patient Spider
Message-ID <j4nvr9$4ld$1@dont-email.me> (permalink)

Show all headers | View raw


Hi all, I'm playing around with JSF and JPA on a personal project and 
I've got a problem I haven't been able to figure out.  Basically no 
matter what I do in a certain bit of code, I always get a JPA error that 
there is no transaction available for the current thread.

This is darn weird because I use almost the exact same pattern elsewhere 
and it works fine.  Also, everything I've read about Stateless beans 
says that a transaction context should be created by default, so I can't 
imagine why this one fails.

(I just thought of something just now: this is the first time I've tried 
to persist this particular entity, the Post class.  Could possibly be 
some misconfiguration on the entity itself?)

I don't think it matters but here's where I call the method in question:

  <h:commandButton
     value="Create Post"
     action="#{postBean.createNewPost()}" />

That calls a simple manged bean, here with getters/setters removed...

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;


/**
  *
  * @author Brenden
  */
@RequestScoped
@ManagedBean
public class PostBean
{
    @PersistenceUnit
    EntityManagerFactory emf;

    @ManagedProperty( value = "#{postService}" )
    PostService postService;

...

   public String createNewPost() {  // this method is called by the JSF

... error checking removed...

       Post post = new Post();
... build the DTO entity here...

       postService.createPost( post );  // dies in this method

       return "success";
    }
}

The PostService is pretty simple too:

import javax.ejb.Stateless;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;

/**
  *
  * @author Brenden
  */
@ManagedBean
@Stateless
public class PostService
{

    @PersistenceUnit
    EntityManagerFactory emf;

    public void createPost( Post post )
    {
       EntityManager em = emf.createEntityManager();

       em.persist( post );
       em.flush();  // this is the line that generates the exception

    }
}

Everything I've read says that the @Stateless tag should create a 
transaction context, and it seems to in other parts of the web app. 
Here I can only produce exceptions despite fiddling around with the tags 
and double checking.

Here's a partial stack trace...

WARNING: #{postBean.createNewPost()}: 
javax.persistence.TransactionRequiredException:
Exception Description: No externally managed transaction is currently 
active for this thread
javax.faces.FacesException: #{postBean.createNewPost()}: 
javax.persistence.TransactionRequiredException:
Exception Description: No externally managed transaction is currently 
active for this thread
	at 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	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:593)

....

Caused by: javax.faces.el.EvaluationException: 
javax.persistence.TransactionRequiredException:
Exception Description: No externally managed transaction is currently 
active for this thread
	at 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 32 more


Caused by: javax.persistence.TransactionRequiredException:
Exception Description: No externally managed transaction is currently 
active for this thread
	at 
org.eclipse.persistence.internal.jpa.transaction.JTATransactionWrapper.throwCheckTransactionFailedException(JTATransactionWrapper.java:86)
	at 
org.eclipse.persistence.internal.jpa.transaction.JTATransactionWrapper.checkForTransaction(JTATransactionWrapper.java:46)
	at 
org.eclipse.persistence.internal.jpa.EntityManagerImpl.checkForTransaction(EntityManagerImpl.java:1776)
	at 
org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:780)
	at 
com.techdarwinia.website.services.PostService.createPost(PostService.java:32)
	at com.techdarwinia.website.beans.PostBean.createNewPost(PostBean.java:167)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


Line 32 is the one in  PostService that I marked, the em.flush() statement.

I'm going to hit the books/docs again to see if I can figure this out. 
Any one else have any insights while I'm doing that?

Back to comp.lang.java.programmer | Previous | NextNext in thread | Find similar


Thread

JSF/JPA problem markspace <-@.> - 2011-09-13 09:19 -0700
  Re: JSF/JPA problem Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-13 17:24 -0300
    Re: JSF/JPA problem Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-13 17:40 -0300
      Re: JSF/JPA problem markspace <-@.> - 2011-09-13 15:38 -0700
        Re: JSF/JPA problem markspace <-@.> - 2011-09-13 17:06 -0700
          Re: JSF/JPA problem Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-13 22:28 -0300
            Re: JSF/JPA problem Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-13 22:31 -0300
              Re: JSF/JPA problem markspace <-@.> - 2011-09-13 19:27 -0700
                Re: JSF/JPA problem Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-14 05:59 -0300
            Re: JSF/JPA problem markspace <-@.> - 2011-09-14 10:36 -0700
              Re: JSF/JPA problem Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-14 17:51 -0300
      Re: JSF/JPA problem markspace <-@.> - 2011-09-13 16:12 -0700

csiph-web