You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/10/08 20:44:38 UTC

svn commit: r1395713 [1/2] - in /incubator/isis/trunk/framework: core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/ core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ core/metamodel/src/main/java/org/apache/i...

Author: danhaywood
Date: Mon Oct  8 18:44:36 2012
New Revision: 1395713

URL: http://svn.apache.org/viewvc?rev=1395713&view=rev
Log:
ISIS-274: reducing the number of configuration properties

see JIRA ticket for details.  This commit pretty much implements the changes documented there.

Added:
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
      - copied, changed from r1395534, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetProvider.java
Removed:
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetProvider.java
Modified:
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
    incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceMechanismInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceSessionFactory.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusSimplePersistAlgorithm.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidator.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidatorLeaf.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerPersistorMechanismInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlPersistorInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/test/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstallerTest.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceConstants.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceSessionFactoryDelegate.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceSessionFactoryDelegating.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/IsisSystemFixturesHookAbstract.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/persistence/PersistenceSession.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/system/persistence/PersistenceSessionFactory.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/systemusinginstallers/IsisSystemAbstract.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/systemusinginstallers/IsisSystemUsingInstallers.java
    incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/main/java/org/apache/isis/runtimes/dflt/testsupport/IsisSystemDefault.java
    incubator/isis/trunk/framework/runtimes/dflt/testsupport/src/test/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorSessionHydratorTest.java
    incubator/isis/trunk/framework/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/components/BddInMemoryPersistenceMechanismInstaller.java
    incubator/isis/trunk/framework/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/components/BddInMemoryPersistenceSessionFactory.java
    incubator/isis/trunk/framework/viewer/junit/src/main/java/org/apache/isis/viewer/junit/internal/InMemoryPersistenceMechanismInstallerWithinJunit.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java Mon Oct  8 18:44:36 2012
@@ -27,7 +27,7 @@ import org.apache.isis.applib.filter.Fil
  * Anything in the metamodel (which also includes peers in the reflector) that
  * can be extended.
  */
