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/05/03 05:37:00 UTC
svn commit: r940358 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/
framework/cayenne-jdk1....
Author: aadamchik
Date: Mon May 3 03:36:59 2010
New Revision: 940358
URL: http://svn.apache.org/viewvc?rev=940358&view=rev
Log:
CAY-1414 Remove org.apache.cayenne.conf package
* Removed DefaultConfiguration
* Removed Configuration
* Removed util.WebApplicationResourceLocator (this one seems to be unused since the server filters were migrated to DI)
* removed everything else from o.a.c.conf with a few things left as deprecated
* switched (almost all) tutorials to DI
Added:
cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/cayenne-UntitledDomain.xml
cayenne/main/trunk/tutorials/tutorial/src/main/resources/cayenne-UntitledDomain.xml
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/AbstractHandler.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ClasspathResourceFinder.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ConfigLoader.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ConfigLoaderDelegate.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ConfigSaverDelegate.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ConfigStatus.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/Configuration.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/DataSourceFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/DefaultConfiguration.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/NodeDataSource.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/RuntimeLoadDelegate.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/RuntimeSaveDelegate.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/WebApplicationResourceLocator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/AbstractAccessStack.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/WebApplicationResourceLocatorAccess.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/WebApplicationResourceLocatorTest.java
cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/action/MockConfiguration.java
cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/UntitledDomainNode.driver.xml
cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/cayenne.xml
cayenne/main/trunk/tutorials/tutorial/src/main/resources/UntitledDomainNode.driver.xml
cayenne/main/trunk/tutorials/tutorial/src/main/resources/cayenne.xml
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/DataNode.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ResourceFinder.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ResourceLocator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java
cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/ApplicationFileFilterTest.java
cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/DataMapFileFilterTest.java
cayenne/main/trunk/framework/maven-cayenne-modeler-plugin/src/main/java/org/apache/cayenne/tools/CayenneModelerMojo.java
cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/UntitledDomainMap.map.xml
cayenne/main/trunk/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/Main.java
cayenne/main/trunk/tutorials/tutorial/src/main/resources/UntitledDomainMap.map.xml
cayenne/main/trunk/tutorials/tutorial/src/main/webapp/WEB-INF/web.xml
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=940358&r1=940357&r2=940358&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 Mon May 3 03:36:59 2010
@@ -33,6 +33,7 @@ CAY-1350 Implement memorized sorting of
CAY-1374 Add parent dataMap property to Query interface
CAY-1393 Update velocity to 1.6.3
CAY-1394 DI-based replacement for JNDI hack
+CAY-1414 Remove org.apache.cayenne.conf package
CAY-1415 Replace WebApplicationContextFilter with a DI-enabled filter
CAY-1419 File-based ResourceLocator to replace legacy FileConfiguration
CAY-1420 Migrate ROP server-side components to DI-based stack
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataNode.java Mon May 3 03:36:59 2010
@@ -208,7 +208,7 @@ public class DataNode implements QueryEn
}
/**
- * Returns a DataNode that should hanlde queries for all DataMap components.
+ * Returns a DataNode that should handle queries for all DataMap components.
*
* @since 1.1
*/
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ResourceFinder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ResourceFinder.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ResourceFinder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ResourceFinder.java Mon May 3 03:36:59 2010
@@ -25,7 +25,10 @@ import java.util.Collection;
* An object that defines a strategy for locating stream resources.
*
* @since 3.0
+ * @deprecated since 3.1 deprecated in favor of injectable
+ * org.apache.cayenne.resource.ResourceLocator.
*/
+@Deprecated
public interface ResourceFinder {
/**
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java Mon May 3 03:36:59 2010
@@ -35,7 +35,6 @@ import org.apache.cayenne.access.trans.Q
import org.apache.cayenne.access.trans.QueryAssembler;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.access.types.ExtendedTypeMap;
-import org.apache.cayenne.conf.ClasspathResourceFinder;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
@@ -43,6 +42,9 @@ import org.apache.cayenne.map.DbRelation
import org.apache.cayenne.merge.MergerFactory;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLAction;
+import org.apache.cayenne.resource.ClassLoaderResourceLocator;
+import org.apache.cayenne.resource.Resource;
+import org.apache.cayenne.resource.ResourceLocator;
import org.apache.cayenne.util.Util;
/**
@@ -65,6 +67,8 @@ public class JdbcAdapter implements DbAd
protected String identifiersStartQuote;
protected String identifiersEndQuote;
+ protected ResourceLocator resourceLocator;
+
/**
* @since 3.0
*/
@@ -87,6 +91,9 @@ public class JdbcAdapter implements DbAd
this.setSupportsBatchUpdates(false);
this.setSupportsUniqueConstraints(true);
+ // TODO: andrus 05.02.2010 - ideally this should be injected
+ this.resourceLocator = new ClassLoaderResourceLocator();
+
this.pkGenerator = createPkGenerator();
this.typesHandler = TypesHandler.getHandler(findResource("/types.xml"));
this.extendedTypes = new ExtendedTypeMap();
@@ -122,9 +129,10 @@ public class JdbcAdapter implements DbAd
while (adapterClass != null && JdbcAdapter.class.isAssignableFrom(adapterClass)) {
String path = Util.getPackagePath(adapterClass.getName()) + name;
- URL url = new ClasspathResourceFinder().getResource(path);
- if (url != null) {
- return url;
+ Collection<Resource> resources = resourceLocator.findResources(path);
+
+ if (!resources.isEmpty()) {
+ return resources.iterator().next().getURL();
}
adapterClass = adapterClass.getSuperclass();
@@ -322,12 +330,11 @@ public class JdbcAdapter implements DbAd
// append size and precision (if applicable)s
if (TypesMapping.supportsLength(column.getType())) {
int len = column.getMaxLength();
-
- int scale = (TypesMapping.isDecimal(column.getType())
- && column.getType() != Types.FLOAT
- )
- ? column.getScale() : -1;
-
+
+ int scale = (TypesMapping.isDecimal(column.getType()) && column.getType() != Types.FLOAT)
+ ? column.getScale()
+ : -1;
+
// sanity check
if (scale > len) {
scale = -1;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/MapLoader.java Mon May 3 03:36:59 2010
@@ -765,7 +765,9 @@ public class MapLoader extends DefaultHa
* Loads DataMap from file specified by <code>uri</code> parameter.
*
* @throws CayenneRuntimeException if source URI does not resolve to a valid map files
+ * @deprecated since 3.1 {@link #loadDataMap(InputSource)} should be used.
*/
+ @Deprecated
public DataMap loadDataMap(String uri) throws CayenneRuntimeException {
// configure resource locator
ResourceFinder locator = createResourceFinder();
@@ -825,7 +827,10 @@ public class MapLoader extends DefaultHa
* Creates, configures and returns a default ResourceFinder.
*
* @since 3.0
+ * @deprecated since 3.1 as MapLoader should not bother itself with looking up
+ * resources.
*/
+ @Deprecated
protected ResourceFinder createResourceFinder() {
ResourceLocator locator = new ResourceLocator();
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java Mon May 3 03:36:59 2010
@@ -58,6 +58,21 @@ public class ClassLoaderResourceLocator
}
protected ClassLoader getClassLoader() {
- return Thread.currentThread().getContextClassLoader();
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+ if (loader == null) {
+ loader = getClass().getClassLoader();
+ }
+
+ if (loader == null) {
+ loader = ClassLoader.getSystemClassLoader();
+ }
+
+ if (loader == null) {
+ throw new IllegalStateException(
+ "Can't detect ClassLoader to use for resouyrce location");
+ }
+
+ return loader;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ResourceLocator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ResourceLocator.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ResourceLocator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ResourceLocator.java Mon May 3 03:36:59 2010
@@ -35,7 +35,11 @@ import org.apache.commons.logging.LogFac
/**
* Utility class to find resources (files, etc.), using a preconfigured strategy.
+ *
+ * @deprecated since 3.1 deprecated in favor of injectable
+ * org.apache.cayenne.resource.ResourceLocator.
*/
+@Deprecated
public class ResourceLocator implements ResourceFinder {
private static Log logObj = LogFactory.getLog(ResourceLocator.class);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/SimpleAccessStack.java Mon May 3 03:36:59 2010
@@ -19,23 +19,54 @@
package org.apache.cayenne.unit;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
import java.util.Map;
import org.apache.art.StringET1ExtendedType;
+import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.DbGenerator;
+import org.apache.cayenne.access.QueryLogger;
import org.apache.cayenne.access.UnitTestDomain;
import org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.event.DefaultEventManager;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.query.Query;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* Default implementation of the AccessStack that has a single DataNode per DataMap.
*/
-public class SimpleAccessStack extends AbstractAccessStack implements AccessStack {
+public class SimpleAccessStack implements AccessStack {
+ private static Log logger = LogFactory.getLog(SimpleAccessStack.class);
+
+ // hardcoded dependent entities that should be excluded
+ // if LOBs are not supported
+ private static final String[] EXTRA_EXCLUDED_FOR_NO_LOB = new String[] {
+ "CLOB_DETAIL"
+ };
+
+ protected CayenneResources resources;
protected UnitTestDomain domain;
protected DataSetFactory dataSetFactory;
@@ -51,7 +82,10 @@ public class SimpleAccessStack extends A
}
}
- @Override
+ public AccessStackAdapter getAdapter(DataNode node) {
+ return resources.getAccessStackAdapter(node.getAdapter().getClass());
+ }
+
protected DataDomain getDomain() {
return domain;
}
@@ -137,4 +171,243 @@ public class SimpleAccessStack extends A
createPKSupport(node, node.getDataMaps().iterator().next());
}
}
+
+ /**
+ * Helper method that orders DbEntities to satisfy referential constraints and returns
+ * an ordered list.
+ */
+ protected List dbEntitiesInInsertOrder(DataNode node, DataMap map) {
+ List entities = new ArrayList(map.getDbEntities());
+
+ // filter varios unsupported tests...
+
+ // LOBs
+ boolean excludeLOB = !getAdapter(node).supportsLobs();
+ boolean excludeBinPK = !getAdapter(node).supportsBinaryPK();
+ if (excludeLOB || excludeBinPK) {
+ Iterator it = entities.iterator();
+ List filtered = new ArrayList();
+ while (it.hasNext()) {
+ DbEntity ent = (DbEntity) it.next();
+
+ // check for LOB attributes
+ if (excludeLOB) {
+ if (Arrays.binarySearch(EXTRA_EXCLUDED_FOR_NO_LOB, ent.getName()) >= 0) {
+ continue;
+ }
+
+ boolean hasLob = false;
+ for (final DbAttribute attr : ent.getAttributes()) {
+ if (attr.getType() == Types.BLOB || attr.getType() == Types.CLOB) {
+ hasLob = true;
+ break;
+ }
+ }
+
+ if (hasLob) {
+ continue;
+ }
+ }
+
+ // check for BIN PK
+ if (excludeBinPK) {
+ boolean skip = false;
+ for (final DbAttribute attr : ent.getAttributes()) {
+ // check for BIN PK or FK to BIN Pk
+ if (attr.getType() == Types.BINARY
+ || attr.getType() == Types.VARBINARY
+ || attr.getType() == Types.LONGVARBINARY) {
+
+ if (attr.isPrimaryKey() || attr.isForeignKey()) {
+ skip = true;
+ break;
+ }
+ }
+ }
+
+ if (skip) {
+ continue;
+ }
+ }
+
+ filtered.add(ent);
+ }
+
+ entities = filtered;
+ }
+
+ node.getEntitySorter().sortDbEntities(entities, false);
+ return entities;
+ }
+
+ protected void deleteTestData(DataNode node, DataMap map) throws Exception {
+
+ Connection conn = node.getDataSource().getConnection();
+ List list = this.dbEntitiesInInsertOrder(node, map);
+ try {
+ if (conn.getAutoCommit()) {
+ conn.setAutoCommit(false);
+ }
+
+ Statement stmt = conn.createStatement();
+
+ ListIterator it = list.listIterator(list.size());
+ while (it.hasPrevious()) {
+ DbEntity ent = (DbEntity) it.previous();
+
+ boolean status;
+ if (ent.getDataMap() != null
+ && ent.getDataMap().isQuotingSQLIdentifiers()) {
+ status = true;
+ }
+ else {
+ status = false;
+ }
+
+ QuotingStrategy strategy = getAdapter(node).getQuotingStrategy(status);
+
+ String deleteSql = "DELETE FROM " + strategy.quoteString(ent.getName());
+
+ try {
+ stmt.executeUpdate(deleteSql);
+ }
+ catch (SQLException e) {
+ try {
+ Collection<String> deleteTableSql = node
+ .getAdapter()
+ .dropTableStatements(ent);
+ stmt.executeUpdate(deleteTableSql.iterator().next());
+ String createTableSql = node.getAdapter().createTable(ent);
+ stmt.executeUpdate(createTableSql);
+ }
+ catch (SQLException e1) {
+ throw new CayenneRuntimeException(
+ "Error deleting test data for entity '"
+ + ent.getName()
+ + "': "
+ + e.getLocalizedMessage());
+ }
+ }
+ }
+ conn.commit();
+ stmt.close();
+ }
+ finally {
+ conn.close();
+ }
+ }
+
+ protected void dropSchema(DataNode node, DataMap map) throws Exception {
+ Connection conn = node.getDataSource().getConnection();
+ List list = dbEntitiesInInsertOrder(node, map);
+
+ try {
+ DatabaseMetaData md = conn.getMetaData();
+ ResultSet tables = md.getTables(null, null, "%", null);
+ List allTables = new ArrayList();
+
+ while (tables.next()) {
+ // 'toUpperCase' is needed since most databases
+ // are case insensitive, and some will convert names to lower case
+ // (PostgreSQL)
+ String name = tables.getString("TABLE_NAME");
+ if (name != null)
+ allTables.add(name.toUpperCase());
+ }
+ tables.close();
+
+ getAdapter(node).willDropTables(conn, map, allTables);
+
+ // drop all tables in the map
+ Statement stmt = conn.createStatement();
+
+ ListIterator it = list.listIterator(list.size());
+ while (it.hasPrevious()) {
+ DbEntity ent = (DbEntity) it.previous();
+ if (!allTables.contains(ent.getName().toUpperCase())) {
+ continue;
+ }
+
+ for (String dropSql : node.getAdapter().dropTableStatements(ent)) {
+ try {
+ logger.info(dropSql);
+ stmt.execute(dropSql);
+ }
+ catch (SQLException sqe) {
+ logger.warn(
+ "Can't drop table " + ent.getName() + ", ignoring...",
+ sqe);
+ }
+ }
+ }
+
+ getAdapter(node).droppedTables(conn, map);
+ }
+ finally {
+ conn.close();
+ }
+
+ }
+
+ protected void dropPKSupport(DataNode node, DataMap map) throws Exception {
+ List filteredEntities = dbEntitiesInInsertOrder(node, map);
+ node.getAdapter().getPkGenerator().dropAutoPk(node, filteredEntities);
+ }
+
+ protected void createPKSupport(DataNode node, DataMap map) throws Exception {
+ List filteredEntities = dbEntitiesInInsertOrder(node, map);
+ node.getAdapter().getPkGenerator().createAutoPk(node, filteredEntities);
+ }
+
+ protected void createSchema(DataNode node, DataMap map) throws Exception {
+ Connection conn = node.getDataSource().getConnection();
+
+ try {
+ getAdapter(node).willCreateTables(conn, map);
+ Statement stmt = conn.createStatement();
+ Iterator it = tableCreateQueries(node, map);
+ while (it.hasNext()) {
+ String query = (String) it.next();
+ QueryLogger.logQuery(query, Collections.EMPTY_LIST);
+ stmt.execute(query);
+ }
+ getAdapter(node).createdTables(conn, map);
+ }
+ finally {
+ conn.close();
+ }
+ }
+
+ /**
+ * Returns iterator of preprocessed table create queries.
+ */
+ protected Iterator tableCreateQueries(DataNode node, DataMap map) throws Exception {
+ DbAdapter adapter = node.getAdapter();
+ DbGenerator gen = new DbGenerator(adapter, map, null, getDomain());
+
+ List orderedEnts = dbEntitiesInInsertOrder(node, map);
+ List queries = new ArrayList();
+
+ // table definitions
+ Iterator it = orderedEnts.iterator();
+ while (it.hasNext()) {
+ DbEntity ent = (DbEntity) it.next();
+ queries.add(adapter.createTable(ent));
+ }
+
+ // FK constraints
+
+ it = orderedEnts.iterator();
+ while (it.hasNext()) {
+ DbEntity ent = (DbEntity) it.next();
+ if (!getAdapter(node).supportsFKConstraints(ent)) {
+ continue;
+ }
+
+ List qs = gen.createConstraintsQueries(ent);
+ queries.addAll(qs);
+ }
+
+ return queries.iterator();
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java Mon May 3 03:36:59 2010
@@ -36,8 +36,8 @@ import java.util.prefs.BackingStoreExcep
import java.util.prefs.Preferences;
import javax.swing.WindowConstants;
+import javax.swing.filechooser.FileFilter;
-import org.apache.cayenne.conf.Configuration;
import org.apache.cayenne.modeler.action.ExitAction;
import org.apache.cayenne.modeler.action.OpenProjectAction;
import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
@@ -45,6 +45,7 @@ import org.apache.cayenne.modeler.editor
import org.apache.cayenne.modeler.pref.ComponentGeometry;
import org.apache.cayenne.modeler.pref.FSPath;
import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.modeler.util.FileFilters;
import org.apache.cayenne.project2.Project;
import org.apache.cayenne.project2.validation.ProjectValidator;
import org.apache.cayenne.validation.ValidationFailure;
@@ -128,8 +129,10 @@ public class CayenneModelerController ex
File transferFile = (File) fileList.get(0);
if (transferFile.isFile()) {
+
+ FileFilter filter = FileFilters.getApplicationFilter();
- if (Configuration.DEFAULT_DOMAIN_FILE.equals(transferFile.getName())) {
+ if (filter.accept(transferFile)) {
ActionEvent e = new ActionEvent(
transferFile,
ActionEvent.ACTION_PERFORMED,
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java Mon May 3 03:36:59 2010
@@ -29,11 +29,10 @@ import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
-import org.apache.cayenne.conf.Configuration;
import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.modeler.action.OpenProjectAction;
import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
import org.apache.cayenne.modeler.util.CayenneUserDir;
-import org.apache.cayenne.modeler.action.OpenProjectAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -70,9 +69,6 @@ public class Main {
protected static File projectFileFromArgs(String[] args) {
if (args.length == 1) {
File f = new File(args[0]);
- if (f.isDirectory()) {
- f = new File(f, Configuration.DEFAULT_DOMAIN_FILE);
- }
if (f.isFile()
&& f.getName().startsWith("cayenne")
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportDataMapAction.java Mon May 3 03:36:59 2010
@@ -69,6 +69,7 @@ public class ImportDataMapAction extends
// configure resource locator to take absolute path
MapLoader mapLoader = new MapLoader() {
+ @Deprecated
protected ResourceLocator configLocator() {
ResourceLocator locator = new ResourceLocator();
locator.setSkipAbsolutePath(false);
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/ApplicationFileFilterTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/ApplicationFileFilterTest.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/ApplicationFileFilterTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/ApplicationFileFilterTest.java Mon May 3 03:36:59 2010
@@ -25,11 +25,10 @@ import javax.swing.filechooser.FileFilte
import junit.framework.TestCase;
-import org.apache.cayenne.conf.Configuration;
-
/**
*/
public class ApplicationFileFilterTest extends TestCase {
+
protected FileFilter filter;
public void setUp() throws Exception {
@@ -41,7 +40,7 @@ public class ApplicationFileFilterTest e
}
public void testAcceptCayenneXml() throws Exception {
- assertTrue(filter.accept(new File(Configuration.DEFAULT_DOMAIN_FILE)));
+ assertTrue(filter.accept(new File("cayenne.xml")));
}
public void testRejectOther() throws Exception {
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/DataMapFileFilterTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/DataMapFileFilterTest.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/DataMapFileFilterTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/util/DataMapFileFilterTest.java Mon May 3 03:36:59 2010
@@ -25,11 +25,10 @@ import javax.swing.filechooser.FileFilte
import junit.framework.TestCase;
-import org.apache.cayenne.conf.Configuration;
-
/**
*/
public class DataMapFileFilterTest extends TestCase {
+
protected FileFilter filter;
public void setUp() throws Exception {
@@ -41,7 +40,7 @@ public class DataMapFileFilterTest exten
}
public void testRejectCayenneXml() throws Exception {
- assertFalse(filter.accept(new File(Configuration.DEFAULT_DOMAIN_FILE)));
+ assertFalse(filter.accept(new File("cayenne.xml")));
}
public void testRejectOther() throws Exception {
Modified: cayenne/main/trunk/framework/maven-cayenne-modeler-plugin/src/main/java/org/apache/cayenne/tools/CayenneModelerMojo.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/maven-cayenne-modeler-plugin/src/main/java/org/apache/cayenne/tools/CayenneModelerMojo.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/framework/maven-cayenne-modeler-plugin/src/main/java/org/apache/cayenne/tools/CayenneModelerMojo.java (original)
+++ cayenne/main/trunk/framework/maven-cayenne-modeler-plugin/src/main/java/org/apache/cayenne/tools/CayenneModelerMojo.java Mon May 3 03:36:59 2010
@@ -20,18 +20,12 @@
package org.apache.cayenne.tools;
import java.io.File;
-import java.util.List;
-import java.util.Properties;
-import org.apache.cayenne.conf.Configuration;
import org.apache.cayenne.modeler.Main;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.Resource;
-import org.apache.maven.project.MavenProject;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.apache.maven.project.MavenProject;
/**
* Maven mojo to start up the Cayenne modeler from the command-line.
@@ -43,76 +37,43 @@ import org.codehaus.plexus.util.xml.Xpp3
*/
public class CayenneModelerMojo extends AbstractMojo {
- /**
- * Name of the model file to open.
- *
- * @parameter expression="${modeler.modelFile}
- */
- private File modelFile;
-
- /**
- * Project instance.
- * @parameter default-value="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
- private File lookupModelFile() {
- if (modelFile != null) {
- if (modelFile.isDirectory()) {
- return new File(modelFile,Configuration.DEFAULT_DOMAIN_FILE);
- } else {
- return modelFile;
- }
- }
-
- //try to locate cayenne.xml at top level of a resource directory.
- for(Object o : project.getResources()) {
- Resource r = (Resource) o;
- File f = new File(r.getDirectory(),Configuration.DEFAULT_DOMAIN_FILE);
- if (f.exists()) {
- return f;
- }
- }
-
- //failing that, try for WEB-INF/DEFAULT_DOMAIN_FILE
- //but only if we're using the war plugin
- for(Object o : project.getBuildPlugins()) {
- Plugin plugin = (Plugin) o;
- //means we're using the war plugin.
- if (plugin.getKey().equals("org.apache.maven.plugins:maven-war-plugin")) {
- //check to see if the default loc. is overridden.
- Xpp3Dom conf = (Xpp3Dom)plugin.getConfiguration();
- String path;
-
- if (conf != null && (conf = conf.getChild("warSourceDirectory")) != null) {
- path = conf.getValue().trim();
- } else {
- path = "src" + File.separator + "main" + File.separator + "webapp";
- }
-
- return new File(project.getBasedir().getAbsolutePath(),
- path + File.separator +
- "WEB-INF" + File.separator +
- Configuration.DEFAULT_DOMAIN_FILE);
- }
- }
+ /**
+ * Name of the model file to open.
+ *
+ * @parameter expression="${modeler.modelFile}
+ */
+ private File modelFile;
+
+ /**
+ * Project instance.
+ *
+ * @parameter default-value="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
+
+ private File lookupModelFile() {
+ if (modelFile != null && modelFile.isFile()) {
+ return modelFile;
+ }
- return null;
- }
+ return null;
+ }
public void execute() throws MojoExecutionException, MojoFailureException {
- //setup the system property to tell the modeler where to generate the java source files.
- System.setProperty("cayenne.cgen.destdir",project.getBuild().getSourceDirectory());
-
- //start the modeler with the provided model file, if it exists.
- File f = lookupModelFile();
- if (f != null && f.exists() && !f.isDirectory()) {
- Main.main(new String[] {f.getAbsolutePath()});
- } else {
- Main.main(new String[] {});
- }
+ // setup the system property to tell the modeler where to generate the
+ // java source files.
+ System.setProperty("cayenne.cgen.destdir", project.getBuild()
+ .getSourceDirectory());
+
+ // start the modeler with the provided model file, if it exists.
+ File f = lookupModelFile();
+ if (f != null && f.exists() && !f.isDirectory()) {
+ Main.main(new String[] { f.getAbsolutePath() });
+ } else {
+ Main.main(new String[] {});
+ }
// Block until the modeler finishes executing.
try {
Modified: cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/UntitledDomainMap.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/UntitledDomainMap.map.xml?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/UntitledDomainMap.map.xml (original)
+++ cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/UntitledDomainMap.map.xml Mon May 3 03:36:59 2010
@@ -1,8 +1,8 @@
<?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">
+ 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="6">
<property name="defaultPackage" value="org.apache.cayenne.tutorial.persistent"/>
<property name="clientSupported" value="true"/>
<property name="defaultClientPackage" value="org.apache.cayenne.tutorial.persistent.client"/>
Added: cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/cayenne-UntitledDomain.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/cayenne-UntitledDomain.xml?rev=940358&view=auto
==============================================================================
--- cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/cayenne-UntitledDomain.xml (added)
+++ cayenne/main/trunk/tutorials/tutorial-rop-server/src/main/resources/cayenne-UntitledDomain.xml Mon May 3 03:36:59 2010
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain project-version="6">
+ <map name="UntitledDomainMap"/>
+
+ <node name="UntitledDomainNode"
+ factory="org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory"
+ schema-update-strategy="org.apache.cayenne.access.dbsync.CreateIfNoSchemaStrategy"
+ >
+ <map-ref name="UntitledDomainMap"/>
+ <data-source>
+ <driver value="org.apache.derby.jdbc.EmbeddedDriver"/>
+ <url value="jdbc:derby:memory:testdb;create=true"/>
+ <connectionPool min="1" max="1"/>
+ <login/>
+ </data-source>
+ </node>
+</domain>
Modified: cayenne/main/trunk/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/Main.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/Main.java?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/Main.java (original)
+++ cayenne/main/trunk/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/Main.java Mon May 3 03:36:59 2010
@@ -25,7 +25,7 @@ import java.util.List;
import org.apache.cayenne.Cayenne;
import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.configuration.server.CayenneServerRuntime;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.query.SelectQuery;
@@ -37,8 +37,12 @@ public class Main {
public static void main(String[] args) {
+ // starting Cayenne
+ CayenneServerRuntime cayenneRuntime = new CayenneServerRuntime(
+ "cayenne-UntitledDomain.xml");
+
// getting a hold of ObjectContext
- ObjectContext context = DataContext.createDataContext();
+ ObjectContext context = cayenneRuntime.getContext();
newObjectsTutorial(context);
selectTutorial(context);
Modified: cayenne/main/trunk/tutorials/tutorial/src/main/resources/UntitledDomainMap.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/tutorials/tutorial/src/main/resources/UntitledDomainMap.map.xml?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/tutorials/tutorial/src/main/resources/UntitledDomainMap.map.xml (original)
+++ cayenne/main/trunk/tutorials/tutorial/src/main/resources/UntitledDomainMap.map.xml Mon May 3 03:36:59 2010
@@ -1,8 +1,8 @@
<?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">
+ 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="6">
<property name="defaultPackage" value="org.apache.cayenne.tutorial.persistent"/>
<db-entity name="ARTIST">
<db-attribute name="DATE_OF_BIRTH" type="DATE"/>
Added: cayenne/main/trunk/tutorials/tutorial/src/main/resources/cayenne-UntitledDomain.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/tutorials/tutorial/src/main/resources/cayenne-UntitledDomain.xml?rev=940358&view=auto
==============================================================================
--- cayenne/main/trunk/tutorials/tutorial/src/main/resources/cayenne-UntitledDomain.xml (added)
+++ cayenne/main/trunk/tutorials/tutorial/src/main/resources/cayenne-UntitledDomain.xml Mon May 3 03:36:59 2010
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain project-version="6">
+ <map name="UntitledDomainMap"/>
+
+ <node name="UntitledDomainNode"
+ factory="org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory"
+ schema-update-strategy="org.apache.cayenne.access.dbsync.CreateIfNoSchemaStrategy"
+ >
+ <map-ref name="UntitledDomainMap"/>
+ <data-source>
+ <driver value="org.apache.derby.jdbc.EmbeddedDriver"/>
+ <url value="jdbc:derby:memory:testdb;create=true"/>
+ <connectionPool min="1" max="1"/>
+ <login/>
+ </data-source>
+ </node>
+</domain>
Modified: cayenne/main/trunk/tutorials/tutorial/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/tutorials/tutorial/src/main/webapp/WEB-INF/web.xml?rev=940358&r1=940357&r2=940358&view=diff
==============================================================================
--- cayenne/main/trunk/tutorials/tutorial/src/main/webapp/WEB-INF/web.xml (original)
+++ cayenne/main/trunk/tutorials/tutorial/src/main/webapp/WEB-INF/web.xml Mon May 3 03:36:59 2010
@@ -28,11 +28,11 @@
DataContext
-->
<filter>
- <filter-name>CayenneFilter</filter-name>
- <filter-class>org.apache.cayenne.conf.WebApplicationContextFilter</filter-class>
+ <filter-name>cayenne-UntiltledDomain</filter-name>
+ <filter-class>org.apache.cayenne.configuration.web.CayenneFilter</filter-class>
</filter>
<filter-mapping>
- <filter-name>CayenneFilter</filter-name>
+ <filter-name>cayenne-UntiltledDomain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>