diff --git a/Dockerfile b/Dockerfile
index 600070d..99f4a1d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,62 +1,50 @@
+# syntax=docker/dockerfile:1.3-labs
 FROM fedora:39 AS builder
 
 # To build:
 # docker build -t nebulous/solver .
 
-#
-# For a shell, to diagnose problems etc.:
-# docker run --rm -it --entrypoint /bin/bash nebulous/solver
+# To run, resulting in a terminal for further experiments:
+# docker run -it nebulous/solver
 
-RUN mkdir -p /solver
 WORKDIR /solver
+COPY ./ /solver
 
-# Development framework, dependencies
-RUN dnf --assumeyes install gcc-c++-13.2.1-6.fc39 make-1:4.4.1-2.fc39 git-core-2.44.0-1.fc39 boost-devel-1.81.0-8.fc39 ccache-4.8.2-2.fc39 qpid-proton-cpp-devel-0.38.0-4.fc39 json-c-0.17-1.fc39 json-devel-3.11.2-3.fc39 json-glib-1.8.0-1.fc39 jsoncpp-1.9.5-5.fc39 jsoncpp-devel-1.9.5-5.fc39 coin-or-Couenne-0.5.8-12.fc39 wget-1.21.3-7.fc39 && \
-    dnf clean all && \
-    git clone https://github.com/jarro2783/cxxopts.git CxxOpts && \
-    git clone https://github.com/GeirHo/TheronPlusPlus.git Theron++ && \
+RUN <<EOF
+    # Development framework
+    dnf --assumeyes install gcc-c++ make git-core boost boost-devel ccache qpid-proton-cpp qpid-proton-cpp-devel json-c json-devel json-glib jsoncpp jsoncpp-devel coin-or-Couenne wget
+    # Dependencies
+    git clone https://github.com/jarro2783/cxxopts.git CxxOpts
+    git clone https://github.com/GeirHo/TheronPlusPlus.git Theron++
     mkdir Theron++/Bin
 
-# Install AMPL library
-RUN wget --progress=dot:giga https://portal.ampl.com/external/?url=https://portal.ampl.com/dl/amplce/ampl.linux64.tgz -O ampl.linux64.tgz && \
-    tar --file=ampl.linux64.tgz --extract && \
-    mv ampl.linux-intel64 AMPL && \
+    # Install AMPL library
+    wget --no-verbose https://portal.ampl.com/external/?url=https://portal.ampl.com/dl/amplce/ampl.linux64.tgz -O ampl.linux64.tgz
+    tar --file=ampl.linux64.tgz --extract
+    mv ampl.linux-intel64 AMPL
     rm ampl.linux64.tgz
+EOF
 
 # Make AMPL shared libraries findable
 ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/solver/AMPL:/solver/AMPL/amplapi/lib"
 
-COPY . /solver
-
 # Build solver
-RUN make SolverComponent -e THERON=./Theron++ AMPL_INCLUDE=./AMPL/amplapi/include AMPL_LIB=./AMPL/amplapi/lib  CxxOpts_DIR=./CxxOpts/include && \
-    make clean
+RUN make SolverComponent -e THERON=./Theron++ AMPL_INCLUDE=./AMPL/amplapi/include AMPL_LIB=./AMPL/amplapi/lib  CxxOpts_DIR=./CxxOpts/include
 
 # ============================================================
 
 FROM fedora:39
 WORKDIR /solver
-RUN dnf --assumeyes install boost-1.81.0-8.fc39 qpid-proton-cpp-0.38.0-4.fc39 json-c-0.17-1.fc39 json-glib-1.8.0-1.fc39 jsoncpp-1.9.5-5.fc39 coin-or-Couenne-0.5.8-12.fc39 && \
-    dnf clean all
-
+RUN dnf --assumeyes install boost qpid-proton-cpp json-c json-glib jsoncpp coin-or-Couenne
 COPY --from=builder /solver /solver
 ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/solver/AMPL:/solver/AMPL/amplapi/lib"
 
