View Javadoc
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.annotation.Nullable;
14  import jakarta.enterprise.context.control.ActivateRequestContext;
15  import jakarta.inject.Inject;
16  import org.flywaydb.core.Flyway;
17  
18  @QuarkusMain
19  public class ShepardMain implements QuarkusApplication {
20  
21    private static final IConnector neo4j = NeoConnector.getInstance();
22  
23    @Inject
24    Flyway flyway;
25  
26    @Startup
27    void init() {
28      Log.info("Starting shepard backend");
29  
30      migrateTimescale("1.7.0");
31  
32      migrateNeo4j("V13");
33  
34      Log.info("Run leftover timescale migrations...");
35      flyway.migrate();
36      Log.info("Finished leftover timescale migrations...");
37  
38      Log.info("Run leftover Neo4j migrations...");
39      var neoRunner = new MigrationsRunner();
40      neoRunner.waitForConnection();
41      neoRunner.apply();
42      Log.info("Finished leftover Neo4j migrations...");
43  
44      var pkiHelper = new PKIHelper();
45      pkiHelper.init();
46  
47      Log.info("Initialize neo4j databases...");
48      neo4j.connect();
49      Log.info("Connection established to neo4j database!");
50    }
51  
52    private void migrateTimescale(String version) {
53      Log.info("Run PostGres migrations until V" + version + "...");
54      if (version == null) flyway.migrate();
55      else Flyway.configure().configuration(flyway.getConfiguration()).target(version).load().migrate();
56      Log.info("Finished PostGres migrations V" + version + "!");
57    }
58  
59    private void migrateNeo4j(String version) {
60      var migrationRunner = new MigrationsRunner(version);
61      Log.info("Waiting for neo4j database...");
62      migrationRunner.waitForConnection();
63      Log.info("Run neo4j database migrations until " + version + "...");
64      migrationRunner.apply();
65      Log.info("Finished neo4j database migrations!");
66    }
67  
68    @Override
69    @ActivateRequestContext
70    public int run(String... args) throws Exception {
71      Quarkus.waitForExit();
72      return 0;
73    }
74  
75    @Shutdown
76    void shutdown() {
77      neo4j.disconnect();
78    }
79  }