-public interface FacetHolder extends FacetProvider {
+public interface FacetHolder {
 
     /**
      * Get the list of all facet <i>types</i> that are supported by objects of

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java (from r1395534, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetProvider.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetProvider.java&r1=1395534&r2=1395713&rev=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetProvider.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java Mon Oct  8 18:44:36 2012
@@ -19,9 +19,22 @@
 
 package org.apache.isis.core.metamodel.facetapi;
 
-
-public interface FacetProvider {
-
-
-
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+
+
+/**
+ * Provides the ability for components to inform/alter/adjust/refine the metamodel.
+ */
+public interface MetaModelRefiner {
+
+    ClassSubstitutor createClassSubstitutor(IsisConfiguration configuration);
+    
+    MetaModelValidator refineMetaModelValidator(MetaModelValidatorComposite baseMetaModelValidator, IsisConfiguration configuration);
+    
+    ProgrammingModel refineProgrammingModel(ProgrammingModel baseProgrammingModel, IsisConfiguration configuration);
+    
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java Mon Oct  8 18:44:36 2012
@@ -24,6 +24,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Properties;
 
+import com.google.common.collect.Lists;
+
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.core.metamodel.services.container.DomainObjectContainerAware;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -160,7 +162,7 @@ public abstract class RuntimeContextAbst
     }
 
     public List<String> getPropertyNames() {
-        final List<String> list = new ArrayList<String>();
+        final List<String> list = Lists.newArrayList();
         for (final Object key : properties.keySet()) {
             list.add((String) key);
         }

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java Mon Oct  8 18:44:36 2012
@@ -19,8 +19,6 @@ package org.apache.isis.core.metamodel.r
 import java.util.List;
 
 import org.apache.isis.core.commons.components.Injectable;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public interface ServicesInjector extends Injectable {
 

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java Mon Oct  8 18:44:36 2012
@@ -37,12 +37,12 @@ import org.apache.isis.applib.DomainObje
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.lang.CastUtils;
 import org.apache.isis.core.commons.lang.ToString;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-import org.apache.isis.core.metamodel.spec.ObjectAdapterUtils;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
+/**
+ * Must be a thread-safe.
+ */
 public class ServicesInjectorDefault implements ServicesInjectorSpi {
 
     private static final Logger LOG = Logger.getLogger(ServicesInjectorDefault.class);
@@ -50,16 +50,20 @@ public class ServicesInjectorDefault imp
     private final List<Object> services = Lists.newArrayList();
     private DomainObjectContainer container;
 
-    /**
-     * Ensure that all services are wired into each other.
-     */
+
+    
+    // /////////////////////////////////////////////////////////
+    // Constructor, init, shutdown
+    // /////////////////////////////////////////////////////////
+
+
     @Override
-    public void open() {
+    public void init() {
         autowireServicesAndContainer();
     }
 
     @Override
-    public void close() {
+    public void shutdown() {
     }
 
     // /////////////////////////////////////////////////////////
@@ -75,6 +79,7 @@ public class ServicesInjectorDefault imp
     public void setContainer(final DomainObjectContainer container) {
         ensureThatArg(container, is(not(nullValue())));
         this.container = container;
+        autowireServicesAndContainer();
     }
 
     // /////////////////////////////////////////////////////////
@@ -212,4 +217,5 @@ public class ServicesInjectorDefault imp
         return null;
     }
 
+
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java Mon Oct  8 18:44:36 2012
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.s
 import java.util.List;
 
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.Injectable;
 import org.apache.isis.core.commons.components.SessionScopedComponent;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -36,7 +37,7 @@ import org.apache.isis.core.metamodel.ru
  * <p>
  * Can be considered a mutable SPI to the {@link ServicesInjector} immutable API.
  */
-public interface ServicesInjectorSpi extends SessionScopedComponent, Injectable, ServicesInjector {
+public interface ServicesInjectorSpi extends ApplicationScopedComponent, Injectable, ServicesInjector {
 
     // ///////////////////////////////////////////////////////////////////////////
     // Container

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java Mon Oct  8 18:44:36 2012
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.specloader;
 
 import org.apache.isis.core.commons.components.Installer;
+import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 
 /**
@@ -29,7 +30,7 @@ public interface ObjectReflectorInstalle
 
     static String TYPE = "reflector";
 
-    SpecificationLoaderSpi createReflector();
+    SpecificationLoaderSpi createReflector(MetaModelRefiner programmingModelAdjuster);
 
     void addFacetDecoratorInstaller(final FacetDecoratorInstaller decoratorInstaller);
 

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java Mon Oct  8 18:44:36 2012
@@ -24,7 +24,6 @@ import org.apache.isis.core.commons.conf
 import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -55,12 +54,6 @@ public final class ReflectorConstants {
     public static final String MEMBER_LAYOUT_ARRANGER_CLASS_NAME = ConfigurationConstants.ROOT + "reflector.memberlayoutarranger";
     public static final String MEMBER_LAYOUT_ARRANGER_CLASS_NAME_DEFAULT = "org.apache.isis.core.progmodel.layout.dflt.MemberLayoutArrangerDefault";
 
-    /**
-     * Key used to lookup implementation of {@link ClassSubstitutor} in
-     * {@link IsisConfiguration}.
-     */
-    public static final String CLASS_SUBSTITUTOR_CLASS_NAME_LIST = ConfigurationConstants.ROOT + "reflector.class-substitutor";
-    public static final String CLASS_SUBSTITUTOR_CLASS_NAME_DEFAULT = "org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor";
 
     /**
      * Key used to lookup implementation of {@link SpecificationTraverser} in

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java Mon Oct  8 18:44:36 2012
@@ -37,8 +37,9 @@ public class MetaModelValidatorComposite
         }
     }
 
-    public void addValidator(final MetaModelValidator validator) {
+    public MetaModelValidatorComposite add(final MetaModelValidator validator) {
         validators.add(validator);
+        return this;
     }
 
     public List<MetaModelValidator> getValidators() {

Modified: incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java (original)
+++ incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java Mon Oct  8 18:44:36 2012
@@ -33,6 +33,7 @@ import org.apache.isis.core.commons.conf
 import org.apache.isis.core.commons.config.InstallerAbstract;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.layout.MemberLayoutArranger;
@@ -48,6 +49,7 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 
 /**
  * An implementation of {@link ObjectReflectorInstaller} without support for {@link FacetDecoratorInstaller}
@@ -84,46 +86,24 @@ public class JavaReflectorInstallerNoDec
      * calling this.
      */
     @Override
-    public SpecificationLoaderSpi createReflector() {
-        final ClassSubstitutor classSubstitutor = createClassSubstitutor(getConfiguration());
+    public SpecificationLoaderSpi createReflector(final MetaModelRefiner metaModelRefiner) {
+
         final CollectionTypeRegistry collectionTypeRegistry = createCollectionTypeRegistry(getConfiguration());
         final SpecificationTraverser specificationTraverser = createSpecificationTraverser(getConfiguration());
         final MemberLayoutArranger memberLayoutArranger = createMemberLayoutArranger(getConfiguration());
-        final ProgrammingModel programmingModel = createProgrammingModelFacets(getConfiguration());
         final Set<FacetDecorator> facetDecorators = createFacetDecorators(getConfiguration());
-        final MetaModelValidator metaModelValidator = createMetaModelValidator(getConfiguration());
 
-        final ObjectReflectorDefault reflector = doCreateReflector(getConfiguration(), classSubstitutor, collectionTypeRegistry, specificationTraverser, memberLayoutArranger, programmingModel, facetDecorators, metaModelValidator);
+        final ClassSubstitutor classSubstitutor = metaModelRefiner.createClassSubstitutor(getConfiguration());
+        
+        final ProgrammingModel baseProgrammingModel = createProgrammingModel(getConfiguration());
+        final ProgrammingModel programmingModel = metaModelRefiner.refineProgrammingModel(baseProgrammingModel, getConfiguration());
+        final MetaModelValidatorComposite baseMetaModelValidator = wrapped(createMetaModelValidator(getConfiguration()));
+        final MetaModelValidator metaModelValidator = metaModelRefiner.refineMetaModelValidator(baseMetaModelValidator, getConfiguration());
 
+        final ObjectReflectorDefault reflector = doCreateReflector(getConfiguration(), classSubstitutor, collectionTypeRegistry, specificationTraverser, memberLayoutArranger, programmingModel, facetDecorators, metaModelValidator);
         return reflector;
     }
 
-    /**
-     * Hook method to allow subclasses to specify a different implementation of
-     * {@link ClassSubstitutor}.
-     * 
-     * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link ReflectorConstants#CLASS_SUBSTITUTOR_CLASS_NAME_LIST}. If not
-     * specified, then defaults to
-     * {@value ReflectorConstants#CLASS_SUBSTITUTOR_CLASS_NAME_DEFAULT}.
-     * 
-     * <p>
-     * 
-     */
-    protected ClassSubstitutor createClassSubstitutor(final IsisConfiguration configuration) {
-        final String[] configuredClassNames = configuration.getList(ReflectorConstants.CLASS_SUBSTITUTOR_CLASS_NAME_LIST);
-        if (configuredClassNames == null || configuredClassNames.length == 0) {
-            return InstanceUtil.createInstance(ReflectorConstants.CLASS_SUBSTITUTOR_CLASS_NAME_DEFAULT, ClassSubstitutor.class);
-        }
-        final List<ClassSubstitutor> substitutors = Lists.newArrayList();
-        for (final String className : configuredClassNames) {
-            final ClassSubstitutor substitutor = InstanceUtil.createInstance(className, ClassSubstitutor.class);
-            substitutors.add(substitutor);
-        }
-        return substitutors.size() == 1 ? substitutors.get(0) : new ClassSubstitutorComposite(substitutors);
-    }
 
     /**
      * Hook method to allow subclasses to specify a different implementation of
@@ -177,7 +157,7 @@ public class JavaReflectorInstallerNoDec
      * {@link ReflectorConstants#FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST} to
      * exclude.
      */
-    protected ProgrammingModel createProgrammingModelFacets(final IsisConfiguration configuration) {
+    protected ProgrammingModel createProgrammingModel(final IsisConfiguration configuration) {
         final ProgrammingModel programmingModel = lookupAndCreateProgrammingModelFacets(configuration);
         includeFacetFactories(configuration, programmingModel);
         excludeFacetFactories(configuration, programmingModel);
@@ -191,7 +171,7 @@ public class JavaReflectorInstallerNoDec
     }
 
     /**
-     * Factored out of {@link #createProgrammingModelFacets(IsisConfiguration)}
+     * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
      * so that subclasses that choose to override can still support
      * customization of their {@link ProgrammingModel} in a similar way.
      */
@@ -206,7 +186,7 @@ public class JavaReflectorInstallerNoDec
     }
 
     /**
-     * Factored out of {@link #createProgrammingModelFacets(IsisConfiguration)}
+     * Factored out of {@link #createProgrammingModel(IsisConfiguration)}
      * so that subclasses that choose to override can still support
      * customization of their {@link ProgrammingModel} in a similar way.
      */
@@ -240,8 +220,13 @@ public class JavaReflectorInstallerNoDec
      */
     protected MetaModelValidator createMetaModelValidator(final IsisConfiguration configuration) {
         final String metaModelValidatorClassName = configuration.getString(ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME, ReflectorConstants.META_MODEL_VALIDATOR_CLASS_NAME_DEFAULT);
-        final MetaModelValidator metaModelValidator = InstanceUtil.createInstance(metaModelValidatorClassName, MetaModelValidator.class);
-        return metaModelValidator;
+        return InstanceUtil.createInstance(metaModelValidatorClassName, MetaModelValidator.class);
+    }
+
+    private MetaModelValidatorComposite wrapped(MetaModelValidator baseMetaModelValidator) {
+        final MetaModelValidatorComposite metaModelValidatorComposite = new MetaModelValidatorComposite();
+        metaModelValidatorComposite.add(baseMetaModelValidator);
+        return metaModelValidatorComposite;
     }
 
     /**

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceMechanismInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceMechanismInstaller.java Mon Oct  8 18:44:36 2012
@@ -19,12 +19,18 @@
 
 package org.apache.isis.runtimes.dflt.objectstores.dflt;
 
+import java.lang.reflect.Modifier;
+
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
+import org.apache.isis.core.metamodel.spec.ObjectInstantiationException;
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.PersistenceMechanismInstallerAbstract;
+import org.apache.isis.runtimes.dflt.runtime.persistence.objectfactory.ObjectFactoryAbstract;
+import org.apache.isis.runtimes.dflt.runtime.persistence.objectfactory.ObjectFactoryAbstract.Mode;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStoreSpi;
 import org.apache.isis.runtimes.dflt.runtime.system.DeploymentType;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManagerSpi;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.ObjectFactory;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory;
 
 /**
@@ -44,7 +50,7 @@ public class InMemoryPersistenceMechanis
 
     @Override
     public PersistenceSessionFactory createPersistenceSessionFactory(final DeploymentType deploymentType) {
-        return new InMemoryPersistenceSessionFactory(deploymentType, this);
+        return new InMemoryPersistenceSessionFactory(deploymentType, getConfiguration(), this);
     }
 
     // ///////////////////////////////////////////////////////////////
@@ -59,4 +65,39 @@ public class InMemoryPersistenceMechanis
         return new InMemoryObjectStore();
     }
 
+    
+    @Override
+    public ObjectFactory createObjectFactory(IsisConfiguration configuration) {
+        return new ObjectFactoryBasic();
+    }
+}
+
+
+class ObjectFactoryBasic extends ObjectFactoryAbstract {
+
+    public ObjectFactoryBasic() {
+    }
+
+    public ObjectFactoryBasic(final Mode mode) {
+        super(mode);
+    }
+
+    /**
+     * Simply instantiates reflectively, does not enhance bytecode etc in any
+     * way.
+     */
+    @Override
+    protected <T> T doInstantiate(final Class<T> cls) throws ObjectInstantiationException {
+        if (Modifier.isAbstract(cls.getModifiers())) {
+            throw new ObjectInstantiationException("Cannot create an instance of an abstract class: " + cls);
+        }
+        try {
+            return cls.newInstance();
+        } catch (final IllegalAccessException e) {
+            throw new ObjectInstantiationException(e);
+        } catch (final InstantiationException e) {
+            throw new ObjectInstantiationException(e);
+        }
+    }
+
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceSessionFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceSessionFactory.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceSessionFactory.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/InMemoryPersistenceSessionFactory.java Mon Oct  8 18:44:36 2012
@@ -19,6 +19,7 @@
 
 package org.apache.isis.runtimes.dflt.objectstores.dflt;
 
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.runtimes.dflt.objectstores.dflt.internal.ObjectStoreInstances;
 import org.apache.isis.runtimes.dflt.objectstores.dflt.internal.ObjectStorePersistedObjects;
 import org.apache.isis.runtimes.dflt.objectstores.dflt.internal.ObjectStorePersistedObjectsDefault;
@@ -34,8 +35,8 @@ public class InMemoryPersistenceSessionF
 
     private ObjectStorePersistedObjects persistedObjects;
 
-    public InMemoryPersistenceSessionFactory(final DeploymentType deploymentType, final PersistenceSessionFactoryDelegate persistenceSessionFactoryDelegate) {
-        super(deploymentType, persistenceSessionFactoryDelegate);
+    public InMemoryPersistenceSessionFactory(final DeploymentType deploymentType, final IsisConfiguration configuration, final PersistenceSessionFactoryDelegate persistenceSessionFactoryDelegate) {
+        super(deploymentType, configuration, persistenceSessionFactoryDelegate);
     }
 
     protected ObjectStorePersistedObjects getPersistedObjects() {

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java Mon Oct  8 18:44:36 2012
@@ -9,13 +9,30 @@ import javax.annotation.Nullable;
 import org.apache.isis.core.commons.components.Installer;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.progmodel.facets.object.ignore.jdo.RemoveJdoEnhancementTypesFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.ignore.jdo.RemoveJdoPrefixedMethodsFacetFactory;
 import org.apache.isis.runtimes.dflt.bytecode.identity.objectfactory.ObjectFactoryBasic;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditService;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.bytecode.DataNucleusTypesClassSubstitutor;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.metamodel.specloader.progmodelfacets.DataNucleusProgrammingModelFacets;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.adaptermanager.DataNucleusPojoRecreator;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi.DataNucleusIdentifierGenerator;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi.DataNucleusSimplePersistAlgorithm;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi.DataNucleusTransactionManager;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable.AuditableAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable.AuditableMarkerInterfaceFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.datastoreidentity.JdoDatastoreIdentityAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.discriminator.JdoDiscriminatorAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.embeddedonly.JdoEmbeddedOnlyAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.query.JdoQueryAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.prop.primarykey.JdoPrimaryKeyAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.specloader.validator.JdoMetaModelValidatorLeaf;
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.PersistenceMechanismInstallerAbstract;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStoreSpi;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.algorithm.PersistAlgorithm;
@@ -74,6 +91,11 @@ public class DataNucleusPersistenceMecha
         super(NAME);
     }
 
+    
+    ////////////////////////////////////////////////////////////////////////
+    // createObjectStore
+    ////////////////////////////////////////////////////////////////////////
+    
     @Override
     protected ObjectStoreSpi createObjectStore(IsisConfiguration configuration, ObjectAdapterFactory adapterFactory, AdapterManagerSpi adapterManager) {
         createDataNucleusApplicationComponentsIfRequired(configuration);
@@ -91,6 +113,10 @@ public class DataNucleusPersistenceMecha
         applicationComponents = new DataNucleusApplicationComponents(props, getSpecificationLoader().allSpecifications());
     }
 
+    ////////////////////////////////////////////////////////////////////////
+    // createPersistenceSession
+    ////////////////////////////////////////////////////////////////////////
+
     @Override
     public PersistenceSession createPersistenceSession(PersistenceSessionFactory persistenceSessionFactory) {
         PersistenceSession persistenceSession = super.createPersistenceSession(persistenceSessionFactory);
@@ -109,34 +135,88 @@ public class DataNucleusPersistenceMecha
         }
         searchedForAuditService = true;
     }
+
+    ////////////////////////////////////////////////////////////////////////
+    // PersistenceSessionFactoryDelegate impl
+    ////////////////////////////////////////////////////////////////////////
+
+    @Override
+    protected PersistAlgorithm createPersistAlgorithm(IsisConfiguration configuration) {
+        return new DataNucleusSimplePersistAlgorithm();
+    }
     
     @Override
-    protected IdentifierGenerator createIdentifierGenerator(IsisConfiguration configuration) {
+    public IdentifierGenerator createIdentifierGenerator(IsisConfiguration configuration) {
         return new DataNucleusIdentifierGenerator();
     }
 
     @Override
-    protected IsisTransactionManager createTransactionManager(final EnlistedObjectDirtying persistor, final TransactionalResource objectStore) {
-        return new DataNucleusTransactionManager(persistor, objectStore, auditService);
+    public ClassSubstitutor createClassSubstitutor(IsisConfiguration configuration) {
+        return new DataNucleusTypesClassSubstitutor();
     }
 
     @Override
-    protected PersistAlgorithm createPersistAlgorithm(IsisConfiguration configuration) {
-        return new DataNucleusSimplePersistAlgorithm();
+    public ProgrammingModel refineProgrammingModel(ProgrammingModel baseProgrammingModel, IsisConfiguration configuration) {
+
+        addJdoFacetFactories(baseProgrammingModel);
+        addDataNucleusFacetFactories(baseProgrammingModel);
+
+        return baseProgrammingModel;
     }
-    
+
+    private void addJdoFacetFactories(ProgrammingModel baseProgrammingModel) {
+        baseProgrammingModel.addFactory(JdoPersistenceCapableAnnotationFacetFactory.class);
+        baseProgrammingModel.addFactory(JdoDatastoreIdentityAnnotationFacetFactory.class);
+        baseProgrammingModel.addFactory(JdoEmbeddedOnlyAnnotationFacetFactory.class);
+
+        baseProgrammingModel.addFactory(JdoPrimaryKeyAnnotationFacetFactory.class);
+        baseProgrammingModel.addFactory(JdoDiscriminatorAnnotationFacetFactory.class);
+
+        baseProgrammingModel.addFactory(JdoQueryAnnotationFacetFactory.class);
+        
+        baseProgrammingModel.addFactory(AuditableAnnotationFacetFactory.class);
+        baseProgrammingModel.addFactory(AuditableMarkerInterfaceFacetFactory.class);
+    }
+
+    private void addDataNucleusFacetFactories(ProgrammingModel baseProgrammingModel) {
+        baseProgrammingModel.addFactory(RemoveJdoEnhancementTypesFacetFactory.class);
+        baseProgrammingModel.addFactory(RemoveJdoPrefixedMethodsFacetFactory.class);
+    }
+
+    @Override
+    public MetaModelValidator refineMetaModelValidator(MetaModelValidatorComposite baseMetaModelValidator, IsisConfiguration configuration) {
+        return baseMetaModelValidator.add(new JdoMetaModelValidatorLeaf());
+    }
+
+
+    @Override
+    protected IsisTransactionManager createTransactionManager(final EnlistedObjectDirtying persistor, final TransactionalResource objectStore) {
+        return new DataNucleusTransactionManager(persistor, objectStore, auditService);
+    }
+
     @Override
-    protected ObjectFactory createObjectFactory(IsisConfiguration configuration) {
+    public ObjectFactory createObjectFactory(IsisConfiguration configuration) {
         return new ObjectFactoryBasic();
     }
 
     @Override
-    protected DataNucleusPojoRecreator createPojoRecreator(IsisConfiguration configuration) {
+    public DataNucleusPojoRecreator createPojoRecreator(IsisConfiguration configuration) {
         return new DataNucleusPojoRecreator();
     }
+
+
+
+
+    
+    ////////////////////////////////////////////////////////////////////////
+    // Dependencies
+    ////////////////////////////////////////////////////////////////////////
     
     protected SpecificationLoaderSpi getSpecificationLoader() {
         return IsisContext.getSpecificationLoader();
     }
 
+
+
+
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusSimplePersistAlgorithm.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusSimplePersistAlgorithm.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusSimplePersistAlgorithm.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusSimplePersistAlgorithm.java Mon Oct  8 18:44:36 2012
@@ -33,9 +33,6 @@ public class DataNucleusSimplePersistAlg
     // makePersistent
     // ////////////////////////////////////////////////////////////////
 
-    /**
-     * @see NakedInsertPostEventListener#onPostInsert(org.hibernate.event.PostInsertEvent)
-     */
     public void makePersistent(final ObjectAdapter adapter,
             final ToPersistObjectSet toPersistObjectSet) {
         if (alreadyPersistedOrNotPersistable(adapter)) {

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java Mon Oct  8 18:44:36 2012
@@ -32,10 +32,10 @@ import org.apache.isis.runtimes.dflt.obj
 /**
  * As per the {@link ProgrammingModelFacetsJava5 Java 5 default programming
  * model}, but also
- * includes support for JPA.
+ * includes support for JDO.
  * <p>
  * Intended to be used by the {@link JpaJavaReflectorInstaller}, which
- * additionally sets up other required components needed for JPA support.
+ * additionally sets up other required components needed for JDO support.
  */
 public class JdoProgrammingModelFacets extends ProgrammingModelFacetsJava5 {
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidator.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidator.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidator.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidator.java Mon Oct  8 18:44:36 2012
@@ -24,8 +24,8 @@ import org.apache.isis.core.progmodel.me
 public class JdoMetaModelValidator extends MetaModelValidatorComposite {
 
     public JdoMetaModelValidator() {
-        addValidator(new MetaModelValidatorDefault());
-        addValidator(new JdoMetaModelValidatorLeaf());
+        add(new MetaModelValidatorDefault());
+        add(new JdoMetaModelValidatorLeaf());
     }
 
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidatorLeaf.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidatorLeaf.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidatorLeaf.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/validator/JdoMetaModelValidatorLeaf.java Mon Oct  8 18:44:36 2012
@@ -56,8 +56,8 @@ public class JdoMetaModelValidatorLeaf e
                 continue;
             }
             final IdentityType identityType = jpcf.getIdentityType();
-            if(identityType != IdentityType.DATASTORE) {
-                validationFailures.add("DataNucleus object store: {0} must be annotated with @PersistenceCapable, with an identityType of either DATASTORE (has an identityType of {1})", objSpec.getFullIdentifier(), identityType);
+            if(identityType != IdentityType.DATASTORE && identityType != IdentityType.UNSPECIFIED) {
+                validationFailures.add("DataNucleus object store: {0} must be annotated with @PersistenceCapable, with an identityType of either DATASTORE or UNSPECIFIED (has an identityType of {1})", objSpec.getFullIdentifier(), identityType);
             }
             
             // TODO: ensure that DATASTORE has recognised @DatastoreIdentity attribute

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java Mon Oct  8 18:44:36 2012
@@ -23,6 +23,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -46,15 +49,11 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.SaveObjectCommand;
 import org.apache.isis.runtimes.dflt.runtime.persistence.query.PersistenceQueryBuiltIn;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
-import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManagerSpi;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGenerator;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceQuery;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 public class NoSqlObjectStore implements ObjectStoreSpi {
     
     private final KeyCreatorDefault keyCreator = new KeyCreatorDefault();

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java Mon Oct  8 18:44:36 2012
@@ -59,7 +59,7 @@ public abstract class NoSqlPersistorMech
     }
 
     @Override
-    protected IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
+    public IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
         return getObjectStore(configuration).getIdentifierGenerator();
     }
 
@@ -68,7 +68,7 @@ public abstract class NoSqlPersistorMech
             //final KeyCreatorDefault keyCreator = createKeyCreator();
             final VersionCreator versionCreator = createVersionCreator();
             final NoSqlDataDatabase db = createNoSqlDatabase(configuration);
-            final OidGenerator oidGenerator = createOidGenerator(db);
+            final OidGenerator oidGenerator = new OidGenerator(createIdentifierGenerator(db));
 
             final Map<String, DataEncryption> availableDataEncryption = new HashMap<String, DataEncryption>();
             try {
@@ -101,8 +101,8 @@ public abstract class NoSqlPersistorMech
         return objectStore;
     }
 
-    protected OidGenerator createOidGenerator(final NoSqlDataDatabase database) {
-        return new OidGenerator(new NoSqlIdentifierGenerator(database));
+    protected NoSqlIdentifierGenerator createIdentifierGenerator(final NoSqlDataDatabase database) {
+        return new NoSqlIdentifierGenerator(database);
     }
 
     protected abstract NoSqlDataDatabase createNoSqlDatabase(IsisConfiguration configuration);

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerPersistorMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerPersistorMechanismInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerPersistorMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerPersistorMechanismInstaller.java Mon Oct  8 18:44:36 2012
@@ -21,6 +21,9 @@ package org.apache.isis.runtimes.dflt.ob
 
 import org.apache.isis.core.commons.config.ConfigurationConstants;
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.NoSqlDataDatabase;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.NoSqlPersistorMechanismInstaller;
 
@@ -45,4 +48,5 @@ public class FileServerPersistorMechanis
         return db;
     }
 
+
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlPersistorInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlPersistorInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlPersistorInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/SqlPersistorInstaller.java Mon Oct  8 18:44:36 2012
@@ -72,7 +72,7 @@ public class SqlPersistorInstaller exten
     }
 
     @Override
-    protected IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
+    public IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
         final DatabaseConnectorFactory connectorFactory = new JdbcConnectorFactory();
         connectionPool = new DatabaseConnectorPool(connectorFactory, 1);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstaller.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstaller.java Mon Oct  8 18:44:36 2012
@@ -50,7 +50,7 @@ public class XmlPersistenceMechanismInst
     }
 
     @Override
-    protected IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
+    public IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
         final long currentTime = new Date().getTime();
         return new IdentifierGeneratorDefault(currentTime);
     }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/test/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstallerTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/test/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstallerTest.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/test/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstallerTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/test/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlPersistenceMechanismInstallerTest.java Mon Oct  8 18:44:36 2012
@@ -21,20 +21,33 @@ package org.apache.isis.runtimes.dflt.ob
 
 import static org.junit.Assert.assertTrue;
 
+import org.jmock.auto.Mock;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
+import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
 import org.apache.isis.runtimes.dflt.runtime.system.DeploymentType;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory;
 
 public class XmlPersistenceMechanismInstallerTest {
 
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+
     private DeploymentType deploymentType;
     XmlPersistenceMechanismInstaller installer;
+    
+    @Mock
+    private IsisConfiguration mockConfiguration;
 
     @Before
     public void setUpSystem() throws Exception {
         installer = new XmlPersistenceMechanismInstaller();
+        installer.setConfiguration(mockConfiguration);
     }
 
     @Test

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java Mon Oct  8 18:44:36 2012
@@ -34,9 +34,15 @@ import org.apache.isis.core.commons.conf
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
+import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.InstallerLookup;
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.InstallerLookupAware;
 import org.apache.isis.runtimes.dflt.runtime.persistence.PersistenceConstants;
@@ -55,6 +61,7 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManagerSpi;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGenerator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGeneratorDefault;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.ObjectFactory;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
@@ -75,6 +82,7 @@ import org.apache.isis.runtimes.dflt.run
  */
 public abstract class PersistenceMechanismInstallerAbstract extends InstallerAbstract implements PersistenceMechanismInstaller, InstallerLookupAware {
 
+
     private static final String LOGGING_PROPERTY = org.apache.isis.core.runtime.logging.Logger.PROPERTY_ROOT + "persistenceSession";
     private static final Logger LOG = Logger.getLogger(PersistenceMechanismInstallerAbstract.class);
 
@@ -94,52 +102,68 @@ public abstract class PersistenceMechani
 
     @Override
     public PersistenceSessionFactory createPersistenceSessionFactory(final DeploymentType deploymentType) {
-        return new PersistenceSessionFactoryDelegating(deploymentType, this);
+        return new PersistenceSessionFactoryDelegating(deploymentType, getConfiguration(), this);
     }
 
 
     /**
-     * Will return a {@link PersistenceSessionObjectStore}; subclasses are free
-     * to downcast if required.
+     * Creates a {@link PersistenceSession} with internal (thread-safe) components obtained from the provided {@link PersistenceSessionFactory}.
+     * 
+     * <p>
+     * Typically should not be overridden.
      */
-    protected PersistenceSession createPersistenceSession(
-            final PersistenceSessionFactory persistenceSessionFactory, 
-            final ObjectAdapterFactory objectAdapterFactory, 
-            final ObjectFactory objectFactory, 
-            final PojoRecreator pojoRecreator, 
-            final IdentifierGenerator identifierGenerator,
-            final ServicesInjectorSpi servicesInjector) {
+    @Override
+    public PersistenceSession createPersistenceSession(final PersistenceSessionFactory persistenceSessionFactory) {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("installing " + this.getClass().getName());
+        }
 
+        ObjectAdapterFactory adapterFactory = persistenceSessionFactory.getAdapterFactory();
+        ObjectFactory objectFactory = persistenceSessionFactory.getObjectFactory();
+        PojoRecreator pojoRecreator = persistenceSessionFactory.getPojoRecreator();
+        IdentifierGenerator identifierGenerator = persistenceSessionFactory.getIdentifierGenerator();
+        ServicesInjectorSpi servicesInjector = persistenceSessionFactory.getServicesInjector();
+        
         final PersistAlgorithm persistAlgorithm = createPersistAlgorithm(getConfiguration());
         final AdapterManagerDefault adapterManager = new AdapterManagerDefault(pojoRecreator);
         
-        ObjectStoreSpi objectStore = createObjectStore(getConfiguration(), objectAdapterFactory, adapterManager);
-
+        ObjectStoreSpi objectStore = createObjectStore(getConfiguration(), adapterFactory, adapterManager);
+        
         ensureThatArg(persistAlgorithm, is(not(nullValue())));
         ensureThatArg(objectStore, is(not(nullValue())));
-
+        
         if (getConfiguration().getBoolean(LOGGING_PROPERTY, false)) {
             final String level = getConfiguration().getString(LOGGING_PROPERTY + ".level", "debug");
             objectStore = new IsisObjectStoreLogger(objectStore, level);
         }
-
+        
         final PersistenceSession persistenceSession = 
-                new PersistenceSession(persistenceSessionFactory, objectAdapterFactory, objectFactory, servicesInjector, identifierGenerator, adapterManager, persistAlgorithm, objectStore);
-
+                new PersistenceSession(persistenceSessionFactory, adapterFactory, objectFactory, servicesInjector, identifierGenerator, adapterManager, persistAlgorithm, objectStore);
+        
         final IsisTransactionManager transactionManager = createTransactionManager(persistenceSession, objectStore);
-
+        
         ensureThatArg(persistenceSession, is(not(nullValue())));
         ensureThatArg(transactionManager, is(not(nullValue())));
-
+        
         persistenceSession.setDirtiableSupport(true);
         persistenceSession.setTransactionManager(transactionManager);
-
+        
         // ... and finally return
         return persistenceSession;
     }
 
     
     // ///////////////////////////////////////////
+    // Mandatory hook methods
+    // ///////////////////////////////////////////
+
+    /**
+     * Hook method to return {@link ObjectStoreSpi}.
+     */
+    protected abstract ObjectStoreSpi createObjectStore(IsisConfiguration configuration, ObjectAdapterFactory adapterFactory, AdapterManagerSpi adapterManager);
+    
+
+    // ///////////////////////////////////////////
     // Optional hook methods
     // ///////////////////////////////////////////
 
@@ -163,160 +187,123 @@ public abstract class PersistenceMechani
         return new IsisTransactionManager(persistor, objectStore);
     }
 
-    // ///////////////////////////////////////////
-    // Mandatory hook methods
-    // ///////////////////////////////////////////
+
+    @Override
+    public ClassSubstitutor createClassSubstitutor(IsisConfiguration configuration) {
+        return InstanceUtil.createInstance(PersistenceConstants.CLASS_SUBSTITUTOR_CLASS_NAME_DEFAULT, ClassSubstitutor.class);
+    }
 
     /**
-     * Hook method to return {@link ObjectStoreSpi}.
+     * Hook method to refine the {@link ProgrammingModel}.
+     * 
+     * <p>
+     * By default, just returns the provided {@link ProgrammingModel}.
      */
-    protected abstract ObjectStoreSpi createObjectStore(IsisConfiguration configuration, ObjectAdapterFactory adapterFactory, AdapterManagerSpi adapterManager);
-
+    @Override
+    public ProgrammingModel refineProgrammingModel(ProgrammingModel baseProgrammingModel, IsisConfiguration configuration) {
+        return baseProgrammingModel;
+    }
     
     /**
-     * Creates a {@link PersistenceSession} that is initialized with the various
-     * hook methods.
+     * Hook method to refine the {@link MetaModelValidator}.
      * 
-     * @see #createPersistenceSession(PersistenceSessionFactory,
-     *      ObjectAdapterFactory, ObjectFactory, AdapterManagerSpi,
-     *      IdentifierGenerator, ServicesInjectorSpi)
-     * @see #createAdapterFactory(IsisConfiguration)
-     * @see #createAdapterManager(IsisConfiguration)
-     * @see #createContainer(IsisConfiguration)
-     * @see #createIdentifierGenerator(IsisConfiguration)
-     * @see #createRuntimeContext(IsisConfiguration)
-     * @see #createServicesInjector(IsisConfiguration)
+     * <p>
+     * By default, just returns the provided {@link MetaModelValidator}.  Note that this is of type {@link MetaModelValidatorComposite} in order to
+     * allow new {@link MetaModelValidator}s to be easily {@link MetaModelValidatorComposite#add(MetaModelValidator) added}. 
      */
     @Override
-    public PersistenceSession createPersistenceSession(final PersistenceSessionFactory persistenceSessionFactory) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("installing " + this.getClass().getName());
-        }
-
-        final PojoRecreator pojoRecreator = createPojoRecreator(getConfiguration());
-        final ObjectAdapterFactory adapterFactory = createAdapterFactory(getConfiguration());
-        final ObjectFactory objectFactory = createObjectFactory(getConfiguration());
-        final IdentifierGenerator identifierGenerator = createIdentifierGenerator(getConfiguration());
-
-        final RuntimeContext runtimeContext = createRuntimeContext(getConfiguration());
-        final DomainObjectContainer container = createContainer(getConfiguration());
-
-        final ServicesInjectorSpi servicesInjector = createServicesInjector(getConfiguration());
-        final List<Object> serviceList = persistenceSessionFactory.getServices();
-
-        ensureThatArg(pojoRecreator, is(not(nullValue())));
-        ensureThatArg(adapterFactory, is(not(nullValue())));
-        ensureThatArg(objectFactory, is(not(nullValue())));
-        ensureThatArg(identifierGenerator, is(not(nullValue())));
-
-        ensureThatArg(runtimeContext, is(not(nullValue())));
-        ensureThatArg(container, is(not(nullValue())));
-        ensureThatArg(serviceList, is(not(nullValue())));
-        ensureThatArg(servicesInjector, is(not(nullValue())));
-
-        // wire up components
-        runtimeContext.injectInto(container);
-        runtimeContext.setContainer(container);
-        for (Object service : serviceList) {
-            runtimeContext.injectInto(service);
-        }
-
-        servicesInjector.setContainer(container);
-        servicesInjector.setServices(serviceList);
-        getSpecificationLoader().injectInto(runtimeContext);
-
-        return createPersistenceSession(persistenceSessionFactory, adapterFactory, objectFactory, pojoRecreator, identifierGenerator, servicesInjector);
+    public MetaModelValidator refineMetaModelValidator(MetaModelValidatorComposite baseMetaModelValidator, IsisConfiguration configuration) {
+        return baseMetaModelValidator;
     }
 
-    
-
-    // ///////////////////////////////////////////
-    // Optional hook methods
-    // ///////////////////////////////////////////
-
-
     /**
      * Hook method to allow subclasses to specify a different implementation of
      * {@link ObjectAdapterFactory}.
      * 
      * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link PersistenceConstants#ADAPTER_FACTORY_CLASS_NAME}. If no
-     * implementation is specified, then defaults to
-     * {@value PersistenceConstants#ADAPTER_FACTORY_CLASS_NAME_DEFAULT}.
-     */
-    protected ObjectAdapterFactory createAdapterFactory(final IsisConfiguration configuration) {
-        final String configuredClassName = configuration.getString(PersistenceConstants.ADAPTER_FACTORY_CLASS_NAME, PersistenceConstants.ADAPTER_FACTORY_CLASS_NAME_DEFAULT);
-        return InstanceUtil.createInstance(configuredClassName, ObjectAdapterFactory.class);
+     * By default, returns {@link PojoAdapterFactory};
+     */
+    public ObjectAdapterFactory createAdapterFactory(final IsisConfiguration configuration) {
+        return new PojoAdapterFactory();
     }
-
+    
     /**
      * Hook method to allow subclasses to specify a different implementation of
      * {@link ObjectFactory}.
      * 
      * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link PersistenceConstants#OBJECT_FACTORY_CLASS_NAME}. If no
-     * implementation is specified, then defaults to
-     * {@value PersistenceConstants#OBJECT_FACTORY_CLASS_NAME_DEFAULT}.
-     */
-    protected ObjectFactory createObjectFactory(final IsisConfiguration configuration) {
-        final String configuredClassName = configuration.getString(PersistenceConstants.OBJECT_FACTORY_CLASS_NAME, PersistenceConstants.OBJECT_FACTORY_CLASS_NAME_DEFAULT);
-        return InstanceUtil.createInstance(configuredClassName, PersistenceConstants.OBJECT_FACTORY_CLASS_NAME_DEFAULT, ObjectFactory.class);
+     * By default, returns <tt>org.apache.isis.runtimes.dflt.bytecode.dflt.objectfactory.CglibObjectFactory</tt>.  Note that this requires that
+     * the <tt>org.apache.isis.runtimes.dflt.bytecode:dflt</tt> module is added to the classpath. 
+     */
+    public ObjectFactory createObjectFactory(final IsisConfiguration configuration) {
+        return InstanceUtil.createInstance(PersistenceConstants.OBJECT_FACTORY_CLASS_NAME_DEFAULT, ObjectFactory.class);
     }
-
+    
     /**
      * Hook method to allow subclasses to specify a different implementation of
      * {@link ServicesInjectorSpi}
      * 
      * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link PersistenceConstants#SERVICES_INJECTOR_CLASS_NAME}. If no
-     * implementation is specified, then defaults to
-     * {@value PersistenceConstants#SERVICES_INJECTOR_CLASS_NAME_DEFAULT}.
-     */
-    protected ServicesInjectorSpi createServicesInjector(final IsisConfiguration configuration) {
-        final String configuredClassName = configuration.getString(PersistenceConstants.SERVICES_INJECTOR_CLASS_NAME, PersistenceConstants.SERVICES_INJECTOR_CLASS_NAME_DEFAULT);
-        return InstanceUtil.createInstance(configuredClassName, ServicesInjectorSpi.class);
+     * By default, returns {@link ServicesInjectorDefault};
+     */
+    public ServicesInjectorSpi createServicesInjector(final IsisConfiguration configuration) {
+        return new ServicesInjectorDefault();
     }
 
     /**
      * Hook method to allow subclasses to specify a different implementation of
-     * {@link OidGenerator}
+     * {@link IdentifierGenerator}
      * 
      * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link PersistenceConstants#IDENTIFIER_GENERATOR_CLASS_NAME}. If no
-     * implementation is specified, then defaults to
-     * {@value PersistenceConstants#IDENTIFIER_GENERATOR_CLASS_NAME_DEFAULT}.
-     */
-    protected IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
-        final String identifierGeneratorClassName = configuration.getString(PersistenceConstants.IDENTIFIER_GENERATOR_CLASS_NAME, PersistenceConstants.IDENTIFIER_GENERATOR_CLASS_NAME_DEFAULT);
-        return InstanceUtil.createInstance(identifierGeneratorClassName, IdentifierGenerator.class);
+     * By default, returns {@link IdentifierGeneratorDefault}.
+     */
+    public IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
+        return new IdentifierGeneratorDefault();
     }
 
-
     /**
      * Hook method to return {@link PojoRecreator}.
      * 
      * <p>
-     * By default returns an {@link PojoRecreatorDefault}.
+     * By default, returns {@link PojoRecreatorDefault}.
      */
-    protected PojoRecreator createPojoRecreator(final IsisConfiguration configuration) {
+    public PojoRecreator createPojoRecreator(final IsisConfiguration configuration) {
         return new PojoRecreatorDefault();
     }
 
     /**
-     * Hook method to return a {@link RuntimeContext}.
+     * Hook method to return a {@link DomainObjectContainer}.
      * 
      * <p>
-     * By default, returns a {@link RuntimeContextFromSession}.
+    * By default, looks up implementation from provided
+    * {@link IsisConfiguration} using
+    * {@link PersistenceConstants#DOMAIN_OBJECT_CONTAINER_CLASS_NAME}. If no
+    * implementation is specified, then defaults to
+    * {@value PersistenceConstants#DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT}.
      */
-    protected RuntimeContext createRuntimeContext(final IsisConfiguration configuration) {
+    public DomainObjectContainer createContainer(final IsisConfiguration configuration) {
+        final String configuredClassName = configuration.getString(PersistenceConstants.DOMAIN_OBJECT_CONTAINER_CLASS_NAME, PersistenceConstants.DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT);
+        return InstanceUtil.createInstance(configuredClassName, PersistenceConstants.DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT, DomainObjectContainer.class);
+    }
+    
+
+    
+    // ///////////////////////////////////////////
+    // Non overridable.
+    // ///////////////////////////////////////////
+
+    /**
+     * Returns a {@link RuntimeContext}, with all application-specific properties
+     * from the provided {@link IsisConfiguration} copied over.
+     */
+    public final RuntimeContext createRuntimeContext(final IsisConfiguration configuration) {
+        final RuntimeContextFromSession runtimeContext = new RuntimeContextFromSession();
+        final Properties properties = applicationPropertiesFrom(configuration);
+        runtimeContext.setProperties(properties);
+        return runtimeContext;
+    }
+
+    private static Properties applicationPropertiesFrom(final IsisConfiguration configuration) {
         final Properties properties = new Properties();
         final IsisConfiguration applicationConfiguration = configuration.getProperties("application");
         for (final String key : applicationConfiguration) {
@@ -324,25 +311,9 @@ public abstract class PersistenceMechani
             final String newKey = key.substring("application.".length());
             properties.setProperty(newKey, value);
         }
-        final RuntimeContextFromSession runtimeContext = new RuntimeContextFromSession();
-        runtimeContext.setProperties(properties);
-        return runtimeContext;
+        return properties;
     }
 
-    /**
-     * Hook method to return a {@link DomainObjectContainer}.
-     * 
-     * <p>
-     * By default, looks up implementation from provided
-     * {@link IsisConfiguration} using
-     * {@link PersistenceConstants#DOMAIN_OBJECT_CONTAINER_CLASS_NAME}. If no
-     * implementation is specified, then defaults to
-     * {@value PersistenceConstants#DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT}.
-     */
-    protected DomainObjectContainer createContainer(final IsisConfiguration configuration) {
-        final String configuredClassName = configuration.getString(PersistenceConstants.DOMAIN_OBJECT_CONTAINER_CLASS_NAME, PersistenceConstants.DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT);
-        return InstanceUtil.createInstance(configuredClassName, PersistenceConstants.DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT, DomainObjectContainer.class);
-    }
 
     // /////////////////////////////////////////////////////
     // Dependencies (from setters)

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceConstants.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceConstants.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceConstants.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceConstants.java Mon Oct  8 18:44:36 2012
@@ -22,44 +22,22 @@ package org.apache.isis.runtimes.dflt.ru
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.core.commons.config.ConfigurationConstants;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
-import org.apache.isis.runtimes.dflt.runtime.persistence.adapter.PojoAdapterFactory;
-import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGenerator;
-import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGeneratorDefault;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.ObjectFactory;
 
 public final class PersistenceConstants {
 
-    /**
-     * Key used to lookup implementation of {@link ObjectAdapterFactory} in
-     * {@link IsisConfiguration}.
-     */
-    public static final String ADAPTER_FACTORY_CLASS_NAME = ConfigurationConstants.ROOT + "persistor.adapter-factory";
-    public static final String ADAPTER_FACTORY_CLASS_NAME_DEFAULT = PojoAdapterFactory.class.getName();
-
-    /**
-     * Key used to lookup implementation of {@link IdentifierGenerator} in
-     * {@link IsisConfiguration}.
-     */
-    public static final String IDENTIFIER_GENERATOR_CLASS_NAME = ConfigurationConstants.ROOT + "persistor.identifier-generator";
-    public static final String IDENTIFIER_GENERATOR_CLASS_NAME_DEFAULT = IdentifierGeneratorDefault.class.getName();
 
     /**
-     * Key used to lookup implementation of {@link ObjectFactory} in
-     * {@link IsisConfiguration}.
+     * Default implementation to use as {@link ObjectFactory}.
      */
-    public static final String OBJECT_FACTORY_CLASS_NAME = ConfigurationConstants.ROOT + "persistor.object-factory";
     public static final String OBJECT_FACTORY_CLASS_NAME_DEFAULT = "org.apache.isis.runtimes.dflt.bytecode.dflt.objectfactory.CglibObjectFactory";
-
+    
     /**
-     * Key used to lookup implementation of {@link ServicesInjectorSpi} in
-     * {@link IsisConfiguration}.
+     * Default implementation to use as {@link ClassSubstitutor}.
      */
-    public static final String SERVICES_INJECTOR_CLASS_NAME = ConfigurationConstants.ROOT + "persistor.services-injector";
-    public static final String SERVICES_INJECTOR_CLASS_NAME_DEFAULT = ServicesInjectorDefault.class.getName();
+    public static final String CLASS_SUBSTITUTOR_CLASS_NAME_DEFAULT = "org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor";
 
     /**
      * Key used to lookup implementation of {@link DomainObjectContainer} in

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceSessionFactoryDelegate.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceSessionFactoryDelegate.java?rev=1395713&r1=1395712&r2=1395713&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceSessionFactoryDelegate.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistenceSessionFactoryDelegate.java Mon Oct  8 18:44:36 2012
@@ -19,7 +19,16 @@
 
 package org.apache.isis.runtimes.dflt.runtime.persistence;
 
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationBuilderAware;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
+import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
+import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
+import org.apache.isis.runtimes.dflt.runtime.persistence.adaptermanager.PojoRecreator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGenerator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.ObjectFactory;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory;
 
@@ -27,7 +36,31 @@ import org.apache.isis.runtimes.dflt.run
  * Creates a {@link PersistenceSession} on behalf of a
  * {@link PersistenceSessionFactory}.
  */
-public interface PersistenceSessionFactoryDelegate extends IsisConfigurationBuilderAware {
+public interface PersistenceSessionFactoryDelegate extends IsisConfigurationBuilderAware, MetaModelRefiner {
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    // singleton threadsafe components created during init
+    ///////////////////////////////////////////////////////////////////////////
+    
+    PojoRecreator createPojoRecreator(IsisConfiguration configuration);
+
+    ObjectAdapterFactory createAdapterFactory(IsisConfiguration configuration);
+
+    ObjectFactory createObjectFactory(IsisConfiguration configuration);
+
+    IdentifierGenerator createIdentifierGenerator(IsisConfiguration configuration);
+
+    ServicesInjectorSpi createServicesInjector(IsisConfiguration configuration);
+
+    DomainObjectContainer createContainer(IsisConfiguration configuration);
+
+    RuntimeContext createRuntimeContext(IsisConfiguration configuration);
+
+    
+    ///////////////////////////////////////////////////////////////////////////
+    // created for each session
+    ///////////////////////////////////////////////////////////////////////////
 
     /**
      * As per {@link PersistenceSessionFactory#createPersistenceSession()}, but
@@ -37,4 +70,6 @@ public interface PersistenceSessionFacto
      */
     PersistenceSession createPersistenceSession(PersistenceSessionFactory persistenceSessionFactory);
 
+    
+    
 }