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