diff --git a/backend/pom.xml b/backend/pom.xml index 73deb84..fec773d 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -55,11 +55,11 @@ 2.12.1 - + - io.quarkus - quarkus-agroal - 3.19.3 + org.jboss.logmanager + jboss-logmanager + 3.1.1.Final diff --git a/backend/src/main/java/net/miarma/contaminus/common/Constants.java b/backend/src/main/java/net/miarma/contaminus/common/Constants.java index 63f1824..c3d9b3f 100644 --- a/backend/src/main/java/net/miarma/contaminus/common/Constants.java +++ b/backend/src/main/java/net/miarma/contaminus/common/Constants.java @@ -5,8 +5,7 @@ import io.vertx.core.impl.logging.LoggerFactory; public class Constants { public static final String APP_NAME = "ContaminUS"; - public static final int API_VERSION = 1; - public static final String API_PREFIX = "/api/v" + Constants.API_VERSION; + public static final String API_PREFIX = "/api/v1"; public static Logger LOGGER = LoggerFactory.getLogger(Constants.APP_NAME); diff --git a/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java index df9ce33..355bbbe 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java @@ -22,34 +22,20 @@ import net.miarma.contaminus.database.DatabaseManager; @SuppressWarnings("unused") public class DataLayerAPIVerticle extends AbstractVerticle { - private JDBCPool pool; - private DatabaseManager dbManager; + private JDBCPool pool; + private DatabaseManager dbManager; private ConfigManager configManager; - - public DataLayerAPIVerticle() { - JDBCConnectOptions connectOptions = new JDBCConnectOptions() - .setJdbcUrl( - "jdbc:mariadb://" + configManager.getStringProperty("db.host") + - ":" + configManager.getStringProperty("db.port") + "/" - ) - .setDatabase(configManager.getStringProperty("db.name")) - .setUser(configManager.getStringProperty("db.user")) - .setPassword(configManager.getStringProperty("db.pwd")); - - PoolOptions poolOptions = new PoolOptions().setMaxSize(5); - - pool = JDBCPool.pool(vertx, connectOptions, poolOptions); + public DataLayerAPIVerticle(JDBCPool pool) { + this.pool = pool; + this.configManager = ConfigManager.getInstance(); } @Override public void start(Promise startPromise) { - dbManager = DatabaseManager.getInstance(pool); - configManager = ConfigManager.getInstance(); - Constants.LOGGER.info("πŸ“‘ Iniciando DataLayerAPIVerticle..."); + dbManager = DatabaseManager.getInstance(pool); - Router router = Router.router(vertx); Set allowedMethods = new HashSet<>( Arrays.asList(HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.OPTIONS)); // Por ejemplo @@ -85,21 +71,6 @@ public class DataLayerAPIVerticle extends AbstractVerticle { router.route(HttpMethod.POST, Constants.POST_ACTUATORS).handler(this::addActuator); router.route(HttpMethod.PUT, Constants.PUT_ACTUATOR_BY_ID).handler(this::updateActuator); - dbManager.testConnection() - .onSuccess(_rows -> { - Constants.LOGGER.info("βœ… Database connection ok"); - vertx.createHttpServer() - .requestHandler(router) - .listen(configManager.getDataApiPort(), configManager.getHost()); - startPromise.complete(); - }) - .onFailure(onFailure -> { - Constants.LOGGER.error("❌ Database connection failed"); - Throwable t = onFailure.getCause(); - t.printStackTrace(); - startPromise.fail(onFailure); - }); - } private void getAllGroups(RoutingContext context) { diff --git a/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java index e19e132..57ccf98 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java @@ -17,10 +17,12 @@ import net.miarma.contaminus.common.Constants; public class LogicLayerAPIVerticle extends AbstractVerticle { private ConfigManager configManager; + public LogicLayerAPIVerticle() { + this.configManager = ConfigManager.getInstance(); + } + @Override - public void start(Promise startPromise) { - configManager = ConfigManager.getInstance(); - + public void start(Promise startPromise) { Constants.LOGGER.info("πŸ“‘ Iniciando LogicApiVerticle..."); Router router = Router.router(vertx); diff --git a/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java index 353e05d..1a13170 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java @@ -6,6 +6,8 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.StandardCopyOption; +import io.vertx.core.json.JsonObject; +import io.vertx.jdbcclient.JDBCPool; import io.vertx.core.AbstractVerticle; import io.vertx.core.DeploymentOptions; import io.vertx.core.Launcher; @@ -15,78 +17,105 @@ import net.miarma.contaminus.common.ConfigManager; import net.miarma.contaminus.common.Constants; public class MainVerticle extends AbstractVerticle { - static ConfigManager configManager; - - public static void main(String[] args) { - System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager"); - init(); + private ConfigManager configManager; + private JDBCPool pool; + + public static void main(String[] args) { Launcher.executeCommand("run", MainVerticle.class.getName()); } - private static void init() { - configManager = ConfigManager.getInstance(); + @SuppressWarnings("deprecation") + private void init() { + configManager = ConfigManager.getInstance(); + + String jdbcUrl = configManager.getJdbcUrl(); + String dbUser = configManager.getStringProperty("db.user"); + String dbPwd = configManager.getStringProperty("db.pwd"); + Integer poolSize = configManager.getIntProperty("db.poolSize"); + + JsonObject dbConfig = new JsonObject() + .put("url", jdbcUrl) + .put("user", dbUser) + .put("password", dbPwd) + .put("max_pool_size", poolSize != null ? poolSize : 10); + + pool = JDBCPool.pool(vertx, dbConfig); + initializeDirectories(); copyDefaultConfig(); } - private static void initializeDirectories() { - File baseDir = new File(configManager.getBaseDir()); + private void initializeDirectories() { + File baseDir = new File(this.configManager.getBaseDir()); if (!baseDir.exists()) { baseDir.mkdirs(); } } - private static void copyDefaultConfig() { + private void copyDefaultConfig() { File configFile = new File(configManager.getConfigFile().getAbsolutePath()); if (!configFile.exists()) { try (InputStream in = MainVerticle.class.getClassLoader().getResourceAsStream("default.properties")) { if (in != null) { Files.copy(in, configFile.toPath(), StandardCopyOption.REPLACE_EXISTING); } else { - Constants.LOGGER.error("Default config file not found in resources"); + Constants.LOGGER.error("πŸ”΄ Default config file not found in resources"); } } catch (IOException e) { - Constants.LOGGER.error("Failed to copy default config file", e); + Constants.LOGGER.error("πŸ”΄ Failed to copy default config file", e); } } } @Override - public void start(Promise startPromise) { + public void start(Promise startPromise) { + try { + System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager"); + init(); + pool.query("SELECT 1").execute(ar -> { + if (ar.succeeded()) { + Constants.LOGGER.info("🟒 Connected to DB"); + deployVerticles(startPromise); + } else { + Constants.LOGGER.error("πŸ”΄ Failed to connect to DB: " + ar.cause()); + startPromise.fail(ar.cause()); + } + }); + } catch (Exception e) { + System.err.println("πŸ”΄ Error starting the application: " + e); + startPromise.fail(e); + } + } + + private void deployVerticles(Promise startPromise) { final DeploymentOptions options = new DeploymentOptions(); options.setThreadingModel(ThreadingModel.WORKER); - - vertx.deployVerticle(new DataLayerAPIVerticle(), options, result -> { - if(result.succeeded()) { - Constants.LOGGER.info(String.format( - "🟒 DataLayerAPIVerticle desplegado. (http://%s:%d)", - configManager.getHost(), configManager.getDataApiPort() - )); - } else { - Constants.LOGGER.error("πŸ”΄ Error al desplegar DataLayerAPIVerticle", result.cause()); - } + + vertx.deployVerticle(new DataLayerAPIVerticle(pool), options, result -> { // Pasa el pool + if (result.succeeded()) { + Constants.LOGGER.info("🟒 DatabaseVerticle desplegado"); + } else { + Constants.LOGGER.error("πŸ”΄ Error deploying DataLayerAPIVerticle: " + result.cause()); + } }); - + vertx.deployVerticle(new LogicLayerAPIVerticle(), options, result -> { - if(result.succeeded()) { - Constants.LOGGER.info(String.format( - "🟒 ApiVerticle desplegado. (http://%s:%d)", - configManager.getHost(), configManager.getLogicApiPort() - )); - } else { - Constants.LOGGER.error("πŸ”΄ Error al desplegar LogicApiVerticle", result.cause()); - } + if (result.succeeded()) { + Constants.LOGGER.info("🟒 LogicLayerAPIVerticle desplegado"); + } else { + Constants.LOGGER.error("πŸ”΄ Error deploying LogicLayerAPIVerticle: " + result.cause()); + } }); - + vertx.deployVerticle(new WebServerVerticle(), result -> { - if(result.succeeded()) { - Constants.LOGGER.info(String.format( - "🟒 WebServerVerticle desplegado. (http://%s:%d)", - configManager.getHost(), configManager.getWebserverPort())); - } else { - Constants.LOGGER.error("πŸ”΄ Error al desplegar WebServerVerticle", result.cause()); - } + if (result.succeeded()) { + Constants.LOGGER.info("🟒 WebServerVerticle desplegado"); + } else { + Constants.LOGGER.error("πŸ”΄ Error deploying WebServerVerticle: " + result.cause()); + } }); + + startPromise.complete(); } @Override diff --git a/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java index e43cdaa..b302ac4 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/WebServerVerticle.java @@ -10,10 +10,12 @@ import net.miarma.contaminus.common.Constants; public class WebServerVerticle extends AbstractVerticle { private ConfigManager configManager; + public WebServerVerticle() { + configManager = ConfigManager.getInstance(); + } + @Override - public void start(Promise startPromise) { - configManager = ConfigManager.getInstance(); - + public void start(Promise startPromise) { Constants.LOGGER.info("πŸ“‘ Iniciando WebServerVerticle..."); Router router = Router.router(vertx); diff --git a/backend/src/main/resources/default.properties b/backend/src/main/resources/default.properties index 7a36992..e0824ae 100644 --- a/backend/src/main/resources/default.properties +++ b/backend/src/main/resources/default.properties @@ -1,5 +1,5 @@ # DB Configuration -db.protocol=jdbc:mariadb: +db.protocol=jdbc:mariadb db.host=localhost db.port=3306 db.name=dad