From db7a78c14271f83ffd4d1a378b0e2cb14b8b068f Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Tue, 2 Jun 2026 22:30:56 +0200 Subject: [PATCH] Add EntityAgent support to JpaInjectionServices SPI --- pom.xml | 2 +- .../weld/injection/spi/JpaInjectionServices.java | 16 ++++++++++++++++ .../helpers/ForwardingJpaInjectionServices.java | 5 +++++ .../weld/bootstrap/api/test/MockJpaServices.java | 6 ++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4c50ffff..570926ee 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,7 @@ 5.0.0.Beta1 4.0.1 4.0.0 - 3.2.0 + 4.0.0-M4 2.0.1 2.2.0 6.1.0 diff --git a/weld-spi/src/main/java/org/jboss/weld/injection/spi/JpaInjectionServices.java b/weld-spi/src/main/java/org/jboss/weld/injection/spi/JpaInjectionServices.java index 5330bcac..132a08b2 100644 --- a/weld-spi/src/main/java/org/jboss/weld/injection/spi/JpaInjectionServices.java +++ b/weld-spi/src/main/java/org/jboss/weld/injection/spi/JpaInjectionServices.java @@ -17,8 +17,10 @@ package org.jboss.weld.injection.spi; import jakarta.enterprise.inject.spi.InjectionPoint; +import jakarta.persistence.EntityAgent; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceAgent; import jakarta.persistence.PersistenceContext; import jakarta.persistence.PersistenceUnit; @@ -61,4 +63,18 @@ public interface JpaInjectionServices extends Service { */ ResourceReferenceFactory registerPersistenceUnitInjectionPoint(InjectionPoint injectionPoint); + /** + * Register a persistence agent injection point. The implementation validates the injection point. If the validation passes, + * an instance of {@link ResourceReferenceFactory} is returned which may be used at runtime for creating instances of the + * resource. + * + * @param injectionPoint the injection point metadata + * @return factory for obtaining {@link EntityAgent} instances + * @throws IllegalArgumentException if the injection point is not annotated with {@link PersistenceAgent}, + * if the injection point is a method that doesn't follow JavaBean conventions + * @throws IllegalStateException if no suitable persistence units can be resolved + * @since 7.0 + */ + ResourceReferenceFactory registerPersistenceAgentInjectionPoint(InjectionPoint injectionPoint); + } diff --git a/weld-spi/src/main/java/org/jboss/weld/injection/spi/helpers/ForwardingJpaInjectionServices.java b/weld-spi/src/main/java/org/jboss/weld/injection/spi/helpers/ForwardingJpaInjectionServices.java index 235a5988..4ca29c8f 100644 --- a/weld-spi/src/main/java/org/jboss/weld/injection/spi/helpers/ForwardingJpaInjectionServices.java +++ b/weld-spi/src/main/java/org/jboss/weld/injection/spi/helpers/ForwardingJpaInjectionServices.java @@ -17,6 +17,7 @@ package org.jboss.weld.injection.spi.helpers; import jakarta.enterprise.inject.spi.InjectionPoint; +import jakarta.persistence.EntityAgent; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; @@ -48,6 +49,10 @@ public ResourceReferenceFactory registerPersistenceUnitInj return delegate().registerPersistenceUnitInjectionPoint(injectionPoint); } + public ResourceReferenceFactory registerPersistenceAgentInjectionPoint(InjectionPoint injectionPoint) { + return delegate().registerPersistenceAgentInjectionPoint(injectionPoint); + } + @Override public String toString() { return delegate().toString(); diff --git a/weld-spi/src/test/java/org/jboss/weld/bootstrap/api/test/MockJpaServices.java b/weld-spi/src/test/java/org/jboss/weld/bootstrap/api/test/MockJpaServices.java index 0fc5c919..870fb033 100644 --- a/weld-spi/src/test/java/org/jboss/weld/bootstrap/api/test/MockJpaServices.java +++ b/weld-spi/src/test/java/org/jboss/weld/bootstrap/api/test/MockJpaServices.java @@ -17,6 +17,7 @@ package org.jboss.weld.bootstrap.api.test; import jakarta.enterprise.inject.spi.InjectionPoint; +import jakarta.persistence.EntityAgent; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; @@ -34,4 +35,9 @@ public ResourceReferenceFactory registerPersistenceContextInjecti public ResourceReferenceFactory registerPersistenceUnitInjectionPoint(InjectionPoint injectionPoint) { return new MockResourceFactory(); } + + @Override + public ResourceReferenceFactory registerPersistenceAgentInjectionPoint(InjectionPoint injectionPoint) { + return new MockResourceFactory(); + } }