You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by da...@apache.org on 2018/04/06 08:28:29 UTC

[25/31] atlas git commit: ATLAS-2122 OMAG Server Application and OMRS APIs

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/OMRSOperationalServices.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/OMRSOperationalServices.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/OMRSOperationalServices.java
index 8a47945..60b4704 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/OMRSOperationalServices.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/OMRSOperationalServices.java
@@ -19,13 +19,13 @@ package org.apache.atlas.omrs.admin;
 
 import org.apache.atlas.ocf.Connector;
 import org.apache.atlas.ocf.ConnectorBroker;
-import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.admin.properties.CohortConfig;
 import org.apache.atlas.omrs.admin.properties.EnterpriseAccessConfig;
 import org.apache.atlas.omrs.admin.properties.LocalRepositoryConfig;
 import org.apache.atlas.omrs.admin.properties.RepositoryServicesConfig;
 import org.apache.atlas.omrs.archivemanager.OMRSArchiveManager;
-import org.apache.atlas.omrs.archivemanager.store.OpenMetadataArchiveStore;
+import org.apache.atlas.omrs.archivemanager.store.OpenMetadataArchiveStoreConnector;
 import org.apache.atlas.omrs.auditlog.OMRSAuditCode;
 import org.apache.atlas.omrs.auditlog.OMRSAuditLog;
 import org.apache.atlas.omrs.auditlog.OMRSAuditingComponent;
@@ -34,7 +34,7 @@ import org.apache.atlas.omrs.enterprise.connectormanager.OMRSConnectionConsumer;
 import org.apache.atlas.omrs.enterprise.connectormanager.OMRSEnterpriseConnectorManager;
 import org.apache.atlas.omrs.eventmanagement.OMRSRepositoryEventExchangeRule;
 import org.apache.atlas.omrs.eventmanagement.OMRSRepositoryEventManager;
-import org.apache.atlas.omrs.eventmanagement.repositoryeventmapper.OMRSRepositoryEventMapper;
+import org.apache.atlas.omrs.eventmanagement.repositoryeventmapper.OMRSRepositoryEventMapperConnector;
 import org.apache.atlas.omrs.ffdc.exception.OMRSConfigErrorException;
 import org.apache.atlas.omrs.ffdc.OMRSErrorCode;
 import org.apache.atlas.omrs.ffdc.exception.OMRSLogicErrorException;
@@ -53,6 +53,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * OMRSOperationalServices provides the OMAG Server with access to the OMRS capabilities.
@@ -80,9 +81,12 @@ public class OMRSOperationalServices
     private static final OMRSAuditLog auditLog = new OMRSAuditLog(OMRSAuditingComponent.OPERATIONAL_SERVICES);
 
 
-    private String                         localServerName               = null;
-    private String                         localServerType               = null;
-    private String                         localOrganizationName         = null;
+    private String                         localServerName;         /* Initialized in constructor */
+    private String                         localServerType;         /* Initialized in constructor */
+    private String                         localOrganizationName;   /* Initialized in constructor */
+    private String                         localServerURL;          /* Initialized in constructor */
+    private int                            maxPageSize;             /* Initialized in constructor */
+
     private String                         localMetadataCollectionId     = null;
 
     private OMRSRepositoryContentManager   localRepositoryContentManager = null;
@@ -100,10 +104,13 @@ public class OMRSOperationalServices
      * @param localServerName - name of the local server
      * @param localServerType - type of the local server
      * @param organizationName - name of the organization that owns the local server
