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 2009/12/06 12:23:21 UTC

svn commit: r887668 - in /cayenne/main/trunk: framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/dbsync/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/ framework/cayenne-jdk1.5-unpublished...

Author: aadamchik
Date: Sun Dec  6 11:23:18 2009
New Revision: 887668

URL: http://svn.apache.org/viewvc?rev=887668&view=rev
Log:
CAY-1319 Switch Cayenne configuration loading to cayenne-di container

* DataContextProvider
* CayenneRuntime -> CayenneServerRuntime
* CayenneServerRuntime itests

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneServerModule.java
      - copied, changed from r887667, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneModule.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DomainDataChannelProvider.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntime.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataContextProvider.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeTest.java
      - copied, changed from r887667, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java
    cayenne/main/trunk/itests/cayenne-di-stack/
    cayenne/main/trunk/itests/cayenne-di-stack/.classpath
    cayenne/main/trunk/itests/cayenne-di-stack/.project
    cayenne/main/trunk/itests/cayenne-di-stack/.settings/
    cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.eclipse.jdt.core.prefs
    cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.maven.ide.eclipse.prefs
    cayenne/main/trunk/itests/cayenne-di-stack/pom.xml
      - copied, changed from r887667, cayenne/main/trunk/itests/pom.xml
    cayenne/main/trunk/itests/cayenne-di-stack/src/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/DefaultMap.java
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/Table1.java
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_DefaultMap.java
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_Table1.java
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntimeCase.java
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/RuntimeName.java
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/DefaultMap.map.xml
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/PoolingDSNode.driver.xml
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/cayenne-DEFAULT.xml
    cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/log4j.properties
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/runtime/
    cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeIntegrationTest.java
Removed:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneModule.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java
    cayenne/main/trunk/framework/cayenne-server/pom.properties
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/dbsync/CreateIfNoSchemaStrategy.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/SAXNestedTagHandler.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneRuntime.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataDomainProvider.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/DataDomainProviderTest.java
    cayenne/main/trunk/itests/pom.xml

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/dbsync/CreateIfNoSchemaStrategy.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/dbsync/CreateIfNoSchemaStrategy.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/dbsync/CreateIfNoSchemaStrategy.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/dbsync/CreateIfNoSchemaStrategy.java Sun Dec  6 11:23:18 2009
@@ -42,7 +42,7 @@
     final static Log logger = LogFactory.getLog(CreateIfNoSchemaStrategy.class);
 
     @Override
