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;
}
}
}
}