+     * @param localServerURL - URL root for this server.
      */
     public OMRSOperationalServices(String                   localServerName,
                                    String                   localServerType,
-                                   String                   organizationName)
+                                   String                   organizationName,
+                                   String                   localServerURL,
+                                   int                      maxPageSize)
     {
         /*
          * Save details about the local server
@@ -111,6 +118,8 @@ public class OMRSOperationalServices
         this.localServerName = localServerName;
         this.localServerType = localServerType;
         this.localOrganizationName = organizationName;
+        this.localServerURL = localServerURL;
+        this.maxPageSize = maxPageSize;
     }
 
 
@@ -122,7 +131,7 @@ public class OMRSOperationalServices
      */
     public void initialize(RepositoryServicesConfig repositoryServicesConfig)
     {
-        final String   actionDescription = "Initialize Repository Operational Services";
+        final String   actionDescription = "Initialize Open Metadata Repository Operational Services";
         final String   methodName        = "initialize()";
         OMRSAuditCode  auditCode = null;
 
@@ -150,7 +159,7 @@ public class OMRSOperationalServices
         OMRSAuditLog.initialize(localServerName,
                                 localServerType,
                                 localOrganizationName,
-                                getAuditLogStore(repositoryServicesConfig.getAuditLogConnection()));
+                                getAuditLogStores(repositoryServicesConfig.getAuditLogConnections()));
 
         /*
          * Log that the OMRS is starting.  There is another Audit log message logged at the end of this method
@@ -171,7 +180,7 @@ public class OMRSOperationalServices
          */
         EnterpriseAccessConfig  enterpriseAccessConfig = repositoryServicesConfig.getEnterpriseAccessConfig();
         LocalRepositoryConfig   localRepositoryConfig  = repositoryServicesConfig.getLocalRepositoryConfig();
-        ArrayList<CohortConfig> cohortConfigList       = repositoryServicesConfig.getCohortConfigList();
+        List<CohortConfig>      cohortConfigList       = repositoryServicesConfig.getCohortConfigList();
 
         /*
          * Begin with the enterprise repository services.  They are always needed since the
@@ -185,13 +194,13 @@ public class OMRSOperationalServices
          * repository services will use.  The OMRS Topic is used to publish events from these repositories to support the
          * OMASs' event notifications.
          */
-        enterpriseConnectorManager = initializeEnterpriseConnectorManager(enterpriseAccessConfig);
+        enterpriseConnectorManager = initializeEnterpriseConnectorManager(enterpriseAccessConfig, maxPageSize);
         enterpriseOMRSTopicConnector = initializeEnterpriseOMRSTopicConnector(enterpriseAccessConfig);
 
         /*
          * The archive manager loads pre-defined types and instances that are stored in open metadata archives.
          */
-        archiveManager = initializeOpenMetadataArchives(repositoryServicesConfig.getOpenMetadataArchiveConnectionList());
+        archiveManager = initializeOpenMetadataArchives(repositoryServicesConfig.getOpenMetadataArchiveConnections());
 
         /*
          * The local repository is optional.  However, the repository content manager is still
@@ -230,7 +239,8 @@ public class OMRSOperationalServices
                             new OMRSRepositoryEventExchangeRule("Local Repository Events to Send",
                                                                 localRepositoryContentManager,
                                                                 localRepositoryConfig.getEventsToSendRule(),
-                                                                localRepositoryConfig.getSelectedTypesToSend()));
+                                                                localRepositoryConfig.getSelectedTypesToSend()),
+                            new OMRSRepositoryValidator(localRepositoryContentManager));
 
             /*
              * Pass the local metadata collectionId to the AuditLog
@@ -240,11 +250,32 @@ public class OMRSOperationalServices
             localRepositoryConnector = initializeLocalRepository(localRepositoryConfig);
 
             /*
-             * Set up the OMRS REST Services with the local repository
+             * Start processing of events for the local repository.
+             */
+            try
+            {
+                localRepositoryConnector.start();
+            }
+            catch (Throwable error)
+            {
+                auditCode = OMRSAuditCode.LOCAL_REPOSITORY_FAILED_TO_START;
+                auditLog.logRecord(actionDescription,
+                                   auditCode.getLogMessageId(),
+                                   auditCode.getSeverity(),
+                                   auditCode.getFormattedLogMessage(error.getMessage()),
+                                   null,
+                                   auditCode.getSystemAction(),
+                                   auditCode.getUserAction());
+            }
+
+            /*
+             * Set up the OMRS REST Services with the local repository so it is able to process incoming REST
+             * calls.
              */
-            OMRSRepositoryRESTServices.setLocalRepository(localRepositoryConnector);
+            OMRSRepositoryRESTServices.setLocalRepository(localRepositoryConnector, localServerURL);
         }
 
