From 52a266cffbda8277352d0b82e464e63e1330fbc2 Mon Sep 17 00:00:00 2001 From: Thomas Lenz Date: Tue, 23 Jun 2026 12:05:01 +0200 Subject: build(pdf-as-web): adjust release packaging to provide a PDF-AS-Web distribution with integrated DB backend --- doc/PDFAS5_Release_Notes.md | 2 + pdf-as-web-db/build.gradle | 155 ++++++++++++++++++--- .../src/main/configuration/pdf-as-web.properties | 6 +- 3 files changed, 137 insertions(+), 26 deletions(-) diff --git a/doc/PDFAS5_Release_Notes.md b/doc/PDFAS5_Release_Notes.md index ad4881ac..6acefd15 100644 --- a/doc/PDFAS5_Release_Notes.md +++ b/doc/PDFAS5_Release_Notes.md @@ -48,3 +48,5 @@ Der Security-Layer-Einsprungpunkt der ID Austria (`bku.mobile.url`) hat sich ge Zum verbesserten Monitoring von PDF-AS-Web wird der Spring Boot Admin Client mit ausgeliefert, um eine Integration in einen Monitoring-Server zu ermöglichen. Im Standardzustand ist dieser deaktiviert. Um ihn zu aktivieren, sollten `spring.boot.admin.client.enabled` und `spring.boot.admin.client.url` entsprechend gesetzt werden. Der Parameter `web.upload.RequestsizeMax` wurde zur besseren Konsistenz zu `web.upload.requestsizeMax` umbenannt. + +Das Releasepacket wurde um einen separaten PDF-AS-Web Build `pdf-as-web-db-*` ergänzt welcher das im Handbuch beschriebene Datenbank-Backend für die SOAP Schnittstelle bereits inkludiert. diff --git a/pdf-as-web-db/build.gradle b/pdf-as-web-db/build.gradle index c3e23701..5ba12625 100644 --- a/pdf-as-web-db/build.gradle +++ b/pdf-as-web-db/build.gradle @@ -1,39 +1,148 @@ plugins { - id 'java-library' - id 'eclipse' - id 'distribution' + id 'java-library' + id 'eclipse' + id 'distribution' +} + +configurations { + tomcatDist +} + +dependencies { + tomcatDist "org.apache.tomcat:tomcat:${tomcatVersion}@zip" } jar { - manifest { - attributes 'Implementation-Title': 'PDF-AS-5 Web Extension Library', 'JARMANIFEST': 'PDF-AS-LIB' - } + manifest { + attributes 'Implementation-Title': 'PDF-AS-5 Web Extension Library', 'JARMANIFEST': 'PDF-AS-LIB' + } } repositories { - mavenLocal() - mavenCentral() + mavenLocal() + mavenCentral() } dependencies { - implementation project (':pdf-as-web') - implementation project (':pdf-as-web-status') - implementation project (':pdf-as-web-statistic-api') - api "org.hibernate:hibernate-core:6.6.44.Final" - implementation group: 'ch.qos.logback', name: 'logback-classic', version: logbackVersion - implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion + implementation project (':pdf-as-web') + implementation project (':pdf-as-web-status') + implementation project (':pdf-as-web-statistic-api') + api "org.hibernate:hibernate-core:6.6.44.Final" + implementation group: 'ch.qos.logback', name: 'logback-classic', version: logbackVersion + implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion + runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:3.5.6' + + testRuntimeOnly 'com.h2database:h2:2.4.240' +} + +/* + * Release-Bundle analog zu :pdf-as-web, erweitert um die DB-Extension. + */ +def tomcatVer = tomcatVersion +def tomcatDir = layout.buildDirectory.dir("tomcat-bundling") +def tomcatHome = tomcatDir.map { it.dir("apache-tomcat-${tomcatVer}") } +def releasesDirectory = layout.projectDirectory.dir("releases/${project.version}") +def webProject = project(':pdf-as-web') +def dbExtensionJar = tasks.named('jar', Jar) +def dbExtensionRuntimeClasspath = configurations.named('runtimeClasspath') + +tasks.register('extractTomcat', Sync) { + from({ + zipTree(configurations.tomcatDist.singleFile) + }) + into(tomcatDir) +} + +tasks.register('cleanWebAppsInTomcat', Delete) { + dependsOn('extractTomcat') + delete(tomcatHome.map { it.dir("webapps") }) +} + +tasks.register('putTemplateIntoTomcat', Copy) { + dependsOn('cleanWebAppsInTomcat') + from(webProject.layout.projectDirectory.dir("src/main/assembly/tomcat")) + into(tomcatHome) +} + +tasks.register('putConfigIntoTomcat', Copy) { + dependsOn(':pdf-as-lib:processResources', 'putTemplateIntoTomcat') + from(zipTree(project(':pdf-as-lib').layout.buildDirectory.file('resources/main/config/config.zip'))) + into(tomcatHome.map { it.dir("conf/pdf-as") }) +} + +tasks.register('putWebConfigIntoTomcat', Copy) { + dependsOn('putConfigIntoTomcat') + from(webProject.layout.projectDirectory.dir("src/main/configuration")) + into(tomcatHome.map { it.dir("conf/pdf-as") }) +} + +tasks.register('putDbExtensionIntoWebApp', Zip) { + dependsOn(dbExtensionJar, ':pdf-as-web:bootWar') + from(zipTree(webProject.tasks.named('bootWar').flatMap { it.archiveFile })) + from(dbExtensionJar.flatMap { it.archiveFile }) { + into 'WEB-INF/lib' + } + from(dbExtensionRuntimeClasspath) { + into 'WEB-INF/lib' + } + archiveFileName = "pdf-as-web-db-${project.version}.war" + destinationDirectory = layout.buildDirectory.dir('db-enhanced-webapp') + duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + +/* + * DB-Extension weiterhin auch separat als Lib-Verzeichnis ablegen. + * Das entspricht dem bisherigen Extension-Artefakt: eigenes JAR + Runtime-Dependencies. + */ +tasks.register('putDbExtensionLibs', Copy) { + dependsOn(dbExtensionJar) + from(dbExtensionJar.flatMap { it.archiveFile }) + from(dbExtensionRuntimeClasspath) + into(releasesDirectory.dir("pdf-as-web-db-extension-${project.version}/lib")) + duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} - testRuntimeOnly 'com.h2database:h2:2.4.240' +tasks.register('injectPdfAsWebApp', Copy) { + dependsOn('putDbExtensionIntoWebApp', 'extractTomcat') + from(tasks.named('putDbExtensionIntoWebApp', Zip).flatMap { it.archiveFile }) { + rename { 'pdf-as-web.war' } + } + into(tomcatHome.map { it.dir("webapps") }) +} + +tasks.register('buildTomcatZip', Zip) { + dependsOn('injectPdfAsWebApp') + from(tomcatDir) + archiveFileName = "apache-tomcat-${tomcatVer}-pdf-as-web-db-${project.version}.zip" + destinationDirectory = layout.buildDirectory +} + +tasks.register('buildTomcatTar', Tar) { + dependsOn('injectPdfAsWebApp') + from(tomcatDir) + archiveFileName = "apache-tomcat-${tomcatVer}-pdf-as-web-db-${project.version}.tar" + destinationDirectory = layout.buildDirectory + compression = Compression.NONE +} + +tasks.register('releaseConfig', Copy) { + from(webProject.layout.projectDirectory.file('src/main/configuration/pdf-as-web.properties')) + into(releasesDirectory.dir("cfg")) } tasks.register('releases', Copy) { - from jar.outputs - from distZip.outputs - from distTar.outputs - into rootDir.toString() + "/releases/" + version + dependsOn(dbExtensionJar, 'sourcesJar', 'distZip', 'distTar', 'releaseConfig', 'putDbExtensionLibs', 'buildTomcatZip', 'buildTomcatTar') + + from(dbExtensionJar.flatMap { it.archiveFile }) + from(tasks.named('sourcesJar').flatMap { it.archiveFile }) + from(tasks.named('distZip').flatMap { it.archiveFile }) + from(tasks.named('distTar').flatMap { it.archiveFile }) + from(tasks.named('putDbExtensionIntoWebApp', Zip).flatMap { it.archiveFile }) + from(tasks.named('buildTomcatZip').flatMap { it.archiveFile }) + from(tasks.named('buildTomcatTar').flatMap { it.archiveFile }) + into(releasesDirectory) } -releases.dependsOn jar -releases.dependsOn sourcesJar -releases.dependsOn distZip -releases.dependsOn distTar +tasks.named('clean', Delete) { + delete(releasesDirectory) +} diff --git a/pdf-as-web/src/main/configuration/pdf-as-web.properties b/pdf-as-web/src/main/configuration/pdf-as-web.properties index fea5e276..a33792c7 100644 --- a/pdf-as-web/src/main/configuration/pdf-as-web.properties +++ b/pdf-as-web/src/main/configuration/pdf-as-web.properties @@ -83,10 +83,10 @@ request.store=at.gv.egiz.pdfas.web.store.InMemoryRequestStore #request.db.timeout=600 #Hibernate Properties for DB Store +#hibernate.props.hibernate.dialect=org.hibernate.dialect.MariaDBDialect +#hibernate.props.hibernate.connection.driver_class=org.mariadb.jdbc.Driver +#hibernate.props.hibernate.connection.url=jdbc:mariadb://localhost:3306/pdfas -#hibernate.props.hibernate.dialect=org.hibernate.dialect.MySQLDialect -#hibernate.props.hibernate.connection.driver_class=com.mysql.jdbc.Driver -#hibernate.props.hibernate.connection.url=jdbc:mysql://localhost/pdfasweb #hibernate.props.hibernate.connection.username=pdfasweb #hibernate.props.hibernate.connection.password=pdfasweb #hibernate.props.hibernate.connection.pool_size=5 -- cgit v1.2.3