Skip to content

Commit

Permalink
MCR-3031 configure the database without persistence xml
Browse files Browse the repository at this point in the history
  • Loading branch information
sebhofmann authored and kkrebs committed Feb 27, 2024
1 parent 9dfe5a2 commit 8d8026c
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 68 deletions.
112 changes: 47 additions & 65 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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/(<property name=\"hibernate.connection.provider_class\" value=\")(.*)(\" \/>)/\1org.hibernate.hikaricp.internal.HikariCPConnectionProvider\3/" "${PERSISTENCE_XML}"
sed -ri "s/(<\/properties>)/<property name=\"hibernate.hikari.maximumPoolSize\" value=\"30\" \/>\n<property name=\"hibernate.hikari.minimumIdle\" value=\"2\" \/>\n<property name=\"hibernate.hikari.idleTimeout\" value=\"30000\" \/>\n<property name=\"hibernate.hikari.maxLifetime\" value=\"1800000\" \/>\n<property name=\"hibernate.hikari.leakDetectionThreshold\" value=\"9000\" \/>\n<property name=\"hibernate.hikari.registerMbeans\" value=\"true\" \/>\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/(<property name=\")javax.persistence(.*\" value=\".*\" \/>)/\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>)/<property name=\"hibernate.hikari.maximumPoolSize\" value=\"30\" \/>\n<property name=\"hibernate.hikari.minimumIdle\" value=\"2\" \/>\n<property name=\"hibernate.hikari.idleTimeout\" value=\"30000\" \/>\n<property name=\"hibernate.hikari.maxLifetime\" value=\"1800000\" \/>\n<property name=\"hibernate.hikari.leakDetectionThreshold\" value=\"9000\" \/>\n<property name=\"\" value=\"true\" \/>
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

Expand All @@ -173,15 +146,24 @@ 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 {
echo "Set up MyCoRe!"
/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>)/<property name=\"hibernate.hikari.maximumPoolSize\" value=\"30\" \/>\n<property name=\"hibernate.hikari.minimumIdle\" value=\"2\" \/>\n<property name=\"hibernate.hikari.idleTimeout\" value=\"30000\" \/>\n<property name=\"hibernate.hikari.maxLifetime\" value=\"1800000\" \/>\n<property name=\"hibernate.hikari.leakDetectionThreshold\" value=\"9000\" \/>\n<property name=\"hibernate.hikari.registerMbeans\" value=\"true\" \/>\n\1/" "${MCR_CONFIG_DIR}resources/META-INF/persistence.xml"
/opt/mir/mir/bin/setup.sh
}

Expand Down
2 changes: 1 addition & 1 deletion mir-module/src/main/resources/config/mir/mycore.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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) #
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 8d8026c

Please sign in to comment.