aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/resources
diff options
context:
space:
mode:
authorTschaen, Brendan <ctschaen@att.com>2018-10-16 15:13:32 -0400
committerTschaen, Brendan <ctschaen@att.com>2018-10-16 15:15:16 -0400
commit73f8de325b31d350883f6752fb04d63c41112e8f (patch)
treea786305e313d8cdc040b50f995ed9342173ee571 /src/main/resources
parent389265e6342302ce5a8db5d4a3cc215e2c24c97a (diff)
Initial commit
Change-Id: I510baf73e4d35b651fb04e5b8e038dacb6a5a130 Issue-ID: MUSIC-149 Signed-off-by: Tschaen, Brendan <ctschaen@att.com>
Diffstat (limited to 'src/main/resources')
-rwxr-xr-xsrc/main/resources/META-INF/services/java.sql.Driver1
-rwxr-xr-xsrc/main/resources/log4j.properties14
-rw-r--r--src/main/resources/logback.xml370
-rwxr-xr-xsrc/main/resources/mdbc.properties12
-rw-r--r--src/main/resources/mdbc_driver.properties13
-rw-r--r--src/main/resources/music.properties8
-rwxr-xr-xsrc/main/resources/tests.json163
7 files changed, 581 insertions, 0 deletions
diff --git a/src/main/resources/META-INF/services/java.sql.Driver b/src/main/resources/META-INF/services/java.sql.Driver
new file mode 100755
index 0000000..7228fe7
--- /dev/null
+++ b/src/main/resources/META-INF/services/java.sql.Driver
@@ -0,0 +1 @@
+com.att.research.mdbc.ProxyDriver
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
new file mode 100755
index 0000000..88ee415
--- /dev/null
+++ b/src/main/resources/log4j.properties
@@ -0,0 +1,14 @@
+log4j.rootLogger=DEBUG, stdout
+
+# Direct log messages to stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+
+#log4j.appender.filelog=org.apache.log4j.DailyRollingFileAppender
+#log4j.appender.filelog.file=/tmp/log
+#log4j.appender.filelog.datePattern='.'yyyyMMdd
+#log4j.appender.filelog.append=true
+#log4j.appender.filelog.layout=org.apache.log4j.PatternLayout
+#log4j.appender.filelog.layout.ConversionPattern=%d %-5p [%t] - %m%n
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..df02405
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START==========================================
+ mdbc
+ ===================================================================
+ Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ ===================================================================
+
+ Unless otherwise specified, all software contained herein is licensed
+ under the Apache License, Version 2.0 (the “License”);
+ you may not use this software except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Unless otherwise specified, all documentation contained herein is licensed
+ under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+ you may not use this documentation except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://creativecommons.org/licenses/by/4.0/
+
+ Unless required by applicable law or agreed to in writing, documentation
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ============LICENSE_END============================================
+
+
+ -->
+
+<configuration scan="true" scanPeriod="3 seconds" debug="true">
+ <!--
+ Logback files for the mdbc Driver "mdbc"
+ are created in directory ${catalina.base}/logs/mdbc;
+ e.g., apache-tomcat-8.0.35/logs/mdbc/application.log
+ -->
+ <!--<jmxConfigurator /> -->
+
+ <!-- specify the component name -->
+ <property name="componentName" value="mdbc"></property>
+
+ <!-- specify the base path of the log directory -->
+ <property name="logDirPrefix" value="${catalina.base}/logs"></property>
+
+ <!-- The directories where logs are written -->
+ <property name="logDirectory" value="${logDirPrefix}/${componentName}" />
+ <!-- Can easily relocate debug logs by modifying this path. -->
+ <property name="debugLogDirectory" value="${logDirPrefix}/${componentName}" />
+
+ <!-- log file names -->
+ <property name="generalLogName" value="application" />
+ <property name="errorLogName" value="error" />
+ <property name="metricsLogName" value="metrics" />
+ <property name="auditLogName" value="audit" />
+ <property name="debugLogName" value="debug" />
+ <!--
+ These loggers are not used in code (yet).
+ <property name="securityLogName" value="security" />
+ <property name="policyLogName" value="policy" />
+ <property name="performanceLogName" value="performance" />
+ <property name="serverLogName" value="server" />
+ -->
+
+ <!-- 1610 Logging Fields Format Revisions -->
+ <property name="auditLoggerPattern"
+ value="%X{AuditLogBeginTimestamp}|%X{AuditLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" />
+
+ <property name="metricsLoggerPattern"
+ value="%X{MetricsLogBeginTimestamp}|%X{MetricsLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{TargetVisualEntity}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" />
+
+ <property name="errorLoggerPattern"
+ value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{ClassName}|%X{AlertSeverity}|%X{ErrorCode}|%X{ErrorDescription}| %msg%n" />
+
+ <property name="defaultLoggerPattern"
+ value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ClassName}| %msg%n" />
+
+ <!-- use %class so library logging calls yield their class name -->
+ <property name="applicationLoggerPattern"
+ value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%class{36}| %msg%n" />
+
+ <!-- Example evaluator filter applied against console appender -->
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>${defaultLoggerPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <!-- ============================================================================ -->
+ <!-- EELF Appenders -->
+ <!-- ============================================================================ -->
+
+ <!-- The EELFAppender is used to record events to the general application
+ log -->
+
+
+ <appender name="EELF"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${generalLogName}.log</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- daily rollover -->
+ <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
+
+ <!-- keep 30 days' worth of history capped at 3GB total size -->
+ <maxHistory>30</maxHistory>
+ <totalSizeCap>3GB</totalSizeCap>
+
+ </rollingPolicy>
+ <encoder>
+ <pattern>${applicationLoggerPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <!-- Class name is part of caller data -->
+ <includeCallerData>true</includeCallerData>
+ <appender-ref ref="EELF" />
+ </appender>
+
+ <!-- EELF Security Appender. This appender is used to record security events
+ to the security log file. Security events are separate from other loggers
+ in EELF so that security log records can be captured and managed in a secure
+ way separate from the other logs. This appender is set to never discard any
+ events. -->
+ <!--
+ <appender name="EELFSecurity"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${securityLogName}.log</file>
+ <rollingPolicy
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <fileNamePattern>${logDirectory}/${securityLogName}.%i.log.zip
+ </fileNamePattern>
+ <minIndex>1</minIndex>
+ <maxIndex>9</maxIndex>
+ </rollingPolicy>
+ <triggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <maxFileSize>5MB</maxFileSize>
+ </triggeringPolicy>
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="asyncEELFSecurity" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <discardingThreshold>0</discardingThreshold>
+ <appender-ref ref="EELFSecurity" />
+ </appender>
+ -->
+
+ <!-- EELF Performance Appender. This appender is used to record performance
+ records. -->
+ <!--
+ <appender name="EELFPerformance"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${performanceLogName}.log</file>
+ <rollingPolicy
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <fileNamePattern>${logDirectory}/${performanceLogName}.%i.log.zip
+ </fileNamePattern>
+ <minIndex>1</minIndex>
+ <maxIndex>9</maxIndex>
+ </rollingPolicy>
+ <triggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <maxFileSize>5MB</maxFileSize>
+ </triggeringPolicy>
+ <encoder>
+ <outputPatternAsHeader>true</outputPatternAsHeader>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+ <appender name="asyncEELFPerformance" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFPerformance" />
+ </appender>
+ -->
+
+ <!-- EELF Server Appender. This appender is used to record Server related
+ logging events. The Server logger and appender are specializations of the
+ EELF application root logger and appender. This can be used to segregate Server
+ events from other components, or it can be eliminated to record these events
+ as part of the application root log. -->
+ <!--
+ <appender name="EELFServer"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${serverLogName}.log</file>
+ <rollingPolicy
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <fileNamePattern>${logDirectory}/${serverLogName}.%i.log.zip
+ </fileNamePattern>
+ <minIndex>1</minIndex>
+ <maxIndex>9</maxIndex>
+ </rollingPolicy>
+ <triggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <maxFileSize>5MB</maxFileSize>
+ </triggeringPolicy>
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+ <appender name="asyncEELFServer" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFServer" />
+ </appender>
+ -->
+
+ <!-- EELF Policy Appender. This appender is used to record Policy engine
+ related logging events. The Policy logger and appender are specializations
+ of the EELF application root logger and appender. This can be used to segregate
+ Policy engine events from other components, or it can be eliminated to record
+ these events as part of the application root log. -->
+ <!--
+ <appender name="EELFPolicy"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${policyLogName}.log</file>
+ <rollingPolicy
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <fileNamePattern>${logDirectory}/${policyLogName}.%i.log.zip
+ </fileNamePattern>
+ <minIndex>1</minIndex>
+ <maxIndex>9</maxIndex>
+ </rollingPolicy>
+ <triggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <maxFileSize>5MB</maxFileSize>
+ </triggeringPolicy>
+ <encoder>
+ <pattern>${defaultPattern}</pattern>
+ </encoder>
+ </appender>
+ <appender name="asyncEELFPolicy" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFPolicy" />
+ </appender>
+ -->
+
+ <!-- EELF Audit Appender. This appender is used to record audit engine
+ related logging events. The audit logger and appender are specializations
+ of the EELF application root logger and appender. This can be used to segregate
+ Policy engine events from other components, or it can be eliminated to record
+ these events as part of the application root log. -->
+
+ <appender name="EELFAudit"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${auditLogName}.log</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- daily rollover -->
+ <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
+
+ <!-- keep 30 days' worth of history capped at 3GB total size -->
+ <maxHistory>30</maxHistory>
+ <totalSizeCap>3GB</totalSizeCap>
+
+ </rollingPolicy>
+ <encoder>
+ <pattern>${auditLoggerPattern}</pattern>
+ </encoder>
+ </appender>
+ <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFAudit" />
+ </appender>
+
+ <appender name="EELFMetrics"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${metricsLogName}.log</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- daily rollover -->
+ <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
+
+ <!-- keep 30 days' worth of history capped at 3GB total size -->
+ <maxHistory>30</maxHistory>
+ <totalSizeCap>3GB</totalSizeCap>
+
+ </rollingPolicy>
+ <encoder>
+ <pattern>${metricsLoggerPattern}</pattern>
+ </encoder>
+ </appender>
+
+
+ <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFMetrics"/>
+ </appender>
+
+ <appender name="EELFError"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logDirectory}/${errorLogName}.log</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- daily rollover -->
+ <fileNamePattern>${logDirectory}/${errorLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
+
+ <!-- keep 30 days' worth of history capped at 3GB total size -->
+ <maxHistory>30</maxHistory>
+ <totalSizeCap>3GB</totalSizeCap>
+
+ </rollingPolicy>
+ <encoder>
+ <pattern>${errorLoggerPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="asyncEELFError" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFError"/>
+ </appender>
+
+ <appender name="EELFDebug"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${debugLogDirectory}/${debugLogName}.log</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- daily rollover -->
+ <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
+
+ <!-- keep 30 days' worth of history capped at 3GB total size -->
+ <maxHistory>30</maxHistory>
+ <totalSizeCap>3GB</totalSizeCap>
+
+ </rollingPolicy>
+ <encoder>
+ <pattern>${defaultLoggerPattern}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
+ <queueSize>256</queueSize>
+ <appender-ref ref="EELFDebug" />
+ </appender>
+
+
+
+
+ <logger name="com.att.eelf" level="info" additivity="false">
+ <appender-ref ref="asyncEELF" />
+ </logger>
+
+ <logger name="com.att.eelf" level="info" additivity="false">
+ <appender-ref ref="asyncEELFAudit" />
+ </logger>
+
+ <logger name="com.att.eelf" level="debug" additivity="false">
+ <appender-ref ref="asyncEELFDebug" />
+ </logger>
+
+ <logger name="com.att.eelf.error" level="info" additivity="false">
+ <appender-ref ref="asyncEELFError" />
+ </logger>
+
+ <logger name="com.att.eelf.metrics" level="info" additivity="false">
+ <appender-ref ref="asyncEELFMetrics" />
+ </logger>
+
+ <root level="DEBUG">
+ <appender-ref ref="asyncEELF" />
+ </root>
+
+</configuration>
diff --git a/src/main/resources/mdbc.properties b/src/main/resources/mdbc.properties
new file mode 100755
index 0000000..f6e722c
--- /dev/null
+++ b/src/main/resources/mdbc.properties
@@ -0,0 +1,12 @@
+#
+# A list of all Mixins that should be checked by MDBC
+#
+MIXINS= \
+ com.att.research.mdbc.mixins.H2Mixin \
+ com.att.research.mdbc.mixins.H2ServerMixin \
+ com.att.research.mdbc.mixins.MySQLMixin \
+ com.att.research.mdbc.mixins.CassandraMixin \
+ com.att.research.mdbc.mixins.Cassandra2Mixin
+
+critical.tables= \
+ TEST \ No newline at end of file
diff --git a/src/main/resources/mdbc_driver.properties b/src/main/resources/mdbc_driver.properties
new file mode 100644
index 0000000..1549d5f
--- /dev/null
+++ b/src/main/resources/mdbc_driver.properties
@@ -0,0 +1,13 @@
+#
+# A list of all Mixins that should be checked by MDBC
+#
+MIXINS= \
+ com.att.research.mdbc.mixins.H2Mixin \
+ com.att.research.mdbc.mixins.H2ServerMixin \
+ com.att.research.mdbc.mixins.MySQLMixin \
+ com.att.research.mdbc.mixins.CassandraMixin \
+ com.att.research.mdbc.mixins.Cassandra2Mixin
+
+DEFAULT_DRIVERS=\
+ org.h2.Driver \
+ com.mysql.jdbc.Driver \ No newline at end of file
diff --git a/src/main/resources/music.properties b/src/main/resources/music.properties
new file mode 100644
index 0000000..204e3f6
--- /dev/null
+++ b/src/main/resources/music.properties
@@ -0,0 +1,8 @@
+cassandra.host =\
+ 143.215.128.49
+cassandra.user =\
+ cassandra
+cassandra.password =\
+ cassandra
+zookeeper.host =\
+ localhost \ No newline at end of file
diff --git a/src/main/resources/tests.json b/src/main/resources/tests.json
new file mode 100755
index 0000000..ac9221e
--- /dev/null
+++ b/src/main/resources/tests.json
@@ -0,0 +1,163 @@
+{
+ "tests": [
+ "com.att.research.mdbc.tests.Test_Insert",
+ "com.att.research.mdbc.tests.Test_Delete",
+ "com.att.research.mdbc.tests.Test_Transactions"
+ ],
+ "configs": [
+ {
+ "description": "H2 with Cassandra with two connections",
+ "MDBC_DB_MIXIN": "h2",
+ "MDBC_MUSIC_MIXIN": "cassandra",
+ "replicas": "0,1",
+ "music_keyspace": "mdbctest1",
+ "music_address": "localhost",
+ "music_rfactor": "1",
+ "connections": [
+ {
+ "name": "Connection 0",
+ "url": "jdbc:mdbc:mem:db0",
+ "user": "",
+ "password": "",
+ "myid": "0"
+ },
+ {
+ "name": "Connection 1",
+ "url": "jdbc:mdbc:mem:db1",
+ "user": "",
+ "password": "",
+ "myid": "1"
+ }
+ ]
+ },
+ {
+ "description": "H2 with Cassandra2 with three connections",
+ "MDBC_DB_MIXIN": "h2",
+ "MDBC_MUSIC_MIXIN": "cassandra2",
+ "replicas": "0,1,2",
+ "music_keyspace": "mdbctest2",
+ "music_address": "localhost",
+ "music_rfactor": "1",
+ "user": "",
+ "password": "",
+ "connections": [
+ {
+ "name": "Connection 0",
+ "url": "jdbc:mdbc:mem:db0",
+ "myid": "0"
+ },
+ {
+ "name": "Connection 1",
+ "url": "jdbc:mdbc:mem:db1",
+ "myid": "1"
+ },
+ {
+ "name": "Connection 2",
+ "url": "jdbc:mdbc:mem:db2",
+ "myid": "2"
+ }
+ ]
+ },
+ {
+ "description": "H2 Server with Cassandra2 with two connections",
+ "MDBC_DB_MIXIN": "h2server",
+ "MDBC_MUSIC_MIXIN": "cassandra2",
+ "replicas": "0,1",
+ "music_keyspace": "mdbctest3",
+ "music_address": "localhost",
+ "music_rfactor": "1",
+ "connections": [
+ {
+ "name": "Connection 0",
+ "url": "jdbc:mdbc:tcp://localhost/mdbc0",
+ "user": "",
+ "password": "",
+ "myid": "0"
+ },
+ {
+ "name": "Connection 1",
+ "url": "jdbc:mdbc:tcp://localhost/mdbc1",
+ "user": "",
+ "password": "",
+ "myid": "1"
+ }
+ ]
+ },
+ {
+ "description": "MySQL with Cassandra2 with two connections",
+ "MDBC_DB_MIXIN": "mysql",
+ "MDBC_MUSIC_MIXIN": "cassandra2",
+ "replicas": "0,1,2",
+ "music_keyspace": "mdbctest4",
+ "music_address": "localhost",
+ "music_rfactor": "1",
+ "user": "root",
+ "password": "abc123",
+ "connections": [
+ {
+ "name": "Connection 0",
+ "url": "jdbc:mdbc://127.0.0.1:3306/mdbc",
+ "myid": "0"
+ },
+ {
+ "name": "Connection 1",
+ "url": "jdbc:mdbc://127.0.0.1:3306/mdbc2",
+ "myid": "1"
+ }
+ ]
+ },
+ {
+ "description": "H2 (DB #1) and MySQL (DB #2) with Cassandra2",
+ "MDBC_MUSIC_MIXIN": "cassandra2",
+ "replicas": "0,1",
+ "music_keyspace": "mdbctest5",
+ "music_address": "localhost",
+ "music_rfactor": "1",
+ "connections": [
+ {
+ "name": "Connection 0",
+ "MDBC_DB_MIXIN": "h2",
+ "url": "jdbc:mdbc:mem:db9",
+ "user": "",
+ "password": "",
+ "myid": "0"
+ },
+ {
+ "name": "Connection 1",
+ "MDBC_DB_MIXIN": "mysql",
+ "url": "jdbc:mdbc://127.0.0.1:3306/mdbc3",
+ "user": "root",
+ "password": "abc123",
+ "myid": "1"
+ }
+ ]
+ }
+ ],
+ "zconfigs": [
+ {
+ "description": "H2 Server with Cassandra2 with two connections",
+ "MDBC_DB_MIXIN": "h2server",
+ "MDBC_MUSIC_MIXIN": "cassandra2",
+ "replicas": "0,1",
+ "music_keyspace": "mdbctest3",
+ "music_address": "localhost",
+ "music_rfactor": "1",
+ "connections": [
+ {
+ "name": "Connection 0",
+ "url": "jdbc:mdbc:tcp://localhost/mdbc0",
+ "user": "",
+ "password": "",
+ "myid": "0"
+ },
+ {
+ "name": "Connection 1",
+ "url": "jdbc:mdbc:tcp://localhost/mdbc1",
+ "user": "",
+ "password": "",
+ "myid": "1"
+ }
+ ]
+ }
+ ]
+}