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 2015/09/16 07:06:37 UTC
[3/4] isis git commit: ISIS-1194: simplfying the bootstrap and wiring
of components, in particular around PersistenceSessionFactory
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 9d76879..04ff7c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -19,7 +19,6 @@
package org.apache.isis.core.metamodel.specloader;
-import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -57,7 +56,6 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.metamodel.spec.FreeStandingList;
-import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.ObjectSpecificationDependencies;
@@ -118,23 +116,12 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
private final ClassSubstitutor classSubstitutor = new ClassSubstitutor();
- /**
- * Injected in the constructor.
- */
+ private final DeploymentCategory deploymentCategory;
private final IsisConfiguration configuration;
- /**
- * Injected in the constructor.
- */
private final ProgrammingModel programmingModel;
-
- /**
- * Defaulted in the constructor.
- */
private final FacetProcessor facetProcessor;
/**
- * Initialized in the constructor.
- *
* <p>
* {@link FacetDecorator}s must be added prior to {@link #init()
* initialization.}
@@ -146,9 +133,8 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
* {@link RuntimeContextNoRuntime}) otherwise.
*
* <p>
- * Should be injected when used by framework, but will default to a no-op
- * implementation if the metamodel is being used standalone (eg for a
- * code-generator).
+ * Should be injected when used by framework, but will default to a no-op implementation if the metamodel is
+ * being used standalone (eg for a code-generator).
*/
private RuntimeContext runtimeContext;
@@ -163,19 +149,21 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
* Populated in {@link SpecificationLoaderSpi#setServiceInjector(org.apache.isis.core.metamodel.services.ServicesInjectorSpi)}.
*/
private ServicesInjectorSpi servicesInjector;
-
+ private ValidationFailures validationFailures;
// /////////////////////////////////////////////////////////////
// Constructor
// /////////////////////////////////////////////////////////////
public ObjectReflectorDefault(
+ final DeploymentCategory deploymentCategory,
final IsisConfiguration configuration,
final ProgrammingModel programmingModel,
final Set<FacetDecorator> facetDecorators,
final MetaModelValidator metaModelValidator,
final List<LayoutMetadataReader> layoutMetadataReaders) {
+ ensureThatArg(deploymentCategory, is(notNullValue()));
ensureThatArg(configuration, is(notNullValue()));
ensureThatArg(programmingModel, is(notNullValue()));
ensureThatArg(facetDecorators, is(notNullValue()));
@@ -183,6 +171,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
ensureThatArg(layoutMetadataReaders, is(notNullValue()));
ensureThatArg(layoutMetadataReaders, is(not(emptyCollectionOf(LayoutMetadataReader.class))));
+ this.deploymentCategory = deploymentCategory;
this.configuration = configuration;
this.programmingModel = programmingModel;
@@ -227,8 +216,10 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
}
public ValidationFailures validate() {
- ValidationFailures validationFailures = new ValidationFailures();
- metaModelValidator.validate(validationFailures);
+ if(validationFailures == null) {
+ validationFailures = new ValidationFailures();
+ metaModelValidator.validate(validationFailures);
+ }
return validationFailures;
}
@@ -239,10 +230,9 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
// default subcomponents
if (runtimeContext == null) {
- runtimeContext = new RuntimeContextNoRuntime(servicesInjector);
+ runtimeContext = new RuntimeContextNoRuntime(servicesInjector, this);
}
- injectInto(runtimeContext);
- injectInto(specificationTraverser);
+
injectInto(metaModelValidator);
// wire subcomponents into each other
@@ -323,13 +313,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
}
}
- //region > isInjectorMethodFor
- private final InjectorMethodEvaluator injectorMethodEvaluator = new InjectorMethodEvaluatorDefault();
-
- public boolean isInjectorMethodFor(Method method, final Class<?> serviceClass) {
- return injectorMethodEvaluator.isInjectorMethodFor(method, serviceClass);
- }
- //endregion
private void recache(final ObjectSpecification newSpec) {
getCache().recache(newSpec);
@@ -443,17 +426,13 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
private ObjectSpecification createSpecification(final Class<?> cls) {
final ServicesInjector servicesInjector = getRuntimeContext().getServicesInjector();
- final PersistenceSessionService persistenceSessionService =
- getRuntimeContext().getPersistenceSessionService();
+ final PersistenceSessionService persistenceSessionService = getRuntimeContext().getPersistenceSessionService();
final ObjectSpecificationDependencies specContext =
- new ObjectSpecificationDependencies(
- getDeploymentCategory(), servicesInjector, this, facetProcessor);
+ new ObjectSpecificationDependencies(deploymentCategory, servicesInjector, this, facetProcessor);
final ObjectMemberDependencies objectMemberDependencies =
- new ObjectMemberDependencies(
- this, servicesInjector,
- persistenceSessionService);
+ new ObjectMemberDependencies(this, servicesInjector, persistenceSessionService);
// ... and create the specs
if (FreeStandingList.class.isAssignableFrom(cls)) {
@@ -467,10 +446,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
}
}
- private DeploymentCategory getDeploymentCategory() {
- return runtimeContext.getDeploymentCategoryProvider().getDeploymentCategory();
- }
-
private Class<?> loadBuiltIn(final String className) throws ClassNotFoundException {
final Class<?> builtIn = ClassUtil.getBuiltIn(className);
if (builtIn != null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java
index c3b42c9..b132603 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorInstaller.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.specloader;
import java.util.Collection;
import org.apache.isis.core.commons.components.Installer;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -31,7 +32,9 @@ public interface ObjectReflectorInstaller extends Installer {
static String TYPE = "reflector";
- SpecificationLoaderSpi createReflector(Collection<MetaModelRefiner> metaModelRefiners);
+ SpecificationLoaderSpi createReflector(
+ final DeploymentCategory deploymentCategory,
+ final Collection<MetaModelRefiner> metaModelRefiners);
void addFacetDecoratorInstaller(final FacetDecoratorInstaller decoratorInstaller);
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
index 26349d0..18a2ed5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/transactions/TransactionStateProvider.java
@@ -19,8 +19,9 @@
package org.apache.isis.core.metamodel.transactions;
-import org.apache.isis.core.commons.components.Injectable;
+public interface TransactionStateProvider {
+
+ void injectInto(final Object candidate);
-public interface TransactionStateProvider extends Injectable {
public TransactionState getTransactionState();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
index d7c623b..61dae20 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
@@ -25,6 +25,7 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
@@ -42,12 +43,13 @@ public final class JavaReflectorHelper {
private JavaReflectorHelper(){}
public static SpecificationLoaderSpi createObjectReflector(
+ final DeploymentCategory deploymentCategory,
+ final IsisConfiguration configuration,
final ProgrammingModel programmingModel,
final Collection<MetaModelRefiner> metaModelRefiners,
final Set<FacetDecorator> facetDecorators,
final List<LayoutMetadataReader> layoutMetadataReaders,
- final MetaModelValidator mmv,
- final IsisConfiguration configuration) {
+ final MetaModelValidator mmv) {
MetaModelValidatorComposite metaModelValidator = MetaModelValidatorComposite.asComposite(mmv);
for (MetaModelRefiner metaModelRefiner : metaModelRefiners) {
@@ -60,7 +62,9 @@ public final class JavaReflectorHelper {
programmingModel.refineMetaModelValidator(metaModelValidator, configuration);
}
- return new ObjectReflectorDefault(configuration, programmingModel, facetDecorators, metaModelValidator, layoutMetadataReaders);
+ return new ObjectReflectorDefault(
+ deploymentCategory, configuration,
+ programmingModel, facetDecorators, metaModelValidator, layoutMetadataReaders);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
index ba36810..f287ec0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java
@@ -32,6 +32,7 @@ import org.apache.isis.core.commons.config.ConfigurationConstants;
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.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
import org.apache.isis.core.metamodel.facets.FacetFactory;
@@ -73,14 +74,16 @@ public class JavaReflectorInstallerNoDecorators extends InstallerAbstract implem
// /////////////////////////////////////////////////////
@Override
- public SpecificationLoaderSpi createReflector(final Collection<MetaModelRefiner> metaModelRefiners) {
+ public SpecificationLoaderSpi createReflector(
+ final DeploymentCategory deploymentCategory,
+ final Collection<MetaModelRefiner> metaModelRefiners) {
final ProgrammingModel programmingModel = createProgrammingModel(getConfiguration());
final Set<FacetDecorator> facetDecorators = createFacetDecorators(getConfiguration());
final MetaModelValidator mmv = createMetaModelValidator(getConfiguration());
final List<LayoutMetadataReader> layoutMetadataReaders = createLayoutMetadataReaders(getConfiguration());
- return JavaReflectorHelper.createObjectReflector(programmingModel, metaModelRefiners, facetDecorators, layoutMetadataReaders, mmv, getConfiguration());
+ return JavaReflectorHelper.createObjectReflector(deploymentCategory, getConfiguration(), programmingModel, metaModelRefiners, facetDecorators, layoutMetadataReaders, mmv);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelBaseTest_constructDefaults.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelBaseTest_constructDefaults.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelBaseTest_constructDefaults.java
index 75ee989..3dd2ad2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelBaseTest_constructDefaults.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelBaseTest_constructDefaults.java
@@ -23,15 +23,12 @@ import org.jmock.auto.Mock;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
public class IsisMetaModelBaseTest_constructDefaults {
@Rule
@@ -48,28 +45,9 @@ public class IsisMetaModelBaseTest_constructDefaults {
@Before
public void setUp() {
context.ignoring(mockProgrammingModel);
- metaModel = new IsisMetaModel(mockContext, mockProgrammingModel);
+ metaModel = new IsisMetaModel(mockProgrammingModel);
}
- @Test
- public void shouldDefaultConfiguration() {
- assertThat(metaModel.getConfiguration(), is(notNullValue()));
- }
-
- @Test
- public void shouldDefaultProgrammingModelFacets() {
- assertThat(metaModel.getProgrammingModelFacets(), is(notNullValue()));
- }
-
- @Test
- public void shouldDefaultFacetDecorators() {
- assertThat(metaModel.getFacetDecorators(), is(notNullValue()));
- }
-
- @Test
- public void shouldHaveNoFacetDecorators() {
- assertThat(metaModel.getFacetDecorators().size(), is(0));
- }
@Test(expected = IllegalStateException.class)
public void shouldNotBeAbleToShutdown() {
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_constructWithServices.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_constructWithServices.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_constructWithServices.java
index 6269785..8573067 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_constructWithServices.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_constructWithServices.java
@@ -62,13 +62,13 @@ public class IsisMetaModelTest_constructWithServices {
@Test
public void shouldSucceedWithoutThrowingAnyExceptions() {
- metaModel = new IsisMetaModel(mockContext, mockProgrammingModel);
+ metaModel = new IsisMetaModel(mockProgrammingModel);
}
@Test
public void shouldBeAbleToRegisterServices() {
- metaModel = new IsisMetaModel(mockContext, mockProgrammingModel, mockService1, mockService2);
- final List<Object> services = metaModel.getServices();
+ metaModel = new IsisMetaModel(mockProgrammingModel, mockService1, mockService2);
+ final List<Object> services = metaModel.getServicesInjector().getRegisteredServices();
assertThat(services.size(), is(3));
assertThat(services, IsisMatchers.containsObjectOfType(SomeRepo.class));
assertThat(services, IsisMatchers.containsObjectOfType(SomeOtherRepo.class));
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
index c525047..929fcca 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
@@ -45,7 +45,7 @@ public class IsisMetaModelTest_getDomainObjectContainer {
@Before
public void setUp() {
- metaModel = new IsisMetaModel(mockContext, mockProgrammingModel);
+ metaModel = new IsisMetaModel(mockProgrammingModel);
expectingMetaModelToBeInitialized();
metaModel.init();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
deleted file mode 100644
index ff17185..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
+++ /dev/null
@@ -1,171 +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.core.metamodel.app;
-
-import java.util.TreeSet;
-
-import com.google.common.collect.Lists;
-
-import org.jmock.Expectations;
-import org.jmock.Sequence;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProviderAbstract;
-import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
-import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.unittestsupport.jmocking.IsisActions;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-
-public class IsisMetaModelTest_init {
-
- @Rule
- public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
- @Mock
- private IsisConfiguration mockConfiguration;
- @Mock
- private ProgrammingModel mockProgrammingModelFacets;
- @Mock
- private AuthenticationSessionProvider mockAuthenticationSessionProvider;
- @Mock
- private SpecificationLoader mockSpecificationLoader;
- @Mock
- private AdapterManager mockAdapterManager;
- @Mock
- private MessageBrokerService mockMessageBrokerService;
- @Mock
- private ServicesInjector mockDependencyInjector;
- @Mock
- private FacetDecorator mockFacetDecorator;
- @Mock
- private RuntimeContext mockRuntimeContext;
-
- private IsisMetaModel metaModel;
-
- @Before
- public void setUp() {
- expectingMetaModelToBeInitialized();
- metaModel = new IsisMetaModel(mockRuntimeContext, mockProgrammingModelFacets);
- }
-
- private void expectingMetaModelToBeInitialized() {
- final Sequence initSequence = context.sequence("init");
- context.checking(new Expectations() {
- {
- allowing(mockRuntimeContext).injectInto(with(any(Object.class)));
- will(IsisActions.injectInto());
-
- allowing(mockRuntimeContext).getAuthenticationSessionProvider();
- will(returnValue(mockAuthenticationSessionProvider));
-
- allowing(mockRuntimeContext).getSpecificationLoader();
- will(returnValue(mockSpecificationLoader));
-
- allowing(mockRuntimeContext).getMessageBrokerService();
- will(returnValue(mockMessageBrokerService));
-
- allowing(mockRuntimeContext).getServicesInjector();
- will(returnValue(mockDependencyInjector));
-
- allowing(mockRuntimeContext).getDeploymentCategoryProvider();
- will(returnValue(new DeploymentCategoryProviderAbstract() {
- @Override
- public DeploymentCategory getDeploymentCategory() {
- return DeploymentCategory.PRODUCTION;
- }
- }));
-
- oneOf(mockProgrammingModelFacets).init();
- inSequence(initSequence);
-
- oneOf(mockProgrammingModelFacets).getList();
- inSequence(initSequence);
- will(returnValue(Lists.newArrayList()));
-
- oneOf(mockRuntimeContext).init();
- inSequence(initSequence);
- }
- });
- context.ignoring(mockProgrammingModelFacets);
- }
-
- @Ignore // too much effort, not used
- @Test
- public void shouldSucceedWithoutThrowingAnyExceptions() {
- metaModel.init();
- }
-
- @Ignore // too much effort, not used
- @Test(expected = IllegalStateException.class)
- public void shouldNotBeAbleToChangeConfiguration() {
- metaModel.init();
- metaModel.setConfiguration(mockConfiguration);
- }
-
- @Ignore // too much effort, not used
- @Test(expected = IllegalStateException.class)
- public void shouldNotBeAbleToChangeProgrammingModelFacets() {
- metaModel.init();
- metaModel.setProgrammingModelFacets(mockProgrammingModelFacets);
- }
-
- @Ignore // too much effort, not used
- @Test(expected = IllegalStateException.class)
- public void shouldNotBeAbleToChangeFacetDecorators() {
- metaModel.init();
- metaModel.setFacetDecorators(new TreeSet<FacetDecorator>());
- }
-
- @Ignore // too much effort, not used
- @Test(expected = UnsupportedOperationException.class)
- public void shouldNotBeAbleToAddToFacetDecorators() {
- metaModel.init();
- metaModel.getFacetDecorators().add(mockFacetDecorator);
- }
-
- @Ignore // too much effort, not used
- @Test(expected = IllegalStateException.class)
- public void shouldNotBeAbleToInitializeAgain() {
- metaModel.init();
- //
- metaModel.init();
- }
-
- @Ignore // too much effort, not used
- @Test
- public void shouldPrime() {
- metaModel.init();
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
index 4de3725..9f15094 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
@@ -80,14 +80,6 @@ public class ProgrammableReflector extends SpecificationLoaderAbstract implement
public void injectInto(final Object candidate) {
}
- //region > isInjectorMethodFor
-
- private final Map<Method, Map<Class<?>, Boolean>> isInjectorMethod = Maps.newConcurrentMap();
-
- public boolean isInjectorMethodFor(Method method, final Class<?> serviceClass) {
- return false;
- }
- //endregion
@Override
public void setRuntimeContext(final RuntimeContext runtimeContext) {
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
index 0d6279e..914dcd2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
@@ -30,6 +30,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
@@ -79,14 +80,16 @@ public abstract class ObjectReflectorDefaultTestAbstract {
}
});
- runtimeContext = new RuntimeContextNoRuntime(new ServicesInjectorDefault(Collections.emptyList()));
- final ObjectReflectorDefault reflector =
- new ObjectReflectorDefault(
+ final ObjectReflectorDefault reflector =
+ new ObjectReflectorDefault(DeploymentCategory.PRODUCTION,
mockConfiguration,
new ProgrammingModelFacetsJava5(),
new HashSet<FacetDecorator>(),
new MetaModelValidatorDefault(),
Lists.<LayoutMetadataReader>newArrayList(new LayoutMetadataReaderFromJson()));
+ runtimeContext =
+ new RuntimeContextNoRuntime(
+ new ServicesInjectorDefault(Collections.emptyList()), reflector);
reflector.setRuntimeContext(runtimeContext);
reflector.setServiceInjector(new ServicesInjectorDefault(Collections.<Object>singletonList(new DomainObjectContainerDefault())));
reflector.init();
@@ -101,13 +104,12 @@ public abstract class ObjectReflectorDefaultTestAbstract {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("illegal argument, expected: is not an empty collection");
- new ObjectReflectorDefault(
- mockConfiguration,
- new ProgrammingModelFacetsJava5(),
- new HashSet<FacetDecorator>(),
- new MetaModelValidatorDefault(),
- Lists.<LayoutMetadataReader>newArrayList()
- );
+ new ObjectReflectorDefault(DeploymentCategory.PRODUCTION ,
+ mockConfiguration,
+ new ProgrammingModelFacetsJava5(),
+ new HashSet<FacetDecorator>(),
+ new MetaModelValidatorDefault(),
+ Lists.<LayoutMetadataReader>newArrayList());
}
@Test
@@ -115,13 +117,12 @@ public abstract class ObjectReflectorDefaultTestAbstract {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("illegal argument, expected: is not null");
- new ObjectReflectorDefault(
- mockConfiguration,
- new ProgrammingModelFacetsJava5(),
- new HashSet<FacetDecorator>(),
- new MetaModelValidatorDefault(),
- null
- );
+ new ObjectReflectorDefault(DeploymentCategory.PRODUCTION,
+ mockConfiguration,
+ new ProgrammingModelFacetsJava5(),
+ new HashSet<FacetDecorator>(),
+ new MetaModelValidatorDefault(),
+ null);
}
@Test
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index a3f061f..a56a549 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -72,7 +72,8 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
public ObjectSpecificationStub(final Class<?> type) {
this(type.getName());
- runtimeContext = new RuntimeContextNoRuntime(new ServicesInjectorDefault(Collections.emptyList()));
+ runtimeContext = new RuntimeContextNoRuntime(
+ new ServicesInjectorDefault(Collections.emptyList()), null);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
index e08788d..2124c1f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
@@ -33,7 +33,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.commons.components.Injectable;
import org.apache.isis.core.commons.components.Installer;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
@@ -91,7 +90,7 @@ import static org.hamcrest.CoreMatchers.nullValue;
* even if it has not been registered in <tt>installer-registry.properties</tt>
* : just specify the {@link Installer}'s fully qualified class name.
*/
-public class InstallerLookup implements InstallerRepository, ApplicationScopedComponent, IsisConfigurationBuilderAware, Injectable, SystemDependencyInjector {
+public class InstallerLookup implements InstallerRepository, ApplicationScopedComponent, IsisConfigurationBuilderAware, SystemDependencyInjector {
private static final Logger LOG = LoggerFactory.getLogger(InstallerLookup.class);
@@ -323,7 +322,6 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
return candidate;
}
- @Override
public void injectInto(final Object candidate) {
if (SystemDependencyInjectorAware.class.isAssignableFrom(candidate.getClass())) {
final SystemDependencyInjectorAware cast = SystemDependencyInjectorAware.class.cast(candidate);
@@ -347,10 +345,6 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
*/
private IsisConfigurationBuilder isisConfigurationBuilder;
- public IsisConfigurationBuilder getConfigurationBuilder() {
- return isisConfigurationBuilder;
- }
-
@Override
@Inject
public void setConfigurationBuilder(final IsisConfigurationBuilder configurationLoader) {
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
index 5733718..0cec1f8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/installerapi/PersistenceMechanismInstaller.java
@@ -23,7 +23,6 @@ import org.apache.isis.core.commons.components.Installer;
import org.apache.isis.core.commons.config.IsisConfigurationBuilderAware;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
@@ -37,8 +36,7 @@ public interface PersistenceMechanismInstaller extends Installer, IsisConfigurat
PersistenceSessionFactory createPersistenceSessionFactory(
final DeploymentType deploymentType,
- final ServicesInjectorSpi servicesInjector,
final IsisConfigurationDefault configuration,
- final RuntimeContextFromSession runtimeContext);
+ final ServicesInjectorSpi servicesInjector);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 51d2204..85dbd3e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -428,7 +428,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
*
* <p>
* Specifically, if an action which has been annotated (is copied by {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet action invocation facet}), and for a parented collection
- * (is copied by the {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault adapter manager} when {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#adapterFor(Object, ObjectAdapter, OneToManyAssociation) creating} an adapter for a collection.
+ * (is copied by the {@link PersistenceSession} when {@link PersistenceSession#adapterFor(Object, ObjectAdapter, OneToManyAssociation) creating} an adapter for a collection.
* </p>
*/
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
deleted file mode 100644
index 6e13b6a..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ /dev/null
@@ -1,136 +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.core.runtime.persistence.adaptermanager;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.components.SessionScopedComponent;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-
-/**
- * Responsible for managing the {@link ObjectAdapter adapter}s and {@link Oid
- * identities} for each and every POJO that is being used by the framework.
- *
- * <p>
- * It provides a consistent set of adapters in memory, providing an
- * {@link ObjectAdapter adapter} for the POJOs that are in use ensuring that the
- * same object is not loaded twice into memory.
- *
- * <p>
- * Each POJO is given an {@link ObjectAdapter adapter} so that the framework can
- * work with the POJOs even though it does not understand their types. Each POJO
- * maps to an {@link ObjectAdapter adapter} and these are reused.
- */
-public class AdapterManagerDefault implements AdapterManager,
- SessionScopedComponent {
-
- private static final Logger LOG = LoggerFactory.getLogger(AdapterManagerDefault.class);
-
- //region > constructor and fields
-
- private final PersistenceSession persistenceSession;
-
- /**
- * For object store implementations (eg JDO) that do not provide any mechanism
- * to allow transient objects to be reattached.
- *
- * @see <a href="http://www.datanucleus.org/servlet/forum/viewthread_thread,7238_lastpage,yes#35976">this thread</a>
- */
- public AdapterManagerDefault(
- final PersistenceSession persistenceSession) {
- this.persistenceSession = persistenceSession;
-
- }
- //endregion
-
- //region > open, close
- public void open() {
- }
-
- public void close() {
- }
- //endregion
-
- //region > getAdapterFor
- @Override
- public ObjectAdapter getAdapterFor(final Object pojo) {
- return persistenceSession.getAdapterFor(pojo);
- }
-
- @Override
- public ObjectAdapter getAdapterFor(final Oid oid) {
- return persistenceSession.getAdapterFor(oid);
- }
- //endregion
-
- //region > adapterFor
-
- @Override
- public ObjectAdapter adapterFor(final Object pojo) {
- return persistenceSession.adapterFor(pojo);
- }
-
- @Override
- public ObjectAdapter adapterFor(
- final Object pojo, final ObjectAdapter parentAdapter, final OneToManyAssociation collection) {
- return persistenceSession.adapterFor(pojo, parentAdapter, collection);
- }
-
- //endregion
-
-
- //region > mapRecreatedPojo
-
- @Override
- public ObjectAdapter mapRecreatedPojo(final Oid oid, final Object recreatedPojo) {
- return persistenceSession.mapRecreatedPojo(oid, recreatedPojo);
- }
-
- //endregion
-
- //region > removeAdapter
- @Override
- public void removeAdapter(final ObjectAdapter adapter) {
- persistenceSession.removeAdapter(adapter);
- }
-
- //endregion
-
-
- //region > Injectable
-
- @Override
- public void injectInto(final Object candidate) {
- if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
- final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
- cast.setAdapterManager(this);
- }
- }
- //endregion
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/OidAdapterHashMap.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/OidAdapterHashMap.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/OidAdapterHashMap.java
deleted file mode 100644
index 8403b95..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/OidAdapterHashMap.java
+++ /dev/null
@@ -1,135 +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.core.runtime.persistence.adaptermanager;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.components.SessionScopedComponent;
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.commons.debug.DebuggableWithTitle;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-
-/**
- * A map of the objects' identities and the adapters' of the objects.
- */
-public class OidAdapterHashMap implements DebuggableWithTitle, Iterable<Oid>, SessionScopedComponent {
-
- private static final Logger LOG = LoggerFactory.getLogger(OidAdapterHashMap.class);
- public static final int DEFAULT_OID_ADAPTER_MAP_SIZE = 100;
-
- private final Map<Oid, ObjectAdapter> adapterByOidMap = Maps.newHashMapWithExpectedSize(DEFAULT_OID_ADAPTER_MAP_SIZE);
-
-
- // ///////////////////////////////////////////////////////
- // open, close
- // ///////////////////////////////////////////////////////
-
- public void open() {
- // nothing to do
- }
-
- public void close() {
- LOG.debug("close");
- adapterByOidMap.clear();
- }
-
-
- // ///////////////////////////////////////////////////////
- // add, remove
- // ///////////////////////////////////////////////////////
-
- /**
- * Add an adapter for a given oid
- */
- public void add(final Oid oid, final ObjectAdapter adapter) {
-
- adapterByOidMap.put(oid, adapter);
- // log at end so that if toString needs adapters they're in maps.
- if (LOG.isDebugEnabled()) {
- // do not call toString() on adapter because would call hashCode on
- // the pojo,
- // which for Hibernate PersistentCollections would trigger a
- // resolve.
- LOG.debug("add oid: " + oid + " ; oid.hashCode: + #" + Long.toHexString(oid.hashCode()) + " ; adapter.hashCode(): #" + Long.toHexString(adapter.hashCode()));
- }
- }
-
- /**
- * Remove the adapter for the given oid
- *
- * @return <tt>true</tt> if an adapter was removed.
- */
- public boolean remove(final Oid oid) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("remove oid: " + oid);
- }
- return adapterByOidMap.remove(oid) != null;
- }
-
-
- /**
- * Get the adapter identified by the specified OID.
- */
- public ObjectAdapter getAdapter(final Oid oid) {
- return adapterByOidMap.get(oid);
- }
-
- // ///////////////////////////////////////////////////////
- // iterator
- // ///////////////////////////////////////////////////////
-
- @Override
- public Iterator<Oid> iterator() {
- return adapterByOidMap.keySet().iterator();
- }
-
- // ///////////////////////////////////////////////////////
- // debugging
- // ///////////////////////////////////////////////////////
-
- @Override
- public String debugTitle() {
- return "Identity adapter map";
- }
-
- @Override
- public void debugData(final DebugBuilder debug) {
- int count = 1;
- final Map<Oid, ObjectAdapter> copyForDebug = Maps.newHashMap(adapterByOidMap);
- for (final Map.Entry<Oid, ObjectAdapter> entry : copyForDebug.entrySet()) {
- Oid oid = entry.getKey();
- final ObjectAdapter adapter = entry.getValue();
- debug.append(count++, 5);
- debug.append(" '");
- debug.append(oid.toString(), 15);
- debug.append("' ");
- debug.appendln(adapter != null ? adapter.toString() : "(MISSING OBJECT ?!)");
- }
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
deleted file mode 100644
index 601dc89..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
+++ /dev/null
@@ -1,160 +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.core.runtime.persistence.adaptermanager;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.components.SessionScopedComponent;
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.commons.debug.DebuggableWithTitle;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-
-public class PojoAdapterHashMap implements DebuggableWithTitle, Iterable<ObjectAdapter>, SessionScopedComponent {
-
- private static class IdentityHashKey {
- private final Object pojo;
-
- public IdentityHashKey(final Object pojo) {
- this.pojo = pojo;
- }
-
- @Override
- public int hashCode() {
- return System.identityHashCode(pojo);
- }
-
- @Override
- public boolean equals(final Object obj) {
- return obj == this || (obj instanceof IdentityHashKey && ((IdentityHashKey) obj).pojo == pojo);
- }
- }
-
- private static final Logger LOG = LoggerFactory.getLogger(PojoAdapterHashMap.class);
- public static final int DEFAULT_POJO_ADAPTER_MAP_SIZE = OidAdapterHashMap.DEFAULT_OID_ADAPTER_MAP_SIZE;
-
- protected final Map<Object, ObjectAdapter> adapterByPojoMap;
-
- // ///////////////////////////////////////////////////////////////////////////
- // Constructors, finalize
- // ///////////////////////////////////////////////////////////////////////////
-
- public PojoAdapterHashMap() {
- this(DEFAULT_POJO_ADAPTER_MAP_SIZE);
- }
-
- public PojoAdapterHashMap(final int capacity) {
- adapterByPojoMap = Maps.newHashMapWithExpectedSize(capacity);
- }
-
- @Override
- protected void finalize() throws Throwable {
- super.finalize();
- LOG.debug("finalizing hash of pojos");
- }
-
- // ///////////////////////////////////////////////////////////////////////////
- // open, close
- // ///////////////////////////////////////////////////////////////////////////
-
- public void open() {
- // nothing to do
- }
-
- public void close() {
- LOG.debug("close");
- adapterByPojoMap.clear();
- }
-
-
- // ///////////////////////////////////////////////////////////////////////////
- // add, remove
- // ///////////////////////////////////////////////////////////////////////////
-
- public void add(final Object pojo, final ObjectAdapter adapter) {
- adapterByPojoMap.put(key(pojo), adapter);
-
- if(LOG.isDebugEnabled()) {
- LOG.debug("add adapter: #" + key(pojo) + " -> #" + Long.toHexString(adapter.hashCode()));
-
- }
- }
-
- public void remove(final ObjectAdapter object) {
- if(LOG.isDebugEnabled()) {
- LOG.debug("remove adapter: " + object);
- }
- adapterByPojoMap.remove(key(object.getObject()));
- }
-
- // ///////////////////////////////////////////////////////////////////////////
- // get, contains
- // ///////////////////////////////////////////////////////////////////////////
-
- public boolean containsPojo(final Object pojo) {
- return adapterByPojoMap.containsKey(key(pojo));
- }
-
- public ObjectAdapter getAdapter(final Object pojo) {
- return adapterByPojoMap.get(key(pojo));
- }
-
- // ///////////////////////////////////////////////////////////////////////////
- // elements
- // ///////////////////////////////////////////////////////////////////////////
-
- @Override
- public Iterator<ObjectAdapter> iterator() {
- return adapterByPojoMap.values().iterator();
- }
-
- private Object key(final Object pojo) {
- return new IdentityHashKey(pojo);
- }
-
- // ///////////////////////////////////////////////////////////////////////////
- // Debugging
- // ///////////////////////////////////////////////////////////////////////////
-
- @Override
- public void debugData(final DebugBuilder debug) {
- int count = 0;
- final Map<Object, ObjectAdapter> copyForDebug = Maps.newHashMap(adapterByPojoMap);
- for (final Map.Entry<Object, ObjectAdapter> entry : copyForDebug.entrySet()) {
- Object pojo = entry.getKey();
- final ObjectAdapter object = entry.getValue();
- debug.append(count++ + 1, 5);
- debug.append(" '");
- debug.append(pojo.toString(), 50);
- debug.append("' ");
- debug.appendln(object.toString());
- }
- }
-
- @Override
- public String debugTitle() {
- return "POJO Adapter Hashtable";
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java
deleted file mode 100644
index 3589dda..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/RootAndCollectionAdapters.java
+++ /dev/null
@@ -1,121 +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.core.runtime.persistence.adaptermanager;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import com.google.common.collect.Maps;
-
-import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-/**
- * A root {@link ObjectAdapter adapter} along with aggregated {@link ObjectAdapter adapters}
- * for any of its {@link OneToManyAssociation collection}s that are currently present in
- * the {@link AdapterManager map}s.
- *
- * <p>
- * Used for "impact analysis" when persisting transient root objects; all aggregated adapters
- * must also be persisted.
- */
-public class RootAndCollectionAdapters implements Iterable<ObjectAdapter> {
-
- private final ObjectAdapter parentAdapter;
- private final RootOid rootAdapterOid;
-
- private final Map<OneToManyAssociation, ObjectAdapter> collectionAdapters = Maps.newLinkedHashMap();
-
- public RootAndCollectionAdapters(
- final ObjectAdapter parentAdapter,
- final AdapterManager adapterManager) {
- Assert.assertNotNull(parentAdapter);
- this.rootAdapterOid = (RootOid) parentAdapter.getOid();
- this.parentAdapter = parentAdapter;
- addCollectionAdapters(adapterManager);
- }
-
- public ObjectAdapter getRootAdapter() {
- return parentAdapter;
- }
-
- /**
- * Iterate over the
- * {@link #addCollectionAdapter(OneToManyAssociation, ObjectAdapter)
- * collection adapter}s (does not include the {@link #getRootAdapter() root
- * adapter}.
- */
- @Override
- public Iterator<ObjectAdapter> iterator() {
- return getCollectionAdapters().values().iterator();
- }
-
- /**
- * Which collections are present?
- * @return
- */
- public Set<OneToManyAssociation> getCollections() {
- return getCollectionAdapters().keySet();
- }
-
- /**
- * Corresponding adapter for each collection (values).
- *
- * @see #getCollections()
- */
- public ObjectAdapter getCollectionAdapter(final OneToManyAssociation otma) {
- return collectionAdapters.get(otma);
- }
-
-
- ////////////////////////////////////////////////////////////////////////
- // Helpers
- ////////////////////////////////////////////////////////////////////////
-
- private void addCollectionAdapters(AdapterManager objectAdapterLookup) {
- for (final OneToManyAssociation otma : parentAdapter.getSpecification().getCollections(Contributed.EXCLUDED)) {
- final ParentedCollectionOid collectionOid = new ParentedCollectionOid((RootOid) rootAdapterOid, otma);
- final ObjectAdapter collectionAdapter = objectAdapterLookup.getAdapterFor(collectionOid);
- if (collectionAdapter != null) {
- // collection adapters are lazily created and so there may not be one.
- addCollectionAdapter(otma, collectionAdapter);
- }
- }
- }
-
- private void addCollectionAdapter(final OneToManyAssociation otma, final ObjectAdapter collectionAdapter) {
- Assert.assertNotNull(otma);
- Assert.assertNotNull(collectionAdapter);
- collectionAdapters.put(otma, collectionAdapter);
- }
-
- private Map<OneToManyAssociation, ObjectAdapter> getCollectionAdapters() {
- return Collections.unmodifiableMap(collectionAdapters);
- }
-
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index 7c10f11..f2cb9bc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider
import org.apache.isis.core.commons.authentication.MessageBroker;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
@@ -44,6 +43,7 @@ import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAw
import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAbstract;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.transactions.TransactionState;
import org.apache.isis.core.metamodel.transactions.TransactionStateProvider;
@@ -73,8 +73,9 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
public RuntimeContextFromSession(
final DeploymentCategory deploymentCategory,
final IsisConfigurationDefault configuration,
- final ServicesInjector servicesInjector) {
- super(deploymentCategory, configuration, servicesInjector);
+ final ServicesInjector servicesInjector,
+ final SpecificationLoaderSpi specificationLoader) {
+ super(deploymentCategory, configuration, servicesInjector, specificationLoader);
this.authenticationSessionProvider = new AuthenticationSessionProviderAbstract() {
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
index 64be243..bb9695b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
@@ -48,12 +48,12 @@ public class IsisInjectModule extends AbstractModule {
return new InstallerLookup();
}
- private static IsisConfigurationBuilderDefault defaultConfigurationBuider() {
+ private static IsisConfigurationBuilderDefault defaultConfigurationBuilder() {
return new IsisConfigurationBuilderDefault();
}
public IsisInjectModule(final DeploymentType deploymentType) {
- this(deploymentType, defaultConfigurationBuider(), defaultInstallerLookup());
+ this(deploymentType, defaultConfigurationBuilder(), defaultInstallerLookup());
}
public IsisInjectModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder) {
@@ -61,7 +61,7 @@ public class IsisInjectModule extends AbstractModule {
}
public IsisInjectModule(final DeploymentType deploymentType, final InstallerLookup installerLookup) {
- this(deploymentType, defaultConfigurationBuider(), installerLookup);
+ this(deploymentType, defaultConfigurationBuilder(), installerLookup);
}
public IsisInjectModule(final DeploymentType deploymentType, final IsisConfigurationBuilder isisConfigurationBuilder, final InstallerLookup installerLookup) {
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
index 3176c93..794c093 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
@@ -54,6 +54,7 @@ import org.apache.isis.core.runtime.system.internal.IsisLocaleInitializer;
import org.apache.isis.core.runtime.system.internal.IsisTimeZoneInitializer;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactoryMetamodelRefiner;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
import org.apache.isis.core.runtime.system.transaction.IsisTransactionManagerException;
@@ -137,7 +138,8 @@ public class IsisSystem implements DebugSelection, ApplicationScopedComponent {
final SpecificationLoaderSpi specificationLoader = sessionFactory.getSpecificationLoader();
specificationLoader.validateAndAssert();
- serviceInitializer = initializeServices();
+ // store simply so can do postConstruct when shutdown
+ this.serviceInitializer = initializeServices();
installFixturesIfRequired();
@@ -152,35 +154,52 @@ public class IsisSystem implements DebugSelection, ApplicationScopedComponent {
private IsisSessionFactory createSessionFactory(final DeploymentType deploymentType) throws IsisSystemException {
+ // configuration
final IsisConfigurationDefault configuration = isisComponentProvider.getConfiguration();
- final List<Object> services = isisComponentProvider.provideServices();
-
- ServicesInjectorSpi servicesInjectorSpi = new ServicesInjectorDefault(services);
- servicesInjectorSpi.addFallbackIfRequired(FixtureScripts.class, new FixtureScriptsDefault());
- servicesInjectorSpi.validateServices();
-
- final RuntimeContextFromSession runtimeContext = new RuntimeContextFromSession(deploymentType.getDeploymentCategory(), configuration, servicesInjectorSpi);
- final PersistenceSessionFactory persistenceSessionFactory =
- isisComponentProvider.providePersistenceSessionFactory(deploymentType, servicesInjectorSpi, runtimeContext);
+ // services
+ final List<Object> services = isisComponentProvider.provideServices();
+ ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault(services);
+ servicesInjector.addFallbackIfRequired(FixtureScripts.class, new FixtureScriptsDefault());
+ servicesInjector.validateServices();
+ // authentication, authorization
final AuthenticationManager authenticationManager =
isisComponentProvider.provideAuthenticationManager(deploymentType);
final AuthorizationManager authorizationManager =
isisComponentProvider.provideAuthorizationManager(deploymentType);
+ // specificationLoader
final Collection<MetaModelRefiner> metaModelRefiners =
- refiners(authenticationManager, authorizationManager, persistenceSessionFactory);
+ refiners(authenticationManager, authorizationManager,
+ new PersistenceSessionFactoryMetamodelRefiner());
final SpecificationLoaderSpi specificationLoader =
- isisComponentProvider.provideSpecificationLoaderSpi(metaModelRefiners);
+ isisComponentProvider.provideSpecificationLoaderSpi(deploymentType, metaModelRefiners);
+
+ specificationLoader.setServiceInjector(servicesInjector);
- // bind metamodel to the (runtime) framework
+ // persistenceSessionFactory
+ final PersistenceSessionFactory persistenceSessionFactory =
+ isisComponentProvider.providePersistenceSessionFactory(
+ deploymentType, servicesInjector, specificationLoader);
+
+ // runtimeContext
+ final RuntimeContextFromSession runtimeContext =
+ new RuntimeContextFromSession(
+ deploymentType.getDeploymentCategory(), configuration,
+ servicesInjector, specificationLoader);
+
+ // wire up components and components into services...
runtimeContext.injectInto(specificationLoader);
+ for (Object service : servicesInjector.getRegisteredServices()) {
+ runtimeContext.injectInto(service);
+ }
+
+ // finally instantiate
return new IsisSessionFactory (
- deploymentType, configuration, specificationLoader,
- authenticationManager, authorizationManager,
- persistenceSessionFactory);
+ deploymentType, configuration, servicesInjector, specificationLoader,
+ authenticationManager, authorizationManager, persistenceSessionFactory);
}
private static Collection<MetaModelRefiner> refiners(Object... possibleRefiners ) {
@@ -307,20 +326,24 @@ public class IsisSystem implements DebugSelection, ApplicationScopedComponent {
private void shutdownServices(final ServiceInitializer serviceInitializer) {
// call @PostDestroy (in a session)
- IsisContext.openSession(new InitialisationSession());
- try {
- getTransactionManager().startTransaction();
+ if(serviceInitializer != null) {
+ IsisContext.openSession(new InitialisationSession());
try {
- serviceInitializer.preDestroy();
+ getTransactionManager().startTransaction();
+ try {
- } catch(RuntimeException ex) {
- getTransactionManager().getTransaction().setAbortCause(new IsisTransactionManagerException(ex));
+ serviceInitializer.preDestroy();
+
+ } catch (RuntimeException ex) {
+ getTransactionManager().getTransaction().setAbortCause(
+ new IsisTransactionManagerException(ex));
+ } finally {
+ // will commit or abort
+ getTransactionManager().endTransaction();
+ }
} finally {
- // will commit or abort
- getTransactionManager().endTransaction();
+ IsisContext.closeSession();
}
- } finally {
- IsisContext.closeSession();
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContextThreadLocal.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContextThreadLocal.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContextThreadLocal.java
index e99e485..1e25e5e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContextThreadLocal.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContextThreadLocal.java
@@ -117,6 +117,11 @@ public class IsisContextThreadLocal extends IsisContext {
}
}
+
+ // /////////////////////////////////////////////////////////
+ // open, close
+ // /////////////////////////////////////////////////////////
+
@Override
protected IsisSession getSessionInstance(final String executionContextId) {
for (final IsisSession data : sessionsByThread.values()) {
@@ -127,10 +132,6 @@ public class IsisContextThreadLocal extends IsisContext {
return null;
}
- // /////////////////////////////////////////////////////////
- // open, close
- // /////////////////////////////////////////////////////////
-
/**
* Is only intended to be called through
* {@link IsisContext#openSession(AuthenticationSession)}.
@@ -154,15 +155,6 @@ public class IsisContextThreadLocal extends IsisContext {
}
}
- protected IsisSession createAndOpenSession(final Thread thread, final AuthenticationSession authenticationSession) {
- final IsisSession session = getSessionFactoryInstance().openSession(authenticationSession);
- session.open();
- if (LOG.isInfoEnabled()) {
- LOG.info(" opening session " + session + " (count " + sessionsByThread.size() + ") for " + authenticationSession.getUserName());
- }
- return session;
- }
-
private IsisSession saveSession(final Thread thread, final IsisSession session) {
synchronized (sessionsByThread) {
sessionsByThread.put(thread, session);
http://git-wip-us.apache.org/repos/asf/isis/blob/a129fd2d/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 5cff237..4327cf4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -28,6 +28,7 @@ import java.util.UUID;
import javax.jdo.FetchGroup;
import javax.jdo.FetchPlan;
import javax.jdo.PersistenceManager;
+import javax.jdo.PersistenceManagerFactory;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -43,7 +44,6 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer2;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.components.SessionScopedComponent;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
@@ -101,9 +101,6 @@ import org.apache.isis.core.runtime.persistence.PojoRecreationException;
import org.apache.isis.core.runtime.persistence.PojoRefreshException;
import org.apache.isis.core.runtime.persistence.UnsupportedFindException;
import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
-import org.apache.isis.core.runtime.persistence.adaptermanager.OidAdapterHashMap;
-import org.apache.isis.core.runtime.persistence.adaptermanager.PojoAdapterHashMap;
-import org.apache.isis.core.runtime.persistence.adaptermanager.RootAndCollectionAdapters;
import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerResolve;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
@@ -113,6 +110,9 @@ import org.apache.isis.core.runtime.persistence.query.PersistenceQueryFindAllIns
import org.apache.isis.core.runtime.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureAbstract;
import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.OidAdapterHashMap;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.PojoAdapterHashMap;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.RootAndCollectionAdapters;
import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
import org.apache.isis.core.runtime.system.transaction.TransactionalClosure;
@@ -132,6 +132,11 @@ import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
+/**
+ * A wrapper around the JDO {@link PersistenceManager}, which also manages concurrency
+ * and maintains an identity map of {@link ObjectAdapter adapter}s and {@link Oid
+ * identities} for each and every POJO that is being used by the framework.
+ */
public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager,
MessageBrokerService, PersistenceSessionService, ConfigurationService {
@@ -153,7 +158,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
//region > constructor, fields, finalize()
- private final PersistenceSessionFactory persistenceSessionFactory;
+ private final FixturesInstalledFlag fixturesInstalledFlag;
private final PersistenceQueryFactory persistenceQueryFactory;
private final IsisConfigurationDefault configuration;
@@ -161,11 +166,15 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
private final AuthenticationSession authenticationSession;
private final ServicesInjectorSpi servicesInjector;
+ /**
+ * Used to create the {@link #persistenceManager} when {@link #open()}ed.
+ */
+ private final PersistenceManagerFactory jdoPersistenceManagerFactory;
// not final only for testing purposes
private IsisTransactionManager transactionManager;
- private final OidMarshaller oidMarshaller;
+ private final OidMarshaller oidMarshaller = new OidMarshaller();
/**
* populated only when {@link #open()}ed.
@@ -178,7 +187,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
private final Map<Class<?>, PersistenceQueryProcessor<?>> persistenceQueryProcessorByClass = Maps.newHashMap();
private final Map<ObjectSpecId, RootOid> registeredServices = Maps.newHashMap();
- private final DataNucleusApplicationComponents applicationComponents;
private final boolean concurrencyCheckingGloballyEnabled;
@@ -187,38 +195,32 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* persisted objects and persist changes to the object that are saved.
*/
public PersistenceSession(
- final PersistenceSessionFactory persistenceSessionFactory,
final IsisConfigurationDefault configuration,
+ final ServicesInjectorSpi servicesInjector,
final SpecificationLoaderSpi specificationLoader,
- final AuthenticationSession authenticationSession) {
+ final AuthenticationSession authenticationSession,
+ final PersistenceManagerFactory jdoPersistenceManagerFactory,
+ final FixturesInstalledFlag fixturesInstalledFlag) {
- ensureThatArg(persistenceSessionFactory, is(not(nullValue())), "persistence session factory required");
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("creating " + this);
+ }
// injected
this.configuration = configuration;
this.specificationLoader = specificationLoader;
this.authenticationSession = authenticationSession;
- this.persistenceSessionFactory = persistenceSessionFactory;
+ this.fixturesInstalledFlag = fixturesInstalledFlag;
- this.servicesInjector = persistenceSessionFactory.getServicesInjector();
- this.applicationComponents = persistenceSessionFactory.getApplicationComponents();
+ this.servicesInjector = servicesInjector;
+ this.jdoPersistenceManagerFactory = jdoPersistenceManagerFactory;
// sub-components
-
- this.oidMarshaller = new OidMarshaller();
-
-
- this.persistenceQueryFactory = new PersistenceQueryFactory(this, getSpecificationLoader());
- this.transactionManager = new IsisTransactionManager(this, servicesInjector);
+ this.persistenceQueryFactory = new PersistenceQueryFactory(this, this.specificationLoader);
+ this.transactionManager = new IsisTransactionManager(this, this.servicesInjector);
setState(State.NOT_INITIALIZED);
- // to implement DomainObjectServices
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("creating " + this);
- }
-
final boolean concurrencyCheckingGloballyDisabled =
configuration.getBoolean("isis.persistor.disableConcurrencyChecking", false);
this.concurrencyCheckingGloballyEnabled = !concurrencyCheckingGloballyDisabled;
@@ -235,12 +237,15 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
//region > open
+ /**
+ * Only populated once {@link #open()}'d
+ */
public PersistenceManager getPersistenceManager() {
return persistenceManager;
}
/**
- * Injects components, calls {@link org.apache.isis.core.commons.components.SessionScopedComponent#open()} on subcomponents, and then creates service
+ * Injects components, calls open on subcomponents, and then creates service
* adapters.
*/
public void open() {
@@ -253,10 +258,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
oidAdapterMap.open();
pojoAdapterMap.open();
- persistenceManager = applicationComponents.getPersistenceManagerFactory().getPersistenceManager();
+ persistenceManager = jdoPersistenceManagerFactory.getPersistenceManager();
final IsisLifecycleListener2 isisLifecycleListener = new IsisLifecycleListener2(this);
- persistenceManager.addInstanceLifecycleListener(isisLifecycleListener, (Class[])null);
+ persistenceManager.addInstanceLifecycleListener(isisLifecycleListener, (Class[]) null);
persistenceQueryProcessorByClass.put(
PersistenceQueryFindAllInstances.class,
@@ -308,8 +313,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
//region > close
/**
- * Calls {@link org.apache.isis.core.commons.components.SessionScopedComponent#close()}
- * on the subcomponents.
+ * Closes the subcomponents.
*
* <p>
* Automatically {@link IsisTransactionManager#endTransaction() ends
@@ -347,6 +351,8 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
LOG.error(
"close: failed to close JDO persistenceManager; continuing to avoid memory leakage");
}
+ // TODO: REVIEW ... ??? this is a guess: don't set to null, because we need for -> transactionManager -> transaction -> messageBroker
+ // persistenceManager = null;
try {
oidAdapterMap.close();
@@ -657,8 +663,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* up objects.
*
* <p>
- * This method is called only once after the
- * {@link ApplicationScopedComponent#init()} has been called. If this flag
+ * This method is called only once after the init has been called. If this flag
* returns <code>false</code> the framework will run the fixtures to
* initialise the persistor.
*
@@ -674,10 +679,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* @see FixturesInstalledFlag
*/
public boolean isFixturesInstalled() {
- if (persistenceSessionFactory.isFixturesInstalled() == null) {
- persistenceSessionFactory.setFixturesInstalled(objectStoreIsFixturesInstalled());
+ if (fixturesInstalledFlag.isFixturesInstalled() == null) {
+ fixturesInstalledFlag.setFixturesInstalled(objectStoreIsFixturesInstalled());
}
- return persistenceSessionFactory.isFixturesInstalled();
+ return fixturesInstalledFlag.isFixturesInstalled();
}
@@ -900,7 +905,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* Makes an {@link ObjectAdapter} persistent. The specified object should be
* stored away via this object store's persistence mechanism, and have a
* new and unique OID assigned to it. The object, should also be added to
- * the {@link org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault} as the object is implicitly 'in use'.
+ * the {@link PersistenceSession} as the object is implicitly 'in use'.
*
* <p>
* If the object has any associations then each of these, where they aren't
@@ -1166,7 +1171,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
debug.appendln();
debug.appendTitle("Services");
- for (final Object servicePojo : persistenceSessionFactory.getServicesInjector().getRegisteredServices()) {
+ for (final Object servicePojo : servicesInjector.getRegisteredServices()) {
final String id = ServiceUtil.id(servicePojo);
final Class<? extends Object> serviceClass = servicePojo.getClass();
final ObjectSpecification serviceSpecification = getSpecificationLoader().loadSpecification(serviceClass);
@@ -1210,7 +1215,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* The configured {@link ServicesInjectorSpi}.
*/
public ServicesInjectorSpi getServicesInjector() {
- return persistenceSessionFactory.getServicesInjector();
+ return servicesInjector;
}