Если вы пишете настольное приложение (и, следовательно, не имеете доступа к персистентности, управляемой контейнером), я предлагаю вам опубликовать EntityManageFactory как службу, а не EntityManager.Ваш код будет иметь такой макет:
public void someBusinessMethod() {
EntityManager em = Activator.getEntityManager();
try {
...
} finally {
em.close();
}
}
А в вашем активаторе:
public class Activator
implements BundleActivator {
private static ServiceTracker emfTracker;
public void start(BundleContext context) {
emfTracker = new ServiceTracker(context, EntityManagerFactory.class.getCanonicalName(),null);
emftracker.open();
}
public void stop(BundleContext context){
emfTracker.close();
emfTracker = null;
}
public static EntityManager getEntityManager() {
return ((EntityManagerFactory)emfTracker.getService()).createEntityManager();
}
}
Надеюсь, это поможет вам понять.