diff --git a/pom.xml b/pom.xml
index 222100829e..9dacc890b4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
1.11.2
2.14
- 1.16.1
+ 1.19.1
3.1.2
4.0.0
2.12.7
@@ -200,7 +200,7 @@
/WebAPI
- 1.17.3
+ 1.17.4
2.25.1
600000
12
@@ -1859,6 +1859,20 @@
+
+ webapi-iris
+
+ true
+ 3.10.2
+
+
+
+ com.intersystems
+ intersystems-jdbc
+ ${iris.driver.version}
+
+
+
webapi-gis
diff --git a/src/main/extras/iris/README.md b/src/main/extras/iris/README.md
new file mode 100644
index 0000000000..f59f307144
--- /dev/null
+++ b/src/main/extras/iris/README.md
@@ -0,0 +1,46 @@
+# Using WebAPI with InterSystems IRIS support
+
+## Building WebAPI
+
+To build WebAPI with InterSystems IRIS support, you can simply use the `webapi-iris` profile
+when building WebAPI with Maven:
+
+```Shell
+mvn -Pwebapi-postgresql,webapi-iris clean package
+```
+
+or on Windows PowerShell:
+```Shell
+mvn "-Pwebapi-postgresql,webapi-iris" clean package
+```
+
+This will automatically download and package a recent version of the InterSystems IRIS JDBC
+driver from Maven Central.
+
+Alternatively, the JDBC driver for InterSystems IRIS can be found in the `dev/java/lib/1.8/`
+subfolder of your IRIS installation, or as a download from InterSystems Cloud Services portal.
+
+
+## Sample configuration
+
+When configuring Atlas / WebAPI to access CDM on IRIS over a secure connection, your source
+registration looks like this:
+```SQL
+INSERT INTO webapi.source (source_id, source_name, source_key, source_connection, source_dialect, username, password)
+ VALUES (<#>, 'OHDSI IRIS Database', 'IRIS', 'jdbc:IRIS://.elb.us-west-2.amazonaws.com:443/USER/:::true',
+ 'iris', '','');
+```
+
+For a non-encrypted, local connection, this may look like:
+```SQL
+INSERT INTO webapi.source (source_id, source_name, source_key, source_connection, source_dialect, username, password)
+ VALUES (<#>, 'OHDSI IRIS Database', 'IRIS', 'jdbc:IRIS://localhost:1972/USER/', 'iris', '_SYSTEM_','SYS');
+```
+
+
+## References
+
+For more information on how to connect to InterSystems IRIS or InterSystems IRIS Cloud SQL, please see:
+* [Connecting your applications to Cloud SQL](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=GDRIVE_cloudsql)
+* [Troubleshooting connection issues](https://docs.intersystems.com/services/csp/docbook/DocBook.UI.Page.cls?KEY=ACTS)
+* [InterSystems fork for OHDSI Broadsea](https://github.com/isc-krakshith/InterSystems-Broadsea/)
\ No newline at end of file
diff --git a/src/main/java/org/ohdsi/webapi/DataAccessConfig.java b/src/main/java/org/ohdsi/webapi/DataAccessConfig.java
index 8bc4e438dc..aac8f7a7e0 100644
--- a/src/main/java/org/ohdsi/webapi/DataAccessConfig.java
+++ b/src/main/java/org/ohdsi/webapi/DataAccessConfig.java
@@ -82,7 +82,7 @@ public DataSource primaryDataSource() {
//note autocommit defaults vary across vendors. use provided @Autowired TransactionTemplate
String[] supportedDrivers;
- supportedDrivers = new String[]{"org.postgresql.Driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "oracle.jdbc.driver.OracleDriver", "com.amazon.redshift.jdbc.Driver", "com.cloudera.impala.jdbc.Driver", "net.starschema.clouddb.jdbc.BQDriver", "org.netezza.Driver", "com.simba.googlebigquery.jdbc42.Driver", "org.apache.hive.jdbc.HiveDriver", "com.simba.spark.jdbc.Driver", "net.snowflake.client.jdbc.SnowflakeDriver", "com.databricks.client.jdbc.Driver"};
+ supportedDrivers = new String[]{"org.postgresql.Driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "oracle.jdbc.driver.OracleDriver", "com.amazon.redshift.jdbc.Driver", "com.cloudera.impala.jdbc.Driver", "net.starschema.clouddb.jdbc.BQDriver", "org.netezza.Driver", "com.simba.googlebigquery.jdbc42.Driver", "org.apache.hive.jdbc.HiveDriver", "com.simba.spark.jdbc.Driver", "net.snowflake.client.jdbc.SnowflakeDriver", "com.databricks.client.jdbc.Driver", "com.intersystems.jdbc.IRISDriver"};
for (String driverName : supportedDrivers) {
try {
Class.forName(driverName);
diff --git a/src/main/java/org/ohdsi/webapi/util/CancelableJdbcTemplate.java b/src/main/java/org/ohdsi/webapi/util/CancelableJdbcTemplate.java
index a7ebb3d39e..f7d85d7e29 100644
--- a/src/main/java/org/ohdsi/webapi/util/CancelableJdbcTemplate.java
+++ b/src/main/java/org/ohdsi/webapi/util/CancelableJdbcTemplate.java
@@ -156,6 +156,8 @@ private boolean supportsBatchUpdates(Connection connection) throws SQLException
// NOTE:
// com.cloudera.impala.hivecommon.dataengine.HiveJDBCDataEngine.prepareBatch throws NOT_IMPLEMENTED exception
- return JdbcUtils.supportsBatchUpdates(connection) && !connection.getMetaData().getURL().startsWith("jdbc:impala");
+ return JdbcUtils.supportsBatchUpdates(connection)
+ && !connection.getMetaData().getURL().startsWith("jdbc:impala")
+ && !connection.getMetaData().getURL().startsWith("jdbc:IRIS");
}
}
diff --git a/src/main/resources/i18n/messages_en.json b/src/main/resources/i18n/messages_en.json
index e4ea6edf60..d7907df868 100644
--- a/src/main/resources/i18n/messages_en.json
+++ b/src/main/resources/i18n/messages_en.json
@@ -2601,7 +2601,8 @@
"sqlserver": "SQL server",
"synapse": "Azure Synapse",
"snowflake": "Snowflake",
- "spark": "Apache Spark"
+ "spark": "Apache Spark",
+ "iris": "InterSystems IRIS"
},
"title": "Source dialect"
},
diff --git a/src/main/resources/i18n/messages_ko.json b/src/main/resources/i18n/messages_ko.json
index 9ec9712441..dfdae985f6 100644
--- a/src/main/resources/i18n/messages_ko.json
+++ b/src/main/resources/i18n/messages_ko.json
@@ -2600,7 +2600,8 @@
"sqlserver": "SQL server",
"synapse": "Azure Synapse",
"snowflake": "Snowflake",
- "spark": "Apache Spark"
+ "spark": "Apache Spark",
+ "iris": "InterSystems IRIS"
},
"title": "소스 dialect"
},
diff --git a/src/main/resources/i18n/messages_ru.json b/src/main/resources/i18n/messages_ru.json
index aae125875e..988c2210f2 100644
--- a/src/main/resources/i18n/messages_ru.json
+++ b/src/main/resources/i18n/messages_ru.json
@@ -2514,7 +2514,8 @@
"hive": "Hive LLAP",
"synapse": "Azure Synapse",
"snowflake": "Snowflake",
- "spark": "Apache Spark"
+ "spark": "Apache Spark",
+ "iris": "InterSystems IRIS"
}
},
"connectionString": {
diff --git a/src/main/resources/i18n/messages_zh.json b/src/main/resources/i18n/messages_zh.json
index 207cfcd706..1236c946a0 100644
--- a/src/main/resources/i18n/messages_zh.json
+++ b/src/main/resources/i18n/messages_zh.json
@@ -2600,7 +2600,8 @@
"sqlserver": "SQL服务器",
"synapse": "Azure Synapse",
"snowflake": "Snowflake",
- "spark": "Apache Spark"
+ "spark": "Apache Spark",
+ "iris": "InterSystems IRIS"
},
"title": "源语言"
},
diff --git a/src/test/java/org/ohdsi/webapi/util/DataSourceDTOParserTest.java b/src/test/java/org/ohdsi/webapi/util/DataSourceDTOParserTest.java
index 40fa1b3a70..54954b3365 100644
--- a/src/test/java/org/ohdsi/webapi/util/DataSourceDTOParserTest.java
+++ b/src/test/java/org/ohdsi/webapi/util/DataSourceDTOParserTest.java
@@ -29,6 +29,7 @@ public class DataSourceDTOParserTest {
public static final String ORACLE_WO_PWD_CONN_STR = "jdbc:oracle:thin:@myhost:1521:orcl";
public static final String ORACLE_WITH_PWD_CONN_STR = "jdbc:oracle:thin:scott/tiger@myhost:1521:orcl";
public static final String HIVE_CONN_STR = "jdbc:hive2://sandbox-hdp.hortonworks.com:2181/synpuf_531_orc;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2";
+ public static final String IRIS_CONN_STR = "jdbc:IRIS://localhost:1972/USER";
@Test
public void parseDTO() {
@@ -110,6 +111,12 @@ public void parseDTO() {
assertThat(dto.getConnectionString(), is(HIVE_CONN_STR));
assertThat(dto.getUsername(), is(nullValue()));
assertThat(dto.getPassword(), is(nullValue()));
+
+ dto = DataSourceDTOParser.parseDTO(getIRISSource());
+ assertThat(dto.getType(), is(DBMSType.IRIS));
+ assertThat(dto.getConnectionString(), is(IRIS_CONN_STR));
+ assertThat(dto.getUsername(), is(nullValue()));
+ assertThat(dto.getPassword(), is(nullValue()));
}
private Source getPostgreSQLPasswordSource() {
@@ -204,4 +211,11 @@ private Source getHiveSource() {
source.setSourceConnection(HIVE_CONN_STR);
return source;
}
+
+ private Source getIRISSource() {
+ Source source = new Source();
+ source.setSourceDialect("iris");
+ source.setSourceConnection(IRIS_CONN_STR);
+ return source;
+ }
}
\ No newline at end of file