diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java index 9d08bb32d..1012d87f4 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java @@ -222,16 +222,16 @@ public final class HibernateOrmProcessor { recorderContext.registerNonDefaultConstructor(ParsedPersistenceXmlDescriptor.class.getDeclaredConstructor(URL.class), (i) -> Collections.singletonList(i.getPersistenceUnitRootUrl())); + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); // inspect service files for additional integrators Collection> integratorClasses = new LinkedHashSet<>(); - for (String integratorClassName : ServiceUtil.classNamesNamedIn(getClass().getClassLoader(), + for (String integratorClassName : ServiceUtil.classNamesNamedIn(classLoader, "META-INF/services/org.hibernate.integrator.spi.Integrator")) { integratorClasses.add((Class) recorderContext.classProxy(integratorClassName)); } - // inspect service files for service contributors Collection> serviceContributorClasses = new LinkedHashSet<>(); - for (String serviceContributorClassName : ServiceUtil.classNamesNamedIn(getClass().getClassLoader(), + for (String serviceContributorClassName : ServiceUtil.classNamesNamedIn(classLoader, "META-INF/services/org.hibernate.service.spi.ServiceContributor")) { serviceContributorClasses .add((Class) recorderContext.classProxy(serviceContributorClassName)); diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/IntegratorResource.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/IntegratorResource.java new file mode 100644 index 000000000..3490993b6 --- /dev/null +++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/IntegratorResource.java @@ -0,0 +1,24 @@ +package io.quarkus.it.jpa.integrator; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("/integrator") +@ApplicationScoped +public class IntegratorResource { + + @Inject + EntityManager em; + + @GET + @Produces(MediaType.TEXT_PLAIN) + public int create() { + return TestIntegrator.COUNTER.get(); + } + +} diff --git a/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java new file mode 100644 index 000000000..60b171b73 --- /dev/null +++ b/integration-tests/jpa/src/main/java/io/quarkus/it/jpa/integrator/TestIntegrator.java @@ -0,0 +1,23 @@ +package io.quarkus.it.jpa.integrator; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.hibernate.boot.Metadata; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.integrator.spi.Integrator; +import org.hibernate.service.spi.SessionFactoryServiceRegistry; + +public class TestIntegrator implements Integrator { + public static final AtomicInteger COUNTER = new AtomicInteger(); + + @Override + public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory, + SessionFactoryServiceRegistry serviceRegistry) { + COUNTER.incrementAndGet(); + } + + @Override + public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { + COUNTER.decrementAndGet(); + } +} diff --git a/integration-tests/jpa/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator b/integration-tests/jpa/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator new file mode 100644 index 000000000..94c4108d4 --- /dev/null +++ b/integration-tests/jpa/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator @@ -0,0 +1 @@ +io.quarkus.it.jpa.integrator.TestIntegrator \ No newline at end of file diff --git a/integration-tests/jpa/src/test/java/io/quarkus/it/jpa/integrator/JPAIntegratorTest.java b/integration-tests/jpa/src/test/java/io/quarkus/it/jpa/integrator/JPAIntegratorTest.java new file mode 100644 index 000000000..0b6a6312a --- /dev/null +++ b/integration-tests/jpa/src/test/java/io/quarkus/it/jpa/integrator/JPAIntegratorTest.java @@ -0,0 +1,20 @@ +package io.quarkus.it.jpa.integrator; + +import static io.restassured.RestAssured.when; +import static org.hamcrest.core.Is.is; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class JPAIntegratorTest { + + @Test + public void testInjection() { + when().get("/jpa-test/integrator").then() + .statusCode(200) + .body(is("1")); + } + +}