From 9dfe7b82f16c006abe6b12e94d55e667fdec48ca Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 12:46:28 +0100 Subject: [PATCH 01/22] Provide @DataSourceDefinition for app-level DB config. #7418 The JNDI names have been changed to be conform with Java EE 7. See https://github.com/javaee-samples/javaee7-samples/tree/master/jpa/datasourcedefinition-applicationxml-pu and others for working examples. (Staying with the old name was not successfull.) --- .../flyway/StartupFlywayMigrator.java | 2 +- .../iq/dataverse/util/DataSourceProducer.java | 30 +++++++++++++++++++ src/main/resources/META-INF/persistence.xml | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java diff --git a/src/main/java/edu/harvard/iq/dataverse/flyway/StartupFlywayMigrator.java b/src/main/java/edu/harvard/iq/dataverse/flyway/StartupFlywayMigrator.java index d5f4f8520a7..71b53bd43f2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/flyway/StartupFlywayMigrator.java +++ b/src/main/java/edu/harvard/iq/dataverse/flyway/StartupFlywayMigrator.java @@ -15,7 +15,7 @@ @TransactionManagement(value = TransactionManagementType.BEAN) public class StartupFlywayMigrator { - @Resource(lookup = "jdbc/VDCNetDS") + @Resource(lookup = "java:app/jdbc/dataverse") private DataSource dataSource; @PostConstruct diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java new file mode 100644 index 00000000000..f167b62dcd3 --- /dev/null +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -0,0 +1,30 @@ +package edu.harvard.iq.dataverse.util; + +import javax.annotation.Resource; +import javax.annotation.sql.DataSourceDefinition; +import javax.enterprise.inject.Produces; +import javax.inject.Singleton; +import javax.sql.DataSource; + +@Singleton +@DataSourceDefinition( + name = "java:app/jdbc/dataverse", + // Using PGXADataSource instead of deprecated PGPoolingDataSource + className = "org.postgresql.xa.PGXADataSource", + user = "dataverse", + password = "${ALIAS=db_password_alias}", + serverName = "postgresql", + portNumber = 5432, + databaseName = "dataverse", + minPoolSize = 10, + maxPoolSize = 200) +public class DataSourceProducer { + + @Resource(lookup="java:app/jdbc/dataverse") + DataSource ds; + + @Produces + public DataSource getDatasource() { + return ds; + } +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 8b4e33858ac..72e61b83374 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -3,7 +3,7 @@ org.eclipse.persistence.jpa.PersistenceProvider - jdbc/VDCNetDS + java:app/jdbc/dataverse From b92e465d3e1c1f63f631d4337c5ba19f4c864037 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 12:49:38 +0100 Subject: [PATCH 02/22] Make the DataSourceDefinition configureable using MicroProfile Config variables in annotation options. #7418 #7000 --- .../harvard/iq/dataverse/util/DataSourceProducer.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index f167b62dcd3..24f0d8a43fe 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -11,11 +11,10 @@ name = "java:app/jdbc/dataverse", // Using PGXADataSource instead of deprecated PGPoolingDataSource className = "org.postgresql.xa.PGXADataSource", - user = "dataverse", - password = "${ALIAS=db_password_alias}", - serverName = "postgresql", - portNumber = 5432, - databaseName = "dataverse", + user = "${MPCONFIG=dataverse.db.user}", + password = "${MPCONFIG=dataverse.db.password}", + serverName = "${MPCONFIG=dataverse.db.host}", + url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", minPoolSize = 10, maxPoolSize = 200) public class DataSourceProducer { From 3c92120a37f2f54a6b484aa12072b13d9c3a23a9 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 12:53:07 +0100 Subject: [PATCH 03/22] Add defaults for the database connection using a MicroProfile Config file on classpath. #7418 #7000 --- pom.xml | 1 + src/main/resources/META-INF/microprofile-config.properties | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 src/main/resources/META-INF/microprofile-config.properties diff --git a/pom.xml b/pom.xml index 37e78b30933..ca968ff365d 100644 --- a/pom.xml +++ b/pom.xml @@ -679,6 +679,7 @@ **/*.xml **/firstNames/*.* **/*.xsl + **/*.properties diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties new file mode 100644 index 00000000000..ec658cf5c65 --- /dev/null +++ b/src/main/resources/META-INF/microprofile-config.properties @@ -0,0 +1,4 @@ +dataverse.db.host=localhost +dataverse.db.port=5432 +dataverse.db.user=dataverse +dataverse.db.name=dataverse \ No newline at end of file From d05cbaf578cfddaeacc2a84b76f012ea20c06266 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 13:01:32 +0100 Subject: [PATCH 04/22] Remove stale persistence unit from persistence.xml. #7418 --- src/main/resources/META-INF/persistence.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 72e61b83374..45552f36939 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -20,15 +20,4 @@ - From 19c5e98324fd468faa26000ecec8b036fa449490 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 13:16:43 +0100 Subject: [PATCH 05/22] Refactor as-setup.sh installer to use the MPCONFIG based database connection configuration. #7418 --- scripts/installer/as-setup.sh | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/scripts/installer/as-setup.sh b/scripts/installer/as-setup.sh index 84a5f84b677..f7f546b31df 100755 --- a/scripts/installer/as-setup.sh +++ b/scripts/installer/as-setup.sh @@ -73,7 +73,7 @@ function preliminary_setup() ./asadmin $ASADMIN_OPTS create-jvm-options "-XX\:+DisableExplicitGC" # alias passwords - for alias in "rserve_password_alias ${RSERVE_PASS}" "doi_password_alias ${DOI_PASSWORD}" "db_password_alias ${DB_PASS}" + for alias in "rserve_password_alias ${RSERVE_PASS}" "doi_password_alias ${DOI_PASSWORD}" "dataverse.db.password ${DB_PASS}" do set -- $alias echo "AS_ADMIN_ALIASPASSWORD=$2" > /tmp/$1.txt @@ -150,17 +150,11 @@ function final_setup(){ ./asadmin $ASADMIN_OPTS delete-jvm-options -Xmx512m ./asadmin $ASADMIN_OPTS create-jvm-options "-Xmx${MEM_HEAP_SIZE}m" - - ./asadmin $ASADMIN_OPTS create-jdbc-connection-pool --restype javax.sql.DataSource \ - --datasourceclassname org.postgresql.ds.PGPoolingDataSource \ - --property create=true:User=$DB_USER:PortNumber=$DB_PORT:databaseName=$DB_NAME:ServerName=$DB_HOST \ - dvnDbPool - - ./asadmin $ASADMIN_OPTS set resources.jdbc-connection-pool.dvnDbPool.property.password='${ALIAS=db_password_alias}' - - ### - # Create data sources - ./asadmin $ASADMIN_OPTS create-jdbc-resource --connectionpoolid dvnDbPool jdbc/VDCNetDS + # Set up the database connection properties + ./asadmin $ASADMIN_OPTS create-system-properties "dataverse.db.user=${DB_USER}" + ./asadmin $ASADMIN_OPTS create-system-properties "dataverse.db.host=${DB_HOST}" + ./asadmin $ASADMIN_OPTS create-system-properties "dataverse.db.port=${DB_PORT}" + ./asadmin $ASADMIN_OPTS create-system-properties "dataverse.db.name=${DB_NAME}" ### # Set up the data source for the timers From b6468313e6971792eae8a02520ed9acaec78557a Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 13:22:49 +0100 Subject: [PATCH 06/22] Add docs about the new MPCONFIG based database properties to config doc. #7418 --- .../source/installation/config.rst | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index abf710e42e0..9ae5ec8fe7e 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -1032,6 +1032,50 @@ dataverse.auth.password-reset-timeout-in-minutes Users have 60 minutes to change their passwords by default. You can adjust this value here. +dataverse.db.user ++++++++++++++++++ + +The PostgreSQL user name to connect with. + +Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_USER``. +Defaults to ``dataverse`` (via ``microprofile-config.properties``). + +dataverse.db.password ++++++++++++++++++++++ + +The PostgreSQL users password to connect with. + +Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_PASSWORD``. +Preferrably use a JVM alias, as passwords in environment variables aren't safe! + +.. code-block:: shell + echo "AS_ADMIN_ALIASPASSWORD=change-me-super-secret" > /tmp/password.txt + asadmin create-password-alias --passwordfile /tmp/password.txt dataverse.db.password + rm /tmp/password.txt +dataverse.db.host ++++++++++++++++++ + +The PostgreSQL server to connect to. + +Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_HOST``. +Defaults to ``localhost`` (via ``microprofile-config.properties``). + +dataverse.db.port ++++++++++++++++++ + +The PostgreSQL servers port to connect to. + +Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_PORT``. +Defaults to ``5432`` (via ``microprofile-config.properties``), the default PostgreSQL port. + +dataverse.db.name ++++++++++++++++++ + +The PostgreSQL database name to use for Dataverse. + +Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_NAME``. +Defaults to ``dataverse`` (via ``microprofile-config.properties``). + dataverse.rserve.host +++++++++++++++++++++ @@ -1168,7 +1212,7 @@ This JVM setting is also part of **handles** configuration. The Handle.Net insta .. _dataverse.handlenet.index: dataverse.handlenet.index -+++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++ If you want to use different index than the default 300 .. _dataverse.timerServer: From d0a1194d2155e5c06e70386ee2b3f5e6596959b0 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 18 Nov 2020 13:49:10 +0100 Subject: [PATCH 07/22] Add release notes docs, including references to #7417 and #5345 --- .../7418-datasourcedefinition.md | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 doc/release-notes/7418-datasourcedefinition.md diff --git a/doc/release-notes/7418-datasourcedefinition.md b/doc/release-notes/7418-datasourcedefinition.md new file mode 100644 index 00000000000..7afcddcaf8b --- /dev/null +++ b/doc/release-notes/7418-datasourcedefinition.md @@ -0,0 +1,75 @@ +## Easier Configuration of Database Connections + +Dataverse now being able to use up-to-date Java technologies, transforms +the way how to configure the connection to your PostgreSQL database. + +In the past, the configuration of the connection has been quite static +and not very easy to update. This has been an issue especially for cloud +and container usage. + +Using MicroProfile Config API (#7000, #7418), you can much more easily deposit configuration +details. For an overview of supported options, please see the +[installation guide](https://guides.dataverse.org/en/5.3/installation/config.html#jvm-options). + + + + + + +🚨 THIS VERSION OF DATAVERSE **REQUIRES** UPGRADING TO PAYARA 5.2020.6. 🚨 + + + +## Upgrading from earlier releases + +â„šī¸ You need to update the Payara Application Server before continuing here. See above. + +1. Undeploy the previous version. +``` +/asadmin list-applications +/asadmin undeploy dataverse- +``` + +(where `` is where Payara 5 is installed, for example: `/usr/local/payara5`) + +2. Update your database connection before updating. + +Please configure your connection details, replacing all the `${DB_...}`. +(If you are using a PostgreSQL server on `localhost:5432`, you can omit `dataverse.db.host` and `dataverse.db.port`.) + +``` +/asadmin create-system-properties "dataverse.db.user=${DB_USER}" +/asadmin create-system-properties "dataverse.db.host=${DB_HOST}" +/asadmin create-system-properties "dataverse.db.port=${DB_PORT}" +/asadmin create-system-properties "dataverse.db.name=${DB_NAME}" +echo "AS_ADMIN_ALIASPASSWORD=${DB_PASS}" > /tmp/password.txt +/asadmin create-password-alias --passwordfile /tmp/password.txt dataverse.db.password +rm /tmp/password.txt +``` + + + +Now you are safe to delete the old password alias and DB pool: +``` +/asadmin delete-jdbc-connection-pool --cascade=true dvnDbPool +/asadmin delete-password-alias db_password_alias +``` + +3. Stop payara and remove the generated directory, start. +``` +service payara stop +# remove the generated directory: +rm -rf /payara/domains/domain1/generated +service payara start +``` + +3. Deploy this version. +``` +/bin/asadmin deploy dataverse-5.3.war +``` + +4. Restart Payara +``` +service payara stop +service payara start +``` \ No newline at end of file From aa1cc0feb4b18f10e5e014085ea662c925ee4b99 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 25 Nov 2020 11:07:04 -0500 Subject: [PATCH 08/22] fix 'Error in "code-block" directive' #7418 --- doc/sphinx-guides/source/installation/config.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index 9ae5ec8fe7e..71f8b440a9d 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -1049,9 +1049,11 @@ Can also be set via *MicroProfile Config API* sources, e. g. environment variabl Preferrably use a JVM alias, as passwords in environment variables aren't safe! .. code-block:: shell + echo "AS_ADMIN_ALIASPASSWORD=change-me-super-secret" > /tmp/password.txt asadmin create-password-alias --passwordfile /tmp/password.txt dataverse.db.password rm /tmp/password.txt + dataverse.db.host +++++++++++++++++ From cb4d308beb0209cd758ef43c0633b50cc9d751f5 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 25 Nov 2020 15:55:18 -0500 Subject: [PATCH 09/22] tweaks, remove mention of microprofile-config.properties #7418 src/main/resources/META-INF/microprofile-config.properties is important for developers to know about but sysadmins following the installation guide need not concern themselves with it. Other tweaks in this commit are cosmetic. I de-emphasized the environment variables by putting them in the bottom. --- .../source/installation/config.rst | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index 71f8b440a9d..107ba54c057 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -1032,21 +1032,30 @@ dataverse.auth.password-reset-timeout-in-minutes Users have 60 minutes to change their passwords by default. You can adjust this value here. +dataverse.db.name ++++++++++++++++++ + +The PostgreSQL database name to use for Dataverse. + +Defaults to ``dataverse`` (but the installer sets it to ``dvndb``). + +Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_DB_NAME``. + dataverse.db.user +++++++++++++++++ The PostgreSQL user name to connect with. -Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_USER``. -Defaults to ``dataverse`` (via ``microprofile-config.properties``). +Defaults to ``dataverse`` (but the installer sets it to ``dvnapp``). + +Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_DB_USER``. dataverse.db.password +++++++++++++++++++++ The PostgreSQL users password to connect with. -Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_PASSWORD``. -Preferrably use a JVM alias, as passwords in environment variables aren't safe! +Preferrably use a JVM alias, as passwords in environment variables aren't safe. .. code-block:: shell @@ -1054,29 +1063,25 @@ Preferrably use a JVM alias, as passwords in environment variables aren't safe! asadmin create-password-alias --passwordfile /tmp/password.txt dataverse.db.password rm /tmp/password.txt +Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_DB_PASSWORD``. + dataverse.db.host +++++++++++++++++ The PostgreSQL server to connect to. -Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_HOST``. -Defaults to ``localhost`` (via ``microprofile-config.properties``). +Defaults to ``localhost``. + +Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_DB_HOST``. dataverse.db.port +++++++++++++++++ -The PostgreSQL servers port to connect to. +The PostgreSQL server port to connect to. -Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_PORT``. -Defaults to ``5432`` (via ``microprofile-config.properties``), the default PostgreSQL port. - -dataverse.db.name -+++++++++++++++++ - -The PostgreSQL database name to use for Dataverse. +Defaults to ``5432``, the default PostgreSQL port. -Can also be set via *MicroProfile Config API* sources, e. g. environment variable ``DATAVERSE_DB_NAME``. -Defaults to ``dataverse`` (via ``microprofile-config.properties``). +Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_DB_PORT``. dataverse.rserve.host +++++++++++++++++++++ From 9155c0704c2d3dbc75c1976f69d29dd96dd77d75 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 25 Nov 2020 22:03:00 +0100 Subject: [PATCH 10/22] Update doc/release-notes/7418-datasourcedefinition.md Co-authored-by: Philip Durbin --- doc/release-notes/7418-datasourcedefinition.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/release-notes/7418-datasourcedefinition.md b/doc/release-notes/7418-datasourcedefinition.md index 7afcddcaf8b..7b333c4e39b 100644 --- a/doc/release-notes/7418-datasourcedefinition.md +++ b/doc/release-notes/7418-datasourcedefinition.md @@ -7,7 +7,7 @@ In the past, the configuration of the connection has been quite static and not very easy to update. This has been an issue especially for cloud and container usage. -Using MicroProfile Config API (#7000, #7418), you can much more easily deposit configuration +Using MicroProfile Config API (#7000, #7418), you can much more easily specify configuration details. For an overview of supported options, please see the [installation guide](https://guides.dataverse.org/en/5.3/installation/config.html#jvm-options). @@ -72,4 +72,4 @@ service payara start ``` service payara stop service payara start -``` \ No newline at end of file +``` From 06dbef10ac65a8b07d25c3b7506b0362d04030c9 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 1 Dec 2020 12:25:30 -0500 Subject: [PATCH 11/22] PGXADataSource breaks ingest, use PGPoolingDataSource #7418 --- .../edu/harvard/iq/dataverse/util/DataSourceProducer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 24f0d8a43fe..bfb64b68188 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -9,8 +9,8 @@ @Singleton @DataSourceDefinition( name = "java:app/jdbc/dataverse", - // Using PGXADataSource instead of deprecated PGPoolingDataSource - className = "org.postgresql.xa.PGXADataSource", + // Note that PGPoolingDataSource is deprecated. PGXADataSource breaks ingest. + className = "org.postgresql.ds.PGPoolingDataSource", user = "${MPCONFIG=dataverse.db.user}", password = "${MPCONFIG=dataverse.db.password}", serverName = "${MPCONFIG=dataverse.db.host}", From b1865087ad27a500be18a7a1f89c7d43b5fd3722 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Tue, 1 Dec 2020 20:37:02 +0100 Subject: [PATCH 12/22] Update src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java --- .../edu/harvard/iq/dataverse/util/DataSourceProducer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index bfb64b68188..e66de31eecd 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -9,8 +9,9 @@ @Singleton @DataSourceDefinition( name = "java:app/jdbc/dataverse", - // Note that PGPoolingDataSource is deprecated. PGXADataSource breaks ingest. - className = "org.postgresql.ds.PGPoolingDataSource", + // App server provides its own pooling, so go with simple data source class. + // PGXADataSource is unnecessary (no distributed transactions) and breaks ingest. + className = "org.postgresql.ds.PGSimpleDataSource", user = "${MPCONFIG=dataverse.db.user}", password = "${MPCONFIG=dataverse.db.password}", serverName = "${MPCONFIG=dataverse.db.host}", From 2d0dc6e4d0baedc14671830f4e5fe1d0201f7e4b Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 2 Dec 2020 11:11:16 +0100 Subject: [PATCH 13/22] Remove doubled property usage on DataSourceDefinition following Java EE spec on it. #7418 --- .../java/edu/harvard/iq/dataverse/util/DataSourceProducer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index e66de31eecd..23924092d14 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -14,7 +14,6 @@ className = "org.postgresql.ds.PGSimpleDataSource", user = "${MPCONFIG=dataverse.db.user}", password = "${MPCONFIG=dataverse.db.password}", - serverName = "${MPCONFIG=dataverse.db.host}", url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", minPoolSize = 10, maxPoolSize = 200) From 1c0959b29da894d058814624b7ea9e53baebf400 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 2 Dec 2020 11:25:03 +0100 Subject: [PATCH 14/22] Switch to a javax.sql.ConnectionPoolDataSource class for DataSourceDefinition plus add some more inline docs. #7418 --- .../harvard/iq/dataverse/util/DataSourceProducer.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 23924092d14..6a975592bd9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -9,9 +9,13 @@ @Singleton @DataSourceDefinition( name = "java:app/jdbc/dataverse", - // App server provides its own pooling, so go with simple data source class. - // PGXADataSource is unnecessary (no distributed transactions) and breaks ingest. - className = "org.postgresql.ds.PGSimpleDataSource", + // + // The app server (Payara) deploys a managed pool for this data source for us. + // We don't need to deal with this on our own. + // + // HINT: PGSimpleDataSource would work too, but as we use a connection pool, go with a javax.sql.ConnectionPoolDataSource + // HINT: PGXADataSource is unnecessary (no distributed transactions used) and breaks ingest. + className = "org.postgresql.ds.PGConnectionPoolDataSource", user = "${MPCONFIG=dataverse.db.user}", password = "${MPCONFIG=dataverse.db.password}", url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", From ea0cf29e0e63945ed22de0d4faf26dc574bd9bec Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 2 Dec 2020 12:51:24 +0100 Subject: [PATCH 15/22] Add more comments about pool sizing and reduce JDBC pool to max 100 connections. #7418 --- .../harvard/iq/dataverse/util/DataSourceProducer.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 6a975592bd9..32063c0ba92 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -19,8 +19,16 @@ user = "${MPCONFIG=dataverse.db.user}", password = "${MPCONFIG=dataverse.db.password}", url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", + // + // If we ever need to change these pool settings, we need to remove this class and create the resource + // from web.xml. We can use MicroProfile Config in there for these values, impossible to do in the annotation. + // + // See also https://blog.payara.fish/an-intro-to-connection-pools-in-payara-server-5 + // Payara DataSourceDefinitionDeployer default value = 8 minPoolSize = 10, - maxPoolSize = 200) + // HINT: Payara DataSourceDefinitionDeployer default value = 32 + // HINT: Harvard Dataverse is fine for a while with 64 + maxPoolSize = 100) public class DataSourceProducer { @Resource(lookup="java:app/jdbc/dataverse") From a41e177977e70706179eec2f723fff34b2ba3134 Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 2 Dec 2020 12:59:00 +0100 Subject: [PATCH 16/22] Enable special JDBC connection pooling properties for debugging and monitoring via MPCONFIG. #7418 --- .../iq/dataverse/util/DataSourceProducer.java | 15 ++++++++++++++- .../META-INF/microprofile-config.properties | 13 ++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 32063c0ba92..e1d9fcdd572 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -28,7 +28,20 @@ minPoolSize = 10, // HINT: Payara DataSourceDefinitionDeployer default value = 32 // HINT: Harvard Dataverse is fine for a while with 64 - maxPoolSize = 100) + maxPoolSize = 100, + properties = { + "fish.payara.is-connection-validation-required=${MPCONFIG=dataverse.db.is-connection-validation-required}", + "fish.payara.connection-validation-method=${MPCONFIG=dataverse.db.connection-validation-method}", + "fish.payara.validation-table-name=${MPCONFIG=dataverse.db.validation-table-name}", + "fish.payara.validation-classname=${MPCONFIG=dataverse.db.validation-classname}", + "fish.payara.connection-leak-timeout-in-seconds=${MPCONFIG=dataverse.db.connection-leak-timeout-in-seconds}", + "fish.payara.connection-leak-reclaim=${MPCONFIG=dataverse.db.connection-leak-reclaim}", + "fish.payara.statement-timeout-in-seconds=${MPCONFIG=dataverse.db.statement-timeout-in-seconds}", + "fish.payara.statement-leak-timeout-in-seconds=${MPCONFIG=dataverse.db.statement-leak-timeout-in-seconds}", + "fish.payara.statement-leak-reclaim=${MPCONFIG=dataverse.db.statement-leak-reclaim}", + "fish.payara.slow-query-threshold-in-seconds=${MPCONFIG=dataverse.db.slow-query-threshold-in-seconds}", + "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls}" + }) public class DataSourceProducer { @Resource(lookup="java:app/jdbc/dataverse") diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties index ec658cf5c65..d7503817a4c 100644 --- a/src/main/resources/META-INF/microprofile-config.properties +++ b/src/main/resources/META-INF/microprofile-config.properties @@ -1,4 +1,15 @@ dataverse.db.host=localhost dataverse.db.port=5432 dataverse.db.user=dataverse -dataverse.db.name=dataverse \ No newline at end of file +dataverse.db.name=dataverse +dataverse.db.is-connection-validation-required=false +dataverse.db.connection-validation-method=table +dataverse.db.validation-table-name=setting +dataverse.db.validation-classname=org.glassfish.api.jdbc.validation.PostgresConnectionValidation +dataverse.db.connection-leak-timeout-in-seconds=0 +dataverse.db.connection-leak-reclaim=false +dataverse.db.statement-timeout-in-seconds=-1 +dataverse.db.statement-leak-timeout-in-seconds=0 +dataverse.db.statement-leak-reclaim=false +dataverse.db.slow-query-threshold-in-seconds=-1 +dataverse.db.log-jdbc-calls=false \ No newline at end of file From 1a921f6b1b0f1a80a34d5651ad3e883a3c30a69e Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 2 Dec 2020 14:23:49 +0100 Subject: [PATCH 17/22] Make pool resize configurable. #7418 --- .../iq/dataverse/util/DataSourceProducer.java | 15 +++++++++++++-- .../META-INF/microprofile-config.properties | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index e1d9fcdd572..bee25f857e6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -8,28 +8,39 @@ @Singleton @DataSourceDefinition( + // Find docs here: https://javaee.github.io/javaee-spec/javadocs/javax/annotation/sql/DataSourceDefinition.html + name = "java:app/jdbc/dataverse", - // + // The app server (Payara) deploys a managed pool for this data source for us. // We don't need to deal with this on our own. // // HINT: PGSimpleDataSource would work too, but as we use a connection pool, go with a javax.sql.ConnectionPoolDataSource // HINT: PGXADataSource is unnecessary (no distributed transactions used) and breaks ingest. className = "org.postgresql.ds.PGConnectionPoolDataSource", + user = "${MPCONFIG=dataverse.db.user}", password = "${MPCONFIG=dataverse.db.password}", url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", - // + // If we ever need to change these pool settings, we need to remove this class and create the resource // from web.xml. We can use MicroProfile Config in there for these values, impossible to do in the annotation. // // See also https://blog.payara.fish/an-intro-to-connection-pools-in-payara-server-5 // Payara DataSourceDefinitionDeployer default value = 8 minPoolSize = 10, + // HINT: Payara DataSourceDefinitionDeployer default value = 32 // HINT: Harvard Dataverse is fine for a while with 64 maxPoolSize = 100, + + // "The number of seconds that a physical connection should remain unused in the pool before the connection is closed for a connection pool. " + // Payara DataSourceDefinitionDeployer default value = 300 (seconds) + maxIdleTime = 300, + + // These are documented at https://docs.payara.fish/community/docs/5.2020.6/documentation/payara-server/jdbc/advanced-connection-pool-properties.html#full-list-of-properties properties = { + "fish.payara.pool-resize-quantity=${MPCONFIG=dataverse.db.pool-resize-quantity}", "fish.payara.is-connection-validation-required=${MPCONFIG=dataverse.db.is-connection-validation-required}", "fish.payara.connection-validation-method=${MPCONFIG=dataverse.db.connection-validation-method}", "fish.payara.validation-table-name=${MPCONFIG=dataverse.db.validation-table-name}", diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties index d7503817a4c..c562ad7c416 100644 --- a/src/main/resources/META-INF/microprofile-config.properties +++ b/src/main/resources/META-INF/microprofile-config.properties @@ -2,6 +2,7 @@ dataverse.db.host=localhost dataverse.db.port=5432 dataverse.db.user=dataverse dataverse.db.name=dataverse +dataverse.db.pool-resize-quantity=2 dataverse.db.is-connection-validation-required=false dataverse.db.connection-validation-method=table dataverse.db.validation-table-name=setting @@ -12,4 +13,4 @@ dataverse.db.statement-timeout-in-seconds=-1 dataverse.db.statement-leak-timeout-in-seconds=0 dataverse.db.statement-leak-reclaim=false dataverse.db.slow-query-threshold-in-seconds=-1 -dataverse.db.log-jdbc-calls=false \ No newline at end of file +dataverse.db.log-jdbc-calls=false From 83ea82f2d292d88aad3d73aa075eb14692a854ac Mon Sep 17 00:00:00 2001 From: Oliver Bertuch Date: Wed, 2 Dec 2020 14:49:03 +0100 Subject: [PATCH 18/22] Reverting the addition of JDBC pooling settings, configurable via MPCONFIG. #7418 Due to payara/Payara#5024 this is currently not possible. Needs to be addressed in a later enhancement when Payara provides a solution. --- .../iq/dataverse/util/DataSourceProducer.java | 7 +++++- .../META-INF/microprofile-config.properties | 24 +++++++++---------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index bee25f857e6..9e85fbe5bd8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -36,9 +36,13 @@ // "The number of seconds that a physical connection should remain unused in the pool before the connection is closed for a connection pool. " // Payara DataSourceDefinitionDeployer default value = 300 (seconds) - maxIdleTime = 300, + maxIdleTime = 300) // These are documented at https://docs.payara.fish/community/docs/5.2020.6/documentation/payara-server/jdbc/advanced-connection-pool-properties.html#full-list-of-properties + // + // All these vars cannot be configured via MPCONFIG as Payara doesn't support this (yet). To be enhanced. + // See also https://github.com/payara/Payara/issues/5024 + /* properties = { "fish.payara.pool-resize-quantity=${MPCONFIG=dataverse.db.pool-resize-quantity}", "fish.payara.is-connection-validation-required=${MPCONFIG=dataverse.db.is-connection-validation-required}", @@ -53,6 +57,7 @@ "fish.payara.slow-query-threshold-in-seconds=${MPCONFIG=dataverse.db.slow-query-threshold-in-seconds}", "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls}" }) + */ public class DataSourceProducer { @Resource(lookup="java:app/jdbc/dataverse") diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties index c562ad7c416..ebccaa5ba87 100644 --- a/src/main/resources/META-INF/microprofile-config.properties +++ b/src/main/resources/META-INF/microprofile-config.properties @@ -2,15 +2,15 @@ dataverse.db.host=localhost dataverse.db.port=5432 dataverse.db.user=dataverse dataverse.db.name=dataverse -dataverse.db.pool-resize-quantity=2 -dataverse.db.is-connection-validation-required=false -dataverse.db.connection-validation-method=table -dataverse.db.validation-table-name=setting -dataverse.db.validation-classname=org.glassfish.api.jdbc.validation.PostgresConnectionValidation -dataverse.db.connection-leak-timeout-in-seconds=0 -dataverse.db.connection-leak-reclaim=false -dataverse.db.statement-timeout-in-seconds=-1 -dataverse.db.statement-leak-timeout-in-seconds=0 -dataverse.db.statement-leak-reclaim=false -dataverse.db.slow-query-threshold-in-seconds=-1 -dataverse.db.log-jdbc-calls=false +#dataverse.db.pool-resize-quantity=2 +#dataverse.db.is-connection-validation-required=false +#dataverse.db.connection-validation-method=table +#dataverse.db.validation-table-name=setting +#dataverse.db.validation-classname=org.glassfish.api.jdbc.validation.PostgresConnectionValidation +#dataverse.db.connection-leak-timeout-in-seconds=0 +#dataverse.db.connection-leak-reclaim=false +#dataverse.db.statement-timeout-in-seconds=-1 +#dataverse.db.statement-leak-timeout-in-seconds=0 +#dataverse.db.statement-leak-reclaim=false +#dataverse.db.slow-query-threshold-in-seconds=-1 +#dataverse.db.log-jdbc-calls=false From c583909d21daa63b03f82f6aba02965451ef7467 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 3 Dec 2020 14:45:01 -0500 Subject: [PATCH 19/22] tweak javadoc, default MP config properties #7418 - Show a simple properties example that's easily verifiable by inspecting server.log (JDBC call debugging). - Remove MPCONFIG examples that don't work yet (depends on work in Payara). --- .../iq/dataverse/util/DataSourceProducer.java | 28 ++++++------------- .../META-INF/microprofile-config.properties | 12 -------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 9e85fbe5bd8..82936d1919d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -37,27 +37,17 @@ // "The number of seconds that a physical connection should remain unused in the pool before the connection is closed for a connection pool. " // Payara DataSourceDefinitionDeployer default value = 300 (seconds) maxIdleTime = 300) - - // These are documented at https://docs.payara.fish/community/docs/5.2020.6/documentation/payara-server/jdbc/advanced-connection-pool-properties.html#full-list-of-properties + // It's possible to add additional properties like this... + // + //properties = { + // "fish.payara.log-jdbc-calls=true" + //}) + // + // ... but at this time we don't think we need any. The full list + // of properties can be found at https://docs.payara.fish/community/docs/5.2020.6/documentation/payara-server/jdbc/advanced-connection-pool-properties.html#full-list-of-properties // - // All these vars cannot be configured via MPCONFIG as Payara doesn't support this (yet). To be enhanced. + // All these properties cannot be configured via MPCONFIG as Payara doesn't support this (yet). To be enhanced. // See also https://github.com/payara/Payara/issues/5024 - /* - properties = { - "fish.payara.pool-resize-quantity=${MPCONFIG=dataverse.db.pool-resize-quantity}", - "fish.payara.is-connection-validation-required=${MPCONFIG=dataverse.db.is-connection-validation-required}", - "fish.payara.connection-validation-method=${MPCONFIG=dataverse.db.connection-validation-method}", - "fish.payara.validation-table-name=${MPCONFIG=dataverse.db.validation-table-name}", - "fish.payara.validation-classname=${MPCONFIG=dataverse.db.validation-classname}", - "fish.payara.connection-leak-timeout-in-seconds=${MPCONFIG=dataverse.db.connection-leak-timeout-in-seconds}", - "fish.payara.connection-leak-reclaim=${MPCONFIG=dataverse.db.connection-leak-reclaim}", - "fish.payara.statement-timeout-in-seconds=${MPCONFIG=dataverse.db.statement-timeout-in-seconds}", - "fish.payara.statement-leak-timeout-in-seconds=${MPCONFIG=dataverse.db.statement-leak-timeout-in-seconds}", - "fish.payara.statement-leak-reclaim=${MPCONFIG=dataverse.db.statement-leak-reclaim}", - "fish.payara.slow-query-threshold-in-seconds=${MPCONFIG=dataverse.db.slow-query-threshold-in-seconds}", - "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls}" - }) - */ public class DataSourceProducer { @Resource(lookup="java:app/jdbc/dataverse") diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties index ebccaa5ba87..8c475f1c050 100644 --- a/src/main/resources/META-INF/microprofile-config.properties +++ b/src/main/resources/META-INF/microprofile-config.properties @@ -2,15 +2,3 @@ dataverse.db.host=localhost dataverse.db.port=5432 dataverse.db.user=dataverse dataverse.db.name=dataverse -#dataverse.db.pool-resize-quantity=2 -#dataverse.db.is-connection-validation-required=false -#dataverse.db.connection-validation-method=table -#dataverse.db.validation-table-name=setting -#dataverse.db.validation-classname=org.glassfish.api.jdbc.validation.PostgresConnectionValidation -#dataverse.db.connection-leak-timeout-in-seconds=0 -#dataverse.db.connection-leak-reclaim=false -#dataverse.db.statement-timeout-in-seconds=-1 -#dataverse.db.statement-leak-timeout-in-seconds=0 -#dataverse.db.statement-leak-reclaim=false -#dataverse.db.slow-query-threshold-in-seconds=-1 -#dataverse.db.log-jdbc-calls=false From f98c1642f50a1b815251da78b42ea848df4b535b Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 3 Dec 2020 14:55:47 -0500 Subject: [PATCH 20/22] format with Netbeans #7418 --- .../iq/dataverse/util/DataSourceProducer.java | 80 +++++++++---------- 1 file changed, 37 insertions(+), 43 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 82936d1919d..02ba331cdd5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -6,53 +6,47 @@ import javax.inject.Singleton; import javax.sql.DataSource; +// Find docs here: https://javaee.github.io/javaee-spec/javadocs/javax/annotation/sql/DataSourceDefinition.html @Singleton @DataSourceDefinition( - // Find docs here: https://javaee.github.io/javaee-spec/javadocs/javax/annotation/sql/DataSourceDefinition.html - - name = "java:app/jdbc/dataverse", - - // The app server (Payara) deploys a managed pool for this data source for us. - // We don't need to deal with this on our own. - // - // HINT: PGSimpleDataSource would work too, but as we use a connection pool, go with a javax.sql.ConnectionPoolDataSource - // HINT: PGXADataSource is unnecessary (no distributed transactions used) and breaks ingest. - className = "org.postgresql.ds.PGConnectionPoolDataSource", - - user = "${MPCONFIG=dataverse.db.user}", - password = "${MPCONFIG=dataverse.db.password}", - url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", - - // If we ever need to change these pool settings, we need to remove this class and create the resource - // from web.xml. We can use MicroProfile Config in there for these values, impossible to do in the annotation. - // - // See also https://blog.payara.fish/an-intro-to-connection-pools-in-payara-server-5 - // Payara DataSourceDefinitionDeployer default value = 8 - minPoolSize = 10, - - // HINT: Payara DataSourceDefinitionDeployer default value = 32 - // HINT: Harvard Dataverse is fine for a while with 64 - maxPoolSize = 100, - - // "The number of seconds that a physical connection should remain unused in the pool before the connection is closed for a connection pool. " - // Payara DataSourceDefinitionDeployer default value = 300 (seconds) - maxIdleTime = 300) - // It's possible to add additional properties like this... - // - //properties = { - // "fish.payara.log-jdbc-calls=true" - //}) - // - // ... but at this time we don't think we need any. The full list - // of properties can be found at https://docs.payara.fish/community/docs/5.2020.6/documentation/payara-server/jdbc/advanced-connection-pool-properties.html#full-list-of-properties - // - // All these properties cannot be configured via MPCONFIG as Payara doesn't support this (yet). To be enhanced. - // See also https://github.com/payara/Payara/issues/5024 + name = "java:app/jdbc/dataverse", + // The app server (Payara) deploys a managed pool for this data source for us. + // We don't need to deal with this on our own. + // + // HINT: PGSimpleDataSource would work too, but as we use a connection pool, go with a javax.sql.ConnectionPoolDataSource + // HINT: PGXADataSource is unnecessary (no distributed transactions used) and breaks ingest. + className = "org.postgresql.ds.PGConnectionPoolDataSource", + user = "${MPCONFIG=dataverse.db.user}", + password = "${MPCONFIG=dataverse.db.password}", + url = "jdbc:postgresql://${MPCONFIG=dataverse.db.host}:${MPCONFIG=dataverse.db.port}/${MPCONFIG=dataverse.db.name}", + // If we ever need to change these pool settings, we need to remove this class and create the resource + // from web.xml. We can use MicroProfile Config in there for these values, impossible to do in the annotation. + // + // See also https://blog.payara.fish/an-intro-to-connection-pools-in-payara-server-5 + // Payara DataSourceDefinitionDeployer default value = 8 + minPoolSize = 10, + // HINT: Payara DataSourceDefinitionDeployer default value = 32 + // HINT: Harvard Dataverse is fine for a while with 64 + maxPoolSize = 100, + // "The number of seconds that a physical connection should remain unused in the pool before the connection is closed for a connection pool. " + // Payara DataSourceDefinitionDeployer default value = 300 (seconds) + maxIdleTime = 300) +// It's possible to add additional properties like this... +// +//properties = { +// "fish.payara.log-jdbc-calls=true" +//}) +// +// ... but at this time we don't think we need any. The full list +// of properties can be found at https://docs.payara.fish/community/docs/5.2020.6/documentation/payara-server/jdbc/advanced-connection-pool-properties.html#full-list-of-properties +// +// All these properties cannot be configured via MPCONFIG as Payara doesn't support this (yet). To be enhanced. +// See also https://github.com/payara/Payara/issues/5024 public class DataSourceProducer { - - @Resource(lookup="java:app/jdbc/dataverse") + + @Resource(lookup = "java:app/jdbc/dataverse") DataSource ds; - + @Produces public DataSource getDatasource() { return ds; From d7f3da1f1a13e1b4e3b45a7ecad30a56c70f3c83 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 3 Dec 2020 15:21:44 -0500 Subject: [PATCH 21/22] mention new JVM options in release notes #7418 --- doc/release-notes/7418-datasourcedefinition.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/release-notes/7418-datasourcedefinition.md b/doc/release-notes/7418-datasourcedefinition.md index 7b333c4e39b..cb45597d825 100644 --- a/doc/release-notes/7418-datasourcedefinition.md +++ b/doc/release-notes/7418-datasourcedefinition.md @@ -1,4 +1,6 @@ -## Easier Configuration of Database Connections +## Release Highlights + +### Easier Configuration of Database Connections Dataverse now being able to use up-to-date Java technologies, transforms the way how to configure the connection to your PostgreSQL database. @@ -11,6 +13,15 @@ Using MicroProfile Config API (#7000, #7418), you can much more easily specify c details. For an overview of supported options, please see the [installation guide](https://guides.dataverse.org/en/5.3/installation/config.html#jvm-options). +## Notes for Dataverse Installation Administrators + +### New JVM Options + +- dataverse.db.name +- dataverse.db.user +- dataverse.db.password +- dataverse.db.host +- dataverse.db.port From 7e3498e72353378a0e14730fa7a7ff6b8a364ec6 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 3 Dec 2020 15:31:01 -0500 Subject: [PATCH 22/22] note that some settings have moved to code #7418 --- doc/release-notes/7418-datasourcedefinition.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/release-notes/7418-datasourcedefinition.md b/doc/release-notes/7418-datasourcedefinition.md index cb45597d825..b8c5561c2c2 100644 --- a/doc/release-notes/7418-datasourcedefinition.md +++ b/doc/release-notes/7418-datasourcedefinition.md @@ -13,6 +13,8 @@ Using MicroProfile Config API (#7000, #7418), you can much more easily specify c details. For an overview of supported options, please see the [installation guide](https://guides.dataverse.org/en/5.3/installation/config.html#jvm-options). +Note that some settings have been moved from domain.xml to code such as min and max pool size. + ## Notes for Dataverse Installation Administrators ### New JVM Options