Seam remoting and persistence
tamirw Sep 29, 2007 5:04 PMI'm just starting to play with Seam remoting, and I'm having the following problem with persistence :
My POJO actions are able to query the DB just fine, but when trying to create a new entity instnace, the persist() method seems to return without doing anything in the DB.
I'm attaching the relevant code, persistence.xml and components.xml.
Any help would be greatly appreciated.
persistence.xml <persistence-unit name="Iou" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/IouDatasource</jta-data-source> <properties> <!-- <property name="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl.auto}"/> --> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" /> </properties> </persistence-unit>
components.xml
<core:managed-persistence-context auto-create="true" entity-manager-factory="#{IouEntityManagerFactory}" name="entityManager"/> <core:entity-manager-factory name="IouEntityManagerFactory" persistence-unit-name="Iou"/>
RegisterAction.java
package com.iou.action; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Transactional; import org.jboss.seam.annotations.WebRemote; import org.jboss.seam.core.FacesMessages; import org.jboss.seam.log.Log; import org.jboss.seam.security.Identity; import com.iou.entity.User; @Name("register") public class RegisterAction { @Out private User currentUser; @In private EntityManager entityManager; @Logger Log log; @WebRemote public User register(String email, String password, String name) { User newUser = null; List existing = entityManager.createQuery( "select u from User u where u.email=:email").setParameter( "email", email).getResultList(); if (existing.size() == 0) { // the query is executed just fine newUser = new User(); newUser.setEmail(email); newUser.setPassword(password); newUser.setName(name); newUser.setActive(true); entityManager.persist(newUser); //nothing is saved to the DB. currentUser = newUser; return newUser; } else { User existingUser = (User) existing.get(0); if (existingUser.isActive() == false) { existingUser.setActive(true); log.info("User " + email + " has been activated"); currentUser = existingUser; return existingUser; } else { log.info("email " + email + " already exists"); return null; } } } }