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;
}
}