Skip to content

Commit 4dfe9d8

Browse files
committed
[feature] Backported Connection Pooling SQL Module from FusionDB
1 parent 817a700 commit 4dfe9d8

File tree

8 files changed

+321
-147
lines changed

8 files changed

+321
-147
lines changed

exist-core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,10 @@
428428
<groupId>com.zaxxer</groupId>
429429
<artifactId>HikariCP-java6</artifactId>
430430
</exclusion>
431+
<exclusion>
432+
<groupId>com.zaxxer</groupId>
433+
<artifactId>HikariCP-java7</artifactId>
434+
</exclusion>
431435
</exclusions>
432436
</dependency>
433437

exist-core/src/main/java/org/exist/xquery/modules/ModuleUtils.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -397,21 +397,21 @@ public void modify(Map<Long, T> map) {
397397
* @param <T> the class of the object being stored
398398
* @return A unique ID representing the Object
399399
*/
400-
public static <T> long storeObjectInContextMap(XQueryContext context, String contextMapName, T o) {
400+
public static <T> long storeObjectInContextMap(final XQueryContext context, final String contextMapName, final T o) {
401401

402402
try(final ManagedLock<ReadWriteLock> writeLock = ManagedLock.acquire(contextMapLocks.getLock(contextMapName), LockMode.WRITE_LOCK)) {
403403

404404
// get the existing map from the context
405405
Map<Long, T> map = (Map<Long, T>)context.getAttribute(contextMapName);
406406

407-
if(map == null) {
407+
if (map == null) {
408408
// if there is no map, create a new one
409409
map = new HashMap<>();
410410
}
411411

412412
// get an id for the map
413413
long uid = 0;
414-
while(uid == 0 || map.keySet().contains(uid)) {
414+
while (uid == 0 || map.keySet().contains(uid)) {
415415
uid = getUID();
416416
}
417417

@@ -421,7 +421,7 @@ public static <T> long storeObjectInContextMap(XQueryContext context, String con
421421
// store the map back in the context
422422
context.setAttribute(contextMapName, map);
423423

424-
return (uid);
424+
return uid;
425425
}
426426
}
427427

exist-distribution/src/main/config/conf.xml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,38 @@
10041004
<module uri="http://exist-db.org/xquery/process" class="org.exist.xquery.modules.process.ProcessModule"/>
10051005
<module uri="http://exist-db.org/xquery/scheduler" class="org.exist.xquery.modules.scheduler.SchedulerModule"/>
10061006
<module uri="http://exist-db.org/xquery/simple-ql" class="org.exist.xquery.modules.simpleql.SimpleQLModule"/>
1007-
<module uri="http://exist-db.org/xquery/sql" class="org.exist.xquery.modules.sql.SQLModule"/>
1007+
<module uri="http://exist-db.org/xquery/sql" class="org.exist.xquery.modules.sql.SQLModule">
1008+
1009+
<!--
1010+
Connection Pools can be setup for SQL connections, for use with sql:get-connection-from-pool($pool-name)
1011+
Each pool has a name and a number of configuration properties.
1012+
The HikariCP Connection Pool is used, you can find its configuration options
1013+
here: https://github.com/brettwooldridge/HikariCP#gear-configuration-knobs-baby
1014+
1015+
You can specify the username and password for a connection here, or you may specify it
1016+
when you call sql:get-connection-from-pool($pool-name, $username, $password).
1017+
-->
1018+
1019+
<!--
1020+
<parameter name="pool.1.name" value="pool-1"/>
1021+
<parameter name="pool.1.properties.dataSourceClassName" value="org.postgresql.ds.PGSimpleDataSource"/>
1022+
<parameter name="pool.1.properties.dataSource.user" value="my-username"/>
1023+
<parameter name="pool.1.properties.dataSource.password" value="my-password"/>
1024+
<parameter name="pool.1.properties.dataSource.databaseName" value="my-db"/>
1025+
<parameter name="pool.1.properties.maximumPoolSize" value="10"/>
1026+
<parameter name="pool.1.properties.registerMbeans" value="false"/>
1027+
-->
1028+
1029+
<!--
1030+
<parameter name="pool.2.name" value="pool-2"/>
1031+
<parameter name="pool.2.properties.dataSourceClassName" value="org.mariadb.jdbc.MariaDbDataSource"/>
1032+
<parameter name="pool.2.properties.dataSource.user" value="my-other-username"/>
1033+
<parameter name="pool.2.properties.dataSource.password" value="my-other-password"/>
1034+
<parameter name="pool.2.properties.dataSource.databaseName" value="other-db"/>
1035+
<parameter name="pool.2.properties.maximumPoolSize" value="10"/>
1036+
<parameter name="pool.2.properties.registerMbeans" value="false"/>
1037+
-->
1038+
</module>
10081039
<module uri="http://exist-db.org/xquery/xmldiff" class="org.exist.xquery.modules.xmldiff.XmlDiffModule"/>
10091040
<!--
10101041
XSL:FO Transformation Module

extensions/modules/sql/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@
7272
<artifactId>jsr305</artifactId>
7373
</dependency>
7474

75+
<dependency>
76+
<groupId>com.zaxxer</groupId>
77+
<artifactId>HikariCP</artifactId>
78+
<version>4.0.3</version>
79+
</dependency>
80+
7581
<dependency>
7682
<groupId>junit</groupId>
7783
<artifactId>junit</artifactId>
@@ -131,6 +137,8 @@
131137
-->
132138
<header>${project.parent.relativePath}/LGPL-21-license.template.txt</header>
133139
<excludes>
140+
<exclude>src/main/java/org/exist/xquery/modules/sql/GetConnectionFunction.java</exclude>
141+
<exclude>src/main/java/org/exist/xquery/modules/sql/SQLModule.java</exclude>
134142
<exclude>src/test/resources/jndi.properties</exclude>
135143
<exclude>src/test/java/org/exist/xquery/modules/sql/ConnectionIT.java</exclude>
136144
<exclude>src/test/java/org/exist/xquery/modules/sql/H2DatabaseResource.java</exclude>
@@ -144,6 +152,8 @@
144152
-->
145153
<header>${project.parent.relativePath}/FDB-backport-LGPL-21-ONLY-license.template.txt</header>
146154
<includes>
155+
<include>src/main/java/org/exist/xquery/modules/sql/GetConnectionFunction.java</include>
156+
<include>src/main/java/org/exist/xquery/modules/sql/SQLModule.java</include>
147157
<include>src/test/resources/jndi.properties</include>
148158
<include>src/test/java/org/exist/xquery/modules/sql/ConnectionIT.java</include>
149159
<include>src/test/java/org/exist/xquery/modules/sql/H2DatabaseResource.java</include>

0 commit comments

Comments
 (0)