/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.test.integration.testcase.controller; import javax.annotation.PostConstruct; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnit; import org.hibernate.ogm.test.integration.testcase.model.Member; /** * A {@link MemberRegistration} bean that works when the transaction type of the persistence unit is set to * RESOURCE_LOCAL * * @author Davide D'Alto */ @Stateful public class MemberRegistrationWithResourceLocal implements MemberRegistration { @PersistenceUnit private EntityManagerFactory factory; private EntityManager em; private Member newMember; @Override public Member getNewMember() { return newMember; } @Override public void register() { beginTransaction(); RegistrationExecutor.register( em, newMember ); commit(); initNewMember(); } private void commit() { em.getTransaction().commit(); em.clear(); } private void beginTransaction() { em.getTransaction().begin(); } @Override public Member find(Long id) { beginTransaction(); Member member = RegistrationExecutor.find( em, id ); commit(); return member; } @Override public Member findWithNativeQuery(String nativeQuery) { beginTransaction(); Member member = RegistrationExecutor.findWithNativeQuery( em, nativeQuery ); commit(); return member; } @Override public Member findWithQuery(Long id) { beginTransaction(); Member member = RegistrationExecutor.findWithQuery( em, id ); commit(); return member; } @Override public Member findWithEmail(String email) { beginTransaction(); Member uniqueResult = RegistrationExecutor.findWithEmail( em, email ); commit(); return uniqueResult; } @PostConstruct public void initNewMember() { newMember = new Member(); em = factory.createEntityManager(); } @Override public void close() { em.close(); } }