From 4da7d2466a491a60ebdfe733b7111455979f4b1c Mon Sep 17 00:00:00 2001 From: chenson42 Date: Mon, 8 Dec 2014 00:29:40 +0000 Subject: [PATCH] 0002092: Should be able to remove mongo and amazon jar files and the application should still work --- .../ext/RedshiftBulkDataLoaderFactory.java | 30 ++++++++++-- .../symmetric/io/MongoDataLoaderFactory.java | 47 +++++++++++++++++-- .../symmetric/io/MongoDatabaseWriter.java | 1 - .../main/resources/symmetric-ext-points.xml | 3 -- .../load/DefaultDataLoaderFactory.java | 2 +- .../main/deploy/conf/symmetric-extensions.xml | 11 +++++ 6 files changed, 79 insertions(+), 15 deletions(-) diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/ext/RedshiftBulkDataLoaderFactory.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/ext/RedshiftBulkDataLoaderFactory.java index 0f67b78112..b6201bae51 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/ext/RedshiftBulkDataLoaderFactory.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/ext/RedshiftBulkDataLoaderFactory.java @@ -20,25 +20,29 @@ */ package org.jumpmind.symmetric.ext; +import java.lang.reflect.Constructor; import java.util.List; -import org.jumpmind.db.platform.DatabaseNamesConstants; import org.jumpmind.db.platform.IDatabasePlatform; import org.jumpmind.extension.IBuiltInExtensionPoint; import org.jumpmind.symmetric.ISymmetricEngine; import org.jumpmind.symmetric.db.ISymmetricDialect; -import org.jumpmind.symmetric.io.RedshiftBulkDatabaseWriter; import org.jumpmind.symmetric.io.data.IDataWriter; import org.jumpmind.symmetric.io.data.writer.Conflict; import org.jumpmind.symmetric.io.data.writer.IDatabaseWriterErrorHandler; import org.jumpmind.symmetric.io.data.writer.IDatabaseWriterFilter; import org.jumpmind.symmetric.io.data.writer.ResolvedData; import org.jumpmind.symmetric.io.data.writer.TransformWriter; +import org.jumpmind.symmetric.io.stage.IStagingManager; import org.jumpmind.symmetric.load.IDataLoaderFactory; import org.jumpmind.symmetric.service.IParameterService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class RedshiftBulkDataLoaderFactory implements IDataLoaderFactory, ISymmetricEngineAware, IBuiltInExtensionPoint { + protected final Logger log = LoggerFactory.getLogger(getClass()); + private ISymmetricEngine engine; public RedshiftBulkDataLoaderFactory() { @@ -60,8 +64,24 @@ public IDataWriter getDataWriter(String sourceNodeId, ISymmetricDialect symmetri String secretKey = param.getString("redshift.bulk.load.s3.secret.key"); String appendToCopyCommand = param.getString("redshift.append.to.copy.command"); - return new RedshiftBulkDatabaseWriter(symmetricDialect.getPlatform(), engine.getStagingManager(), filters, errorHandlers, - maxRowsBeforeFlush, maxBytesBeforeFlush, bucket, accessKey, secretKey, appendToCopyCommand); + try { + Class dbWriterClass = Class.forName("org.jumpmind.symmetric.io.RedshiftBulkDatabaseWriter"); + Constructor dbWriterConstructor = dbWriterClass.getConstructor(new Class[] { + IDatabasePlatform.class, IStagingManager.class, List.class, + List.class, Integer.TYPE, Long.TYPE, String.class, + String.class, String.class, String.class }); + return (IDataWriter) dbWriterConstructor.newInstance( + symmetricDialect.getPlatform(), engine.getStagingManager(), filters, errorHandlers, + maxRowsBeforeFlush, maxBytesBeforeFlush, bucket, accessKey, secretKey, appendToCopyCommand); + + } catch (Exception e) { + log.warn("Failed to create the mongo database writer. Check to see if all of the required jars have been added"); + if (e instanceof RuntimeException) { + throw (RuntimeException)e; + } else { + throw new RuntimeException(e); + } + } } public void setSymmetricEngine(ISymmetricEngine engine) { @@ -69,7 +89,7 @@ public void setSymmetricEngine(ISymmetricEngine engine) { } public boolean isPlatformSupported(IDatabasePlatform platform) { - return DatabaseNamesConstants.REDSHIFT.equals(platform.getName()); + return true;//DatabaseNamesConstants.REDSHIFT.equals(platform.getName()); } } diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDataLoaderFactory.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDataLoaderFactory.java index 84937fc1ad..0e2a288ab0 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDataLoaderFactory.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDataLoaderFactory.java @@ -20,6 +20,8 @@ */ package org.jumpmind.symmetric.io; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.util.List; import org.jumpmind.db.platform.IDatabasePlatform; @@ -29,12 +31,15 @@ import org.jumpmind.symmetric.ext.ISymmetricEngineAware; import org.jumpmind.symmetric.io.data.IDataWriter; import org.jumpmind.symmetric.io.data.writer.Conflict; +import org.jumpmind.symmetric.io.data.writer.DatabaseWriterSettings; import org.jumpmind.symmetric.io.data.writer.DefaultTransformWriterConflictResolver; +import org.jumpmind.symmetric.io.data.writer.IDatabaseWriterConflictResolver; import org.jumpmind.symmetric.io.data.writer.IDatabaseWriterErrorHandler; import org.jumpmind.symmetric.io.data.writer.IDatabaseWriterFilter; import org.jumpmind.symmetric.io.data.writer.ResolvedData; import org.jumpmind.symmetric.io.data.writer.TransformWriter; import org.jumpmind.symmetric.load.DefaultDataLoaderFactory; +import org.jumpmind.symmetric.service.IParameterService; public class MongoDataLoaderFactory extends DefaultDataLoaderFactory implements ISymmetricEngineAware, IBuiltInExtensionPoint { @@ -65,12 +70,44 @@ public IDataWriter getDataWriter(String sourceNodeId, ISymmetricDialect symmetri TransformWriter transformWriter, List filters, List errorHandlers, List conflictSettings, List resolvedData) { - if (objectMapper instanceof SimpleDBObjectMapper) { - ((SimpleDBObjectMapper)objectMapper).setDefaultDatabaseName(parameterService.getString("mongodb.default.databasename", "default")); + try { + if (objectMapper == null) { + objectMapper = (IDBObjectMapper)Class.forName("org.jumpmind.symmetric.io.SimpleDBObjectMapper").newInstance(); + } + Method method = objectMapper.getClass().getMethod("setDefaultDatabaseName", String.class); + if (method != null) { + method.invoke(objectMapper, parameterService + .getString("mongodb.default.databasename", "default")); + } + } catch (Exception e) { + log.debug("Failed to call setDefaultDatabaseName on mapper", e); + } + + try { + Class clientManagerClass = Class + .forName("org.jumpmind.symmetric.io.SimpleMongoClientManager"); + Constructor clientManagerConstrutor = clientManagerClass + .getConstructor(new Class[] { IParameterService.class, String.class }); + Class dbWriterClass = Class.forName("org.jumpmind.symmetric.io.MongoDatabaseWriter"); + Constructor dbWriterConstructor = dbWriterClass.getConstructor(new Class[] { + IDBObjectMapper.class, IMongoClientManager.class, + IDatabaseWriterConflictResolver.class, DatabaseWriterSettings.class }); + Object clientManager = clientManagerConstrutor.newInstance(parameterService, typeName); + return (IDataWriter) dbWriterConstructor.newInstance( + objectMapper, + clientManager, + new DefaultTransformWriterConflictResolver(transformWriter), + buildDatabaseWriterSettings(filters, errorHandlers, conflictSettings, + resolvedData)); + + } catch (Exception e) { + log.warn("Failed to create the mongo database writer. Check to see if all of the required jars have been added"); + if (e instanceof RuntimeException) { + throw (RuntimeException)e; + } else { + throw new RuntimeException(e); + } } - return new MongoDatabaseWriter(objectMapper, new SimpleMongoClientManager(parameterService, typeName), - new DefaultTransformWriterConflictResolver(transformWriter), - buildDatabaseWriterSettings(filters, errorHandlers, conflictSettings, resolvedData)); } @Override diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDatabaseWriter.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDatabaseWriter.java index c6b324df3b..86db62f063 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDatabaseWriter.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/io/MongoDatabaseWriter.java @@ -28,7 +28,6 @@ import org.jumpmind.symmetric.io.data.writer.DataWriterStatisticConstants; import org.jumpmind.symmetric.io.data.writer.DatabaseWriterSettings; import org.jumpmind.symmetric.io.data.writer.IDatabaseWriterConflictResolver; -import org.jumpmind.symmetric.io.data.writer.AbstractDatabaseWriter.LoadStatus; import com.mongodb.CommandResult; import com.mongodb.DB; diff --git a/symmetric-client/src/main/resources/symmetric-ext-points.xml b/symmetric-client/src/main/resources/symmetric-ext-points.xml index f34555b119..cda2af7b3d 100644 --- a/symmetric-client/src/main/resources/symmetric-ext-points.xml +++ b/symmetric-client/src/main/resources/symmetric-ext-points.xml @@ -24,9 +24,6 @@ - - - diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java index b432deede2..206fcc934f 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java @@ -46,7 +46,7 @@ public class DefaultDataLoaderFactory implements IDataLoaderFactory, IBuiltInExtensionPoint { - private static final Logger log = LoggerFactory.getLogger(DefaultDataLoaderFactory.class); + protected final Logger log = LoggerFactory.getLogger(getClass()); protected IParameterService parameterService; diff --git a/symmetric-server/src/main/deploy/conf/symmetric-extensions.xml b/symmetric-server/src/main/deploy/conf/symmetric-extensions.xml index ed09a7542c..681e8bd2d3 100644 --- a/symmetric-server/src/main/deploy/conf/symmetric-extensions.xml +++ b/symmetric-server/src/main/deploy/conf/symmetric-extensions.xml @@ -26,6 +26,17 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd" default-lazy-init="true"> + +