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 2014/02/15 11:33:24 UTC
svn commit: r1568609 - in /cayenne/main/trunk/cayenne-server/src:
main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
test/java/org/apache/cayenne/configuration/server/ServerRuntime_ConfigFree_Test.java
Author: aadamchik
Date: Sat Feb 15 10:33:24 2014
New Revision: 1568609
URL: http://svn.apache.org/r1568609
Log:
Config-free ServerRuntime
Added:
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/ServerRuntime_ConfigFree_Test.java
Modified:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java?rev=1568609&r1=1568608&r2=1568609&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java Sat Feb 15 10:33:24 2014
@@ -52,12 +52,15 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
- * A {@link DataChannel} provider that provides a single instance of DataDomain configured
- * per configuration supplied via injected {@link DataChannelDescriptorLoader}.
+ * A {@link DataChannel} provider that provides a single instance of DataDomain
+ * configured per configuration supplied via injected
+ * {@link DataChannelDescriptorLoader}.
*
* @since 3.1
*/
public class DataDomainProvider implements Provider<DataDomain> {
+
+ private static final String DEFAULT_NAME = "cayenne";
private static Log logger = LogFactory.getLog(DataDomainProvider.class);
@@ -105,15 +108,10 @@ public class DataDomainProvider implemen
try {
return createAndInitDataDomain();
- }
- catch (ConfigurationException e) {
+ } catch (ConfigurationException e) {
throw e;
- }
- catch (Exception e) {
- throw new DataDomainLoadException(
- "Error loading DataChannel: '%s'",
- e,
- e.getMessage());
+ } catch (Exception e) {
+ throw new DataDomainLoadException("Error loading DataChannel: '%s'", e, e.getMessage());
}
}
@@ -123,65 +121,18 @@ public class DataDomainProvider implemen
protected DataDomain createAndInitDataDomain() throws Exception {
- if (locations == null || locations.isEmpty()) {
- throw new DataDomainLoadException("No configuration location(s) available");
- }
-
- long t0 = System.currentTimeMillis();
- if (logger.isDebugEnabled()) {
- logger.debug("starting configuration loading: " + locations);
- }
-
- DataChannelDescriptor[] descriptors = new DataChannelDescriptor[locations.size()];
-
- for (int i = 0; i < locations.size(); i++) {
-
- String location = locations.get(i);
-
- Collection<Resource> configurations = resourceLocator.findResources(location);
-
- if (configurations.isEmpty()) {
- throw new DataDomainLoadException(
- "Configuration resource \"%s\" is not found.",
- location);
- }
-
- Resource configurationResource = configurations.iterator().next();
-
- // no support for multiple configs yet, but this is not a hard error
- if (configurations.size() > 1) {
- logger.info("found "
- + configurations.size()
- + " configurations for "
- + location
- + ", will use the first one: "
- + configurationResource.getURL());
- }
-
- ConfigurationTree<DataChannelDescriptor> tree = loader
- .load(configurationResource);
- if (!tree.getLoadFailures().isEmpty()) {
- // TODO: andrus 03/10/2010 - log the errors before throwing?
- throw new DataDomainLoadException(
- tree,
- "Error loading DataChannelDescriptor");
- }
+ DataChannelDescriptor descriptor;
- descriptors[i] = tree.getRootNode();
+ if (locations.isEmpty()) {
+ descriptor = new DataChannelDescriptor();
+ descriptor.setName(DEFAULT_NAME);
+ } else {
+ descriptor = descriptorFromConfigs();
}
- long t1 = System.currentTimeMillis();
-
- if (logger.isDebugEnabled()) {
- logger.debug("finished configuration loading in " + (t1 - t0) + " ms.");
- }
-
- DataChannelDescriptor descriptor = descriptorMerger.merge(descriptors);
DataDomain dataDomain = createDataDomain(descriptor.getName());
- dataDomain.setMaxIdQualifierSize(runtimeProperties.getInt(
- Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY,
- -1));
+ dataDomain.setMaxIdQualifierSize(runtimeProperties.getInt(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY, -1));
dataDomain.setQueryCache(new NestedQueryCache(queryCache));
dataDomain.setEntitySorter(injector.getInstance(EntitySorter.class));
@@ -208,18 +159,13 @@ public class DataDomainProvider implemen
dataNode.setDataSource(dataSource);
// schema update strategy
- String schemaUpdateStrategyType = nodeDescriptor
- .getSchemaUpdateStrategyType();
+ String schemaUpdateStrategyType = nodeDescriptor.getSchemaUpdateStrategyType();
if (schemaUpdateStrategyType == null) {
dataNode.setSchemaUpdateStrategy(defaultSchemaUpdateStrategy);
- dataNode.setSchemaUpdateStrategyName(defaultSchemaUpdateStrategy
- .getClass()
- .getName());
- }
- else {
- SchemaUpdateStrategy strategy = objectFactory.newInstance(
- SchemaUpdateStrategy.class,
+ dataNode.setSchemaUpdateStrategyName(defaultSchemaUpdateStrategy.getClass().getName());
+ } else {
+ SchemaUpdateStrategy strategy = objectFactory.newInstance(SchemaUpdateStrategy.class,
schemaUpdateStrategyType);
dataNode.setSchemaUpdateStrategyName(schemaUpdateStrategyType);
dataNode.setSchemaUpdateStrategy(strategy);
@@ -251,9 +197,7 @@ public class DataDomainProvider implemen
}
if (defaultNode != null) {
- logger.info("setting DataNode '"
- + defaultNode.getName()
- + "' as default, used by all unlinked DataMaps");
+ logger.info("setting DataNode '" + defaultNode.getName() + "' as default, used by all unlinked DataMaps");
dataDomain.setDefaultNode(defaultNode);
}
@@ -264,4 +208,50 @@ public class DataDomainProvider implemen
return dataDomain;
}
+
+ private DataChannelDescriptor descriptorFromConfigs() {
+
+ long t0 = System.currentTimeMillis();
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("starting configuration loading: " + locations);
+ }
+
+ DataChannelDescriptor[] descriptors = new DataChannelDescriptor[locations.size()];
+
+ for (int i = 0; i < locations.size(); i++) {
+
+ String location = locations.get(i);
+
+ Collection<Resource> configurations = resourceLocator.findResources(location);
+
+ if (configurations.isEmpty()) {
+ throw new DataDomainLoadException("Configuration resource \"%s\" is not found.", location);
+ }
+
+ Resource configurationResource = configurations.iterator().next();
+
+ // no support for multiple configs yet, but this is not a hard error
+ if (configurations.size() > 1) {
+ logger.info("found " + configurations.size() + " configurations for " + location
+ + ", will use the first one: " + configurationResource.getURL());
+ }
+
+ ConfigurationTree<DataChannelDescriptor> tree = loader.load(configurationResource);
+ if (!tree.getLoadFailures().isEmpty()) {
+ // TODO: andrus 03/10/2010 - log the errors before throwing?
+ throw new DataDomainLoadException(tree, "Error loading DataChannelDescriptor");
+ }
+
+ descriptors[i] = tree.getRootNode();
+ }
+
+ long t1 = System.currentTimeMillis();
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("finished configuration loading in " + (t1 - t0) + " ms.");
+ }
+
+ return descriptorMerger.merge(descriptors);
+ }
}
Added: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/ServerRuntime_ConfigFree_Test.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/ServerRuntime_ConfigFree_Test.java?rev=1568609&view=auto
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/ServerRuntime_ConfigFree_Test.java (added)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/ServerRuntime_ConfigFree_Test.java Sat Feb 15 10:33:24 2014
@@ -0,0 +1,60 @@
+/*****************************************************************
+ * 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.server;
+
+import java.util.List;
+
+import org.apache.cayenne.DataRow;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.query.SQLSelect;
+import org.apache.cayenne.test.jdbc.DBHelper;
+import org.apache.cayenne.test.jdbc.TableHelper;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class ServerRuntime_ConfigFree_Test extends ServerCase {
+
+ @Inject
+ protected DBHelper dbHelper;
+
+ @Override
+ protected void setUpAfterInjection() throws Exception {
+ dbHelper.deleteAll("PAINTING_INFO");
+ dbHelper.deleteAll("PAINTING");
+ dbHelper.deleteAll("ARTIST_EXHIBIT");
+ dbHelper.deleteAll("ARTIST_GROUP");
+ dbHelper.deleteAll("ARTIST");
+ dbHelper.deleteAll("EXHIBIT");
+ dbHelper.deleteAll("GALLERY");
+
+ TableHelper tArtist = new TableHelper(dbHelper, "ARTIST");
+ tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
+ tArtist.insert(33001, "AA1");
+ tArtist.insert(33002, "AA2");
+ }
+
+ public void testRunSQL() {
+
+ ServerRuntime runtime = new ServerRuntimeBuilder().build();
+
+ List<DataRow> result = SQLSelect.dataRowQuery("SELECT * FROM ARTIST").select(runtime.newContext());
+ assertEquals(2, result.size());
+ }
+}