1 package de.dlr.shepard;
2
3 import de.dlr.shepard.common.neo4j.MigrationsRunner;
4 import de.dlr.shepard.common.neo4j.NeoConnector;
5 import de.dlr.shepard.common.util.IConnector;
6 import de.dlr.shepard.common.util.PKIHelper;
7 import io.quarkus.logging.Log;
8 import io.quarkus.runtime.Quarkus;
9 import io.quarkus.runtime.QuarkusApplication;
10 import io.quarkus.runtime.Shutdown;
11 import io.quarkus.runtime.Startup;
12 import io.quarkus.runtime.annotations.QuarkusMain;
13 import jakarta.enterprise.context.control.ActivateRequestContext;
14
15 @QuarkusMain
16 public class ShepardMain implements QuarkusApplication {
17
18 private static IConnector neo4j = NeoConnector.getInstance();
19
20 @Startup
21 void init() {
22 Log.info("Starting shepard backend");
23
24 var pkiHelper = new PKIHelper();
25 var migrationRunner = new MigrationsRunner();
26 pkiHelper.init();
27
28 Log.info("Waiting for databases");
29 migrationRunner.waitForConnection();
30
31 Log.info("Run database migrations");
32 migrationRunner.apply();
33
34 Log.info("Initialize databases");
35 neo4j.connect();
36 Log.info("Connection established to neo4j database.");
37 }
38
39 @Override
40 @ActivateRequestContext
41 public int run(String... args) throws Exception {
42 Quarkus.waitForExit();
43 return 0;
44 }
45
46 @Shutdown
47 void shutdown() {
48 neo4j.disconnect();
49 }
50 }