Skip to content

Commit 10f6aae

Browse files
committed
Switch to Spring Boot
1 parent 715093d commit 10f6aae

32 files changed

+536
-594
lines changed

.dockerignore

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
*.class
12
.DS_Store
23
.editorconfig
3-
.git
4-
.github
4+
*.env
5+
*.log
56
*.md
67
*.sh
7-
*.tmp
8+
./target
89
tmp*
10+
*.tmp

.editorconfig

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ indent_style = tab
1111
insert_final_newline = true
1212
trim_trailing_whitespace = true
1313

14-
[*.yaml]
15-
indent_size = 2
16-
indent_style = space
17-
18-
[*.json]
14+
[*.{json,yaml}]
1915
indent_size = 2
2016
indent_style = space

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ node_modules/
1313
*.pyc
1414
.sass-cache/
1515
_site/
16+
target
1617
tmp/
1718
_tmp/
1819
*.tgz

Dockerfile

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
# this one makes 352 MB image
2-
#FROM jetty:12-jre21-eclipse-temurin
3-
# this one makes a 271 MB image
4-
FROM jetty:12-jre21-alpine
1+
FROM maven:3.9.9-eclipse-temurin-21 AS builder
52

6-
ARG COMMIT=(not set)
7-
ARG LASTMOD=(not set)
8-
ENV COMMIT=$COMMIT
9-
ENV LASTMOD=$LASTMOD
3+
WORKDIR /app
4+
COPY pom.xml /app
105

11-
USER jetty
6+
RUN mvn dependency:go-offline
127

13-
# why the f*** isn't in the Dockerfile README???
14-
RUN java -jar "$JETTY_HOME/start.jar" --add-modules=ee10-webapp,ee10-deploy,ee10-jsp,ee10-jstl,ee10-websocket-jetty,ee10-websocket-jakarta
8+
COPY . /app
9+
RUN mvn package
1510

16-
RUN java -jar "$JETTY_HOME/start.jar" --list-modules
1711

18-
COPY ./www /var/lib/jetty/webapps/ROOT
12+
FROM gcr.io/distroless/java21-debian12
13+
14+
COPY --from=builder /app/target/regexplanet-1.0.jar /app/regexplanet-1.0.jar
15+
16+
WORKDIR /app
17+
CMD ["regexplanet-1.0.jar"]

build.xml

Lines changed: 0 additions & 30 deletions
This file was deleted.

deploy.sh

Lines changed: 0 additions & 16 deletions
This file was deleted.

docker-run.sh

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,19 @@
11
#!/usr/bin/env bash
22
#
3-
# run the docker container version locally
4-
#
3+
# run locally but in docker
54

65
set -o errexit
76
set -o pipefail
87
set -o nounset
98

10-
if false ; then
11-
docker run \
12-
--plain \
13-
--detach \
14-
--name regexplanet-java \
15-
--publish 4000:8080 \
16-
--volume "${PWD}/src/main/webapp:/var/lib/jetty/webapps/ROOT" \
17-
jetty:latest
18-
19-
20-
exit 0
21-
fi
22-
23-
docker build -t regexplanet-java .
24-
9+
docker build \
10+
--build-arg COMMIT=$(git rev-parse --short HEAD)-local \
11+
--build-arg LASTMOD=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
12+
--tag regexplanet-java \
13+
.
2514

2615
docker run \
16+
--publish 4000:4000 \
2717
--expose 4000 \
28-
--env COMMIT=$(git rev-parse --short HEAD)-local \
29-
--env LASTMOD=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
30-
--env PORT='4000' \
31-
--publish 4000:8080 \
18+
--env SERVER_PORT='4000' \
3219
regexplanet-java
33-

pom.xml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.regexplanet</groupId>
7+
<artifactId>regexplanet</artifactId>
8+
<version>1.0</version>
9+
10+
<parent>
11+
<groupId>org.springframework.boot</groupId>
12+
<artifactId>spring-boot-starter-parent</artifactId>
13+
<version>3.4.4</version>
14+
</parent>
15+
<dependencies>
16+
<dependency>
17+
<groupId>org.springframework.boot</groupId>
18+
<artifactId>spring-boot-starter-web</artifactId>
19+
</dependency>
20+
<dependency>
21+
<groupId>javax.servlet</groupId>
22+
<artifactId>javax.servlet-api</artifactId>
23+
<version>4.0.1</version> <!-- Use the appropriate version for your project -->
24+
<scope>provided</scope>
25+
</dependency>
26+
</dependencies>
27+
<build>
28+
<plugins>
29+
<plugin>
30+
<groupId>org.springframework.boot</groupId>
31+
<artifactId>spring-boot-maven-plugin</artifactId>
32+
</plugin>
33+
</plugins>
34+
</build>
35+
36+
<!-- Additional lines to be added here... -->
37+
38+
</project>

