You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/06/11 19:17:10 UTC

svn commit: r953778 - in /cayenne/main/trunk/framework: cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/mock/ cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/spi/ cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configu...

Author: aadamchik
Date: Fri Jun 11 17:17:09 2010
New Revision: 953778

URL: http://svn.apache.org/viewvc?rev=953778&view=rev
Log:
removing scope handling code from DataDomainProvider

+ unit tests showing that provider binding works with scopes

Added:
    cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/mock/MockImplementation1_Provider.java
Modified:
    cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/spi/DefaultInjectorScopeTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java

Added: cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/mock/MockImplementation1_Provider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/mock/MockImplementation1_Provider.java?rev=953778&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/mock/MockImplementation1_Provider.java (added)
+++ cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/mock/MockImplementation1_Provider.java Fri Jun 11 17:17:09 2010
@@ -0,0 +1,29 @@
+/*****************************************************************
+ *   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.cayenne.di.mock;
+
+import org.apache.cayenne.ConfigurationException;
+import org.apache.cayenne.di.Provider;
+
+public class MockImplementation1_Provider implements Provider<MockInterface1> {
+
+    public MockInterface1 get() throws ConfigurationException {
+        return new MockImplementation1();
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/spi/DefaultInjectorScopeTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/spi/DefaultInjectorScopeTest.java?rev=953778&r1=953777&r2=953778&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/spi/DefaultInjectorScopeTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-di-unpublished/src/test/java/org/apache/cayenne/di/spi/DefaultInjectorScopeTest.java Fri Jun 11 17:17:09 2010
@@ -25,11 +25,12 @@ import org.apache.cayenne.di.Module;
 import org.apache.cayenne.di.OnScopeEnd;
 import org.apache.cayenne.di.mock.MockImplementation1;
 import org.apache.cayenne.di.mock.MockImplementation1_EventAnnotations;
+import org.apache.cayenne.di.mock.MockImplementation1_Provider;
 import org.apache.cayenne.di.mock.MockInterface1;
 
 public class DefaultInjectorScopeTest extends TestCase {
 
-    public void testDefaultScope() {
+    public void testDefaultScope_IsSingleton() {
 
         Module module = new Module() {
 
@@ -131,6 +132,53 @@ public class DefaultInjectorScopeTest ex
         assertTrue(MockImplementation1_EventAnnotations.shutdown1);
         assertTrue(MockImplementation1_EventAnnotations.shutdown2);
         assertTrue(MockImplementation1_EventAnnotations.shutdown3);
+    }
+
+    public void testSingletonScope_WithProvider() {
+
+        Module module = new Module() {
 
+            public void configure(Binder binder) {
+                binder.bind(MockInterface1.class).toProvider(
+                        MockImplementation1_Provider.class).inSingletonScope();
+            }
+        };
+
+        DefaultInjector injector = new DefaultInjector(module);
+
+        MockInterface1 instance1 = injector.getInstance(MockInterface1.class);
+        MockInterface1 instance2 = injector.getInstance(MockInterface1.class);
+        MockInterface1 instance3 = injector.getInstance(MockInterface1.class);
+
+        assertNotNull(instance1);
+        assertNotNull(instance2);
+        assertNotNull(instance3);
+
+        assertSame(instance1, instance2);
+        assertSame(instance2, instance3);
+    }
+
+    public void testNoScope_WithProvider() {
+
+        Module module = new Module() {
+
+            public void configure(Binder binder) {
+                binder.bind(MockInterface1.class).toProvider(
+                        MockImplementation1_Provider.class).withoutScope();
+            }
+        };
+
+        DefaultInjector injector = new DefaultInjector(module);
+
+        MockInterface1 instance1 = injector.getInstance(MockInterface1.class);
+        MockInterface1 instance2 = injector.getInstance(MockInterface1.class);
+        MockInterface1 instance3 = injector.getInstance(MockInterface1.class);
+
+        assertNotNull(instance1);
+        assertNotNull(instance2);
+        assertNotNull(instance3);
+
+        assertNotSame(instance1, instance2);
+        assertNotSame(instance2, instance3);
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java?rev=953778&r1=953777&r2=953778&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java Fri Jun 11 17:17:09 2010
@@ -76,34 +76,21 @@ public class DataDomainProvider implemen
     @Inject
     protected Injector injector;
 
-    protected volatile DataDomain dataDomain;
-
     public DataDomain get() throws ConfigurationException {
 
-        if (dataDomain == null) {
-            synchronized (this) {
-                if (dataDomain == null) {
-
-                    try {
-                        createDataChannel();
-                    }
-                    catch (ConfigurationException e) {
-                        throw e;
-                    }
-                    catch (Exception e) {
-                        throw new DataDomainLoadException(
-                                "Error loading DataChannel: '%s'",
-                                e,
-                                e.getMessage());
-                    }
-                }
-            }
+        try {
+            return createDataDomain();
+        }
+        catch (ConfigurationException e) {
+            throw e;
+        }
+        catch (Exception e) {
+            throw new DataDomainLoadException("Error loading DataChannel: '%s'", e, e
+                    .getMessage());
         }
-
-        return dataDomain;
     }
 
-    protected void createDataChannel() throws Exception {
+    protected DataDomain createDataDomain() throws Exception {
         String configurationLocation = configurationProperties
                 .get(RuntimeProperties.CONFIGURATION_LOCATION);
 
@@ -208,6 +195,6 @@ public class DataDomainProvider implemen
             dataDomain.addNode(dataNode);
         }
 
-        this.dataDomain = dataDomain;
+        return dataDomain;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java?rev=953778&r1=953777&r2=953778&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java Fri Jun 11 17:17:09 2010
@@ -110,7 +110,7 @@ public class DataDomainProviderTest exte
                 Collections.singletonMap(
                         RuntimeProperties.CONFIGURATION_LOCATION,
                         testConfigName));
-        
+
         final EventManager eventManager = new MockEventManager();
 
         Module testModule = new Module() {
@@ -156,11 +156,6 @@ public class DataDomainProviderTest exte
 
         assertTrue(channel instanceof DataDomain);
 
-        assertSame(
-                "DataDomainProvider must return the same instance of DataChannel on subsequent calls",
-                channel,
-                provider.get());
-
         DataDomain domain = (DataDomain) channel;
         assertSame(eventManager, domain.getEventManager());
         assertEquals(2, domain.getDataMaps().size());