From 8d8026c42042b626003997ad97469b2bae02942c Mon Sep 17 00:00:00 2001 From: Sebastian Hofmann Date: Fri, 16 Feb 2024 16:03:34 +0100 Subject: [PATCH] MCR-3031 configure the database without persistence xml --- docker-entrypoint.sh | 112 ++++++++---------- .../resources/config/mir/mycore.properties | 2 +- .../java/org/mycore/mir/wizard/MIRWizard.java | 3 +- 3 files changed, 49 insertions(+), 68 deletions(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index b00e194fd9..450b2eda40 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -4,21 +4,9 @@ set -e MCR_SAVE_DIR="${MCR_CONFIG_DIR}save/" MCR_CONFIG_DIR_ESCAPED=$(echo "$MCR_CONFIG_DIR" | sed 's/\//\\\//g') -MCR_DATA_DIR_ESCAPED=$(echo "$MCR_DATA_DIR" | sed 's/\//\\\//g') -MCR_SAVE_DIR_ESCAPED=$(echo "$MCR_SAVE_DIR" | sed 's/\//\\\//g') -MCR_LOG_DIR_ESCAPED=$(echo "$MCR_LOG_DIR" | sed 's/\//\\\//g') - -SOLR_URL_ESCAPED=$(echo "$SOLR_URL" | sed 's/\//\\\//g') -SOLR_CORE_ESCAPED=$(echo "$SOLR_CORE" | sed 's/\//\\\//g') -SOLR_CLASSIFICATION_CORE_ESCAPED=$(echo "$SOLR_CLASSIFICATION_CORE" | sed 's/\//\\\//g') - -JDBC_NAME_ESCAPED=$(echo "$JDBC_NAME" | sed 's/\//\\\//g') -JDBC_PASSWORD_ESCAPED=$(echo "$JDBC_PASSWORD" | sed 's/\//\\\//g') -JDBC_DRIVER_ESCAPED=$(echo "$JDBC_DRIVER" | sed 's/\//\\\//g') -JDBC_URL_ESCAPED=$(echo "$JDBC_URL" | sed 's/\//\\\//g') -HIBERNATE_SCHEMA_ESCAPED=$(echo "$JDBC_URL" | sed 's/\//\\\//g') MYCORE_PROPERTIES="${MCR_CONFIG_DIR}mycore.properties" + PERSISTENCE_XML="${MCR_CONFIG_DIR}resources/META-INF/persistence.xml" function fixDirectoryRights() { @@ -74,92 +62,77 @@ function migrateC3P0toHikari { rm "${MCR_CONFIG_DIR}lib/h2-1.4.200.jar" rm "${MCR_CONFIG_DIR}lib/mysql-connector-java-8.0.19.jar" - # delete old configuration and add new configuration - if grep -q "hibernate.c3p0" "${PERSISTENCE_XML}"; then - sed -ri "s/.*hibernate.c3p0.*//" "${PERSISTENCE_XML}" - sed -ri "s/()/\1org.hibernate.hikaricp.internal.HikariCPConnectionProvider\3/" "${PERSISTENCE_XML}" - sed -ri "s/(<\/properties>)/\n\n\n\n\n\n\1/" "${PERSISTENCE_XML}" - fi - - /opt/mir/mir/bin/mir.sh reload mappings in jpa configuration file else echo "No c3p0 driver found. Skip migration." fi } -function migrateJavaxPropertiesToJakarta() { - if grep -q "javax.persistence" "${PERSISTENCE_XML}"; then - echo "Migrate properties in persistence.xml from javax to jakarta" - sed -ri "s/()/\1jakarta.persistence\2/" "${PERSISTENCE_XML}" - fi - if grep -q "xmlns.jcp.org" "${PERSISTENCE_XML}"; then - echo "Migrate xmlns in persistence.xml from jcp.org to jakarta.ee" - sed -ri "s/xmlns=\".+persistence\"/xmlns=\"https:\/\/jakarta.ee\/xml\/ns\/persistence\"/" "${PERSISTENCE_XML}" - echo "Migrate schemaLocation in persistence.xml from jcp.org to jakarta.ee" - grep -ri "s/(xsi:schemaLocation=\").*jcp.org.*(\")/\1https:\/\/jakarta.ee\/xml\/ns\/persistence https:\/\/jakarta.ee\/xml\/ns\/persistence\/persistence_3_0.xsd\2/" "${PERSISTENCE_XML}" - fi - if grep -q "version=\"2" "${PERSISTENCE_XML}"; then - echo "Migrate version in persistence.xml from 2.* to 3.0" - sed -ri "s/version=\"2.*\"/version=\"3.0\"/" "${PERSISTENCE_XML}" - fi + +function setOrAddProperty() { + KEY=$1 + VALUE=$2 + + if grep -q "$KEY=" "${MYCORE_PROPERTIES}" ; then + ESCAPED_KEY=$(echo "${KEY}" | sed 's/\//\\\//g') + ESCAPED_VALUE=$(echo "${VALUE}" | sed 's/\//\\\//g') + sed -ri "s/($ESCAPED_KEY=).+/\1$ESCAPED_VALUE/" "${MYCORE_PROPERTIES}" + else + echo "$KEY=$VALUE">>"${MYCORE_PROPERTIES}" + fi } function setDockerValues() { echo "Set Docker Values to Config!" - migrateJavaxPropertiesToJakarta - if [ -n "${SOLR_URL}" ]; then - sed -ri "s/#?(MCR\.Solr\.ServerURL=).+/\1${SOLR_URL_ESCAPED}/" "${MYCORE_PROPERTIES}"; + setOrAddProperty "Solr.ServerURL" "${SOLR_URL}" fi if [ -n "${SOLR_CORE}" ]; then - sed -ri "s/#?(MCR\.Solr\.Core\.main\.Name=).+/\1${SOLR_CORE_ESCAPED}/" "${MYCORE_PROPERTIES}"; + setOrAddProperty "Solr.Core.main.Name" "${SOLR_CORE}" fi if [ -n "${SOLR_CLASSIFICATION_CORE}" ]; then - sed -ri "s/#?(MCR\.Solr\.Core\.classification\.Name=).+/\1${SOLR_CLASSIFICATION_CORE_ESCAPED}/" "${MYCORE_PROPERTIES}" + setOrAddProperty "Solr.Core.classification.Name" "${SOLR_CLASSIFICATION_CORE}" fi if [ -n "${JDBC_NAME}" ]; then - sed -ri "s/(name=\"jakarta.persistence.jdbc.user\" value=\").*(\")/\1${JDBC_NAME_ESCAPED}\2/" "${PERSISTENCE_XML}" + setOrAddProperty "MCR.JPA.User" "${JDBC_NAME}" fi if [ -n "${JDBC_PASSWORD}" ]; then - sed -ri "s/(name=\"jakarta.persistence.jdbc.password\" value=\").*(\")/\1${JDBC_PASSWORD_ESCAPED}\2/" "${PERSISTENCE_XML}" + setOrAddProperty "MCR.JPA.Password" "${JDBC_PASSWORD}" fi if [ -n "${JDBC_DRIVER}" ]; then - sed -ri "s/(name=\"jakarta.persistence.jdbc.driver\" value=\").*(\")/\1${JDBC_DRIVER_ESCAPED}\2/" "${PERSISTENCE_XML}" + setOrAddProperty "MCR.JPA.Driver" "${JDBC_DRIVER}" fi if [ -n "${JDBC_URL}" ]; then - sed -ri "s/(name=\"jakarta.persistence.jdbc.url\" value=\").*(\")/\1${JDBC_URL_ESCAPED}\2/" "${PERSISTENCE_XML}" + setOrAddProperty "MCR.JPA.URL" "${JDBC_URL}" fi - if [ -n "${SOLR_CLASSIFICATION_CORE}" ]; then - sed -ri "s/(name=\"hibernate.default_schema\" value=\").*(\")/\1${HIBERNATE_SCHEMA_ESCAPED}\2/" "${PERSISTENCE_XML}" + if [ -n "${HIBERNATE_SCHEMA}" ]; then + setOrAddProperty "MCR.JPA.DefaultSchema" "${HIBERNATE_SCHEMA}" fi - sed -ri "s/(name=\"hibernate.hbm2ddl.auto\" value=\").*(\")/\1update\2/" "${PERSISTENCE_XML}" + setOrAddProperty "MCR.JPA.Hbm2ddlAuto" "update" + setOrAddProperty "MCR.JPA.PersistenceUnit.mir.Class" "org.mycore.backend.jpa.MCRSimpleConfigPersistenceUnitDescriptor" + setOrAddProperty "MCR.JPA.PersistenceUnitName" "mir" - if grep -q "MCR.datadir=" "${MYCORE_PROPERTIES}" ; then - sed -ri "s/#?(MCR\.datadir=).+/\1${MCR_DATA_DIR_ESCAPED}/" "${MYCORE_PROPERTIES}" - else - echo "MCR.datadir=${MCR_DATA_DIR}">>"${MYCORE_PROPERTIES}" - fi + setOrAddProperty "MCR.datadir" "${MCR_DATA_DIR}" + setOrAddProperty "MCR.Solr.NestedDocuments" "true" + setOrAddProperty "MCR.Save.FileSystem" "${MCR_SAVE_DIR}" - if grep -q "MCR.Solr.NestedDocuments=" "${MYCORE_PROPERTIES}" ; then - sed -ri "s/#?(MCR\.Solr\.NestedDocuments=).+/\1true/" "${MYCORE_PROPERTIES}" - else - echo "MCR.Solr.NestedDocuments=true">>"${MYCORE_PROPERTIES}"; - fi + # s/(<\/properties>)/\n\n\n\n\n + setOrAddProperty "MCR.JPA.Connection.ProviderClass" "org.hibernate.hikaricp.internal.HikariCPConnectionProvider" + setOrAddProperty "MCR.JPA.Connection.MaximumPoolSize" "30" + setOrAddProperty "MCR.JPA.Connection.MinimumIdle" "2" + setOrAddProperty "MCR.JPA.Connection.IdleTimeout" "30000" + setOrAddProperty "MCR.JPA.Connection.MaxLifetime" "180000" + setOrAddProperty "MCR.JPA.Connection.LeakDetectionThreshold" "9000" + setOrAddProperty "MCR.JPA.Connection.RegisterMbeans" "true" - if grep -q "MCR.Save.FileSystem=" "${MYCORE_PROPERTIES}" ; then - sed -ri "s/#?(MCR\.Save\.FileSystem=).+/\1${MCR_SAVE_DIR_ESCAPED}/" "${MYCORE_PROPERTIES}" - else - echo "MCR.Save.FileSystem=${MCR_SAVE_DIR}">>"${MYCORE_PROPERTIES}" - fi migrateC3P0toHikari @@ -173,6 +146,17 @@ function setDockerValues() { mkdir -p "${MCR_CONFIG_DIR}lib" downloadDriver https://repo1.maven.org/maven2/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar + + # iterate over all environment variables starting with MCR.JPA. and add them to the mycore.properties + for var in $(env | grep -E "^MCR.JPA."); do + key=$(echo $var | cut -d'=' -f1 | sed 's/MCR.JPA.//g') + value=$(echo $var | cut -d'=' -f2) + complete_key="MCR.JPA.$key" + + setOrAddProperty "$complete_key" "$value" + done + + rm -f "${PERSISTENCE_XML}" } function setUpMyCoRe { @@ -180,8 +164,6 @@ function setUpMyCoRe { /opt/mir/mir/bin/mir.sh create configuration directory setDockerValues setupLog4jConfig - /opt/mir/mir/bin/mir.sh reload mappings in jpa configuration file - sed -ri "s/(<\/properties>)/\n\n\n\n\n\n\1/" "${MCR_CONFIG_DIR}resources/META-INF/persistence.xml" /opt/mir/mir/bin/setup.sh } diff --git a/mir-module/src/main/resources/config/mir/mycore.properties b/mir-module/src/main/resources/config/mir/mycore.properties index ae5d8f3618..2dfc03b4ca 100644 --- a/mir-module/src/main/resources/config/mir/mycore.properties +++ b/mir-module/src/main/resources/config/mir/mycore.properties @@ -111,7 +111,7 @@ MCR.ContentTransformer.mets-dfg.Stylesheet=xsl/mets/mets-dfg.xsl # Configure Hibernate Mappings # ############################################################################## MCR.Hibernate.Mappings=%MCR.Hibernate.Mappings%,org.mycore.mir.authorization.accesskeys.backend.MIRAccessKey,org.mycore.mir.authorization.accesskeys.backend.MIRAccessKeyPair - +MCR.JPA.MappingFileNames=%MCR.JPA.MappingFileNames%,META-INF/mir-module-mappings.xml ############################################################################# # HTMLEditor (for backwards compatibility) # diff --git a/mir-wizard/src/main/java/org/mycore/mir/wizard/MIRWizard.java b/mir-wizard/src/main/java/org/mycore/mir/wizard/MIRWizard.java index 3ddcc25363..7ba4cbf8a2 100644 --- a/mir-wizard/src/main/java/org/mycore/mir/wizard/MIRWizard.java +++ b/mir-wizard/src/main/java/org/mycore/mir/wizard/MIRWizard.java @@ -43,10 +43,9 @@ public class MIRWizard extends MCRServlet { public static boolean isNecessary() { File mcrProps = MCRConfigurationDir.getConfigFile("mycore.properties"); - File jpaCfg = MCRConfigurationDir.getConfigFile("resources/META-INF/persistence.xml"); - return (mcrProps == null || !mcrProps.canRead()) || (jpaCfg == null || !jpaCfg.canRead()); + return (mcrProps == null || !mcrProps.canRead()); } public Element doMagic(Element wizXML) {