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 2013/11/24 17:05:54 UTC
svn commit: r1545007 [1/2] - in /cayenne/main/trunk:
cayenne-di/src/main/java/org/apache/cayenne/di/
cayenne-di/src/main/java/org/apache/cayenne/di/spi/
cayenne-project/src/test/java/org/apache/cayenne/project/
cayenne-project/src/test/java/org/apache/...
Author: aadamchik
Date: Sun Nov 24 16:05:53 2013
New Revision: 1545007
URL: http://svn.apache.org/r1545007
Log:
CAY-1882 Porting to OSGi environment
refactoring - new ClassLoaderManager service that can be easily switched between JEE and OSGi
Added:
cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/ClassLoaderManager.java
- copied, changed from r1544996, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java
cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultClassLoaderManager.java
- copied, changed from r1544996, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManager.java
- copied, changed from r1544996, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManagerTest.java
- copied, changed from r1544996, cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java
Removed:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/DefaultOsgiEnvironment.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java
Modified:
cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/AdhocObjectFactory.java
cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java
cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectLoaderTest.java
cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectSaverTest.java
cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiDataDomainProvider.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/ManyToManyCandidateEntityTest.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderTest.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/resource/ClassLoaderResourceLocatorTest.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
cayenne/main/trunk/cayenne-tools/src/main/java/org/apache/cayenne/tools/configuration/ToolsModule.java
Modified: cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/AdhocObjectFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/AdhocObjectFactory.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/AdhocObjectFactory.java (original)
+++ cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/AdhocObjectFactory.java Sun Nov 24 16:05:53 2013
@@ -39,13 +39,4 @@ public interface AdhocObjectFactory {
* @since 3.2
*/
Class<?> getJavaClass(String className);
-
- /**
- * Returns a ClassLoader appropriate for loading a given resource. Resource
- * path should be compatible with Class.getResource(..) and such, i.e. the
- * path component separator should be slash, not dot.
- *
- * @since 3.2
- */
- ClassLoader getClassLoader(String resourceName);
}
Copied: cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/ClassLoaderManager.java (from r1544996, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/ClassLoaderManager.java?p2=cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/ClassLoaderManager.java&p1=cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java&r1=1544996&r2=1545007&rev=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java (original)
+++ cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/ClassLoaderManager.java Sun Nov 24 16:05:53 2013
@@ -16,20 +16,21 @@
* specific language governing permissions and limitations
* under the License.
****************************************************************/
-package org.apache.cayenne.configuration.osgi;
+package org.apache.cayenne.di;
/**
- * Encapsulates OSGi-specific environment settings that can be used to configure
- * the rest of Cayenne.
+ * Maps ClassLoaders to resources. This is a useful abstraction when switching
+ * between environments. E.g. between JEE with thread/hierarchical classloaders
+ * and OSGi with per-bundle classloaders.
*
* @since 3.2
*/
-public interface OsgiEnvironment {
-
- ClassLoader resourceClassLoader(String resourceName);
-
- ClassLoader cayenneDiClassLoader();
-
- ClassLoader cayenneServerClassLoader();
+public interface ClassLoaderManager {
+ /**
+ * Returns a ClassLoader appropriate for loading a given resource. Resource
+ * path should be compatible with Class.getResource(..) and such, i.e. the
+ * path component separator should be slash, not dot.
+ */
+ ClassLoader getClassLoader(String resourceName);
}
Modified: cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java (original)
+++ cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java Sun Nov 24 16:05:53 2013
@@ -19,6 +19,7 @@
package org.apache.cayenne.di.spi;
import org.apache.cayenne.di.AdhocObjectFactory;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIRuntimeException;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Injector;
@@ -33,8 +34,16 @@ import org.apache.cayenne.di.Provider;
*/
public class DefaultAdhocObjectFactory implements AdhocObjectFactory {
- @Inject
protected Injector injector;
+ protected ClassLoaderManager classLoaderManager;
+
+ /**
+ * @since 3.2
+ */
+ public DefaultAdhocObjectFactory(@Inject Injector injector, @Inject ClassLoaderManager classLoaderManager) {
+ this.injector = injector;
+ this.classLoaderManager = classLoaderManager;
+ }
@SuppressWarnings("unchecked")
@Override
@@ -68,27 +77,6 @@ public class DefaultAdhocObjectFactory i
}
@Override
- public ClassLoader getClassLoader(String resourceName) {
-
- // here we are ignoring 'className' when looking for ClassLoader...
- // other implementations (such as OSGi) may actually use it
-
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-
- if (classLoader == null) {
- classLoader = DefaultAdhocObjectFactory.class.getClassLoader();
- }
-
- // this is too paranoid I guess... "this" class will always have a
- // ClassLoader
- if (classLoader == null) {
- throw new IllegalStateException("Can't find a ClassLoader");
- }
-
- return classLoader;
- }
-
- @Override
public Class<?> getJavaClass(String className) {
// is there a better way to get array class from string name?
@@ -97,7 +85,7 @@ public class DefaultAdhocObjectFactory i
throw new NullPointerException("Null class name");
}
- ClassLoader classLoader = getClassLoader(className.replace('.', '/'));
+ ClassLoader classLoader = classLoaderManager.getClassLoader(className.replace('.', '/'));
// use custom logic on failure only, assuming primitives and arrays are
// not that common
Copied: cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultClassLoaderManager.java (from r1544996, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultClassLoaderManager.java?p2=cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultClassLoaderManager.java&p1=cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java&r1=1544996&r2=1545007&rev=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiEnvironment.java (original)
+++ cayenne/main/trunk/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultClassLoaderManager.java Sun Nov 24 16:05:53 2013
@@ -16,20 +16,35 @@
* specific language governing permissions and limitations
* under the License.
****************************************************************/
-package org.apache.cayenne.configuration.osgi;
+package org.apache.cayenne.di.spi;
+
+import org.apache.cayenne.di.ClassLoaderManager;
/**
- * Encapsulates OSGi-specific environment settings that can be used to configure
- * the rest of Cayenne.
+ * A {@link ClassLoaderManager} that
*
* @since 3.2
*/
-public interface OsgiEnvironment {
+public class DefaultClassLoaderManager implements ClassLoaderManager {
+
+ @Override
+ public ClassLoader getClassLoader(String resourceName) {
+ // here we are ignoring 'className' when looking for ClassLoader...
+ // other implementations (such as OSGi) may actually use it
+
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- ClassLoader resourceClassLoader(String resourceName);
+ if (classLoader == null) {
+ classLoader = DefaultClassLoaderManager.class.getClassLoader();
+ }
- ClassLoader cayenneDiClassLoader();
+ // this is too paranoid I guess... "this" class will always have a
+ // ClassLoader
+ if (classLoader == null) {
+ throw new IllegalStateException("Can't find a ClassLoader");
+ }
- ClassLoader cayenneServerClassLoader();
+ return classLoader;
+ }
}
Modified: cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectLoaderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectLoaderTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectLoaderTest.java (original)
+++ cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectLoaderTest.java Sun Nov 24 16:05:53 2013
@@ -29,10 +29,14 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
import org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader;
import org.apache.cayenne.configuration.XMLDataMapLoader;
+import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
+import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.project.DataChannelProjectLoader;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.resource.Resource;
@@ -46,7 +50,11 @@ public class DataChannelProjectLoaderTes
Module testModule = new Module() {
+ @Override
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
+
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
binder.bind(DataChannelDescriptorLoader.class).to(
XMLDataChannelDescriptorLoader.class);
Modified: cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectSaverTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectSaverTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectSaverTest.java (original)
+++ cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/DataChannelProjectSaverTest.java Sun Nov 24 16:05:53 2013
@@ -29,10 +29,14 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
import org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader;
import org.apache.cayenne.configuration.XMLDataMapLoader;
+import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
+import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.project.DataChannelProjectLoader;
import org.apache.cayenne.project.FileProjectSaver;
import org.apache.cayenne.project.Project;
@@ -49,7 +53,11 @@ public class DataChannelProjectSaverTest
Module testModule = new Module() {
+ @Override
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
+
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
binder.bind(DataChannelDescriptorLoader.class).to(
XMLDataChannelDescriptorLoader.class);
@@ -99,7 +107,10 @@ public class DataChannelProjectSaverTest
Module testModule = new Module() {
+ @Override
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
binder.bind(DataChannelDescriptorLoader.class).to(
XMLDataChannelDescriptorLoader.class);
Modified: cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java (original)
+++ cayenne/main/trunk/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v7/ProjectUpgrader_V7Test.java Sun Nov 24 16:05:53 2013
@@ -34,18 +34,20 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.server.DBCPDataSourceFactory;
import org.apache.cayenne.configuration.server.JNDIDataSourceFactory;
import org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory;
+import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
+import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.project.FileProjectSaver;
-import org.apache.cayenne.project.Project;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.project.unit.Project2Case;
import org.apache.cayenne.project.upgrade.UpgradeHandler;
import org.apache.cayenne.project.upgrade.UpgradeMetaData;
import org.apache.cayenne.project.upgrade.UpgradeType;
-import org.apache.cayenne.project.upgrade.v6.ProjectUpgrader_V6;
import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.resource.URLResource;
import org.apache.cayenne.test.resource.ResourceUtil;
@@ -53,21 +55,19 @@ import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-public class ProjectUpgrader_V7Test extends Project2Case{
-
+public class ProjectUpgrader_V7Test extends Project2Case {
+
public void testMetadata_3_0_0_1() {
String baseUrl = getClass().getPackage().getName().replace('.', '/');
- URL url = getClass().getClassLoader().getResource(
- baseUrl + "/3_0_0_1a/cayenne.xml");
+ URL url = getClass().getClassLoader().getResource(baseUrl + "/3_0_0_1a/cayenne.xml");
assertNotNull(url);
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ConfigurationNameMapper.class).to(
- DefaultConfigurationNameMapper.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
}
};
@@ -85,7 +85,7 @@ public class ProjectUpgrader_V7Test exte
assertNotNull(md);
assertSame(UpgradeType.UPGRADE_NEEDED, md.getUpgradeType());
- //assertEquals("6", md.getIntermediateUpgradeVersion());
+ // assertEquals("6", md.getIntermediateUpgradeVersion());
assertNull(md.getIntermediateUpgradeVersion());
assertEquals("3.0.0.1", md.getProjectVersion());
assertEquals("7", md.getSupportedVersion());
@@ -100,8 +100,7 @@ public class ProjectUpgrader_V7Test exte
public void configure(Binder binder) {
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ConfigurationNameMapper.class).to(
- DefaultConfigurationNameMapper.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
}
};
@@ -125,16 +124,14 @@ public class ProjectUpgrader_V7Test exte
public void testMetadata_Type6() {
String baseUrl = getClass().getPackage().getName().replace('.', '/');
- URL url = getClass().getClassLoader().getResource(
- baseUrl + "/6a/cayenne-PROJECT1.xml");
+ URL url = getClass().getClassLoader().getResource(baseUrl + "/6a/cayenne-PROJECT1.xml");
assertNotNull(url);
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ConfigurationNameMapper.class).to(
- DefaultConfigurationNameMapper.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
}
};
@@ -155,19 +152,17 @@ public class ProjectUpgrader_V7Test exte
assertEquals("6", md.getProjectVersion());
assertEquals("7", md.getSupportedVersion());
}
-
+
public void testMetadata_Type7() {
String baseUrl = getClass().getPackage().getName().replace('.', '/');
- URL url = getClass().getClassLoader().getResource(
- baseUrl + "/7a/cayenne-PROJECT1.xml");
+ URL url = getClass().getClassLoader().getResource(baseUrl + "/7a/cayenne-PROJECT1.xml");
assertNotNull(url);
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ConfigurationNameMapper.class).to(
- DefaultConfigurationNameMapper.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
}
};
@@ -188,13 +183,12 @@ public class ProjectUpgrader_V7Test exte
assertEquals("7", md.getProjectVersion());
assertEquals("7", md.getSupportedVersion());
}
-
+
public void testPerformUpgradeFrom3() throws Exception {
System.out.println("TEST3");
File testFolder = setupTestDirectory("testPerformUpgrade_3_0_0_1");
- String sourceUrl = getClass().getPackage().getName().replace('.', '/')
- + "/3_0_0_1a/";
+ String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/3_0_0_1a/";
List<String> sources = new ArrayList<String>();
@@ -217,9 +211,10 @@ public class ProjectUpgrader_V7Test exte
Module testModule = new Module() {
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ConfigurationNameMapper.class).to(
- DefaultConfigurationNameMapper.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
}
};
@@ -236,28 +231,21 @@ public class ProjectUpgrader_V7Test exte
assertNotSame(source, upgrader);
// check that all the new files are created...
- String[] targetsAfterNames = new String[] {
- "cayenne-d1.xml", "cayenne-d2.xml", "d1Map1.map.xml", "d1Map2.map.xml"
- };
+ String[] targetsAfterNames = new String[] { "cayenne-d1.xml", "cayenne-d2.xml", "d1Map1.map.xml",
+ "d1Map2.map.xml" };
File[] targetsAfter = new File[targetsAfterNames.length];
for (int i = 0; i < targetsAfter.length; i++) {
targetsAfter[i] = new File(testFolder, targetsAfterNames[i]);
- assertTrue(
- "File was not created: " + targetsAfter[i].getAbsolutePath(),
- targetsAfter[i].exists());
+ assertTrue("File was not created: " + targetsAfter[i].getAbsolutePath(), targetsAfter[i].exists());
}
// DataMap files should remain the same; all others need to be deleted
for (File file : targetsBefore) {
if (file.getName().endsWith(".map.xml")) {
- assertTrue("DataMap file disappeared: " + file.getAbsolutePath(), file
- .exists());
- }
- else {
- assertFalse(
- "File expected to be deleted: " + file.getAbsolutePath(),
- file.exists());
+ assertTrue("DataMap file disappeared: " + file.getAbsolutePath(), file.exists());
+ } else {
+ assertFalse("File expected to be deleted: " + file.getAbsolutePath(), file.exists());
}
}
@@ -267,7 +255,7 @@ public class ProjectUpgrader_V7Test exte
assertPerformUpgrade_3_0_0_1_d1Map1(targetsAfter[2]);
assertPerformUpgrade_3_0_0_1_d1Map2(targetsAfter[3]);
}
-
+
private void assertPerformUpgrade_3_0_0_1_cayenne_d1(File file) throws Exception {
Document document = toDOMTree(file);
@@ -275,10 +263,7 @@ public class ProjectUpgrader_V7Test exte
assertEquals("", xpath.evaluate("/domain/@name", document));
assertEquals("7", xpath.evaluate("/domain/@project-version", document));
- NodeList maps = (NodeList) xpath.evaluate(
- "/domain/map",
- document,
- XPathConstants.NODESET);
+ NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET);
assertNotNull(maps);
assertEquals(2, maps.getLength());
@@ -288,34 +273,23 @@ public class ProjectUpgrader_V7Test exte
assertEquals("d1Map1", xpath.evaluate("@name", map1));
assertEquals("d1Map2", xpath.evaluate("@name", map2));
- NodeList nodes = (NodeList) xpath.evaluate(
- "/domain/node",
- document,
- XPathConstants.NODESET);
+ NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET);
assertNotNull(nodes);
assertEquals(1, nodes.getLength());
Node node1 = nodes.item(0);
assertEquals("d1NodeDriver", xpath.evaluate("@name", node1));
- assertEquals(XMLPoolingDataSourceFactory.class.getName(), xpath.evaluate(
- "@factory",
- node1));
-
- NodeList mapRefs = (NodeList) xpath.evaluate(
- "map-ref",
- node1,
- XPathConstants.NODESET);
+ assertEquals(XMLPoolingDataSourceFactory.class.getName(), xpath.evaluate("@factory", node1));
+
+ NodeList mapRefs = (NodeList) xpath.evaluate("map-ref", node1, XPathConstants.NODESET);
assertNotNull(mapRefs);
assertEquals(2, mapRefs.getLength());
assertEquals("d1Map1", xpath.evaluate("@name", mapRefs.item(0)));
assertEquals("d1Map2", xpath.evaluate("@name", mapRefs.item(1)));
- NodeList dataSources = (NodeList) xpath.evaluate(
- "data-source",
- node1,
- XPathConstants.NODESET);
+ NodeList dataSources = (NodeList) xpath.evaluate("data-source", node1, XPathConstants.NODESET);
assertNotNull(dataSources);
assertEquals(1, dataSources.getLength());
@@ -331,17 +305,11 @@ public class ProjectUpgrader_V7Test exte
assertEquals("", xpath.evaluate("/domain/@name", document));
assertEquals("7", xpath.evaluate("/domain/@project-version", document));
- NodeList maps = (NodeList) xpath.evaluate(
- "/domain/map",
- document,
- XPathConstants.NODESET);
+ NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET);
assertNotNull(maps);
assertEquals(0, maps.getLength());
- NodeList nodes = (NodeList) xpath.evaluate(
- "/domain/node",
- document,
- XPathConstants.NODESET);
+ NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET);
assertNotNull(nodes);
assertEquals(2, nodes.getLength());
@@ -350,27 +318,17 @@ public class ProjectUpgrader_V7Test exte
assertEquals("d2NodeDBCP", xpath.evaluate("@name", node1));
assertEquals("dbcpx", xpath.evaluate("@parameters", node1));
- assertEquals(DBCPDataSourceFactory.class.getName(), xpath.evaluate(
- "@factory",
- node1));
-
- NodeList dataSources1 = (NodeList) xpath.evaluate(
- "data-source",
- node1,
- XPathConstants.NODESET);
+ assertEquals(DBCPDataSourceFactory.class.getName(), xpath.evaluate("@factory", node1));
+
+ NodeList dataSources1 = (NodeList) xpath.evaluate("data-source", node1, XPathConstants.NODESET);
assertNotNull(dataSources1);
assertEquals(0, dataSources1.getLength());
assertEquals("d2NodeJNDI", xpath.evaluate("@name", node2));
assertEquals("jndi/x", xpath.evaluate("@parameters", node2));
- assertEquals(JNDIDataSourceFactory.class.getName(), xpath.evaluate(
- "@factory",
- node2));
-
- NodeList dataSources2 = (NodeList) xpath.evaluate(
- "data-source",
- node2,
- XPathConstants.NODESET);
+ assertEquals(JNDIDataSourceFactory.class.getName(), xpath.evaluate("@factory", node2));
+
+ NodeList dataSources2 = (NodeList) xpath.evaluate("data-source", node2, XPathConstants.NODESET);
assertNotNull(dataSources2);
assertEquals(0, dataSources2.getLength());
}
@@ -381,7 +339,7 @@ public class ProjectUpgrader_V7Test exte
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("7", xpath.evaluate("/data-map/@project-version", document));
}
-
+
private void assertPerformUpgrade_3_0_0_1_d1Map2(File file) throws Exception {
Document document = toDOMTree(file);
@@ -391,74 +349,72 @@ public class ProjectUpgrader_V7Test exte
public void testPerformUpgradeFrom6() throws Exception {
File testForlder = setupTestDirectory("testUpgrade6a");
- String sourceUrl = getClass().getPackage().getName().replace('.', '/')
- + "/6a/";
+ String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/6a/";
System.out.println(sourceUrl);
Module testModule = new Module() {
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
+
binder.bind(ProjectSaver.class).to(FileProjectSaver.class);
- binder.bind(ConfigurationNameMapper.class).to(
- DefaultConfigurationNameMapper.class);
+ binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
}
};
-
- String[] resources = {"cayenne-PROJECT1.xml","testProjectMap1_1.map.xml", "testProjectMap1_2.map.xml"};
+
+ String[] resources = { "cayenne-PROJECT1.xml", "testProjectMap1_1.map.xml", "testProjectMap1_2.map.xml" };
List<File> files = new ArrayList<File>();
-
+
for (String name : resources) {
- URL xmlUrl = getClass().getClassLoader().getResource(sourceUrl+name);
+ URL xmlUrl = getClass().getClassLoader().getResource(sourceUrl + name);
File target = new File(testForlder, name);
ResourceUtil.copyResourceToFile(xmlUrl, target);
files.add(target);
}
-
-
+
Injector injector = DIBootstrap.createInjector(testModule);
ProjectUpgrader_V7 upgrader = new ProjectUpgrader_V7();
injector.injectMembers(upgrader);
-
+
Resource source = new URLResource(files.get(0).toURL());
assertNotNull(source);
UpgradeHandler handler = upgrader.getUpgradeHandler(source);
assertNotNull(handler);
-
+
Resource upgraded = handler.performUpgrade();
assertNotNull(upgraded);
assertNotSame(source, upgraded);
-
+
assertPerformUpgrade6Cayenne(files.get(0));
assertPerformUpgrade6Map1(files.get(1));
assertPerformUpgradeMap2(files.get(2));
}
-
+
private void assertPerformUpgrade6Map1(File file) throws Exception {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("7", xpath.evaluate("/data-map/@project-version", document));
-
- NodeList maps = (NodeList) xpath.evaluate(
- "/data-map/obj-entity/entity-listener",
- document,
+
+ NodeList maps = (NodeList) xpath.evaluate("/data-map/obj-entity/entity-listener", document,
XPathConstants.NODESET);
assertNotNull(maps);
assertEquals(0, maps.getLength());
}
-
+
private void assertPerformUpgrade6Cayenne(File file) throws Exception {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("7", xpath.evaluate("/domain/@project-version", document));
}
-
+
private void assertPerformUpgradeMap2(File file) throws Exception {
Document document = toDOMTree(file);
XPath xpath = XPathFactory.newInstance().newXPath();
assertEquals("7", xpath.evaluate("/data-map/@project-version", document));
}
-
+
}
Copied: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManager.java (from r1544996, cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManager.java?p2=cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManager.java&p1=cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java&r1=1544996&r2=1545007&rev=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManager.java Sun Nov 24 16:05:53 2013
@@ -18,30 +18,33 @@
****************************************************************/
package org.apache.cayenne.configuration.osgi;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import java.util.Map;
+
+import org.apache.cayenne.di.ClassLoaderManager;
+import org.apache.cayenne.di.Injector;
/**
- * An OSGi-friendly {@link AdhocObjectFactory} that tries to detect the right
- * ClassLoader for any given resource based on the package name.
- *
* @since 3.2
*/
-class SplitClassLoaderAdhocObjectFactory extends DefaultAdhocObjectFactory {
+public class OsgiClassLoaderManager implements ClassLoaderManager {
private static final String CAYENNE_PACKAGE = "org/apache/cayenne";
private static final String CAYENNE_DI_PACKAGE_SUFFIX = "/di";
- private OsgiEnvironment osgiEnvironment;
-
- SplitClassLoaderAdhocObjectFactory(@Inject OsgiEnvironment osgiEnvironment) {
- this.osgiEnvironment = osgiEnvironment;
+ private ClassLoader applicationClassLoader;
+ private ClassLoader cayenneServerClassLoader;
+ private ClassLoader cayenneDiClassLoader;
+ private Map<String, ClassLoader> perResourceClassLoaders;
+
+ public OsgiClassLoaderManager(ClassLoader applicationClassLoader, Map<String, ClassLoader> perResourceClassLoaders) {
+ this.applicationClassLoader = applicationClassLoader;
+ this.cayenneDiClassLoader = Injector.class.getClassLoader();
+ this.cayenneServerClassLoader = OsgiClassLoaderManager.class.getClassLoader();
+ this.perResourceClassLoaders = perResourceClassLoaders;
}
@Override
public ClassLoader getClassLoader(String resourceName) {
-
if (resourceName == null || resourceName.length() < 2) {
return resourceClassLoader(resourceName);
}
@@ -57,15 +60,15 @@ class SplitClassLoaderAdhocObjectFactory
}
protected ClassLoader resourceClassLoader(String resourceName) {
- return osgiEnvironment.resourceClassLoader(resourceName);
+ ClassLoader cl = perResourceClassLoaders.get(resourceName);
+ return cl != null ? cl : applicationClassLoader;
}
protected ClassLoader cayenneDiClassLoader() {
- return osgiEnvironment.cayenneDiClassLoader();
+ return cayenneDiClassLoader;
}
protected ClassLoader cayenneServerClassLoader() {
- return osgiEnvironment.cayenneServerClassLoader();
+ return cayenneServerClassLoader;
}
-
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiDataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiDataDomainProvider.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiDataDomainProvider.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiDataDomainProvider.java Sun Nov 24 16:05:53 2013
@@ -21,6 +21,7 @@ package org.apache.cayenne.configuration
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.configuration.server.DataDomainProvider;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.ObjEntity;
@@ -32,10 +33,10 @@ import org.apache.cayenne.map.ObjEntity;
// at the EntityResolver level per CAY-1887
public class OsgiDataDomainProvider extends DataDomainProvider {
- private OsgiEnvironment osgiEnvironment;
+ private ClassLoaderManager classLoaderManager;
- public OsgiDataDomainProvider(@Inject OsgiEnvironment osgiEnvironment) {
- this.osgiEnvironment = osgiEnvironment;
+ public OsgiDataDomainProvider(@Inject ClassLoaderManager classLoaderManager) {
+ this.classLoaderManager = classLoaderManager;
}
@Override
@@ -48,9 +49,9 @@ public class OsgiDataDomainProvider exte
ClassLoader activeCl = thread.getContextClassLoader();
try {
- // using fake package name... may not work with all implementations
- // of osgiEnvironment?
- thread.setContextClassLoader(osgiEnvironment.resourceClassLoader("com/"));
+ // using fake package name... as long as it is not
+ // org.apache.cayenne, this do the right trick
+ thread.setContextClassLoader(classLoaderManager.getClassLoader("com/"));
DataDomain domain = super.get();
EntityResolver entityResolver = domain.getEntityResolver();
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java Sun Nov 24 16:05:53 2013
@@ -22,8 +22,8 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.cayenne.access.DataDomain;
-import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.Module;
/**
@@ -50,13 +50,11 @@ public class OsgiModule implements Modul
@Override
public void configure(Binder binder) {
- binder.bind(OsgiEnvironment.class).toInstance(createOsgiEnvironment());
-
- binder.bind(AdhocObjectFactory.class).to(SplitClassLoaderAdhocObjectFactory.class);
+ binder.bind(ClassLoaderManager.class).toInstance(createClassLoaderManager());
binder.bind(DataDomain.class).toProvider(OsgiDataDomainProvider.class);
}
- private OsgiEnvironment createOsgiEnvironment() {
- return new DefaultOsgiEnvironment(typeFromProjectBundle.getClassLoader(), perTypeClassLoaders);
+ private ClassLoaderManager createClassLoaderManager() {
+ return new OsgiClassLoaderManager(typeFromProjectBundle.getClassLoader(), perTypeClassLoaders);
}
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java Sun Nov 24 16:05:53 2013
@@ -80,10 +80,11 @@ import org.apache.cayenne.dba.sqlserver.
import org.apache.cayenne.dba.sybase.SybaseSniffer;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.Key;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.ListBuilder;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.event.DefaultEventManager;
import org.apache.cayenne.event.EventManager;
import org.apache.cayenne.log.CommonsJdbcEventLogger;
@@ -128,7 +129,8 @@ public class ServerModule implements Mod
binder.bindMap(Constants.PROPERTIES_MAP)
.put(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY, String.valueOf(DEFAULT_MAX_ID_QUALIFIER_SIZE));
- binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
// configure known DbAdapter detectors in reverse order of popularity. Users can
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/resource/ClassLoaderResourceLocator.java Sun Nov 24 16:05:53 2013
@@ -25,7 +25,7 @@ import java.util.Collection;
import java.util.Enumeration;
import org.apache.cayenne.ConfigurationException;
-import org.apache.cayenne.di.AdhocObjectFactory;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.Inject;
/**
@@ -35,11 +35,11 @@ import org.apache.cayenne.di.Inject;
* @since 3.1
*/
public class ClassLoaderResourceLocator implements ResourceLocator {
-
- private AdhocObjectFactory objectFactory;
-
- public ClassLoaderResourceLocator(@Inject AdhocObjectFactory objectFactory) {
- this.objectFactory = objectFactory;
+
+ private ClassLoaderManager classLoaderManager;
+
+ public ClassLoaderResourceLocator(@Inject ClassLoaderManager classLoaderManager) {
+ this.classLoaderManager = classLoaderManager;
}
@Override
@@ -49,7 +49,7 @@ public class ClassLoaderResourceLocator
Enumeration<URL> urls;
try {
- urls = objectFactory.getClassLoader(name).getResources(name);
+ urls = classLoaderManager.getClassLoader(name).getResources(name);
} catch (IOException e) {
throw new ConfigurationException("Error getting resources for ");
}
@@ -67,7 +67,8 @@ public class ClassLoaderResourceLocator
}
/**
- * @deprecated since 3.2 unused, as AdhocObjectFactory.getClassLoader() is used instead.
+ * @deprecated since 3.2 unused, as AdhocObjectFactory.getClassLoader() is
+ * used instead.
*/
@Deprecated
protected ClassLoader getClassLoader() {
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java Sun Nov 24 16:05:53 2013
@@ -51,7 +51,9 @@ import javax.xml.parsers.SAXParserFactor
import org.apache.cayenne.Cayenne;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
+import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.reflect.ArcProperty;
import org.apache.cayenne.reflect.AttributeProperty;
import org.apache.cayenne.reflect.PropertyVisitor;
@@ -65,15 +67,16 @@ import org.xml.sax.XMLReader;
*/
public class Util {
+ @Deprecated
private static DefaultAdhocObjectFactory objectFactory;
static {
- objectFactory = new DefaultAdhocObjectFactory();
+ objectFactory = new DefaultAdhocObjectFactory(null, new DefaultClassLoaderManager());
}
/**
- * Converts URL to file. Throws {@link IllegalArgumentException} if the URL is not a
- * "file://" URL.
+ * Converts URL to file. Throws {@link IllegalArgumentException} if the URL
+ * is not a "file://" URL.
*/
public static File toFile(URL url) throws IllegalArgumentException {
// must convert spaces to %20, or URL->URI conversion may fail
@@ -82,25 +85,23 @@ public class Util {
URI uri;
try {
uri = new URI(urlString.replace(" ", "%20"));
- }
- catch (URISyntaxException e) {
- throw new IllegalArgumentException("URL "
- + urlString
- + " can't be converted to URI", e);
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException("URL " + urlString + " can't be converted to URI", e);
}
return new File(uri);
}
/**
- * Reads file contents, returning it as a String, using System default line separator.
+ * Reads file contents, returning it as a String, using System default line
+ * separator.
*/
public static String stringFromFile(File file) throws IOException {
return stringFromFile(file, System.getProperty("line.separator"));
}
/**
- * Reads file contents, returning it as a String, joining lines with provided
- * separator.
+ * Reads file contents, returning it as a String, joining lines with
+ * provided separator.
*/
public static String stringFromFile(File file, String joinWith) throws IOException {
StringBuilder buf = new StringBuilder();
@@ -111,17 +112,19 @@ public class Util {
while ((line = in.readLine()) != null) {
buf.append(line).append(joinWith);
}
- }
- finally {
+ } finally {
in.close();
}
return buf.toString();
}
/**
- * @param strings The list of strings to join.
- * @param separator The separator between the strings.
- * @return A single string of all the input strings separated by the separator.
+ * @param strings
+ * The list of strings to join.
+ * @param separator
+ * The separator between the strings.
+ * @return A single string of all the input strings separated by the
+ * separator.
*/
public static String join(List<String> strings, String separator) {
if (strings == null || strings.size() == 0)
@@ -142,17 +145,17 @@ public class Util {
}
/**
- * Replaces all backslashes "\" with forward slashes "/". Convenience method to
- * convert path Strings to URI format.
+ * Replaces all backslashes "\" with forward slashes "/". Convenience method
+ * to convert path Strings to URI format.
*/
public static String substBackslashes(String string) {
return RegexUtil.substBackslashes(string);
}
/**
- * Looks up and returns the root cause of an exception. If none is found, returns
- * supplied Throwable object unchanged. If root is found, recursively "unwraps" it,
- * and returns the result to the user.
+ * Looks up and returns the root cause of an exception. If none is found,
+ * returns supplied Throwable object unchanged. If root is found,
+ * recursively "unwraps" it, and returns the result to the user.
*/
public static Throwable unwindException(Throwable th) {
if (th instanceof SAXException) {
@@ -160,14 +163,12 @@ public class Util {
if (sax.getException() != null) {
return unwindException(sax.getException());
}
- }
- else if (th instanceof SQLException) {
+ } else if (th instanceof SQLException) {
SQLException sql = (SQLException) th;
if (sql.getNextException() != null) {
return unwindException(sql.getNextException());
}
- }
- else if (th.getCause() != null) {
+ } else if (th.getCause() != null) {
return unwindException(th.getCause());
}
@@ -175,8 +176,9 @@ public class Util {
}
/**
- * Compares two objects similar to "Object.equals(Object)". Unlike Object.equals(..),
- * this method doesn't throw an exception if any of the two objects is null.
+ * Compares two objects similar to "Object.equals(Object)". Unlike
+ * Object.equals(..), this method doesn't throw an exception if any of the
+ * two objects is null.
*/
public static boolean nullSafeEquals(Object o1, Object o2) {
@@ -192,30 +194,26 @@ public class Util {
EqualsBuilder builder = new EqualsBuilder();
builder.append(o1, o2);
return builder.isEquals();
- }
- else { // It is NOT an array, so use regular equals()
+ } else { // It is NOT an array, so use regular equals()
return o1.equals(o2);
}
}
/**
* Compares two objects similar to "Comparable.compareTo(Object)". Unlike
- * Comparable.compareTo(..), this method doesn't throw an exception if any of the two
- * objects is null.
- *
+ * Comparable.compareTo(..), this method doesn't throw an exception if any
+ * of the two objects is null.
+ *
* @since 1.1
*/
public static <T> int nullSafeCompare(boolean nullsFirst, Comparable<T> o1, T o2) {
if (o1 == null && o2 == null) {
return 0;
- }
- else if (o1 == null) {
+ } else if (o1 == null) {
return nullsFirst ? -1 : 1;
- }
- else if (o2 == null) {
+ } else if (o2 == null) {
return nullsFirst ? 1 : -1;
- }
- else {
+ } else {
return o1.compareTo(o2);
}
}
@@ -230,8 +228,7 @@ public class Util {
/**
* Creates Serializable object copy using serialization/deserialization.
*/
- public static <T extends Serializable> T cloneViaSerialization(T object)
- throws Exception {
+ public static <T extends Serializable> T cloneViaSerialization(T object) throws Exception {
ByteArrayOutputStream bytes = new ByteArrayOutputStream() {
@Override
@@ -244,23 +241,22 @@ public class Util {
out.writeObject(object);
out.close();
- ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes
- .toByteArray()));
+ ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray()));
T copy = (T) in.readObject();
- // no need to close the stream - we created it and now will be throwing away...
+ // no need to close the stream - we created it and now will be throwing
+ // away...
// in.close();
return copy;
}
/**
- * Creates an XMLReader with default feature set. Note that all Cayenne internal XML
- * parsers should probably use XMLReader obtained via this method for consistency
- * sake, and can customize feature sets as needed.
+ * Creates an XMLReader with default feature set. Note that all Cayenne
+ * internal XML parsers should probably use XMLReader obtained via this
+ * method for consistency sake, and can customize feature sets as needed.
*/
- public static XMLReader createXmlReader() throws SAXException,
- ParserConfigurationException {
+ public static XMLReader createXmlReader() throws SAXException, ParserConfigurationException {
SAXParserFactory spf = SAXParserFactory.newInstance();
// Create a JAXP SAXParser
@@ -276,10 +272,10 @@ public class Util {
}
/**
- * Returns package name for the Java class as a path separated with forward slash
- * ("/"). Method is used to lookup resources that are located in package
- * subdirectories. For example, a String "a/b/c" will be returned for class name
- * "a.b.c.ClassName".
+ * Returns package name for the Java class as a path separated with forward
+ * slash ("/"). Method is used to lookup resources that are located in
+ * package subdirectories. For example, a String "a/b/c" will be returned
+ * for class name "a.b.c.ClassName".
*/
public static String getPackagePath(String className) {
return RegexUtil.getPackagePath(className);
@@ -287,7 +283,7 @@ public class Util {
/**
* Returns an unqualified class name for the fully qualified name.
- *
+ *
* @since 3.0
*/
public static String stripPackageName(String className) {
@@ -304,7 +300,7 @@ public class Util {
/**
* Creates a mutable map out of two arrays with keys and values.
- *
+ *
* @since 1.2
*/
public static <K, V> Map<K, V> toMap(K[] keys, V[] values) {
@@ -317,8 +313,7 @@ public class Util {
}
if (keysSize != valuesSize) {
- throw new IllegalArgumentException(
- "The number of keys doesn't match the number of values.");
+ throw new IllegalArgumentException("The number of keys doesn't match the number of values.");
}
Map<K, V> map = new HashMap<K, V>();
@@ -330,15 +325,15 @@ public class Util {
}
/**
- * Extracts extension from the file name. Dot is not included in the returned string.
+ * Extracts extension from the file name. Dot is not included in the
+ * returned string.
*/
public static String extractFileExtension(String fileName) {
int dotInd = fileName.lastIndexOf('.');
// if dot is in the first position,
// we are dealing with a hidden file rather than an extension
- return (dotInd > 0 && dotInd < fileName.length()) ? fileName
- .substring(dotInd + 1) : null;
+ return (dotInd > 0 && dotInd < fileName.length()) ? fileName.substring(dotInd + 1) : null;
}
/**
@@ -353,9 +348,9 @@ public class Util {
}
/**
- * Strips "\n", "\r\n", "\r" from the argument string, replacing them with a provided
- * character.
- *
+ * Strips "\n", "\r\n", "\r" from the argument string, replacing them with a
+ * provided character.
+ *
* @since 3.1
*/
public static String stripLineBreaks(String string, char replaceWith) {
@@ -383,8 +378,7 @@ public class Util {
}
buffer[j] = replaceWith;
- }
- else {
+ } else {
buffer[j] = c;
}
}
@@ -393,8 +387,9 @@ public class Util {
}
/**
- * Encodes a string so that it can be used as an attribute value in an XML document.
- * Will do conversion of the greater/less signs, quotes and ampersands.
+ * Encodes a string so that it can be used as an attribute value in an XML
+ * document. Will do conversion of the greater/less signs, quotes and
+ * ampersands.
*/
public static String encodeXmlAttribute(String string) {
if (string == null) {
@@ -428,18 +423,18 @@ public class Util {
/**
* Trims long strings substituting middle part with "...".
- *
- * @param str String to trim.
- * @param maxLength maximum allowable length. Must be at least 5, or an
+ *
+ * @param str
+ * String to trim.
+ * @param maxLength
+ * maximum allowable length. Must be at least 5, or an
* IllegalArgumentException is thrown.
* @return String
*/
public static String prettyTrim(String str, int maxLength) {
if (maxLength < 5) {
- throw new IllegalArgumentException(
- "Algorithm for 'prettyTrim' works only with length >= 5. "
- + "Supplied length is "
- + maxLength);
+ throw new IllegalArgumentException("Algorithm for 'prettyTrim' works only with length >= 5. "
+ + "Supplied length is " + maxLength);
}
if (str == null || str.length() <= maxLength) {
@@ -455,9 +450,9 @@ public class Util {
}
/**
- * Returns a sorted iterator from an unsorted one. Use this method as a last resort,
- * since it is much less efficient then just sorting a collection that backs the
- * original iterator.
+ * Returns a sorted iterator from an unsorted one. Use this method as a last
+ * resort, since it is much less efficient then just sorting a collection
+ * that backs the original iterator.
*/
public static <T> Iterator<T> sortedIterator(Iterator<T> it, Comparator<T> comparator) {
List<T> list = new ArrayList<T>();
@@ -491,14 +486,13 @@ public class Util {
}
/**
- * Returns true if a Member is accessible via reflection under normal Java access
- * controls.
- *
+ * Returns true if a Member is accessible via reflection under normal Java
+ * access controls.
+ *
* @since 1.2
*/
public static boolean isAccessible(Member member) {
- return Modifier.isPublic(member.getModifiers())
- && Modifier.isPublic(member.getDeclaringClass().getModifiers());
+ return Modifier.isPublic(member.getModifiers()) && Modifier.isPublic(member.getDeclaringClass().getModifiers());
}
/**
@@ -516,14 +510,9 @@ public class Util {
return objectFactory.getJavaClass(className);
}
- static void setReverse(
- final Persistent sourceObject,
- String propertyName,
- final Persistent targetObject) {
-
- ArcProperty property = (ArcProperty) Cayenne
- .getClassDescriptor(sourceObject)
- .getProperty(propertyName);
+ static void setReverse(final Persistent sourceObject, String propertyName, final Persistent targetObject) {
+
+ ArcProperty property = (ArcProperty) Cayenne.getClassDescriptor(sourceObject).getProperty(propertyName);
ArcProperty reverseArc = property.getComplimentaryReverseArc();
if (reverseArc != null) {
reverseArc.visit(new PropertyVisitor() {
@@ -544,23 +533,16 @@ public class Util {
});
- sourceObject.getObjectContext().getGraphManager().arcCreated(
- targetObject.getObjectId(),
- sourceObject.getObjectId(),
- reverseArc.getName());
+ sourceObject.getObjectContext().getGraphManager()
+ .arcCreated(targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName());
markAsDirty(targetObject);
}
}
- static void unsetReverse(
- final Persistent sourceObject,
- String propertyName,
- final Persistent targetObject) {
-
- ArcProperty property = (ArcProperty) Cayenne
- .getClassDescriptor(sourceObject)
- .getProperty(propertyName);
+ static void unsetReverse(final Persistent sourceObject, String propertyName, final Persistent targetObject) {
+
+ ArcProperty property = (ArcProperty) Cayenne.getClassDescriptor(sourceObject).getProperty(propertyName);
ArcProperty reverseArc = property.getComplimentaryReverseArc();
if (reverseArc != null) {
reverseArc.visit(new PropertyVisitor() {
@@ -581,18 +563,16 @@ public class Util {
});
- sourceObject.getObjectContext().getGraphManager().arcDeleted(
- targetObject.getObjectId(),
- sourceObject.getObjectId(),
- reverseArc.getName());
+ sourceObject.getObjectContext().getGraphManager()
+ .arcDeleted(targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName());
markAsDirty(targetObject);
}
}
/**
- * Changes object state to MODIFIED if needed, returning true if the change has
- * occurred, false if not.
+ * Changes object state to MODIFIED if needed, returning true if the change
+ * has occurred, false if not.
*/
static boolean markAsDirty(Persistent object) {
if (object.getPersistenceState() == PersistenceState.COMMITTED) {
Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/ManyToManyCandidateEntityTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/ManyToManyCandidateEntityTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/ManyToManyCandidateEntityTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/ManyToManyCandidateEntityTest.java Sun Nov 24 16:05:53 2013
@@ -29,10 +29,12 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.XMLDataMapLoader;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.Relationship;
@@ -50,6 +52,7 @@ public class ManyToManyCandidateEntityTe
Module testModule = new Module() {
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/XMLDataChannelDescriptorLoaderTest.java Sun Nov 24 16:05:53 2013
@@ -27,10 +27,12 @@ import junit.framework.TestCase;
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.resource.URLResource;
@@ -43,6 +45,7 @@ public class XMLDataChannelDescriptorLoa
Module testModule = new Module() {
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
Copied: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManagerTest.java (from r1544996, cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManagerTest.java?p2=cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManagerTest.java&p1=cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java&r1=1544996&r2=1545007&rev=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/OsgiClassLoaderManagerTest.java Sun Nov 24 16:05:53 2013
@@ -18,12 +18,13 @@
****************************************************************/
package org.apache.cayenne.configuration.osgi;
-import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+
import junit.framework.TestCase;
-public class SplitClassLoaderAdhocObjectFactoryTest extends TestCase {
+public class OsgiClassLoaderManagerTest extends TestCase {
public void testGetClassLoader() {
@@ -31,20 +32,25 @@ public class SplitClassLoaderAdhocObject
final ClassLoader diCl = mock(ClassLoader.class);
final ClassLoader serverCl = mock(ClassLoader.class);
- OsgiEnvironment osgiEnvironment = mock(OsgiEnvironment.class);
- when(osgiEnvironment.resourceClassLoader(anyString())).thenReturn(appCl);
- when(osgiEnvironment.cayenneDiClassLoader()).thenReturn(diCl);
- when(osgiEnvironment.cayenneServerClassLoader()).thenReturn(serverCl);
-
- SplitClassLoaderAdhocObjectFactory factory = new SplitClassLoaderAdhocObjectFactory(osgiEnvironment);
-
- assertSame(appCl, factory.getClassLoader(null));
- assertSame(appCl, factory.getClassLoader(""));
- assertSame(appCl, factory.getClassLoader("org/example/test"));
- assertSame(appCl, factory.getClassLoader("/org/example/test"));
- assertSame(serverCl, factory.getClassLoader("/org/apache/cayenne/access/DataContext.class"));
- assertSame(diCl, factory.getClassLoader("/org/apache/cayenne/di/Injector.class"));
- assertSame(diCl, factory.getClassLoader("org/apache/cayenne/di/Injector.class"));
+ OsgiClassLoaderManager manager = new OsgiClassLoaderManager(appCl, Collections.<String, ClassLoader> emptyMap()) {
+ @Override
+ protected ClassLoader cayenneDiClassLoader() {
+ return diCl;
+ }
+
+ @Override
+ protected ClassLoader cayenneServerClassLoader() {
+ return serverCl;
+ }
+ };
+
+ assertSame(appCl, manager.getClassLoader(null));
+ assertSame(appCl, manager.getClassLoader(""));
+ assertSame(appCl, manager.getClassLoader("org/example/test"));
+ assertSame(appCl, manager.getClassLoader("/org/example/test"));
+ assertSame(serverCl, manager.getClassLoader("/org/apache/cayenne/access/DataContext.class"));
+ assertSame(diCl, manager.getClassLoader("/org/apache/cayenne/di/Injector.class"));
+ assertSame(diCl, manager.getClassLoader("org/apache/cayenne/di/Injector.class"));
}
Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java Sun Nov 24 16:05:53 2013
@@ -50,6 +50,7 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.configuration.mock.MockDataSourceFactory;
import org.apache.cayenne.dba.db2.DB2Sniffer;
import org.apache.cayenne.dba.derby.DerbySniffer;
+import org.apache.cayenne.dba.firebird.FirebirdSniffer;
import org.apache.cayenne.dba.frontbase.FrontBaseSniffer;
import org.apache.cayenne.dba.h2.H2Sniffer;
import org.apache.cayenne.dba.hsqldb.HSQLDBSniffer;
@@ -64,10 +65,12 @@ import org.apache.cayenne.dba.sqlserver.
import org.apache.cayenne.dba.sybase.SybaseSniffer;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.event.EventManager;
import org.apache.cayenne.event.MockEventManager;
import org.apache.cayenne.log.CommonsJdbcEventLogger;
@@ -108,10 +111,9 @@ public class DataDomainProviderTest exte
nodeDescriptor2.setParameters("testDataNode2.driver.xml");
testDescriptor.getNodeDescriptors().add(nodeDescriptor2);
-
-
final DataChannelDescriptorLoader testLoader = new DataChannelDescriptorLoader() {
+ @Override
public ConfigurationTree<DataChannelDescriptor> load(Resource configurationResource)
throws ConfigurationException {
return new ConfigurationTree<DataChannelDescriptor>(testDescriptor, null);
@@ -122,19 +124,34 @@ public class DataDomainProviderTest exte
Module testModule = new Module() {
+ @Override
public void configure(Binder binder) {
- final AdhocObjectFactory objectFactory = new DefaultAdhocObjectFactory();
- binder.bind(AdhocObjectFactory.class).toInstance(objectFactory);
+ final ClassLoaderManager classLoaderManager = new DefaultClassLoaderManager();
+ binder.bind(ClassLoaderManager.class).toInstance(classLoaderManager);
+ binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bindMap(Constants.PROPERTIES_MAP);
- binder.bindList(Constants.SERVER_ADAPTER_DETECTORS_LIST).add(new OpenBaseSniffer(objectFactory))
- .add(new FrontBaseSniffer(objectFactory)).add(new IngresSniffer(objectFactory))
- .add(new SQLiteSniffer(objectFactory)).add(new DB2Sniffer(objectFactory))
- .add(new H2Sniffer(objectFactory)).add(new HSQLDBSniffer(objectFactory))
- .add(new SybaseSniffer(objectFactory)).add(new DerbySniffer(objectFactory))
- .add(new SQLServerSniffer(objectFactory)).add(new OracleSniffer(objectFactory))
- .add(new PostgresSniffer(objectFactory)).add(new MySQLSniffer(objectFactory));
+ binder.bind(FirebirdSniffer.class).to(FirebirdSniffer.class);
+ binder.bind(OpenBaseSniffer.class).to(OpenBaseSniffer.class);
+ binder.bind(FrontBaseSniffer.class).to(FrontBaseSniffer.class);
+ binder.bind(IngresSniffer.class).to(IngresSniffer.class);
+ binder.bind(SQLiteSniffer.class).to(SQLiteSniffer.class);
+ binder.bind(DB2Sniffer.class).to(DB2Sniffer.class);
+ binder.bind(H2Sniffer.class).to(H2Sniffer.class);
+ binder.bind(HSQLDBSniffer.class).to(HSQLDBSniffer.class);
+ binder.bind(SybaseSniffer.class).to(SybaseSniffer.class);
+ binder.bind(DerbySniffer.class).to(DerbySniffer.class);
+ binder.bind(SQLServerSniffer.class).to(SQLServerSniffer.class);
+ binder.bind(OracleSniffer.class).to(OracleSniffer.class);
+ binder.bind(PostgresSniffer.class).to(PostgresSniffer.class);
+ binder.bind(MySQLSniffer.class).to(MySQLSniffer.class);
+
+ binder.bindList(Constants.SERVER_ADAPTER_DETECTORS_LIST).add(FirebirdSniffer.class)
+ .add(OpenBaseSniffer.class).add(FrontBaseSniffer.class).add(IngresSniffer.class)
+ .add(SQLiteSniffer.class).add(DB2Sniffer.class).add(H2Sniffer.class).add(HSQLDBSniffer.class)
+ .add(SybaseSniffer.class).add(DerbySniffer.class).add(SQLServerSniffer.class)
+ .add(OracleSniffer.class).add(PostgresSniffer.class).add(MySQLSniffer.class);
binder.bindList(Constants.SERVER_DOMAIN_FILTERS_LIST);
binder.bindList(Constants.SERVER_PROJECT_LOCATIONS_LIST).add(testConfigName);
@@ -145,22 +162,23 @@ public class DataDomainProviderTest exte
binder.bind(EventManager.class).toInstance(eventManager);
binder.bind(EntitySorter.class).toInstance(new AshwoodEntitySorter());
-
- final ResourceLocator locator = new ClassLoaderResourceLocator(objectFactory) {
+
+ final ResourceLocator locator = new ClassLoaderResourceLocator(classLoaderManager) {
public Collection<Resource> findResources(String name) {
// ResourceLocator also used by JdbcAdapter to locate
- // types.xml... if this is the request we are getting, just let
+ // types.xml... if this is the request we are getting,
+ // just let
// it go through..
if (name.endsWith("types.xml")) {
- return super.findResources(name);
+ return super.findResources(name);
}
-
+
assertEquals(testConfigName, name);
return Collections.<Resource> singleton(new MockResource());
}
};
-
+
binder.bind(ResourceLocator.class).toInstance(locator);
binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
binder.bind(DataChannelDescriptorMerger.class).to(DefaultDataChannelDescriptorMerger.class);
Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java Sun Nov 24 16:05:53 2013
@@ -30,10 +30,12 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.log.CommonsJdbcEventLogger;
import org.apache.cayenne.log.JdbcEventLogger;
import org.apache.cayenne.resource.ResourceLocator;
@@ -41,24 +43,30 @@ import org.apache.cayenne.resource.mock.
public class DefaultDataSourceFactoryLoaderTest extends TestCase {
- public void testGetDataSourceFactory_Implicit() throws Exception {
-
- DataNodeDescriptor nodeDescriptor = new DataNodeDescriptor();
- nodeDescriptor.setName("node1");
- nodeDescriptor.setDataSourceDescriptor(new DataSourceInfo());
+ private Injector injector;
+ @Override
+ protected void setUp() throws Exception {
Module testModule = new Module() {
+ @Override
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(ResourceLocator.class).to(MockResourceLocator.class);
- binder.bind(RuntimeProperties.class).toInstance(
- mock(RuntimeProperties.class));
+ binder.bind(RuntimeProperties.class).toInstance(mock(RuntimeProperties.class));
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
}
};
- Injector injector = DIBootstrap.createInjector(testModule);
+ this.injector = DIBootstrap.createInjector(testModule);
+ }
+
+ public void testGetDataSourceFactory_Implicit() throws Exception {
+
+ DataNodeDescriptor nodeDescriptor = new DataNodeDescriptor();
+ nodeDescriptor.setName("node1");
+ nodeDescriptor.setDataSourceDescriptor(new DataSourceInfo());
DelegatingDataSourceFactory factoryLoader = new DelegatingDataSourceFactory();
injector.injectMembers(factoryLoader);
@@ -74,36 +82,20 @@ public class DefaultDataSourceFactoryLoa
nodeDescriptor.setName("node1");
nodeDescriptor.setDataSourceFactoryType(MockDataSourceFactory1.class.getName());
- Module testModule = new Module() {
-
- public void configure(Binder binder) {
- binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
- binder.bind(ResourceLocator.class).to(MockResourceLocator.class);
- binder.bind(RuntimeProperties.class).toInstance(
- mock(RuntimeProperties.class));
- binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
- }
- };
-
- Injector injector = DIBootstrap.createInjector(testModule);
-
DelegatingDataSourceFactory factoryLoader = new DelegatingDataSourceFactory();
injector.injectMembers(factoryLoader);
DataSourceFactory factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
assertNotNull(factory);
assertTrue(factory instanceof MockDataSourceFactory1);
- assertSame(
- "Injection on the factory hasn't been performed",
- injector,
+ assertSame("Injection on the factory hasn't been performed", injector,
((MockDataSourceFactory1) factory).getInjector());
}
public void testGetDataSourceFactory_Property() throws Exception {
final RuntimeProperties properties = mock(RuntimeProperties.class);
- when(properties.get(Constants.JDBC_DRIVER_PROPERTY)).thenReturn(
- "x");
+ when(properties.get(Constants.JDBC_DRIVER_PROPERTY)).thenReturn("x");
when(properties.get(Constants.JDBC_URL_PROPERTY)).thenReturn("y");
DataChannelDescriptor channelDescriptor = new DataChannelDescriptor();
@@ -116,6 +108,7 @@ public class DefaultDataSourceFactoryLoa
Module testModule = new Module() {
public void configure(Binder binder) {
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(ResourceLocator.class).to(MockResourceLocator.class);
binder.bind(RuntimeProperties.class).toInstance(properties);
@@ -132,20 +125,17 @@ public class DefaultDataSourceFactoryLoa
assertNotNull(factory);
assertTrue(factory instanceof PropertyDataSourceFactory);
- when(properties.get(Constants.JDBC_URL_PROPERTY))
- .thenReturn(null);
+ when(properties.get(Constants.JDBC_URL_PROPERTY)).thenReturn(null);
factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
assertNotNull(factory);
assertFalse(factory instanceof PropertyDataSourceFactory);
- when(properties.get(Constants.JDBC_URL_PROPERTY + ".X.node2"))
- .thenReturn("y");
+ when(properties.get(Constants.JDBC_URL_PROPERTY + ".X.node2")).thenReturn("y");
factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
assertNotNull(factory);
assertFalse(factory instanceof PropertyDataSourceFactory);
- when(properties.get(Constants.JDBC_URL_PROPERTY + ".X.node1"))
- .thenReturn("y");
+ when(properties.get(Constants.JDBC_URL_PROPERTY + ".X.node1")).thenReturn("y");
factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
assertNotNull(factory);
assertTrue(factory instanceof PropertyDataSourceFactory);
Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java?rev=1545007&r1=1545006&r2=1545007&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDbAdapterFactoryTest.java Sun Nov 24 16:05:53 2013
@@ -39,10 +39,12 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.sybase.SybaseAdapter;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.ClassLoaderManager;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
import org.apache.cayenne.log.CommonsJdbcEventLogger;
import org.apache.cayenne.log.JdbcEventLogger;
import org.apache.cayenne.map.DbEntity;
@@ -78,6 +80,7 @@ public class DefaultDbAdapterFactoryTest
binder.bindMap(Constants.PROPERTIES_MAP);
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
}
@@ -106,6 +109,7 @@ public class DefaultDbAdapterFactoryTest
binder.bindList(Constants.SERVER_TYPE_FACTORIES_LIST);
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(ResourceLocator.class).to(ClassLoaderResourceLocator.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
@@ -140,6 +144,7 @@ public class DefaultDbAdapterFactoryTest
binder.bindList(Constants.SERVER_TYPE_FACTORIES_LIST);
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(ResourceLocator.class).to(ClassLoaderResourceLocator.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
@@ -180,6 +185,7 @@ public class DefaultDbAdapterFactoryTest
public void configure(Binder binder) {
binder.bindMap(Constants.PROPERTIES_MAP);
+ binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);