1 Commits

Author SHA1 Message Date
tpeetz ae66fe3c61 add Hibernate to kontor-javalin 2025-12-22 00:22:42 +01:00
8 changed files with 193 additions and 47 deletions
+88 -2
View File
@@ -1,5 +1,10 @@
plugins { plugins {
id 'java' id 'java'
//id 'application'
id 'jacoco'
id 'test-report-aggregation'
id 'jacoco-report-aggregation'
alias(libs.plugins.lombok)
} }
repositories { repositories {
@@ -7,14 +12,92 @@ repositories {
} }
dependencies { dependencies {
implementation libs.javalin // Pulling in Javalin implementation libs.javalin.bundle
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation libs.postgresql
implementation libs.hibernate
annotationProcessor libs.hibernate.modelgen
testImplementation( platform( libs.junit.bom.get().toString() ))
testImplementation "org.junit.jupiter:junit-jupiter"
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation libs.jackson // For JSON serialization of persons implementation libs.jackson // For JSON serialization of persons
implementation libs.slf4j // To see some Javalin logging implementation libs.slf4j // To see some Javalin logging
} }
testing {
suites {
configureEach {
useJUnitJupiter()
dependencies {
implementation project()
implementation libs.hsqldb
implementation libs.sqlite.jdbc
runtimeOnly 'org.junit.platform:junit-platform-launcher'
}
}
test(JvmTestSuite) {
targets {
all {
testTask.configure {
reports {
junitXml {
outputPerTestCase = true // defaults to false
mergeReruns = true // defaults to false
}
}
finalizedBy(jacocoTestReport)
}
}
}
}
integrationTest(JvmTestSuite) {
targets {
all {
testTask.configure {
shouldRunAfter(test)
finalizedBy(jacocoTestReport)
}
}
}
}
}
}
tasks.named('check') {
dependsOn(testing.suites.integrationTest)
dependsOn(testing.suites.test)
dependsOn tasks.named('testAggregateTestReport', TestReport)
dependsOn tasks.named('integrationTestAggregateTestReport', TestReport)
}
jacocoTestReport {
dependsOn test, integrationTest
reports {
xml.required = true
csv.required = false
}
}
reporting {
reports {
testAggregateTestReport(AggregateTestReport) {
}
integrationTestAggregateTestReport(AggregateTestReport) {
}
integrationTestCodeCoverageReport(JacocoCoverageReport) {
}
}
}
// application {
// mainClass = 'de.thpeetz.kontor.api.Main'
// }
task fatJar(type: Jar) { task fatJar(type: Jar) {
manifest { manifest {
attributes 'Main-Class': 'de.thpeetz.kontor.api.Main' attributes 'Main-Class': 'de.thpeetz.kontor.Main'
} }
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
@@ -22,6 +105,9 @@ task fatJar(type: Jar) {
} }
build.dependsOn fatJar build.dependsOn fatJar
// distZip.dependsOn fatJar
// distTar.dependsOn fatJar
// startScripts.dependsOn fatJar
wrapper { wrapper {
gradleVersion = "9.2.1" gradleVersion = "9.2.1"
+2
View File
@@ -1,3 +1,5 @@
description='Kontor with Spring Boot' description='Kontor with Spring Boot'
version=0.2.0-SNAPSHOT version=0.2.0-SNAPSHOT
group=de.thpeetz group=de.thpeetz
org.gradle.warning.mode=none
+22 -8
View File
@@ -1,18 +1,32 @@
[versions] [versions]
gradle = "8.6" gradle = "8.6"
junit = "5.8.2" hibernate = "6.4.4.Final"
#slf4j = "1.7.36"
slf4j = "2.0.16"
hsqldb = "2.7.1" hsqldb = "2.7.1"
sqlite = "3.25.2"
jackson = "2.16.1" jackson = "2.16.1"
#javalin = "4.6.4"
javalin = "6.7.0" javalin = "6.7.0"
junit = "5.8.2"
lombok = "8.6"
postgresql = "42.6.2"
slf4j = "2.0.16"
sonarqube = "3.3"
spotbugs = "6.0.7"
sqlite = "3.25.2"
[libraries] [libraries]
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } hibernate = { module = "org.hibernate.orm:hibernate-core", version.ref = "hibernate" }
slf4j = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } hibernate-modelgen = { module = "org.hibernate.orm:hibernate-jpamodelgen", version.ref = "hibernate" }
hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" } hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" }
jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
javalin = { module = "io.javalin:javalin", version.ref = "javalin" } javalin = { module = "io.javalin:javalin", version.ref = "javalin" }
javalin-bundle = { module = "io.javalin:javalin-bundle", version.ref = "javalin" }
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" }
lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" }
postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" }
slf4j = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
[plugins]
spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugs" }
sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" }
lombok = { id = "io.freefair.lombok", version.ref = "lombok" }
@@ -0,0 +1,26 @@
package de.thpeetz.kontor;
import io.javalin.Javalin;
import static io.javalin.apibuilder.ApiBuilder.get;
import static io.javalin.apibuilder.ApiBuilder.path;
import java.util.HashMap;
import de.thpeetz.kontor.web.PersonHandler;
public class JavalinApp {
public static Javalin create() {
return Javalin.create((var config) -> config.router.apiBuilder(() -> {
path("/health", () -> get(ctx -> {
HashMap<String, String> status = new HashMap<>();
status.put("status", "ok");
ctx.json(status);
}));
path("/persons", () -> {
get(PersonHandler.listAll);
});
}));
}
}
@@ -0,0 +1,15 @@
package de.thpeetz.kontor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static Logger logger = LoggerFactory.getLogger(Main.class);
private static short port = 8400;
public static void main(String[] args) {
JavalinApp.create().start(port);
logger.info("API's alive for real :-)))");
}
}
@@ -1,37 +0,0 @@
package de.thpeetz.kontor.api;
import de.thpeetz.kontor.services.inmemory.InMemoryPersonReader;
import io.javalin.Javalin;
import java.util.HashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
private static Logger logger = LoggerFactory.getLogger(Main.class);
private static short port = 8400;
public static void main(String[] args) {
var personReader = new InMemoryPersonReader();
var objMapper = new ObjectMapper();
var result = objMapper.valueToTree(personReader.getAll());
logger.info("API: found {} people.", personReader.getAll().size());
var app = Javalin.create().start(port);
app.get("/ping", ctx -> ctx.result("pong"));
app.get("/health", ctx -> {
HashMap<String, String> status = new HashMap<>();
status.put("status", "ok");
ctx.json(status);
});
app.get("/persons", ctx -> {
logger.info("persons called");
ctx.json(result);
});
logger.info("API's alive for real :-)))");
}
}
@@ -0,0 +1,16 @@
package de.thpeetz.kontor.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.thpeetz.kontor.services.inmemory.InMemoryPersonReader;
import io.javalin.http.Handler;
public class PersonHandler {
public static Handler listAll = (context) -> {
var personReader = new InMemoryPersonReader();
var objMapper = new ObjectMapper();
var result = objMapper.valueToTree(personReader.getAll());
context.json(result);
};
}
@@ -0,0 +1,24 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
<logger name="org.hibernate.SQL" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<!-- <logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false">-->
<!-- <appender-ref ref="STDOUT" />-->
<!-- </logger>-->
<!-- <logger name="org.hibernate.orm.jdbc.extract" level="trace" additivity="false">-->
<!-- <appender-ref ref="STDOUT" />-->
<!-- </logger>-->
</configuration>