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 2012/11/11 09:46:40 UTC
svn commit: r1407926 - in /cayenne/main/trunk/framework:
cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/
cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/
cayenne-tools/src/test/java/org...
Author: aadamchik
Date: Sun Nov 11 08:46:38 2012
New Revision: 1407926
URL: http://svn.apache.org/viewvc?rev=1407926&view=rev
Log:
CAY-1758 cdbimport improvements: Default adapter (if none specified) must be AutoAdapter, not JdbcAdapter
fixing a DI error when auto adapter class is passed to the factory explicitly
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java
cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/configuration/ToolsModuleTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactory.java?rev=1407926&r1=1407925&r2=1407926&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactory.java Sun Nov 11 08:46:38 2012
@@ -38,8 +38,8 @@ import org.apache.cayenne.di.Provider;
import org.apache.cayenne.log.JdbcEventLogger;
/**
- * A factory of DbAdapters that either loads user-provided adapter or guesses the adapter
- * type from the database metadata.
+ * A factory of DbAdapters that either loads user-provided adapter or guesses
+ * the adapter type from the database metadata.
*
* @since 3.1
*/
@@ -55,8 +55,7 @@ public class DefaultDbAdapterFactory imp
protected AdhocObjectFactory objectFactory;
protected List<DbAdapterDetector> detectors;
- public DefaultDbAdapterFactory(
- @Inject(Constants.SERVER_ADAPTER_DETECTORS_LIST) List<DbAdapterDetector> detectors) {
+ public DefaultDbAdapterFactory(@Inject(Constants.SERVER_ADAPTER_DETECTORS_LIST) List<DbAdapterDetector> detectors) {
if (detectors == null) {
throw new NullPointerException("Null detectors list");
}
@@ -64,20 +63,24 @@ public class DefaultDbAdapterFactory imp
this.detectors = detectors;
}
- public DbAdapter createAdapter(
- final DataNodeDescriptor nodeDescriptor,
- final DataSource dataSource) throws Exception {
-
+ public DbAdapter createAdapter(DataNodeDescriptor nodeDescriptor, final DataSource dataSource) throws Exception {
+
String adapterType = null;
-
+
if (nodeDescriptor != null) {
adapterType = nodeDescriptor.getAdapterType();
}
+ // must not create AutoAdapter via objectFactory, so treat explicit
+ // AutoAdapter as null and let it fall through to the default. (explicit
+ // AutoAdapter is often passed from the cdbimport pligin).
+ if (adapterType != null && adapterType.equals(AutoAdapter.class.getName())) {
+ adapterType = null;
+ }
+
if (adapterType != null) {
return objectFactory.newInstance(DbAdapter.class, adapterType);
- }
- else {
+ } else {
return new AutoAdapter(new Provider<DbAdapter>() {
public DbAdapter get() {
@@ -98,32 +101,28 @@ public class DefaultDbAdapterFactory imp
try {
return detectAdapter(c.getMetaData());
- }
- finally {
+ } finally {
try {
c.close();
- }
- catch (SQLException e) {
+ } catch (SQLException e) {
// ignore...
}
}
- }
- catch (SQLException e) {
- throw new CayenneRuntimeException("Error detecting database type: "
- + e.getLocalizedMessage(), e);
+ } catch (SQLException e) {
+ throw new CayenneRuntimeException("Error detecting database type: " + e.getLocalizedMessage(), e);
}
}
protected DbAdapter detectAdapter(DatabaseMetaData metaData) throws SQLException {
- // iterate in reverse order to allow custom factories to take precedence over the
+ // iterate in reverse order to allow custom factories to take precedence
+ // over the
// default ones configured in constructor
for (int i = detectors.size() - 1; i >= 0; i--) {
DbAdapterDetector detector = detectors.get(i);
DbAdapter adapter = detector.createAdapter(metaData);
if (adapter != null) {
- jdbcEventLogger.log("Detected and installed adapter: "
- + adapter.getClass().getName());
+ jdbcEventLogger.log("Detected and installed adapter: " + adapter.getClass().getName());
// TODO: should detector do this??
injector.injectMembers(adapter);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java?rev=1407926&r1=1407925&r2=1407926&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java Sun Nov 11 08:46:38 2012
@@ -83,9 +83,7 @@ public class DefaultDbAdapterFactoryTest
DefaultDbAdapterFactory factory = new DefaultDbAdapterFactory(detectors);
injector.injectMembers(factory);
- DbAdapter createdAdapter = factory.createAdapter(
- new DataNodeDescriptor(),
- dataSource);
+ DbAdapter createdAdapter = factory.createAdapter(new DataNodeDescriptor(), dataSource);
assertTrue(createdAdapter instanceof AutoAdapter);
assertEquals("XXXXX", createdAdapter.createTable(new DbEntity("Test")));
}
@@ -101,12 +99,11 @@ public class DefaultDbAdapterFactoryTest
binder.bindList(Constants.SERVER_DEFAULT_TYPES_LIST);
binder.bindList(Constants.SERVER_USER_TYPES_LIST);
binder.bindList(Constants.SERVER_TYPE_FACTORIES_LIST);
-
+
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
- binder.bind(BatchQueryBuilderFactory.class).toInstance(
- mock(BatchQueryBuilderFactory.class));
+ binder.bind(BatchQueryBuilderFactory.class).toInstance(mock(BatchQueryBuilderFactory.class));
}
};
@@ -115,15 +112,10 @@ public class DefaultDbAdapterFactoryTest
DefaultDbAdapterFactory factory = new DefaultDbAdapterFactory(detectors);
injector.injectMembers(factory);
- DbAdapter createdAdapter = factory.createAdapter(
- new DataNodeDescriptor(),
- new MockDataSource());
+ DbAdapter createdAdapter = factory.createAdapter(new DataNodeDescriptor(), new MockDataSource());
assertNotNull(createdAdapter);
- assertTrue(
- "Unexpected class: " + createdAdapter.getClass().getName(),
- createdAdapter instanceof AutoAdapter);
- assertEquals("CREATE TABLE Test ()", createdAdapter.createTable(new DbEntity(
- "Test")));
+ assertTrue("Unexpected class: " + createdAdapter.getClass().getName(), createdAdapter instanceof AutoAdapter);
+ assertEquals("CREATE TABLE Test ()", createdAdapter.createTable(new DbEntity("Test")));
}
public void testCreatedAdapter_Custom() throws Exception {
@@ -140,12 +132,11 @@ public class DefaultDbAdapterFactoryTest
binder.bindList(Constants.SERVER_DEFAULT_TYPES_LIST);
binder.bindList(Constants.SERVER_USER_TYPES_LIST);
binder.bindList(Constants.SERVER_TYPE_FACTORIES_LIST);
-
+
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
- binder.bind(BatchQueryBuilderFactory.class).toInstance(
- mock(BatchQueryBuilderFactory.class));
+ binder.bind(BatchQueryBuilderFactory.class).toInstance(mock(BatchQueryBuilderFactory.class));
}
};
@@ -154,12 +145,47 @@ public class DefaultDbAdapterFactoryTest
DefaultDbAdapterFactory factory = new DefaultDbAdapterFactory(detectors);
injector.injectMembers(factory);
- DbAdapter createdAdapter = factory.createAdapter(
- nodeDescriptor,
- new MockDataSource());
+ DbAdapter createdAdapter = factory.createAdapter(nodeDescriptor, new MockDataSource());
assertNotNull(createdAdapter);
- assertTrue(
- "Unexpected class: " + createdAdapter.getClass().getName(),
- createdAdapter instanceof SybaseAdapter);
+ assertTrue("Unexpected class: " + createdAdapter.getClass().getName(), createdAdapter instanceof SybaseAdapter);
+ }
+
+ public void testCreatedAdapter_AutoExplicit() throws Exception {
+
+ final DbAdapter adapter = mock(DbAdapter.class);
+ when(adapter.createTable(any(DbEntity.class))).thenReturn("XXXXX");
+
+ List<DbAdapterDetector> detectors = new ArrayList<DbAdapterDetector>();
+ detectors.add(new DbAdapterDetector() {
+
+ public DbAdapter createAdapter(DatabaseMetaData md) throws SQLException {
+ return adapter;
+ }
+ });
+
+ MockConnection connection = new MockConnection();
+
+ MockDataSource dataSource = new MockDataSource();
+ dataSource.setupConnection(connection);
+
+ Module testModule = new Module() {
+
+ public void configure(Binder binder) {
+ binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
+ }
+ };
+
+ Injector injector = DIBootstrap.createInjector(testModule);
+
+ DefaultDbAdapterFactory factory = new DefaultDbAdapterFactory(detectors);
+ injector.injectMembers(factory);
+
+ DataNodeDescriptor nodeDescriptor = new DataNodeDescriptor();
+ nodeDescriptor.setAdapterType(AutoAdapter.class.getName());
+
+ DbAdapter createdAdapter = factory.createAdapter(nodeDescriptor, dataSource);
+ assertTrue(createdAdapter instanceof AutoAdapter);
+ assertEquals("XXXXX", createdAdapter.createTable(new DbEntity("Test")));
}
}
Modified: cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/configuration/ToolsModuleTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/configuration/ToolsModuleTest.java?rev=1407926&r1=1407925&r2=1407926&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/configuration/ToolsModuleTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/configuration/ToolsModuleTest.java Sun Nov 11 08:46:38 2012
@@ -19,15 +19,20 @@
package org.apache.cayenne.tools.configuration;
import static org.mockito.Mockito.mock;
+
+import javax.sql.DataSource;
+
import junit.framework.TestCase;
+import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.server.DataSourceFactory;
+import org.apache.cayenne.configuration.server.DbAdapterFactory;
+import org.apache.cayenne.configuration.server.DefaultDbAdapterFactory;
+import org.apache.cayenne.dba.AutoAdapter;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
-import org.apache.cayenne.tools.configuration.DriverDataSourceFactory;
-import org.apache.cayenne.tools.configuration.ToolsModule;
import org.apache.commons.logging.Log;
public class ToolsModuleTest extends TestCase {
@@ -36,9 +41,22 @@ public class ToolsModuleTest extends Tes
Log log = mock(Log.class);
Injector i = DIBootstrap.createInjector(new ToolsModule(log));
-
+
assertSame(log, i.getInstance(Log.class));
assertTrue(i.getInstance(DataSourceFactory.class) instanceof DriverDataSourceFactory);
assertTrue(i.getInstance(AdhocObjectFactory.class) instanceof DefaultAdhocObjectFactory);
+ assertTrue(i.getInstance(DbAdapterFactory.class) instanceof DefaultDbAdapterFactory);
+ }
+
+ public void testDbApdater() throws Exception {
+ Log log = mock(Log.class);
+ Injector i = DIBootstrap.createInjector(new ToolsModule(log));
+
+ DbAdapterFactory factory = i.getInstance(DbAdapterFactory.class);
+
+ DataNodeDescriptor nodeDescriptor = mock(DataNodeDescriptor.class);
+ DataSource dataSource = mock(DataSource.class);
+
+ assertTrue(factory.createAdapter(nodeDescriptor, dataSource) instanceof AutoAdapter);
}
}