private EntityManagerFactoryBuilder fixClassSpace()

in tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/AbstractManagedJPAEMFLocator.java [131:157]


	private EntityManagerFactoryBuilder fixClassSpace(Object o) {
		
		Method creationMethod;
		try {
			Class<?> clz = o.getClass().getClassLoader().loadClass(EntityManagerFactoryBuilder.class.getName());
			
			Version pkgVersion = getJPAServicePkgVersion(clz);
			
			if(Version.parseVersion("2").compareTo(pkgVersion) <= 0) {
				throw new IllegalArgumentException("The JPA Service Package version is too high " + pkgVersion);
			}
		
			creationMethod = clz.getMethod("createEntityManagerFactory", Map.class);
			
			if(!EntityManagerFactory.class.equals(creationMethod.getReturnType())) {
				throw new IllegalArgumentException("The EntityManagerFactoryBuilder service does not share a class space for javax.persistence");
			}
			
			return (EntityManagerFactoryBuilder) Proxy.newProxyInstance(getClass().getClassLoader(), 
					new Class<?>[] {EntityManagerFactoryBuilder.class}, 
					(p, m, a) -> o.getClass().getMethod(m.getName(), m.getParameterTypes()).invoke(o, a));
			
		} catch (Exception e) {
			LOG.error("The located EntityManagerFactoryBuilder service {} cannot be made compatible", o, e);
			return null;
		}
	}