From 50a995851a0f80e5352711e0fae185c5c9c2723e Mon Sep 17 00:00:00 2001 From: Kathleen Neumann Date: Fri, 6 Sep 2024 12:05:39 +0200 Subject: [PATCH] UBO-283 switch also docker image to tomcat 10 (#419) * UBO-283 switch also docker image to tomcat 10 * fix docker-entrypoint.sh - c3p0 to Hikari migration in persistence.xml - javax.persistence to jakarta.persistence migration in persistence.xml - use "reload mappings in jpa configuration file" command --------- Co-authored-by: Sebastian Hofmann --- Dockerfile | 2 +- docker-entrypoint.sh | 105 ++++++++++++++++++++++++++++++++----------- 2 files changed, 80 insertions(+), 27 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2cc44a5a8..216447760 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM tomcat:jdk17-temurin-focal +FROM tomcat:10-jdk17-temurin-jammy RUN groupadd -r mcr -g 501 && \ useradd -d /home/mcr -u 501 -m -s /bin/bash -g mcr mcr WORKDIR /usr/local/tomcat/ diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index b4cb86872..cee4228d7 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -55,8 +55,56 @@ function downloadDriver { fi } +function migrateC3P0toHikari { + # check if c3p0 is used (if any c3p0-* file present) + if ls "${MCR_CONFIG_DIR}lib/c3p0-"*.jar 1> /dev/null 2>&1; then + echo "Migrate from c3p0 to HikariCP" + # delete old c3p0 drivers + rm "${MCR_CONFIG_DIR}lib/c3p0-"*.jar + rm "${MCR_CONFIG_DIR}lib/mchange-commons-java-"*.jar + rm "${MCR_CONFIG_DIR}lib/hibernate-c3p0-"*.jar + + # delete old database drivers + rm "${MCR_CONFIG_DIR}lib/postgresql-42.2.9.jar" + rm "${MCR_CONFIG_DIR}lib/mariadb-java-client-2.5.4.jar" + 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/ubo/ubo-cli/target/bin/ubo.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 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}"; fi @@ -70,23 +118,33 @@ function setDockerValues() { fi if [ -n "${JDBC_NAME}" ]; then - sed -ri "s/(name=\"javax.persistence.jdbc.user\" value=\").*(\")/\1${JDBC_NAME_ESCAPED}\2/" "${PERSISTENCE_XML}" + sed -ri "s/(name=\"jakarta.persistence.jdbc.user\" value=\").*(\")/\1${JDBC_NAME_ESCAPED}\2/" "${PERSISTENCE_XML}" fi if [ -n "${JDBC_PASSWORD}" ]; then - sed -ri "s/(name=\"javax.persistence.jdbc.password\" value=\").*(\")/\1${JDBC_PASSWORD_ESCAPED}\2/" "${PERSISTENCE_XML}" + sed -ri "s/(name=\"jakarta.persistence.jdbc.password\" value=\").*(\")/\1${JDBC_PASSWORD_ESCAPED}\2/" "${PERSISTENCE_XML}" fi if [ -n "${JDBC_DRIVER}" ]; then - sed -ri "s/(name=\"javax.persistence.jdbc.driver\" value=\").*(\")/\1${JDBC_DRIVER_ESCAPED}\2/" "${PERSISTENCE_XML}" + sed -ri "s/(name=\"jakarta.persistence.jdbc.driver\" value=\").*(\")/\1${JDBC_DRIVER_ESCAPED}\2/" "${PERSISTENCE_XML}" fi if [ -n "${JDBC_URL}" ]; then - sed -ri "s/(name=\"javax.persistence.jdbc.url\" value=\").*(\")/\1${JDBC_URL_ESCAPED}\2/" "${PERSISTENCE_XML}" + sed -ri "s/(name=\"jakarta.persistence.jdbc.url\" value=\").*(\")/\1${JDBC_URL_ESCAPED}\2/" "${PERSISTENCE_XML}" fi - if [ -n "${SOLR_CLASSIFICATION_CORE}" ]; then - sed -ri "s/(name=\"hibernate.default_schema\" value=\").*(\")/\1${HIBERNATE_SCHEMA_ESCAPED}\2/" "${PERSISTENCE_XML}" + if [ -n "${JDBC_SCHEMA}" ]; then + if grep -q "hibernate.default_schema" "${PERSISTENCE_XML}"; then + sed -ri "s/(name=\"hibernate.default_schema\" value=\").*(\")/\1${JDBC_SCHEMA_ESCAPED}\2/" "${PERSISTENCE_XML}" + else + sed -ri "s/(<\/properties>)/\n\1/" "${PERSISTENCE_XML}" + fi + + if grep -q "hibernate.hbm2ddl.create_namespaces" "${PERSISTENCE_XML}"; then + sed -ri "s/(name=\"hibernate.hbm2ddl.create_namespaces\" value=\").*(\")/\1true\2/" "${PERSISTENCE_XML}" + else + sed -ri "s/(<\/properties>)/\n\1/" "${PERSISTENCE_XML}" + fi fi sed -ri "s/(name=\"hibernate.hbm2ddl.auto\" value=\").*(\")/\1update\2/" "${PERSISTENCE_XML}" @@ -97,43 +155,38 @@ function setDockerValues() { echo "MCR.datadir=${MCR_DATA_DIR}">>"${MYCORE_PROPERTIES}" fi + 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 + 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 + case $JDBC_DRIVER in - org.postgresql.Driver) downloadDriver "https://jdbc.postgresql.org/download/postgresql-42.2.9.jar";; - org.mariadb.jdbc.Driver) downloadDriver "https://repo.maven.apache.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.5.4/mariadb-java-client-2.5.4.jar";; - org.hsqldb.jdbcDriver) downloadDriver "https://repo.maven.apache.org/maven2/org/hsqldb/hsqldb/2.5.0/hsqldb-2.5.0.jar";; - org.h2.Driver) downloadDriver "https://repo.maven.apache.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar";; - com.mysql.jdbc.Driver) downloadDriver "https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar";; + org.postgresql.Driver) downloadDriver "https://jdbc.postgresql.org/download/postgresql-42.7.0.jar";; + org.mariadb.jdbc.Driver) downloadDriver "https://repo.maven.apache.org/maven2/org/mariadb/jdbc/mariadb-java-client/3.3.0/mariadb-java-client-3.3.0.jar";; + org.h2.Driver) downloadDriver "https://repo1.maven.org/maven2/com/h2database/h2/2.2.224/h2-2.2.224.jar";; + com.mysql.jdbc.Driver) downloadDriver "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar";; esac mkdir -p "${MCR_CONFIG_DIR}lib" - downloadDriver https://repo1.maven.org/maven2/org/hibernate/hibernate-c3p0/5.3.9.Final/hibernate-c3p0-5.3.9.Final.jar - downloadDriver https://repo1.maven.org/maven2/com/mchange/c3p0/0.9.5.2/c3p0-0.9.5.2.jar - downloadDriver https://repo1.maven.org/maven2/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15.jar - - - if [ -f "${MCR_CONFIG_DIR}jwt.secret" ]; then - echo "jwt.secret already exists." - else - echo "jwt.secret does not exists, create it.." - openssl rand -out "${MCR_CONFIG_DIR}jwt.secret" 4096 - fi; + downloadDriver https://repo1.maven.org/maven2/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar } function setUpMyCoRe { /opt/ubo/ubo-cli/target/bin/ubo.sh create configuration directory setDockerValues setupLog4jConfig - sed -ri "s/(<\/properties>)/\n\n\n\n\n\n\1/" "${PERSISTENCE_XML}" - sed -ri "s/META-INF\/mycore-viewer-mappings.xml<\/mapping-file>//" "${PERSISTENCE_XML}" - sed -ri "s/META-INF\/mycore-iview2-mappings.xml<\/mapping-file>//" "${PERSISTENCE_XML}" - sed -ri "s/META-INF\/mycore-ifs-mappings.xml<\/mapping-file>//" "${PERSISTENCE_XML}" + /opt/ubo/ubo-cli/target/bin/ubo.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/ubo/ubo-cli/target/bin/ubo.sh init superuser /opt/ubo/ubo-cli/target/bin/ubo.sh update all classifications from directory /opt/ubo/ubo-cli/src/main/setup/classifications /opt/ubo/ubo-cli/target/bin/ubo.sh update permission create-mods for id POOLPRIVILEGE with rulefile /opt/ubo/ubo-cli/src/main/setup/acl/acl-rule-always-allowed.xml described by always allowed