Jx MVC JxMVC

JxMVC
Lightning-X Framework

Framework MVC para Jakarta EE. 253 KB, cero dependencias externas y arranque en 1.2 s.

253 KB Core
0 deps Runtime
54 cls Core
1.2 s Arranque
$ mvn install -f JxMVC.Core/pom.xml
Controller Model Config
@JxControllerMapping("api/persona")
public class PersonaController extends JxController {

    @JxGetMapping("{id}")
    public ActionResult get(@JxPathVar String id) {
        DBRow per = new PersonaModel().GetRow(
                "tblPersonas", "id = ?", id);
        if (per == null)
            return Json(GenApi.Error(404, "No encontrado"));

        return Json(GenApi.JsonStr(
            "id",     per.Get("id"),
            "nombre", per.GetString("Nombres"),
            "correo", per.GetString("Correo")
        ));
    }

    @JxPostMapping("save")
    @JxRequireRole("admin")
    @JxRateLimit(requests = 20, windowMs = 60_000)
    public ActionResult save() {
        String nombre = model.param("nombre");
        // validar + guardar
        return Json(GenApi.Ok("Guardado")).status(201);
    }
}

Instálalo en segundos.

Un solo mvn install y ya tienes el framework en tu repositorio local. Sin CDNs, sin descargas transitivas, sin sorpresas: el JAR pesa 253 KB y arrastra cero dependencias.

Generar proyecto →
jxmvc — install
$ mvn install -f JxMVC.Core/pom.xml
[INFO] Building jxmvc-core 3.4.0
[INFO] Tests run: 347, Failures: 0, Errors: 0
[INFO] BUILD SUCCESS · 253 KB · 0 deps externas

✓ jxmvc-core instalado

groupId jxmvc
artifact jxmvc-core
~/.m2/repository

Empieza aquí

Genera un starter en /downloads
y levántalo:
$ mvn package cargo:run

Características

Todo incluido.
Cero dependencias.

Un único JAR de 253 KB con todo lo que necesita una aplicación Jakarta EE real. Sin Spring, sin Hibernate, sin Jackson.

Routing inteligente

Convención de nombres + anotaciones. Plantillas {id}, args posicionales, múltiples verbos HTTP.

@JxGetMapping @JxPostMapping @JxPutMapping @JxDeleteMapping {pathVar}

Pool de conexiones

JxPool propio — keepalive, timeout, prewarm. PostgreSQL, MySQL, SQL Server.

Virtual Threads

Detectados automáticamente en Java 21+. Sin config. Máxima concurrencia sin bloqueos.

Validación declarativa

@JxRequired, @JxEmail, @JxPattern, @JxLength, @JxRange, @JxUrl, @JxFuture.

Auth + Rate Limit

@JxRequireAuth, @JxRequireRole, @JxRateLimit por IP+ruta. Ventana deslizante.

Caché en memoria

@JxCacheable y @JxCacheEvict con TTL por namespace. Sin Redis, sin Caffeine.

253 KB. Cero dependencias en runtime.

21 anotaciones propias, scheduler cron, pool JDBC, JSON nativo, WebSocket, métricas y OpenAPI — todo en java.* puro.

Sin Jackson Sin Hibernate Sin Spring Sin Guice

GenApi + JxDB

DBRow sin POJOs. JsonStr, JsonArray, JsonPaged, nested. Respuestas JSON en 1 línea.

Métricas + OpenAPI

/jx/health, /jx/metrics, /jx/openapi listos sin configuración. Latencia por ruta.

Casos de uso

Todo lo que necesitas
desde el día uno.

ApiController.java
@JxControllerMapping("api/users")
public class UserController extends JxController {

    @JxGetMapping("{id}")
    @JxRequireAuth
    public ActionResult get(@JxPathVar String id) {
        DBRow user = new UserModel().GetRow("users", "id=?", id);
        if (user == null) return Json(GenApi.Error(404, "No encontrado"));
        return Json(GenApi.JsonStr(
            "id",    id,
            "email", user.GetString("email"),
            "role",  user.GetString("role")
        ));
    }

    @JxPostMapping("")
    @JxRateLimit(requests = 10, windowMs = 60_000)
    public ActionResult create() {
        String email = model.param("email");
        String pass  = model.param("password");
        new UserModel().insert(email, pass);
        return Json(GenApi.Ok("Creado")).status(201);
    }

    @JxDeleteMapping("{id}")
    @JxRequireRole("admin")
    public ActionResult delete(@JxPathVar String id) {
        new UserModel().delete("id=?", id);
        return Json(GenApi.Ok("Eliminado"));
    }
}

Arquitectura

15 etapas por cada request

Cada petición HTTP pasa por un pipeline controlado — sin magia, predecible y trazable. Haz clic en cualquier etapa para ver el detalle.

01
Endpoints

Rutas internas /jx/health, /jx/info, /jx/metrics, /jx/openapi. Resueltas antes de cualquier lógica de negocio.

02
Métricas

Timer de latencia iniciado por ruta. Registra total de peticiones, errores 4xx/5xx y P95.

03
Rate limit

@JxRateLimit — ventana deslizante por IP + ruta. Retorna 429 con Retry-After si se excede.

04
Routing

Convención / anotaciones / plantillas {var}. Selecciona controller + acción. 405 si verbo no coincide.

05
Perfil

@JxProfile — activa o desactiva el endpoint según entorno (dev/prod/test). 404 si no aplica.

06
Auth

@JxRequireAuth y @JxRequireRole. Valida sesión y rol antes de instanciar el controller.

07
CORS

@JxCors global o por controller. Inyecta Access-Control-* y gestiona preflight OPTIONS.

08
Filtros

@JxFilter con fase BEFORE. Permite interceptar, modificar request o abortar con respuesta propia.

09
DI + Ctrl

Controller instanciado. @JxInject y @JxValue resueltos del registro de servicios.

10
Before

@JxBeforeAction — interceptores declarados en el controller, ejecutados antes de la acción.

11
ModelAttr

@JxModelAttr — atributos comunes inyectados al modelo antes de llamar la acción.

12
Invocación

Acción ejecutada. @JxAsync (background thread), @JxRetry (reintentos con backoff), @JxCacheable.

13
After

@JxAfterAction + filtros AFTER. Post-procesamiento, auditoría, transformación de respuesta.

14
Render

Negociación de contenido: JSP, JSON, raw, redirect. Métricas finales registradas.

Comparativa real · 5 frameworks

El más ligero.
El único con cero dependencias.

89× más pequeño que Spring Boot 0 deps en runtime 5× más rápido que Spring Boot

52 clases. 253 KB.
Todo el framework.

Sin dependencias que auditar ni versiones que conciliar: cada módulo está escrito dentro del propio JAR.

    Clases contadas en jxmvc.core de la v3.4.0. Métricas en vivo del propio sitio en el panel de observabilidad.

    Endpoints del sistema

    Observabilidad
    incluida.

    Cuatro endpoints listos desde el arranque — sin configuración, sin dependencias externas.

    GET /jx/health
    {
      "status": "UP",
      "version": "3.4.0",
      "uptime": "00:04:12",
      "pool": {
        "active": 2,
        "idle": 8,
        "total": 10
      },
      "threads": {
        "active": 4,
        "virtual": true
      },
      "memory": {
        "usedMB": 48,
        "maxMB": 512
      }
    }

    Del cero al deploy en minutos

    Genera tu proyecto Lux, compílalo con Maven y despliégalo en Tomcat. Un solo JAR, sin dependencias externas.