Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
0002047: Add extension service that can read extensions from database
  • Loading branch information
erilong committed Nov 11, 2014
1 parent 447de25 commit b8c6072
Show file tree
Hide file tree
Showing 19 changed files with 47 additions and 21 deletions.
Expand Up @@ -23,6 +23,7 @@
import java.util.HashMap;
import java.util.Map;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.model.Trigger;
import org.jumpmind.symmetric.model.TriggerHistory;

Expand All @@ -31,7 +32,7 @@
*
*
*/
public class TriggerFailureListener extends TriggerCreationAdapter {
public class TriggerFailureListener extends TriggerCreationAdapter implements IBuiltInExtensionPoint {

private Map<Trigger, Exception> failures;

Expand Down
Expand Up @@ -24,6 +24,7 @@
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.Version;
import org.jumpmind.symmetric.common.ParameterConstants;
Expand All @@ -34,7 +35,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PushHeartbeatListener implements IHeartbeatListener {
public class PushHeartbeatListener implements IHeartbeatListener, IBuiltInExtensionPoint {

protected final Logger log = LoggerFactory.getLogger(getClass());

Expand Down
Expand Up @@ -27,6 +27,7 @@
import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.sql.ISqlTransaction;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.common.ParameterConstants;
import org.jumpmind.symmetric.db.ISymmetricDialect;
import org.jumpmind.symmetric.io.data.IDataWriter;
Expand All @@ -43,7 +44,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DefaultDataLoaderFactory implements IDataLoaderFactory {
public class DefaultDataLoaderFactory implements IDataLoaderFactory, IBuiltInExtensionPoint {

private static final Logger log = LoggerFactory.getLogger(DefaultDataLoaderFactory.class);

Expand Down
Expand Up @@ -32,6 +32,7 @@
import org.jumpmind.db.sql.DmlStatement;
import org.jumpmind.db.sql.DmlStatement.DmlType;
import org.jumpmind.db.sql.ISqlTemplate;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.common.ParameterConstants;
import org.jumpmind.symmetric.io.data.DataEventType;
Expand All @@ -42,7 +43,7 @@
import org.jumpmind.symmetric.service.IParameterService;
import org.jumpmind.util.FormatUtils;

public class AuditTableDataRouter extends AbstractDataRouter {
public class AuditTableDataRouter extends AbstractDataRouter implements IBuiltInExtensionPoint {

private static final String COLUMN_AUDIT_EVENT = "AUDIT_EVENT";

Expand Down
Expand Up @@ -26,6 +26,7 @@
import java.util.Map;
import java.util.Set;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.Node;
Expand All @@ -47,7 +48,7 @@
* targetNodes. The script is expected to add the the list of target nodes a
* list of the node_ids that should be routed to.
*/
public class BshDataRouter extends AbstractDataRouter {
public class BshDataRouter extends AbstractDataRouter implements IBuiltInExtensionPoint {

protected ISymmetricEngine engine;

Expand Down
Expand Up @@ -28,6 +28,7 @@

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.SyntaxParsingException;
import org.jumpmind.symmetric.common.TokenConstants;
import org.jumpmind.symmetric.db.ISymmetricDialect;
Expand Down Expand Up @@ -75,7 +76,7 @@
* table and the router_expression for trigger entry for the 'price' table would
* be 'store_id=:REDIRECT_NODE' and the router_type would be 'column'.
*/
public class ColumnMatchDataRouter extends AbstractDataRouter implements IDataRouter {
public class ColumnMatchDataRouter extends AbstractDataRouter implements IDataRouter, IBuiltInExtensionPoint {

private static final String NULL_VALUE = "NULL";

Expand Down
Expand Up @@ -28,6 +28,7 @@
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.common.Constants;
import org.jumpmind.symmetric.common.ParameterConstants;
Expand All @@ -47,7 +48,7 @@
import org.jumpmind.symmetric.service.IConfigurationService;
import org.jumpmind.symmetric.service.ITriggerRouterService;

public class ConfigurationChangedDataRouter extends AbstractDataRouter implements IDataRouter {
public class ConfigurationChangedDataRouter extends AbstractDataRouter implements IDataRouter, IBuiltInExtensionPoint {

public static final String ROUTER_TYPE = "configurationChanged";

Expand Down
Expand Up @@ -20,14 +20,15 @@
*/
package org.jumpmind.symmetric.route;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.OutgoingBatch;

/**
* Batch algorithm that puts multiple transactions in the same batch up to the max
* batch size, but never breaks a transaction boundary
*/
public class DefaultBatchAlgorithm implements IBatchAlgorithm {
public class DefaultBatchAlgorithm implements IBatchAlgorithm, IBuiltInExtensionPoint {

public static final String NAME = "default";

Expand Down
Expand Up @@ -22,6 +22,7 @@

import java.util.Set;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.Node;
import org.jumpmind.symmetric.model.OutgoingBatch;
Expand All @@ -30,7 +31,7 @@
/**
* This data router will route data to all of the nodes that are passed to it.
*/
public class DefaultDataRouter extends AbstractDataRouter {
public class DefaultDataRouter extends AbstractDataRouter implements IBuiltInExtensionPoint {

public Set<String> routeToNodes(SimpleRouterContext routingContext, DataMetaData dataMetaData, Set<Node> nodes,
boolean initialLoad, boolean initialLoadSelectUsed, TriggerRouter triggerRouter) {
Expand Down
Expand Up @@ -25,6 +25,7 @@
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.FileTriggerRouter;
Expand All @@ -35,7 +36,7 @@
import org.jumpmind.symmetric.service.IFileSyncService;
import org.jumpmind.symmetric.service.IRouterService;

public class FileSyncDataRouter extends AbstractDataRouter {
public class FileSyncDataRouter extends AbstractDataRouter implements IBuiltInExtensionPoint {

public static final String ROUTER_TYPE = "filesync";

Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.util.Collections;
import java.util.Set;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.Node;
Expand All @@ -36,7 +37,7 @@
* and the classloader. For a new batch, if the router_expression is the same, the same class is used, otherwise the class is renamed,
* compiled, and loaded again.
*/
public class JavaDataRouter extends AbstractDataRouter {
public class JavaDataRouter extends AbstractDataRouter implements IBuiltInExtensionPoint {

public final static String CODE_START = "import org.jumpmind.symmetric.route.*;\n"
+ "import org.jumpmind.symmetric.model.*;\n"
Expand Down
Expand Up @@ -29,6 +29,7 @@
import org.jumpmind.db.sql.ISqlRowMapper;
import org.jumpmind.db.sql.ISqlTemplate;
import org.jumpmind.db.sql.Row;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.SyntaxParsingException;
import org.jumpmind.symmetric.db.ISymmetricDialect;
import org.jumpmind.symmetric.model.DataMetaData;
Expand All @@ -41,7 +42,7 @@
/**
* A data router that uses a lookup table to map data to nodes
*/
public class LookupTableDataRouter extends AbstractDataRouter implements IDataRouter {
public class LookupTableDataRouter extends AbstractDataRouter implements IDataRouter, IBuiltInExtensionPoint {

final static Logger log = LoggerFactory.getLogger(LookupTableDataRouter.class);

Expand Down
Expand Up @@ -20,6 +20,7 @@
*/
package org.jumpmind.symmetric.route;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.OutgoingBatch;

Expand All @@ -28,7 +29,7 @@
* if there is more than the max batch size of data to batch. Breaks transactional
* boundaries.
*/
public class NonTransactionalBatchAlgorithm implements IBatchAlgorithm {
public class NonTransactionalBatchAlgorithm implements IBatchAlgorithm, IBuiltInExtensionPoint {

public static final String NAME = "nontransactional";

Expand Down
Expand Up @@ -29,6 +29,7 @@
import org.jumpmind.db.sql.ISqlTemplate;
import org.jumpmind.db.sql.InvalidSqlException;
import org.jumpmind.db.sql.mapper.StringMapper;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.db.ISymmetricDialect;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.Node;
Expand Down Expand Up @@ -59,7 +60,7 @@
* c.external_id in (select home_store from employee where employee_id in (:EMPLOYEE_ID, :OLD_EMPLOYEE_ID))
* </code>
*/
public class SubSelectDataRouter extends AbstractDataRouter {
public class SubSelectDataRouter extends AbstractDataRouter implements IBuiltInExtensionPoint {

private static final String SQL = "select c.node_id from $(prefixName)_node c where c.node_group_id=:NODE_GROUP_ID and c.sync_enabled=1 and ";

Expand Down
Expand Up @@ -20,13 +20,14 @@
*/
package org.jumpmind.symmetric.route;

import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.model.DataMetaData;
import org.jumpmind.symmetric.model.OutgoingBatch;

/**
* Only put individual transactions in a batch.
*/
public class TransactionalBatchAlgorithm implements IBatchAlgorithm {
public class TransactionalBatchAlgorithm implements IBatchAlgorithm, IBuiltInExtensionPoint {

public static final String NAME = "transactional";

Expand Down
Expand Up @@ -37,6 +37,7 @@
import org.jumpmind.symmetric.ext.ExtensionPointMetaData;
import org.jumpmind.symmetric.ext.INodeGroupExtensionPoint;
import org.jumpmind.symmetric.ext.ISymmetricEngineAware;
import org.jumpmind.symmetric.io.data.transform.IColumnTransform;
import org.jumpmind.symmetric.model.Extension;
import org.jumpmind.symmetric.service.IExtensionService;
import org.jumpmind.util.SimpleClassCompiler;
Expand Down Expand Up @@ -83,7 +84,7 @@ public void refresh() {
for (String name : byNameMap.keySet()) {
IExtensionPoint ext = byNameMap.get(name);
getExtensionsByNameMap(extensionClass).put(name, ext);
extensionMetaData.add(new ExtensionPointMetaData(ext, name, extensionClass, true));
addExtensionPointMetaData(ext, name, extensionClass, true);
}
}

Expand Down Expand Up @@ -135,12 +136,12 @@ protected boolean registerExtension(String name, IExtensionPoint ext, boolean sh
log.info("Registering extension named '{}' of type '{}'", name, extensionClass.getSimpleName());
}
installed = true;
extensionMetaData.add(new ExtensionPointMetaData(ext, name, extensionClass, true));
addExtensionPointMetaData(ext, name, extensionClass, true);
getExtensionsByNameMap(extensionClass).put(name, ext);
}

if (!installed) {
extensionMetaData.add(new ExtensionPointMetaData(ext, name, null, false));
addExtensionPointMetaData(ext, name, null, false);
}
}
return installed;
Expand Down Expand Up @@ -199,6 +200,13 @@ public List<ExtensionPointMetaData> getExtensionPointMetaData() {
return new ArrayList<ExtensionPointMetaData>(extensionMetaData);
}

protected void addExtensionPointMetaData(IExtensionPoint extensionPoint, String name,
Class<? extends IExtensionPoint> extensionClass, boolean installed) {
if (!installed || (!extensionClass.equals(IBuiltInExtensionPoint.class) && !extensionClass.equals(IColumnTransform.class))) {
extensionMetaData.add(new ExtensionPointMetaData(extensionPoint, name, extensionClass, installed));
}
}

public <T extends IExtensionPoint> T getExtensionPoint(Class<T> extensionClass) {
for (T extension : getExtensionPointList(extensionClass)) {
return extension;
Expand Down
Expand Up @@ -21,6 +21,7 @@
package org.jumpmind.symmetric.util;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.security.ISecurityService;
import org.jumpmind.symmetric.common.ParameterConstants;
import org.jumpmind.symmetric.config.INodeIdCreator;
Expand All @@ -35,7 +36,7 @@
import bsh.Interpreter;
import bsh.TargetError;

public class DefaultNodeIdCreator implements INodeIdCreator {
public class DefaultNodeIdCreator implements INodeIdCreator, IBuiltInExtensionPoint {

protected final Logger log = LoggerFactory.getLogger(getClass());

Expand Down
Expand Up @@ -28,9 +28,10 @@

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.io.data.DataContext;

public class ColumnsToRowsKeyColumnTransform implements IMultipleValueColumnTransform {
public class ColumnsToRowsKeyColumnTransform implements IMultipleValueColumnTransform, IBuiltInExtensionPoint {

public final static String NAME = "columnsToRowsKey";

Expand Down
Expand Up @@ -24,10 +24,11 @@

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.io.data.DataContext;
import org.jumpmind.symmetric.io.data.DataEventType;

public class ColumnsToRowsValueColumnTransform implements ISingleValueColumnTransform {
public class ColumnsToRowsValueColumnTransform implements ISingleValueColumnTransform, IBuiltInExtensionPoint {

public final static String NAME = "columnsToRowsValue";

Expand Down

0 comments on commit b8c6072

Please sign in to comment.