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 2021/01/07 09:33:48 UTC
[isis] branch 2033-Spring_Data_Integration updated: ISIS-2033:
further simplify: remove JdoInteractionSession
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 0b33772 ISIS-2033: further simplify: remove JdoInteractionSession
0b33772 is described below
commit 0b33772087330215713cb9eeb80e2a6191d8690c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 7 10:33:32 2021 +0100
ISIS-2033: further simplify: remove JdoInteractionSession
---
.../jdo/integration/IsisModuleJdoIntegration.java | 35 +++++-
.../lifecycles/JdoLifecycleListener.java | 30 +++--
.../integration/session/JdoIntegrationService.java | 28 +----
.../integration/session/JdoInteractionSession.java | 131 ---------------------
4 files changed, 55 insertions(+), 169 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 41e4a0f..05cbd51 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
@@ -19,18 +19,21 @@
package org.apache.isis.persistence.jdo.integration;
import javax.inject.Named;
+import javax.jdo.PersistenceManagerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
+import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
import org.apache.isis.persistence.jdo.applib.IsisModulePersistenceJdoApplib;
import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoProviderDatanucleus;
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.JdoLifecycleListener;
import org.apache.isis.persistence.jdo.integration.metamodel.JdoIntegrationProgrammingModel;
import org.apache.isis.persistence.jdo.integration.session.JdoIntegrationService;
import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel;
@@ -78,7 +81,8 @@ public class IsisModuleJdoIntegration {
@Bean
public LocalPersistenceManagerFactoryBean getLocalPersistenceManagerFactoryBean(
final MetaModelContext metaModelContext,
- final DnSettings dnSettings) {
+ final DnSettings dnSettings,
+ final EventBusService eventBusService) {
//final IsisBeanTypeRegistry beanTypeRegistry,
// final DnSettings dnSettings,
@@ -89,7 +93,20 @@ public class IsisModuleJdoIntegration {
// listener.onEntitiesDiscovered(pmf, beanTypeRegistry.getEntityTypesJdo(), dnSettings.getAsMap());
// });
- val lpmfBean = new LocalPersistenceManagerFactoryBean();
+ val lpmfBean = new LocalPersistenceManagerFactoryBean() {
+ @Override
+ protected PersistenceManagerFactory newPersistenceManagerFactory(java.util.Map<?,?> props) {
+ val pmf = super.newPersistenceManagerFactory(props);
+ integrateWithApplicationLayer(metaModelContext, eventBusService, pmf);
+ return pmf;
+ }
+ @Override
+ protected PersistenceManagerFactory newPersistenceManagerFactory(String name) {
+ val pmf = super.newPersistenceManagerFactory(name);
+ integrateWithApplicationLayer(metaModelContext, eventBusService, pmf);
+ return pmf;
+ }
+ };
lpmfBean.setJdoPropertyMap(dnSettings.getAsProperties());
return lpmfBean;
}
@@ -103,4 +120,18 @@ public class IsisModuleJdoIntegration {
return new JdoTransactionManager(pmf);
}
+ // -- HELPER
+
+ private static void integrateWithApplicationLayer(
+ final MetaModelContext metaModelContext,
+ final EventBusService eventBusService,
+ final PersistenceManagerFactory pmf) {
+
+ // install JDO specific entity change listeners ...
+
+ val jdoLifecycleListener = new JdoLifecycleListener(metaModelContext, eventBusService);
+ pmf.addInstanceLifecycleListener(jdoLifecycleListener, (Class[]) null);
+
+ }
+
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoLifecycleListener.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoLifecycleListener.java
index 9980730..af0e3f2 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoLifecycleListener.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/lifecycles/JdoLifecycleListener.java
@@ -35,12 +35,15 @@ import org.datanucleus.enhancement.Persistable;
import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
import org.apache.isis.core.transaction.changetracking.events.PostStoreEvent;
import org.apache.isis.core.transaction.changetracking.events.PreStoreEvent;
import org.apache.isis.persistence.jdo.integration.metamodel.JdoMetamodelUtil;
+import org.apache.isis.persistence.jdo.integration.session.JdoEntityChangeEmitter;
+import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.val;
@@ -68,8 +71,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
}
- private final @NonNull EntityChangeEmitter entityChangeEmitter;
- private final @NonNull EntityChangeTracker entityChangeTracker;
+ private final @NonNull MetaModelContext metaModelContext;
private final @NonNull EventBusService eventBusService;
/////////////////////////////////////////////////////////////////////////
@@ -94,8 +96,8 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
@Override
public void postLoad(final InstanceLifecycleEvent event) {
final Persistable pojo = _Utils.persistableFor(event);
- entityChangeEmitter.adaptEntityAndInjectServices(pojo);
- entityChangeTracker.incrementLoaded();
+ getEntityChangeEmitter().adaptEntityAndInjectServices(pojo);
+ getEntityChangeTracker().incrementLoaded();
}
@Override
@@ -111,7 +113,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
final Persistable pojo = _Utils.persistableFor(event);
if(pojo.dnGetStateManager().isNew(pojo)) {
- entityChangeEmitter.invokeIsisPersistingCallback(pojo);
+ getEntityChangeEmitter().invokeIsisPersistingCallback(pojo);
}
}
@@ -129,9 +131,9 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
final Persistable pojo = _Utils.persistableFor(event);
if(pojo.dnGetStateManager().isNew(pojo)) {
- entityChangeEmitter.enlistCreatedAndInvokeIsisPersistedCallback(pojo);
+ getEntityChangeEmitter().enlistCreatedAndInvokeIsisPersistedCallback(pojo);
} else {
- entityChangeEmitter.invokeIsisUpdatedCallback(pojo);
+ getEntityChangeEmitter().invokeIsisUpdatedCallback(pojo);
}
}
@@ -140,7 +142,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
@Override
public void preDirty(InstanceLifecycleEvent event) {
final Persistable pojo = _Utils.persistableFor(event);
- entityChangeEmitter.enlistUpdatingAndInvokeIsisUpdatingCallback(pojo);
+ getEntityChangeEmitter().enlistUpdatingAndInvokeIsisUpdatingCallback(pojo);
}
@Override
@@ -156,7 +158,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
@Override
public void preDelete(InstanceLifecycleEvent event) {
final Persistable pojo = _Utils.persistableFor(event);
- entityChangeEmitter.enlistDeletingAndInvokeIsisRemovingCallbackFacet(pojo);
+ getEntityChangeEmitter().enlistDeletingAndInvokeIsisRemovingCallbackFacet(pojo);
}
@Override
@@ -224,5 +226,15 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
// return phase + " " + location.prefix + " " + LifecycleEventType.lookup(event.getEventType()) + ": oid=" + (adapter !=null? adapter.getOid(): "(null)") + " ,pojo " + pojo;
// }
+ // -- DEPENDENCIES
+
+ @Getter(lazy = true)
+ private final EntityChangeEmitter entityChangeEmitter =
+ new JdoEntityChangeEmitter(metaModelContext, getEntityChangeTracker());
+
+ @Getter(lazy = true)
+ private final EntityChangeTracker entityChangeTracker =
+ metaModelContext.getServiceRegistry()
+ .lookupServiceElseFail(EntityChangeTracker.class);
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoIntegrationService.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoIntegrationService.java
index 1ad4484..89e91dc 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoIntegrationService.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoIntegrationService.java
@@ -18,8 +18,6 @@
*/
package org.apache.isis.persistence.jdo.integration.session;
-import java.util.Optional;
-
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
@@ -34,14 +32,11 @@ import org.springframework.transaction.PlatformTransactionManager;
import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.config.beans.IsisBeanTypeRegistry;
-import org.apache.isis.core.interaction.scope.InteractionScopeAware;
-import org.apache.isis.core.interaction.session.InteractionSession;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.runtime.events.AppLifecycleEvent;
import org.apache.isis.persistence.jdo.datanucleus.config.DnSettings;
import org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
-import lombok.val;
import lombok.extern.log4j.Log4j2;
@Service
@@ -50,8 +45,7 @@ import lombok.extern.log4j.Log4j2;
@Primary
@Qualifier("Default")
@Log4j2
-public class JdoIntegrationService
-implements InteractionScopeAware {
+public class JdoIntegrationService {
@Inject MetaModelContext metaModelContext;
@Inject TransactionAwarePersistenceManagerFactoryProxy txAwarePmfProxy;
@@ -87,26 +81,6 @@ implements InteractionScopeAware {
}
}
-
- @Override
- public void afterEnteringTransactionalBoundary(InteractionSession interactionSession, boolean sync) {
- val persistenceSession = new JdoInteractionSession(metaModelContext, txAwarePmfProxy);
- interactionSession.putAttribute(JdoInteractionSession.class, persistenceSession);
- persistenceSession.open();
- }
-
- @Override
- public void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
- currentJdoSession(interactionSession)
- .ifPresent(JdoInteractionSession::close);
- }
-
- // -- HELPER
-
- private Optional<JdoInteractionSession> currentJdoSession(final InteractionSession interactionSession) {
- return Optional.ofNullable(interactionSession)
- .map(session->session.getAttribute(JdoInteractionSession.class));
- }
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoInteractionSession.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoInteractionSession.java
deleted file mode 100644
index b30b7e3..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/session/JdoInteractionSession.java
+++ /dev/null
@@ -1,131 +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.session;
-
-import javax.enterprise.inject.Vetoed;
-import javax.jdo.PersistenceManager;
-import javax.jdo.PersistenceManagerFactory;
-
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.commons.internal.assertions._Assert.OpenCloseState;
-import org.apache.isis.core.interaction.session.InteractionSession;
-import org.apache.isis.core.metamodel.context.HasMetaModelContext;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
-import org.apache.isis.persistence.jdo.integration.lifecycles.JdoLifecycleListener;
-import org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
-
-import lombok.Getter;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * A wrapper around the JDO {@link PersistenceManager}.
- */
-@Vetoed @Log4j2
-public class JdoInteractionSession
-implements HasMetaModelContext {
-
- // -- FIELDS
-
- @Getter(onMethod_ = {@Override}) private final MetaModelContext metaModelContext;
-
- private final TransactionAwarePersistenceManagerFactoryProxy pmfFactoryProxy;
-
- private OpenCloseState state = OpenCloseState.NOT_INITIALIZED;
-
- // -- CONSTRUCTOR
-
- /**
- * Initialize the object store so that calls to this object store access
- * persisted objects and persist changes to the object that are saved.
- * @param pmf
- */
- public JdoInteractionSession(
- final MetaModelContext metaModelContext,
- final TransactionAwarePersistenceManagerFactoryProxy pmfFactoryProxy) {
-
- if (log.isDebugEnabled()) {
- log.debug("creating {}", this);
- }
-
- this.metaModelContext = metaModelContext;
- this.pmfFactoryProxy = pmfFactoryProxy;
- }
-
- // -- OPEN
-
- /**
- * Binds this {@link JdoInteractionSession} to the current {@link InteractionSession}.
- */
- public void open() {
-
- state.assertEquals(OpenCloseState.NOT_INITIALIZED);
-
- if (log.isDebugEnabled()) {
- log.debug("opening {}", this);
- }
-
- integrateWithApplicationLayer(pmfFactoryProxy.getObject());
-
- this.state = OpenCloseState.OPEN;
- }
-
- // -- CLOSE
-
- /**
- * Commits the current transaction and unbinds this
- * {@link JdoInteractionSession} from the current {@link InteractionSession}.
- */
- public void close() {
-
- if (state.isClosed()) {
- // nothing to do
- return;
- }
-
- this.state = OpenCloseState.CLOSED;
- }
-
- // -- HELPER
-
- private void integrateWithApplicationLayer(final PersistenceManagerFactory pmf) {
-
- val eventBusService = metaModelContext.getServiceRegistry()
- .lookupServiceElseFail(EventBusService.class);
-
- val entityChangeTracker = metaModelContext.getServiceRegistry()
- .lookupServiceElseFail(EntityChangeTracker.class);
-
- val entityChangeEmitter =
- new JdoEntityChangeEmitter(getMetaModelContext(), entityChangeTracker);
-
- // install JDO specific entity change listeners ...
-
- val jdoLifecycleListener = new JdoLifecycleListener(
- entityChangeEmitter, entityChangeTracker, eventBusService);
- pmf.addInstanceLifecycleListener(jdoLifecycleListener, (Class[]) null);
-
- }
-
-
-}
-
-
-