+
         /*
          * This is the point at which the open metadata archives will be processed.  The archives are processed
          * using the same mechanisms as TypeDef/Instance events received from other members of the cohort.  This
@@ -277,7 +308,7 @@ public class OMRSOperationalServices
         }
 
         /*
-         * local operation is ready, now connect to the metadata highway.
+         * Local operation is ready, now connect to the metadata highway.
          */
         if (cohortConfigList != null)
         {
@@ -342,12 +373,15 @@ public class OMRSOperationalServices
 
     /**
      * Initialize the OMRSEnterpriseConnectorManager and the EnterpriseOMRSConnector class.  If the
-     * enterprise access configuration
+     * enterprise access configuration is null it means federation is not enabled.  However, the enterprise
+     * connector manager is still initialized to pass the local repository information to the Enterprise
+     * OMRS repository connectors.
      *
      * @param enterpriseAccessConfig - enterprise access configuration from the OMAG server
      * @return initialized OMRSEnterpriseConnectorManager object
      */
-    private OMRSEnterpriseConnectorManager initializeEnterpriseConnectorManager(EnterpriseAccessConfig  enterpriseAccessConfig)
+    private OMRSEnterpriseConnectorManager initializeEnterpriseConnectorManager(EnterpriseAccessConfig  enterpriseAccessConfig,
+                                                                                int                     maxPageSize)
     {
         OMRSEnterpriseConnectorManager   enterpriseConnectorManager = null;
 
@@ -356,13 +390,17 @@ public class OMRSOperationalServices
             /*
              * Federation is not enabled in this server
              */
-            enterpriseConnectorManager = new OMRSEnterpriseConnectorManager(false);
+            enterpriseConnectorManager = new OMRSEnterpriseConnectorManager(false, maxPageSize);
 
             /*
              * Pass the address of the enterprise connector manager to the OMRSEnterpriseConnectorProvider class as
              * the connector manager is needed by each instance of the EnterpriseOMRSConnector.
              */
             EnterpriseOMRSConnectorProvider.initialize(enterpriseConnectorManager,
+                                                       localRepositoryContentManager,
+                                                       localServerName,
+                                                       localServerType,
+                                                       localOrganizationName,
                                                        null,
                                                        null);
         }
@@ -382,13 +420,17 @@ public class OMRSOperationalServices
                                auditCode.getSystemAction(),
                                auditCode.getUserAction());
 
-            enterpriseConnectorManager = new OMRSEnterpriseConnectorManager(true);
+            enterpriseConnectorManager = new OMRSEnterpriseConnectorManager(true, maxPageSize);
 
             /*
              * Pass the address of the enterprise connector manager to the OMRSEnterpriseConnectorProvider class as
              * the connector manager is needed by each instance of the EnterpriseOMRSConnector.
              */
             EnterpriseOMRSConnectorProvider.initialize(enterpriseConnectorManager,
+                                                       localRepositoryContentManager,
+                                                       localServerName,
+                                                       localServerType,
+                                                       localOrganizationName,
                                                        enterpriseAccessConfig.getEnterpriseMetadataCollectionId(),
                                                        enterpriseAccessConfig.getEnterpriseMetadataCollectionName());
         }
