Author: aadamchik
Date: Thu Mar 1 10:20:23 2012
New Revision: 1295494
URL: http://svn.apache.org/viewvc?rev=1295494&view=rev
Log:
CAY-1679 A notion of default node
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Thu Mar 1
10:20:23 2012
@@ -41,6 +41,7 @@ CAY-1666 Fix problem with tests on ingre
CAY-1667 Expression parser performance optimization
CAY-1669 RuntimeProperties use of System properties becomes a contention point
when creating query translators
CAY-1670 Non-blocking DataRowStore
+CAY-1679 A notion of default node
CAY-1680 Get rid of shared locks in DataDomain metadata lookups
Bug Fixes Since 3.1M3:
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
Thu Mar 1 10:20:23 2012
@@ -83,6 +83,7 @@ public class DataDomain implements Query
protected Map<String, DataNode> nodes;
protected Map<String, DataNode> nodesByDataMapName;
+ protected DataNode defaultNode;
protected Map<String, String> properties;
protected EntityResolver entityResolver;
@@ -636,6 +637,20 @@ public class DataDomain implements Query
break;
}
}
+
+ if (node == null) {
+
+ if (defaultNode != null) {
+ nodesByDataMapName.put(map.getName(), defaultNode);
+ node = defaultNode;
+ }
+ else {
+ throw new CayenneRuntimeException(
+ "No DataNode configured for DataMap '"
+ + map.getName()
+ + "' and no default DataNode set");
+ }
+ }
}
return node;
@@ -1002,4 +1017,21 @@ public class DataDomain implements Query
"It is illegal to call 'onQuery' inside 'onSync' chain");
}
}
+
+ /**
+ * An optional DataNode that is used for DataMaps that are not linked to a
DataNode
+ * explicitly.
+ *
+ * @since 3.1
+ */
+ public DataNode getDefaultNode() {
+ return defaultNode;
+ }
+
+ /**
+ * @since 3.1
+ */
+ public void setDefaultNode(DataNode defaultNode) {
+ this.defaultNode = defaultNode;
+ }
}
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
Thu Mar 1 10:20:23 2012
@@ -44,6 +44,7 @@ public class DataChannelDescriptor imple
protected Collection<DataMap> dataMaps;
protected Collection<DataNodeDescriptor> nodeDescriptors;
protected Resource configurationSource;
+ protected String defaultNodeName;
public DataChannelDescriptor() {
properties = new HashMap<String, String>();
@@ -158,4 +159,16 @@ public class DataChannelDescriptor imple
public void setConfigurationSource(Resource configurationSource) {
this.configurationSource = configurationSource;
}
+
+ /**
+ * Returns the name of the DataNode that should be used as the default if
a DataMap is
+ * not explicitly linked to a node.
+ */
+ public String getDefaultNodeName() {
+ return defaultNodeName;
+ }
+
+ public void setDefaultNodeName(String defaultDataNodeName) {
+ this.defaultNodeName = defaultDataNodeName;
+ }
}
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=1295494&r1=1295493&r2=1295494&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
Thu Mar 1 10:20:23 2012
@@ -98,10 +98,10 @@ public class DataDomainProvider implemen
@Inject
protected Injector injector;
-
+
@Inject
protected JdbcEventLogger jdbcEventLogger;
-
+
@Inject
protected QueryCache queryCache;
@@ -114,8 +114,10 @@ public class DataDomainProvider implemen
throw e;
}
catch (Exception e) {
- throw new DataDomainLoadException("Error loading DataChannel:
'%s'", e, e
- .getMessage());
+ throw new DataDomainLoadException(
+ "Error loading DataChannel: '%s'",
+ e,
+ e.getMessage());
}
}
@@ -234,6 +236,22 @@ public class DataDomainProvider implemen
dataDomain.addNode(dataNode);
}
+ // init default node
+ DataNode defaultNode = null;
+
+ if (descriptor.getDefaultNodeName() != null) {
+ defaultNode = dataDomain.getNode(descriptor.getDefaultNodeName());
+ }
+
+ if (defaultNode == null) {
+ Collection<DataNode> allNodes = dataDomain.getDataNodes();
+ if (allNodes.size() == 1) {
+ defaultNode = allNodes.iterator().next();
+ }
+ }
+
+ dataDomain.setDefaultNode(defaultNode);
+
for (DataChannelFilter filter : filters) {
dataDomain.addFilter(filter);
}