Path: csiph.com!x330-a1.tempe.blueboxinc.net!aioe.org!news.glorb.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!post01.iad.highwinds-media.com!newsfe14.iad.POSTED!8ad76e89!not-for-mail From: Arved Sandstrom User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.21) Gecko/20110831 Lightning/1.0b2 Thunderbird/3.1.13 MIME-Version: 1.0 Newsgroups: comp.lang.java.programmer Subject: Re: JSF/JPA problem References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Lines: 107 Message-ID: X-Complaints-To: abuse@newsgroups-download.com NNTP-Posting-Date: Wed, 14 Sep 2011 01:28:12 UTC Organization: Public Usenet Newsgroup Access Date: Tue, 13 Sep 2011 22:28:10 -0300 Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:8001 On 11-09-13 09:06 PM, markspace wrote: > On 9/13/2011 4:45 PM, Arved Sandstrom wrote: > >> You could try leaving out the flush(), and simply close the EM at the >> end of createPost(). This would track Example 5.7.1.1. Let's see if you >> still get the TransactionRequiredException. That would then demonstrate >> that there really is no active JTA transaction... > >> Since you expect to be set up for JTA, you could also dispense with the >> use of application-managed, and use @PersistenceContext DI instead, a la >> Example 5.6.4.1 - this is about as easy as it gets. > > > Just to reiterate the post I just added to this thread, I already > switched to PersistenceContext for DI, and the error has now moved from > the em.flush() to the em.persist( post ) on the line previous. So I > have to conclude that if I add an em.close(), I'll still now have the > error previous to the close(). I'll give it a try at some point. > > >> You have me interested; I will try this situation out on Glassfish. > > > Thanks for playing around with this, it really has me stumped. I just now fired up a new EAR app in Eclipse Indigo running Glassfish 3.1; two projects, a WAR, and a EJB project with the JPA facet. I am using PostgreSQL 9.0, and set up a datasourec against that in the Glassfish admin console. The persistence.xml was extremely simple: The single test entity is set up as @Entity public class State implements Serializable { private static final long serialVersionUID = 1L; @Id @SequenceGenerator(name = "STATE_ID_GEN", sequenceName="STATE_ID_SEQ", allocationSize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "STATE_ID_GEN") private Integer id; private String name; private String status; ... } The session bean I set up as @Stateless @LocalBean public class CreateState { @PersistenceUnit EntityManagerFactory emf; public void createState() { EntityManager em = emf.createEntityManager(); State state = new State(); state.setName("state1"); state.setStatus("OK"); em.persist(state); em.close(); } } This is simply called from a JSF managed bean method hit through a h:commandButton. So essentially your setup. I just now noticed something, though, which might well explain the problem. I have a genuine unvarnished EJB (my CreateState session bean). You on the other hand have something that looks like a hybrid: both javax.ejb.Stateless and javax.faces.bean.ManagedBean annotations on it. I have no idea what this combo will do. :-) When I call my session bean from my JSF managed bean, I inject it with @EJB. You're not doing that, so you have basically what looks like a basic Java method call, and there's a good chance the annotations are being ignored. Side note: when I set this new project up tonight I started out with JDK 1.7. Bad move - VerifyErrors and what have you. I had to switch back to JDK 1.6. AHS -- job creator: US Republican term for a wealthy party contributor