@@ -425,9 +467,6 @@ public class OMRSOperationalServices
             LocalOMRSConnectorProvider localConnectorProvider =
                     new LocalOMRSConnectorProvider(localMetadataCollectionId,
                                                    localRepositoryConfig.getLocalRepositoryRemoteConnection(),
-                                                   localServerName,
-                                                   localServerType,
-                                                   localOrganizationName,
                                                    getLocalRepositoryEventMapper(localRepositoryConfig.getEventMapperConnection()),
                                                    localRepositoryEventManager,
                                                    localRepositoryContentManager,
@@ -441,7 +480,7 @@ public class OMRSOperationalServices
              * Create the local repository's connector.  If there is no locally optimized connection, the
              * remote connection is used.
              */
-            Connection                    localRepositoryConnection       = null;
+            Connection                    localRepositoryConnection;
 
             if (localRepositoryConfig.getLocalRepositoryLocalConnection() != null)
             {
@@ -465,9 +504,9 @@ public class OMRSOperationalServices
      * @param openMetadataArchiveConnections - connections to the open metadata archive stores
      * @return OMRS archive manager
      */
-    private OMRSArchiveManager initializeOpenMetadataArchives(ArrayList<Connection>    openMetadataArchiveConnections)
+    private OMRSArchiveManager initializeOpenMetadataArchives(List<Connection>    openMetadataArchiveConnections)
     {
-        ArrayList<OpenMetadataArchiveStore> openMetadataArchives = null;
+        ArrayList<OpenMetadataArchiveStoreConnector> openMetadataArchives = null;
 
         if (openMetadataArchiveConnections != null)
         {
@@ -501,9 +540,7 @@ public class OMRSOperationalServices
      *                              This value flows in OMRS Events.
      * @param localRepositoryConnector - the local repository connector is supplied if there is a local repository
      *                                 for this server.
-     * @param localTypeDefValidator - the TypeDef validator validates the TypeDefs sent by the other members of
-     *                              the cohort(s).  It is looking for conflicting TypeDefs that may cause
-     *                              metadata integrity issues as the metadata is exchanged between the servers.
+     * @param localRepositoryContentManager - repository content manager for this server
      * @param connectionConsumer - the connection consumer is from the enterprise repository services.  It
      *                           receives connection information about the other members of the cohort(s)
      *                           to enable enterprise access.
@@ -517,10 +554,10 @@ public class OMRSOperationalServices
                                                           String                          localServerType,
                                                           String                          localOrganizationName,
                                                           LocalOMRSRepositoryConnector    localRepositoryConnector,
-                                                          OMRSTypeDefValidator            localTypeDefValidator,
+                                                          OMRSRepositoryContentManager    localRepositoryContentManager,
                                                           OMRSConnectionConsumer          connectionConsumer,
                                                           OMRSTopicConnector              enterpriseTopicConnector,
-                                                          ArrayList<CohortConfig>         cohortConfigList)
+                                                          List<CohortConfig>              cohortConfigList)
     {
         /*
          * The metadata highway manager is constructed with the values that are the same for every cohort.
@@ -529,7 +566,7 @@ public class OMRSOperationalServices
                                                                                             localServerType,
                                                                                             localOrganizationName,
                                                                                             localRepositoryConnector,
-                                                                                            localTypeDefValidator,
+                                                                                            localRepositoryContentManager,
                                                                                             connectionConsumer,
                                                                                             enterpriseTopicConnector);
 
@@ -578,7 +615,14 @@ public class OMRSOperationalServices
             }
             catch (Throwable  error)
             {
-                // TODO
+                auditCode = OMRSAuditCode.ENTERPRISE_TOPIC_DISCONNECT_ERROR;
+                auditLog.logRecord(actionDescription,
+                                   auditCode.getLogMessageId(),
+                                   auditCode.getSeverity(),
+                                   auditCode.getFormattedLogMessage(error.getMessage()),
+                                   null,
+                                   auditCode.getSystemAction(),
+                                   auditCode.getUserAction());
             }
         }
 
@@ -595,7 +639,14 @@ public class OMRSOperationalServices
             }
             catch (Throwable  error)
             {
-
+                auditCode = OMRSAuditCode.LOCAL_REPOSITORY_FAILED_TO_DISCONNECT;
+                auditLog.logRecord(actionDescription,
+                                   auditCode.getLogMessageId(),
+                                   auditCode.getSeverity(),
+                                   auditCode.getFormattedLogMessage(error.getMessage()),
+                                   null,
+                                   auditCode.getSystemAction(),
+                                   auditCode.getUserAction());
             }
         }
 
@@ -618,13 +669,39 @@ public class OMRSOperationalServices
 
 
     /**
-     * Return the connector to the AuditLog store using the connection information supplied.  If there is a
+     * Return the connectors to the AuditLog store using the connection information supplied.  If there is a
      * problem with the connection information that means a connector can not be created, an exception is thrown.
      *
-     * @param auditLogStoreConnection - properties for the audit log
+     * @param auditLogStoreConnections - properties for the audit log stores
      * @return audit log store connector
      */
-    private OMRSAuditLogStore  getAuditLogStore(Connection   auditLogStoreConnection)
+    private List<OMRSAuditLogStore>  getAuditLogStores(List<Connection> auditLogStoreConnections)
+    {
+        List<OMRSAuditLogStore>   auditLogStores = new ArrayList<>();
+
+        for (Connection auditLogStoreConnection : auditLogStoreConnections)
+        {
+            auditLogStores.add(getAuditLogStore(auditLogStoreConnection));
+        }
+
+        if (auditLogStores.isEmpty())
+        {
+            return null;
+        }
+        else
+        {
+            return auditLogStores;
+        }
+    }
+
+
+    /**
+     * Return a connector to an audit log store.
+     *
+     * @param auditLogStoreConnection - connection with the parameters of the audit log store
+     * @return connector for audit log store.
+     */
+    private OMRSAuditLogStore getAuditLogStore(Connection   auditLogStoreConnection)
     {
         try
         {
@@ -647,7 +724,7 @@ public class OMRSOperationalServices
              */
             OMRSErrorCode errorCode = OMRSErrorCode.NULL_AUDIT_LOG_STORE;
             String errorMessage = errorCode.getErrorMessageId()
-                                + errorCode.getFormattedErrorMessage(localServerName);
+                    + errorCode.getFormattedErrorMessage(localServerName);
 
             throw new OMRSConfigErrorException(errorCode.getHTTPErrorCode(),
                                                this.getClass().getName(),
@@ -660,7 +737,6 @@ public class OMRSOperationalServices
     }
 
 
-
     /**
      * Creates a topic connector using information from the supplied topic connection.  This connector supported
      * the Open Connector Framework (OCF) so it is possible to configure different connector implementations for
@@ -714,14 +790,14 @@ public class OMRSOperationalServices
      * @param openMetadataArchiveStoreConnection - properties used to create the connection
      * @return open metadata archive connector
      */
-    private OpenMetadataArchiveStore  getOpenMetadataArchiveStore(Connection   openMetadataArchiveStoreConnection)
+    private OpenMetadataArchiveStoreConnector  getOpenMetadataArchiveStore(Connection   openMetadataArchiveStoreConnection)
     {
         try
         {
             ConnectorBroker          connectorBroker = new ConnectorBroker();
             Connector                connector       = connectorBroker.getConnector(openMetadataArchiveStoreConnection);
 
-            return (OpenMetadataArchiveStore)connector;
+            return (OpenMetadataArchiveStoreConnector)connector;
         }
         catch (Throwable   error)
         {
@@ -758,7 +834,7 @@ public class OMRSOperationalServices
      * @param localRepositoryEventMapperConnection - connection to the local repository's event mapper.
      * @return local repository's event mapper
      */
-    private OMRSRepositoryEventMapper getLocalRepositoryEventMapper(Connection   localRepositoryEventMapperConnection)
+    private OMRSRepositoryEventMapperConnector getLocalRepositoryEventMapper(Connection   localRepositoryEventMapperConnection)
     {
         /*
          * If the event mapper is null it means the local repository does not need an event mapper.
@@ -778,7 +854,7 @@ public class OMRSOperationalServices
             ConnectorBroker           connectorBroker = new ConnectorBroker();
             Connector                 connector       = connectorBroker.getConnector(localRepositoryEventMapperConnection);
 
-            return (OMRSRepositoryEventMapper)connector;
+            return (OMRSRepositoryEventMapperConnector)connector;
         }
         catch (Throwable   error)
         {
@@ -830,7 +906,17 @@ public class OMRSOperationalServices
          */
         try
         {
-            return (LocalOMRSRepositoryConnector)connectorProvider.getConnector(connection);
+            LocalOMRSRepositoryConnector localRepositoryConnector = (LocalOMRSRepositoryConnector)connectorProvider.getConnector(connection);
+
+            localRepositoryConnector.setMaxPageSize(maxPageSize);
+            localRepositoryConnector.setServerName(localServerName);
+            localRepositoryConnector.setServerType(localServerType);
+            localRepositoryConnector.setOrganizationName(localOrganizationName);
+            localRepositoryConnector.setRepositoryHelper(new OMRSRepositoryHelper(localRepositoryContentManager));
+            localRepositoryConnector.setRepositoryValidator(new OMRSRepositoryValidator(localRepositoryContentManager));
+            localRepositoryConnector.setMetadataCollectionId(localMetadataCollectionId);
+
+            return localRepositoryConnector;
         }
         catch (Throwable  error)
         {

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/CohortConfig.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/CohortConfig.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/CohortConfig.java
index 5fc5983..0e6a458 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/CohortConfig.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/CohortConfig.java
@@ -18,10 +18,18 @@
 package org.apache.atlas.omrs.admin.properties;
 
 
-import org.apache.atlas.ocf.properties.Connection;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
 
 import java.util.ArrayList;
+import java.util.List;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
 
 /**
  * CohortConfig provides the configuration properties used to connect to an open metadata repository cohort.
@@ -56,6 +64,9 @@ import java.util.ArrayList;
  *     </li>
  * </ul>
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class CohortConfig
 {
     private String                           cohortName                     = null;
@@ -214,9 +225,16 @@ public class CohortConfig
      *
      * @return list of TypeDefs that determine which metadata instances to process
      */
-    public ArrayList<TypeDefSummary> getSelectedTypesToProcess()
+    public List<TypeDefSummary> getSelectedTypesToProcess()
     {
-        return selectedTypesToProcess;
+        if (selectedTypesToProcess == null)
+        {
+            return null;
+        }
+        else
+        {
+            return selectedTypesToProcess;
+        }
     }
 
 
@@ -226,8 +244,15 @@ public class CohortConfig
      *
      * @param selectedTypesToProcess - list of TypeDefs that determine which metadata instances to process
      */
-    public void setSelectedTypesToProcess(ArrayList<TypeDefSummary> selectedTypesToProcess)
+    public void setSelectedTypesToProcess(List<TypeDefSummary> selectedTypesToProcess)
     {
-        this.selectedTypesToProcess = selectedTypesToProcess;
+        if (selectedTypesToProcess == null)
+        {
+            this.selectedTypesToProcess = null;
+        }
+        else
+        {
+            this.selectedTypesToProcess = new ArrayList<>(selectedTypesToProcess);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/EnterpriseAccessConfig.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/EnterpriseAccessConfig.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/EnterpriseAccessConfig.java
index 72e84af..76576d4 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/EnterpriseAccessConfig.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/EnterpriseAccessConfig.java
@@ -17,7 +17,14 @@
  */
 package org.apache.atlas.omrs.admin.properties;
 
-import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.ocf.properties.beans.Connection;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
 
 /**
  * EnterpriseAccessConfig describes the properties that control the enterprise access services that the
@@ -36,6 +43,9 @@ import org.apache.atlas.ocf.properties.Connection;
  *     </li>
  * </ul>
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class EnterpriseAccessConfig
 {
     private String                           enterpriseMetadataCollectionName   = null;

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/LocalRepositoryConfig.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/LocalRepositoryConfig.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/LocalRepositoryConfig.java
index d35b788..25ad601 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/LocalRepositoryConfig.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/LocalRepositoryConfig.java
@@ -17,11 +17,18 @@
  */
 package org.apache.atlas.omrs.admin.properties;
 
-import org.apache.atlas.ocf.properties.Connection;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
 
 import java.util.ArrayList;
-
+import java.util.List;
 
 /**
  * LocalRepositoryConfig provides the properties to control the behavior of the metadata repository associated with
@@ -62,6 +69,9 @@ import java.util.ArrayList;
  *     </li>
  * </ul>
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class LocalRepositoryConfig
 {
     private String                    metadataCollectionId              = null;
@@ -94,18 +104,18 @@ public class LocalRepositoryConfig
                                  Connection                localRepositoryLocalConnection,
                                  Connection                localRepositoryRemoteConnection,
                                  OpenMetadataExchangeRule  eventsToSaveRule,
-                                 ArrayList<TypeDefSummary> selectedTypesToSave,
+                                 List<TypeDefSummary>      selectedTypesToSave,
                                  OpenMetadataExchangeRule  eventsToSendRule,
-                                 ArrayList<TypeDefSummary> selectedTypesToSend,
+                                 List<TypeDefSummary>      selectedTypesToSend,
                                  Connection                eventMapperConnection)
     {
         this.metadataCollectionId = metadataCollectionId;
         this.localRepositoryLocalConnection = localRepositoryLocalConnection;
         this.localRepositoryRemoteConnection = localRepositoryRemoteConnection;
         this.eventsToSaveRule = eventsToSaveRule;
-        this.selectedTypesToSave = selectedTypesToSave;
+        this.setSelectedTypesToSave(selectedTypesToSave);
         this.eventsToSendRule = eventsToSendRule;
-        this.selectedTypesToSend = selectedTypesToSend;
+        this.setSelectedTypesToSend(selectedTypesToSend);
         this.eventMapperConnection = eventMapperConnection;
     }
 
@@ -218,9 +228,16 @@ public class LocalRepositoryConfig
      *
      * @return list of types
      */
-    public ArrayList<TypeDefSummary> getSelectedTypesToSave()
+    public List<TypeDefSummary> getSelectedTypesToSave()
     {
-        return selectedTypesToSave;
+        if (selectedTypesToSave == null)
+        {
+            return null;
+        }
+        else
+        {
+            return selectedTypesToSave;
+        }
     }
 
 
@@ -229,9 +246,16 @@ public class LocalRepositoryConfig
      *
      * @param selectedTypesToSave - list of types
      */
-    public void setSelectedTypesToSave(ArrayList<TypeDefSummary> selectedTypesToSave)
+    public void setSelectedTypesToSave(List<TypeDefSummary> selectedTypesToSave)
     {
-        this.selectedTypesToSave = selectedTypesToSave;
+        if (selectedTypesToSave == null)
+        {
+            this.selectedTypesToSave = null;
+        }
+        else
+        {
+            this.selectedTypesToSave = new ArrayList<>(selectedTypesToSave);
+        }
     }
 
 
@@ -264,9 +288,16 @@ public class LocalRepositoryConfig
      *
      * @return list of types
      */
-    public ArrayList<TypeDefSummary> getSelectedTypesToSend()
+    public List<TypeDefSummary> getSelectedTypesToSend()
     {
-        return selectedTypesToSend;
+        if (selectedTypesToSend == null)
+        {
+            return null;
+        }
+        else
+        {
+            return selectedTypesToSend;
+        }
     }
 
 
@@ -275,9 +306,16 @@ public class LocalRepositoryConfig
      *
      * @param selectedTypesToSend - list of types
      */
-    public void setSelectedTypesToSend(ArrayList<TypeDefSummary> selectedTypesToSend)
+    public void setSelectedTypesToSend(List<TypeDefSummary> selectedTypesToSend)
     {
-        this.selectedTypesToSend = selectedTypesToSend;
+        if (selectedTypesToSend == null)
+        {
+            this.selectedTypesToSend = null;
+        }
+        else
+        {
+            this.selectedTypesToSend = new ArrayList<>(selectedTypesToSend);
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataEventProtocolVersion.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataEventProtocolVersion.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataEventProtocolVersion.java
index 301a589..03674d6 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataEventProtocolVersion.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataEventProtocolVersion.java
@@ -17,11 +17,20 @@
  */
 package org.apache.atlas.omrs.admin.properties;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
 
 /**
  * OpenMetadataEventProtocolVersion provides the identifier for the version number of the event payload.  There is
  * only one version at the moment which is why it looks a little sad.
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public enum OpenMetadataEventProtocolVersion
 {
     V1

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataExchangeRule.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataExchangeRule.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataExchangeRule.java
index 2bcc087..c49e5fc 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataExchangeRule.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/OpenMetadataExchangeRule.java
@@ -18,6 +18,13 @@
 package org.apache.atlas.omrs.admin.properties;
 
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
 /**
  * OpenMetadataExchangeRule controls the sending/receiving of metadata instances on the metadata highway.
  * <ul>
@@ -41,6 +48,9 @@ package org.apache.atlas.omrs.admin.properties;
  *     </li>
  * </ul>
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public enum OpenMetadataExchangeRule
 {
     REGISTRATION_ONLY (0,  "Registration Only", "Only registration exchange; no TypeDefs or metadata instances."),

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/RepositoryServicesConfig.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/RepositoryServicesConfig.java b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/RepositoryServicesConfig.java
index f7e303c..3b68afd 100644
--- a/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/RepositoryServicesConfig.java
+++ b/omrs/src/main/java/org/apache/atlas/omrs/admin/properties/RepositoryServicesConfig.java
@@ -17,9 +17,18 @@
  */
 package org.apache.atlas.omrs.admin.properties;
 
-import org.apache.atlas.ocf.properties.Connection;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
+import org.apache.atlas.ocf.properties.beans.Connection;
 
 import java.util.ArrayList;
+import java.util.List;
+
 
 /**
  * RepositoryServicesConfig provides the configuration properties that are needed by the OMRS components
@@ -31,7 +40,7 @@ import java.util.ArrayList;
  *         component should use.
  *     </li>
  *     <li>
- *         openMetadataArchiveConnectionList is a list of Open Metadata Archive Connections.
+ *         openMetadataArchiveConnections is a list of Open Metadata Archive Connections.
  *         An open metadata archive connection provides properties needed to create a connector to manage
  *         an open metadata archive.  This contains pre-built TypeDefs and metadata instance.
  *         The archives are managed by the OMRSArchiveManager.
@@ -49,13 +58,16 @@ import java.util.ArrayList;
  *     </li>
  * </ul>
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class RepositoryServicesConfig
 {
-    private Connection              auditLogConnection                = null;
-    private ArrayList<Connection>   openMetadataArchiveConnectionList = new ArrayList<>();
-    private LocalRepositoryConfig   localRepositoryConfig             = null;
-    private EnterpriseAccessConfig  enterpriseAccessConfig            = null;
-    private ArrayList<CohortConfig> cohortConfigList                  = new ArrayList<>();
+    private ArrayList<Connection>   auditLogConnections            = new ArrayList<>();
+    private ArrayList<Connection>   openMetadataArchiveConnections = new ArrayList<>();
+    private LocalRepositoryConfig   localRepositoryConfig          = null;
+    private EnterpriseAccessConfig  enterpriseAccessConfig         = null;
+    private ArrayList<CohortConfig> cohortConfigList               = new ArrayList<>();
 
 
     /**
@@ -69,24 +81,24 @@ public class RepositoryServicesConfig
     /**
      * Constructor to set all properties.
      *
-     * @param auditLogConnection - connection to the audit log.
-     * @param openMetadataArchiveConnectionList - list of open metadata archive files to load.
+     * @param auditLogConnections - connections to copies of the audit log.
+     * @param openMetadataArchiveConnections - list of open metadata archive files to load.
      * @param localRepositoryConfig - properties to configure the behavior of the local repository.
      * @param enterpriseAccessConfig - properties to configure the behavior of the federation services provided
      *                                to the Open Metadata Access Services (OMASs).
      * @param cohortConfigList - properties about the open metadata repository clusters that this server connects to.
      */
-    public RepositoryServicesConfig(Connection               auditLogConnection,
-                                    ArrayList<Connection>    openMetadataArchiveConnectionList,
+    public RepositoryServicesConfig(List<Connection>         auditLogConnections,
+                                    List<Connection>         openMetadataArchiveConnections,
                                     LocalRepositoryConfig    localRepositoryConfig,
                                     EnterpriseAccessConfig   enterpriseAccessConfig,
-                                    ArrayList<CohortConfig>  cohortConfigList)
+                                    List<CohortConfig>       cohortConfigList)
     {
-        this.auditLogConnection = auditLogConnection;
-        this.openMetadataArchiveConnectionList = openMetadataArchiveConnectionList;
-        this.localRepositoryConfig = localRepositoryConfig;
-        this.enterpriseAccessConfig = enterpriseAccessConfig;
-        this.cohortConfigList = cohortConfigList;
+        this.setAuditLogConnections(auditLogConnections);
+        this.setOpenMetadataArchiveConnections(openMetadataArchiveConnections);
+        this.setLocalRepositoryConfig(localRepositoryConfig);
+        this.setEnterpriseAccessConfig(enterpriseAccessConfig);
+        this.setCohortConfigList(cohortConfigList);
     }
 
 
@@ -95,20 +107,34 @@ public class RepositoryServicesConfig
      *
      * @return Connection object
      */
-    public Connection getAuditLogConnection()
+    public List<Connection> getAuditLogConnections()
     {
-        return auditLogConnection;
+        if (auditLogConnections == null)
+        {
+            return null;
+        }
+        else
+        {
+            return auditLogConnections;
+        }
     }
 
 
     /**
      * Set up the Connection properties used to create an OCF Connector to the AuditLog.
      *
-     * @param auditLogConnection - Connection object
+     * @param auditLogConnections - list of Connection objects
      */
-    public void setAuditLogConnection(Connection auditLogConnection)
+    public void setAuditLogConnections(List<Connection> auditLogConnections)
     {
-        this.auditLogConnection = auditLogConnection;
+        if (auditLogConnections == null)
+        {
+            this.auditLogConnections = null;
+        }
+        else
+        {
+            this.auditLogConnections = new ArrayList<>(auditLogConnections);
+        }
     }
 
 
@@ -118,9 +144,16 @@ public class RepositoryServicesConfig
      *
      * @return list of Connection objects
      */
-    public ArrayList<Connection> getOpenMetadataArchiveConnectionList()
+    public List<Connection> getOpenMetadataArchiveConnections()
     {
-        return openMetadataArchiveConnectionList;
+        if (openMetadataArchiveConnections == null)
+        {
+            return null;
+        }
+        else
+        {
+            return openMetadataArchiveConnections;
+        }
     }
 
 
@@ -128,11 +161,18 @@ public class RepositoryServicesConfig
      * Set up the list of Connection object, each of which is used to create the Connector to an Open Metadata
      * Archive.  Open Metadata Archive contains pre-built metadata types and instances.
      *
-     * @param openMetadataArchiveConnectionList - list of Connection objects
+     * @param openMetadataArchiveConnections - list of Connection objects
      */
-    public void setOpenMetadataArchiveConnectionList(ArrayList<Connection> openMetadataArchiveConnectionList)
+    public void setOpenMetadataArchiveConnections(List<Connection> openMetadataArchiveConnections)
     {
-        this.openMetadataArchiveConnectionList = openMetadataArchiveConnectionList;
+        if (openMetadataArchiveConnections == null)
+        {
+            this.openMetadataArchiveConnections = null;
+        }
+        else
+        {
+            this.openMetadataArchiveConnections = new ArrayList<>(openMetadataArchiveConnections);
+        }
     }
 
 
@@ -188,9 +228,16 @@ public class RepositoryServicesConfig
      *
      * @return list of cluster configuration properties
      */
-    public ArrayList<CohortConfig> getCohortConfigList()
+    public List<CohortConfig> getCohortConfigList()
     {
-        return cohortConfigList;
+        if (cohortConfigList == null)
+        {
+            return null;
+        }
+        else
+        {
+            return cohortConfigList;
+        }
     }
 
 
@@ -200,8 +247,15 @@ public class RepositoryServicesConfig
      *
      * @param cohortConfigList - list of cluster configuration properties
      */
-    public void setCohortConfigList(ArrayList<CohortConfig> cohortConfigList)
+    public void setCohortConfigList(List<CohortConfig> cohortConfigList)
     {
-        this.cohortConfigList = cohortConfigList;
+        if (cohortConfigList == null)
+        {
+            this.cohortConfigList = null;
+        }
+        else
+        {
+            this.cohortConfigList = new ArrayList<>(cohortConfigList);
+        }
     }
 }