How to use JDO persistence manager?

I have two questions on how to create / use a JDO persistence manager (PM, next).

Let's say in a Java web application, if I have 10 entities that can be logically grouped into 2 groups (for example, 5 user objects and 5 business-related objects)

  • Do I need to use two different PMs to manage these two groups, or is one PM enough?
  • Regarding initialization, should I use a singleton PM instance (which will be used by all the users currently using the application), or should I create a PM for each session?
+5
source share
1 answer

JDO Documentation PersistenceManagerFactory . JDO SQL , PersistenceManagerFactory ( URL- JDBC, PersistenceManagerFactory),.

PersistenceManager, , finally (. ).

, , PersistenceManager ThreadLocal ( , Guice Spring). , , , . PersistenceManager .

factory, :

public class Datastore {
  private static PersistenceManagerFactory PMF;
  private static final ThreadLocal<PersistenceManager> PER_THREAD_PM
      = new ThreadLocal<PersistenceManager>();

  public static void initialize() {
     if (PMF != null) {
       throw new IllegalStateException("initialize() already called");
     }
     PMF = JDOHelper.getPersistenceManagerFactory("jdo.properties");
  }

  public static PersistenceManager getPersistenceManager() {
    PersistenceManager pm = PER_THREAD_PM.get();
    if (pm == null) {
      pm = PMF.getPersistenceManager();
      PER_THREAD_PM.set(pm);
    }
    return pm;
  }

  public static void finishRequest() {
    PersistenceManager pm = PER_THREAD_PM.get();
    if (pm != null) {
      PER_THREAD_PM.remove();
      Transaction tx = pm.currentTransaction();
      if (tx.isActive()) {
         tx.rollback();
      }
      pm.close();
    }
  }
}

, , Datastore.getPersistenceManager()

. , . , Guice, Datastore Singleton.

finishRequest -:

public class PersistenceManagerFilter implements javax.servlet.Filter {

  public init(FilterConfig filterConfig) {
    Datastore.initialize();
  }

  public void doFilter(ServletRequest request, 
      ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    try {
      chain.doFilter(request, response);
    } finally {
      Datastore.finishRequest();
    }    
  }
}
+14

All Articles