/testing/library/src/com/google/appengine/library/JPABookDataService.java

http://datanucleus-appengine.googlecode.com/ · Java · 71 lines · 54 code · 11 blank · 6 comment · 2 complexity · b03a6222dcfc51444370d0914490e5bd MD5 · raw file

  1. // Copyright 2008 Google Inc. All Rights Reserved.
  2. package com.google.appengine.library;
  3. import java.util.Collection;
  4. import javax.persistence.EntityManager;
  5. import javax.persistence.EntityManagerFactory;
  6. import javax.persistence.EntityTransaction;
  7. import javax.persistence.Persistence;
  8. import javax.persistence.Query;
  9. /**
  10. * TODO: figure out why EntityTransaction is needed for JPA.
  11. *
  12. * @author kjin@google.com (Kevin Jin)
  13. */
  14. final class JPABookDataService implements BookDataService {
  15. private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("book");
  16. private final EntityManager em = emf.createEntityManager();
  17. private static final String FROM_CLAUSE = "SELECT FROM " + Book.class.getName();
  18. @SuppressWarnings("unchecked")
  19. public Iterable<Book> asIterable(String jpqlQuery) {
  20. return em.createQuery(FROM_CLAUSE + jpqlQuery).getResultList();
  21. }
  22. @SuppressWarnings("unchecked")
  23. public Iterable<Book> asIterable(String jpqlQuery, int limit, int offset) {
  24. Query query = em.createQuery(FROM_CLAUSE + jpqlQuery);
  25. query.setMaxResults(limit);
  26. query.setFirstResult(offset);
  27. return query.getResultList();
  28. }
  29. @SuppressWarnings("unchecked")
  30. public int countEntities(String jpqlQuery) {
  31. return ((Collection) asIterable(jpqlQuery)).size();
  32. }
  33. public void delete(Book book) {
  34. EntityTransaction txn = em.getTransaction();
  35. try {
  36. txn.begin();
  37. em.remove(book);
  38. txn.commit();
  39. } finally {
  40. if (txn.isActive()) {
  41. txn.rollback();
  42. }
  43. }
  44. }
  45. public void put(Book book) {
  46. EntityTransaction txn = em.getTransaction();
  47. try {
  48. txn.begin();
  49. em.persist(book);
  50. txn.commit();
  51. } finally {
  52. if (txn.isActive()) {
  53. txn.rollback();
  54. }
  55. }
  56. }
  57. public void close() {
  58. em.close();
  59. }
  60. }