run.sh

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,18 @@
1-
#!/bin/bash
2-
ant run
1+
#!/usr/bin/env bash
2+
#
3+
# script to run on localhost
4+
#
5+
6+
set -o errexit
7+
set -o pipefail
8+
set -o nounset
9+
10+
ENV_FILE="${1:-./.env}"
11+
if [ -f "${ENV_FILE}" ]; then
12+
echo "INFO: loading '${ENV_FILE}'!"
13+
export $(cat "${ENV_FILE}")
14+
fi
15+
16+
17+
18+
mvn spring-boot:run
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.regexplanet;
2+
3+
import org.springframework.boot.Banner;
4+
import org.springframework.boot.SpringApplication;
5+
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import org.springframework.boot.web.servlet.ServletComponentScan;
7+
import org.springframework.web.bind.annotation.RequestMapping;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
@RestController
11+
@ServletComponentScan
12+
@SpringBootApplication
13+
public class RegexplanetApp {
14+
15+
@RequestMapping("/")
16+
String home(jakarta.servlet.http.HttpServletResponse resp) {
17+
resp.setContentType("text/plain");
18+
resp.setCharacterEncoding("UTF-8");
19+
return "Running Java " + System.getProperty("java.version");
20+
}
21+
22+
public static void main(String[] args) {
23+
SpringApplication application = new SpringApplication(RegexplanetApp.class);
24+
application.setBannerMode(Banner.Mode.OFF);
25+
application.run(args);
26+
}
27+
28+
29+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.regexplanet;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.RequestParam;
8+
9+
import java.io.IOException;
10+
import java.io.PrintWriter;
11+
import java.time.ZoneOffset;
12+
import java.time.ZonedDateTime;
13+
import java.time.format.DateTimeFormatter;
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
17+
@Controller
18+
public class StatusController {
19+
20+
@GetMapping("/status.json")
21+
public void handle(jakarta.servlet.http.HttpServletResponse resp, @RequestParam(required = false) String callback)
22+
throws IOException {
23+
24+
// Create a JSON response
25+
Map<String, Object> retVal = new HashMap<>();
26+
retVal.put("success", Boolean.TRUE);
27+
retVal.put("message", "OK");
28+
retVal.put("commit", System.getenv("COMMIT"));
29+
retVal.put("timestamp", ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
30+
retVal.put("lastmod", System.getenv("LASTMOD"));
31+
retVal.put("tech", "Java " + System.getProperty("java.specification.version", "(unknown)"));
32+
retVal.put("version", System.getProperty("java.version", "Unknown") + " ("
33+
+ System.getProperty("java.vm.name", "Unknown VM") + ")");
34+
retVal.put("java.vendor", System.getProperty("java.vendor"));
35+
retVal.put("java.version", System.getProperty("java.version"));
36+
retVal.put("java.specification.version", System.getProperty("java.specification.version"));
37+
retVal.put("java.class.version", System.getProperty("java.class.version"));
38+
retVal.put("java.vm.version", System.getProperty("java.vm.version"));
39+
retVal.put("os.name", System.getProperty("os.name"));
40+
retVal.put("java.vm.specification.version", System.getProperty("java.vm.specification.version"));
41+
retVal.put("java.vm.vendor", System.getProperty("java.vm.vendor"));
42+
retVal.put("java.vm.name", System.getProperty("java.vm.name"));
43+
retVal.put("file.encoding", System.getProperty("file.encoding"));
44+
45+
// Convert the map to JSON using Jackson
46+
ObjectMapper objectMapper = new ObjectMapper();
47+
String jsonResponse = objectMapper.writeValueAsString(retVal);
48+
49+
// Write the JSON response
50+
if (callback != null && callback.matches("^[a-zA-Z_][a-zA-Z0-9_]*$")) {
51+
resp.setContentType("application/javascript");
52+
resp.setCharacterEncoding("UTF-8");
53+
PrintWriter writer = resp.getWriter();
54+
writer.write(callback);
55+
writer.write("(");
56+
writer.write(jsonResponse);
57+
writer.write(");");
58+
} else {
59+
resp.setHeader("Access-Control-Allow-Origin", "*");
60+
resp.setHeader("Access-Control-Allow-Methods", "GET, POST");
61+
resp.setHeader("Access-Control-Max-Age", "604800");
62+
resp.setContentType("application/json");
63+
resp.setCharacterEncoding("UTF-8");
64+
resp.getWriter().write(jsonResponse);
65+
}
66+
}
67+
}

0 commit comments

Comments
 (0)