-# The `SolverComponent` arguments `--ModelDir` and `--AMPLDir` are
-# constant, the other arguments can be given on the command line or
-# via environment variables:
-#
-#   -b amqbroker (variable ACTIVEMQ_HOST, default localhost)
-#   -P amqpport (variable ACTIVEMQ_PORT, default 5672)
-#   -u user (variable ACTIVEMQ_USER, default admin)
-#   -p amqppassword (variable ACTIVEMQ_PASSWORD)
-#   -e appid (variable APPLICATION_ID)
-#   -l license (variable AMPL_LICENSE)
-#
-# The docker can be started with explicit parameters, environment
-# variables or a mix of both.  Parameters override variables.
-#
-#     docker run -e APPLICATION_ID="my_app_id" nebulous/solver -b="https://amqp.example.com/" -p=s3kr1t
-#
-
-ENTRYPOINT ["/solver/start-solver.sh"]
+# 
+# We set constant `--ModelDir` and `--AMPLDir`; the other arguments can be
+# given on the command line, like so (note that `--Endpoint` is mandatory):
+# 
+# docker run nebulous/solver --Broker=https://somewhere.else/ --Endpoint=my-app-id
+# 
+# For a shell, to diagnose problems etc.:
+# docker run --rm -it --entrypoint /bin/bash nebulous/solver
+ENTRYPOINT ["/solver/SolverComponent", "--ModelDir=/tmp", "--AMPLDir=/solver/AMPL"]
diff --git a/charts/nebulous-optimiser-solver/templates/deployment.yaml b/charts/nebulous-optimiser-solver/templates/deployment.yaml
index 340666a..66d8a07 100644
--- a/charts/nebulous-optimiser-solver/templates/deployment.yaml
+++ b/charts/nebulous-optimiser-solver/templates/deployment.yaml
@@ -33,26 +33,20 @@ spec:
             {{- toYaml .Values.securityContext | nindent 12 }}
           image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
           imagePullPolicy: {{ .Values.image.pullPolicy }}
+          ports:
+            - name: http
+              containerPort: 8080
+              protocol: TCP
+          livenessProbe:
+            httpGet:
+              path: /
+              port: http
+          readinessProbe:
+            httpGet:
+              path: /
+              port: http
           resources:
             {{- toYaml .Values.resources | nindent 12 }}
-          env:
-          - name: APPLICATION_ID
-          - name: ACTIVEMQ_HOST
-            value: {{ .Values.activemq.ACTIVEMQ_HOST }}
-          - name: ACTIVEMQ_PORT
-            value: {{ .Values.activemq.ACTIVEMQ_PORT }}
-          - name: ACTIVEMQ_USER
-            value: {{ .Values.activemq.ACTIVEMQ_USER }}
-          - name: ACTIVEMQ_PASSWORD
-            valueFrom:
-              secretKeyRef:
-                name: {{ .Values.activemqSecret.secretName }}
-                key: {{ .Values.activemqSecret.secretKey }}
-          - name: AMPL_LICENSE
-            valueFrom:
-              secretKeyRef:
-                name: {{ .Values.amplLicense.secretName }}
-                key: {{ .Values.amplLicense.secretKey }}
       {{- with .Values.nodeSelector }}
       nodeSelector:
         {{- toYaml . | nindent 8 }}
@@ -65,4 +59,3 @@ spec:
       tolerations:
         {{- toYaml . | nindent 8 }}
       {{- end }}
-
diff --git a/charts/nebulous-optimiser-solver/values.yaml b/charts/nebulous-optimiser-solver/values.yaml
index d8ad764..9fe40af 100644
--- a/charts/nebulous-optimiser-solver/values.yaml
+++ b/charts/nebulous-optimiser-solver/values.yaml
@@ -5,7 +5,7 @@
 replicaCount: 1
 
 image:
-  repository: "quay.io/nebulous/optimiser-solver"
+  repository: "quay.io/nebulous/optimiser-solver-java-spring-boot-demo"
   pullPolicy: IfNotPresent
   # Overrides the image tag whose default is the chart appVersion.
   tag: ""
@@ -36,6 +36,10 @@ securityContext: {}
   # runAsNonRoot: true
   # runAsUser: 1000
 
+service:
+  type: ClusterIP
+  port: 80
+
 ingress:
   enabled: false
   className: ""
