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)