-    public void processSchemaUpdate(DataNode dataNode) throws SQLException {
+    protected void processSchemaUpdate(DataNode dataNode) throws SQLException {
 
         Map<String, Boolean> nameTables = getNameTablesInDB(dataNode);
         Collection<DbEntity> entities = dataNode.getEntityResolver().getDbEntities();

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneServerModule.java (from r887667, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneModule.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneServerModule.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneServerModule.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneModule.java&r1=887667&r2=887668&rev=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneModule.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneServerModule.java Sun Dec  6 11:23:18 2009
@@ -19,9 +19,10 @@
 package org.apache.cayenne.configuration;
 
 import org.apache.cayenne.DataChannel;
+import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.access.DataDomain;
 import org.apache.cayenne.access.dbsync.SchemaUpdateStrategy;
 import org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy;
-import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.db2.DB2Sniffer;
 import org.apache.cayenne.dba.derby.DerbySniffer;
 import org.apache.cayenne.dba.frontbase.FrontBaseSniffer;
@@ -41,20 +42,21 @@
 import org.apache.cayenne.resource.ClassLoaderResourceLocator;
 import org.apache.cayenne.resource.ResourceLocator;
 import org.apache.cayenne.runtime.CayenneRuntime;
+import org.apache.cayenne.runtime.DataContextProvider;
 import org.apache.cayenne.runtime.DataDomainProvider;
 
 /**
- * A DI module containing all Cayenne runtime configurations. To customize Cayenne runtime
- * configuration, either extend this module, or supply an extra custom module when
+ * A DI module containing all Cayenne server runtime configurations. To customize Cayenne
+ * runtime configuration, either extend this module, or supply an extra custom module when
  * creating {@link CayenneRuntime}.
  * 
  * @since 3.1
  */
-public class CayenneModule implements Module {
+public class CayenneServerModule implements Module {
 
     protected String runtimeName;
 
-    public CayenneModule(String runtimeName) {
+    public CayenneServerModule(String runtimeName) {
         this.runtimeName = runtimeName;
     }
 
@@ -68,7 +70,7 @@
         // configure known DbAdapter detectors in reverse order of popularity. Users can
         // add their own for their own to install custom adapters automatically
         binder
-                .bindList(DbAdapter.class)
+                .bindList(DbAdapterFactory.class)
                 .add(new OpenBaseSniffer())
                 .add(new FrontBaseSniffer())
                 .add(new IngresSniffer())
@@ -86,8 +88,13 @@
         binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class).in(
                 Scopes.SINGLETON);
 
-        // a service to provide the main stack DataChannel
-        binder.bind(DataChannel.class).toProvider(DataDomainProvider.class);
+        // a service to provide the main stack DataDomain
+        binder.bind(DataDomain.class).toProvider(DataDomainProvider.class).in(Scopes.SINGLETON);
+
+        // will return DataDomain for request for a DataChannel
+        binder.bind(DataChannel.class).toProvider(DomainDataChannelProvider.class).in(Scopes.SINGLETON);
+        
+        binder.bind(ObjectContext.class).toProvider(DataContextProvider.class);
 
         // a service to load project XML descriptors
         binder.bind(DataChannelDescriptorLoader.class).to(

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DomainDataChannelProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DomainDataChannelProvider.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DomainDataChannelProvider.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DomainDataChannelProvider.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,41 @@
+/*****************************************************************
+ *   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.configuration;
+
+import org.apache.cayenne.DataChannel;
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.di.DIException;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
+
+/**
+ * This is a default implementation of a DataChannel provider that simply returns a
+ * DataDomain for a given runtime.
+ * 
+ * @since 3.1
+ */
+public class DomainDataChannelProvider implements Provider<DataChannel> {
+
+    @Inject
+    protected DataDomain dataDomain;
+    
+    public DataChannel get() throws DIException {
+        return dataDomain;
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/SAXNestedTagHandler.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/SAXNestedTagHandler.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/SAXNestedTagHandler.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/SAXNestedTagHandler.java Sun Dec  6 11:23:18 2009
@@ -18,6 +18,10 @@
  ****************************************************************/
 package org.apache.cayenne.configuration;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.Locator;
@@ -68,6 +72,21 @@
         }
     }
 
+    protected String unexpectedTagMessage(String tagFound, String... tagsExpected) {
+
+        List<String> expected = tagsExpected != null
+                ? Arrays.asList(tagsExpected)
+                : Collections.<String> emptyList();
+
+        return String
+                .format(
+                        "tag <%s> is unexpected at [%d,%d]. The following tags are allowed here: %s",
+                        tagFound,
+                        locator.getColumnNumber(),
+                        locator.getLineNumber(),
+                        expected);
+    }
+
     protected ContentHandler createChildTagHandler(
             String namespaceURI,
             String localName,

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoader.java Sun Dec  6 11:23:18 2009
@@ -50,7 +50,10 @@
 
     public DataChannelDescriptor load(String runtimeName) throws CayenneRuntimeException {
 
-        logger.debug("starting configuration loading: " + runtimeName);
+        long t0 = System.currentTimeMillis();
+        if (logger.isDebugEnabled()) {
+            logger.debug("starting configuration loading: " + runtimeName);
+        }
 
         String resourceName = getResourceName(runtimeName);
         Collection<Resource> configurations = resourceLocator.findResources(resourceName);
@@ -73,11 +76,20 @@
         }
 
         DataChannelDescriptor descriptor = new XMLDataChannelDescriptorLoaderAction(
-                dataMapLoader).load(configurationResource);
+                dataMapLoader,
+                logger).load(configurationResource);
 
         descriptor.setName(runtimeName);
 
-        logger.debug("finished configuration loading: " + runtimeName);
+        long t1 = System.currentTimeMillis();
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("finished configuration loading: "
+                    + runtimeName
+                    + " in "
+                    + (t1 - t0)
+                    + " ms.");
+        }
         return descriptor;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderAction.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderAction.java Sun Dec  6 11:23:18 2009
@@ -27,7 +27,6 @@
 import org.apache.cayenne.resource.Resource;
 import org.apache.cayenne.util.Util;
 import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.InputSource;
@@ -41,9 +40,6 @@
  */
 class XMLDataChannelDescriptorLoaderAction {
 
-    private static Log logger = LogFactory
-            .getLog(XMLDataChannelDescriptorLoaderAction.class);
-
     static final String DOMAIN_TAG = "domain";
     static final String MAP_TAG = "map";
     static final String NODE_TAG = "node";
@@ -51,9 +47,11 @@
     static final String MAP_REF_TAG = "map-ref";
 
     private DataMapLoader mapLoader;
+    private Log logger;
 
-    XMLDataChannelDescriptorLoaderAction(DataMapLoader mapLoader) {
+    XMLDataChannelDescriptorLoaderAction(DataMapLoader mapLoader, Log logger) {
         this.mapLoader = mapLoader;
+        this.logger = logger;
     }
 
     DataChannelDescriptor load(Resource resource) {
@@ -118,6 +116,7 @@
                 return new DataChannelChildrenHandler(parser, this);
             }
 
+            logger.info(unexpectedTagMessage(localName, DOMAIN_TAG));
             return super.createChildTagHandler(namespaceURI, localName, name, atts);
         }
     }
@@ -172,9 +171,8 @@
                 String location = attributes.getValue("", "datasource");
                 nodeDescriptor.setLocation(location);
 
-                nodeDescriptor.setDataSourceFactoryType(attributes.getValue(
-                        "",
-                        "factory"));
+                nodeDescriptor.setDataSourceFactoryType(attributes
+                        .getValue("", "factory"));
                 nodeDescriptor.setSchemaUpdateStrategyType(attributes.getValue(
                         "",
                         "schema-update-strategy"));

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneRuntime.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneRuntime.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneRuntime.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneRuntime.java Sun Dec  6 11:23:18 2009
@@ -20,37 +20,24 @@
 
 import org.apache.cayenne.DataChannel;
 import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.configuration.CayenneModule;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.di.Module;
 
 /**
- * Represents the main access point to a given Cayenne stack. Provides a default Cayenne
- * configuration as well as a way to customize this configuration via a built in
- * dependency injection container.
+ * A superclass of possible Cayenne runtime objects. A CayenneRuntime is the main access
+ * point to a given Cayenne stack. It provides a default Cayenne configuration as well as
+ * a way to customize this configuration via a built in dependency injection container.
  * 
  * @since 3.1
  */
-public class CayenneRuntime {
+public abstract class CayenneRuntime {
 
     protected String name;
     protected Injector injector;
     protected Module[] modules;
 
     /**
-     * Initializes Cayenne runtime instance with a default configuration provided by
-     * {@link CayenneModule}.
-     * 
-     * @param name Runtime name. By default a configuration file name contains a runtime
-     *            name in it, to allow multiple runtimes in a single JVM. E.g. a typical
-     *            config file name has the form of "cayenne-<name>.xml".
-     */
-    public CayenneRuntime(String name) {
-        this(name, new CayenneModule(name));
-    }
-
-    /**
      * Initializes Cayenne runtime with an array of DI modules.
      */
     public CayenneRuntime(String name, Module... modules) {
@@ -94,7 +81,7 @@
     /**
      * Creates and returns an ObjectContext based on the runtime DataChannel.
      */
-    public ObjectContext newObjectContext() {
+    public ObjectContext newContext() {
         return injector.getInstance(ObjectContext.class);
     }
 }

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntime.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntime.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntime.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntime.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,52 @@
+/*****************************************************************
+ *   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.runtime;
+
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.configuration.CayenneServerModule;
+import org.apache.cayenne.di.Module;
+
+/**
+ * A runtime representing Cayenne server-stack that connects directly to the database via
+ * JDBC. The term "server" is used as opposed to ROP "client". Any application, desktop,
+ * server, etc. that has a direct JDBC connection should be using this runtime.
+ * 
+ * @since 3.1
+ */
+public class CayenneServerRuntime extends CayenneRuntime {
+
+    public CayenneServerRuntime(String name) {
+        super(name, new CayenneServerModule(name));
+    }
+
+    public CayenneServerRuntime(String name, Module... modules) {
+        super(name, modules);
+    }
+
+    /**
+     * Returns the main runtime DataDomain. Note that by default the returned DataDomain
+     * is the same as the main DataChannel returned by {@link #getDataChannel()}. Although
+     * users may redefine DataChannel provider in the DI registry, for instance to
+     * decorate this DataDomain with a custom wrapper.
+     */
+    public DataDomain getDataDomain() {
+        return injector.getInstance(DataDomain.class);
+    }
+
+}

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataContextProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataContextProvider.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataContextProvider.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataContextProvider.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,40 @@
+/*****************************************************************
+ *   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.runtime;
+
+import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.di.DIException;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
+
+/**
+ * @since 3.1
+ */
+public class DataContextProvider implements Provider<DataContext> {
+
+    @Inject
+    protected DataDomain dataDomain;
+
+    public DataContext get() throws DIException {
+        // TODO: andrus 12.5.2009 - deprecate 'createDataContext' in DataDomain and move
+        // it to this provider instead
+        return dataDomain.createDataContext();
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataDomainProvider.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataDomainProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/runtime/DataDomainProvider.java Sun Dec  6 11:23:18 2009
@@ -43,7 +43,7 @@
  * 
  * @since 3.1
  */
-public class DataDomainProvider implements Provider<DataChannel> {
+public class DataDomainProvider implements Provider<DataDomain> {
 
     @Inject
     protected DataChannelDescriptorLoader loader;
@@ -63,13 +63,13 @@
     @Inject
     protected AdhocObjectFactory objectFactory;
 
-    protected volatile DataChannel dataChannel;
+    protected volatile DataDomain dataDomain;
 
-    public DataChannel get() throws DIException {
+    public DataDomain get() throws DIException {
 
-        if (dataChannel == null) {
+        if (dataDomain == null) {
             synchronized (this) {
-                if (dataChannel == null) {
+                if (dataDomain == null) {
 
                     try {
                         createDataChannel();
@@ -85,7 +85,7 @@
             }
         }
 
-        return dataChannel;
+        return dataDomain;
     }
 
     protected void createDataChannel() throws Exception {
@@ -93,12 +93,12 @@
                 .get(RuntimeProperties.CAYENNE_RUNTIME_NAME);
         DataChannelDescriptor descriptor = loader.load(runtimeName);
 
-        DataDomain dataChannel = new DataDomain(descriptor.getName());
+        DataDomain dataDomain = new DataDomain(descriptor.getName());
 
-        dataChannel.initWithProperties(descriptor.getProperties());
+        dataDomain.initWithProperties(descriptor.getProperties());
 
         for (DataMap dataMap : descriptor.getDataMaps()) {
-            dataChannel.addMap(dataMap);
+            dataDomain.addMap(dataMap);
         }
 
         for (DataNodeDescriptor nodeDescriptor : descriptor.getDataNodeDescriptors()) {
@@ -138,13 +138,13 @@
 
             // DataMaps
             for (String dataMapName : nodeDescriptor.getDataMapNames()) {
-                dataNode.addDataMap(dataChannel.getMap(dataMapName));
+                dataNode.addDataMap(dataDomain.getMap(dataMapName));
             }
 
-            dataChannel.addNode(dataNode);
+            dataDomain.addNode(dataNode);
         }
 
-        this.dataChannel = dataChannel;
+        this.dataDomain = dataDomain;
     }
 
 }

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeTest.java (from r887667, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeTest.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeTest.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java&r1=887667&r2=887668&rev=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeTest.java Sun Dec  6 11:23:18 2009
@@ -24,24 +24,23 @@
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.QueryResponse;
 import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.configuration.CayenneModule;
+import org.apache.cayenne.configuration.CayenneServerModule;
 import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.event.EventManager;
 import org.apache.cayenne.graph.GraphDiff;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.Query;
-import org.apache.cayenne.runtime.CayenneRuntime;
 
-public class CayenneRuntimeTest extends TestCase {
+public class CayenneServerRuntimeTest extends TestCase {
 
     public void testDefaultConstructor() {
-        CayenneRuntime runtime = new CayenneRuntime("xxxx");
+        CayenneServerRuntime runtime = new CayenneServerRuntime("xxxx");
 
         assertEquals("xxxx", runtime.getName());
 
         assertEquals(1, runtime.getModules().length);
-        assertTrue(runtime.getModules()[0] instanceof CayenneModule);
+        assertTrue(runtime.getModules()[0] instanceof CayenneServerModule);
     }
 
     public void testConstructor_Modules() {
@@ -62,7 +61,7 @@
             }
         };
 
-        CayenneRuntime runtime = new CayenneRuntime("yyyy", m1, m2);
+        CayenneServerRuntime runtime = new CayenneServerRuntime("yyyy", m1, m2);
 
         assertEquals("yyyy", runtime.getName());
         assertEquals(2, runtime.getModules().length);
@@ -102,7 +101,7 @@
             }
         };
 
-        CayenneRuntime runtime = new CayenneRuntime("name", module);
+        CayenneServerRuntime runtime = new CayenneServerRuntime("name", module);
         assertSame(channel, runtime.getDataChannel());
     }
 
@@ -116,8 +115,8 @@
             }
         };
 
-        CayenneRuntime runtime = new CayenneRuntime("name", module);
-        assertSame(context, runtime.newObjectContext());
-        assertSame(context, runtime.newObjectContext());
+        CayenneServerRuntime runtime = new CayenneServerRuntime("name", module);
+        assertSame(context, runtime.newContext());
+        assertSame(context, runtime.newContext());
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/DataDomainProviderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/DataDomainProviderTest.java?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/DataDomainProviderTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/runtime/DataDomainProviderTest.java Sun Dec  6 11:23:18 2009
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.runtime;
 
-import java.sql.DatabaseMetaData;
-import java.sql.SQLException;
 import java.util.Collections;
 
 import javax.sql.DataSource;
@@ -38,14 +36,14 @@
 import org.apache.cayenne.configuration.DataChannelDescriptorLoader;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.configuration.DataSourceFactoryLoader;
+import org.apache.cayenne.configuration.DbAdapterFactory;
 import org.apache.cayenne.configuration.DefaultAdhocObjectFactory;
 import org.apache.cayenne.configuration.DefaultRuntimeProperties;
 import org.apache.cayenne.configuration.RuntimeProperties;
 import org.apache.cayenne.configuration.mock.MockDataSourceFactory;
 import org.apache.cayenne.configuration.mock.MockDataSourceFactoryLoader;
-import org.apache.cayenne.dba.AutoAdapter;
 import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.DbAdapterFactory;
+import org.apache.cayenne.dba.MockDbAdapter;
 import org.apache.cayenne.dba.oracle.OracleAdapter;
 import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.DIBootstrap;
@@ -53,8 +51,6 @@
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.map.DataMap;
 
-import com.mockrunner.mock.jdbc.MockDataSource;
-
 public class DataDomainProviderTest extends TestCase {
 
     public void testGet() {
@@ -109,14 +105,19 @@
                         new SkipSchemaUpdateStrategy());
                 binder.bind(DbAdapterFactory.class).toInstance(new DbAdapterFactory() {
 
-                    public DbAdapter createAdapter(DatabaseMetaData md)
-                            throws SQLException {
-                        throw new UnsupportedOperationException("TODO");
+                    public DbAdapter createAdapter(
+                            DataNodeDescriptor nodeDescriptor,
+                            DataSource dataSource) throws Exception {
+
+                        if (nodeDescriptor.getAdapterType() != null) {
+                            return (DbAdapter) Class.forName(
+                                    nodeDescriptor.getAdapterType()).newInstance();
+                        }
+
+                        return new MockDbAdapter();
                     }
                 });
 
-                binder.bind(DataSource.class).toInstance(new MockDataSource());
-                binder.bind(DbAdapter.class).to(AutoAdapter.class);
                 binder.bind(DataSourceFactoryLoader.class).toInstance(
                         new MockDataSourceFactoryLoader());
                 binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
@@ -183,6 +184,6 @@
                 .getName());
 
         assertNotNull(node2.getAdapter());
-        assertEquals(AutoAdapter.class, node2.getAdapter().getClass());
+        assertEquals(MockDbAdapter.class, node2.getAdapter().getClass());
     }
 }

Added: cayenne/main/trunk/itests/cayenne-di-stack/.classpath
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/.classpath?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/.classpath (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/.classpath Sun Dec  6 11:23:18 2009
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Added: cayenne/main/trunk/itests/cayenne-di-stack/.project
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/.project?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/.project (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/.project Sun Dec  6 11:23:18 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>cayenne-di-stack</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+	</natures>
+</projectDescription>

Added: cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.eclipse.jdt.core.prefs?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.eclipse.jdt.core.prefs (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.eclipse.jdt.core.prefs Sun Dec  6 11:23:18 2009
@@ -0,0 +1,5 @@
+#Sat Dec 05 19:10:26 EET 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.5

Added: cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.maven.ide.eclipse.prefs
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.maven.ide.eclipse.prefs?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.maven.ide.eclipse.prefs (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/.settings/org.maven.ide.eclipse.prefs Sun Dec  6 11:23:18 2009
@@ -0,0 +1,9 @@
+#Sat Dec 05 19:10:25 EET 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1

Copied: cayenne/main/trunk/itests/cayenne-di-stack/pom.xml (from r887667, cayenne/main/trunk/itests/pom.xml)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/pom.xml?p2=cayenne/main/trunk/itests/cayenne-di-stack/pom.xml&p1=cayenne/main/trunk/itests/pom.xml&r1=887667&r2=887668&rev=887668&view=diff
==============================================================================
--- cayenne/main/trunk/itests/pom.xml (original)
+++ cayenne/main/trunk/itests/cayenne-di-stack/pom.xml Sun Dec  6 11:23:18 2009
@@ -17,42 +17,56 @@
 	specific language governing permissions and limitations
 	under the License.   
 -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.cayenne.itests</groupId>
+		<artifactId>cayenne-itests-parent</artifactId>
+		<version>3.1-SNAPSHOT</version>
+	</parent>
+
+	<description>Integration Tests - Cayenne DI Stack</description>
+	<artifactId>cayenne-di-stack</artifactId>
+	<name>Integration Tests - Cayenne DI Stack</name>
+	<packaging>jar</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.cayenne.itests</groupId>
+			<artifactId>itest-common</artifactId>
+			<version>${version}</version>
+		</dependency>
+
+	</dependencies>
 
-<project
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-      <groupId>org.apache.cayenne</groupId>
-      <artifactId>cayenne-parent</artifactId>
-      <version>3.1-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.apache.cayenne.itests</groupId>
-    <artifactId>cayenne-itests-parent</artifactId>
-    <name>Cayenne Integration Tests Parent</name>
-    <packaging>pom</packaging>
-    
-    <modules>
-      <module>itest-common</module>
-      <module>jpa-chapter2</module>
-      <module>jpa-chapter3</module>
-      <module>jpa-chapter5</module>
-      <module>jpa-chapter6</module>
-      <module>jpa-chapter9</module>
-    </modules>
 	<build>
 		<plugins>
 			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.5</source>
+					<target>1.5</target>
+				</configuration>
+			</plugin>
+			
+			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-deploy-plugin</artifactId>
 				<configuration>
 					<skip>true</skip>
 				</configuration>
 			</plugin>
+
 		</plugins>
 	</build>
 </project>

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/DefaultMap.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/DefaultMap.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/DefaultMap.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/DefaultMap.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,18 @@
+package org.apache.cayenne.itest.di_stack;
+
+import org.apache.cayenne.itest.di_stack.auto._DefaultMap;
+
+public class DefaultMap extends _DefaultMap {
+
+    private static DefaultMap instance;
+
+    private DefaultMap() {}
+
+    public static DefaultMap getInstance() {
+        if(instance == null) {
+            instance = new DefaultMap();
+        }
+
+        return instance;
+    }
+}

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/Table1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/Table1.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/Table1.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/Table1.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,7 @@
+package org.apache.cayenne.itest.di_stack;
+
+import org.apache.cayenne.itest.di_stack.auto._Table1;
+
+public class Table1 extends _Table1 {
+
+}

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_DefaultMap.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_DefaultMap.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_DefaultMap.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_DefaultMap.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,12 @@
+package org.apache.cayenne.itest.di_stack.auto;
+
+
+
+/**
+ * This class was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public class _DefaultMap {
+}
\ No newline at end of file

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_Table1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_Table1.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_Table1.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/itest/di_stack/auto/_Table1.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,24 @@
+package org.apache.cayenne.itest.di_stack.auto;
+
+import org.apache.cayenne.CayenneDataObject;
+
+/**
+ * Class _Table1 was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _Table1 extends CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+
+    public static final String ID_PK_COLUMN = "ID";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+
+}

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntimeCase.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntimeCase.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntimeCase.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/CayenneServerRuntimeCase.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,69 @@
+package org.apache.cayenne.runtime;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.dbsync.CreateIfNoSchemaStrategy;
+import org.apache.cayenne.access.dbsync.SchemaUpdateStrategy;
+import org.apache.cayenne.itest.ItestDBUtils;
+import org.apache.cayenne.itest.ItestTableUtils;
+
+public abstract class CayenneServerRuntimeCase extends TestCase {
+
+	static final Map<RuntimeName, CayenneServerRuntime> runtimeCache;
+
+	static {
+		runtimeCache = new HashMap<RuntimeName, CayenneServerRuntime>();
+	}
+
+	protected CayenneServerRuntime runtime;
+
+	@Override
+	protected void setUp() throws Exception {
+
+		RuntimeName name = getRuntimeName();
+		assertNotNull(name);
+
+		runtime = runtimeCache.get(name);
+		if (runtime == null) {
+			runtime = new CayenneServerRuntime(name.name());
+			runtimeCache.put(name, runtime);
+
+			// setup schema
+
+			// TODO: should that be drop/create?
+			SchemaUpdateStrategy dbCreator = new CreateIfNoSchemaStrategy();
+			dbCreator.updateSchema(getDataNode());
+		}
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		runtime = null;
+	}
+
+	protected abstract RuntimeName getRuntimeName();
+
+	protected ItestDBUtils getDbUtils() {
+
+		return new ItestDBUtils(getDataNode().getDataSource());
+	}
+
+	protected ItestTableUtils getTableHelper(String tableName) {
+		return new ItestTableUtils(getDbUtils(), tableName);
+	}
+
+	private DataNode getDataNode() {
+		Collection<DataNode> nodes = runtime.getDataDomain().getDataNodes();
+		assertFalse("Can't find DataSource - no nodes configured", nodes
+				.isEmpty());
+		assertEquals("Can't find DataSource - multiple nodes found", 1, nodes
+				.size());
+
+		return nodes.iterator().next();
+	}
+}

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/RuntimeName.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/RuntimeName.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/RuntimeName.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/java/org/apache/cayenne/runtime/RuntimeName.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,6 @@
+package org.apache.cayenne.runtime;
+
+public enum RuntimeName {
+
+	DEFAULT
+}

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/DefaultMap.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/DefaultMap.map.xml?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/DefaultMap.map.xml (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/DefaultMap.map.xml Sun Dec  6 11:23:18 2009
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
+  project-version="3.0.0.1">
+	<property name="defaultPackage" value="org.apache.cayenne.itest.di_stack"/>
+	<db-entity name="TABLE1">
+		<db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"/>
+		<db-attribute name="NAME" type="VARCHAR" length="255"/>
+	</db-entity>
+	<obj-entity name="Table1" className="org.apache.cayenne.itest.di_stack.Table1" dbEntityName="TABLE1">
+		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
+	</obj-entity>
+</data-map>

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/PoolingDSNode.driver.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/PoolingDSNode.driver.xml?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/PoolingDSNode.driver.xml (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/PoolingDSNode.driver.xml Sun Dec  6 11:23:18 2009
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<driver project-version="3.0.0.1" class="org.hsqldb.jdbcDriver">
+	<url value="jdbc:hsqldb:mem:DEFAULT"/>
+	<connectionPool min="1" max="1"/>
+	<login/>
+</driver>

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/cayenne-DEFAULT.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/cayenne-DEFAULT.xml?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/cayenne-DEFAULT.xml (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/cayenne-DEFAULT.xml Sun Dec  6 11:23:18 2009
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain name="DefaultDomain" project-version="3.0.0.1">
+	<map name="DefaultMap" location="DefaultMap.map.xml"/>
+
+	<node name="PoolingDSNode"
+		 datasource="PoolingDSNode.driver.xml"
+		 factory="org.apache.cayenne.configuration.XMLPoolingDataSourceFactory">
+			<map-ref name="DefaultMap"/>
+	 </node>
+</domain>

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/log4j.properties?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/log4j.properties (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/main/resources/log4j.properties Sun Dec  6 11:23:18 2009
@@ -0,0 +1,6 @@
+log4j.rootLogger=WARN, A1
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%d{dd/MMM/yyyy:HH:mm:ss}] %t %x %-5p %c{1}: %m%n
+
+log4j.logger.org.apache.cayenne=DEBUG
\ No newline at end of file

Added: cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeIntegrationTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeIntegrationTest.java?rev=887668&view=auto
==============================================================================
--- cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeIntegrationTest.java (added)
+++ cayenne/main/trunk/itests/cayenne-di-stack/src/test/java/org/apache/cayenne/runtime/CayenneServerRuntimeIntegrationTest.java Sun Dec  6 11:23:18 2009
@@ -0,0 +1,61 @@
+package org.apache.cayenne.runtime;
+
+import org.apache.cayenne.Cayenne;
+import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.itest.ItestDBUtils;
+import org.apache.cayenne.itest.di_stack.Table1;
+import org.apache.cayenne.query.SelectQuery;
+
+public class CayenneServerRuntimeIntegrationTest extends
+		CayenneServerRuntimeCase {
+
+	@Override
+	protected RuntimeName getRuntimeName() {
+		return RuntimeName.DEFAULT;
+	}
+
+	public void testGetDomain_singleton() {
+
+		DataDomain domain1 = runtime.getDataDomain();
+		assertNotNull(domain1);
+
+		DataDomain domain2 = runtime.getDataDomain();
+		assertNotNull(domain2);
+
+		assertSame(domain1, domain2);
+	}
+
+	public void testNewContext_notSingleton() {
+
+		ObjectContext context1 = runtime.newContext();
+		assertNotNull(context1);
+
+		ObjectContext context2 = runtime.newContext();
+		assertNotNull(context2);
+
+		assertNotSame(context1, context2);
+	}
+
+	public void testNewContext_separateObjects() throws Exception {
+		ItestDBUtils dbUtils = getDbUtils();
+		dbUtils.deleteAll("TABLE1");
+		dbUtils.insert("TABLE1", new String[] { "ID", "NAME" }, new Object[] {
+				1, "Abc" });
+
+		SelectQuery query = new SelectQuery(Table1.class);
+
+		ObjectContext context1 = runtime.newContext();
+		ObjectContext context2 = runtime.newContext();
+
+		Table1 o1 = (Table1) Cayenne.objectForQuery(context1, query);
+		Table1 o2 = (Table1) Cayenne.objectForQuery(context2, query);
+
+		assertNotNull(o1);
+		assertNotNull(o2);
+		assertEquals("Abc", o1.getName());
+		assertNotSame(o1, o2);
+		assertEquals(o1.getObjectId(), o2.getObjectId());
+
+	}
+}

Modified: cayenne/main/trunk/itests/pom.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/pom.xml?rev=887668&r1=887667&r2=887668&view=diff
==============================================================================
--- cayenne/main/trunk/itests/pom.xml (original)
+++ cayenne/main/trunk/itests/pom.xml Sun Dec  6 11:23:18 2009
@@ -38,6 +38,7 @@
     
     <modules>
       <module>itest-common</module>
+      <module>cayenne-di-stack</module>
       <module>jpa-chapter2</module>
       <module>jpa-chapter3</module>
       <module>jpa-chapter5</module>