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/31 06:31:07 UTC
[isis] branch 2033-Spring_Data_Integration updated: ISIS-2033:
remove temporary refactoring helper, fixing some tests
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2033-Spring_Data_Integration
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/2033-Spring_Data_Integration by this push:
new 9c7bf39 ISIS-2033: remove temporary refactoring helper, fixing some tests
9c7bf39 is described below
commit 9c7bf3922df81f99d8eb8b87aaa356c803545f7a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Dec 31 07:30:50 2020 +0100
ISIS-2033: remove temporary refactoring helper, fixing some tests
---
.../jdo/integration/IsisModuleJdoIntegration.java | 38 +++++++++++--
.../lifecycles/JdoPersistenceLifecycleService.java | 12 ++--
.../metamodel/facets/entity/JdoEntityFacet.java | 55 ++++++++++--------
.../persistence/FetchResultHandler.java | 30 ----------
.../persistence/HasFetchResultHandler.java | 25 ---------
.../persistence/HasTransactionalProcessor.java | 27 ---------
.../persistence/JdoFetchResultHandler.java | 4 +-
.../persistence/JdoPersistenceSession.java | 4 +-
.../persistence/JdoPersistenceSession5.java | 12 +---
.../persistence/JdoPersistenceSessionFactory.java | 25 ---------
.../persistence/JdoPersistenceSessionFactory5.java | 65 ----------------------
...actionRollbackTest_usingTransactionService.java | 47 ++++++++--------
...TransactionRollbackTest_usingTransactional.java | 6 +-
.../isis/JdoIsisTransactionScopeListenerTest.java | 2 +
...ollbackTest_usingTransactionalAndFixtures.java} | 64 +++++++--------------
.../JdoSpringTransactionScopeListenerTest.java | 7 +--
16 files changed, 130 insertions(+), 293 deletions(-)
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java
index b66820e..9ab6b86 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.persistence.jdo.integration;
+import javax.inject.Named;
+
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -31,10 +33,10 @@ import org.apache.isis.persistence.jdo.datanucleus.config.DnSettings;
import org.apache.isis.persistence.jdo.integration.jdosupport.IsisJdoSupportDN5;
import org.apache.isis.persistence.jdo.integration.lifecycles.JdoPersistenceLifecycleService;
import org.apache.isis.persistence.jdo.integration.metamodel.JdoIntegrationProgrammingModel;
-import org.apache.isis.persistence.jdo.integration.persistence.JdoPersistenceSessionFactory5;
import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel;
import org.apache.isis.persistence.jdo.spring.integration.JdoTransactionManager;
import org.apache.isis.persistence.jdo.spring.integration.LocalPersistenceManagerFactoryBean;
+import org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
import lombok.val;
@@ -50,17 +52,42 @@ import lombok.val;
JdoIntegrationProgrammingModel.class,
IsisJdoSupportDN5.class,
- //IsisPlatformTransactionManagerForJdo.class,
JdoPersistenceLifecycleService.class,
- JdoPersistenceSessionFactory5.class,
})
public class IsisModuleJdoIntegration {
+ /**
+ * {@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 localPmfBean) {
+
+ val pmf = localPmfBean.getObject(); // created once per application lifecycle
+
+ val tapmfProxy = new TransactionAwarePersistenceManagerFactoryProxy();
+ tapmfProxy.setTargetPersistenceManagerFactory(pmf);
+ tapmfProxy.setAllowCreate(false);
+ return tapmfProxy;
+ }
+
@Bean
public LocalPersistenceManagerFactoryBean getLocalPersistenceManagerFactoryBean(
final MetaModelContext metaModelContext,
final DnSettings dnSettings) {
+
+ //final IsisBeanTypeRegistry beanTypeRegistry,
+ // final DnSettings dnSettings,
+ //final List<JdoEntityDiscoveryListener> jdoEntityDiscoveryListeners
+
+// _NullSafe.stream(jdoEntityDiscoveryListeners)
+// .forEach(listener->{
+// listener.onEntitiesDiscovered(pmf, beanTypeRegistry.getEntityTypesJdo(), dnSettings.getAsMap());
+// });
val lpmfBean = new LocalPersistenceManagerFactoryBean();
lpmfBean.setJdoPropertyMap(dnSettings.getAsProperties());
@@ -69,7 +96,10 @@ public class IsisModuleJdoIntegration {
@Bean @Primary
public JdoTransactionManager getJdoTransactionManager(LocalPersistenceManagerFactoryBean localPmfBean) {
- return new JdoTransactionManager(localPmfBean.getObject());
+
+ val pmf = localPmfBean.getObject(); // created once per application lifecycle
+
+ return new JdoTransactionManager(pmf);
}
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoPersistenceLifecycleService.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoPersistenceLifecycleService.java
index 67a376b..b997178 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoPersistenceLifecycleService.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoPersistenceLifecycleService.java
@@ -40,7 +40,8 @@ import org.apache.isis.core.runtime.events.AppLifecycleEvent;
import org.apache.isis.persistence.jdo.datanucleus.config.DnSettings;
import org.apache.isis.persistence.jdo.integration.persistence.DnApplication;
import org.apache.isis.persistence.jdo.integration.persistence.JdoPersistenceSession;
-import org.apache.isis.persistence.jdo.integration.persistence.JdoPersistenceSessionFactory;
+import org.apache.isis.persistence.jdo.integration.persistence.JdoPersistenceSession5;
+import org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -54,12 +55,14 @@ import lombok.extern.log4j.Log4j2;
public class JdoPersistenceLifecycleService {
@Inject MetaModelContext metaModelContext;
- @Inject JdoPersistenceSessionFactory persistenceSessionFactory;
+ //@Inject LocalPersistenceManagerFactoryBean localPmfBean;
+ @Inject TransactionAwarePersistenceManagerFactoryProxy txAwarePmfProxy;
+
@Inject IsisBeanTypeRegistry isisBeanTypeRegistry;
@Inject DnSettings dnSettings;
@PostConstruct
- public void postConstr() {
+ public void init() {
if(log.isDebugEnabled()) {
log.debug("init entity types {}",
isisBeanTypeRegistry.getEntityTypesJdo());
@@ -111,8 +114,7 @@ public class JdoPersistenceLifecycleService {
// -- HELPER
private void onInteractionStarted(final InteractionSession interactionSession) {
- val persistenceSession =
- persistenceSessionFactory.createPersistenceSession();
+ val persistenceSession = new JdoPersistenceSession5(metaModelContext, txAwarePmfProxy.getObject());
interactionSession.putAttribute(JdoPersistenceSession.class, persistenceSession);
persistenceSession.open();
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/facets/entity/JdoEntityFacet.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/facets/entity/JdoEntityFacet.java
index 9ef26ec..ab07a31 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/facets/entity/JdoEntityFacet.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/metamodel/facets/entity/JdoEntityFacet.java
@@ -22,6 +22,7 @@ import java.lang.reflect.Method;
import java.util.List;
import java.util.function.Supplier;
+import javax.inject.Inject;
import javax.jdo.FetchGroup;
import javax.jdo.PersistenceManager;
@@ -33,27 +34,27 @@ import org.apache.isis.applib.query.NamedQuery;
import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.repository.EntityState;
+import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.applib.services.xactn.TransactionalProcessor;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.interaction.session.InteractionTracker;
import org.apache.isis.core.metamodel.adapter.oid.ObjectNotFoundException;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
+import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
import org.apache.isis.persistence.jdo.datanucleus.entities.DnEntityStateProvider;
import org.apache.isis.persistence.jdo.datanucleus.oid.JdoObjectIdSerializer;
import org.apache.isis.persistence.jdo.integration.metamodel.JdoMetamodelUtil;
-import org.apache.isis.persistence.jdo.integration.persistence.FetchResultHandler;
-import org.apache.isis.persistence.jdo.integration.persistence.JdoPersistenceSession;
+import org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
import lombok.NonNull;
import lombok.val;
@@ -63,6 +64,11 @@ import lombok.extern.log4j.Log4j2;
public class JdoEntityFacet
extends FacetAbstract
implements EntityFacet {
+
+ @Inject private TransactionAwarePersistenceManagerFactoryProxy pmf;
+ @Inject private TransactionService txService;
+ @Inject private EntityChangeTracker entityChangeTracker;
+ @Inject private ObjectManager objectManager;
public JdoEntityFacet(
final FacetHolder holder) {
@@ -317,52 +323,55 @@ implements EntityFacet {
// -- INTERACTION TRACKER LAZY LOOKUP
// memoizes the lookup, just an optimization
- private final _Lazy<InteractionTracker> isisInteractionTrackerLazy = _Lazy.threadSafe(
- ()->getServiceRegistry().lookupServiceElseFail(InteractionTracker.class));
+// private final _Lazy<InteractionTracker> isisInteractionTrackerLazy = _Lazy.threadSafe(
+// ()->getServiceRegistry().lookupServiceElseFail(InteractionTracker.class));
// -- DEPENDENCIES
private PersistenceManager getPersistenceManager() {
- return getJdoPersistenceSession().getPersistenceManager();
+ if(pmf==null) {
+ getFacetHolder().getServiceInjector().injectServicesInto(this);
+ }
+ return pmf.getPersistenceManager();
}
private TransactionalProcessor getTransactionalProcessor() {
- return getJdoPersistenceSession().getTransactionalProcessor();
- }
-
- private FetchResultHandler getFetchResultHandler() {
- return getJdoPersistenceSession().getFetchResultHandler();
+ if(txService==null) {
+ getFacetHolder().getServiceInjector().injectServicesInto(this);
+ }
+ return txService;
}
- private JdoPersistenceSession getJdoPersistenceSession() {
- return isisInteractionTrackerLazy.get().currentInteractionSession()
- .map(interactionSession->interactionSession.getAttribute(JdoPersistenceSession.class))
- .orElseThrow(()->_Exceptions.illegalState("no JdoPersistenceSession on current thread"));
- }
+// private JdoPersistenceSession getJdoPersistenceSession() {
+// return isisInteractionTrackerLazy.get().currentInteractionSession()
+// .map(interactionSession->interactionSession.getAttribute(JdoPersistenceSession.class))
+// .orElseThrow(()->_Exceptions.illegalState("no JdoPersistenceSession on current thread"));
+// }
// -- HELPER
private Can<ManagedObject> fetchWithinTransaction(Supplier<List<?>> fetcher) {
- val fetchResultHandler = getFetchResultHandler();
return getTransactionalProcessor().callWithinCurrentTransactionElseCreateNew(
()->_NullSafe.stream(fetcher.get())
- .map(fetchedObject->adopt(fetchResultHandler, fetchedObject))
+ .map(fetchedObject->adopt(fetchedObject))
.collect(Can.toCan()))
.orElseFail();
}
- private ManagedObject adopt(final FetchResultHandler fetchResultHandler, final Object fetchedObject) {
+ private ManagedObject adopt(final Object fetchedObject) {
// handles lifecycle callbacks and injects services
// ought not to be necessary, however for some queries it seems that the
// lifecycle listener is not called
if(fetchedObject instanceof Persistable) {
// an entity
- return fetchResultHandler.initializeEntityAfterFetched((Persistable) fetchedObject);
-
+ val entity = objectManager.adapt(fetchedObject);
+ //fetchResultHandler.initializeEntityAfterFetched((Persistable) fetchedObject);
+ entityChangeTracker.recognizeLoaded(entity);
+ return entity;
} else {
// a value type
- return fetchResultHandler.initializeValueAfterFetched(fetchedObject);
+ return objectManager.adapt(fetchedObject);
}
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/FetchResultHandler.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/FetchResultHandler.java
deleted file mode 100644
index 99a8e53..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/FetchResultHandler.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.persistence.jdo.integration.persistence;
-
-import org.datanucleus.enhancement.Persistable;
-
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public interface FetchResultHandler {
-
- ManagedObject initializeEntityAfterFetched(Persistable pojo);
- ManagedObject initializeValueAfterFetched(Object pojo);
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/HasFetchResultHandler.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/HasFetchResultHandler.java
deleted file mode 100644
index 003b0c8..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/HasFetchResultHandler.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.persistence.jdo.integration.persistence;
-
-public interface HasFetchResultHandler {
-
- FetchResultHandler getFetchResultHandler();
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/HasTransactionalProcessor.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/HasTransactionalProcessor.java
deleted file mode 100644
index 6e614a7..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/HasTransactionalProcessor.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.persistence.jdo.integration.persistence;
-
-import org.apache.isis.applib.services.xactn.TransactionalProcessor;
-
-public interface HasTransactionalProcessor {
-
- TransactionalProcessor getTransactionalProcessor();
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoFetchResultHandler.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoFetchResultHandler.java
index a7f9a00..10fdad3 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoFetchResultHandler.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoFetchResultHandler.java
@@ -30,13 +30,12 @@ import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
-public class JdoFetchResultHandler implements FetchResultHandler {
+public class JdoFetchResultHandler {
private final MetaModelContext metaModelContext;
private final PersistenceManager persistenceManager;
private final EntityChangeTracker entityChangeTracker;
- @Override
public ManagedObject initializeEntityAfterFetched(final Persistable pojo) {
final ManagedObject entity = _Utils
@@ -47,7 +46,6 @@ public class JdoFetchResultHandler implements FetchResultHandler {
return entity;
}
- @Override
public ManagedObject initializeValueAfterFetched(final @Nullable Object pojo) {
return _Utils.adaptNullableAndInjectServices(metaModelContext, pojo);
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession.java
index dc321b9..d5cd541 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession.java
@@ -25,9 +25,7 @@ import org.apache.isis.persistence.jdo.provider.persistence.HasPersistenceManage
public interface JdoPersistenceSession
extends
HasMetaModelContext,
- HasPersistenceManager,
- HasTransactionalProcessor,
- HasFetchResultHandler {
+ HasPersistenceManager {
/**
* Binds this {@link JdoPersistenceSession} to the current {@link InteractionSession}.
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession5.java
index 7b1f2ae..544417f 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession5.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSession5.java
@@ -22,7 +22,6 @@ import javax.enterprise.inject.Vetoed;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
-import org.apache.isis.applib.services.xactn.TransactionalProcessor;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
import org.apache.isis.persistence.jdo.integration.lifecycles.IsisLifecycleListener;
@@ -44,9 +43,7 @@ implements
// -- FIELDS
@Getter(onMethod_ = {@Override}) private PersistenceManager persistenceManager;
- @Getter(onMethod_ = {@Override}) private final TransactionalProcessor transactionalProcessor;
@Getter(onMethod_ = {@Override}) private final MetaModelContext metaModelContext;
- @Getter(onMethod_ = {@Override}) private FetchResultHandler fetchResultHandler;
private final PersistenceManagerFactory pmf;
private Runnable unregisterLifecycleListeners;
@@ -68,9 +65,6 @@ implements
this.metaModelContext = metaModelContext;
this.pmf = pmf;
-
- // sub-components
- this.transactionalProcessor = metaModelContext.getTransactionService();
this.state = State.NOT_INITIALIZED;
}
@@ -116,9 +110,6 @@ implements
val entityChangeEmitter =
new JdoEntityChangeEmitter(getMetaModelContext(), persistenceManager, entityChangeTracker);
- fetchResultHandler =
- new JdoFetchResultHandler(getMetaModelContext(), persistenceManager, entityChangeTracker);
-
val isisLifecycleListener = new IsisLifecycleListener(entityChangeEmitter);
persistenceManager.addInstanceLifecycleListener(isisLifecycleListener, (Class[]) null);
@@ -166,7 +157,8 @@ implements
// PersistenceManagerFactoryUtils.releasePersistenceManager(pmHolder.getPersistenceManager(), pmf);
// }
- persistenceManager.close();
+ persistenceManager = null; // detach
+
} catch(final Throwable ex) {
// ignore
log.error(
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSessionFactory.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSessionFactory.java
deleted file mode 100644
index 8284e15..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSessionFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.persistence.jdo.integration.persistence;
-
-public interface JdoPersistenceSessionFactory {
-
- JdoPersistenceSession createPersistenceSession();
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSessionFactory5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSessionFactory5.java
deleted file mode 100644
index 20acebe..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/JdoPersistenceSessionFactory5.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.persistence.jdo.integration.persistence;
-
-import java.util.Objects;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.persistence.jdo.spring.integration.LocalPersistenceManagerFactoryBean;
-
-/**
- *
- * Factory for {@link JdoPersistenceSession}.
- *
- */
-@Service
-@Named("isisJdoDn5.PersistenceSessionFactory5")
-@Order(OrderPrecedence.MIDPOINT)
-@Primary
-@Qualifier("JdoDN5")
-@Singleton
-public class JdoPersistenceSessionFactory5
-implements JdoPersistenceSessionFactory {
-
- @Inject private LocalPersistenceManagerFactoryBean localPmfBean;
- @Inject private MetaModelContext metaModelContext;
-
- @Override
- public JdoPersistenceSession5 createPersistenceSession() {
-
- Objects.requireNonNull(localPmfBean,
- () -> "PersistenceSessionFactory5 requires initialization. " + this.hashCode());
-
- return new JdoPersistenceSession5(
- metaModelContext,
- localPmfBean.getObject());
- }
-
-
-}
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactionService.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactionService.java
index cc60e39..ce7860b 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactionService.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactionService.java
@@ -18,6 +18,9 @@
*/
package org.apache.isis.testdomain.transactions.jdo.isis;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
import javax.inject.Inject;
import org.junit.jupiter.api.BeforeEach;
@@ -25,9 +28,6 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -36,7 +36,6 @@ import org.apache.isis.testdomain.conf.Configuration_usingJdoIsis;
import org.apache.isis.testdomain.jdo.JdoTestDomainPersona;
import org.apache.isis.testdomain.jdo.entities.JdoBook;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
import lombok.val;
@@ -45,7 +44,9 @@ import lombok.val;
Configuration_usingJdoIsis.class,
})
@TestPropertySource(IsisPresets.UseLog4j2Test)
-class JdoIsisTransactionRollbackTest_usingTransactionService extends IsisIntegrationTestAbstract {
+class JdoIsisTransactionRollbackTest_usingTransactionService
+//extends IsisIntegrationTestAbstract
+{
@Inject private FixtureScripts fixtureScripts;
@Inject private TransactionService transactionService;
@@ -53,46 +54,48 @@ class JdoIsisTransactionRollbackTest_usingTransactionService extends IsisIntegra
@BeforeEach
void setUp() {
- // cleanup
- fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
+
+ transactionService.runWithinCurrentTransactionElseCreateNew(()->{
+ // cleanup
+ fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
+
+ });
}
@Test
void happyCaseTx_shouldCommit() {
- // expected pre condition
- assertEquals(0, repository.allInstances(JdoBook.class).size());
-
-
transactionService.runWithinCurrentTransactionElseCreateNew(()->{
+ // expected pre condition
+ assertEquals(0, repository.allInstances(JdoBook.class).size());
fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
-
+
+ // expected post condition
+ assertEquals(1, repository.allInstances(JdoBook.class).size());
});
- // expected post condition
- assertEquals(1, repository.allInstances(JdoBook.class).size());
-
}
@Test
void whenExceptionWithinTx_shouldRollback() {
- // expected pre condition
- assertEquals(0, repository.allInstances(JdoBook.class).size());
+ transactionService.runWithinCurrentTransactionElseCreateNew(()->{
+ // expected pre condition
+ assertEquals(0, repository.allInstances(JdoBook.class).size());
+ });
val result = transactionService.runWithinCurrentTransactionElseCreateNew(()->{
-
fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
-
throw _Exceptions.unrecoverable("Test: force current tx to rollback");
-
});
assertTrue(result.isFailure());
- // expected post condition
- assertEquals(0, repository.allInstances(JdoBook.class).size());
+ transactionService.runWithinCurrentTransactionElseCreateNew(()->{
+ // expected post condition
+ assertEquals(0, repository.allInstances(JdoBook.class).size());
+ });
}
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java
index e055b92..36740e3 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java
@@ -89,7 +89,7 @@ class JdoIsisTransactionRollbackTest_usingTransactional
_Probe.errOut("after fixture");
// expected post condition
- //assertEquals(1, repository.allInstances(JdoBook.class).size());
+ assertEquals(1, repository.allInstances(JdoBook.class).size());
});
@@ -103,8 +103,8 @@ class JdoIsisTransactionRollbackTest_usingTransactional
interactionFactory.runAnonymous(()->{
- // expected condition
- assertEquals(0, repository.allInstances(JdoBook.class).size());
+ // expected condition
+ assertEquals(0, repository.allInstances(JdoBook.class).size());
});
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java
index f4568aa..bfbc40b 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionScopeListenerTest.java
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
+import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -43,6 +44,7 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
Configuration_usingJdoIsis.class,
InteractionBoundaryProbe.class
})
+@Transactional
@TestPropertySource(IsisPresets.UseLog4j2Test)
/**
* With this test we manage IsisInteractions ourselves. (not sub-classing IsisIntegrationTestAbstract)
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionRollbackTest_usingTransactionalAndFixtures.java
similarity index 64%
copy from regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java
copy to regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionRollbackTest_usingTransactionalAndFixtures.java
index e055b92..8a2238a 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/isis/JdoIsisTransactionRollbackTest_usingTransactional.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionRollbackTest_usingTransactionalAndFixtures.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.testdomain.transactions.jdo.isis;
+package org.apache.isis.testdomain.transactions.jdo.spring;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -28,12 +28,12 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Commit;
+import org.springframework.test.context.TestPropertySource;
import org.springframework.transaction.annotation.Transactional;
import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.commons.internal.debug._Probe;
-import org.apache.isis.core.interaction.session.InteractionFactory;
-import org.apache.isis.testdomain.conf.Configuration_usingJdoIsis;
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.testdomain.conf.Configuration_usingJdoSpring;
import org.apache.isis.testdomain.jdo.JdoTestDomainPersona;
import org.apache.isis.testdomain.jdo.entities.JdoBook;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
@@ -45,69 +45,45 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
*/
@SpringBootTest(
classes = {
- Configuration_usingJdoIsis.class
+ Configuration_usingJdoSpring.class,
},
properties = {
"logging.level.org.apache.isis.persistence.jdo.*=DEBUG",
- "logging.level.org.springframework.test.context.transaction.*=DEBUG",
- "logging.level.org.datanucleus.*=DEBUG",
- "logging.config=log4j2-debug-persistence.xml"
-
+ "logging.level.org.springframework.test.context.transaction.*=DEBUG"
})
@Transactional
-//@TestPropertySource(IsisPresets.UseLog4j2Test)
+@TestPropertySource(IsisPresets.UseLog4j2Test)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-class JdoIsisTransactionRollbackTest_usingTransactional
-// extends IsisIntegrationTestAbstract
+class JdoSpringTransactionRollbackTest_usingTransactionalAndFixtures
{
-
- @Inject private FixtureScripts fixtureScripts;
+
@Inject private RepositoryService repository;
- @Inject private InteractionFactory interactionFactory;
-
+ @Inject private FixtureScripts fixtureScripts;
+
@Test @Order(1) @Commit
void cleanup_justInCase() {
-
// cleanup just in case
fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
}
-
+
@Test @Order(2)
void happyCaseTx_shouldCommit() {
-
- _Probe.errOut("before interaction");
-
- interactionFactory.runAnonymous(()->{
-
- // expected pre condition
- assertEquals(0, repository.allInstances(JdoBook.class).size());
-
- _Probe.errOut("before fixture");
-
- fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
-
- _Probe.errOut("after fixture");
-
- // expected post condition
- //assertEquals(1, repository.allInstances(JdoBook.class).size());
-
-
- });
+
+ // expected pre condition
+ assertEquals(0, repository.allInstances(JdoBook.class).size());
- _Probe.errOut("after interaction");
+ fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
+ // expected post condition
+ assertEquals(1, repository.allInstances(JdoBook.class).size());
+
}
-
+
@Test @Order(3)
void previousTest_shouldHaveBeenRolledBack() {
- interactionFactory.runAnonymous(()->{
-
// expected condition
assertEquals(0, repository.allInstances(JdoBook.class).size());
-
- });
-
}
}
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java
index 8a0dc9a..a5cc41e 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/transactions/jdo/spring/JdoSpringTransactionScopeListenerTest.java
@@ -18,16 +18,15 @@
*/
package org.apache.isis.testdomain.transactions.jdo.spring;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import javax.inject.Inject;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.core.config.presets.IsisPresets;
@@ -78,7 +77,7 @@ class JdoSpringTransactionScopeListenerTest {
}
- @Test @Disabled("wip")
+ @Test
void sessionScopedProbe_shouldBeReused_andBeAwareofTransactionBoundaries() {
// new IsisInteractionScope