@@ -76,16 +80,3 @@ nodeSelector: {}
 tolerations: []
 
 affinity: {}
-
-activemq:
-  ACTIVEMQ_HOST: nebulous-activemq
-  ACTIVEMQ_PORT: 5672
-  ACTIVEMQ_USER: admin
-
-activemqSecret:
-  secretName: "activeMqPassword"
-  secretKey: "ACTIVEMQ_PASSWORD"
-
-amplLicense:
-  secretName: "ampl-license"
-  secretKey: "AMPL_LICENSE"
diff --git a/docker-compose.yaml b/docker-compose.yaml
deleted file mode 100644
index ee90016..0000000
--- a/docker-compose.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-# This file tests starting the solver inside a container.  Since the
-# solver will not start without a connection to an ActiveMQ broker,
-# start one alongside it.
-
-# If we have an application id, run the solver like this:
-#
-#    APPLICATION_ID="my_application_id" docker-compose up
-#
-services:
-  activemq:
-    image: apache/activemq-classic
-    ports:
-      - "61616:61616"
-      - "5672:5672"
-      - "8161:8161"
-    networks:
-      - nebulous-activemq
-    container_name: myActiveMQ
-    environment:
-      ACTIVEMQ_WEB_USER: admin
-      ACTIVEMQ_WEB_PASSWORD: admin
-      container_name: activemq
-    healthcheck:
-      test: curl -u admin:admin -H origin:localhost --silent --show-error "http://localhost:8161/api/jolokia/exec/org.apache.activemq:type=Broker,brokerName=localhost,service=Health/healthStatus" | tee /dev/tty | grep --silent -e 'Getting Worried' -e 'Good'
-      interval: 5s
-      timeout: 5s
-      retries: 5
-
-  solver:
-    image: nebulous/solver
-    depends_on:
-      activemq:
-        condition: service_healthy
-    links:
-      - activemq
-    networks:
-      - nebulous-activemq
-    environment:
-      ACTIVEMQ_HOST: activemq
-      APPLICATION_ID: ${APPLICATION_ID:-invalid-application-id}
-      # Note that an invalid license crashes the solver; no license lets it start
-      AMPL_LICENSE: ${AMPL_LICENSE}
-    container_name: solver
-
-networks:
-  nebulous-activemq:
diff --git a/java-spring-boot-demo/.gitignore b/java-spring-boot-demo/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/java-spring-boot-demo/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/java-spring-boot-demo/Dockerfile b/java-spring-boot-demo/Dockerfile
new file mode 100644
index 0000000..427e30e
--- /dev/null
+++ b/java-spring-boot-demo/Dockerfile
@@ -0,0 +1,15 @@
+#
+# Build stage
+#
+FROM docker.io/library/maven:3.9.2-eclipse-temurin-17 AS build
+COPY src /home/app/src
+COPY pom.xml /home/app
+RUN mvn -f /home/app/pom.xml clean package
+
+#
+# Package stage
+#
+FROM docker.io/library/eclipse-temurin:17-jre
+COPY --from=build /home/app/target/demo-0.0.1-SNAPSHOT.jar /usr/local/lib/demo.jar
+EXPOSE 8080
+ENTRYPOINT ["java","-jar","/usr/local/lib/demo.jar"]
diff --git a/java-spring-boot-demo/pom.xml b/java-spring-boot-demo/pom.xml
new file mode 100644
index 0000000..76e0f0e
--- /dev/null
+++ b/java-spring-boot-demo/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.1.0</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.example</groupId>
+    <artifactId>demo</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>demo</name>
+    <description>Demo project for Spring Boot</description>
+    <properties>
+        <java.version>17</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/java-spring-boot-demo/src/main/java/com/example/demo/DemoApplication.java b/java-spring-boot-demo/src/main/java/com/example/demo/DemoApplication.java
new file mode 100644
index 0000000..094d95b
--- /dev/null
+++ b/java-spring-boot-demo/src/main/java/com/example/demo/DemoApplication.java
@@ -0,0 +1,13 @@
+package com.example.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(DemoApplication.class, args);
+    }
+
+}
diff --git a/java-spring-boot-demo/src/main/java/com/example/demo/DemoController.java b/java-spring-boot-demo/src/main/java/com/example/demo/DemoController.java
new file mode 100644
index 0000000..61a5075
--- /dev/null
+++ b/java-spring-boot-demo/src/main/java/com/example/demo/DemoController.java
@@ -0,0 +1,14 @@
+package com.example.demo;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DemoController {
+
+    @RequestMapping("/")
+    public Object root() {
+        return null;
+    }
+
+}
diff --git a/java-spring-boot-demo/src/main/resources/application.properties b/java-spring-boot-demo/src/main/resources/application.properties
new file mode 100644
index 0000000..e69de29
diff --git a/java-spring-boot-demo/src/test/java/com/example/demo/DemoApplicationTests.java b/java-spring-boot-demo/src/test/java/com/example/demo/DemoApplicationTests.java
new file mode 100644
index 0000000..eaa9969
--- /dev/null
+++ b/java-spring-boot-demo/src/test/java/com/example/demo/DemoApplicationTests.java
@@ -0,0 +1,13 @@
+package com.example.demo;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class DemoApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}
diff --git a/makefile b/makefile
index 835de05..f49290a 100644
--- a/makefile
+++ b/makefile
@@ -3,21 +3,21 @@
 # Solver component
 #
 # The NebulOuS solver consists of several interacting actors using the AMQ
