package com.example.controller; import java.util.List; import java.util.logging.Logger; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.transaction.UserTransaction; import com.example.client.shared.Member; import com.example.client.shared.MemberService; import com.example.client.shared.New; import org.jboss.errai.bus.server.annotations.Service; /** * CDI service that can be called from either the client side (via Errai RPC) or * the server side. * * @author Jonathan Fuerth <jfuerth@redhat.com> * @author Christian Sadilek <csadilek@redhat.com> */ @ApplicationScoped @Service public class MemberServiceImpl implements MemberService { @Inject private Logger log; @Inject private EntityManager em; @Inject private UserTransaction userTransaction; @Inject @New private Event<Member> newMemberEvent; @Override public void register(Member newMember) { log.info("Registering " + newMember.getName()); try { userTransaction.begin(); em.persist(newMember); userTransaction.commit(); } catch (Exception ex) { try { userTransaction.rollback(); } catch (Exception e) { e.printStackTrace(); } throw new RuntimeException("Registering the member failed: "+ex.toString()); } newMemberEvent.fire(newMember); } @Override public List<Member> retrieveAllMembersOrderedByName() { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Member> criteria = cb.createQuery(Member.class); Root<Member> member = criteria.from(Member.class); // Swap criteria statements if you would like to try out type-safe criteria queries, a new // feature in JPA 2.0 // criteria.select(member).orderBy(cb.asc(member.get(Member_.name))); criteria.select(member).orderBy(cb.asc(member.get("name"))); return em.createQuery(criteria).getResultList(); } }