This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/spring6 by this push:
     new 4bd19a7238 ISIS-3275: migrates JPA entity injection helper
4bd19a7238 is described below

commit 4bd19a72389947d29833bbb3133381290f83d8ca
Author: Andi Huber <[email protected]>
AuthorDate: Thu Nov 17 07:04:38 2022 +0100

    ISIS-3275: migrates JPA entity injection helper
---
 .../applib/integration/CausewayEntityListener.java | 21 ++++++-----
 .../inject/BeanManagerForEntityListeners.java      |  9 +----
 .../persistence/jpa/eclipselink/inject/_Util.java  | 41 ++++++++++++++++++++++
 .../jpa/springdata/SpringDataJpaTestModule.java    |  5 ++-
 4 files changed, 56 insertions(+), 20 deletions(-)

diff --git 
a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
 
b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
index 33a71679b8..b1e26dc647 100644
--- 
a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
+++ 
b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
@@ -18,16 +18,6 @@
  */
 package org.apache.causeway.persistence.jpa.applib.integration;
 
-import jakarta.inject.Inject;
-import jakarta.inject.Provider;
-import jakarta.persistence.PostLoad;
-import jakarta.persistence.PostPersist;
-import jakarta.persistence.PostRemove;
-import jakarta.persistence.PostUpdate;
-import jakarta.persistence.PrePersist;
-import jakarta.persistence.PreRemove;
-import jakarta.persistence.PreUpdate;
-
 import org.eclipse.persistence.sessions.UnitOfWork;
 import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord;
 
@@ -41,6 +31,15 @@ import 
org.apache.causeway.core.metamodel.services.objectlifecycle.PropertyChang
 import 
org.apache.causeway.core.metamodel.services.objectlifecycle.PropertyChangeRecordId;
 import org.apache.causeway.persistence.jpa.applib.services.JpaSupportService;
 
+import jakarta.inject.Inject;
+import jakarta.inject.Provider;
+import jakarta.persistence.PostLoad;
+import jakarta.persistence.PostPersist;
+import jakarta.persistence.PostRemove;
+import jakarta.persistence.PostUpdate;
+import jakarta.persistence.PrePersist;
+import jakarta.persistence.PreRemove;
+import jakarta.persistence.PreUpdate;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -62,7 +61,7 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class CausewayEntityListener {
 
-    // injection points resolved via constructor ...
+    // injection points resolved via BeanManagerForEntityListeners ...
     @Inject private ObjectLifecyclePublisher objectLifecyclePublisher;
     @Inject private Provider<JpaSupportService> jpaSupportServiceProvider;
     @Inject private ObjectManager objectManager;
diff --git 
a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/BeanManagerForEntityListeners.java
 
b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/BeanManagerForEntityListeners.java
index e0396ffa95..88edba4f08 100644
--- 
a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/BeanManagerForEntityListeners.java
+++ 
b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/BeanManagerForEntityListeners.java
@@ -79,12 +79,6 @@ public class BeanManagerForEntityListeners implements 
BeanManager {
         return _Util.createAnnotatedType(type);
     }
 
-//TODO[ISIS-3275] investigate this removal
-//    @Override
-//    public <T> InjectionTarget<T> createInjectionTarget(final 
AnnotatedType<T> type) {
-//        return _Util.createInjectionTarget(type, serviceInjectorProvider);
-//    }
-
     // -- IGNORED
 
     @Override
@@ -245,8 +239,7 @@ public class BeanManagerForEntityListeners implements 
BeanManager {
 
     @Override
     public <T> InjectionTargetFactory<T> getInjectionTargetFactory(final 
AnnotatedType<T> annotatedType) {
-        _Exceptions.throwNotImplemented();
-        return null;
+        return _Util.createInjectionTargetFactory(annotatedType, 
serviceInjectorProvider);
     }
 
     @Override
diff --git 
a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/_Util.java
 
b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/_Util.java
index 9c82afc6b9..5d23301a67 100644
--- 
a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/_Util.java
+++ 
b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/inject/_Util.java
@@ -35,6 +35,7 @@ import jakarta.enterprise.inject.spi.AnnotatedMethod;
 import jakarta.enterprise.inject.spi.AnnotatedType;
 import jakarta.enterprise.inject.spi.InjectionPoint;
 import jakarta.enterprise.inject.spi.InjectionTarget;
+import jakarta.enterprise.inject.spi.InjectionTargetFactory;
 import jakarta.inject.Provider;
 import lombok.SneakyThrows;
 
@@ -154,4 +155,44 @@ final class _Util {
         };
     }
 
+    static <T> InjectionTargetFactory<T> createInjectionTargetFactory(
+            final AnnotatedType<T> type,
+            final Provider<ServiceInjector> serviceInjectorProvider) {
+
+        return bean -> new InjectionTarget<T>() {
+
+            @Override @SneakyThrows
+            public T produce(final CreationalContext<T> ctx) {
+                return 
type.getJavaClass().getConstructor(_Constants.emptyClasses).newInstance();
+            }
+
+            @Override
+            public void inject(final T instance, final CreationalContext<T> 
ctx) {
+                serviceInjectorProvider.get().injectServicesInto(instance);
+            }
+
+            @Override
+            public void dispose(final T instance) {
+                // silently ignore
+            }
+
+            @Override
+            public Set<InjectionPoint> getInjectionPoints() {
+                // silently ignore
+                return Collections.emptySet();
+            }
+
+            @Override
+            public void postConstruct(final T instance) {
+                // silently ignore
+            }
+
+            @Override
+            public void preDestroy(final T instance) {
+                // silently ignore
+            }
+        };
+
+    }
+
 }
diff --git 
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/springdata/SpringDataJpaTestModule.java
 
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/springdata/SpringDataJpaTestModule.java
index 32a7cdf268..e15d758f8d 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/springdata/SpringDataJpaTestModule.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/springdata/SpringDataJpaTestModule.java
@@ -24,10 +24,13 @@ import org.springframework.context.annotation.Import;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 
 import org.apache.causeway.applib.services.factory.FactoryService;
+import 
org.apache.causeway.testing.fixtures.applib.fixturescripts.ExecutionParametersServiceAutoConfiguration;
+import 
org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScriptsSpecificationProviderAutoConfiguration;
 
 @Configuration
 @Import({
-
+    FixtureScriptsSpecificationProviderAutoConfiguration.class, // because 
@DataJpaTest disables autoconfiguration
+    ExecutionParametersServiceAutoConfiguration.class           // because 
@DataJpaTest disables autoconfiguration
 })
 @EnableJpaRepositories(basePackageClasses = EmployeeRepository.class)
 @EntityScan(basePackageClasses = Employee.class)

Reply via email to