-# interface of the Theron++ framework.
+# interface of the Theron++ framework. 
 #
-# The following packages should be available on Fedora prior to compiling
+# The following packages should be available on Fedora prior to compiling 
 # the file
-#
-#	ccache			# for effcient C++ compilations
-#	qpid-proton-cpp*	# Qpid Proton Active Message Queue protocol API
-#	json-devel		# Niels Lohmann's JSON library
+# 
+# 	ccache 				# for effcient C++ compilations
+# 	qpid-proton-cpp* 	# Qpid Proton Active Message Queue protocol API
+# 	json-devel			# Niels Lohmann's JSON library
 #	coin-or-Couenne		# The solver to be used by AMPL
 #
-# In addition the problem is formulated using A Mathematical Programming
+# In addtition the problem is formuated using A Mathematical Programming 
 # Language (AMPL) and so it should be installed from
 # https://portal.ampl.com/user/ampl/request/amplce/trial/new
 #
-# There are source code dependencies that should be cloned to local disk
+# There are source code dependencies that should be cloned to local disk 
 #
 #	Theron++			# https://github.com/GeirHo/TheronPlusPlus.git
 #	cxxopts				# https://github.com/jarro2783/cxxopts.git
@@ -39,7 +39,7 @@ RM = rm -f
 # Paths
 #------------------------------------------------------------------------------
 #
-# The default values of the paths are given here to be overridden by build
+# The default values of the paths are given here to be overridden by build 
 # definitions on the command line for creating the component container.
 #
 # Location of the Theron++ framework relative to this make file and the code
@@ -54,8 +54,8 @@ AMPL_INCLUDE ?= /opt/AMPL/amplapi/include
 
 AMPL_LIB ?= /opt/AMPL/amplapi/lib
 
-# The solver component uses the CxxOpts class for parsing the command line
-# options since it is header only and lighter than the Options library of
+# The solver component uses the CxxOpts class for parsing the command line 
+# options since it is header only and lighter than the Options library of 
 # boost, which seems to have lost the most recent C++ features. The CxxOpts
 # library can be cloned from https://github.com/jarro2783/cxxopts
 
@@ -65,22 +65,22 @@ CxxOpts_DIR ?= /home/GHo/Documents/Code/CxxOpts/include
 # Options for the compiler and linker
 #------------------------------------------------------------------------------
 #
-# Optimisation -O3 is the highest level of optimisation and should be used
-# with production code. -Og is the code optimising and offering debugging
+# Optimisation -O3 is the highest level of optimisation and should be used 
+# with production code. -Og is the code optimising and offering debugging 
 # transparency and should be use while the code is under development
 
 OPTIMISATION_FLAG = -Og
 
