You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/20 07:41:59 UTC
[isis] branch master updated: ISIS-2033: lightweight JDO: wire up
the TransactionAwarePersistenceManagerFactoryProxy
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 0d44c4e ISIS-2033: lightweight JDO: wire up the TransactionAwarePersistenceManagerFactoryProxy
0d44c4e is described below
commit 0d44c4e8fead7fe67b315a69041255cfa288a9a6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Dec 20 08:41:44 2020 +0100
ISIS-2033: lightweight JDO: wire up the
TransactionAwarePersistenceManagerFactoryProxy
also disable query ranges for now (upper bound not handled properly)
---
.../applib/PersistenceManagerFactoryProvider.java} | 10 +++--
.../metamodel/JdoEntityFacetFactory.java | 11 ++++--
persistence/jdo/spring/pom.xml | 8 ++++
.../jdo/spring/IsisModuleJdoSpring.java | 46 ++++++++++++++++++++++
...sactionAwarePersistenceManagerFactoryProxy.java | 12 +++++-
5 files changed, 79 insertions(+), 8 deletions(-)
diff --git a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java b/persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/PersistenceManagerFactoryProvider.java
similarity index 79%
copy from persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
copy to persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/PersistenceManagerFactoryProvider.java
index c95845a..2f92baa 100644
--- a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
+++ b/persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/PersistenceManagerFactoryProvider.java
@@ -16,10 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.persistence.jdo.spring;
+package org.apache.isis.persistence.jdo.applib;
-import org.springframework.context.annotation.Configuration;
+import javax.jdo.PersistenceManagerFactory;
-@Configuration
-public class IsisModuleJdoSpring {
+public interface PersistenceManagerFactoryProvider {
+
+ PersistenceManagerFactory getPersistenceManagerFactory();
+
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/JdoEntityFacetFactory.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/JdoEntityFacetFactory.java
index fbe9e42..e6f36d2 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/JdoEntityFacetFactory.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/JdoEntityFacetFactory.java
@@ -50,6 +50,7 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.persistence.jdo.applib.PersistenceManagerFactoryProvider;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@@ -167,7 +168,8 @@ public class JdoEntityFacetFactory extends FacetFactoryAbstract {
.longValueExact();
val typedQuery = persistenceManager.newJDOQLTypedQuery(entityClass)
- .range(rangeLower, rangeUpper);
+ //.range(rangeLower, rangeUpper)
+ ;
return _NullSafe.stream(typedQuery.executeList())
.map(entity->ManagedObject.of(spec, entity))
@@ -188,7 +190,8 @@ public class JdoEntityFacetFactory extends FacetFactoryAbstract {
.longValueExact();
val namedQuery = persistenceManager.newJDOQLTypedQuery(entityClass)
- .range(rangeLower, rangeUpper);
+ //.range(rangeLower, rangeUpper)
+ ;
applibNamedQuery
.getParametersByName()
@@ -306,7 +309,9 @@ public class JdoEntityFacetFactory extends FacetFactoryAbstract {
// -- DEPENDENCIES
protected PersistenceManagerFactory getPersistenceManagerFactory() {
- return serviceRegistry.lookupServiceElseFail(PersistenceManagerFactory.class);
+ return serviceRegistry
+ .lookupServiceElseFail(PersistenceManagerFactoryProvider.class)
+ .getPersistenceManagerFactory();
}
protected PersistenceManager getPersistenceManager() {
diff --git a/persistence/jdo/spring/pom.xml b/persistence/jdo/spring/pom.xml
index bf92501..b893f16 100644
--- a/persistence/jdo/spring/pom.xml
+++ b/persistence/jdo/spring/pom.xml
@@ -69,9 +69,17 @@
<dependencies>
<dependency>
+ <groupId>org.apache.isis.commons</groupId>
+ <artifactId>isis-commons</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.isis.core</groupId>
<artifactId>isis-applib</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.isis.persistence</groupId>
+ <artifactId>isis-persistence-jdo-applib</artifactId>
+ </dependency>
<dependency>
<groupId>org.springframework</groupId>
diff --git a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
index c95845a..7c0145c 100644
--- a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
+++ b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java
@@ -18,8 +18,54 @@
*/
package org.apache.isis.persistence.jdo.spring;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.inject.Named;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import lombok.val;
+
@Configuration
public class IsisModuleJdoSpring {
+
+ //TODO[2033] prefix 'isis.persistence.jdo-datanucleus.impl' is (for) legacy
+ @ConfigurationProperties(prefix = "isis.persistence.jdo-datanucleus.impl")
+ @Bean("dn-settings")
+ public Map<String, String> dnSettings() {
+ return new HashMap<>();
+ }
+
+ /**
+ * {@link TransactionAwarePersistenceManagerFactoryProxy} was retired by the Spring Framework, recommended usage is still online [1].
+ * Sources have been recovered from [2].
+ * @see [1] https://docs.spring.io/spring-framework/docs/3.0.0.RC2/reference/html/ch13s04.html
+ * @see [2] https://github.com/spring-projects/spring-framework/tree/2b3445df8134e2b0c4e4a4c4136cbaf9d58b7fc4/spring-orm/src/main/java/org/springframework/orm/jdo
+ */
+ @Bean @Named("transaction-aware-pmf-proxy")
+ public TransactionAwarePersistenceManagerFactoryProxy getTransactionAwarePersistenceManagerFactoryProxy(
+ final LocalPersistenceManagerFactoryBean lpmfBean) {
+
+ val tapmfProxy = new TransactionAwarePersistenceManagerFactoryProxy();
+ tapmfProxy.setTargetPersistenceManagerFactory(lpmfBean.getObject());
+ tapmfProxy.setAllowCreate(false);
+ return tapmfProxy;
+ }
+
+ @Bean
+ public LocalPersistenceManagerFactoryBean getLocalPersistenceManagerFactoryBean(
+ final @Named("dn-settings") Map<String, String> dnSettings) {
+
+ val jdoPropertyMap = new HashMap<String, Object>();
+ dnSettings.forEach(jdoPropertyMap::put);
+
+ val lpmfBean = new LocalPersistenceManagerFactoryBean();
+ lpmfBean.setJdoPropertyMap(jdoPropertyMap);
+ return lpmfBean;
+ }
+
+
}
diff --git a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/TransactionAwarePersistenceManagerFactoryProxy.java b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/TransactionAwarePersistenceManagerFactoryProxy.java
index 90942bb..ea00c90 100644
--- a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/TransactionAwarePersistenceManagerFactoryProxy.java
+++ b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/TransactionAwarePersistenceManagerFactoryProxy.java
@@ -22,6 +22,7 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
@@ -29,6 +30,8 @@ import org.springframework.beans.factory.FactoryBean;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
+import org.apache.isis.persistence.jdo.applib.PersistenceManagerFactoryProvider;
+
/**
* Proxy for a target JDO {@link javax.jdo.PersistenceManagerFactory},
* returning the current thread-bound PersistenceManager (the Spring-managed
@@ -62,7 +65,9 @@ import org.springframework.util.ClassUtils;
* @see PersistenceManagerFactoryUtils#releasePersistenceManager
*/
public class TransactionAwarePersistenceManagerFactoryProxy
-implements FactoryBean<PersistenceManagerFactory> {
+implements
+ FactoryBean<PersistenceManagerFactory>,
+ PersistenceManagerFactoryProvider {
private PersistenceManagerFactory target;
@@ -216,4 +221,9 @@ implements FactoryBean<PersistenceManagerFactory> {
}
}
+ @Override
+ public PersistenceManagerFactory getPersistenceManagerFactory() {
+ return getObject();
+ }
+
}