public ObjectFactory<?> createObjectFactory(PersistenceContextTargetDefinition definition) throws WiringException { String unitName = definition.getUnitName(); URI classLoaderId = definition.getClassLoaderId(); ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); try { // get the classloader for the entity manager factory ClassLoader classLoader = registry.getClassLoader(classLoaderId); Thread.currentThread().setContextClassLoader(classLoader); // eagerly build the the EntityManagerFactory PersistenceOverrides overrides = definition.getOverrides(); emfResolver.resolve(unitName, overrides, classLoader); if (definition.isMultiThreaded()) { return new MultiThreadedEntityManagerProxyFactory(unitName, emService, tm); } else { return new StatefulEntityManagerProxyFactory(unitName, emService, tm); } } catch (JpaResolutionException e) { throw new WiringException(e); } finally { Thread.currentThread().setContextClassLoader(oldCl); } }