-# It is useful to let the compiler generate the dependencies for the various
-# files, and the following will produce .d files that can be included at the
-# end. The -MMD flag is equivalent with -MD, but the latter will include system
-# headers in the output (which we do not need here). The -MP includes an
-# empty rule to create the dependencies so that make would not create any errors
+# It is useful to let the compiler generate the dependencies for the various 
+# files, and the following will produce .d files that can be included at the 
+# end. The -MMD flag is equivalent with -MD, but the latter will include system 
+# headers in the output (which we do not need here). The -MP includes an 
+# empty rule to create the dependencies so that make would not create any errors 
 # if the file name changes.
 
 DEPENDENCY_FLAGS = -MMD -MP
 
-# Options
+# Options 
 
 GENERAL_OPTIONS = -Wall -std=c++23 -ggdb -D_DEBUG
 INCLUDE_DIRECTORIES = -I. -I/usr/include -I$(THERON) -I$(AMPL_INCLUDE) \
@@ -89,12 +89,12 @@ INCLUDE_DIRECTORIES = -I. -I/usr/include -I$(THERON) -I$(AMPL_INCLUDE) \
 CXXFLAGS = $(GENERAL_OPTIONS) $(INCLUDE_DIRECTORIES) $(DEPENDENCY_FLAGS) \
 		   $(OPTIMISATION_FLAG)
 
-# Putting it together as the actual options given to the compiler and the
-# linker. Note that pthread is needed on Linux systems since it seems to
-# be the underlying implementation of std::thread. Note that it is
-# necessary to use the "gold" linker as the standard linker requires
-# the object files in the right order, which is hard to ensure with
-# an archive, and the "gold" linker manages this just fine, but it
+# Putting it together as the actual options given to the compiler and the 
+# linker. Note that pthread is needed on Linux systems since it seems to 
+# be the underlying implementation of std::thread. Note that it is 
+# necessary to use the "gold" linker as the standard linker requires 
+# the object files in the right order, which is hard to ensure with 
+# an archive, and the "gold" linker manages this just fine, but it 
 # requires the full static path to the custom Theron library.
 
 CFLAGS = $(DEPENDENCY_FLAGS) $(OPTIMISATION_FLAG) $(GENERAL_OPTIONS)
@@ -105,13 +105,13 @@ LDFLAGS = -fuse-ld=gold -ggdb -D_DEBUG -pthread $(THERON)/Theron++.a \
 # Theron library
 #------------------------------------------------------------------------------
 #
-# The Theron++ library must be built first and the following two targets
-# ensures that Make will check if the libray is up-to-date or build it if
+# The Theron++ library must be built first and the following two targets 
+# ensures that Make will check if the libray is up-to-date or build it if 
 # it is not.
 
-.PHONY: $(THERON)/Theron++.a
+.PHONY: $(THERON)/Theron++.a 
 
-$(THERON)/Theron++.a:
+ $(THERON)/Theron++.a:
 	 make -C $(THERON) Library
 
 #------------------------------------------------------------------------------
@@ -139,13 +139,13 @@ $(OBJECTS_DIR)/%.o : %.cpp
 #------------------------------------------------------------------------------
 #
 
-# The only real target is to build the solver component whenever some of
+# The only real target is to build the solver component whenever some of 
 # the object files or the solver actors.
 
 SolverComponent: $(SOLVER_OBJECTS) $(THERON)/Theron++.a
 	$(CC) -o SolverComponent $(CXXFLAGS) $(SOLVER_OBJECTS) $(LDFLAGS)
 
-# There is also a standard target to clean the automatically generated build
+# There is also a standard target to clean the automatically generated build 
 # files
 
 clean:
@@ -156,4 +156,4 @@ clean:
 #------------------------------------------------------------------------------
 #
 
