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);
-        
-    }
-
-
-}
-
-
-