<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://cesguiro.es/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://cesguiro.es/feed.php">
        <title>cesguiro clase:daw:dws:1eval</title>
        <description></description>
        <link>https://cesguiro.es/</link>
        <image rdf:resource="https://cesguiro.es/ttps://cesguiro.es/lib/tpl/bootstrap3/images/favicon.ico" />
       <dc:date>2026-10-22T16:25:02+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/api_first?rev=1792570912&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/arquitecturas?rev=1791015623&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/concurrencia?rev=1792575930&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/eventos?rev=1792571241&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/jpa?rev=1792571111&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/jwt?rev=1792571722&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/lambda?rev=1792575347&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/logs?rev=1792575332&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/modulith?rev=1792571050&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/spring_security?rev=1792571223&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/start?rev=1735811838&amp;do=diff"/>
                <rdf:li rdf:resource="https://cesguiro.es/doku.php/clase/daw/dws/1eval/validacion?rev=1792570946&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://cesguiro.es/ttps://cesguiro.es/lib/tpl/bootstrap3/images/favicon.ico">
        <title>cesguiro</title>
        <link>https://cesguiro.es/</link>
        <url>https://cesguiro.es/ttps://cesguiro.es/lib/tpl/bootstrap3/images/favicon.ico</url>
    </image>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/api_first?rev=1792570912&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:21:52+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>02 - API First</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/api_first?rev=1792570912&amp;do=diff</link>
        <description>02 - API First

La API es el contrato entre una aplicación y quienes la consumen. Define operaciones, datos de entrada y salida y respuestas posibles. Este tema se centra en el contrato HTTP; la misma idea de contrato explícito aplica a la comunicación entre módulos internos, que se desarrolla en el tema 04.</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/arquitecturas?rev=1791015623&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-03T10:20:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>01 - Arquitecturas de software</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/arquitecturas?rev=1791015623&amp;do=diff</link>
        <description>01 - Arquitecturas de software

Una aplicación puede clasificarse según distintos criterios. Por ejemplo, puede desplegarse como monolito modular y organizarse internamente por capas con inversión de dependencias.

1. Principios de arquitectura limpia</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/concurrencia?rev=1792575930&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T11:45:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>11 - Concurrencia: bloqueante, reactiva y Loom</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/concurrencia?rev=1792575930&amp;do=diff</link>
        <description>11 - Concurrencia: bloqueante, reactiva y Loom

Los temas anteriores han convivido con la concurrencia sin explicarla: Tomcat reparte las peticiones entre un pool de hilos y el MDC (tema 09) aprovecha que cada petición vive en un hilo; el procesamiento asíncrono de eventos (tema 08) salta a otro hilo. Este tema explica qué sostiene esa concurrencia y los tres modelos disponibles hoy: el tradicional con hilos de plataforma, la programación reactiva y los hilos virtuales de</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/eventos?rev=1792571241&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:27:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>08 - Eventos de aplicación y mensajería</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/eventos?rev=1792571241&amp;do=diff</link>
        <description>08 - Eventos de aplicación y mensajería

La llamada a la API pública de otro módulo es comunicación síncrona: quien llama necesita el resultado para continuar. Los eventos de aplicación permiten la comunicación inversa: un módulo anuncia que algo ha ocurrido y otros módulos reaccionan, sin que el emisor los conozca.</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/jpa?rev=1792571111&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:25:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>05 - Persistencia: Spring JPA</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/jpa?rev=1792571111&amp;do=diff</link>
        <description>05 - Persistencia: Spring JPA

En 1.º DAW la persistencia se implementó con JDBC: SQL explícito, PreparedStatement y mapeo manual de ResultSet a modelo. JPA (*Java Persistence API*) sustituye esa capa por un mapeo objeto-relacional gestionado: las entidades se declaran con anotaciones y el proveedor genera el SQL.</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/jwt?rev=1792571722&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:35:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>06 - Login con JWT</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/jwt?rev=1792571722&amp;do=diff</link>
        <description>06 - Login con JWT

El login con JWT mantiene la idea del par de tokens: un token de acceso de vida corta y un refresh token de vida larga. La diferencia está en el token de acceso: es autocontenido y verificable sin conservar estado en el servidor.</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/lambda?rev=1792575347&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T11:35:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>10 - Serverless: Lambdas en local</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/lambda?rev=1792575347&amp;do=diff</link>
        <description>10 - Serverless: Lambdas en local

El monolito modular con un único despliegue cubre el flujo principal de la aplicación, pero no toda la relación con el exterior. Los proveedores de nube ofrecen FaaS (*Function as a Service*): funciones pequeñas, sin servidor que administrar, activadas por eventos y facturadas por ejecución. En</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/logs?rev=1792575332&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T11:35:32+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>09 - Logs e instrumentación</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/logs?rev=1792575332&amp;do=diff</link>
        <description>09 - Logs e instrumentación

En 1.º DAW ya se usa el sistema de logs de Spring Boot: el evento de log con su nivel, la fachada SLF4J, la implementación Logback de serie y el nivel por paquete en application.properties. Esas bases bastaban con la aplicación en el equipo local: la consola lo mostraba todo y cada fallo se reproducía a mano. Una vez desplegada, la misma aplicación corre en un servidor o contenedor donde la consola es efímera, el acceso es remoto y las peticiones se solapan: el regis…</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/modulith?rev=1792571050&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:24:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>04 - Monolito modular: módulos y Spring Modulith</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/modulith?rev=1792571050&amp;do=diff</link>
        <description>04 - Monolito modular: módulos y Spring Modulith

En un monolito modular, cada módulo protege su interior y expone un contrato. Este tema define qué vive dentro de un módulo, cómo ofrece su API pública, cómo la consume otro módulo y cómo se verifica que se respetan los límites. Los conceptos son independientes del framework;</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/spring_security?rev=1792571223&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:27:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>07 - Integración con Spring Security</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/spring_security?rev=1792571223&amp;do=diff</link>
        <description>07 - Integración con Spring Security

En 1.º DAW el login con tokens se implementó con un filtro Servlet propio: extraer el token, autenticar, dejar el Principal en el contexto de la petición y comprobar los roles. Spring Security ofrece esa infraestructura hecha: una cadena de filtros, gestión del contexto de seguridad y reglas de autorización declarativas. El flujo de autenticación no cambia; lo que cambia es quién construye y orquesta la maquinaria.</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/start?rev=1735811838&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-01-02T10:57:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>1º Evaluación</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/start?rev=1735811838&amp;do=diff</link>
        <description>1º Evaluación
1eval index</description>
    </item>
    <item rdf:about="https://cesguiro.es/doku.php/clase/daw/dws/1eval/validacion?rev=1792570946&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-10-21T10:22:26+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>03 - Validación e invariancias</title>
        <link>https://cesguiro.es/doku.php/clase/daw/dws/1eval/validacion?rev=1792570946&amp;do=diff</link>
        <description>03 - Validación e invariancias

Una petición puede rechazarse por dos motivos distintos: incumple el formato del contrato o propone un estado inválido para el negocio. Son preguntas diferentes, que se responden en lugares diferentes y con mecanismos diferentes. Mezclarlas produce los errores clásicos: reglas de negocio escritas en el</description>
    </item>
</rdf:RDF>