--include $(SOLVER_OBJECTS:.o=.d)
+-include $(SOLVER_OBJECTS:.o=.d)
\ No newline at end of file
diff --git a/start-solver.sh b/start-solver.sh
deleted file mode 100755
index 049da63..0000000
--- a/start-solver.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/bash
-
-# call bash directly since we know we're on Fedora
-set -euf -o pipefail
-
-amqpbroker=${ACTIVEMQ_HOST:-localhost}
-amqpport=${ACTIVEMQ_PORT:-5672}
-amqpuser=${ACTIVEMQ_USER:-admin}
-amqppassword=${ACTIVEMQ_PASSWORD:-}
-appid=${APPLICATION_ID:-}
-license=${AMPL_LICENSE:-}
-
-while getopts b:P:u:p:e:l: name
-do
-    case $name in
-        b) amqpbroker="$OPTARG";;
-        p) amqppassword="$OPTARG";;
-        u) amqpuser="$OPTARG";;
-        P) amqpport="$OPTARG";;
-        e) appid="$OPTARG";;
-        l) license="$OPTARG";;
-        ?) printf "Usage: %s [-b amqbroker] [-P amqpport] [-u user] [-p amqppassword] [-e appid] [-l license]\n -b amqpbroker   overrides ACTIVEMQ_HOST (default localhost)\n -P amqpport     overrides ACTIVEMQ_PORT (default 5672)\n -u user         overrides ACTIVEMQ_USER (default admin)\n -p amqppassword overrides ACTIVEMQ_PASSWORD\n -e appid        overrides APPLICATION_ID\n -l license      overrides AMPL_LICENSE\n" "$0"
-        exit 2;;
-    esac
-done
-if [ -z "${appid}" ]; then
-    printf "Missing Application ID, unable to start the solver"
-    exit 1
-fi
-
-if [ -n "${license}" ] ; then
-    echo "creating license file /solver/AMPL/ampl.lic"
-    echo "$license" > /solver/AMPL/ampl.lic
-fi
-
-echo "Starting SolverComponent: app id='${appid}' broker='${amqpbroker}:${amqpport}'" && sync
-
-exec ./SolverComponent --AMPLDir=/solver/AMPL --ModelDir=/tmp --Broker="$amqpbroker" --Port="$amqpport" --User="$amqpuser" --Pw="$amqppassword" --Endpoint="$appid"
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index 02b6dac..fa5a4ef 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -8,15 +8,15 @@
       - nebulous-optimiser-solver-container-images
     description: Build the container images.
     files: &image_files
-      - ^/
+      - ^java-spring-boot-demo/
     vars: &image_vars
       promote_container_image_job: nebulous-optimiser-solver-upload-container-images
       container_images:
-        - context: .
+        - context: java-spring-boot-demo
           registry: quay.io
-          repository: quay.io/nebulous/optimiser-solver
+          repository: quay.io/nebulous/optimiser-solver-java-spring-boot-demo
           namespace: nebulous
-          repo_shortname: optimiser-solver
+          repo_shortname: optimiser-solver-java-spring-boot-demo
           repo_description: ""
 
 - job:
@@ -44,7 +44,7 @@
     description: Run Hadolint on Dockerfile(s).
     vars:
       dockerfiles:
-        - Dockerfile
+        - java-spring-boot-demo/Dockerfile
 
 - job:
     name: nebulous-optimiser-solver-helm-lint
@@ -53,3 +53,20 @@
     vars:
       helm_charts:
         - ./charts/nebulous-optimiser-solver
+
+- job:
+    name: nebulous-optimiser-solver-apply-helm-charts
+    parent: nebulous-apply-helm-charts
+    dependencies:
+      - name: opendev-buildset-registry
+        soft: false
+      - name: nebulous-optimiser-solver-build-container-images
+        soft: true
+      - name: nebulous-optimiser-solver-upload-container-images
+        soft: true
+    requires:
+      - nebulous-optimiser-solver-container-images
+    description: Deploy a Kubernetes cluster and apply charts.
+    vars:
+      helm_charts:
+        nebulous-optimiser-solver: ./charts/nebulous-optimiser-solver
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 70c03b7..845b1a1 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -2,14 +2,18 @@
     check:
       jobs:
         - opendev-buildset-registry
+        - nebulous-optimiser-solver-helm-lint
         - nebulous-optimiser-solver-build-container-images
         - nebulous-optimiser-solver-hadolint
+        - nebulous-platform-apply-helm-charts
         - nox-linters
     gate:
       jobs:
         - opendev-buildset-registry
+        - nebulous-optimiser-solver-helm-lint
         - nebulous-optimiser-solver-upload-container-images
         - nebulous-optimiser-solver-hadolint
+        - nebulous-platform-apply-helm-charts
         - nox-linters
     promote:
       jobs: