Skip to content
Snippets Groups Projects
Commit b0dd9b41 authored by Niklas Teschner's avatar Niklas Teschner
Browse files

Feature/bring java to docker

parent 4b27c116
No related branches found
No related tags found
No related merge requests found
# Stage 1: Build the entire Maven project
FROM maven:3.8.4-openjdk-17 AS build
# Set the working directory
WORKDIR /app
# Copy the entire project
COPY . .
# Build the project, including all modules
RUN mvn clean package
# Stage 2: Run the specific child module
FROM openjdk:17-jdk-slim
# Set the working directory
# Copy the built JAR of the child module from the build stage
COPY --from=build /app/cloud/target/cloud-shaded.jar /app/cloud-shaded.jar
# Command to run the application
ENTRYPOINT [ "java", "-jar", "/app/cloud-shaded.jar"]
\ No newline at end of file
......@@ -25,4 +25,31 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-shaded</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.fogcomputing.CloudService</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
......@@ -21,7 +21,7 @@ public class Server implements Runnable, Closeable {
@Override
public void run() {
server.bind("tcp://localhost:%s".formatted(port));
server.bind("tcp://*:%s".formatted(port));
System.out.printf("Server listening on port %s...%n", port);
while (!Thread.currentThread().isInterrupted()) {
......
version: '3.9'
services:
usage-sensor:
usage:
ports:
- "5555:5555"
build:
context: ./sensors/usage
temperature-sensor:
networks:
- my_network
temperature:
ports:
- "5556:5556"
build:
context: ./sensors/temperature
networks:
- my_network
edge:
ports:
- "8080:8080"
build:
context: .
dockerfile: edge.Dockerfile
command: 'cloud:8080 temperature:5556 usage:5555'
networks:
- my_network
cloud:
ports:
- "8081:8081"
build:
context: .
dockerfile: cloud.Dockerfile
networks:
- my_network
networks:
my_network:
driver: bridge
\ No newline at end of file
# Stage 1: Build the entire Maven project
FROM maven:3.8.4-openjdk-17 AS build
# Set the working directory
WORKDIR /app
# Copy the entire project
COPY . .
# Build the project, including all modules
RUN mvn clean package
# Stage 2: Run the specific child module
FROM openjdk:17-jdk-slim
# Set the working directory
# Copy the built JAR of the child module from the build stage
COPY --from=build /app/edge/target/edge-shaded.jar /app/edge-shaded.jar
# Command to run the application
ENTRYPOINT [ "java", "-jar", "/app/edge-shaded.jar"]
\ No newline at end of file
......@@ -25,4 +25,31 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-shaded</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.fogcomputing.EdgeService</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
......@@ -16,6 +16,12 @@ public class EdgeService implements Callable<Void> {
@CommandLine.Parameters(index = "0", description = "Please provide a cloud server address", defaultValue = "localhost:8080")
private String cloudServerAddress;
@CommandLine.Parameters(index = "1", description = "Please provide a temperature sensor address", defaultValue = "*:5556")
private String temperatureSensorAddress;
@CommandLine.Parameters(index = "2", description = "Please provide a usage sensor address", defaultValue = "*:5555")
private String usageSensorAddress;
@Override
public Void call() throws Exception {
......@@ -30,8 +36,8 @@ public class EdgeService implements Callable<Void> {
return null;
}
private static void startSensordataCollector(ConcurrentLinkedQueue<SensorData> messageBuffer, ExecutorService executor) {
SensorDataCollector sensorDataCollector = new SensorDataCollector(messageBuffer);
private void startSensordataCollector(ConcurrentLinkedQueue<SensorData> messageBuffer, ExecutorService executor) {
SensorDataCollector sensorDataCollector = new SensorDataCollector(messageBuffer, temperatureSensorAddress, usageSensorAddress);
executor.submit(sensorDataCollector);
}
......
......@@ -11,17 +11,17 @@ import org.zeromq.ZMQ;
@RequiredArgsConstructor
public class SensorDataCollector implements Runnable {
private static final int USAGE_TOPIC_PORT = 5555;
private static final int TEMPERATURE_TOPIC_PORT = 5556;
private static final String USAGE_TOPIC = "USAGE";
private static final String TEMPERATURE_TOPIC = "TEMPERATURE";
private final ConcurrentLinkedQueue<SensorData> messageBuffer;
private final String temperatureSensorAdress;
private final String usageSensorAddress;
@Override
public void run() {
try (ZMQ.Socket usageSub = createSubscriber(USAGE_TOPIC_PORT, USAGE_TOPIC);
ZMQ.Socket temperatureSub = createSubscriber(TEMPERATURE_TOPIC_PORT, TEMPERATURE_TOPIC);)
try (ZMQ.Socket usageSub = createSubscriber(USAGE_TOPIC);
ZMQ.Socket temperatureSub = createSubscriber(TEMPERATURE_TOPIC);)
{
while (!Thread.currentThread().isInterrupted()) {
// we do sync read of both sensors
......@@ -33,10 +33,16 @@ public class SensorDataCollector implements Runnable {
}
}
private static ZMQ.Socket createSubscriber(int port, String topic) {
private ZMQ.Socket createSubscriber(String topic) {
System.out.println(usageSensorAddress);
ZContext context = ZContextProvider.getInstance();
ZMQ.Socket subscriber = context.createSocket(SocketType.SUB);
subscriber.connect("tcp://*:%d".formatted(port));
if(topic == USAGE_TOPIC) {
System.out.println(usageSensorAddress);
subscriber.connect("tcp://%s".formatted(usageSensorAddress));
} else {
subscriber.connect("tcp://%s".formatted(temperatureSensorAdress));
}
subscriber.subscribe(topic.getBytes());
return subscriber;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment