Aprende a Spring Modulith: de monolito a microservicios sin problemas: comprende Modulith | Ezekiel Eromosei | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Aprende a Spring Modulith: de monolito a microservicios sin problemas: comprende Modulith

teacher avatar Ezekiel Eromosei

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      INTRODUCCIÓN

      0:26

    • 2.

      Herramientas necesarias

      1:38

    • 3.

      Monolito vs. microservicios

      13:27

    • 4.

      Lo que construiremos

      1:07

    • 5.

      Dependencias en Bootstrapping

      10:45

    • 6.

      Explora Spring Boot Docker

      6:19

    • 7.

      Explora la dependencia de Spring Modulith

      8:38

    • 8.

      Definición de entidad 1

      31:24

    • 9.

      Definición de entidad 2

      10:35

    • 10.

      Limita el nivel de acceso a la repositry

      3:18

    • 11.

      Prepoblar el inventario

      12:04

    • 12.

      Prueba de integración 1

      16:44

    • 13.

      Prueba de integración 2

      10:36

    • 14.

      Prueba de integración 3

      5:47

    • 15.

      Interfaz con nombre

      19:54

    • 16.

      Llamada Interfaz 2

      6:45

    • 17.

      Servicio de pedidos 0

      12:50

    • 18.

      Servicio de pedidos 1

      17:39

    • 19.

      Servicio de pedidos 2

      8:49

    • 20.

      Servicio de pedidos 3

      7:45

    • 21.

      eventos

      11:32

    • 22.

      Evento 2

      10:59

    • 23.

      Simula un evento fallido

      5:28

    • 24.

      Crea prueba de integración de pedidos

      7:37

    • 25.

      Crea prueba de integración de pedidos 2

      8:03

    • 26.

      Tabla de publicación de eventos modelo

      16:32

    • 27.

      Acción de eventos

      16:22

    • 28.

      Acción de eventos 2

      12:31

    • 29.

      Vuelve a publicar un evento incompleto

      14:08

    • 30.

      Vuelve a publicar el evento incompleto 2

      14:19

    • 31.

      Implementa pagos y listener de correo electrónico

      13:15

    • 32.

      Corregir el error en Implement Payment 2

      1:28

    • 33.

      Implementa el pago 2

      21:05

    • 34.

      Implementa el pago 3

      3:23

    • 35.

      Excepción y validación

      19:50

    • 36.

      Excepción y validación 2

      15:43

    • 37.

      Documentación de Modulith

      13:39

    • 38.

      Documentación de Modulith 2

      1:32

    • 39.

      Soporte en tiempo de ejecución y actuador

      8:47

    • 40.

      Docker

      29:34

    • 41.

      Corregir errores en Docker 2

      3:22

    • 42.

      Docker 2

      20:07

    • 43.

      Prepárate para Kubernetes

      14:49

    • 44.

      Prueba de propiedades externalizadas

      25:10

    • 45.

      Conclusión de Modulith

      1:57

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

3

Estudiantes

--

Proyecto

Acerca de esta clase

En esta clase aprenderemos la funcionalidad básica del módulo Spring.

Debes conocer al menos Java 8, te guiaré a través de las otras herramientas de uso
Herramientas que usaremos: versión comunitaria de Intellij, Github, postman, desktop de docker (TODOS SON GRATUITOS)

La siguiente descripción resalta lo que estaremos construyendo en el proyecto

  • Explica la diferencia entre monolitos y microservicios
  • Esta clase detalla todas las dependencias iniciales de maven que usaremos para bootstrap el proyecto
  • exploramos la dependencia de docker-compose en Spring Starter
  • también exploramos la dependencia de modulith
  • La clase detalla el uso de la interfaz nombrada y su aplicación
  • Implementamos el servicio de pedidos con un enfoque pragmático y cómo encaja en el panorama general
  • vemos aquí el uso de eventos
  • Volver a publicar eventos fallidos incompletos
  • Simula un evento fallido
  • Uso de una anotación de marcador personalizada para registrar dinámicamente un evento nuevo
  • El manejo de excepciones se explora en detalle en esta clase
  • también veremos cómo manejar las validaciones de entrada para evitar ataques o inserciones de datos innecesarias
  • escribiremos varios tests de integración para validar nuestra implementación
  • aprenderás a dockerizar tu aplicación
  • aprenderás a externalizar tus propiedades
  • Encontrarás recursos que contienen el enlace del proyecto en GitHub (gratuito) al diagrama de las entidades de conexión

Conoce a tu profesor(a)

Teacher Profile Image

Ezekiel Eromosei

Profesor(a)
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. INTRODUCCIÓN: Hola a todos. Bienvenidos a este curso. Mi nombre es Ezequiel Eramos. Seré tu instructor para este curso. Este curso está basado en proyectos, y vamos a estar tomando un enfoque pragmático, explorando las cosas en detalle Seguro que encontrarás el curso interesante y muy atractivo con mucho contenido. Espero verte en el siguiente video. 2. Herramientas necesarias: A B, Z aquí. En este video en particular, estaremos discutiendo las herramientas y la tecnología que se requieren para este curso. Lo primero es poder escribir botas de primavera o primavera con apalancamientos en Java ocho y superiores Ten en cuenta que si estás familiarizado con el uso de Java, al menos Java ocho, no deberías encontrar ningún problema en absoluto con este curso. Ese es el primer requisito. Ahora pasando al IDE que estaremos usando, que es el entorno de desarrollo integrado, estaremos usando Intelligda Intellig Ida es lo que vamos a utilizar en este curso, Estaré usando la versión definitiva, pero no haría nada más allá de lo que la versión comunitaria es capaz de hacer, que es totalmente gratuita. ¿Todo bien? Por favor, tenga esto en cuenta. También aprovecharemos Github, que es una plataforma online gratuita para almacenar nuestros proyectos Así que por favor tenga en cuenta que esto también es muy importante. Entonces para probar nuestra API de usar Hussman Hosman es lo que vamos a usar Si estás familiarizado con el Insomnio, o estás familiarizado con el uso de curl. Eso también es bienvenido. Solo usa lo que sea cómodo para ti. Finalmente, para construir una sección cobertiva, que es la clase que vendrá después de que la sección de tubería estará usando Docker Docker Dektop es absolutamente gratis. Donde puedes descargar dependiendo de tu sistema de perting que estés usando Esto es prácticamente todo lo que se reunirá en este curso, con este set los veré en el siguiente video. 3. Monolito vs. microservicios: Bien, muchas gracias, chicos, por acompañarme. Mi nombre es Zikel como lo introduje en el último video, Tod carbones me he estado presentando como Zikel o Entonces esta parte esta sección es un poco de Jeri, ¿verdad? Nosotros probablemente serán unos minutos. No obstante, si sabes que no te interesa Jery sé exactamente de qué se trata el costo, prácticamente podrías pasar a la siguiente sección Solo omita este video, ¿verdad? Rápidamente omita este video para que realmente se aburra. Bien, sigamos adelante Entonces esto es solo una comparación muy pequeña entre monolito y microservicios, Recuerda que el detalle central de este curso es modulith. Entonces necesitamos ver la transición. Debe haber una razón debería ser que debería haber un problema o un caso de uso que el modulit básicamente está Y por eso necesitamos saber cuáles son los problemas comunes que tenemos entre monolito y microservicios y por qué elegimos o por qué estamos migrando hacia Bien. Uh a partir de la primera visión general de la arquitectura. Vemos que los monolitos están básicamente estrechamente acoplados, monolitos están estrechamente Mientras que los Microservicios son pequeños servicios independientes que se comunican a través de una red Eso simplemente podría explicarse que todo está dentro de la misma aplicación para un monol por lo que puede crecer muy grande, en realidad tenemos las cosas estrechamente acopladas entre sí Pero en el caso de los microservicios, en realidad podríamos descomponer las cosas Un ejemplo típico podría ser si en una organización tenemos un servicio de correo electrónico, podríamos en lugar acoplar todo dentro de una sola aplicación, podríamos sacar ese servicio. Todos o cualquier otra solicitud simplemente llamarán al servicio de correo electrónico y enviarán su solicitud y el servicio de correo electrónico solo debe manejar el procesamiento de esas No obstante, para Module, todo seguirá estando dentro de la misma aplicación Modult Probablemente deberías tener solo un paquete si realmente estás hablando de Java, o simplemente tener un paquete que maneje que solo maneja el correo electrónico y eso es todo Solo tienes un servicio, un solo servicio maneja al que todo el mundo básicamente llama. Hablemos del siguiente siguiente que es la escalabilidad. Uh, este es un problema muy central con los monolitos, ¿verdad? Porque cuando quieres escalar cuando quieres escalar, escalar solo significa, por ejemplo, quieres moverte quieres crear varias instancias de un monolito, ¿verdad? varias instancias de un monolito, ¿verdad De hecho, he trabajado en una organización donde han tenido que duplicar un monolito en varias instancias, ¿verdad? Sí, eso en realidad es duradero. Pero el problema o la desventaja de eso es que descubres tomar por ejemplo, la parte que mencionamos anteriormente, el servicio de correo electrónico Si escribimos un solo servicio y ese servicio suele estar disponible o fácilmente puede tomar miles de solicitudes, ya que estás enviando a un servidor SMTP y que básicamente maneja todo Ahora bien, si realmente estás escalando monolitos, terminamos creando varias instancias de la aplicación de correo electrónico que podrían no ser eficientes Tomemos por ejemplo, o debería decir en comparación con solo crear un solo servicio de correo electrónico, al que todos envían solicitud Ese podría ser un caso de uso típico. También podríamos mirar otra parte donde vemos que los datos entre los datos, los datos para o debería decir que el modelo D realmente no maneja algo mucho. Pero en caso de monolito, crecerá. Crecerá porque debería decir, se duplicará. Esa es la palabra. Se duplicará. Por qué para el micro servicio, solo podrías determinar, ¿verdad? Simplemente cree una sola instancia de este modelo en particular, y somos capaces de manejar las cosas en lugar de simplemente enviar todo una y otra vez para All right. Hablemos de desarrollo y hablemos de desarrollo e implementación, ¿verdad? Todo bien. La verdad es muy fácil de desplegar porque solo hay una cosa que podría ser una vez que la vuelvas a correr una y otra vez, simplemente sucede lo mismo, ¿verdad Pero para los micro servicios, ya que hay varias bases de código podrían tener varios repositorios o varios repositorios Git Necesitas crear tuberías para todos y cada uno de ellos. Y eso solo agrega un poco de complejidad en comparación con solo Month que solo implementaría una sola base de código, y eso solo resuelve que solo obtiene todo implementado. Bien, pasemos a la siguiente sección. Mike, hablemos sobre el aislamiento de moda y la resiliencia. La desventaja del monolito es que si un componente falla, todo falla, Un componente falla, todo falla Pero para los microservicios, podrías determinar, bien, si esta es una sección que está fallando, esta parte no tiene que fallar Un buen ejemplo, un buen ejemplo podría ser si tienes un servidor SMTP Solo estoy usando eso ya que eso es con lo que empezamos. Tenemos un servidor SMTP, si te conectas con él y falla no aceptar conexiones, ¿verdad Estás intentando conectarte, pero no está conectando para algunos, está mostrando algún error extraño. Esa flecha, teniendo ese extraño error, si te has aislado en caso de un micro servicio, tienes un servicio de emailing que solo un standalone ¿qué pasaría en los casos Solo el SMTP o simplemente el servicio de correo electrónico tendría problema, El servicio de correo electrónico tendría problema. ¿Qué haría yo en este caso? Probablemente lo que haría es que probablemente tenga un servicio de mensajería donde una cola de mensajería me refiero a decir una cola de mensajería donde todos los mensajes realmente entran o entran todas las solicitudes, y el servicio de correo electrónico siempre puede entrar para volver a intentar ver si ha procesado el mensaje Entonces aunque cuando surja, siempre puedes volver a intentar todos estos correos electrónicos y sacar todo por ahí. Pero en el caso de Monolf, si ese servicio de correo electrónico realmente falla, solo ves que se baja toda la aplicación Todo acaba de bajar. Aprovechemos tu oportunidad para ponerla en marcha. Simplemente sigue cayendo porque ese servicio de correo electrónico no está funcionando Así que hasta que lo pongas en marcha, no podrás implementar tu aplicación, ¿verdad? O empiezas a recibir errores raros que afectan a otros componentes de la aplicación. Bien, pila de tecnología, ¿verdad? Apilar solo significa, solo significa diferentes idiomas pogammi. En caso de monolito, solo una sola pila. Bueno, podría ser una tontería y podría ser una no tan tontería En caso de mes porque intentarás hacer todo lo que necesites hacer con un solo stack. En este caso, springbot Java. Digamos que algunos otros lenguajes Pgammi prosperan en un área en particular más que springbot Java, es decir, los microservicios en realidad lo intentarían porque entonces solo aislarías Básicamente solo aísla ese módulo o simplemente aísla esa parte del servicio y la construyes como un servicio separado y usas ese lenguaje en particular para simplemente manejarlo. En fin, eso no dice maderas primaverales. Creo que todavía encuentro mis años de desarrollo. Muelle y muelle de madera transportamos para manejar prácticamente todos los casos de uso. Todo lo que pensé que debería mencionarlo. Comunicación e Instegración. Creo que ya hablamos de esto antes. Yo solo pensé que Baba acababa de mencionar esto otra vez. Vemos que los micro servicios se comunican a través de APIs. Siempre te comunicas a través de APIs. Podrías hacer algunos probablemente a través de SOP, algunos a través del descanso o cualquier forma de protocolo o debería decir un formato que realmente decidan pero en caso de monolito, simplemente funciona Simplemente lo llamamos función para hacer esto, solo lo llamamos cable de servicio en servicio de servidor. La mayoría de las veces enumera si no está diseñado correctamente. Conduce al código de espagueti, lleva a algo de esa naturaleza. Pero sin embargo, no necesariamente. He visto sistema monolito correctamente diseñado donde todo estaba bien arreglado Pero solo que veas tener ese tipo de acoplamiento, ¿verdad? Pero Microservicios, solo hay que llamar a API o API de cable, yo podría manejar problemas, manejar excepciones, y creo que esa es básicamente la diferencia Vamos a pasar a los chicos. Sí. Esta es la última parte de la que hablaremos. Hay varias otras diferencias, pero solo quiero traer esto. Por último, hablemos de complejidad y mantenimiento. Monolitos por defecto se vuelve muy difícil, ¿verdad? He trabajado en el biz del código donde había miles leí miles de líneas de código que abarcan diferentes archivos y administrarlo es infernal de alguna manera Es realmente muy tedioso manejarlo de verdad. No obstante, también he trabajado en un sistema donde se tiene un servicio en particular que hace una cosa y una sola cosa, ¿verdad? Podrías tener uno que sea solo todo el trabajo. Básicamente, todo lo que hace, en este caso, de mi ejemplo anterior, solo manda correos electrónicos, ¿verdad? No tienes que hacer nada. También he visto un servicio que fue construido. Todo lo que hace es procesar transacciones. No interconecta con el cliente. Yo sólo proceso transacciones. Entonces tenemos otro servicio que realmente habla con los clientes, recibió la solicitud, luego se obtiene la solicitud y se envía a través una cola de mensajería al otro servicio que está escuchando en ella y que procesa. Entonces puedes una vez que haya un problema, tratamos de identificar de dónde viene el default, ya sea del primer servicio o del segundo servicio, entonces tratamos de simplemente rectificar las cosas Hay parte donde realmente se puede hablar vía APIs y para ver como están las cosas, pero monolito se vuelve muy, muy, muy tedioso Y se vuelve más tedioso cuando tienes cosas cambiantes, Cuando tienes equipos que están cambiando, y ahora necesitas manejar muchos modelos o muchas partes del código, se vuelve muy tedioso de manejar, Lo que nos lleva al modulit primaveral. Esta definición que estás viendo aquí era prácticamente un Picked off the documentary, la documentación oficial. Yo solo recompensé un poco de palmaditas pero es solo eso, ¿verdad? Entonces Spring modult es obstinado, Es un opinatedTolKit que favorece las aplicaciones modulares impulsadas por dominios modulares Ese es el núcleo. Ese es el núcleo de lo que trata de resolver. Hay un patrón que debes seguir. En este caso, voy a ser más directo al decir, hay que seccionar las cosas. Debes asegurarte de cómo separas las cosas correctamente en modelos. G por ejemplo anterior, tendrías un servicio de correo electrónico en un modelo o paquete en particular Por lo tanto, los paquetes se calientan como modelo en el modelo de primavera. Entonces lo tienes en paquete o modelo separado. El servicio que procesa tu transacción, ¿verdad? O digamos que tienes un servicio de pago, ese servicio de pago estaría dentro de un modelo. Cuando se tiene un o servicio, eso será dentro de un modelo. Cuando tienes que decir, un inventario, un servicio de inventario, lo tienes dentro de un modelo, ¿verdad? Las entidades, el servicio, todo será con el modelo. Ahora bien, ¿qué espera lograr esto? Cuidado ir el objetivo central es que se puede construir de empezar como un monolito Si es necesario, decide que las cosas deben enviarse desde un módulo en particular se está volviendo demasiado grande y necesita enviarse a un servicio separado. Simplemente puede copiar todo el modo tal como es y volcarlo en una nueva aplicación de spring booth, un nuevo servicio o una nueva aplicación y las cosas solo poco solo poco o ninguna configuración. Todo está al día, ¿verdad? Todo está al día. Esa es la belleza, ¿verdad? No hay que cambiar de código porque lo que hay, todo ya es autónomo de alguna manera, ¿verdad? El modo de comunicación, no se llama a funciones. No empiezas a llamar a todos los servicios aquí y allá te comunicas a través de eventos. Intentamos comunicarnos a través de eventos. Entonces, ¿cómo mejora esto las cosas? Una vez que mueves esa aplicación, una vez que mueves ese módulo a una aplicación separada, en lugar de comunicarte a través evento una vez que comienza a moverse, simplemente puedes cambiarlo a API. Simplemente puede exponer la API y el servicio existente puede simplemente llamar a la API y conectar cosas. El módulo de resorte también es una manera muy buena de ver las cosas a ese respecto. Quiero tener esa foto en nuestra mente. Tenemos paquetes, todo está claramente separado en paquetes. Sobre tradicional que algunos de nosotros veríamos realmente la aplicación. Ellos tendrán una entidad, tú tienes un Post, tienes un paquete de servicios, luego tenemos un paquete de implementación de servicios. Tenemos tal vez paquete de YouTube ahora. En esta ocasión, tendrías en este caso, hay un evento tienes un paquete de inventario, que es un modelo. Todo es autónomo, se postularon, el ent todo está dentro de ahí Tienes el servicio de pago o el pago, todo está dentro de esa parte. Si digamos también tenemos un módulo de orden. Si el pedido necesita hablar con el pago, simplemente envía un evento a pago. Después hay un oyente sobre los pagos y solo recibo lo recibe y lo procesa Creo que basta de la teoría, únete a mí en el siguiente código. Únete a mí en el nido en la siguiente diapositiva o simplemente en el siguiente video a menos que te metas directamente en él. Este es un práctico costo práctico. Gracias chicos. Te veré en el siguiente video. 4. Lo que construiremos: Todo bien. Oye, Evon, aquí Se supone que este es un video relativamente corto solo para mostrarles exactamente lo que pretendemos construir, cómo los módulos están mal estructurados y cómo básicamente van a estar hablando entre Como puedes ver, tenemos el modelo de correo electrónico, el modo excepción, quiero decir, digo, ves todos los módulos básicamente hablando a la excepción porque solo habla de un modelo un modelo en particular. Y veremos aquí que el otro envío de eventos al pago y al correo electrónico. Básicamente, el pago y correo electrónico están escuchando al otro, habrá alguna aplicación escuche aquí y aquí en realidad tendrán editor de eventos. Bien. Y vemos que también hay un modo llamado acción de eventos. A esto se le llama inventario, que en realidad es este tipo va a estar dependiendo de esto y va a estar usando esto pero no dependiendo de esto, derecho. Y esto será dependiendo de excepción dependiendo excepto. Entonces esta es una visión general total, y me propongo esto. Entonces solo tenemos una imagen completa en mente, así que compartiré esto en el recurso, para que podamos ver exactamente cómo se supone que va a funcionar esto, ¿verdad? Y podríamos tener acceso a él también al repositorio de Git. Bien, gracias chicos. Te veré en el siguiente video. 5. Dependencias en Bootstrapping: Todo bien. Oigan, chicos, estaremos explorando la dependencia que deberían estar usando para este curso. Todo bien. Estoy usando primavera Intelligen lo siento, realidad estoy usando el En realidad estoy usando intelligen Ultimate y puedo aumentar la dependencia directamente desde dentro del IDE No obstante, para aquellos que usan spring spring, creo que es STS creo que es SDS si STS esos realmente usan eclipse De hecho podrías venir a comenzar tu primavera yo elijo la versión que quieras y la dependencia es que voy a estar compartiendo desde dentro de Intellij, entonces realmente coloco eso en, Ahora, por favor tenga en cuenta, le recomendaría usar 3d30 y no de tres a dos a seis, ¿verdad Si 3d30 y mayor está bien, por favor no use de tres a dos a seis Y la razón es porque hay un aspecto de los módulos de resorte estaremos discutiendo cuál es el módulo abierto, ¿verdad? Aún no está disponible. 32z ya está disponible 3d30. Así que elige cualquier cosa 3-3 a cero y debería estar bien. Así que recomiendo al usuario Java 21 porque básicamente estaría usando el comercio virtual de primavera. Pero sin embargo, no está realmente decidido por esto porque podemos ir por cualquier cosa menor, ¿verdad? Pero solo quería mencionar eso. Elige gradle maven, lo que sea que te sienta cómodo desarrollando lo que te gusta usar o tienes preferencia, Y eso simplemente va a estar bien. Todo bien. Exploremos las dependencias. Todo bien. Voy a ir allá aspecto del nuevo proyecto. Sí, entonces voy a recoger la caseta de primavera. Todo bien. Caseta de primavera. Sí, estaría llamando esta primavera. Voy a estar llamando a este módulo de primavera primavera Modulth curso Spring Modulth Iré a recoger a Maven. Estoy usando a Maven. Entonces me gusta usar mi apodo llamar Ms cozi solo lo llamaré el grupo elige el grupo Dejaré todo como está, después me imagino como preferencia alrededor del 21. Para mí, entonces creo que eso debería ser sobre eso para poder pasar a elegir dependencias. Creo que esto está bien. Sí. Entonces, sigamos adelante. Todo bien. Una dependencia inicial es después de que todo esté cargado o en el medio, voy a empezar a explicar qué hace cada una de estas dependencias. La primera dependencia que vas a estar recogiendo es web usando web que realmente podemos probar, poder realmente golpear ts desde el controlador o desde el sorry desde el controlador, básicamente, también estaría escogiendo el GP usando GP en este curso, usando GP en este curso. Entonces también soy un gran fan de umbok sí. Como gran parte del umbo. Además, estaremos usando Docker componer. Antes de eso, ya que acabo de elegir a JP, solo escoge al piloto de Postgress porque estoy usando Postgress Entonces escogeré Docker componer. Sí. Todo bien. Así que vamos a tener esto conectado, y este debería ser un buen arrancador para que podamos proceder realmente. Ya ves que estoy recogiendo 330. Empecemos y veamos exactamente cómo esto nos puede ayudar mientras se acerca esto, entonces voy a explicar qué hacen todas las dependencias Todo bien. Bien, voy a cargar esto en esta ventana en particular. Bien, ¿ves que viene esto? Sí, sí. Se acerca. Vamos a saltar una carga. Exploremos rápidamente esto para que esto realmente llegue a terminar. Eso es bastante rápido. Derecha. Entonces esto es básicamente las dependencias. Ahora, GPA GPA realmente ayuda a GPA en realidad características. Las características de GPA son implementaciones una implementación. Básicamente para la implementación de Is que en realidad usa un hybernt no sé lo que me falta mi sistema de palabras Es es hybernt que es un ORM muy grande, un ORM muy grande, un ORM muy grande, e hibernt es una de las especificaciones, una de la implementación de la especificación GPA una de la implementación de la especificación GPA Si revisas documentación de verificación real, especificación de JPA, creo que hay dos básicamente, W creo que un hibernto es en realidad más ampliamente utilizado y yo diría, debería decir que es más compatible También tenemos la web web es básicamente lo que te ayuda. Tienes cosas como los controladores, los contextos de primavera y los gustos. Esto en realidad trae eso en Docker Compose. Docker Compose es una excelente manera de probar. Para aquellos de ustedes que están familiarizados con Docker, esta no es una corte Docker, pero haré todo lo posible para poder mostrar un poco aquí y allá sobre Esto te ayuda a hacer aleta OG. Lo que te ayuda a hacer es que no tienes que definir no tienes que definir tus propiedades dentro de tu aplicación, las propiedades o aplicación Yamel que solo haría propiedades Yam pero estaría haciendo algunos cambios desde aquí Rápidamente factorial esto. Soy un gran fan de Yamel. Realmente no me gustan las propiedades, ¿verdad? Entonces la junta funciona igual. Por favor, no hay mejor opción, pero la placa realmente funciona en. Para que no tengas que definir tu propiedad. Por lo que si nota al colocar en el docker componen, se cables en esta guía Automáticamente obtienes al compositor Yarmo. Entonces un compositor Yermo es donde significa que cuando tienes un docker, una instancia de Docker arriba y un motor Docker deca Docker está funcionando, ya no tienes que escribir Lo que hará la primavera es que inspeccionará esto. Una vez que inspeccione esto entonces para conectarse a usted automáticamente Vemos esa inacción en realidad a medida que avanzamos, eso lo vemos en acción Esta parte es solo para que solo expliquemos la dependencia y veamos cómo las dependencias en realidad estamos trayendo Sí, estoy usando Posgus para esto. Siéntete libre de usar cualquier otro controlador o debería enviarte esa base de datos Nest driver. Entonces tenemos Pujet umbo. Esto te ayuda a reducir muchos códigos abreviados como vemos durante la cancha básicamente, esto es lo que tenemos ahora mismo, ¿verdad Es esto con lo que vamos a empezar. Y solo para envolver este video rápido, me estaré comunicando o debería decir, voy a estar empujando esto a GitHub, que es mi proyecto de inicio. Ya tengo esa configuración. Simplemente empujaré esto para levantarme o meterme en él. Se mete en él, hay que inicializarlo. Entonces, ¿está conmigo aquí? No hay conmigo. Me encanta agregar con miss a mi co Let's Let's just do New file. Leer met ND. Puedes agregar en algunas notas cuando realmente sea necesario para nosotros. Eso lo tenemos. Entonces en realidad estoy empujando a Github, así que básicamente me ves tratando de avanzar como si estuviéramos tratando de movernos a Github. Tenemos un agregado de Git Git para empujar realmente para obtener solo puntos. El punto lo que hace, recoge todo lo que hay dentro de este archivo que luego también comprueba Gign e ignora lo que no se supone que realmente vaya al sitio remoto Entonces, ¿qué más? Entonces, así que vamos a comprometernos. Bueno, antes de comprometerme. No me gustaría empujar esto porque tengo Gits guardian ya integrado dentro de mi sistema. ¿Qué hace git guardian? Solo puedes buscarlo, guardián de Git. Lo que hace Git Guardian es que parece todas las cosas como contraseñas de nombre de usuario, y te impide empujar. Si empujas, en realidad te va a marcar bien y te enviará un correo electrónico. Entonces voy a tratar Voy a eliminar esto para que no me marquen. Pero como ya sabes lo que hace esto, al menos sabemos exactamente cómo usarlo mejor. Así que voy a hacer retroceder esto. No voy a empujar esto en la redacción de Locker. Entonces tengo entonces me comete. Ese es mi primer commit. Mis primeros commits, así que son mis primeros commits. Este es mi primer compromiso. Entonces cambiaré la sucursal porque Gits Hub realmente recomienda que cambies rama a principal en lugar de Master Tú prefieres principal que Maestro, haz esto M. Entonces empujo esto adentro. Entonces todos estos comandos están disponibles en Github. Una vez que quieres iniciar un nuevo proyecto y es público, ves todos estos comandos, así que no estoy haciendo nada nuevo, se vuelve remoto luego agrega origin bring in the URL. Yo hice algo especial en mi sistema, así que solo algo de configuración, ¿verdad? Probablemente lo explore más adelante, pero no creo que sea realmente necesario. No tengo que poner en la URL, ya tengo un archivo de configuración. Cada vez que agrego algo así, esto algo así como esto llaman proyectos. Entonces esto solo comprueba el BaSur automáticamente y simplemente se lo reenvía a este tipo Entonces sí, lo hago así que vamos a revisar push eso es ginebra, luego principal. Eso realmente empuja a GitHub. Todo bien. Esto es exactamente lo que hice como entrenador, no hice nada especial. Una vez que intentas crear un repositorio público, ves que todos estos comandos están todos ahí, solo puedes cablear indirectamente, ahora mismo que empujé, si acabo de reiniciar esto, deberíamos poder ver todo aquí. Y todo lo que entra. Todo bien. Entonces lo tenemos aquí. Bien, entonces no sé creo que esta sesión esta parte va muy larga. Se supone que es un video muy corto solo para ver cómo arrancamos las dependencias en Todo bien. Bien. Gracias, chicos. Todo bien. En realidad buscamos el siguiente video. 6. Explora Spring Boot Docker: Bien. Oigan, chicos. Bien, entonces esta sesión estará explorando trampolín docker componer Springboard Docker componer. Entonces lo que he hecho es más que usar lo último, he podido cambiar esto a 16 o dos. Entonces, porque soy bastante consciente cuando los chicos de Post hacen algunos cambios importantes, siempre hay un problema con compatibilidad de copias de seguridad excepto que haces algún tipo de configuración adicional. Así que cambié Analista puedo ver antes de ahora, creo que teníamos esto como mi base de datos ese usuario, mi usuario, secreto ir algo ya escuchado así que en realidad podemos seguir adelante. Todo bien. Entonces como llegamos a esta sección de volumen, la razón por la que tenemos esto es muy directa. Lo que esto básicamente hace es componer lo siento, los contenedores Docker son efímeros, es decir, no duran Ellos no lo hacen no no persisten. Entonces, lo que significa cuando el contenedor muere, o tus datos que tienes dentro de él mueren junto con él. Entonces, lo que estoy haciendo es que en realidad estoy mapeando esto para que guarde esos datos en mi sistema local. Ocho. Eso es exactamente lo que estoy tratando de explorar aquí. Entonces, amigo mío, ¿cómo conseguí esto? ¿Cómo llego a través de esto es todo. Entonces miraríamos esto es Docker Hub. Así que para que sepas exactamente cómo llegué al respecto, cuando voy a Docker Hub a escribir Postgres Postgres. Sí, Postgresa Lupus adivina simplemente desplácese hacia abajo. Siempre hay un camino donde se habla de usar los datos, ¿ves esta parte? Datos. Uno se monta en el volumen, esta parte es un volumen de los datos de OCCats que no se persiste en el volumen de montaña Así se puede ver esto. Siempre es recomendable. Te mueves si lees esta parte así que yo solo escojo el ejemplo de aquí. Si usa Linux Mac, solo vas a usar tus partes personalizadas. Por eso esta parte fue escrita a medida. Piezas personalizadas, lo mapean a esto. Aquí es donde los datos persisten dentro del contenedor Docker Simplemente mapea eso lo que hice. Todo bien. Entonces ahí lo tenemos. Sí. Y así solo borra esto. Ahora, puedo eliminar fácilmente de mi contenedor Docker cuando quiera Puedo eliminar este contenedor porque ahora soy persistente. Así puedo asegurarme de que mis datos están realmente ahí. Ahora, creo que podemos ejecutar esto. Vamos a sacar esto. Veamos qué pasa. Veamos qué pasa. Todo bien. Bien, bien. Bien. ¿Qué está pasando? Esto es un error. El error de error es vamos a ver. Esto es extraño porque sé que esto debería funcionar automáticamente sin ninguna creo que estoy haciendo algo mal aquí. Todo bien. Déjame publicar este video y volveré gli volveré en un minuto. Muy bien chicos. He podido averiguarlo. Lo que noté fue que estaba usando una contraseña incorrecta y una incorrecta. Estabas preguntando, ¿cómo está mal? Pensé que estaba renunciando desde el principio. Lo que trato de hacer personalmente es que trabaje en varios proyectos con varios proyectos. Simplemente dejo diferentes maquinadores para ellos dentro de la base de datos Postgres, diferentes esquemers, los mismos datos para que no tenga no sé cómo mis datos se dispersaron por Yo sólo los guardo en ese orden en particular. ¿Cómo? Básicamente, ahora estaba usando una contraseña diferente. Para una base de datos que ya existe, debe ser la misma contraseña. ¿Cómo lo he averiguado? Así es como lo hice. Si te metes en este tipo, yo puedo ejecutar esto directamente, puedo ejecutar esto directamente. Entonces Intelligent tiene integración directa para que realmente ejecutes esta línea directa ya ves cómo funciona esto. Entonces si revisas, puedo revisar los registros, solo sigue esta parte. Ver los registros. Entonces estás diciendo que arranque acepta conexión. Vamos a ejecutar la aplicación y verás los registros que realmente aparecen aquí. Ejecuta la aplicación y vemos exactamente a lo que nos enfrentamos antes. El mismo error. El mismo error simplemente saldrá a la luz. Boom. Bien, vea el error y este error es el mismo error. Ahora bien, ¿cómo obtuve error de ventana al entrar aquí, si nos fijamos en esto, campo de parscation para usuario Ese es el tema. Yo no estaba correlacionando Esta es la contraseña correcta que usé básicamente. Lo que voy a hacer es simplemente borrar a este tipo. Con esto, voy a detener este contenedor para que ahora podamos elegir la contraseña correcta y realmente agregarla. Voy a detener este contenedor. Voy a detener esto. Entonces recuerda, creo que no mencioné esta característica. Una vez que inicia la aplicación, se abre el contenedor Docker Una vez que detienes la aplicación, la baja. Pero si quieres que la base de datos siga funcionando, simplemente puedes iniciarla directamente. Lo ejecutas manualmente para aquellos que están bastante familiarizados con ¿Puedo usar Docker Run the put in all put in the details, derecho Pero siempre es un comando largo muy raro que no recomiendo. El componer es en realidad una buena manera. Entonces ahora que he arreglado a este tipo. Ahora vamos a ejecutarlo directamente y veamos exactamente cómo funciona. Todo bien. Hagamos esto. Bien, está subiendo, viene. Bien, ya ves, el error se ha ido, así que esa fue la solución. He podido explicar lo que Docker Compose hace físicamente, y como pueden ver muy bien, no había ninguna propiedad, ninguna propiedad de conexión de base Pero esto es sólo para la prueba, por favor. Esto no es para producción. Es sólo para pruebas. Si quieres pasar a producción, quiero hacer algo de despliegue que hará al final posterior del curso eliminar Docker componer y usar las propiedades reales para que podamos realmente ayudar a esto Bien, esta es una introducción muy rápida a cómo funciona Spring Boots Docker componer y vemos que solo puedo seguir desarrollando sin tener quiero hacer algo de despliegue que hará al final posterior del curso eliminar Docker componer y usar las propiedades reales para que podamos realmente ayudar a esto Bien, esta es una introducción muy rápida a cómo funciona Spring Boots Docker componer y vemos que solo puedo seguir desarrollando sin tener todas estas cosas aquí. Todo bien. Gracias, chicos. Bien entonces. Te veré. Adiós. 7. Explora la dependencia de Spring Modulith: Sí. Hola, chicos. Esto es Z aquí. Todo bien. En esta ocasión, estaremos explorando. Hemos podido hacer un poco de configuración. Ahora es el momento de traer en el modulif de primavera el Lo que suelo hacer es que cuando tengo un proyecto ya ejecutado y quiero ver exactamente cómo actualizar las dependencias, usaría esto Ahora bien, esta fue una nueva incorporación de InteligGS. Gracias, chicos. Gracias, Intellig. Sí, solo puedes hacer clic en esto. Y es para cargar lo que tienes antes, luego conectas nuevas propiedades. Ahora bien, para los que están usando eclipse y me gusta, no sé si tienes esa característica. Lo siento, no he podido explorar eclipse. Lo que puedes hacer es luego agregar en la dependencia como los módulos que estás a punto de agregar una vez que lo hayas agregado y luego hacer clic en Explorar Una vez que exploras, entonces puedes comparar esta versión para ver lo que falta, luego agregarla a tu proyecto. Solo pensé que en realidad debería mencionarlo. Qué haría yo usaría mi manera fantasiosa. Tenga en cuenta amablemente. Me encanta Intellij ultimate. Traigo esto, así que sólo voy a traer en primavera modelarlo. Módulo es nuestro próximo plan de acción. Al traer esto, hagamos clic en esto. Veré qué pasaría. La magia sucede. ¿Puedes ver? Todo acaba de entrar. Boom, boom, boom, boom, boom. Todo acaba de entrar. todo realmente cableado en todo lo que necesitamos. Se ve el modelo traído en el núcleo, trajo en la prueba, trajo en el GPA Ih uno, me gusta reorganizar las cosas, así que creo que esto debería bajarse Voy a derribar esto. Realmente no tiene ningún significado pero simplemente me encanta arreglar un poco las cosas. Me encanta mover a los chicos principales en la parte superior, bajan las pruebas. Entonces esta es una prueba. Sólo tienes que bajarlo solo una carne de preferencia personal, entonces voy a tomar esta prueba también la prueba de modular, entonces solo la voy a bajar. Entonces creo que debería ser así. Creo que debería ser así que solo sé ruidoso. Entonces después de cargar y este tipo está en lo siguiente es, vamos a explorar un poco el módulo de primavera, ¿verdad? Vamos a explorar algunas de las propiedades, ¿ verdad? Sólo un poquito. Pero en realidad me adentraría en la sesión cuando empecemos a utilizarlas. Yo sólo quiero que ustedes vean dónde encontrarlos, dónde usarlos. Entonces en inteligente, hay algo llamado las dependencias externas M mira muestra todo lo que lo conectaste. Entonces estas versiones móviles, si es bueno ves Grado vas a poder vender dependencias, ¿verdad Entonces estas son las dependencias que lo cablearon y se puede ver el modulador está adentro. Modular. Lo que voy a hacer es ir entonces a este camino e irme a Modult de primavera Eso es una preocupación primavera modult. Vamos a ver lo que hay en el núcleo. Veamos qué hay en el núcleo. Hay un concepto llamado módulo de aplicación. Ese es un nivel de código. Eso no es trabajo. Yo los había confundido chicos. ¿Eso es trabajo? La idea es simplificar esto. Yo sólo te mostraré. Solo quiero mostrar que estas cosas están disponibles aquí. En realidad están disponibles. Aquí es donde tienes todos los detalles de nuestros manantiales se hace mucho trabajo para nosotros en el fondo. La mayoría de las veces cuando usamos algunas cosas en la superficie y no sabemos exactamente lo que está sucediendo en el fondo, posible que realmente no apreciemos lo que se está haciendo. Estaremos explorando cosas llamadas interfaz de nombre. Vamos a usar la interfaz de nombre. Estaremos usando el paquete Java, no esto directamente, sino el paquete usando el paquete que es info. Yo usando eso. Este módulo de aplicación también viene en modelo de aplicación. No voy a querer escribir realmente nuestra prueba porque escribimos un poco de prueba. Este tipo también viene usando a estos tipos para que veamos exactamente cómo funciona aquí. Vamos a revisar. Exploremos los bits de API, API. Esta es la API. Mira la API, así que hay esta parte también esta publicación del evento que vamos a estar explorando. Exploraremos publicaciones de eventos finalizadas, publicaciones eventos incompletas. Hacemos algunas cosas dinámicas alrededor de esto, algunas cosas dinámicas únicas. Solo pensé en mostrarles chicos para que ustedes vean exactamente cómo funciona esto y estaríamos saltando justo para que veamos cómo básicamente trabajo. ¿Es algo realmente increíble de usar? Es realmente yo era realmente, realmente un zo increíble para ti. Entonces solo quería explorar eso para que sepamos cómo funciona esto físicamente. Entonces este es un modef de primavera. Spring moduli, creo que algo que bastante rápido quiero mostrarles chicos Ah, sí, este tipo de este tipo. Ves este tipo. Ahora tenemos algo llamado pistas. También hay un abierto. Antes de ahora, esto no estaba disponible. Por eso recomendé que usemos 30. No teníamos prueba antes. Pero ahora tenemos este modo de aplicación, quiere usar open closed. Yo explicaría todas estas preocupaciones para que ustedes sepan exactamente lo que significa, ¿verdad? Yo solo quería mostrarles que este fue el tardio reciente cuando nos mudamos a 1d20 Antes de eso, era Window 20, yo era CRN, pero ahora es una topadora D dos Esto es algo bueno. Otra cosa que quiero hacer es que ahora que he cableado esto estaré escribiendo un código para hacer las cosas. Básicamente, probablemente querría cambiar más hasta ahora, estas dependencias, probablemente quiera crear un problema de Github, y mapeé todo con un problema de Gitub Creo que tengo ventanas de bro arriba. Gitub. ¿Cómo se crea un problema de Github muy simple Vayamos a Github, creamos problema. Entonces solo voy a hacer esto y llamémoslo un cableado en dependencias, dependencias, independencias de cableado Entonces también quiero crear otro que ya has hecho antes, que es explorar Spring booth. Bota de resorte. Lo siento. Sin caseta. Componen botas de primavera. Esto hace un seguimiento de lo que estamos haciendo para que sepamos exactamente cómo hemos ido hasta ahora. Déjame ir a esto. Estos son los chicos. Voy a estar cometiendo contra ellos. Entonces creo que eso es todo. Entonces les estaré mostrando una cosa más al final, hagamos esto hacer Git commits. Lo siento, sé que a algunas personas les encanta usar la interfaz o Git commits y no. Yo realmente solo estoy acostumbrado a la línea de comandos. En realidad me encanta. Si consigues commits, entonces traeré el nombre, explorando. Explorando a este tipo. Entonces esta para que tengas que usar esta palabra clave se cierra. Cierra luego el ID. Entonces esta también las dependencias de cableado hago de esta la primera Entonces puedes poner cierre múltiple, o puedes cerrar múltiples dentro de él. Así cierra. En el momento en que Git Hubble escanea a través de esto. En el momento en que mira esto y ve que la palabra clave se cierra y ve la identificación y asiste también cerrará a este tipo. Se puede ver que el ID realmente coincide. Este es el ID a si abro uno de ellos, se puede ver ID es el ID. Simplemente cerraría rápidamente y rápidamente tiraba hacia atrás esta ventana y veía cómo funciona. Déjame cerrar esto entonces va a través del empujón consigue empujar. Sí. Vamos a explorar el que está hecho. Ves que esto está hecho. Vamos a refrescar esto. Todo bien. No más temas. Porque ¿por qué? Están cerrados. Porque ella cerró por eso dije el símbolo aquí, están cerrados. O expe comenzamos a usar Etiquetas Adhesivas. No estoy segura. Obtienes el ist. A partir de aquí, empezaremos a hablar desde el siguiente video, comenzaremos a hablar sobre los dominios que usaremos como entidades que usaremos para explorar realmente la modulación de primavera Gracias chicos. Todo bien. Nos vemos la próxima vez. 8. Definición de entidad 1: Hola ahí. Todo bien. Esto es Z otra vez. Todo bien. Entonces estaríamos definiendo nuestras dependencias o definimos nuestras entidades, ¿verdad? Estamos definiendo nuestras entidades en este video. Bien, así que sin perder mucho tiempo, vamos a meternos en ello. Principalmente estaremos haciendo uso de algunas entidades. Creo que declaramos otro más adelante, pero profundicemos rápidamente en ello. Entonces, para empezar, vamos a necesitar si básicamente digo, recuerden, recuerden que en realidad nos ocupamos de módulos de resorte. Así que solo como recordatorio, y Spring Modulate realmente resuelve mayoría de los desafíos para aquellos que no están del todo seguros de si realmente van a crear un monolito o si van a pasar a un Spring modult te ayuda a crear una transición donde puedas moverte fácilmente, ¿verdad Porque la verdad es que hay algunas aplicaciones de las que quizás nunca puedas tener un concepto completo o un suspiro completo de si va a ser un monolito o si va a ser un Pero sin embargo, la primavera Modult puente un budges du de tal manera que se puede comenzar con un monolito, luego la transición Todo bien. Vamos a meternos en él para ver las entidades que usaremos para realmente hacer esto. En consecuencia, estaré usando una de las cosas que claramente especificó o claramente señalaba en el módulo de resorte, todo se maneja como modelo. Y por modelo, nos referimos a paquetes. Por modelo, nos referimos a paquetes. Cada paquete básicamente contendría todo lo definido dentro de sí mismo. Entonces la idea detrás de esto es que si ya estás listo para moverte, puedes simplemente mover ese módulo como está a un servicio separado con poca o ninguna configuración, ese tipo es bueno para ir como servicio separado por sí solo. Ese es el concepto que quiero que tengamos realmente en mente. ¿Verdad? Cuando estamos construyendo estos cortes en diferentes paquetes, debe asegurarse de que cada una de sus entidades o entidades relacionadas estén en un lugar en particular y puedan moverse fácilmente Así que en realidad favorecemos un fuerte desacoplamiento para que sea fácil mover las cosas Bien, vamos a meternos en ello. Lo primero en lo que vamos a estar trabajando es, vamos a sumergirnos en ello. Vamos a sumergirnos en ello. Tenemos un inventario. Tener un inventario, y al parecer necesitar una entidad, llamar a eso un inventario de inventario. Necesito un inventario y al parecer no es un JPA, así que solo voy a cablear las cosas en Sí Espero que todos estén familiarizados con el libro de registro, así que nos facilita saber exactamente cómo estamos definiendo las cosas Entonces usando un privado, mi identificación va a ser larga. Entonces el uso de un privado un nombre de calle privada, luego una privada, luego una privada. Me encanta lo inteligente para esto. A, IA físicamente te da sugerencias, solo trabaja. Prefiero que mi pase sea largo. Alguien podría querer preguntar por qué usas mucho en lugar D. Habiendo trabajado en el espacio de pago por un tiempo, me he dado cuenta de que prefieres trabajar con largo en lugar doble es decir que imagina que tienes algo como digamos que yo Nigeria five ny 535 nyra Cuando haces divisiones, multiplicaciones, adiciones, y los gustos, no tienes que lidiar con esta cifra. Esto causa muchos problemas, ¿verdad? Incluso en el espacio de pago, varios problemas podrían incluso causar demandas que me pagaron mal, me engañaron, y como porque estas cosas pueden crecer exponencialmente dependiendo de lo que realmente lo que el cálculo Entonces preferiría, ¿verdad? Usa un pulmón. Así que un largo básicamente circo esto. Entonces de esta manera, aclaras totalmente el aspecto de usar un lugar decimal, y eso te ayuda a ejecutar tu cálculo fácilmente. Entonces cuando descargues la finalización y todo, todo, quieres enviar tus datos o la factura al cliente o recibir pagos y me gusta. Entonces, si estás enviando un doble, puedes simplemente multiplicar por 100, correcto, y simplemente leer todo como un largo. Cuando quieras enviar de vuelta, sal de tu sistema, simplemente divides por 100 y recuperas tu decimal, y eso solo es el escenario. Gracias. Tenemos esto. Esta es una entidad, por lo que hay que etiquetarla como entidad. También como tabla, habrá algún índice para estar colocando. Usemos índices, luego en índice, en índice, entonces ¿cuál es el nombre del índice? Quiero nombrarlo INV name index el nombre porque va a estar recuperando por Necesitamos nombres para ayudar primero a una columna. Entonces para permitir realmente permitir realmente la primera lectura del campo de nombre, ¿verdad? Estoy seguro de que somos conscientes de lo que la indexación hace complejidad espacio-tiempo Aumenta el tiempo, pero sea que llegues a tener un espacio, llegas a tener una desventaja de espacio extra, ¿verdad? Después se agotaron. Bien, entonces la lista de columnas, estamos apuntando así que esto debe corresponder al nombre exacto Entonces, si tuvieras algo así como, digamos, columna aquí, y luego la columna, lo que definías como el nombre no era NAM, por ejemplo, lo que deberías usar debería ser lo que eventualmente debería estar en la base de datos y no tu campo. Por favor, tenga en cuenta eso. Si estás usando una columna, esto debería corresponder a lo que estás usando como columna. Pero si esto no está disponible, usa esto. Si, por ejemplo, también tienes algo así como también tienes algo así como vamos a llamarlo campo de nombre. Por ejemplo, así es como lo definís. Al parecer, si quieres usar esto así, tiene que ser este formato porque eso es con formato. Así es como leerlo porque mayoría de las veces cuando el mapeador bin en realidad está mapeando cosas, literalmente mapeando tu campo a los objetos de la base de datos, verías que todas estas letras de bloque se transforman y tienes algo como esto Menciona el señor Aasha que sigamos adelante. Todo bien. Esto significa que necesitamos definir ID, por lo que este sería un ID. Sí. Entonces generó valor sí, quiero una identidad. Simplemente me encanta Intellig Jon es IntelligTS. Eso me encanta. A entonces quiero que esto no sea cognoscible, esto no debería ser cognoscible Entonces quiero que sea único, quiero único. Es un poco ser único es diferente del índice. El índice es para el tiempo de anuncio. Por qué la singularidad es decir que no quiero que ningún objeto tenga exactamente lo mismo No quiero que ningún objeto de invención tenga el mismo campo de nombre Por eso el nombre debe ser único. Una vez definido eso, sigamos adelante rápidamente y definamos sigamos rápidamente para definir el repositorio, definir el repositorio. Bien, aquí mismo, solo toma a este tipo y voy a estar creando una interfaz. Estoy seguro de que probablemente esté familiarizado con el uso interfaces o el uso del procedimiento GPA, solo defina rápidamente eso Voy a llamar a este inventario. Int, qué estoy escribiendo. Inventario, A positu. Así que básicamente se extiende, sí, el co depositante, estoy usando un largo, no un entero, largo un incigor.Esto es físico necesario, pero me encanta actuar solo para dar a los videos de mi código más perspectiva de lo que haces En cambio, quieren obtenerlo eventualmente por su nombre. Entonces sí, quiero esto, pero no por su nombre. Quiero esto, quiero encontrar por inventario. Encuentra por eventryEncuentra entrada, multa eventual eventu Botas funciona bien evento o encuentra Esto es. Bien, hay otra varianza que me encantaría mostrarle muy rápido, así que ese no es el alcance de esta cancha que solo quiero mostrarle. También podrías usar G B. Esto también funciona. Entonces ya ves, puedes usar get y está bien. Ves que algunas personas tienen favor más de usar get. Entonces es justo lo que realmente aceptas usar en la empresa en la que trabajas o en el proyecto en el que estás trabajando. Entonces puedes usar define by get by, pero solo siento que debería ser convencional como dijiste, tienes esta convención donde sigues estrictamente, ¿verdad? Sigues estrictamente el definir o el get. Bien, vamos a ceñirnos a probablemente sólo voy a pegar para conseguir sólo me quedo para conseguir. Enfermo de llegar porque sé que mucha gente está familiarizada con encontrar, así que solo lo ponen ahí afuera que dice que se pone entonces también estaría necesitando esto también estar necesitando esto. Voy a necesitar evento por evento sí dame demasiadas sugerencias. Incluso por su nombre. Sí, por su nombre en. Al parecer esto necesitaría una lista. Pasas una lista de nombres, luego básicamente el SQ necesario, luego pasas una lista de para buscar por todos esos nombres y obtener que vamos a estar necesitando eso. Creo que hemos terminado con estas partes vamos a pasar a también estaría necesitando un modelo. Módulo O. Otro modo. Para el otro módulo básicamente. Entonces estaríamos necesitarías esto ir con el pedido. Al parecer, necesitamos la orden. Por favor, no hagas esto en casa. No copie. Al parecer, no lo copies. Entonces, solo hace que esto funcione más rápido, bien. Entonces entonces creo que quiero ponerle un nombre a esto. Ahora la razón por la que quiero usar. La razón por la que quiero cambiar este nombre es porque recuerda en SQL, tienes algo como tal vez consigue algo, probablemente hagas seleccionar estrella de una tabla, luego ordenar por quieres ordenar por, digamos, ID. Esta es una palabra clave reservada. Es una palabra clave reservada. Si estás usando orden, es por eso que estoy cambiando y colocando un pedido de SSs, para que no entre en conflicto con esto Es por eso que la mayoría de las veces descubres por qué usas el mismo nombre que realidad es una palabra clave especial en la base de datos. Verás que JP básicamente muestra un error una vez que realmente ejecutas la aplicación. Yo sólo quería mencionarlo. Tenemos esto. Entonces estaría necesitando un largo. ID largo, luego una cadena privada, supongo que llamar a este identificador de orden. Todo se unirá pronto, identificador de pedido. Entonces también tengo un nombre de cliente de cadena privada, luego una cadena privada privada privada. Creo que solo puedes hacer un Ps. Deberían funcionar. Entonces una marca de tiempo privada porque estoy usando sello PostgreSST Una marca de tiempo privada o esta, entonces hay que asegurarse de que es un Java SQ que estamos usando porque eso es lo que vamos a ser interpretados a la Entonces quiero estudiar default en vez de esto, no quiero millis Ither do instant Instance dot now Quiero hacer Instant, eso debería ser si ese es el caso, debería ser timestamp from De. Bien. Esto funciona. Esto funciona. Entonces algo también único. Quiero agregar un estatus privado. Necesitamos un status, estatus privado, status, entonces quiero que sean los diferidos Así que al igual que cuando tienes una orden, el otro sigue abierto o tus otros cerrados o el otro falló. Entonces básicamente, eso es lo que el estatus que estoy tratando de representar aquí. Entonces el estado, el estatus, eso es abierto. Entonces ahora es el momento de definir nuestro estatus. Así que creo dentro de este otro paquete llamado tipo C type, entonces aparentemente sea annum num status Entonces sería de dos tipos, abierta, luego terminada. Creo que esto funciona. Entonces ahora tienen una final privada. Código de cadena. No quiero que este nombre exacto esté etiquetado en la base de datos, así que me gusta usar letras. O debería ser una buena. Entonces este tipo debería ser un C. Guy esto se queja porque necesita un getter ya que gracias umbox solo puede usar umbok dictly y luego todo x constructor, y y En absoluto x constructor. Eso debe satisfacerse de inmediato. Con eso, podemos cablear fácilmente las cosas aquí. Sí. Entonces ves a estos tipos en este tipo en. Volveré aquí en un minuto estaré de vuelta en un minuto para arreglar esto. Entonces, pensando en esto, necesitamos una forma. Así que sé que la mayoría de los chicos probablemente solo querrían usar o he visto a mucha gente simplemente usar enumerado, ¿ Y esto solo maneja la decadencia. Pero el problema con esto es cuando usas un enumerado, empieza a usar números, ¿verdad Números, a partir de cero, uno. Si agregas otra cosa aquí para recoger dos. Ahora el problema es que si ahora eliges algo, digamos que agregas otro objeto aquí, ¿verdad? Añades otra cosa aquí, llámalo probablemente falló, ¿verdad? Tu número se estropeó. La numeración se estropeó y eso en sí mismo no puede empezar a causar errores, porque no tienes directo no estructuraste o probablemente alguien más escogió el proyecto Por eso estoy a favor de usar esto. Yo siempre tengo un convertidor tipo. Hola tipo convertidor, y un convertidor de tipo convertiría a este tipo. Yo lo llamo convertidor de estado. Convertidor de estado. Estamos usando un convertidor de estado y ese convertidor implementaría convertidor de atributos. Convertidor de atributos. Esto va a funcionar. Entonces, en el momento en que lo etiquete en convertidor en convertidor auto aplique a través, esto hará la aplicación automática. Ya no necesito agregar nada aquí. Sólo déjalo como está. Debido a que he implementado esto, una vez que la primavera está escaneando a través de mi proyecto, ve el estado el convertidor de estado. Yo solo lo da para ver exactamente cómo en realidad modelo y digo, así es como quiere ser increíble, genial. Entonces sabe exactamente qué hacer. Implementemos esto rápidamente. Sí. Entonces, ¿esto es lo que estás convirtiendo? Estoy convirtiendo a este tipo a columna de base de datos. Entonces, ¿qué se deben representar las columnas de base de datos? Entonces, lo que fácilmente hago es simplemente hacer una matriz, la cadena, luego solo haré el estado, los valores, luego solo haré esto, luego solo filtraré. Vamos a filtrar el estado, el estado. Establece igual a status, igual a, llamemos a los estados. Syntus Epose a status. Si estos son iguales, si estos son iguales, entonces mapeo, luego mapeo el estado, luego una referencia. Entonces el hallazgo primero encuentra primero o bien a cómo una excepción. Entonces una excepción, quiero mostrar. Quiero verdad, lanzar una excepción. Vamos a lanzar un nuevo argumento legal. Vamos a cambiar esto. Vamos a cambiar esto más adelante, ¿verdad? Voy a cambiar esto más tarde, ¿ cuándo definiría nuestras excepciones o excepciones personalizadas o volvería a cambiar? Estas son excepciones. Todo bien. Entonces por aquí, ¿quiero llamar a esta focha entonces lo mismo Ahora vamos a ir con la misma matriz que los valores simplemente no logran masticar también. Simplemente fallan en masticar Entonces el fuego entonces ahora estamos comprobando si cada uno de los estados entonces el estado obtiene el código es igual. Es igual o ir caso de señal, entonces los códigos son iguales al código. Entonces nos encontramos primero. O de lo contrario mostramos esto puede simplemente el código no encontrado, ¿verdad? Por lo que no se encuentra el estado Vida por estado. Entonces, ¿qué hace esto? Déjame explicarte esto. Entonces, lo que esto hará es, una vez que persista en un tipo particular de estatus, en este caso, en este caso, digamos que elige está presentando un estado abierto, que es el predeterminado Este convertidor entrará en marcha, comprobará. ¿Qué intentas convertir del estado a la base de datos Así que revisa esto, entonces estamos mapeando el código para que use este código. Este código es exactamente lo que persisten en la base de datos. Así es como funciona. Código muy sencillo. Aquí pasa lo mismo. Esta vez cuando se quiere convertir de nuevo el código en una entidad, convertirlo en la entidad a verificar, ¿qué tenía? ¿Qué código tienes en la base de datos? Ya ves, luego escoge la C, luego entra aquí, parece verificar, ¿ cuál coincide con C? Una vez que coincides con el estado que realmente contiene el código, C, luego lo encuentra, luego lo devuelve. Básicamente, así es como funciona. Esto realmente resuelve ese caso de tener que usar varias formas de en varias formas e intentar persistir en la base de datos. Esto es lo que más me gusta. De vuelta a esto tan rápidamente arregla este rápido vistazo aquí, solo roba este código. Sólo ven aquí. Por favor, no hagas esto. Vamos a copiar y pegar. Ahora tenemos esto. Hemos podido entonces también estaríamos explorando. También estaríamos explorando otro atributo codificado u otra entidad llamada O inventario. Otro inventario ahora, yo explicaría por qué voy a estar teniendo otro inventario. La razón por la que estaré teniendo inventario es porque si tienes mucho cuidado de observar, no he estado usando no he estado usando esta entidad relaciones como uno a uno, uno, muchos a muchos o muchos a uno. Porque si estás construyendo módulos de resorte, todos tus módulos tienen que estar fuertemente desacoplados y debido a que están desacoplados, el momento en que comienzas a cablear en entidades, tenerlos juntos como muchos, muchos a ellos inmediatamente se acoplan apretadamente porque dependen unos Y ese no es el objetivo aquí. El objetivo es realmente hacer las cosas sueltas acopladas para que puedas mover fácilmente un módulo alrededor como desees. Entonces mi otro inventario gestionará entonces la relación entre el otro y el inventario. Entonces, básicamente, eso es lo que solo estamos tratando de imitar lo que hace GPA Y eso es lo que básicamente quieres hacer en la vida real. Se crea una tabla para luego manejar aquellos que realmente tienen una relación entre ellos. Bien. Todo bien. Creo que eso es lo suficientemente claro. Así que entremos. Yo Schless solo copian esto. Yo sólo voy a copiar esto. Es lo mismo. No está cambiando. No está cambiando. Entonces tendré lo mismo en Geta, el mar, en entidad, a dos cuerdas Dos cuerdas, dos cuerdas, dos cuerdas. Dos cuerdas. Para encordar, luego una tabla. Entonces mi tabla tendrá índices. Mis índices tendrán así que quiero tener no sólo un índice sino índice múltiple. Ahora me pregunto cómo sé que esto sería un múltiplo que puedo tomar múltiple. Integ da una característica una vez que lo colocas dentro la ortesis justo al oeste Control P. Si, Control P o creo que debería ser el comando P en MAC Entonces ves que el índice es en realidad toma una matriz. Es una matriz que se necesita, así que puedes tener más de uno. Para que puedas colocar uno ahí o colocarte en esta collibrasa y tener más Entonces lo que tenemos un índice en índice, luego el nombre, voy a llamar a este otro índice, ID, IDX, y la lista de columnas voy a estar apuntando Ahora bien, esto fue columnista de Libia por una razón. La lista de columnas es la otra ID. Voy a volver aquí. Veremos cómo definirlos. Es decir puedes definir si tienes más de uno, solo usa un valor separado por comas y podrás tener a los otros chicos Entonces en índice, ¿ese es el segundo? Ese debería ser el índice MV. Tenemos que leer realmente para el inventario, entonces la lista de columnas será el ID de empresa de inventario. Esto funciona. Debe ser un lanzador de comando separado. Esto se ve bien. Esto se ve bien. El privado largo o ID, este debería ser un largo, no largo, ¿verdad? Tener una identificación larga, luego una identificación privada de larga aventura. Gracias, primavera o Inteligente. Después privado en cantidad. Creo que a esto le llamo CANTIDAD. La cantidad es simplemente demasiado larga. Entonces privateong Privado largo, quiero llamar a esta cantidad total cantidad precio No sé si esto se desarrollaría. Mirándolo de nuevo. Otra identificación en un largo bien, verifique esto definitivamente puede ayudar. Bien, está bien. Está bien. Bien, procedamos. Vamos a proceder. De hecho volveríamos ahora mismo definimos esto. Creo que solo necesitamos definir rápidamente repositores para reflejar realmente lo que estamos tratando de hacer Entonces creo que este video se está haciendo demasiado largo, ¿verdad? Se está haciendo demasiado tiempo, así que necesito terminar esto rápidamente, envuelva esto rápidamente. Definamos rápidamente nuestro repositorio. Yo sólo voy a entrar aquí, o repositorio. Yo solo lo llamaré un repositorio una interfaz. Entonces en realidad se extiende el largo aquí, esto funciona como repost, entonces lo único que necesito es justo pero esto no es lo que necesito Quiero encontrar otro identificador. Esto es lo que necesito. Entonces esto es lo que necesito. Yo sólo quiero el identificador. Debería ser una cuerda, feliz. Llámalo otro identificador. Esto básicamente lo que necesito aquí. Entonces, si revisas el otro inventario, otro inventario será bastante único porque estarás escribiendo una consulta nativa. Llame a este repositorio de inventario. Otro inventario positorio luego un repositorio. Entonces tenemos lo que quiero lograr es que quiero tener un monto de ID de pedido, o cantidad de identificación. Entonces la consulta tiene sentido Libelo D eso. Después pasamos en el ID de pedido. Entonces un ID de pedido en particular, quiero todo el monto, ¿ verdad? El ID de orden particular. Quiero todos los montos que es, ya sabes, tienes un inventario, has realizado ese pedido bajo puede contener una lista de inventarios Entonces todos los montos, como todos los montos de inventario, sumando todo junto. El inventario puede ser para inventario A puede tener dos puedes tener dos para evento B puede tener tres, 53, cuatro, puedes tener seis, toda la combinación hecha juntos, quiero todo aqui. Por eso estaré escribiendo la consulta. Eso va a ser una consulta. Simplemente cae en nativo. Vamos a caer en nativo, consulta true, luego el valor. El valor será seleccionar suma, luego inventario, ya que obtendrá de los puntos de inventario. El total recuerdo definimos esto definimos esta área. El precio de cantidad, así es como debe ser debe ser etiquetado en la base de datos. Subrayar el precio luego del inventario Inventario Underscoe. Creo que solo déjame hacer esto OI está bien entonces para que no tengamos que repetir así solo coloca esto aquí OI y eso funciona o el inventario así que ten eso donde el otro ID. Solo puedes decir Oi ID igual a esto, que es un valor facial que se puede usar que es un valor de fase. Tenemos eso.Esta sea interfaz y se extiende para extender la multitud No, no creo que necesite el GPA completo. Ahora, sé que alguien podría estar preguntando, ¿por qué usas multitudes o no GPA Con toda la funcionalidad que necesito, tomemos por ejemplo, volvamos a esto. Mira todo lo que necesito aquí. Esto es justo lo que necesito, que está disponible dentro de la multitud. Ahora bien, si estás trayendo GPA, estás trayendo demasiadas cosas Mira este GPA repost tres. Si haces clic en esto, ya ves, traes todo esto. No necesito todo esto, trae uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez, 11, 12, estás trayendo a 12 otros 12 tipos que están disponibles. Y esto también contiene lo que tenemos en el código. Ves que esto contiene el código al menos código. Nosotros básicamente todo lo que necesito es el cordón. El código solo trae las cosas básicas, así que esto está bien. Porque lo que estás trayendo si estás trayendo JP, P traerá todo dentro de sí mismo y además, todo estará listado junto, así que no necesitas todo eso. Por eso me apago al código depositario. Creo que ya terminamos con esto. ¿Por qué se queja este tipo? Porque no entré en dialet. Cambiemos el dialecto a post crisis. ¿Lo hacemos feliz? ¿Por qué no feliz? Porque no estoy conectado a la base de datos. Sólo déjalo. Esto funciona. Seleccione el otro inventario, precio de cantidad de este, luego donde se prueba el ID . Eso es básicamente lo que necesito. Por eso soy capaz de hacer eso. Bien. Creo que esto se está haciendo bastante largo. Esto se está haciendo bastante largo. Lo voy a romper aquí y solo continuaremos en el siguiente video. Gracias. 9. Definición de entidad 2: Todo bien. Gracias por volver a mí. Tenemos que avanzar muy rápido porque creo que el último video fue bastante largo. Yo era bastante largo, y como resultado, pero necesitábamos tocar algunas de las cosas clave a medida que avanzábamos en el camino porque sé podría estar usando algunos conceptos que tal vez podrían ser relativamente nuevos para algunas personas y solo necesitaba explicar un poco rápidamente para que el set de la película se pueda hacer personalmente. Todo bien. Entonces el siguiente modelo que necesitamos es el modelo de pago. Así que estar necesitando el modelo de pagos, que es el paquete de pago. Creo que entiendes ese concepto ahora, así que paquete de pago. Entonces, ¿cómo funciona eso de inmediato? Entonces lo que hacemos son los mismos conceptos. Vamos a crear nuestra entidad. Uh, ¿qué fue esto? Bien. Vamos a crear nuestra entidad llamada pagos. Así que llama a estos pagos, y como siempre, enviaré esto a este tipo, así que no solo eliges a estos tipos. Sí. Entonces, el pago no es una palabra clave de reserva, así que solo puedo eliminar esta. Simplemente elimino esto por completo. No necesito esto del todo. Esto simplemente debería estar bien. Todo bien. Despejen mis insumos. Entonces al mismo tiempo, sólo voy a resumir todavía esto porque todo va a ser igual. Todo bien. Genial. Eso lo tenemos. Entonces definamos rápidamente los otros campos. String o ID IDO serán necesarios aquí porque eso es básicamente lo que solía ser la otra tabla. Entonces tenemos la cantidad privada larga. Recuerda, nos estamos apegando a los montos, luego a la marca de tiempo privada privada. tiempo privada, marca de tiempo Java SQ, llamémoslo fechas de pago Yo sólo me estoy apegando a lo mismo. Puedes usar las fechas de botín, solo me estoy apegando a la marca de tiempo , la marca tiempo desde entonces instante ahora Entonces tenemos el estado de pago privado este es otro um con el que estamos trabajando. El estado del hombre, necesitamos saber. Ahora, o podría estar terminado, pero el pago no está terminado, podría haber intentado lo siento, el otro podría estar abierto, el pago no se completa. Pero el pago está terminado, el tuyo está terminado. Creo que entendemos ese concepto, eso es lo que estoy tratando de sacar aquí. Usemos esto y usamos un estado de pago que está incompleto para ser la base. Entonces una vez que esté terminado, hazlo completo. Hola crea nuestro estado de pago. Sabemos cómo va, esta misma cosa. Simplemente creamos nuestro tipo lo estoy restringiendo también al módulo o paquete ahora como entendemos que es Yo sólo voy a hacer esto. Crea las obras InNumT Voy a necesitar a Geta y al constructor laxa. Geta, no constructor laxa, por qué no necesitábamos Bien, ve a reunir insumos. Entonces queremos incompleto. Incompleto, coloco esto en datos con I. He ampliado esta área conceptual, luego terminado. C, y también tengo 1 mole. C, entonces puede llenar. Tan lleno. Pero el af. Todo bien. Entonces al parecer, necesitamos definir el código que estás usando. Quiero llamarlo código. Alr así que debería ser definitivo, lo sé No cambiando. Todo bien. Entonces este tipo estará feliz ahora. Una vez que lo traigas. Este tipo es feliz. Definamos el convertidor. Le expliqué el aria por qué uso un convertidor. El motivo es porque una vez más, impide que se analicen algunos de los temas que enumeraron realmente causas Así que tenga convertidor de estado de pago. Simplemente puedes colocar ambos en el mismo paquete, ¿verdad? Ese es el tipo y el tipo convertidor. Sólo me gusta separar las cosas. A veces podríamos tener proyectos en los que podrías tener se tipos están usando dentro del modelo que solo pueden expandirse así que quieres mantener el tipo en alguna parte, mantener el convertidor en alguna parte, ¿verdad? Eso es lo que estoy tratando de lograr aquí. Entonces como sabemos, estaremos implementando ahora, implementando el convertidor de atributos. No sé por qué este tipo compró a este tipo. Convertidor de atributo de atributo, luego cadena de estado de pago luego convierte, luego convierte y luego convertidor para aplicar true. Este tipo quiere la implementación, nosotros implementamos eso. Entonces básicamente entonces entonces uh esto entonces podemos simplemente básicamente verificar ¿qué estamos regresando? Podríamos mirar a través, para ver qué estamos convirtiendo a columna de base de datos, qué está entrando. Antes de ahora, creo que acabo de llegar. Creo que hice un OverQuurather que pasar por todo esto, básicamente podría haber dicho yo, dejémoslo en realidad no arruina Solo digo que hubo un overque que podría haber dicho simplemente si puedo dar la vuelta si en lugar de pasar por ese estado de código largo S si las estadísticas son nulas. No hay, entonces una nueva excepción de argumento ilegal, sis no encontrada. Va a ser nulo, entonces solo siéntate ese código. Y solo código. Esto va a funcionar, ¿verdad? Sólo voy a asegurar porque al parecer esto está disponible. Si no es nulo, es decir, existe y si existe, solo obtenemos el código. Eso sólo va a ser directo. Pero para esto, para que luego podamos venir aquí. Llamemos a este código. Entonces esto es si el código, gracias. Gracias son para completar. Entonces esto funciona entonces aquí, luego a mis matrices, el stream, luego mi estado de pago, los valores, luego filtrar. Si el estado estado obtener código que es igual ignora bueno. Entonces si encontramos que giramos el primero otro nosotros una excepción else. Una excepción. Entonces ahora mismo, no es que realmente sepamos que tal vez no solo hagamos referencia de referencia así que no necesitamos esto. Sí. Muy bien, cambiaremos esta excepción más adelante una vez que introduzcas nuestra excepción porque nuestra excepción sería usar modelos conceptuales Cardpo, ¿verdad Vamos a seguir adelante, ¿ verdad? Eso probablemente ya sea dejar el corte de la bolsa. Todo bien. Entonces creo que tenemos lo que necesitamos, necesitamos el repost, que sería una interfaz Entonces lo llamaremos pagos, pos tres. Entonces extenderá el código. Entonces como repositorios tres. Interesante. Todo bien. Entonces, ¿qué necesitamos? Creo que solo necesitas encontrar por Bien. Solo necesitas encontrar celeste opcional. Ahora mismo, solo para descubrir que estamos usando pagos GG. Por ID de pedido. ID de pedido. Encuentra pago por pedido, IT. No no no ordenar por. Ahora bien, esto es por ID de pedido. Sí, a eso me refiero. El ID de pedido es una cadena. O idea. Bien, entonces creo que eso es básico Vamos a correr rápidamente a través de nuestro repostre. Sí, vamos a repasar por este otro tipo. Bien, bien por oh, lo siento, G. Quiero ser consistente. Lo siento, creo que es descuido, solo que sean consistentes. Repost usando gets, este increíble consigue. Eventualmente. Oh, sí, me falta conseguir. Es increíble. Impresionante. Entonces estas son básicamente las entidades van a estar trabajando con nosotros este servidor Ant lo coloqué en mi nuevo stub y acaba de comprarlo Estos son básicamente con lo que vamos a estar trabajando y este debería ser el núcleo. El siguiente paso es crear un problema. Vamos a conseguir un problema. Vamos a traerlo. El tema se supone que debemos mapear esto de nuevo. Yo sólo lo llamaré entidades. Yo solo lo llamaré entidades Bs porque habrá otras entidades, entidades Bz, entidades Bs o entidades preliminares o deberían dejar de fumar Bien, Besentit está bien. Nosotros igual que esto aquí. Entonces solo copiaré esto, luego volveremos. Entonces solo comete esto en contra de esto. Todo bien. Commits. Entonces esto entonces simplemente se cierra. Todo bien. Bien, no hay problemas, no hay puesto secreto, luego recibe empujón Bien, entonces veamos que funciona. Interesante. Bien. Así que sí, así que hemos sido capaces de lograr eso. Hemos podido crear todas las entidades que necesitamos. Creo que podemos escoger del siguiente video para explicar o pasar por la siguiente fase. Gracias. 10. Limita el nivel de acceso a la repositry: Todo bien. Gracias por volver conmigo, esta es Z aquí otra vez. Todo bien. Entonces lo que vamos a estar haciendo en este segmento o en este video es que ahora necesitaríamos comenzar a limitar el modificador de acceso de nuestras interfaces. No queremos porque sabemos que vamos a estar obteniendo cosas de la base de datos, no queremos que las cosas empiecen a funcionar. No quiero que este módulo esté al tanto de lo que está pasando aquí. No quiero que este modelo esté al tanto de lo que está pasando aquí. Entonces lo que haría, es una muy rápida. Entonces me quito esto que es la esencia del modulith. Nos aseguramos que nadie sepa exactamente lo que está pasando aquí. Por lo que en realidad le hacemos cumplir que no tenga acceso a esto. Si se trata de la otra posidad, me quito esto. Ven al postulado de inventario, me mando a distancia esto. Todo bien. Todo bien. Aquí va a pasar lo mismo. Yo me quitaría esto, ¿verdad? Porque al final del día no deberías llamar a la interfaz desde otro lugar. Si necesitas algún servicio, probablemente quieras crear un servicio, luego cablear el servicio aquí. Pero básicamente, ese sería otro concepto del que hablar pronto, ¿verdad? Ahora vamos a tener algo llamado interfaces nombradas de algo que queremos exponer de un módulo a otro. Pero solo ten en cuenta en el momento en que empiezas a tener esa una tras otra, empezaste a introducir un poco de acoplamiento. Pero si hay que evitarlo, si puedes evitarlo, evita lo más posible. Pero ves en ese escenario, es algo que es muy necesario. Entonces yo un video muy rápido solo para mostrar que vamos a empezar a limitar las cosas, y como pueden ver, nuestro repositr ya no está disponible Entonces, para crear un maniquí, vamos a crear un servicio ficticio Vamos a crear un servicio ficticio y lo llamaré orden no comprometería esto No voy a cometer esto porque volveremos a hacer propiedad y más tarde. Voy a llamar a esto O servicio. Yo no comprometería esto ahora. Asumamos que es un servicio o un componente, cualquiera que sea un controlador Ahora trato de traer en una privada la final privada Inventure Procedimiento de inventario. ¿Ves? No lo encuentras procedimiento. Una pose. Todo bien. ¿Ves? Esto no se encuentra. ¿Y qué dice? Este tipo venture no es público en este tipo en particular no se me puede acceder desde el paquete lateral. Eso es exactamente lo que estaba tratando de lograr. Voy a quitar esto rápidamente. Simplemente rápidamente quiero demostrar que ya no va a ser accesible, y creo que ya está. Entonces podemos contin a partir del siguiente video. Empieza a limitar las cosas y mostrar que cada módulo está restringido tanto como sea posible antes de que ahora empecemos a profundizar para ver cómo exponemos las cosas y cómo luego comenzarán a hablar entre ellos. Todo bien. Gracias. 11. Prepoblar el inventario: Bien, chicos, gracias por volver conmigo. Todo bien. Entonces, ¿qué estará haciendo a partir de aquí, haciendo algunas implementaciones centrales En primer lugar, creo que menos cable esto en levantarse para que no lo dejemos expuesto. Así que voy a igual lo que he hecho antes. Voy a escoger el mensaje del comité que ya tengo abierto en mi otra pantalla. Entonces luego cerrar cerrar entonces ese es un cuatro. Eso es un cuatro, sí. Entonces lo encuentras ahí en ITu postu que voy a compartir, luego me sale push. Todo bien. Bien, entonces tenemos eso. Ahora lo siguiente con lo que estaremos tratando o estaremos trabajando en el escenario mirando es que probablemente tengamos que estén mirando una tienda o probablemente un servicio en línea que tenga un inventario en el que los clientes puedan comprar y una vez que realmente lo compren, inmediatamente pueden hacer otro e intentar reemplazar el pago. Por lo que el inventario debería existir. Entonces eso es exactamente lo que queremos hacer aquí. Queremos realmente pre-poblar el inventario, queremos poblar el Déjame cambiar algunas cosas alrededor de los bits. Vamos a introducir el perfil. Vamos a introducir un perfil. El perfil está activo. Solo vamos a dev porque no me gusta trabajar en D Bs directamente. No tiene ninguna implicación. Simplemente siento que ayuda a gente a entender más concepto sobre espolvorear. Por eso presento deliberadamente estas cosas. No es como si hiciera algo especial. Digo que cuando estás en entorno dev, tengo un dev donde repro, puedes tener producto, fraude, puedes tener fraude, basado en las propiedades que definiste, puedes tener configuración separada o valores o valores de la configuración para el para producción, así puedo entonces cablear las cosas Eso es que probablemente también cosas que quieras mantener en las propiedades de la aplicación. De lo contrario, probablemente manteniendo la base de datos, la conectamos. O usa alguna forma de propiedades de configuración para mapear cosas desde las propiedades de su aplicación. Entonces, cualquiera que funcione la primavera es tan dinámico, puedes hacer varias cosas Asiento puedes hacer algo de varias maneras, ¿ verdad? Bien, así que vamos a esto. Ninguno de los lugares es profundidad, entonces es profundidad, eso va a estar corriendo. Todo bien. Así que vamos a introducir algunas pocas propiedades. Introducir algunas propiedades. ¿Entonces copié esto? Sí. Entonces copio esto para que pueda simplemente mover todo aquí. Entonces quiero un resorte, primavera JPA, luego hibernar, amarillo Ahora, ya ves que esto es único. Ahora, estoy poniendo actualizaciones aquí. Esto básicamente pasaría por mi entis y los presionaría en la base de datos, con lo que está bastante familiarizado Entonces si para tener un prod, si estoy usando pro debería ser conocido. Eso se sabe o se elimina por completo, Porque no debe actualizarse. Lo que probablemente quieras hacer es una vez a pesar de que esto se ha trabajado ha sido probado en la prueba enroma UAT, luego escribes el guión, copias el guión, tomas el guión y ve y coloca dártelo a tu el guión y lo entregas a tu equipo de DBA y el equipo de DBA ejecuta tu guión y la aplicación de primavera puede a tu equipo de DBA y el equipo de DBA ejecuta tu guión y la aplicación de primavera aplicación Esa es la situación ideal. Así es como corres o entras en producción. No usas objetos en producción porque este tipo puede arruinar mucho las cosas. Uno de mis superiores con los que he trabajado mientras en realidad trabajaba en alguna compañía ha dirigido esto antes, y de hecho, es solo un caso de clic He tenido a alguien que usó guiones antes y estoy seguro de que sabes lo que esto haría. Esto destruiría el esquema. Estaba desordenado. Estaba muy desordenado. Yo sólo quería colocarlo ahí algunas cosas separando. Ahora estar ejecutando un guión. Y el script es así que usa SQL en modo knit. Entonces esto simplemente inicializa tu modo de punto de script. Se quiere colocarlo siempre por primera vez. Entonces otras veces nos lo quitamos, lo colocamos como nunca, ¿ verdad? ¿Qué más? Creo que esto debería ser. Después para traer el guión. Entonces esto es voy a poner todos los disponibles. Todo esto estará disponible en la sección de recursos. De hecho voy a etiquetar eso para que podamos realmente tener acceso a él. Entonces SQ Todo bien. Entonces voy a estar cargando el inventario. Este es el inventario. Este inventario. Recuerda lo que tenemos en nuestro inventario si solo coloco esto lado a lado. Lo coloco uno al lado del otro. Ves esto la descripción, el nombre, la descripción, el precio. El otro aquí no importa. Yo sólo pego esto, ¿verdad? Entonces así es exactamente como se ve. Entonces yo solo insertando algunos datos en él. Eso es básicamente. Así que bien. Veamos cómo funciona esto. Creo que soy sup. Debido a que estoy ejecutando los guiones, esto podría querer reproducirse de inmediato. Se supone que debo diferir la inicialización. Lo que eso significa es que debo permitir que las tablas se creen antes que nada, antes de que intente evaluar o ejecutar los scripts. Esto también es muy importante. Definamos la inicialización, pongámosla en true. Esto permitirá crear las tablas , mostrar, todo está bien antes de que luego intente ejecutar los scripts. ¿Mi base de datos está arriba? Sí, debería aparecer porque tengo mi docker abierto y una vez que ejecuto la aplicación, recuerda que discutimos docker componer para entrar y sacarlo a Todo bien. Entonces puedes ir por esa ruta, pero voy a sumar si no quiero una vez que bajemos esto, todavía quiero observar los datos. Entonces vamos al archivo de redacción de Docker y vamos a sacar esto a colación. Así que déjame sacar esto a colación. Entonces, una vez que realmente ejecutas la aplicación o la derribas, no tenemos un caso el que se acerque, está bajando. No, no, eso no sucedería físicamente. La dejo se quedó levantada una vez que en realidad la manejas desde aquí. Todo bien. Pero, sí. Creo que también quiero mencionar para aquellos que no usan Intelligltimate, por favor, puedes usar cualquier otro cliente que tengas acceso para realmente hacer Puedes usar PG admin, ¿verdad? Esto es simplemente conveniente porque todo está en un solo lugar y no me gustaría traerte demasiadas herramientas a la pantalla. Así que estoy intentando en lo posible limitar el número de herramientas que estoy usando. Es por eso que estoy usando todas las características que Intellig muestra todo bien desde la redacción de Docker que vi el servicio Docker al que realmente puedo tener acceso aquí para ver los registros, que usamos en debuggin sección anterior cuando realmente enfrentamos un error, uh en la función de base de datos, que realmente tenemos la función de base que Intellig muestra todo bien desde la redacción de Docker que vi el servicio Docker al que realmente puedo tener acceso aquí para ver los registros, que usamos en debuggin sección anterior cuando realmente enfrentamos un error, uh en la función de base de datos, que realmente tenemos aquí. No soy la función de base de datos. Probablemente no lo persistiera. Sigamos adelante y hagamos eso porque aquí hay una función de base de datos. No lo mencioné. Hay una función de base de datos. Llamemos a esto modular cosa esta MLF modulit court. Simplemente puede agregar la función de base de datos. Sí, es mi anfitrión local. El usuario, este es el usuario aquí. El usuario es ModulitPars es Modults. Entonces ya sé lo que es. Módulo Modult Teniente Sí, mi base de datos es lo que brota en esa commo primavera en esos commodls Bien, entonces esto funciona. Así que vamos a probarlo. Vamos a probarlo. Está conectado. A ver. Impresionante. Entonces esto conecta correctamente. Así que vamos a aplicar entonces bien. Todo bien. Tenemos módulos parece que no hay mesa en él en este momento. Es por eso que luego ejecutamos esto. Vamos a ejecutar esto. Espero que esto se conecte a mi tabla de inventario. Ahora no deberíamos ver ningún RFC, en realidad resve vamos a Ya ves, recogí mi perfil Recoge mi perfil aquí, cual es Dev, ¿verdad? El perfil notado es dev. Comenzó con éxito. Entonces vamos a refrescar esto. Guau. Tenemos mesas. JP ha entrado con la entidad para dejar algunas de las secuencias que en realidad agregamos. Esto le interesa. Esta interesada. Cosas buenas. Cosas buenas. Cosas buenas. Todo bien. Cosas buenas. Se agregan secuencias, acuerdan o se equiparan. Las secuencias para cada una de las tablas para ejecutar. Eso es lo que hace la identidad, que es este tipo, su identidad. Colocar automáticamente una secuencia y que va a estar usando. Podrías estar preguntando, ¿por qué no usas secuencia? Recomiendo encarecidamente usar secuencia. Hay una secuencia. El tipo de secuencia, fuertemente comunión a secuencia que la utilizas para la base de datos Oracle, ¿verdad? Base de datos Oracle, no use identidad. Fuerte puedes leerlo. Te aconsejo encarecidamente que uses la secuencia y no uses Auto. Auto no está bien, ¿ verdad? No use Auto. Para la identidad, la identidad funciona para prácticamente todas las bases de datos, pero todas las bases de datos relacionales, usemos todas las bases de datos relacionales Pero para Oracle, por favor use la secuencia. Todo bien. Entonces creo que no tuvimos ningún error. Así que vamos a revisar el inventario. Impresionante. Entonces esto fue prepoblado Esto fue pre poblado. Esto lo hemos logrado con éxito. Hemos podido llenar previamente los datos, hemos creado las tablas Entonces, ¿qué es la publicación de eventos? ¿De nosotros vino este tipo? Llegaremos a eso en un poco, llegamos a eso en un poco. Explique dónde llega a ser realmente la publicación de eventos . Pero volvamos. Vemos esto entrando. Vemos esto saliendo. Vemos la base de datos. Entonces ahora quiero cambiar esto a nunca porque ya no estamos haciendo nada desde aquí. Si conseguimos el camino lo necesitamos solo conectamos esto también, ¿ verdad? Alambre esto también. Como si estuviéramos en modo de prueba, así que podemos romper ins, podemos traer esto en persianas realmente funcionan correctamente. Bien. Entonces un breve breve sobre qué es la publicación del evento. Ahora, si va a través de la documentación en el módulo de resorte, se supone que los módulos se comunican típicamente entre sí con eventos y los eventos pueden fallar. Los eventos pueden fallar. Cuando fallan, módulo de resorte te ayuda a guardar tu evento en esta mesa Al guardar esta tabla, puedes volver a esta tabla, así que inicializamos o enviamos probablemente tuviste un servicio fallido o por alguna razón quieres corregir el error o tal vez el servicio que se suponía que iba a estar arriba está abajo ya está arriba, puedes reintentar esto realmente pasará Hay otra propiedad que se usa, pero creo que solo estoy saltando el arma aquí, perdón hay otra propiedad aquí El inmueble se llama mood LiF. Es, no, no, es Mod Lif. Creo que publicamos, publicamos evento destacado y empezamos. Creo que esto básicamente debería usarse para el modo de prueba porque puedes estar iniciando cosas en producción, ¿verdad? No, o tal vez cuando solo estás desplegando. Así que siempre querría poner esto en falso, ¿verdad? Sólo que siempre quiero poner esto en falso. Entonces esto ni siquiera debería suceder en absoluto. Esto no debería suceder. Entonces ya ves, el valor predeterminado es verdadero. Lo sentimos, el valor predeterminado es falso. Entonces el significado realmente no importa si me dit in. Realmente no importa si agrego, así que puedo simplemente moverlo todo junto. Yo sólo quiero mostrar esto. Llegaremos a eventos. Llegaremos a los eventos, ¿ verdad? Porque ese es el modelo de transferencia central o el modo de comunicación entre los modelos, ¿verdad? Pero por ahora, vamos a mirarlo desde el lado positivo. Hemos podido crear nuestras tablas, y y somos capaces de inicializar y podemos ver nuestros datos, que mostré un poco debajo creo que eso funciona Nosotros para poblar nuestra verdura. Todo bien. Gracias, chicos. Nos vemos en el siguiente video. 12. Prueba de integración 1: Bien, chicos, muchas gracias por volver conmigo. Todo bien. Entonces antes de continuar, vamos a simplemente rápidamente vamos a agregar rápidamente este Github. Acabo de poblar inventario. Entonces voy a cerrar el número cinco, ¿verdad? Entonces empujo y eso será como referencia. Así que solo toma esto paso a paso. Ahora bien, lo que quiero hacer en este video en particular es comenzar a configurar las pruebas base. La prueba base estaría necesitando o requiriendo que la prueba base estaría necesitando o requiriendo para los modelos, necesitamos realmente de la prueba base. Entonces con eso en mente, vamos a entrar aquí, inventario, At Enter o como quieras de cualquier manera que sepas yo uso tenter y para sacar a colación a este tipo Entonces no quiero ninguno de los métodos. Yo sólo quiero hacer esto. Después configurarlo en prueba. Entonces previo a la prueba. Si haces esto, es, la prueba. Ahora que tenemos el inventario, creo que quiero etiquetarlo inventario, llamémoslo prueba de integración porque hace más de eso. Solo refractor con nombre para integración de inventario. Pruebas de integración. Un par de personas me han preguntado personalmente qué diferencia hay entre la prueba unitaria, prueba funcional y la integración. Esos son los tres que tenemos, ¿verdad? Estas son las llamadas co que tenemos. prueba unitaria es la unidad más pequeña, el componente más pequeño de las pruebas que realmente puedes realizar. Tomemos por ejemplo, si vas a estar probando este repositorio de inventario, la prueba de cada parte. Si tienes varios métodos, estás probando cada uno de ahora, va más allá de eso. Si escribiste un método o una lógica, escribiste un método, una lógica, el has y IL o texto num. Hay que probar cada um casos. Eso es prueba unitaria. Va a la misma lista, maneja todos los escenarios de casos de uso. Eso es prueba unitaria. Pruebas funcionales en sí, prueba funcional va un poco más alto que eso. Las pruebas unitarias son relativamente muy rápidas como las más rápidas, pero las pruebas funcionales son más lentas que unitarias porque prueba funcional de la palabra no significa que pruebes funciones. Creo que la gente confunde mucho esto. Piensan que la prueba funcional significa que estás probando funciones, lo cual no es cierto. Prueba funcional, en realidad, lo que hace es prueba funcional es. Puedes tener estoy seguro de que sabes que podrías escribir un método en particular. Estás tratando de lograr algo en un método en particular y dividirlo en varias funciones, o varios métodos. Entonces puedes llamar a prueba funcional testing una función, no. Más bien, tienes un componente particular en el sistema que estás tratando de probar para ver si funciona como debería, ¿verdad? Que los componentes pueden atravesar varias líneas de código que están en diferentes funciones. Probarlos juntos para que tengas pruebas funcionales. Luego rápidamente prueba de integración y de extremo a extremo. Lo golpeas desde tu controlador. Desde su controlador, va a su servicio desde un servidor va a la base de datos. Si tiene algunos servicios terceros llamados servicios de terceros, todo regresa al controlador. Entonces una prueba de extremo a extremo es un servicio de riesgo. Espero que quede claro. Todo bien. Entonces, para pruebas de integración o para pruebas en modulados de espín, Spin Modules introduce una asignación llamada pruebas de modelo de aplicación Prueba de módulo de aplicación. Prueba de módulo de aplicación, que es una prueba de modo de aplicación de arte. Por lo que introducen esto. Entonces esto por defecto, comprobará porque esto fue creado a partir de este paquete. Miraría hacia arriba para ver este paquete y asegurarse de que esto no rompa el resorte modula el flujo o las reglas que se han establecido y asegurarse de que no se están inyectando cosas en las que no se deben inyectar Si lo haces, fallará. Creo que un ejemplo práctico será lo que sea. Entonces pongamos aquí algo para que se ejecute un escenario. Entonces solo lo llamaré el verificador. Evitemos el módulo de verificación. Módulo, ¿verdad? Todo bien. Entonces con esto en mente, vamos a darle a esto y veamos qué pasa. Entonces empezamos a entender el concepto. Bien, entonces tenemos esto corriendo corriendo, corriendo corriendo. Esto falló, ¿por qué falló? Puedo decir una serie de razones por las que creo que debería haber fallado, dice Context loader no está disponible. Bajemos. Fuente de datos. Esta es una razón importante por la que falla. Recuerden que estamos cableados en la fuente de datos aquí y como hemos cableado en la fuente de datos, que es de la composición de Docker, este tipo no lo sabe Este tipo no sabe nada. Lo que necesitamos para hacer la prueba no sabe sobre la composición de Docker que has configurado Lo que necesitamos para hacer una serie de cosas. Una serie de cosas que realmente necesitamos para conseguir esto en su lugar. En primer lugar, vayamos a la dependencia. Yendo a la dependencia, Docker compone. Comprobemos nuestra composición Docker. Ahora bien, esto es exacto, ¿verdad? Esto es exacto porque este alcance también tomaría en constreñación si vas por tiempo de ejecución, ¿verdad Pero lo siguiente, así que debes asegurarte de que esto es en realidad un tiempo de ejecución porque recuerda que primavera recuerda que M vn tiene varios alcances Algunos se limitan a probar, ¿verdad? Entonces estoy diciendo que el tiempo de ejecución debería ser lo que usas, entonces las pruebas también inhibirían de esto, ¿verdad? Primer bit. Luego, a continuación, vamos a crear nuestro archivo. Vamos a crear un forul de recursos así crea un salsas da. Llamemos a esto salsas. Creo que eso debería ser directamente sobre la jala jala. Con salsas. ¿Qué hago otra vez? No, no lo es. L acaba de tomar esta estructura de nuevo. A veces me confundo con esto. Todo bien. Bien, O principal, ¿verdad? Entonces este Java, estas pruebas. Entonces salsa principal, debería estar debajo de este tipo debajo de este tipo. Entonces, ¿cómo se llama? Dietética ¿Dietética? Salsas, increíbles. Impresionante. Gracias. Gracias. Bien, tenemos eso. Entonces dentro de él, vamos a crear una aplicación especial Yermo file que sería utilizada por nuestro contexto de prueba Esto se puede hacer de varias maneras. Probablemente escriba un archivo de propiedades, luego use una fuente de propiedad de prueba para cargarlo realmente. Eso también funciona. Esto es sólo otra salida. Entonces solo estoy usando un estilo particular aquí. Por lo tanto, tenga en cuenta que puede usar varios estilos para que esto funcione correctamente. Yo uso aplicación o Yarmo. Mamá usa la prueba de aplicación allí, pero si usa la aplicación nip en la prueba ahora puede iniciar las propiedades de la aplicación, una fuente de propiedad de prueba para que pueda cablear en ese archivo. Pero esto debería ser auto cargado. Ahora bien, le digo esto a la gente tanto como sea posible, si estás usando botes de primavera, apégate a la configuración automática. En el momento en que intentas cambiar la configuración base, o debería hacerlo por dos razones. ¿Debo decir uno? Si tienes una necesidad especial que la configuración automática del resorte no está manejando, pero siempre trata de saber cómo romper cosas. Número. Sin embargo, si ese no es el caso, por favor use la base, use la configuración automática. Deja de agregar propiedades que creas y quieres que se haga de una manera especial. Lo que estás haciendo es que estás rompiendo el flujo de configuración automática y eso podría llevar a que si no estás realmente familiarizado con el swing, comienzas a crear errores necesarios que podrían llevarte horas o días depurar solo porque no usaste la configuración automática. Sepa que hay una clara diferencia en botas de primavera y primavera, ¿verdad? Si no es primavera, tienes que cablearlo algo así que si las botas de primavera, estas son auto cableadas para ti, ¿verdad? Así que por favor tenlo en cuenta. Bien. Entonces para esto, ya tendría este beel laico en alguna parte, así que sólo voy a caminar por ahí para que no lo haga no me inclino ni dulce un de diezmos Entonces esto es lo que usamos. Recuerdo datos esto es primavera primavera eso es módulo él. Ahora bien, no es un buen caso para empezar a exponer tu contraseña, incluso en el gato de prueba porque esto va a entrar en el weapositore, Esta prueba va así que no quieres romper las cosas ¿Cómo manejas esto? Todo bien. La buena noticia es que cuando estás usando Intelligen por favor, no estoy vendiendo de ninguna manera Sé que he estado mencionando muchas cosas sobre intelligen pero aquí no estoy vendiendo intelligen Solo digo que intelligen es una herramienta bastante buena, Lo que puedo hacer es ir al centro comercial más y luego ejecutar la configuración. Entonces en esta parte aquí, todos los módulos en módulo de resorte costo, entonces quiero establecer alguna variable de entorno. Quiero establecer una variable de entorno. Primero uno es más dolt, luego subrayar el nombre de usuario, luego esto debe establecerse en Módulo luego subrayar el nombre de usuario, luego esto debe establecerse en Módulo. Ese soy yo. Módulo. Entonces ya ves, puedo cambiarlo de esta manera. Después el otro más dual lif. Lo siento. Nombre de usuario. Sin usuario Bin. Nombre de usuario. Este subrayado PASSW también modulf Significa los medios de configuración en ese sistema. Nadie en la acción de caminar sabe exactamente lo que está sucediendo. Te doy una posición, quiero decir sabe exactamente lo que está pasando. Una vez que realmente guardes esto Bien, así que hemos agregado esto en. Creo que dijo. Vamos a ejecutar esto de nuevo. Si agregué esto correctamente, esto debería funcionar. Si no lo agregué correctamente, debería fallar. Eso significa que no deberías ver la propiedad. Ejecutemos esto de nuevo y veamos cómo funciona esto. A ver. No expliqué esto así que vamos a permitir entonces voy a explicar lo que hice aquí. Bien. No veo. Bien, ya ves, mi prueba pasó. ¿Qué puse aquí? Recuerda que estamos usando Docker Compose. Hay una propiedad llamada Spring Docker Compose Saltar en prueba falsa decir, quiero que uses la misma propiedad que estás usando mi composición Docker, ¿verdad Entonces, significa que deberías limar a los cables en mí mismo, y esto realmente debería funcionar, ¿verdad? Así que no te lo saltas para que sea capaz de usarlo. Entonces uno podría preguntarse ¿qué pasa si desactivamos esto? Se puede desactivar . Vamos a armarlo y a ver si funciona, ¿no? Seria. Vamos a dirigir a este tipo. Vamos porque tenemos discapacidad, así que vamos a ver. Esto permite que sí, lo hace. Estoy seguro de que ahora entendemos lo esencial. Porque esto ahora usa lo que tenemos en nuestra composición Docker. ¿Qué le decimos a la baja de esto? Cuando comencemos a pasar a producción y queremos ejecutar nuestra prueba automatizada, no se encontrará Docker componer Por eso a esto le importa. Dejemos esto como referencia. Te he enseñado esto funciona y esto también funciona, ¿verdad? Esta obra también funciona. A menos que esto funcione. Digamos que esto funciona. Entonces solo usando ambos, esto debería encajar. Yo escribí, sprink. Eso es ron esto otra vez. A ver. ¿Por qué fallamos esto? Podemos decir incapaz de crear servicio secuestrado, incapaz de detectar datos está esperando este mismo error que enfrentamos, La razón por la que tuvimos este error fue porque recuerda que comprobamos aquí, el mismo error que teníamos aquí. Creo que la base de datos dice que el nombre de usuario no existe. Está buscando contraseña. Contraseña, estos son el campo para esto, así que no lo está encontrando. No es encontrarla. Lo que puedo hacer, vamos a comprobar la configuración de este tipo. Una configuración para este tipo. Unidades J para toda la unidad J. Así que vamos a este tipo. Lo que es mi entorno que vemos falta. Falta el ambiente. Para esta guía, está funcionando todo en primavera móduli costo ¿Qué obtuve? Me dif nombre de usuario, ModultPassword. Entonces el hablar. El habla va a mi entrada. Veamos cómo funciona esto. Veamos cómo funciona esto. Aplica este Módulo. Girar nombre del módulo, Módulo, eliminar P SSA, W, ¿verdad? Bien, así que esto es tan bueno. Nombre valorado Mt. También lo puedes encontrar dentro de estas partes. Entonces, debería haber Nets ir. Esto es de los sistemas del sistema. Está bien Modi Veamos. Bien, vamos a correr el respiradero. ¿Cuál estoy corriendo? Oh, lo siento. ¿Qué estoy corriendo? ¿Estoy corriendo? Estaba bien para dirigir esto. ¿Estaba corriendo por todo? Eso definitivamente caería. L C. Bien. Pude sacarlo a colación. Todo bien. Ver. Todo bien. Déjame pausar rápidamente este video. Vamos rápido. Déjame depurar esto para que no esperemos sin cesar a decir exactamente cuál es el problema cuando no estamos usando esto y volveré en 8 minutos Todo bien. Gracias. Bien, chicos. Gracias. Estoy de vuelta. Entonces repasando la documentación y así estas son las partes que necesitaba para presumir realmente. Entonces esto es lo que teníamos antes de ahora. Así que teníamos antes de ahora. Nosotros solo tenemos la carga de contexto, ¿verdad? Entonces para la aplicación base, tienes que colocar realmente esto en donde coloques en el nombre de la clase que tiene una oración de bota de resorte, luego haces clic, realmente verifiques. Entonces Spring Modulate tiene una anotación especial llamada At application Module test que necesitas usar Ahora bien, si entra en la aplicación Prueba de módulo, verías que contiene prueba springbo Contiene prueba springbo y también contiene algunos detalles adicionales que realmente se utilizan para la prueba del módulo ¿Ves? Por ejemplo, el módulo prueba la configuración automática. Este es uno que podemos usar físicamente. Esto se recomienda que utilicemos cuando realmente escribimos pruebas en un Modult de primavera Lo mismo que hice aquí. Ahora bien, ¿qué hace? Todo bien. Este video ya es largo. Así que volveré en el siguiente video para explicar algunos de los detalles, luego creamos realmente creamos las pruebas de otros módulos. Muy bien, gracias. 13. Prueba de integración 2: Todo bien. Gracias chicos por volver conmigo. Todo bien. Esto es Z aquí. Bien, así que empezamos con esto para mostrar realmente el caso de prueba. ¿Cuáles son los criterios que necesitas para realmente las cosas que necesitas cumplir? Número uno, en la aplicación a Yamo por favor aplique el Yamo para su prueba De hecho estoy a favor de que usemos la configuración automática. Cuando hacemos eso, tenemos dos opciones. O bien podemos comentar esto para usar la composición de Docker, entonces no nos saltamos en la prueba, pongo aquí la composición de Spring Docker, Spring Docker, así que se supone que no debo comentar Spring Docker componer, mantener en prueba falso. Si hacemos esto, es usar propiedades en una composición docker. Eso lo mostré en el último video. Sin embargo, si quieres usar esto, también puedes usar esto. También podemos usar la fuente de datos directamente. Entonces, el que prefiéramos realmente funciona. De hecho pude demostrar esto de la misma manera, en el último video. Así que voy a levantar esto por ahora. Yo solo viviré esto por ahora. El siguiente paso que debemos llevar a cabo es este para nuestra prueba de módulo Bs para la prueba del módulo Bs, esa es la prueba que está comprobando esto. Recuerda, esto es basado en aplicaciones. Esto es esto es basado en módulos. Esto está favoreciendo este modelo de invención, este paquete. Esto está favoreciendo a la base, está mirando a la base Esta prueba está mirando a la base. Para que realmente escribas esto, verías que así es como tienes que modelar. Hay que obtener los módulos de aplicación de esta clase, luego verificar. Entonces lo siguiente que debes hacer, necesitas cablear la configuración. Vas a más el bug, modifyn configuración cuando lo haces son la variable de entorno Recuerda que estoy usando la variable de entorno aquí. Este entorno, si piensas que es demasiado trabajo, creo que eso es demasiado trabajo básicamente, básicamente puedes simplemente quitar esto y usar la prueba de composición de Docker, eso solo favorecería los otros chicos Docker la prueba de composición simplemente funcionará Creo que eso está claro. Usa esto usando esto, debes agregar a este chico. O no lo eres, usa este otro tipo y eso realmente debería funcionar, no tienes que seguir agregando el entorno vaable esos tipos Una vez que hagas eso, ahora hay una cosa especial que quiero mostrarte. Hagamos esta prueba a menos que sea algo genial. Todo bien. Entonces ya ves que esto está hecho. Ahora, por favor, échale un buen vistazo a esto. Bien, perdón, esto aún no está hecho. ¿Qué hice mal otra vez? Bien, entonces esto es ver el error. Entonces incapaz de conectarlo. Oh, mismo error mal, es divertido mal. Entonces esto es vamos a comprobar el error. Pensé que esto ya estaba arreglado. MadldPassW. Lideró esto. Sí, esto está arreglado. Esto ya está arreglado. ¿Por qué no lo recoge? De este tipo. A ver. Vuelvo a fastidiar algo. Oh, bien. Impresionante. Impresionante. Lo recojo de aquí. ¿Está distinguiendo el. Eso es gracioso. Se distingue la prueba. Necesito correr desde arriba en lugar de esto. Nunca me di cuenta de eso. Entonces ves a Kass diferente. Entonces este es uno, este es otro. Veo perder este concurso. Necesito agregar la configuración para esto también. Supongo, con eso, creo que simplemente me apegaría a mi palo justo a este tipo. No tengo que molestarme con toda la configuración cada vez Se está poniendo molesto, de verdad. Volvamos aquí. Vamos a ejecutar esto de nuevo. Estoy huyendo de este lugar sin que esto no tenga variable de entorno. Entonces huyamos de este tipo. Bien. Entonces mira esto funciona. Impresionante. Entonces esto funciona. Entonces supongo que ese es el punto. Entonces solo me di cuenta de que cada uno de ellos tiene una configuración diferente. Eso es bastante gracioso. Bueno, creo que es genial en cierto modo porque cada uno de ellos podría estar usando diferentes configuraciones. Así que varios podrían ser de configuración diferente. Bien, así que esto es lo que quería mostrarnos. Entonces, miremos esto. Veamos esto. Entonces ves que hay un nombre lógico. Así es como se expresa, es capaz de encontrar de dónde estás huyendo. El nombre lógico es verificar este paquete, claro, es verificar el paquete en el que se encuentra. Es por eso que en realidad pude conseguir este paquete de mercancías. Luego el paquete base, también identificó el paquete base desde donde se está ejecutando. Se comprueba que los módulos directos. Ver, no hay dependencias y porque hay dependencias, es por eso que se ejecuta. Llegaremos a un caso en el que estamos cableando cosas a otro módulo de un modo a otro modelo, inspeccionaríamos esto también y vemos la diferencia. Vamos a estar viendo que la dependencia es en realidad label de. El único ser que se identifica aquí es esta clase de aplicación al curso de primavera. Espero que quede claro. Podemos mirarlo fácilmente. Mientras ejecutas la prueba cuando tienes errores, a veces me salen errores que tienes algunas dependencias que no atendiste Es necesario verificar qué dependencias. Los puedes encontrar fácilmente aquí. Creo que lo he podido explicar. Antes de terminar rápidamente este video, vamos a conectarlo rápidamente. Hacer para inventario, hagamos lo que quiero decir, hagamos por orden. Hagamos por orden. Entonces vamos por orden, de la misma manera. Entonces solo se necesita lo mismo toma el mismo tipo que este. Entonces solo para verificarlo solo verificando el modelo, ¿no? Entonces esta es una prueba de modelo de aplicación. Yo diría, prefiero usar config, inventar configuración Porque aquí es donde se tiene que contener alldi. Hagamos por orden. Aquí es donde el inventario. Hagamos por orden. ¿Cómo es que esto es Liber debería ser jurar debería ser esta influencia Tan bueno para esto. Prueba Lq Vamos a llamarlo a la prueba de inequidad. Mismo módulo de aplicación pruebas, luego pruebas, llamarlo fa. Todo bien. Con eso hecho, encendamos todo. Simplemente correré de forma aislada para otra integración antes que luego pasemos a la otra y luego ejecutemos todo sobre la marcha. Pero ya no necesito agregar la variable de entorno. El motivo es que voy a agregar el otro usando bin que podemos ver eso. Ves esto fue capaz de encontrar los contenedores dentro de este. ¿Ves? Esto es simplemente increíble. Esto es increíble. Es capaz de ver lo que realmente sucede. Yo iba a localizar béisbol lo mismo va a pasar por esto. Pero vamos a ejecutar todo a la vez. Asegurémonos de que todo funcione con precisión. Todo bien. Así que recuerda, ya no estamos usando esto. Si usamos esto vamos a querer inyectar inyectar las propiedades ambientales, pero las variables ambientales. Pero para esto, solo podemos usar esto directamente, así que solo lo pones arriba. Pero vamos a la producción, al parecer tenemos que usar esto. Entonces probablemente tenemos en nuestro entorno. Espero que sepan que hay en marcha para agregar ambiente. Entonces lo que puedo hacer es ir a mis ventanas ir a mis ventanas, crear un ambiente. Una vez que creas un entorno, comienza Inteligente para elegirlo desde el inicio, entonces deberías poder cargarlo realmente. No tengo que hacer el en memoria para Intelligen o la variable de entorno Esa es otra forma de hacerlo, no hay que hacer más configuración. Para aquellos que no usan no quiero usar Da combos y la configuración de ¿cómo uso el entorno viable? Así que recoge cada prueba. Simplemente vaya a la variable de entorno para la variable ya sea para su Linux o su MAC, luego vaya a la Creo que debería estar bajo perfil o Bash LC, luego agregue esas variables de entorno ahí, luego muestre el hiper sistema para que realmente se retengan una vez que realmente reinicie su Entonces una vez que mires esto, esto debería funcionar con precisión. Se pueden ver obras. Esto funciona. He creado toda la integración base para este cuatro este video, solo agreguemos solo agreguemos un problema. Yo solo agrego un número. Entonces solo traeré esto solo agrega un problema. Entonces solo llámalo creado Bs inventario. No, no, Bs. Se creó la integración Bs que hice para decir prueba de integración. Todo bien. Espero haber creado para pagos, aunque. No estoy diciendo pagos aquí. Solo somos un crédito de cliente por pagos. Entonces hagámoslo por los pagos, también. Entonces pagos. Entonces integración de pagos. Lo mismo que la prueba de modo aplicación, solo haz esto muy rápido, luego verifica porque este video ya es muy largo. A mí me gusta mantenerlo tiros para que siempre podamos romper en cualquier momento y volver. Yo sólo dirijo esto una vez más. Yo dirijo éste más. Por favor, sea muy rápido. Quiero hacer esperar a mi público. Bien, así que vamos aquí está hecho. Esto está hecho, esto hecho. T está hecho. Déjame copiar esto. Entonces solo persisten de inmediato. Gracias, mi público, y hemos podido persistir con éxito. Bien. La integración y todo funciona con precisión. Así que vamos a cerrar esto. Cierra esto. Bien. Entonces su empuje. Bien. Y los hábitos. Deberías cerrar. Auto automático. Todo bien. Gracias, chicos. Nos vemos en el siguiente video. 14. Prueba de integración 3: Hola, chicos. Gracias por volver a mí. Esto es Z aquí. Todo bien. Vamos a romper cosas. Vamos a romper cosas. Esa es toda la esencia del desarrollo. Deberíamos poder romper cosas. Ahora, recuerden que ni siquiera podemos inyectar esto, hagámoslo ahora. Hagamos de esto un público así al revés, solo quiero mostrarles cómo funciona esto, ¿verdad? Vamos a crear otro servicio porque es bueno que veas cómo funcionan las cosas cuando cometes el error y las cosas se rompen. Me quitaré esto. Voy a etiquetar esto como un servicio al servicio. Entonces vamos a traer lo privado. No, quiero el inventario. Quiero el repositorio de inventario. Viniendo aquí. Postulación eventual, entupost Vamos a conectarlo con el constructor de edad adquirido. Así que eso hará que sea una final, sólo una final aquí, ¿verdad? Solo consigue un método de tontería, ¿verdad? Solo consigue algún método de tonterías. Sólo llamémoslo una prueba de pausa pública. Sólo quieres romper la prueba. Prueba de rotura. Probablemente solo v. Prueba web acabo de llamar inventario, los datos solo llaman algo. Solo datos. Realmente no lo estoy usando. Sólo quiero ver cómo funciona. Yo sólo T datos. Esto no funcionaría, h. los datos son balnearios, solo déjalo así. Bien. Con esto a, vayamos al otro modo. Vamos a ejecutar esto. Veamos qué pasa. Bien, veamos qué pasa. Bien, eso se acerca. Base de datos conectada correctamente. ¿Pasa? No. ¿Por qué pasa eso? Vamos correctamente, no se pudo cargar el concurso de aplicaciones. ¿Ves? Error al crear este servicio hmm error al crear el otro servicio. ¿Por qué? Porque la dependencia insatisfecha es constructor especial, bla, bla, bla, bla, Lo que dice, esperaba al menos una viga que califique a los candidatos de cable automático, ¿verdad? Entonces, si miras esto, ya lo he conectado, ¿verdad? Pero este tipo está archivando sasicamente porque no lo permite No lo permite. Entonces eso es algo bueno. Entonces ningún rayo calificador en realidad está diciendo esperado ser que califique a los candidatos de cable automático porque esto no está permitido Ese es el punto. Esto no está permitido. No le permitirá seguir presentando. Vayamos también a la clase base. Tratemos de ejecutar esto. Este tipo dirige la clase base. Entonces hagámoslo. Veamos qué pasa también. Se supone que tienes que cargar en la mayoría de estos tipos y veamos qué pasa. Porque corre, porque este tipo corre aislado. Pero para este tipo, ves que falla. Entonces ves todos nuestros pases de casos de prueba excepto esto, que falla. Cada uno de ellos va a seguir rompiendo porque este tipo se romperá diciendo: Oye, no te conozco. No te conozco. No me has definido nada de aislamiento. ¿Quién eres exactamente y por qué debería permitirte pasar? Entonces ese es el caso, ¿verdad? Reservamos sobre esto, así que sólo voy a volver y moverlo. Así que necesitaba mostrarles esto para que sean muy conscientes de que no pueden simplemente mover las cosas, ¿verdad? No se puede simplemente mover las cosas. Una vez que lo muevas alguien podría decir, ¿y si entro aquí? Y si entro en la otra integración, ¿verdad? Yo hice la otra integración, eso es lo que se siente. ¿Estoy en lo correcto? ¿Cuál es la ventana de ejecución? Otros exegones Y si hago ese otro exegon ¿Y si solo auto cable? Yo digo, y si solo auto wire como auto wire y yo solo auto wire service. Otro servicio aquí. Yo digo, probablemente aquí. ¿Qué va a pasar? ¿ No se supone que esto funcione? Bien. Vamos a probarlo. A ver. Porque es bueno romper cosas, así que tenemos una buena idea de cómo funcionan las cosas, entonces volveremos. Puedes ver que aún falla. Sigue fallando porque no lo está viendo, no lo está permitiendo. En el número, esto debería funcionar. Esto debería funcionar. Pero ahora se está rompiendo porque esto sería burlado Esto básicamente es inyectarlo, pero no está funcionando. Eso es por una razón específica, que luego vamos a tocar más adelante en este curso. Yo lo mostraría. Ahora mismo, no se supone que sea el otro, pero necesitaba romper el stop para que podamos entender rápidamente cómo funciona esto. Entonces nos daría una buena idea que solo podemos ir a elegir cosas en módulos modernos e inyectarlo en un modelo pensando, eso debería estar bien. No, no está bien. Debe seguir algún conjunto de reglas si desea inyectar un parámetro en particular o un particular estado en otro servicio. Eso es básicamente vamos a asegurar que prueba a una persona, luego traemos este video para cerrar. Entonces en realidad tocaríamos algunas cosas más geniales en el siguiente video. Toca algunas cosas buenas en el siguiente video. A ver. Pagos, bueno. Inventario, bueno. Entonces la base, bueno. Entonces el otro inventario, bueno. Entonces esto es bueno. Gracias chicos. Nos vemos en el siguiente video. 15. Interfaz con nombre: Todo bien. una vez más por acompañarme. Esto es Z aquí. Sí. Entonces, ahora mismo, lo que estamos haciendo es que realmente queremos exponer un servicio del inventario al otro. Todo bien. Pensemos en ello de esta manera. En realidad vas a la tienda, valoras los inventarios, eliges las cosas que quieres que pretendes comprar Una vez que tienes eso, al parecer eso es parte de tu pedido. Todo será enviado como parte de su pedido. Lo que estamos tratando de lograr ahora mismo es evaluar realmente el inventario a partir del pedido. Ahora recuerden, lo que tratamos de hacer es lo que intentamos hacer es asegurarnos de que cada uno de estos tipos esté estacionario, más como si en realidad estuvieran confinados dentro de cada modelo. Sin embargo, habrá escenarios en los que necesite acceder a un servicio dentro de un servicio. Entonces, ¿cómo se hace eso? En el último video te mostré vía prueba de integración que si acabas de cablear en el servicio, empiezas a conseguir escenarios, ¿verdad? La prueba empieza a fallar, diciendo que no estás cumpliendo Con lo que se espera, las reglas que se han fijado en la primavera modulan. Lo que tenemos que hacer, ahora hay una manera particular en la que necesitas hacer esto. Hay dos tipos de exposición que puedes hacer en hay tres tipos, básicamente. Se puede exponer un paquete completo. Se puede exponer un sub paquete. Hay diferentes maneras. Entonces puedes exponer que también puedes exponer también puedes tener también puedes tener un paquete o un modo que esté abierto a todos. Entonces esos tres tipos. Entonces el primer tipo del que hablaremos es una interfaz con nombre. Esa es la palabra. Se llama interfaz con nombre. Así que vamos a saltar rápidamente y vamos a ver cómo se desarrollará esto exactamente. Hago un poco de explicación, así que tenemos antecedentes. Entonces, ¿puedo saltar directamente al código y ver cómo se desarrollará esto? Bien, entonces para hacer esto mucho más para que podamos destacar esto, crearía un sub paquete llamado expuesto, ¿verdad? Voy a llamar a esto exponer, ¿verdad? Entonces esto es solo con fines de demostración, veremos exactamente cuando veamos, oh, cuál fue expuesto, Oh, esta es la guía que me expusieron, ¿verdad? Entonces dentro de esto, entonces estaría creando la interfaz que estaríamos exponiendo. Voy a llamar a este servicio de inventario. El servicio de inventario estará exponiendo. Entonces esto es lo que vamos a exponer, ¿verdad? Estaré exponiendo esto, pero no expondría la implementación. Sólo expondría este servicio, esta interfaz en sí misma, y eso es lo que haríamos. Eso es básicamente lo que vamos a hacer. Entonces, ¿qué pasa con la implementación? Todo bien. Entonces con esto, antes que nada, vamos a etiquetar la firma. Entonces tendríamos algo llamado hagamos el inventario. Inventario DTO, estoy seguro de que sabe que no querría exponer el inventario en sí Inventario DTO crearía eso en un minuto. Así que busquen. Vamos a buscar el inventario. Inventario por nombre. Por nombre, que es exactamente como lo tenemos adentro, cuál es el nombre ahora en el repositorio. Usaremos el nombre para ir a buscar. Entonces también tenemos una lista de inventario DTO. Debido a que esto es lo que estoy exponiendo, no quiero exponer ninguna implementación central de mi clase de inventario. Esto será fetch fetch todos en nombre. Eso todo en nombre. Esto tomaría una lista lista de cadena, luego lo llamaría nombre de inventario nombres de inventario. Eso básicamente sería esto porque estoy exponiendo esto, debería crear esta imagen porque debería ser expuesta también porque si tienes una DTU que no está expuesta y estás tratando de llamar dentro del servicio, el modelo de primavera también se quejaría Esto debe estar dentro de lo que quiero exponer. Estoy tratando de exponerlo también, así que debo crear este DTO. Todo bien. Vamos a tener este DTO básicamente debe contener exactamente los mismos campos que este realmente contiene Dividamos esto a la derecha. Escojamos esto solo para ahorrar tiempo. Escoge esto y simplemente quitamos lo que no necesitamos. Sólo sácate esto. Necesitamos la identificación. Necesitamos un nombre. Esto funciona. Probablemente podrías pensar en usar. De hecho, puedes pensar en usar Bam Mapper. También se podría pensar en usar un mapa golpeado. Existen varias herramientas que básicamente puedes usar. Cada una de estas herramientas en realidad tiene un poco de sobrecarga. Yo cuando tengas un grande, es por favor tanto como puedas, por favor utilízalos. Debido a que esto es relativamente pequeño, quiero hacerlo manualmente. Permítanme usar nuestros datos aquí. A datos. Lumbxh solo haz el trabajo por mi manera. Toma los otros códigos estándar. Mi interfaz ahora tiene esto. Ahora vamos a la implementación del código. La implementación se encontrará en el propio módulo de inventario, no quiero exponer la implementación. Solo quiero exponer solo la interfaz sola. Tengo el inventario. Entonces solo déjame ayudarme a mí mismo. Llamadas. Ingreso de servicio de inventario. Entrada de servicio de inventario entonces implementaría la interfaz, ¿verdad? Entonces debería estar al servicio. Voy a estar cableando un cable en chicos sub. Voy a usar require x constructor para hacer el cable en. Entonces vamos a poner en práctica esto. Bien, así puedo cerrar esto. Ahora, traeré el repositorio privado de Inventure. Gracias. Autocompletar. Nosotros tenemos esto. Entonces físicamente podemos crear vamos a tener una clase TO, ¿verdad? Tengamos un inventario TO. Inventario Util. Vamos a tener un inventario Util que realmente usaría para mapear el inventario al inventario TO Hay una clase co. Es una co anotación del código de madera en la utilidad. En la clase de utilidad, lo que hace por ti, se asegurará de que esta es una clase final y cada método que crees dentro de esta clase, es un método estático. Básicamente funciona para nosotros. Es una cosa muy impresionante. Entonces, ¿qué hacemos a continuación? Vamos a estar convirtiendo. Tenemos un inventario público, estamos convirtiendo de inventario a inventario DTO restaurantes inventario usted Vamos a llamarlo mapa. Vamos a llamarlo mapa. Vamos a llamarlo. El mapa está bien. Sí, tomemos esto. Contamos con DTO de inventario. Hagámoslo más divertido. Hagámoslo más divertido. Hagamos de esto un constructor. Hagamos el DTO, constructor. Sí, eso funciona. Luego puede hacer en ningún constructor x, en absoluto constructor Ax, N constructor. Siempre requieres un constructor, en realidad tienes estos también. Creo que esa fue 118 una versión particular del cuaderno de bitácora. No sé si esto ya no es necesario. No nos hace daño. Tenemos este constructor. Con esto, puedo construir. Con esto, sólo puedo regresar directamente. Acabo de regresar. Entonces el inventario DTU DT el Constructor o construir, ¿verdad? Así que eso funciona para nosotros. Así que sólo podemos de inmediato, vamos a ver qué es el contenido dentro del inventario conseguido. Bien, así que vamos a jugar esto a la derecha. Para que podamos ver con qué estamos trabajando. Sí. Entonces necesitamos la identificación. Necesita la identificación. Impresionante. ¿Necesitaría el nombre? Impresionante. Necesitaría la descripción. Impresionante. Yo necesitaría el precio. Entonces finalmente consigue precio. Esto ya funciona para nosotros. Si te das cuenta, no coloqué ningún método estático ahí ves como esta noción en particular, básicamente funciona. Si vienes aquí, con esto, podemos hacer el depositario Dots obtiene inventario por nombre. Obtenemos el nombre. Yo en realidad lanzamos un opcional, luego haremos un mapa. Hacemos un mapa. Hacemos un mapa, entonces puedes ver esto devolviendo un opcional, luego haremos un mapa. El mapa, después voy a tomar el inventario, después lo voy a pasar a Voy a llamar al inventario Inventario T sí, así se puede ver porque estoy usando referencia de método porque automáticamente método estático. Entonces esto funciona para mí. Entonces luego return obtiene menos una excepción, de lo contrario, o cierto porque usaremos la excepción para muchas cosas más adelante porque realmente quieres hablar sobre el modo abierto sin realmente venir a jugar. Esto realmente funciona. Lo mismo con esto, vamos a hacer lo mismo con este tiempo alrededor vamos a mirar a través, eso va a hacer lo mismo. Inventar para tener un repositorio. Tienes el repositorio de inventario que recibe nombres, luego paso los nombres de inventario. Pasando nombres de inventario. Ahora tengo una lista de inventario. Entonces, en realidad, flujo a través. Yo flujo a través, luego hago un mapa un mapa y de hecho rellenar uno de los primeros en realidad rellenar uno de los primeros datos y rellenar uno de los primeros datos. En realidad ven Bien chicos, creo que en realidad tenemos un usas que se quita a este tipo. También tomo el inventario. También mapeé esto. Puedo escoger esto. Simplemente lo mapearé usando la referencia. Después de mapearlo, entonces lo llevaremos a la lista de la lista. Esto es, creo que es una característica de Java 17, así que creo que las fotos recogen luego la lista. Bien, entonces tenemos esto. Tenemos esto dentro de esto, entonces tenemos nuestra implementación. Esta es nuestra implementación dentro de este tipo. Entonces puedo decidir que no voy a exponer a este tipo, así me lo puedo quitar, ¿ verdad? Puedo quitármela. No quiero que se acceda a ella en ningún lado. Estoy seguro de que estamos viendo exactamente cómo se desarrolla esto, ¿verdad? En realidad estamos limitando la accesibilidad, ahora mismo tenemos el DTO, ahora tenemos el servicio, hemos hecho en realidad tenemos la implementación Entonces surge la siguiente pregunta, ¿cómo la exponemos? Para exponer un subpaquete. Sé que en realidad debería haber explicado cómo exponer el paquete para un paquete sf, pero basado en nuestra implementación, no tengo otra opción. Creo que primero estaremos exponiendo el sub paquete. Ahora empezamos a hablar de probablemente implementaciones. Lo siento, las excepciones, entonces te voy a mostrar cómo exponer un paquete completo, y además llegamos a esa parte, de hecho te voy a mostrar. Bien. Entonces, ¿cómo hacemos esto? Entonces lo que haremos es crear un paquete que sea info. Entonces tenemos un paquete que es archivo de información. El paquete que es infofle entonces entonces llamaríamos a un anuncio en el marco de primavera, luego modulif, luego Esta es la interfaz llamada. ¿Qué quieres exponer? Cuál es el nombre del paquete que quieres exponer se llama expuesto. Entonces voy a ir a la derecha otra vez, g, spring framework, interfaz de nombre modult Entonces, ¿cuál es el nombre del paquete? Este es el nombre del paquete. Recuerda, esto es solo para subpaquetes, ¿verdad? Si quieres exponer un subpaquete y no un paquete o módulo completo, como lo llamas, pero este es un submodelo Entonces ya que sabemos que nuestro modelo es un modelo de paquete y paquetes. Entonces, si quieres exponer el submodelo, usas esto. Si quieres exponer algo aparte de esto, probablemente quieras exponer todo el paquete, hay otra manera de hacerlo. Entonces estarás usando algo llamado modelo de aplicación, ¿verdad? Entonces ahí vamos a llegar. Entonces esto es lo que vas a estar exponiendo. Ahora, surge la pregunta si estás exponiendo esto, debes informar al otro módulo que estarás recibiendo información de este inventario. Entonces necesita saber que está recibiendo información de esto. Entonces como resultado, aquí también tenemos un archivo de información del paquete, una información del paquete entonces estaríamos diciendo esto también, Oye, estarás recibiendo un módulo. Con un sub paquete esto. Eso también va en línea con una org, el marco de resorte, moduleaf pero esta vez alrededor del módulo de aplicación Entonces dentro del módulo de aplicación, recuerda, última vez que dije si quieres ver lo que está contenido dentro de algún parámetro solo un Control P. Ya ves, Control P te mostraría los detalles. Esa es una aleta inteligente. Se puede ver que hemos permitido dependencias. Eso es exactamente lo que estamos buscando para las dependencias permitidas Hacemos dependencias permitidas y recordamos, porque si la miramos una vez más, dependencia es una matriz, así que en realidad colocaría esto de esta manera Entonces estamos diciendo, por favor espere información del módulo de inventario, sub paquete expuesto. Espero que esto quede claro. Voy a repasarlo otra vez. De hecho, para llegar realmente a tomar dependencias, tenemos que definir un paquete que es información lejos dentro del otro módulo Entonces usamos un arte con esta anotación, que es modelo de aplicación, pero esta es la entrada en g spring framework module application module Entonces definimos la dependencia permitida p sería el modelo de inventario, sub paquete, expongo. Recuerda, este es un sub paquete. Supongamos sub paquete. Ahora que hemos hecho esto, ¿podemos probarlo? A ver si has roto algo. Lo primero es lo primero. Vamos a crear un servicio Dummy O, servicio DumMio de Australia del Sur Sigo creando este otro servicio y eliminándolo de la lista porque no estoy seguro exactamente cómo en el, así que todavía no quiero usarlo realmente Vamos a etiquetar este servicio en servicio, y vamos a cablear a ese tipo. Entonces cableado de alambre, utilizo al menos usando el artículo como constructo privado, final, luego servicio de inventario. Servicio de inventario. Ves esto no es quejarse A diferencia de la última vez que estaba mostrando todo rojo porque en realidad los modificadores el modificador *****, en realidad eliminamos al público, justo por ahora, pero esto está realmente disponible Entonces esto se queja. Vamos a averiguarlo. Vamos a averiguarlo. Entonces, lo que hacemos solo ejecutamos esto. Vamos a hacer una prueba. Esa es la manera de confirmar. Esto funciona, no deberíamos obtener ningún error. Todo debería seguir funcionando tal como está. Pero sin embargo, si esto realmente eligió un error deberíamos básicamente ver por qué viene el error. Espero que venga un error del orden o prueba de integración ya que ahí es donde realmente conectamos las cosas. Ya ves que las cosas van entrando, vamos a revisar el inventario. Esto eligió un error, este eligió un error. Veamos cuál es el error? ¿Cuál es la fuente de error aquí? ¿Cuál es la fuente del error? ¿Qué fuente de error? Dice así. No se pudo encontrar un contenedor de tipo, no se pudo encontrar una factura de tipo esto, lo que significa que no admite el uso del servicio de inventario. Pensé que era capaz de encontrar la papelera porque esto en realidad no está disponible dentro de él. No tiene esto disponible. No tiene esto disponible. Lo que hacemos, vamos a trasladar a este tipo a este lugar. Veamos esto. Vamos a refacturar a este tipo, volvamos a ejecutar esto porque expongo todo aquí, buscando la papelera. Vamos a ejecutar esto de nuevo. Voy a entrar aquí, correr esto alrededor de esto. Que es el Oh, ahora ya ves, es una gran que hicimos. Ahora está arruinando las cosas aquí arriba, ¿verdad? Entonces vamos a mover el inventario. Está reclamando, Oye, quieres un inventario pero no lo puedo ver. Entonces, en lugar de mover esto, probablemente pueda etiquetarlo como público, ¿verdad? Esto en realidad debería ser un público. Pero si etiquetas esto como público, el problema es, si lo etiquetas como público, quedaría expuesto. Estoy tratando de evitar que quede expuesto. Entonces ahora mismo, esto no es verlo. Esto está buscando el inventario. Entonces esto ahora puede localizar a este tipo, porque recuerden que esto sigue siendo público Entonces, volvamos a ejecutar esto. Vamos a ejecutar esto de nuevo. Está buscando a un ben buscando a un ben. Entonces, dejemos que entre la viga. Veamos esto. Bien, creo que debería simplemente ejecutar el otro eventu solo para no perder el tiempo Pero bien, solo deja que esto se vaya. Bien, yo estaba pasando estaba pasando por estaba pasando, yo estaba pasando. ¿Puedes encontrar el ben? No. ¿Por qué no encuentras la viga? A ver. Volvamos a ver el error. Veamos el error? No se pudo cargar concurso porque correcto. Todo bien. Bien. Sí, esto debería fallar. Esto debería fallar. Todo bien. Esto se supone que fracasa, básicamente, porque eso básicamente nos llevaría al siguiente paso, ¿verdad? A pesar de que movemos las cosas aquí, todavía podemos fallar diciendo: Oh, esto no está funcionando, ¿verdad? Que es la parte complicada. En el siguiente video, realidad voy a mostrar exactamente cómo funciona esto, ¿verdad? Esa fue solo la parte porque así es naturalmente como pensaría un desarrollador al entrar aquí. Así que en realidad haz que esto funcione y decir, tal vez cuando realmente agrego esto en entonces se encontrará la papelera, pero ese no es el caso realmente. Cuando estés ejecutando la prueba, debes asegurarte de decirle a cada una de las pruebas que oye, hay una dependencia también entrando aquí. Porque hay una dependencia. Diciendo solo el módulo solo, debe decirle a la ruta del módulo de prueba también hay una dependencia vienen permitir que los módulos o el módulo madre entren para que se ejecute la prueba. Más de eso en el siguiente video. Gracias chicos. 16. Llamada Interfaz 2: Bien, gracias chicos por acompañarme una vez más. La última vez que nos encontramos con algo complicado porque en realidad inyectamos la interfaz aquí o diciendo, esperamos que esto funcione. Pero en realidad nos encontramos con un problema. Entonces movió todo lo definido aquí y lo colocó dentro del paquete expuesto pensando, esto debería funcionar o el sub paquete expuesto, esto funcionaría, pero aun así ha fallado, ¿verdad? Aún así ha fallado. No obstante, la parte complicada es solo esto, Todo lo que tienes que hacer ahora, el punto es que la prueba se está ejecutando. La prueba sólo correrá contra esto solo. Todo lo demás fallaría. Eso es algo de la culata en regla dentro del módulo de resorte. Permitir que esto tome dependencias, ahora necesita tomar un parámetro llamado mode Modo. Modo, entonces arrancas dependencias directas Se trata de dependencias directas o usa todas las dependencias para permitir cualquier dependencia que probablemente esté agregando más adelante en Verías donde esto también fallaría porque hay algunas partes que en realidad no están permitidas, sin embargo, usemos dependencias directas Si escoges esto, solo ejecutemos esto directamente y veamos qué pasa. Vamos a dirigir directamente a este tipo. L solo ejecuto esto directamente. Esto estaba fallando antes de ahora. A ver. ¿Esto falla? Recuerda que trasladamos todos los detalles aquí. ¿Esto falla? En realidad, no va a fallar. Todo bien. Entonces vemos esto realmente pasar, ¿verdad? Entonces, como que nos paso a través de cómo un desarrollador probablemente querría acercarse al modelo de ping. Por favor, necesitas realmente tener ese cambio de mentalidad que puedes simplemente mover las cosas de paquetes a paquetes o modelo a subModelTing, eso realmente intentaría seguir las reglas porque eso mejora exactamente lo que esto se supone Ahora, entremos aquí también. Vamos a entrar aquí. Y escojamos esto y vamos a ejecutarlo también. Esto también estaba fallando antes. Entonces, ¿vamos a ver qué pasaría? Esto básicamente cablearía el contexto del resorte, todo. Recuerda, esto en realidad contiene la prueba Springbok, ¿verdad? Bien, ya ves que eso también pasó. Así que hagamos toda la prueba, ¿verdad? Derecha. Entonces vemos que no hemos roto ninguna regla. Recuerda que estamos desarrollando en pasos. Por cada paso que estamos desarrollando, estamos ejecutando la prueba para asegurarnos que no hemos roto las reglas. Rompemos las reglas, básicamente vemos el tema que, esto es porque hicimos esto y lo hicimos y lo hicimos. Todo bien. ¿Ves pasar todo? Ahora, déjame mostrarte algo interesante. Recuerda que te mostré antes mientras estamos observando este paquete base, ¿ puedes ver que ahora tenemos dependencias modales directas, que es eventualmente Antes de ahora no teníamos ninguno, NINGUNO, pero ahora tenemos invención porque en realidad lo hemos incluido y en realidad ambos lo hemos incluido en el uso del paquete que es info para exponer la interfaz como la interfaz nombrada, que es para un sub paquete. Luego lo conectamos como un permitir la interfaz en el otro modelo. Entonces en nuestra prueba, le dijimos a la notación de prueba, Hey, permitir que también se conecten las dependencias directas Y eso es exactamente lo que pasó. ¿Todo bien? Entonces con esto entonces hazlo, si no necesitas este servicio, puedes cablear en el servicio, pero ese no es el objetivo en estos momentos. El espectáculo de que esto realmente pasó para que luego podamos ver cómo funciona esto con precisión. Todo bien. Entonces alguien también podría hacerme una pregunta. ¿Y si pero moviste este paquete, significa que solo fuiste una parte engañosa para que muevas el depósito de implementación del servicio de inventario aquí? Oh, sí, necesitaba demostrar que necesariamente no tienes que hacerlo. Todo lo que necesitábamos exponer aquí era el detalle del inventario y el servicio de inventario. Vamos a retroceder esto. Entonces ahora lo volvimos a mover. Esto es lo único que estamos exponiendo. Realicemos nuestra prueba. Vamos a ejecutar nuestro vamos a ejecutar toda la prueba y ver, ¿esto sigue funcionando? Esto se romperá. Si no funciona, no puede encontrarlo, podemos encontrar una viga que estuviera solicitando para Ella esto debería romperse. Estas dos partes deben romperse. Pero ¿ se rompe? Vamos a averiguarlo. Bien, la prueba de integración de pagos está pasando. Bueno, eso funcionó. Prueba de integración, eventual integración aquí, la base trabajada, otras integraciones de eventos y otros trabajos de integración Ves que esto realmente funciona bien. Yo he podido hacer ahora mismo es que ahora mismo sólo estamos exponiendo lo que hay que exponer, ¿verdad? Sólo lo que hay que exponer. Esto ahora es contrario a la forma en que algunos podrían haber construido realmente un servicio donde ahora permites que el otro modelo lo sepa todo, como el otro modelo para saber todo lo que está dentro del modelo de inventario. Pero en esta ocasión, solo estamos exponiendo solo el sub paquete aquí. Eso es lo que queremos que conozca el otro modelo. Si ahora entras aquí, ves que esto es exactamente lo que sabes. Si realmente creas un método Domin, ahora llamemos a esto orden público, está bien Vamos a crear orden. Entonces podemos llamar puntos de inventario, luego buscar algo y aún así obtenemos los detalles que necesitamos sin que la aplicación se queje Espero que quede claro. Todo bien. Ahora hemos podido cablear en la otra interfaz. Con eso, volvería a borrar a este tipo. Definitivamente voy a publicar con este video cortado correctamente, voy a borrar de nuevo a este tipo. Hemos sido capaces de hacer esto. Ahora poder explicarnos y mostrarnos cómo funciona la interfaz nombrada. Iré una vez más por el bien de la claridad. La interfaz con nombre se utiliza para exponer un subpaquete. Se utiliza para exponer un subpaquete, y cómo lo hacemos para usar la interfaz g interfaz modnamed, nombre del subpaquete dentro del nombre del paquete sub dentro de la información del punto del paquete Entonces la clase objetivo, que es esta parte, luego se le debe decir a la clase objetivo qué dependencia debería estar esperando o dónde debería estar esperando datos o siendo redacción y cuál es entonces el inventario expuesto. Inventario. Columna Colm sub paquete, exponer. Gracias por acompañarme, entonces nos vemos en el siguiente video. Gracias. 17. Servicio de pedidos 0: Todo bien. Gracias por acompañarme. Hemos tocado la interfaz de nombre. Ahora, volví a pensarlo. Estoy usando Java 21. ¿Por qué estoy usando datos y umbok? ¿Por qué no solo uso registros, verdad? Creo que eso debería ser lo mejor. Vamos a oe registros. Así que vamos a sumergirnos en ello. Cambiemos esto a registros. Así que los registros en realidad van por aquí, registro. Grabar, no necesito a ninguno de estos tipos. Entonces cada uno de estos chicos no va a ser un privado porque va a ir dentro como parámetro, entonces saco esto. Solo estoy usando los esquemas de la inteligencia. Yo hago Control R o cambio la semiclm a una coma, luego reemplace O. Cuando tenga eso, entonces esto realmente se convertiría en abrir esto realmente se convertiría en abrir Cierra esto, luego abre esto. Todo bien. Entonces sí, así que básicamente es como se verá el disco. ¿Cómo se verá un disco? Así que solo lo arreglo correctamente. Así es básicamente como se verá el registro. Así que probablemente pueda hacerlo más legible de alguna manera. Todo bien. Creo que esto estuvo bien. Sí. Se ve bien. A ver. Creo que todavía se ve un poco horrible. No es bueno en absoluto. Bien. Así que puedo escoger esto aquí. Bien, sí, sí, sí, esto se ve mejor. Se ve mejor. Así que sólo me quito esto. Bien, esto se ve mejor. Vamos a arreglar eso. Vamos a arreglarlo en el Evento u T. Esto ya no contiene un Buda. ¿Por qué es antes un Buda? Porque queríamos hacer pero ahora está en Java 21? Vamos a explorar la bondad de Java 21, ¿verdad? ¿Qué haría simplemente? Acabamos de crear Eventu DTO Inventory DTO igual a nuevo inventario DTO Esto toma el ID IDC, IDS inventario u obtener ID, luego inventario para obtener nombre, inventario para obtener descripción, luego inventario no recibe precio Yo sólo me quito esto. Yo sólo regresaré directamente aquí, regreso. Nos volvemos, eso debería ser. Entonces ese es el ajuste. Derecha. Entonces esto tiene más sentido. Ahora vamos dentro Esto no cambia, no cambia. Simplemente me apresuré a usar un umbXJV en realidad uso Derecha. Entonces esto es bueno. Esto es bueno. Esto va a ser un método estático. Una vez que construyas esto, una vez que lo construyas ahora mismo, reviso tu clase objetivo, seguirías viendo que esto es vamos a construir esto para que solo puedas construir proyectos. Es bute. Bien, así que vamos a revisar dentro de las clases. C entonces inventario, este tipo. Como pueden ver, es una clase final, ¿verdad? Es una clase final, y esto es estático. Entonces eso es lo que hace en la clase Utilidad. Solo quería mostrarnos esto, y automáticamente crea un constructor privado que se supone que no debemos instantáneamente. ****. Genial. Ahora tenemos esto. Ahora lo más esperado o el servicio. Sí. O el servicio. Todo el servicio. Creo que creo que vamos a aguantar un poco. Antes de eso, vamos a guardar esto a Git, bien. Guardemos esto para que sepamos que somos capaces rastrear dónde hicimos los cambios, ¿verdad? Entonces, vamos a guardarlos a Gits. Así que voy a ir a Gates. Voy a ir a Gates. Lo estoy haciendo en mi segunda pantalla, así puedo traerlo aquí. Entonces vayamos a Iré a mi repost. Oh, lo siento, chicos, me dejo traer esto. Déjame hacer esto. Entonces este es el costo mensual. El caso del módulo entonces vamos a los temas creados. Vamos a crear un problema. Veamos la interfaz nombrada. Déjame solo darte un pequeño comentario aquí diciendo cómo exponer submodu Creo que me acuerdo, vamos a sólo una etiqueta. Esto es una mejora, ¿verdad? Vamos a etiquetarlo como una mejora. Sí, vamos a contar nuestro primer número. De todos modos, vamos a etiquetarlo como mejora. Así que solo crea esto vamos a elegir esto, vamos dentro. Escoge a este tipo que comete. Después CM, luego cierra. Entonces simplemente empujamos esto, llamamos a esto escaneo, escaneo cada vez que uso Git guardianes push Todo bien. Entonces esto es bueno. Comprobemos como eso dije. Sí, eso se ha salvado. ¿Puedo mover esta pero otra pantalla? Sí. Todo bien. Así que ahora saltemos a Vamos ahora a saltar al otro servicio. Pero el servicio tomará alguna coimplementación. Por eso he estado huyendo de ello, pero sí, aquí estamos. Otro servicio? Sí, cuánto tiempo le decimos a otro servicio de servicio, entonces eso requirió X Constructor. Entonces recuerda, puedo traer mi servicio privado de inventario final privado , servicio de inventario. A lo mejor puedo hacer esto ahora y te enseñé cómo. Todo bien. Eso es genial. Ahora tenemos que cablear a este tipo. ¿Necesitaríamos método? Sólo llamémoslo crear orden o hacer pedido. O simplemente llamarlo permitiría que esto realmente retorne. Sin embargo, vamos a darle. Devolvemos algo llamado la orden DTO. Otros DTO. Entonces crea orden, también estamos tomando el otro DTO No sabemos qué entonces Jaspe. Por favor, no me dé ninguna otra sugerencia. Estamos creando el otro DTO. Eso estará dentro del paquete DTO de este tipo de OO. Vamos a crear un paquete llamado DTL. Vamos a elegir a este tipo. Vamos a crearlo dentro de O DTO. Es una clase. Sí. Este sería un registro de Java. Este sería un registro de Java. Esto será récord ya que ya estás usando record vamos a apegarnos a usar registros, ¿verdad? Entonces, ¿qué contendría esto? Esto contendrá privado. Lo siento. Pensé que estaba usando la clase numérica, usar una cadena, el nombre del cliente, y otros contienen el nombre del cliente o debería contener la mayoría. Entonces un cliente envía un correo electrónico al cliente, luego también deberías contener inventario, el inventario que han escogido el inventario que escogieron de la interfaz de usuario, lo piensas, deberías contener una lista de inventar Pero en esta ocasión, lo que expusimos recuerda lo que expusimos no fue inventario, sino detalle de inventario, sino impuestos sobre lo que estamos usando aquí. Este no es el mismo detalle de inventario. Esto es esto es lo que realmente entramos desde la interfaz de usuario. Este inventario detalla por aquí que usando dentro de esto, solo contenemos el nombre y la cantidad. Porque solo queremos ver cuál es el nombre del inventario y cuál es la T. Así que probablemente debería llamarlo algo así como todavía quiero darle algo relacionado con el inventario. Probablemente quiera llamarlo INV DTO, ¿verdad? I NVT No quiero confundirlo con Inventure DTO porque no quiero serlo Así que vamos a llamarlo inventario requestTo. Eso tiene sentido. Sí. Llamémoslo solicitud de inventario DTO. Eso tiene todo el sentido, ¿verdad? Inventario, solicitud. Detalle. Es diferente del detalle del inventario que estamos usando. Entonces te diré que transforme de la entidad de inventario al detalle de inventario, llámelo a esto solo llamémoslo inventario DTO, ellos solo lo llaman lista de búsqueda de inventario Esto está bien. Creo que esto está bien. No tengo ningún problema con esto, ¿verdad? Entonces esto es bueno por ahora. Esto es bueno por ahora. También quiero agregar detalles extra. Quiero agregar algunos detalles extra que se van a usar. Solo estoy siendo perezoso, solo estoy siendo perezoso. Entonces solo quiero querer regresar Bien. ¿Sabes qué? Sólo hagamos el trabajo. Hagamos el trabajo. Hagamos el trabajo. También quiero devolver una respuesta. Llamemos a esta orden respuesta, o respuesta, respuesta DTO Respuesta DTO, entonces esto básicamente debería ser un registro también debería ser un registro Entonces esto realmente debería contener el mensaje, el mensaje que está regresando debería contener solo usando Teja, digamos código de estado, código No sé por qué estoy usando envoltorio. Entonces creo que podemos dejar esto por ahora. Podemos dejar esto entonces podemos volver más tarde para potenciarlo. Yo escogeré esto. Voy a dejar fuera esto de aquí, entonces esto debería ser. Viniendo aquí. Entonces ordenamos DTO ordenar DTO. Entonces arreglemos este error. Entonces aquí hay un error. Vamos a solo que no lo sabemos por ahora. No lo sabemos. Entonces entremos aquí y arreglemos este error. No hemos creado esto. Esto va a crear esto. Es un disco. Todo bien. Entonces, ¿qué contendría esto? Es solo que básicamente contiene el nombre de inventario de cadena de cadena de nombre. Nombre de la invención, entonces esta contendrá la cantidad int, ¿verdad? Derecha. Eso es. Eso es lo que contendrá. Sí, eso es. Sí. Creo que está bien. Se ve feo. A mí me gusta. Esto se ve mejor. Entonces podemos cablear a este tipo. Ya está cableado en entonces lista. Ahora todo el mundo está sonriendo aunque ya no tenemos nada rompiendo. De hecho, podría hacer la prueba ahora, pero no deberíamos. Hagamos algo más significativo antes que realmente empecemos a ejecutar la prueba. Ahora bien, lo que quiero hacer, probablemente sólo voy a dividir algún código pudo aquí. Sólo algún código pudo. Quiero obtener los Intry por nombre, por nombres, obteniendo inventarios por nombres ¿Qué quiero hacer? ¿Qué quiero hacer? Estaba recibiendo entradas por nombres. Entonces quiero construir construir y persistir el otro vamos a llamarlo persistir el lo que digo construir Solo persista el otro persista el otro. ¿Qué más quiero hacer? Entonces, quiero construir y persistir la O. Entonces creo que eso debería estar bien por ahora. Demos esto paso a paso. Vamos a dar esto paso a paso, ¿verdad? Demos esto paso a paso. Todo bien. Entonces hagámoslo. ¿ Cuántos minutos es esto ahora? Esto es de 12 minutos. Guau. Todo bien. Creo que quiero publicar el video aquí para que podamos volver. Volveremos en realidad empezaría a construir esto. Todo bien. Gracias. 18. Servicio de pedidos 1: Bien. Muy bien, chicos. Estamos de vuelta aquí. Una vez más, aquí es donde nos detuvimos. Vamos a saltar rápidamente a la derecha. Para no hacer este video muy largo. Inventario de WG, en realidad construiríamos construir persistir el orden Creo que también construimos construir y persistir el inventario de pedidos. Recuerda este inventario. Recuerda, sabemos que está en JPA, necesitábamos algo que nos dijera la conexión entre el inventario y el propio pedido Inventarios realmente realizados como un pedido. Esto en realidad nos da el vínculo entre ellos. Empecemos con esto. Empecemos comencemos con la derecha. Empecemos sí, ¿cómo vamos con esto? Esto ya contiene el nombre aquí. Esto contiene a este tipo, a este tipo. Contiene el nombre en la cantidad. Para que antes que nada podamos obtener los nombres. Recuerda que necesitamos los nombres. Entonces, consigamos los nombres. El otro servicio, e's saquen estos. Así que la lista DoToentTo. Vamos a transmitir TR deja mapa vamos a mapa. Entonces inventario ¿listaste la referencia del nombre del inventario, luego lista a lista Así que sí, creo que voy a llamar a estos nombres de inventario. Nombres de inventario de inventario. Entonces, esto funciona. Así que ahora ya hemos conseguido esto. Ahora, encontremos el inventario. Entonces creo que debería subpasar y obtener inventarios. Eso son los inventarios. Así que ahora consigue inventarios, nosotros esto en ya, solo llama al servicio de inventario punto fetch all in name, pasando el inventar recuerda Zach está colocando una lista de cadena, que es exactamente lo que hemos pasado aquí y esto debería regresar Esta regresará debe devolver los inventarios. Int acaba de llamar a este tipo inventarios. Inventarios. Eso es cosas buenas, cosas buenas. Siguiente paso, construyamos el orden. Construyamos el, el otro invento. Creo que primero deberíamos obtener el pedido, luego la clave, las claves o las claves primarias que luego usamos para vincularnos realmente en esto o chico. Vamos a por esto. Entonces, ¿cómo procedemos? ¿Cómo procedemos? Sí. Así que básicamente querríamos simplemente construir básicamente queremos simplemente hacer esto. Creo que quiero hacer esto en un método separado. Hagamos esto, llamemos a esta orden como una sola orden. Vamos a llamarlo modo y persistir el orden. Creo que esto funciona. Entonces tomemos DTO. Vamos. Permítame que nos dé algo de espacio para que podamos hacer esto de verdad. No tenemos orden tenemos el otro entonces el otro espacio de excreción o establecer esos conjuntos ID, no, no necesitamos hacer esto este generador Roto , esto a generador O identificador porque queremos un identificador, no el kno primario o identificador diferente que creamos la última vez, cualquier otro nombre de cliente Cualquier otro correo electrónico del cliente. Todos estos conjuntos no se establece. Establecer el correo electrónico del cliente. Entonces, ¿qué más? Creo que tenemos el, o estatus. Otro estatus. Teníamos un status, establecido si, si, set status. Este sería el estado que concluyera. Así que para ser estatus que se haya completado. Recuerda, en realidad se puso en marcha. Míralo. Declarado de que se está abriendo, así que hazlo concluido. No necesitamos establecer esto porque esto en realidad se crearía instantáneamente para Bien, entonces, ¿dónde estamos? escojamos el otro detalle. El otro detalle el otro DTO tiene el nombre del cliente, obtuvo el nombre del cliente, otro deToHW no sabía lo siento mecanografiado Gracias por completar. Entonces solo queremos devolver el otro repositorio. Necesitamos el otro repositor entonces solo lo archivamos en. Significa que necesitamos cablear en el otro repositorio Otro repost, llamemos a este repositorio O Entonces el otro repost consiguió guardar. Ya lo tengo. Impresionante. Ya tenemos esto. Esto ya funciona ahora. ¿Qué utilizamos como esto? Usemos un vamos a usar un UID, UID para identificar Yo sólo voy a crear el UID final aquí. La cadena final, o identificador de fuego UUID, UID punto UID aleatorio hacia abajo Coloquemos esto aquí. Mejor aún. Sólo vamos a guardar un poco de memoria. Yo solo esto de aquí y esto funciona. Dile que somos capaces de ver eso. Una vez que consigas esto, una vez que realmente construimos y persistimos el, el otro DTO, básicamente, podemos persistir esto automáticamente porque eso es básicamente lo que necesitamos para el Pero sin embargo, ves esta identificación regresa aquí, lo que estamos colocando aquí no sería nuestro vínculo con el otro inventario, entonces puedo llamar a esto aquí para decir, Bien, persista este tipo, ordena el TO. Esto ahora contiene un ID que básicamente solo usaría cuando la persistencia es. Probablemente te vamos a dar registro. Yo favorecería usar ese SLL para J, SLL para J, presione el registro aquí diga log info Vamos a ver o eso creado. Creo que esto me gusta. Entonces queremos construir y persistir. Construir. Entonces queremos construir y persistir. Veamos privado debería ser nulo porque no creo que tengamos que regresar. Ya lo averiguaremos. Después construir y persistir o inventariar. Llámalo o inventario. Yo sólo lo llamo a esto. ¿Va a ser uno o múltiples? Vamos a salir. Vamos solo para que ese inventario por ahora. Esto entonces toma en una serie de cosas. Esto toma en el texto O DTO en el OTO O DTO. Sólo texto en el otro DTO también necesitaría los inventarios que voy a estar pasando los Por lo que debe ser DTO de inventario, utilizando DTO de inventario. ¿Dónde está otra vez? Oh, esto es detalle de inventario. Inventarios, básicamente, esa será la lista de inventario DTO Necesitamos lista de detalles de inventario para este DTOs de inventario Inventarios, bien. Esto está bien porque sabemos que contiene el inventario. Simplemente no querías exponerlo. Entonces también estaría recibiendo una cadena o identificador. Y luego el fuego, entonces ¿qué más? Entonces la cantidad, ¿verdad? El monto. Veremos para qué se utiliza esta cantidad, ¿ verdad? Veremos para qué se utiliza. Vamos a usar Te mostraré usar una lista. Al final del día, probablemente necesite un pulmón atómico, ¿ verdad? Tengo que hacerlo. Cantidades pulmonares atómicas. Cantidad larga. Todo bien. Entonces, ¿cómo se supone que va a ir esto? En primer lugar, quiero definir cuál es la lista de inventar realmente persistente Orden Evento, orden evenge. Ada inventa el chi, Ada inventa el chi, queso Avent, creo que debería cambiarle el nombre a On Sí, queso Odín. Entonces tenemos una nueva lista de matrices, lista Arey que mostramos el tamaño será exactamente del mismo tamaño Recuerden, cada uno de ellos se persistiría individualmente, ¿verdad? Entonces porque persistimos individualmente, así que solo podemos elegir la talla Entonces estamos seguros del tamaño. Entonces no quiero que solo vaya indefinidamente. Así que el tamaño de la matriz queremos salir. Después escojo los inventarios. Inventarios entonces para cada uno, ¿cómo es que este tipo solo me está leyendo la mente? Oye, ¿estás bien? ¿Autocompletar? Por favor, no leas mi mente. Después creo un nuevo inventario de pedidos. No tengo ningún otro inventario. Un nuevo inventario o inventario entonces. Entonces escojo el pecado. ¿Estaría haciendo un bucle múltiple? Estoy tratando de proporcionar el bucle múltiple. Creo que eso funcionaría. Ahora mismo, vamos a crear otra estrella privada privada. Sólo llamémoslo inventario DTU. Inventario déjame pensar tres bits. Déjame pensar tres pedacitos. T t bits, picadura verdadera, picadura verdadera dejándote , dejando tu. Picadura verdadera. Estoy tratando de darte una idea. Déjame hacer una pausa en esto un poco, pensarlo un poco. Voy a volver. Soy capaz de recoger mi pensamiento. Vamos a necesitar el inventario solicitado. Todo se unirá ahora. Entonces lo llamamos obtiene Inventario solicita detalle por nombre. Creo que esto funciona. Entonces crearé un errata, luego eso es cadena, luego nombre de inventario Después pasamos en la lista de inventario solicitado tenemos inventario solicitado a tenemos. InventryRquest it lista. No, no, no, no, no, no quiero mezclarlo. Llámalo inventario, lista DTO. Es un conflicto con el otro que tenemos allá. Todo bien. Entonces, ¿qué haríamos entonces ? Esta sería simplemente lista de solicitudes de inventario. No, no estoy haciendo para cada uno, y voy a transmitir a través voy a transmitir a través, luego voy a filtrar. Estoy filtrando a través de cada uno para ver si este tipo el nombre del inventario es igual a este nombre de inventario, ¿verdad? Quiero poder determinar que estoy recogiendo el inventario exacto de esta lista, ¿verdad? Así que recuerda, esto devolverá una lista de inventarios para usar detalle de inventario No giramos la lista de inventarios en base a los nombres o pasados Ahora mismo, estoy tratando de determinar si el inventario solicita estos datos aquí, este nombre que nos has dado coincide con esas partes. Si coincide con alguna de las invenciones que nos son dadas, entonces conocemos la cantidad realmente solicitada. Creo que debería pensarlo más lentamente porque alguien podría estar confundido. Bien, así que lo pienso así. Estás haciendo un pedido, ¿verdad? Entonces, mientras haces un pedido, la interfaz de usuario habría escogido algunos detalles, habrías escogido algunos inventarios Básicamente solo necesitas enviarnos el nombre y la cantidad de la cantidad que estás recogiendo. Puedo usar el nombre para resolver qué inventario básicamente es un nombre de inicio, luego podré asignar las cantidades a ese inventario de inventario en particular en la tabla de inventario. Eso es exactamente lo que estoy haciendo aquí. Estoy tratando de usar el nombre que se pasó como una orden para crear realmente una orden. Ahora estoy intentando, tratando de revisar esta lista que se proporcionó que realmente creamos para ver qué inventario de la tabla coincide con ese nombre. Eso es exactamente lo que estoy haciendo aquí. Entonces por eso estoy comprobando el nombre. Creo que eso funciona. Simplemente puedes pausar el viento e intentar escucharlo supongo que puedes averiarlo en caso de que me publicaran demasiado rápido. Entonces van a encontrar primero. Entonces de lo contrario solo devuelve no por ahora, lo contrario, no existe. Qué más no, giramos esto. Todo bien. Con eso hecho, entonces podemos entrar aquí por cada uno de ellos. Lo que hacemos entonces es que podemos obtener el inventario positivo por lista pasando el nombre del inventario, pasando el inventario actual. ¿Cómo se llama ahora? Inventario. Llame a este inventario obtener nombre, luego pasando el pedido. Creo que deberían ser listas de Inventarios. ¿Correcto? Sí. Sí. De hecho me dirijo a nosotros el evento DT, tenemos esto. Esto coincide, eso es lo que estamos usando. Entonces con esto hecho, entonces podemos elegir la otra eventry que realmente creamos Ese es este otro eventr que creamos. Escoge este que establece el otro ID para que coincida con el otro ID. Otro ID. ¿Cuál es la otra identificación? Qué otro ID. El otro identificador. Este identificador que usamos aquí, ¿verdad? Sí. Este identificador que usamos aquí. Todo bien. Entonces, ¿cuál es el lugar dscrepancia en una cadena aquí ¿Qué usé? ¿Qué usé? Vamos a confirmar. Vamos a confirmar. ¿Sabes qué? Vamos a cablear esto rápidamente. Volvamos aquí. Quiero terminar este método así que no quiero dejar que este video se alargue demasiado. El otro inventario, luego establecer ID de inventario, luego inventario. Inventario, luego ID. No consigas la identificación. Luego inventario de inventario, luego la cantidad establecida. La cantidad es entidad dt a cantidad. Int, a ¿Estoy mezclando esto ahora? Lo siento, debería estar usando. Este es el inventario. El tipo DTU. Las DTU de inventario obtienen cantidad. Eso es lo que debería estar usando. Entonces entonces necesitamos el precio. Entonces podemos hacer un precio total largo. Será el inventario será inventario dT, inventario DTG precio, precio, uh, entonces podemos multiplicar por el inventario, igualar por nombre Vamos a llamar a inventario igualsit. Esto se está volviendo absurdo. No es esto por su nombre. Bien, así que vamos a colocar esto. Creo que eso es bastante distinto. Entonces eso es obtener cantidad. Eso nos da la cantidad total, ¿verdad? Después el otro inventario, luego bajar cantidad precio. Recuerda, hicimos esto, luego colocamos aquí este precio total. El precio de los datos del lugar aquí. Entonces tenemos los otros inventarios. Luego los otros inventos que aquí definimos, luego agregamos en este otro inventario Entonces tenemos una cantidad porque sabes que la cantidad va en aumento. La cantidad va en aumento. Déjame comprobar la duración de este video ya. Esto ya son 17. Chicos, vamos a posar esto aquí. Volvamos. Volvamos. En el siguiente video. Gracias. 19. Servicio de pedidos 2: Bien chicos, gracias. Gracias por acompañarme una vez más. Esto es Z aquí. Sí. Con esto a, entonces recuerden que tomamos un préstamo atómico queremos hacer un seguimiento del monto total, que es este precio en realizar un seguimiento del monto total, solo usado y sumar y obtiene, precio total. Yo sólo puedo bucle nos da esta cantidad total. Entonces se puede hacer un seguimiento dentro de este método para ver esto, ¿verdad? Entonces después de que hayamos terminado con esto, solo registre algunos detalles. Sólo voy a decir, que son las invenciones Qué inventarios Asistido. Sí, esto funciona. Entonces solo puede hacer el otro inventar. ¿Queremos entrar a ese tipo? No. La otra postura de inventario. Recuerda, estamos haciendo esto porque sé usar JPA. No queremos usar esos detalles porque si lo hacemos, se va a unir apretadamente y queremos evitarlo. Después CBO. ENTONCES? Guarde todo esto. Todo bien. Entonces, volvamos a esto. ¿Qué hice aquí? Todo bien. Estaba tratando de pasar el pedido, el ID de pedido o el identificador. Tu identificador debe ser una cadena. ¿Por qué usé un largo aquí? Esto definitivamente es un error. ¿Por qué usé un largo aquí? Eso es llamar a la preocupación. ¿Por qué usé un largo? Ahí. Pensando en por qué usé un largo ahí. Mirándolo una vez más. Mm Oh, si, si, si, ya, ya. Ya lo he averiguado. Entonces me equivoqué un poco. Necesitamos la identificación. Esa es la identificación. Este no es el identificador. Creo que me estaba superando a mí mismo. Esta es la identificación. El ID de la persistimos antes, este ID, por lo que queremos vincular al inventario dentro de esta otra tabla de inventario Es el ID al igual que la forma en que muchos a muchos funciona cuando usas el ID para realmente vincularlos a ambos. Eso es exactamente lo que estamos tratando de hacer aquí. Creo que eso está claro. Nosotros colocamos esto aquí. Bien, así que pasemos por esto. Esto puede ser un poco complicado saber lo que estoy haciendo aquí, pero vamos a repasarlo una vez más para que podamos En primer lugar, entendemos esto como esto persiste bastante sencillo Lo que estoy tratando de hacer aquí es, estoy tratando de escoger para este pedido que se creó. He creado un pedido, ¿verdad? Quiero vincular el ID de este pedido a cada inventario que realmente se compró dentro de la otra tabla de inventario. Y eso o tabla de inventario está sirviendo a nuestros muchos a muchos. ¿Verdad? ¿O debería decir uno de los demasiados que esto se mueve? Entonces es unirlos a ambos . que podamos saber por cada ID, cuántos inventarios hiciste por. Oh, compramos este Inventure con este precio, esta invención con este precio, esta invención con este precio. Entonces eso es lo que estamos haciendo aquí. Entonces a través de nosotros empezamos por mirar a través toda la invención porque los inventarios realmente determinan el vínculo aquí, ¿verdad? Tam usando. De hecho, miramos a través de otros eventos demócratas. Ahora estamos tratando de persistir en cada uno de ellos. Creo que esto es lo que establecemos la identificación. Este ID es el otro ID, que es el ID que se escribió. Fui creado por la mesa, que colocamos aquí. Entonces eso es lo que hicimos. Entonces este tipo básicamente es lo que te expliqué antes, intentas crear un pedido desde la interfaz de usuario. Solo eliges los nombres del objeto del inventario que deseas. Entonces estableces cuántas cantidades quieres para cada uno de los inventarios. Entonces solo el nombre y las cantidades pasan al back end, luego el back end luego lo recoge. Usa ese nombre, pasa por la lista de inventario que está disponible en la tienda o disponible en la base de datos. Una vez que ve eso, entonces toma la entidad misma de la tabla, recoge todo ese registro. Entonces es ese disco que en realidad regresas aquí. Reproduce todo ese disco, y es ese disco, ahora estamos tratando de querer vincular, qué disco pertenece a qué nombre? Entonces eso es lo que estamos haciendo aquí. Eso es lo que estamos haciendo aquí. Entonces por eso ves que tenemos esto aquí. Voy a tratar de ver, ¿cuál pertenece a cuál? Entonces por eso lo hago. Por eso ves, pasamos por la solicitud la lista de solicitudes. Para cada una de las solicitudes, ¿ este nombre coincide con este nombre? Alguien que coincida con este nombre aparentemente le pertenece, entonces lo afinamos, ¿verdad? Entonces por eso el primero o que coincide, luego lo afinamos. Entonces una vez que lo encuentras, entonces simplemente seguimos adelante y simplemente persistimos esto para simplemente persistir. Así que recuerda, inventarios, este inventario DTO es sinónimo de nuestro inventario Recuerda, no queríamos exponer aquí mismo. Pabla debería regresar. No queríamos exponer a este tipo de inventario. Así fue como creó este acuerdo de inventar. Este detalle de inventario es lo mismo que este. Entonces puedes asumir que esta es la propia entidad. Este es el nombre que estamos tratando de comparar con el orden que en realidad era el nombre de la orden, ¿verdad? Y vamos a explicar. Necesito explicar esto una vez más para que en realidad no nos equivoquemos. Y por eso lo estoy haciendo. Entonces una vez que hayas podido averiguar, Oh, este es uno que coincide que va a elegir esto. Entonces entonces en este lugar la identificación de este inventario. Esto va a coincidir con el lugar el ID y la cantidad que se solicita, que se encuentra dentro de este y el pedido que se realizó. Después sumamos esto juntos. Entonces obtenemos el precio total, el precio total. Después hacemos un seguimiento de la cantidad total que va a para este único pedido. Así como queremos pagarle al cliente, yo estaré pagando a los clientes, si el cliente quiere pagar, usted estará pagando no cada inventario por tiempo, sino el monto total. Eso es lo que estoy tratando de agregar y llegar hasta aquí. Entonces al final del día lo guardo todo. Sí, eso es bastante trabajo, escalamos, escalamos a través. Con eso realmente hecho, entonces puedo entonces escoger, luego puedo construir construir y persistir o persistiría. Yo sólo veo esto. Rad y persistir el inventario, San co construir y persistir el inventario, que toma en el TO toma en los inventarios Toma en los ID, cómo ordenar que obtener ID se tarda en atómico largo. Entonces queremos rastrear con log atómico. Entonces Aon no es normal. La razón por la que estamos usando atomic long porque varios podrían estar sucediendo uno, ¿verdad? Esto realmente te ayuda a realizar un seguimiento correcto, ¿verdad? Entonces por eso estoy usando log atómico porque si usas uno normal, te muestro a lo que me refiero. Largo atómico, llama a esto Cantidades. Llama a estas cantidades, y eso es lo que estoy pasando aquí, ¿verdad? Todo bien. Entonces, supongamos que no es un largo solo un largo. ver qué pasa. ¿Ves? Ahora hagamos mucho tiempo. Vamos a limpiar esto. Hagamos cantidad más luego solo hagamos precio total precio total. A ver qué dices. ¿Ves? Variable usando Lambda debe ser efectiva final, ¿verdad? Debe ser final efectivo final porque está usando la expresión Lambda. Como resultado, puedo usar un longus atómico que en realidad garantiza a un tipo porcino Este tipo solo usa pulmón atómico, entonces este puede ser el tipo final si quieres. Eso funciona bien. No creo que sea necesario. Yo solo defino esto como una final, entonces solo miro a no debería y estamos bien. De hecho, hemos podido hacer esto. Hemos podido persistir, y creo que podríamos probar esto, ¿verdad? Tenemos que probar esto que hemos construido hasta ahora, no lo hemos probado. Volvamos en el siguiente video para probar esto realmente para ver qué hemos creado, hasta ahora. Entonces ahora danos una respuesta. Entonces, permítanme construir alguna forma de respuesta por ahora para que porque solo una nueva respuesta. Entonces mensaje, digamos orden actualmente procesada. Entonces di que es código. Vamos a darle uno o dos, ¿verdad? Uno o dos. Seguro que sabes lo que es 12. Volveré en el siguiente video. Eso se lo voy a explicar. Todo bien. Gracias, chicos. Siguiente video. 20. Servicio de pedidos 3: Bien, chicos, gracias por acompañarme. Esto es Z aquí. Bien, entonces, mencionaste, creo que me detuve aquí, uno oh 212 solo significa procesar, ¿verdad Si revisas el código de estado HTP Código de estado, significa que básicamente todos los serbios aceptaron la solicitud, pero sigue siendo de procesamiento público y no está terminada Entonces por eso usé uno oh dos. Se ha procesado. Bien, así que vamos a probar esto. Y cómo probamos esto, ¿verdad? No quiero crear solo crea el controlador con este tipo. El controlador hará este tipo, llámalo orden. Controlador o cable de regreso que persistirá esto como el t. Entonces vamos a descansar controlador requerido constructor, luego el privado, servicio final, entonces vamos a ver Entonces público o respuesta, o entidad de respuesta D de respuesta, entidad de respuesta. Eso es física dentro, luego Creta, luego esto funciona. Usarán un cuerpo de solicitud como cuerpo solicitud y solo lo pasarán DTO TTO, este tipo que DTU Entonces solo regresa una nueva entidad de respuesta de noticias. Entonces éste lleva el paso del cuerpo. Esos serían estos puntos otros DTO, luego HTTP status dots fine Todo bien. Ahora tenemos esto y hagamos esto en post post map it. Vamos a darle un genérico en Quest Quest mapping. Theis debería ser yo solo lo llamo vestir este camino. Vamos a llamarlo orden. Luz, llamémoslo orden. Entonces llamemos a esto directamente, y tenemos lo mismo. Bien, así puedo hacerlo. Esto es un sí. Entonces se trata de solicitudes HTTP. También está utilizando clientes HDD. Los clientes HDB también pueden trabajar para nosotros, así que te contamos clientes HDB clientes HDB Entonces usemos clientes HT. Entonces ya creaste para mí. Entonces esto es que no necesito usar post uno de los trabajos de Coton. Entonces, si usas alguno, te sientes cómodo con él, solo usaré clientes HP. Eso debería en realidad, creo que ya creaste algo aquí. Oh, sí, tengo algo aquí. Así que vamos a usar a este tipo, ¿verdad? Tengo a este tipo. Creo que estaba probando esto antes en el proyecto que construí. Tenemos esto para que podamos ejecutar esto directamente. Por favor, recuerde el nombre. Veamos el nombre. Vamos a L's. Vamos a saber lo que estás escogiendo. ¿Dónde coloqué esto? El proyecto ya está en marcha. Déjame ejecutar mi redacción, vamos a permitir que este tipo siga corriendo en segundo plano. Todo bien. si está listo para comenzar a aceptar conexiones. Sí, está listo. Vamos a darle a esto otra vez. Sí, ahora mismo, saquemos esto. Llevemos esto a un lado, asuma esto. Sí. Tenemos gobernante. Tenemos una regla, tenemos un libro, tenemos un libro, entonces pongamos aquí un lápiz. Pongamos un lápiz. ¿Todo bien? Entonces, si todo funciona bien, si no has roto nada, voy a correr esto. Esto debería pasar esto a la base de datos. Entonces nombre del cliente, mi nombre es Zeko. Bueno, déjame usar mi apodo Z, Z Zico Z o Zeko Vamos a empujar esto y ver qué pasa si no has roto nada No sé por qué tengo esto todavía. Entonces, ¿por qué ya no necesitas esto? No necesito esto. Creo que apuesto algo diferente entonces. Vamos a darle a esto. Veamos qué pasa. Bien. Entonces esta es conexión rechazada. ¿Por qué se niega mi conexión? A ver. ¿Este tipo está corriendo? Espero que no. Uh, ¿cuál es el problema? Así que vamos a confirmar desde la propia aplicación. Oh, lo siento, la aplicación no se está ejecutando. Así que vamos a ejecutar la aplicación. Sé que hay un cliente de Cesippi, así que vamos a ejecutar la aplicación. Bien. Se acerca la aplicación. Bien, así que vamos a golpear esta conexión ya no debería ser rechazada. La conexión no está arriba. Me gustaría aclarar esto en caso de que haya algún error. ¿Verías? Confía en mí, siempre anticipo errores como desarrollador, anticipo errores para que tengas un buen código. Así que solo golpea esto. ¿Qué pasa? Error de Internet. Guau. No esperaba ese tipo de error. Eso es hash, hombre. Los pozos de nivel en serio hash. Bueno, vamos a ver qué pasó. Vamos a la ventana redonda. Entonces qué pasa, no se puede invocar lista porque el valor de retorno, bla, bla, bla, bla Este tipo es nulo. Entonces, veamos a este tipo, tú diciendo que la otra lista de inventario de obtener es no. ¿Cambiaste el nombre? Bien, vamos a confirmar. Entonces usamos inventarios, aquí. ¿Y qué esperábamos aquí? Lista Inventi. Veamos a este tipo. Guau. Este es el tema. Entonces se supone que debes tener lista de Inventure. Inventar lista Sí, así es como se supone que debe verse, ¿verdad? Así que recordemos, esto debería estar bien. Solo recordemos esto el tuyo. Acabo de volver a ejecutar esto otra vez. Bien, todo funciona con éxito. Tenemos un mensaje sobre esto, vamos a confirmar en la tabla de la base de datos. Comprobemos nuestros pedidos. Sólo un pedido. Impresionante. Impresionante. El nombre es EZCow El correo electrónico es testa tester com. Entonces cuál es el evento Eventriy sigue siendo el mismo. Entonces confirmemos la relación. Sí, mira, la relación serpentea. Genial, genial. Esto es genial. Esto es genial, hombre. Es genial. Es realmente genial. Tenemos una relación. Significa este inventario a este pedido Recuerda, este es el primer registro. El número de pedido es 1111. Es la invención, y esta es la cantidad, por lo que podemos entonces al parecer estamos haciendo un seguimiento del precio total. Yo este tipo, más el precio del inventario. Eso es lo que tenemos aquí. Bien, entonces creo que hemos hecho un buen trabajo. Buen trabajo, buen trabajo, buen trabajo. Bien, hemos sido capaces de lograr algo bueno. Todo bien. Terminemos el video aquí. Y cuando volvamos, veamos algunas cosas más geniales. Gracias. 21. eventos: Oigan, chicos, Zico aquí otra vez. Todo bien. Creo que esto se está poniendo interesante. He estado hasta este momento, nos han probado con muy sencillo, estamos explicando muchos conceptos. Ahora hemos podido crear el pedido, hemos podido persistir el inventario de pedidos, poder conectarlo desde la base de datos de inventario, y estamos en un buen lugar en este momento, estamos en un buen lugar. Ahora, volvamos al núcleo de este curso, que son los módulos de resorte. El núcleo de estos cursos, si queremos transmitir datos de uno aunque queramos transmitir datos de un módulo a otro, utilizamos eventos, ¿verdad? Esa es la totalidad de las lecciones. He explicado que la primavera modular nos hace que tengamos que usar eventos De esa manera, si estás desacoplando el servicio y pasando a un proyecto separado por completo, con poca o ninguna configuración podríamos simplemente sacar un micro servicio u otro servicio a partir de eso, ¿ u otro servicio a partir de eso, Entonces eso es exactamente lo que vamos a hacer aquí. Entonces ahora mismo, sin más preámbulos, vamos a crear otro servicio de eventos. El otro servicio de eventos O gestión de eventos. Administración, llame al otro servicio de gestión de eventos , sea cual sea su nombre. Es una gerencia. Es un servicio que cierto vamos a llamarlo servicio. A veces la convención de nomenclatura puede ser. Vamos a llamarlo otro servicio de eventos. Esta es la guía de nuestro evento gestionar. Debería ser un servicio requiere constructor. Usemos un TSLA four J en caso de que necesitemos registrarnos. Entonces ya que estás enviando un evento, ¿verdad? Necesitamos un editor de eventos de aplicaciones. Necesitamos un editor de eventos applici, luego enviemos un evento El otro enviaría un evento al módulo de pagos. Él paga, esta es la orden que se creó, tráela. Entonces en tal caso, el cliente realmente envía, luego va al pago. El pago puede ser recogido y guardado. Ahora bien, ¿cómo harías esto probablemente en el mundo real? En el mundo real para ser un caso de que tengas tus datos en la tabla, los envías. Una vez que lo envías, los eventos eventos van a los pagos, el pago se persiste en la base de datos una vez peristeado en base de datos, luego cuando el usuario realmente completa el pago, por así decirlo, el monto total se paga desde la UI, derecho, con la tarjeta o con alguna forma de pago ¿Correcto? Entonces eso puede activar el servicio de pago. Entonces el servicio de pago puede entonces entrar a la base de datos, recoger el ID como realmente se usa, azotarlo y completarlo, ¿verdad? Entonces estamos transmitiendo eso, ese puede ser el escenario típico que quizás quieras usar. ¿Todo bien? Bien, así que procedamos. Vamos a hacer un pedido completo. Entonces quieres completar la O. Así que en esta ocasión, estarás creando un DTO nos estaremos enviando estaremos enviando un DTO al pago al pago Entonces llamémoslo pago DTO. Sí, estoy deliberando nombrándolo pago. Llamémoslo Otros pagos DTO. Eso se ve mejor. Otros pagos. Entonces parece un puente entre ambos. Otro pago DTO Ordenar pago DTO. Bien, entonces está bien. Entonces lo que entonces hacemos es simplemente llamar al editor del evento, eventos publicados. Publiquemos a este tipo. Hola. Entonces solo publícalo. Entonces, ¿qué contiene este tipo? Probablemente solo haga de este tipo un disco, ¿verdad? Debería ser un disco. ¿Para que sea un disco? Sí, hazlo un registro y simplemente pasando la cadena, o ID y luego pasando las cantidades totales esa cantidad total que realmente usamos el otro llega a usar realmente. Entonces podemos entonces implementar su no necesario. Es como decorador decir. Eso solo implementa eventos de dominio. Eventos de dominio. Verificamos eventos de dominio. ¿ Qué contiene? Es solo de moléculas J. Eso es que en realidad creo. Si haces clic en esto, esto es solo una parte de Jmlecle que estaba cableada con modulados de resorte Entonces solo se usa en la documentación. Lo encontré fantasioso yo también lo usé. Pero esto no es realmente obligatorio, ¿verdad? Sólo tengo que mencionar que no es obligatorio. Bien, así que en realidad hemos podido hacer esto. Entonces le paso la identificación a este tipo. Entonces esto ahora se crea. Entonces esto es WidingT ya no se queja, no hay errores. Entonces eso ya no se queja. Así que vamos a hacer un registro para que podamos usar para rastrear la información de registro. Entonces digamos completar completar otros pagos. Completando otro pago, sí. Con detalles detalles detalles. Grúa. Bien, creo que debería funcionar, ¿verdad? Es decir que estás publicando, necesitamos un oyente. Ese es el punto. Necesitamos un oyente. No podemos publicar sin tener oyente. Debe haber un oyente. Cuando publicamos, debe haber un oyente Vamos rápidamente saltando al servicio de pago y al módulo de pago que quería decir, luego creamos gestión de eventos de pago o gerente o servicio de eventos de pago. Simplemente lo llaman servicio de eventos de pago que gestiona o evento o que escucha los eventos. Ellos solo llaman eventos. O es sentido o escucha. Llamemos a este oyente de eventos, servicio de eventos de pago. Simplemente llaman a este pago. Evento. Servicio, mismo en SLO J al servicio en requiere constructor. Todo bien. Tenemos ese cableado. Para este tipo, necesitamos el repositorio al parecer porque seremos decentes persistentes. Entonces no quiero reventar la burbuja aquí, pero esto es muy clave. Esto es muy importante, chicos, por favor amablemente presten atención. Aquí recibiendo los demás pagos DTO. Los demás pagos DTO. Algo debería venir a tu mente de inmediato. He cruzado modelo, ¿verdad? He cruzado un modelo. Ahora estoy buscando a este tipo y este tipo está dentro del otro servicio, sabes que esto se va a quejar, ¿verdad? Esto definitivamente va a quejarse. Porque sabemos que se va a quejar, sabemos exactamente lo que tenemos que hacer, ¿verdad? Debido a que esto se va a quejar, demuestra que en realidad necesitamos exponer esto es sub paquete. Lo que hicimos por inventario, tenemos que exponer esto, ¿verdad? Así que básicamente podrías simplemente escoger el otro detalle de pago solo y colocarlo al exponerlo porque estos tipos no son usados, ¿verdad? Entonces si te gusta exponer la calidad, pero solo voy a exponer todos los detalles porque realmente no están haciendo nada. Cualquier cosa debería decir reservada o algo así. Así que solo colocaré esto aquí, solo crea los paquetes info Parking ger info, quiero exponer a ese tipo. Yo solo lo llamo a g. Recuerda la interfaz de nombre a la que te diriges, g, spring framework, module it, la interfaz de nombre. Recuerde interfaz debe ser lo que el nombre de la interfaz supongo, que es DTL Esto es. Básicamente esto es todo. Si estás exponiendo, tenemos que decirle al pago que oye, espera un chico de mi parte. Espera algo de mí. Mencionamos que hay que esperar, eso es respeto y cómo se espera en g g el framework de primavera, el módulo el modelo de aplicación, luego las dependencias permitidas, que es una lista, y esto debería estar esperando lo que deberías estar esperando del módulo DTO, luego el sub estado de ánimo D TO Estoy seguro de que está claro chicos. Eso es exactamente lo que hicimos del otro lado y esto debería funcionar adecuadamente. Ahora, antes haríamos algo por mí, solo hagamos nuestra prueba. Vamos a estar seguros de que una prueba no se ha roto, chicos. Recuerda esto es recordar que este es el carbón. Siempre tenemos que probar porque movimos mucha pieza alrededor, así que muchas piezas alrededor. Necesitamos saber si nada se ha roto. Seguro que sabes que esto se rompe, ¿verdad? Creo que ustedes conocen este descanso. No se rompe. Todo bien. Entonces ahora siendo capaz de lograr esto, bien. Pudieron mover cosas porque ya le dijimos a este tipo de dónde viene, va a, y las cosas están bien. Ejecutemos a este tipo aisladamente. Pagos Vamos a revisar la papelera, ya ves. No se espera ninguna dependencia, ¿verdad? Pregunta será alguien que me pregunte, ¿no? Por qué dijiste por qué estás usando la prueba del módulo de aplicación, debería tener la dependencia directa de la pista de arranque. ¿Por qué simplemente no romper? ¿Sencillo? ¿Es la papelera? Si lleva ese servicio, realiza tu psitre si lleva un controlador o lleva un componente, si es un bin sí se romperá Pero si no es una papelera, no se romperá. Volvamos a hacer rápidamente esa prueba. Esto es lo que estamos exponiendo. Vayamos al otro servicio. El otro servicio está marcado como público. Intentemos deliberadamente trasladar esto al servicio de pago. Hagámoslo. Entonces para que entiendas que tiene que ser un servicio para que rompas. No es un servicio, no se romperá, ¿verdad? Eso es lo que en realidad estoy tratando de enfatizar aquí. Vamos a ejecutar esto. Ejecutemos esto, volvamos a ejecutar esto. Para el servicio de pago ahora ahora estamos cableando en una Papelera. ¿Ves? Esto se rompe. ¿Qué dice? Si lo miras correctamente. Módulo, esto depende este tipo y ¿de qué depende? Depende de esto, esto, este, este otro servicio porque es una papelera. Tenemos que obtener la diferencia. Si estás cableando solo en el simple detalle, no pasa nada. Pero si estás haciendo eso, en realidad se romperá. Recuerdo que sabes cómo arreglar esto. Si quieres arreglar esto, quieres cablear esto en solo usas esa dependencia directa de boosra, pero no estamos haciendo eso Yo sólo entro aquí porque ni siquiera estoy exponiendo esto en primer lugar. Estamos enviando eventos, ¿recuerdas? Yo así que estoy seguro que es Claire. Nosotros hemos podido hacer eso. Entonces, volvamos a ejecutar esta prueba, y esto no debería fallar. Toma los yoes. Esa es otra vez, perdón. Esta es otra vez. Mal. Esto no debe romperse. Bien, a través, a través, a través Solo verifiquemos eso rápidamente . No se rompe. Bien. Este video se está haciendo muy largo. Así que he podido hacer algunas cosas críticas aquí, así que volveremos al siguiente video para continuar de lo que paramos. Gracias, chicos. 22. Evento 2: Oigan, chicos. Un placer tenerte de vuelta conmigo. En Angina, cuando en realidad tratamos hablar con nuestros amigos, platicar con nuestros amigos y nuestros compañeros buenos deseos y probablemente conseguir una fiesta. Necesitamos mucha gente. Probablemente estés solo oye mi gente. Oigan, chicos, arte, procedamos desde donde empezamos. Ahora estamos enviando algo del otro servicio, estamos publicando un evento. Necesitamos un oyente. Lo estamos publicando de este tipo. Necesitamos un oyente. ¿Cómo escuchamos? Ahora, hay una regla que se estableció si estás usando módulos de resorte. Si eres si estás tratando de enviar un evento, ahora, piensa en esto. Piensa en esto, ¿verdad? Envías un evento aquí. Entonces esto es algo que es documentación que puede ser un poco complicado de conseguir, pero quiero explicarlo de una manera muy sencilla, ¿verdad? Estás tratando de enviar tratando de firmar un detalle, ¿verdad? Al parecer, esto lleva algunos datos, ¿verdad? Y porque estás tratando de enviar los datos, tiene que ser transaccional, ¿verdad Son los datos transaccionales, ¿verdad? Entonces, porque es transaccional, porque en realidad es transaccional, uh, es más como una canalización, una canalización por la que estás tratando de pasar datos Porque esto es transaccional, ahora la siguiente pregunta que entonces te haces es cuando la estás escuchando, ¿quieres escucharla sincrónicamente Porque los eventos son de naturaleza sincrónica. ¿Quieres escucharlo sincrónicamente? Si escuchas sincrónico, puede pasar cualquier cosa, se puede romper, ¿cómo quieres escucharlo? Probablemente quieras, yo quiero escuchar esto, pero probablemente lo estaré escuchando. Probablemente lo estaré escuchando probablemente usando un oyente de eventos, un oyente de eventos, ¿no usarás un oyente de eventos Quiero usar un oyente de eventos que realmente venga a través, Oh, tenemos un oyente de eventos, Entonces también quieres decir, quiero ser un fregadero, ¿verdad? Para que esto realmente pueda funcionar para que no se rompa en el s. Pero esto realmente te introduce teniendo varias complejidad o quieres usar una transacción un oyente de eventos transaccionales, Quieres un oyente de eventos transaccionales. El punto de escucha de eventos transaccionales en una sincronización. Entonces Spring Modulate ya nos da un alias para todo esto, ¿verdad? Un alias para ayudar a gestionar esto. Y esto es lo que se llama aplicación AT AT. Modelo de aplicación oyente. Un oyente de modelo de aplicación. Vamos a inspeccionarlo. Verás, ahora es una transacción. Yo se enchufa el viejo. Recuerda, la propagación tiene varios de ellos. Utiliza soporte obligatorio requerido. Yo apoya básicamente decir si hay una transacción, por favor use la. Obligatorio solo uno, pero si estás usando requieren nuevo, se cortará de la transacción antigua y creará una nueva transacción para trabajar realmente con. Yo necesitaba llegar tan temprano. Esto crea una nueva transacción en su totalidad que no es que sea diferente del evento que la envía. Con esto hecho, a qué tiende esto entonces solo podemos imprimir. Imprimamos para ver al oyente recibido. Escucha. Recibido. No se recibe, esto entonces, pasemos el pago a usted. Vamos a usar un registro. ¿Por qué estoy usando un sistema que da salida? Vamos a usar un registro. Entonces digamos otros pagos recibidos, es otro pago recibido. Quiero algo en oyente. Tiene algo en oyente. En oyente. Genial. Volvamos a disparar este evento. Veamos si realmente esto recibe los eventos. Tenemos que confirmarlo. Recibir evento, no recibe el evento, entonces, ¿por qué estamos aprendiendo el modo primavera Lo que haría, voy a iniciar la aplicación. Comienzo de la aplicación. Mientras esta puesta en marcha voy a mi solicitud de HTP? ¿Dónde está ese tipo? Yo sólo puedo ir desde el Contralor. Tenemos esto ella siempre está bajo rasguños. Creo que esto. Yo tengo esto. Sólo quiero cambiar esto un poco. Vamos a codificar esto solo cambia tu nombre. Z uno, algo un poco diferente al primer cliente, Prueba uno, Prueba uno, Prueba uno en test.com Mantengamos igual a los demás. Vamos a disparar esto. Veamos qué pasa. Bien. Entonces esto procesa. Vamos a revisar los registros. Vamos a revisar los registros. A vamos a revisar los registros. Entonces o inventario, ¿verdad? Esto pasa por. Entonces este es el orden creado. Creado realmente va. Entonces, eso es todo lo que hicimos. Entonces en realidad tenemos inventarios persistidos, ¿verdad? Esto pasa por. ¿Qué pasa si mi inventario persiste No. Probablemente no me encargué de la identificación. Oh, bien, el inventario uno tras otro. Bien, así que lo dejamos automáticamente. Entonces donde esta mi ¿Dónde está mi oyente? Mi oyente no está llegando. Algo no está pasando, ¿verdad? ¿Por qué no viene a través? Entonces, el número uno, ¿verdad? ¿Por qué no viene a través? Bien, así que vamos a averiguarlo. Muy bien chicos. Todo bien. Lo siento, en realidad estaba un poco distraído ya que pose rápidamente podría dar fe de algo importante, Sí. Entonces aquí, como ves esto. Ahora, tenemos que enviar el evento. Pero antes de enviar el evento, si tenías que dispararlo ahora mismo, lo que hicimos la última vez, esto no funcionó. No podemos obtener los detalles, ¿verdad? Los detalles no pasaron por. Todo lo que vimos fue que vimos esto y podemos ver al oyente solo porque creo que aquí nos falta algo Vamos a absorber esto un poco. Este es el otro servicio que va otro servicio. No he cableado. Aún no voy a llamar a este tipo. Ver, aún no se usa. Se supone que debo hacer esto y hacer esto, luego hacer esto. Yo sólo puedo escoger esto entonces dentro de este tipo. Simplemente haz este pedido completo, llámalo. Se requiere una orden TO. Simplemente llame orden A ordenar A, era demasiado nuevo. Lo que hay aquí, que lleva en la otra identificación, no obtener identificación. Entonces los montos totales, este tipo en realidad da esta cantidad aquí, solo pasa esta cantidad. Sí, ¿cuál es la queja? Ya veo. Entonces, ¿cuál es la queja? Este quiere encordar. Bien, utilicé el otro identificador. ¿Fue el otro identificador? Quiero pasar a través. Déjame pensar un poco en esto. Estoy pasando el otro identificador o quiero pasar en el Quiero pasar en el ID. Vamos a descifrarlo. Sólo el es un poco. Bien. Sí, creo que quiero pasar el otro identificador, ¿no? Creo que ese debería ser el sentido lógico. Identificadores, ti el ID no debería ir probablemente solo porque el pago no sabe nada de la tabla de pedidos, ¿verdad? Entonces el identificador debería estar usando, ¿verdad? Entonces, eso es todo. Yo debería. ¿Qué paso aquí? Largo. Sí, esto debería ser, así es. Debería pasar esto porque el pago no sabe de la tabla o, que es otra modalidad más bien. Yo identificador, puedo usar luego buscar el o en caso de que necesite el otro y similares Entonces empujo esto aquí. Eso es genial. Eso es genial. Empecemos esto empecemos esto, vamos a traer a un tipo, que es el CP. HCP. Sólo lo cerraré para reabrir Llamen a esto dos. Entonces un código es cierto, vamos a darle a este tipo. Directamente. Esto pasó. Vamos a comprobarlo. Impresionante. Ya ves, todos los pagos recibidos en obras de escucha. Esto funciona bien. Esto funciona. Ahora hemos sido capaces de lograr usando eventos. Hemos enviado los eventos desde enviar los eventos. Ahora bien, por qué empiezas a tener esto es un NIO, porque la razón por la que está usando NI porque recuerda que estamos usando pisadas Votales Esto en realidad Nb Votual pisada hoy, nunca comercio virtual, pero no creo que lo haya hecho Pero esto es en realidad básicamente usando NIO, lo cual es genial. Pero cuando comienzas se detiene así, usando uno de impuestos, es decir, no se está ejecutando en la misma pisada. Este tipo no está huyendo. Este es el hilo principal. Todas estas son lecturas separadas, pisadas separadas corriendo en Porque recuerda, cuando lo enviamos este escucha como sincrónicamente, así que no está trabajando en la misma pisada Este es el hilo principal donde entra. Entonces como en el momento en que se despidió la solicitud, se despidió de una lectura diferente esa es la pisada. Se pueden ver los cblets. Esto es cuando inicializamos los cblets entonces esta parte es una pisada diferente el Porque recuerden que usamos ese sinc y somos sincronismo quien básicamente usaba creo un simple ejecutor fiscal si no Creo que esto es que hemos podido hacer las cosas buenas aquí. Hemos empujado un evento desde el otro servicio de administración y el servicio o módulo de pago pudo recibirlo. Yo cosas buenas. Entonces podemos recogerlo del siguiente video. Gracias chicos por quedarse conmigo hasta este momento. Gracias. 23. Simula un evento fallido: Oigan, chicos. Hagamos un poco de limpieza de la casa. Este debería ser un video relativamente corto. He seguido adelante para crear los temas sobre levantarse. Estos son los temas. En servicio, así que solo cablear esto. Rápidamente comete este commits hacer otros servicios ID ocho, ese es el ID. Después fuimos de servicio. Pierde esta identificación. No es un buen mensaje de compromiso, así que lo siento. Veo otro servicio implementado, implementado servicio de eventos o eventos eventos eventos mostrados evento explicado por eventos de otro servicio u otro módulo. Entonces pagos Módem de pagos. Lo siento, no estoy haciendo un seguimiento de esto correctamente, ¿verdad? Así que vamos a hacer esto, hacer algo de limpieza de la casa. Entonces podemos simplemente empujar esto tan cerca a nuestro tipo. Y básicamente debería cerrar esto, ¿verdad? Entonces esto debería haberse ido. Vamos a refrescarnos. Bien, entonces ya no está. Bien. Antes de que rápidamente, se supone que es un video licial Exploremos rápidamente la base de datos. Bien, entonces esta es la base de datos. Ahora, no hemos mirado esta publicación del evento. Ahora, veamos. ¿Ves que hay un registro? Entonces, exploremos esto. Entonces el registro es evento a paso. Recuerden que les expliqué que es posible los datos puedan fallar a la par. Por eso estamos tratando de enviarlo de manera sincrónica. Pero si lo envías como sincrónicamente, las cosas aún pueden salir mal. Entonces, ¿qué sucede cuando realmente despide sus eventos del otro servicio cuando está despidiendo sus eventos? El módulo de primavera hace es que hace una búsqueda constante de todos sus eventos, cerdos eventos desbloquearlos en la base de datos. Esta publicación de eventos. Ahí es donde está. Tenemos el evento CLI que contiene el formato JCN de un evento que es por defecto. Se puede cambiar. Puedes cambiarlo bien, si quieres una parte entonces la documentación, puedes cambiarla. Creo que estoy bien y trabajando con Jason, luego colocando la fecha de publicación, luego el ID de oyente, el ID de oyente es siempre, si miras esto, vamos a ex cerrar esto correctamente Este es siempre el nombre canónico, ¿verdad? Tenemos el nombre canónico. Creo que así es como se llama? Creo que se llama el nombre canónico. Sí, creo que así se llama. Ves que el nombre del servicio está escrito aquí, luego el nombre canónico Si se comprueba el tipo VN, el tipo Vn es un nombre canónico Ese es el nombre canónico como se espera. W es es el paquete, luego el nombre de la clase en sí. Eso es básicamente lo que es. Entonces la fecha de finalización, si no se completa, esta sería. Entonces esto va a ser dial bill pero intentemos simular cuándo va una excepción, cuando realmente ocurre una excepción. Lo que haremos así lo haremos dentro del vamos a enviar los eventos, los eventos de vamos a enviar, luego dentro de los pagos dentro del servicio de eventos luego dentro de los pagos de pagos , solo mostremos una excepción. Simplemente muestre nueva excepción de tiempo de ejecución. Lanzar nueva excepción de tiempo de ejecución. Este campo, este campo. Quiero mostrar la diferencia. Vamos a ejecutar esto de nuevo. Vamos a ejecutar esto de nuevo. Esto en caso de que haya una excepción o que ocurra algo, ¿qué esperamos ver en esa tabla de publicación de eventos? Si esto se pone en marcha, vamos con este tipo. Vamos a correr con estos datos. Volvamos a hacerlo. Yo solo corro con datos tres, luego acabo de recibir estos tres. Entonces solo corre a este tipo. Bien, estas obras. Se mostró una excepción. Verás, lanzamos una excepción de que esto falló. Entonces veamos ahora la tabla de publicación de eventos. ¿Ves la diferencia? Cuando ocurre una excepción, aún obtiene sus datos que se envían registrados. Sin embargo, no está terminado, por lo que esto no se completa. Al menos es la mejor manera buscar o de saber si los datos están completados, si el evento se completa o no, las fechas completadas no se completa para no estar ahí. No lo verás ahí. Solo quería señalarlo porque eso nos dará un gran hito cuando intentemos luego hacer poco de trabajo en torno a esto porque vamos a hacer un trabajo increíble para sacar los datos, luego publicar los eventos. Ya vemos, es una canción preciosa, cosas hermosas que vienen, chicos, cosas hermosas que vienen. Sólo quédate conmigo hasta el final. Simplemente terminemos el video aquí y veamos el siguiente video. Adiós. 24. Crea prueba de integración de pedidos: Hola. Hola ahí. Sí, gracias una vez más por acompañarme. Aquí la señorita Z. Todo bien. Así que hoy, fueron los últimos videos, en realidad simulamos un evento de campo, y somos capaces de ver en la base de datos exactamente cómo funciona eso. Vamos a mostrar rápidamente eso muy rápido. Así que vamos a ejecutar esto. Vamos a ejecutar esto. Bien. Se acerca. Se acerca. Bien, vamos a revisar la base de datos. Veamos los eventos fallidos en la tabla de publicación de eventos. Bien, podemos ver si realidad no se ha completado, esta fecha de finalización sería nula. Todo bien. Para que seamos capaces de hacer. Ya escribimos el otro servicio. Vemos el otro servicio, hemos escrito algunos detalles. ¿Por qué no escribes una prueba de integración para esto, prueba de Ig para esto que solo llamará a este tipo y solo trabajará un poco en ello, verdad? Así que vamos a la cabeza a la vamos a la otra hacer la otra integración. Entonces solo optaré por cablear en el auto cableado en cableado. Solo cableado automático del servicio. Sí. Después dejo en paz el módulo de verificación. Acabo de crear otra prueba. Yo lo llamo solo llámelo una nueva prueba, el nuevo método de prueba. Yo solo diré pruebas solo llámalo prueba. A qué se llama servicio de servicio se llama lo que Cretda. ¿Todo bien? Bueno, acabamos de darle a esto directamente. Y creo que se pueden generar atajos inteligentes de prueba para hacer esto. Sí, pruebas. Sí. Entonces te muestra donde está el nombre de la clase. A ver, el nombre de la clase. No, quiero que esté escrito dentro de Veamos. ¿Puedo escoger? A ver. ¿Puedo escoger cuál? Quiero que esté escrito aquí. Bien. Hablando chico. A ver. O paquete de destino, otro nombre de clase. Llamémoslo O. Creo que debería ser O, integración, integración, prueba, entonces esto crea orden. A ver. Creo que eso debería simplemente entrar, si no me equivoco. Directorio ya contiene clase ODatee. Sí, sí, sí. Sí, sí, sí. Esto es lo que quiero. Todo bien. Todo bien. Vamos a crear un nuevo vamos a simularlo. Todo bien. Entonces, ¿cómo simularías? Solo estamos disparando disparando al otro y obtenemos que este controlador realmente no está haciendo mucho, así que en realidad no voy a probar el controlador. Voy a probar el servicio directamente. Vamos a crear detalles. Vamos a crear los detalles. Vamos a entrar aquí. Vamos a crear este orden DTO DT igual a nuevo orden DTO. Que es lo que espera siempre esperando contra P nombre del cliente. Llamemos a esta prueba prueba Man Test Man. Después el correo electrónico, correo electrónico, solo lo llamo pruebas en tests.com Entonces necesita una lista de lista de acabo de llamar a esa lista integración, ¿cómo le llamaste a eso otra vez? Déjame comprobarlo otra vez. Se llama inventario de inventario solicitud DTO. Llamémoslo solicitar Dtistqu solo puedo usar una lista de cosas, solo meto Entonces crearé Vamos a tener solo tres nuevos inventarios, QuestTo ¿Qué esperas? Se puede esperar un nombre. Solo usemos una regla. A menos que sea la cantidad tres, solo escojamos una madre, un nuevo inventario TO. Creo que hay un lápiz. Yo sólo escojo cuatro. Sí. Entonces así tenemos esto, esto está satisfecho. Sólo llama directamente. Nosotros solo llamamos el make order. Nosotros solo llamamos a la O dejar a este tipo. Simplemente obtenemos la respuesta. Activo Hagamos algunas adhesiones. Hagamos algunas adhesiones. Afirmar conjunto que creo que deberíamos tener el Hamcrest realmente en activo eso es pensar que debería ser activo que es método prostático Ese debería ser él. Usemos la C o usemos el CAPI Esto funciona. Prefiero este Activos de Adhesión. Esto es. Vamos a poner en otro otro punto mensaje es igual, es igual a probar. ¿Qué teníamos? Solo escojamos qué teníamos ¿Qué colocamos en el servicio? Creo que este es este tipo, muestra a este tipo, muestra esto entonces también tenemos otro. Mostramos otro estado de punto. Permite el código es uno o dos. Vamos a explorar. A ver, es par, yo es positivo es positivo. Es positivo. Estapes igual a igual también está bien. Menos igual a uno o dos, uno o dos. Todo bien. Entonces solo prueba de integración solo para estar seguro de que esto funciona, y al parecer esto funcionará. Esto va a funcionar. No quiero matar en exceso la prueba de integración. Yo podría haber dicho vamos a entrar en la base de datos, publiquemos algunos detalles y vamos a estar seguros que la cantidad en realidad es igual. Creo que esto es lo suficientemente justo. Esto es lo suficientemente justo. Vamos a ejecutar esto. Vamos a ejecutar esto así. Esto funciona? ¿Estás seguro de que esto funciona Bien. Entonces vamos a una escena, al mar, al mar, al mar, al mar, al mar. Bien. Sí, las pruebas pasan. Impresionante. Entonces donde establecemos esto realmente funciona y eso funciona con precisión. Como puedes ver eso, así que pudimos hacer precisamente eso. Bien. Entonces tenemos una buena prueba de trabajo. Sí. Entonces, de hecho, prueba de crédito para esto. Si querías probar desde el controlador, eso también está bien. Simplemente prefiero elegir realmente del servicio solo para probar el servicio directamente porque el controlador realmente no está haciendo mucho, así que no quiero probar solo desde ese ángulo, sino que puedes elegir eso y puedes probar desde ahí. Bien. Bien, te veré en el video de la NSTA. Sí. 25. Crea prueba de integración de pedidos 2: Bien, chicos, gracias por acompañarme una vez más. Esto es Z aquí. Todo bien. Yo sólo quiero hacer algo aquí, ¿verdad? Vamos a crear una prueba más. Quiero crear una prueba más, luego discutiremos la siguiente línea de acción para lo que queremos hacer. Todo bien. Entonces la primavera modula, hay una en realidad hay una varianza que podemos usar más como se llama un escenario una prueba basada en escenarios Intentemos simular esto. Intentemos publicar creo que se llama un detalle de pago. Sólo intentemos simularlo. Podemos colocar en un escenario aquí, escenario acario, entonces podemos decir escenario este escenario, el publicar la publicación entonces se requiere de un proveedor porque requiere un proveedor para que podamos hacer un nuevo pedido de pagos DTO, solo simulación Entonces esta requiere otra identificación. Simplemente colocaré en un UID aleatorio, punto UD aleatorio, UUID Cadena aleatoria. Entonces requiere una cantidad larga solo coloco hasta 5,000. Anote. Entonces lo que podemos hacer es que puedas decir que espero. Espero un tipo de evento en particular. ¿Qué tipo de evento? Este mismo tipo de evento, mismo así que queremos esperarlo. Entonces en espera entonces queremos ver si está emparejando. Hay coincidencia, esto también toma un predicado. Esto toma un predicado. Queremos estar seguros de que estos eventos que estamos enviando también este evento tenga un monto que es igual a 5,000. Entonces esta es una buena prueba, luego llegar, luego verificamos, llegamos y verificamos. Entonces también puedes consultar por los eventos, entonces decimos, solo imprime algo, ¿verdad? Yo sólo imprimo algo. Los acontecimientos, eso son montos. Veamos las cantidades que en realidad era . Así que vamos a ejecutar esto. Ejecutemos esto y veamos cómo se establece. Estas que pruebas puedes realizar, ¿ verdad? Entonces este es escenario. Creo que también hay uno de eso que en realidad mostraría el costo de un video en realidad mostrarlo para que no podamos decir exactamente cómo funciona esto. Entonces, si lo miras correctamente, ves que esto pasó, ¿verdad? Y esto en realidad fue impreso. Entonces es capaz de usar realmente. Ahora bien, si aquí cambiamos el valor, vamos a darle otro valor e intentemos ejecutar esto. Verás que no coincidirá con el evento. El evento va a fallar, ¿verdad? El evento fallará porque no coincide con esta cantidad, no coincide con esta cantidad aquí. Estás diciendo que esperen este evento en particular. Una vez publicado este evento, espera a este tipo y trata ver si coincide con esta cantidad. Y si coincide, entonces adelante. Si no coincide, al parecer para lanzar una excepción. Bien ya ves, está esperando porque este tipo en realidad espera, está Está esperando un rato para ver si encuentras algún evento. Hay una sesión de tiempo de espera Entonces, si tuviéramos que aferrarnos a este tipo, teníamos que abrir a este tipo , para abrirlo. Ves este tipo en realidad va resultados de eventos. Si abres resultados de eventos, verificamos de cerca. Si revisas de cerca y si realmente lo reduce, realidad están sucediendo muchas cosas aquí, muchas cosas realmente están sucediendo aquí. Entonces sí, este tipo de evento, ¿cuál es el tipo de evento otra vez? Este es el evento. Volvamos. Regresemos para que pueda rastrear. Este tipo y este evento mecanografiando le pasaron, vamos a marcar la primera opción. Este primer tipo viene aquí. El tipo de evento no será nulo, entonces este tipo de evento escriba este tipo de evento. Veamos el uso. Si te desplazas todo el camino hacia abajo, es como este tipo de aquí. Veamos qué pasa dentro de este tipo. Yo estaba aquí abajo. Yo solo elijo a este tipo para ver el uso de este evento. Entonces si te desplazas hacia abajo, C, a C, este tipo de evento se le pasa a este tipo luego va todo el camino hacia abajo Llega y verifica interno. Veamos qué llega y verificar hace, esta guía interna que realmente usamos, veamos. Después establecemos este punto de resultado anterior en segundo lugar. Lo que realmente estoy tratando de sacar aquí es que hay un tiempo de espera, espera un rato Si no lo encuentra, entonces eliges alguna forma de excepción diciendo decir, no puedo encontrar a este tipo. No pude encontrar los eventos que estás tratando de publicar, así que en realidad luego devuelve un resultado. Eso es lo que estaba tratando de sacar. Uh, así que si comprobamos, aquí hay tantos escenarios que en realidad se usaron. No quiero meternos en esto se supone que es una versión simplificada, así que no quiero meternos en esto. Todo bien. Entonces eso es exactamente lo que pasó. Entonces, si esperas este tipo de evento, publicamos este tipo de evento, ellos lo están esperando. Pero sin embargo, cuando se comprobó, el monto no coincidió. Entonces como resultado, lanzas una excepción. Bien, creo que lo conseguimos g. Bien, así que hagamos que esto funcione de nuevo. Bien. Entonces, el siguiente escenario que vamos a ver ahora mismo es si llegas a mirar esta mesa, realmente puedes mirar esta mesa, vamos a solo g por qué escribió este tipo Se llega a mirar esta mesa. No tenemos acceso a él, ¿verdad? No tenemos acceso a esta publicación del evento. ¿Cómo lo sé? Si tuviéramos que hacer una búsqueda de publicación de eventos, publicación de eventos. Esta publicación del evento. Publicación de eventos. Estoy tratando de buscar en clases, publicación de eventos. Ves esta publicación del evento, te darías cuenta si intentas crear realmente una instancia en la que realmente no puedas crear un instante. Básicamente, puedes modelar ese camino. ¿Por qué es eso si tuvieras que verificar la implementación? Verás que hay un adaptador de eventos JPA. Si tiene que verificar esto, si tuviera que verificar esto, me desplazaré hacia abajo. Uh, bien, creo que quiero hacer básicamente, vamos a ir a la biblioteca. Esto es exactamente lo que estaba tratando de mostrar. Vamos. Sólo para ser muy directo. Vamos a ir a así Monolith JPA, eso es lo que estoy buscando. Los Monolitos JPA, sí, Monolitos API a la luz de la luna eventos Bien, Sara JPA, ¿y nosotros? Bien, entonces probablemente debería Mdolit eventos JPA. Creo que eso es lo que estoy buscando. Así que mira la implementación del GPA. Todo bien. Ahora mira esto. ¿Ves? Esta es una clase, entonces no hay público, por lo que no es accesible. No se puede acceder a él. Entonces la forma que fue escrita no es accesible. Si nos fijamos en esto, tampoco es accesible. Verás, no es accesible. La forma en que fue construida no fue construida para que tengas acceso a ella. Pero la pregunta sería entonces, ¿cómo tengo acceso a ella? ¿Cómo tengo acceso a él? Hay algunas formas, en lugar de tener acceso a él, proporcionaron algo llamado incompleta del evento y publicación completa del evento. En realidad veamos eso. A ver eso, a ver eso, a ver eso. Hay una publicación completa del evento que puedes evaluar. Esto está disponible. También hay una publicación incompleta del evento a la que puedes acceder. A pesar de que estos son geniales, quiero mostrarnos un enfoque diferente para reflejar realmente esa mesa con JPA Eso lo podemos hacer. Bueno, al final del día todavía volvería a usar esto. Pero antes que nada, veamos exactamente cómo podemos reflejar esta tabla. Esta tabla la mostramos aquí en JPA para que podamos tener acceso completo a ella y hacerle algunas cosas personalizadas si pretendemos Esto viene en el siguiente video. Todo bien. 26. Tabla de publicación de eventos modelo: Todo bien. Muchas gracias por acompañarme. En el último video, hablamos sobre modelar la entidad JPA, y eso es exactamente lo que estamos haciendo, ¿verdad Estamos modelando la entidad JPA, ¿ y cómo vamos con eso Lo que haría es crear el paquete. I c el paquete. Vamos a llamarlo vamos a llamarlo publicación de eventos. ¿Qué estoy haciendo? Vamos a llamar a este paquete. Publicación de eventos. Tenga en cuenta que esto no es esencial del curso, pero en realidad es, solo quiero mostrar esto para que en caso de que esto también sea una técnica cuando estás trabajando estamos tratando de construir un nuevo servicio para reflejar una base de datos existente, esa tabla o probablemente ese servicio que creaste no tiene no creó la tabla de base de datos desde cero, también es una forma de que puedas hazlo. Eso es lo que estoy tratando de mostrar aquí. Al mirarlo críticamente, ves las columnas, aquí es donde están las columnas tienes que crear realmente este mismo espejo exacto. Entonces eso es lo que vamos a hacer. Para evitar confusiones. Lo que voy a hacer para evitar confusiones, lo que voy a hacer es que voy a llamar a esta costumbre. Publicación de eventos personalizados, Publicación de eventos personalizados. Esta vez, también usa nuestro Ga, el setter de fiador entonces usaremos a to string en caso de que lo necesites, luego para obtener una entidad, luego una tabla En esta tabla se aseguraría que coincide con el nombre de esta tabla. Esa será la publicación de subrayado de evento. Derecha. Ahora para entonces asegurar que estas cosas sean las mismas. Ahora bien, si miras el ID correctamente, cuando lo mostramos por aquí, el ID es un UUID No es un largo o es un UID, así que tenemos que asegurar eso también Tenemos una identificación UUID privada, ¿verdad? Entonces tenemos esto arriba para inspeccionar. Vamos a traerlo de forma manual. Eso debería ser entradas, entradas, Java, T, UUID Entonces también tenemos el siguiente es el identificador de oyente. Tenemos datos de finalización de ID de oyente, solo vamos a anclar todo Cadena privada privada, escucha escucha ID. Recuerda, esto en realidad se traduciría a un oyente que se llama ID, así que es bueno que lo dejen así Entonces tenemos eventos privados tipo. Tipo de evento. Esto se traducirá al tipo de subrayado de evento Entonces tenemos cadena privada. Entonces esto es serializado eventos serializados. Recuerde ser traducido a eventos de subrayado serializados. Entonces tenemos privado. Ahora bien, esta es una marca de tiempo. Entonces razón postgress solo usamos lo mismo, timestamp Entonces a esto se le llama fecha de publicación. Se llama fechas de publicación, fechas de publicación. Derecha. También, por último, tenemos fechas de finalización. Así que olvídate esto de aquí. Fecha de finalización. Este tipo está diciendo: Oye, no entiendo, necesito la identificación. ¿Atributos de ID tipo? ¿Cómo quieres que sea una c primaria? Te doy los atributos ID de persistencia Jakarta, luego usamos el valor de generar para simplemente reflejar la estrategia, luego generar tipo generar tipo de identidad. No, no, no, UID, perdón. Pero Ising UID. Esto básicamente solo lo refleja. No estás generando porque nunca vas a crear nada desde aquí directamente, ¿verdad? Entonces la identificación probablemente debería bastar. Esto lo podemos reflejar en. Entonces puedes crear el repositorio, repositorio. Ahora bien, la pregunta que deberíamos hacernos es, ¿cómo identificamos cómo identificamos un evento terminado? Un evento terminado es aquel que tiene fecha de finalización, no nulo. ¿Por qué un evento incompleto tiene la fecha de finalización para ser nulo? Exactamente lo que vamos a hacer aquí. Vamos procedimiento. Llámenlo eventos personalizados. Eventos, publicación, repositorio. Luego se extiende. No, quiero crujido Explico por qué no uso JPA excepto necesario. Siempre debes usar lo que necesites. No uses todo. Usar JPA trae demasiadas cosas, ¿verdad? Excepto que quieres la paginación y el aguijón, quieres las otras cosas que realmente traen Entonces quiero que sea un repositorio. Entonces usaría una lista lista, eventos personalizados, lista. no me va bien. En esta ocasión, usaré una carpa obtener eventos personalizados obtener eventos personalizados obtener eventos personalizados para entonces por fechas de publicación, por fechas de publicación, no, no, no, publicación. Probablemente fechas de publicación, uh, no nulas, no nulas y fechas de finalización, fechas de finalización y fechas de finalización es nula. Es nulo. ¿Qué significa esto? Automáticamente, si la fecha de publicación que conocemos nunca es conocida y la fecha de finalización es no, significa que esta es lista es una lista de eventos incompletos. Para los eventos concluidos, solo hacemos lo mismo, pero esta vez, es este tipo lo que no sabe. Y así es como. Eso es. Si lo necesitas, así es exactamente como se ve. Así es básicamente como se ve. Entonces si quieres crear digamos una interfaz, el solo crea un servicio, solo miror estos dos, y eso funciona Simplemente creamos interfaz, una interfaz. Yo solo lo llamaré eventos personalizados, publicación, servicio. Esto me va a dar dos cosas. Tengo dos firmas. Número uno, será una lista lista de publicación de eventos, publicación de eventos personalizados. Pero esta vez por ahí lo llamo se completa se completa completa las publicaciones de eventos terminados. Después el otro se completa con publicaciones de eventos. Básicamente, eso es todo. Entonces vamos a crear la implementación. Implementación, habrá publicación de eventos personalizados, servicio inp entonces solo implementamos a este tipo, lo hacemos al servicio a los representantes a lo requerido como constructor Entonces solo trae a este tipo, vamos a implementar los métodos, luego vamos a cablear en la final privada, luego personalizado fuimos a postular este tipo solo entra y solo nos da los puntos terminados es nulo Entonces este tipo está terminado. Eso no se sabe. Esto funciona. Un buen escenario de prueba sería vamos a hacer una prueba de crédito para ello. Vamos a comprobar si lo que hicimos es exacto o estos precisos. Vamos a prueba de crédito. Llámalo eventos personalizados, evento personalizado. Vamos a llamarlo publicación de eventos porque al parecer es publicación de eventos, pruebas de integración. Prueba de integración. ¿Bien? Sí, eso es que tiene lo que necesitamos. Recuerda, debemos hacer exactamente lo que vamos a hacer para que en realidad no nos encontremos con problemas. Número uno, quiero colocar en la prueba del modelo de aplicación. Entonces tengo dependencias? No creo que tenga ninguno por ahora. No tengo dependencias. Luego conectemos al servicio de eventos con cable automático y luego personalizado. Entonces hagamos prueba para ambos para estos dos tipos. Llamemos al primero. Obtenga la publicación del evento sin completar. La publicación. Perdón por eso, chicos. Eso fue solo una llamada que venía en mi celular. Todo bien. Bien, entonces vamos a explorar esto. Bien, entonces pruebas de publicación, ¿verdad? Se pone bien. Esto funciona. Simplemente lo llamas nulo. Después pruebas. Entonces solo toma esto, luego trae a este tipo. Entonces llamemos al servicio. Eso se pone entonces esto Bien. Entonces entonces queremos conocer algunos detalles, solo hacer incompleto este incompleto, luego lo hacemos incompleto luego lo hacemos Entonces para cada uno, solo para cada uno. Pero cada uno de los eventos incompletos, lo llaman evento evento Entonces vamos a aseverar algunos detalles. Deberíamos funcionar para que podamos activos directamente. Podemos activos que dije que este evento este evento, C aseverar que los eventos Este evento es una instancia, derecho de publicación de eventos personalizados clase punto Sí, vamos a mostrar esto. Entonces también, también podemos afirmar que el evento de eventos, evento obtiene fecha de finalización Estamos seguros de que estas obtienen fechas de finalización, Inu INO. Es nulo. Guau de esto funciona. Eso también es prueba para el otro tipo. Yo solo escojo esto y solo voy a cambiar algunas pruebas y se completa la publicación web. Por lo que está terminado, eventos concluidos. Esto también es un instante, pero esto no es nulo, no es nulo. También mostramos para ambos. Esta debería ser una prueba suficiente que podamos evaluar a este tipo. Ejecutemos esta prueba y veamos. Ojalá no tengamos ningún problema. Vamos a ejecutarlo veamos qué pasa. Pasando por correrlo, China, Mar de China, Mar de China. ¿Somos capaces de hacerlo con éxito? El primero pasa. El problema que tenemos es la prueba concluida. ¿Cuál es el problema con la prueba terminada? Real no se sabe. Lo sentimos, fecha de finalización. A ver. Lo siento, esto debería completarse, completó el número. Vamos a ejecutar toda la prueba. Eso es en toda la prueba, terminamos, se debe terminar eso debería ser cierto. Debería ser capaz de conseguir que todo sea verdad y debería funcionar. Esos son los males de copiar y pegar. Los chicos no copian y pegan. Prueba tan completa, ¿cuál es el problema con esto? Esperando que real no sea nulo, pero esto se sabe, ¿ o esto es nulo? La fecha de finalización no es nula. Estamos muy seguros de eso. Déjame volver a lo que hice aquí, terminación vamos a codificar aquí. ¿Obtuvimos la fecha de publicación del evento no es nula y la fecha de finalización no se conoce Este es el tema aquí, no se sabe. Males de copiar y pegar. poder compartido significa eso. No es nulo. Entonces ya que vienes de la positi así que tenemos que saltar en lo que conseguimos no es nieve esto es lo que debería ser usado Bien, así que creo que aún estoy escogiendo lo incorrecto. Esto no es nulo. Mm hmm. Sí, sí. Esto es lo que debería estar escogiendo. Entonces ese era el tema ahí. Bien, así que volvamos a ejecutar esto. Todo bien. A ver. Ojalá, ya no hice un error tipográfico o probablemente escogí algo equivocado en alguna parte porque básicamente debería funcionar Todo bien. Verás, ejecutando esto, manejando esto. Sí, estamos en condiciones de completar esto. Todo bien. Así que estamos en condiciones de completar esta fase para ver exactamente cómo lo hacemos. Voy a estar usando esto para cometer dos temas diferentes diferentes. Hemos creado para otra integración también colocar en Voy a llamar a este modelo de tabla de publicación de eventos de publicación. Entonces, ¿qué tiene esto disponible? Recuerden que mencioné, chicos, básicamente pueden entonces hacer paradas con él. Se puede mirar a través del público sobre los eventos para monitorear los eventos completados, evento no calculado. En realidad, incluso se puede conseguir algo mucho más. Simplemente no quería mencionarlo antes. ¿Cuáles son los ts extra que puedes obtener? Los ts extra que puedes conseguir recuerda, Ya sabes cada uno. Estás familiarizado con cada uno. ¿Cuál es la identificación de escucha? Ese es el tipo de evento, lo siento, evento. El tipo de evento es siempre el nombre cun canónico de lo que intentas hacer del evento que intentas enviar Entonces estos nombres canónicos c, deberías saber, Oh, esta es la otra salida. Si tuvieras múltiples, puedes consultar cuáles quieres enviar. Digamos que tienes una lista de correos electrónicos, una lista de correos electrónicos que realmente envías. Pero como se sienta, ¿verdad? Puedes simplemente uh filtrar por los correos electrónicos, luego los enviamos, y los eventos en realidad serán resentidos cantar los dos métodos que mencioné anteriormente, las publicaciones incompletas del evento, y la publicación del evento completado, puedes usar cualquiera de ellos. Estaremos viendo más de eso en el siguiente video, o debería decir videos posteriores porque definitivamente vamos a explorar eso. A para este video, vamos a comprometernos rápidamente con esto. Comprometamos esto rápidamente. Comprometerse AM. Entonces tenemos solo digamos creación o creado o prueba de integración, luego da a conocer diez y luego modelar la publicación de eventos modelo Mesa de cationes. Esto cierra 11. Todo bien. Creo que esto es bueno. Todo bien. Acabo de terminar el video aquí y para cuando volvamos, voy a empujar esto para que el reposito los vea chicos en el siguiente video 27. Acción de eventos: Hola chicos, gracias por volver conmigo. Esto es Z. Si. Quiero discutir un escenario muy singular de lo que vas a construir en este video. Este video en realidad tendrá un escenario muy singular. Ahora, recuerde, mientras intentamos crear el, estamos tratando de enviar el otro evento, creamos un DTO llamado O Payment Dt Ahora considere que tenemos otras implementaciones u otros eventos, lo que sería considerable considerando un evento más aquí, que es el evento de correo electrónico. Entonces tenemos otro evento. Ahora bien, el escenario básicamente es mirar esta tabla, mirar la tabla de publicación de eventos, sabemos que esto en realidad se encuentra por el nombre canónico, por nombre canónico ¿Y si tenemos una forma de clasificar? Tenemos una forma de clasificar. Podemos identificar los eventos que enviamos y podemos usar probablemente un um para identificar, para cada evento que esté fuera tipo correo electrónico o cada evento que sea de tipo, el otro pago DTO, quiero que vuelva a intentar para el evento de campo ¿Puedo considerar ese escenario? Entonces ese escenario estará explorando. Significa que necesitamos poder crear un um, al mismo tiempo, poder vincularlo realmente para crear um, luego vincularlo al nombre canónico de ese evento Entonces podremos recuperar eso. Puede ser una tabla de caché. Entonces podemos recuperar eso. Entonces usa eso para consultar esta guía, o luego usará eso luego pasarlo evento incompleto al evento incompleto para poder hacer algún trabajo. ¿Qué estoy tratando de decir? Ya ves que se acerca este escenario si tuviéramos que explorar, entremos en el otro servicio. Vamos a explorar esto. Exploremos esas dos interfaces. Entonces entiendes mejor lo que estoy tratando de sacar. Digamos que el código es definitivo. Esto es publicaciones de eventos terminados, publicaciones de eventos terminados. Entonces tenemos la otra variante, las otras variantes, que es la publicación incompleta del evento, la publicación incompleta del evento. Publicación incompleta del evento. Ahora, vea que la publicación incompleta del evento toma algo muy único. ¿Ves? En realidad toma en un predicado. Se puede pasar en un predicados. decir, podemos decidir decir, este predicado, queremos que este predicado sea de tipo Queremos que sea de tipo. Verificaríamos a través del tipo de evento para asegurarnos de que el tipo de evento realmente coincide con el nombre canónico de los eventos que enviamos, ¿ Entonces sé que esto podría ser un poco complejo lo que estoy tratando de explicar, ¿verdad? Pero yo solo quería dar un trasfondo mientras saltamos al código. Entonces este podría ser un video bastante largo, ¿verdad? Así que en realidad podemos conseguir esto de una sola vez. Oh, si encontramos un muy buen hito para llegar a terminar el video, entonces continuaremos en el siguiente. Bien, vamos a meternos rápidamente en ello, chicos, y hagamos que esto funcione, ¿verdad Es una cosa genial increíble, ¿verdad? Hagámoslo funcionar porque va a ser una implementación muy agradable. Todo bien. En primer lugar, comenzaré con, crearía un paquete, un paquete llamado acción de eventos porque estamos apuntando a los eventos, ¿verdad? La acción del evento. Entonces en realidad estaría creando una tabla donde se va a almacenar obtuve una tabla llamada acción de eventos. Estaremos almacenando el enlace almacenando el enlace entre el tipo de acción, que será el e. Recuerde el tipo de acción básicamente serán los eventos que enviamos, ya sea los eventos de correo electrónico u otro evento de pagos o cualquier otro evento como los eventos más en proporcional, debería decir directamente relacionado con el nombre canónico de ese De esa manera, si podemos obtener el tipo de eventos, podemos simplemente recuperar el nombre canónico de la base de datos, y luego podemos usar eso como predicado en la publicación incompletada, la publicación del evento completo, podré activar realmente el podré Vaya, esto va a interesarle. Bien, hagámoslo. Esa es entidad, una entidad, en Gea at ce, ¿por qué digo servicio? Hielo una mesa. Sólo me interesan los índices. Índices, volvería aquí en un rato. Simplemente espejear rápidamente solo crea rápidamente este ID como de costumbre, entonces va a ser un valor generado. Entonces la estrategia será para nosotros ID. Una identidad, quiero decir identidad. Entonces vamos a estar usando un largo, usando un largo, largo, entonces vamos a estar usando una acción de acción privada. Estaremos definiendo la acción en un momento. Entonces en columna en columna, la longitud solo sería dos. La longitud será de dos, dos. Está bien. Porque recuerden, basándonos en los noms que creamos, teníamos la capacidad de usar un conversor de tipos, que en realidad mostré en los videos anteriores, ¿verdad? Después privado, entonces voy a llamar a esta cadena. Vamos a llamarlo evento. Nombre canónico. Nombre canónico es este. Este es el nombre cónico. El nombre canónico es este el nombre completo de Caronica, y eso es exactamente lo que realmente quiere salir . Todo bien. Entonces una columna, entonces llamamos a esto aparentemente ambos no deberían ser falsos este este nombre Llamemos al nombre Yvette Can, YvetTK . Esto está bien. Ahora, hemos creado esto. Entonces queremos crear un sub paquete llamado action. Esta acción no contendría entonces contendría la clase de acción que necesitamos acción, va a ser un um, va a ser una enumeración, luego aparentemente un constructor y getter de OlaX Entonces por ahora, vamos a estar viendo el pago, los pagos. Entonces los pagos, llámalo P, luego el correo electrónico, llame al código E, ¿verdad? Al igual que hemos estado creando todos los eventos, todos los nums que hemos estado usando código de cadena Código. Entonces sí. Quiero crear un método especial aquí para que obtengamos algo muy chulo. Llamemos a esto público no sé si vamos a necesitar un nombre italiano, pero vamos a conseguirlo. Probablemente obtenga acción por su nombre. Pasar el nombre de cadena final en un nombre de cadena. Luego giramos como stream, dottream luego action values, los valores, action on the values, then the filter, then the action, then action dot name dot equals ignoKase then we pass this name that we pass this name that Entonces encontraremos primero, encontraremos primero, o de lo contrario sé bien Ar llamemos a esto Final. Bien, entiende la diferencia, ¿verdad? El código, este es el código. El nombre es este, este es el nombre. Si lo haces para encordar un um o haces un nombre, esto es lo que obtienes. Pero el código es este, entonces hay una diferencia, hay una diferencia. Quiero esto, no esto. Todo bien. Vamos a crear el convertidor de tipos. Lo siento, voy los créditos dentro de esto. Vamos a crear el convertidor de tipos. Llamémoslo acción acción convertidor. Gracias solo llámalo tipo. Está bien. Está bien como acción porque hay varias cosas que quiero hacer con ella, ¿verdad? Vamos a crear el convertidor de acción. Al parecer, sabemos que en realidad implementará para implementar el convertidor de atributos. Convertidor de atributos aquí, entonces lo hacemos para que no necesitemos colocar notación. Entonces solo haz que Auto aplique cierto, entonces solo obtenemos esto y aparentemente, eso es lo que tenemos. Entonces solo haz esto simple I Acción. Eso es acción. Acción. Si la acción no es nula. O si la acción es nula, cualquiera que sea la acción que funcione, es nula, simplemente rellene Cierto. Nueva excepción de tiempo de ejecución vendría cambiar todo el tiempo de ejecución? Cuando realmente empezamos a tratar con excepciones, esto funcionaría entonces correctamente. Entonces esta acción es nula, entonces si no lo es, entonces giramos. Acción Uh, eh, consigue código, ¿verdad? Sí, ese es el código. Entonces estaremos usando el código en el DV. Entonces para esto, hacemos lo mismo para decir que código. Entonces, los chicos de Bell me mencionaron que este sería un video relativamente largo o simplemente buscamos un buen hito. Entonces no es así que van a hacer una corriente de carreras, luego valores de acción, los valores. Uh huh, filtro de puntos, sin filtro, filtro, la acción, luego acción. punto de acción se pone bueno, eso es igual, puede señalar mayúsculas y minúsculas o simplemente iguales para ser lo mismo. Entonces bien primero o bien cierto. Bien primero o bien, cierto. Una vez. Acción no encontrada. Esto está bien. Todo bien. Hacer buenos avances, hacer buenos avances. Hemos hecho cosas muy buenas, muy buenas cosas. Ahora bien, ¿cómo identificamos qué evento? Cómo vinculamos esta acción de evento a estos eventos DTO u otros detalles podrían ser creados otros detalles del evento se crearán Lo haría en tiempo de ejecución o al inicio, quiero poder enlazar Quiero poder recuperar este nombre armónico dinámico No quiero hacer ningún trabajo manual, debería ser dinámico. Lo que voy a hacer es crear un marcador. Voy a crear un empacador personalizado. Llámalo marcador personalizado. Solo crea un marcador de evento personalizado, ¿verdad? Si estás familiarizado con saber si estás familiarizado con cómo crear validaciones personalizadas en botas de primavera, esto es exactamente lo que estoy tratando de hacer En esta ocasión, usa una interfaz artística. En la interfaz. En la interfaz, entonces usas la palabra documentada en objetivos, objetivos. Ahora, ¿a qué nos dirigimos al tipo de segmentación? Un tipo de objetivo, luego a con tensión. Entonces, ¿a qué nos dirigimos? Tiempo de ejecución. Queremos que sea política de tiempo de ejecución. Esto funciona, así que solo puedo hacer esto. Creo que prefiero esto. Uh, hay tantos de ellos. Creo que solo método estático método estático. Método postic. Tengo tantos tipos. Voy a buscar C. Bien, supongo que sólo voy a ir a los formularios. Se supone que es Java pulmón entonces tipo elemento. Yo sólo quiero colocar el tipo aquí. Si elimino esto, sí, elimino esto y solo digo elementos, luego tipo puntos tipo que debería funcionar, eso debería funcionar. Todo bien. Uh Muy bien. Bien, entonces esto funciona. Entonces solo para colocar el tipo de elementos, el tipo aquí, y eso debería funcionar. ¿Correcto? Eso debería funcionar. ¿Por qué no está bien en ella? A ver. No encuentra ninguna. Veamos entradas, Java, long, notación, tipo de elemento, tipo. Bien. Entonces de todos modos, ya que ya tenemos este solo uso. Yo solo quería dejar tipo elemento tipo o tipo. Esto básicamente una costumbre, si quieres crear una validación personalizada. Podría decir, ¿cómo sabía esto? Echemos un vistazo al controlador, Controller , si nos fijamos en el controlador chicos, ya veo, tiene básicamente lo mismo. Básicamente es lo mismo. Entonces tiene lo mismo, es por eso que los componentes en Springbook incapaces de escanear para poder saber, esto también es un componente porque en la raíz de todos estos chicos, todos son componentes Revisas el controlador, ¿ves? Componentes. Todos son componentes. Es capaz de escanear en busca de componentes. Entonces es componentes que busca. Así que básicamente en el controlador al servicio en postulación, todos estos tipos son algo el componente en segundo plano, ¿verdad Exploremos también el repositorio. ¿Ves? Ese es nuestro componente de componentes, el bagram cuando tienes el escaneo de componentes ejecutándose, solo busca cualquier cosa que realmente tenga el componente Entonces, lo mismo que en realidad estoy tratando de lograr aquí, ¿verdad? Entonces, en realidad haz esto para que realmente escaneemos. Pero en esta ocasión, estaremos haciendo el escaneo. Estaremos escribiendo el código para escanear y encontrar esto nosotros mismos. Todo bien. Entonces tenemos esto. Entonces quiero traer una acción, ¿verdad? Es la misma acción. La misma acción um, ¿verdad? Yo lo llamo acción de evento. Acción del evento. Sí. Entonces este es el marcador personalizado que quiero crear. Entonces escogeré este marcador personalizado. Voy a elegir el marcador personalizado. Entonces voy a elegir el marcador personalizado, después iré a mi otro DTU de pago luego voy a comercializar, ¿verdad Voy a comercializar. Entonces ya puedo practicar. Impresionante. Ya puedo practicar. Y como ves, tenemos el evento acción evento acción. Entonces quiero que sean pagos de acción. Entonces, lo que significa que este es un evento que se desencadena para los pagos. Ahora cuando miramos el correo electrónico también hacemos lo mismo, pero esta vez, voy a ser para probablemente correo electrónico. Todo bien. Entonces ahora que hemos hecho esto, ¿esto es suficiente para que lo localicen? No, no hemos terminado. Recordamos que creamos todo esto y es una implementación personalizada, así que necesitamos crear realmente todo el código personalizado para ello. Entonces bien, antes de continuar, vamos a crear rápidamente el repositorio que necesitamos por aquí, el repositorio para este tipo, ¿ verdad? Repositorio de eventos. Eventos eventos, acción, epoctent action epoct. Entonces extiende, creo que acabamos de terminar el video después de esto para que podamos consumir y el siguiente tipo. Entonces es un largo, es un largo. Entonces es epocty, debería haber una interfaz. Interfaz. Somos una interfaz. Entonces creo que Moline solo necesita un tipo para ser una acción de evento opcional, opcional Entonces no estoy encontrando por esto, necesito una costumbre ya que obtenemos evento acción por acción. Sí, eso es lo que necesito. Entonces debería ser acción acción. Bien. Entonces, creo que aquí hemos llegado a un buen hito. Entonces esto se está poniendo muy, muy jugoso, chicos. Volvamos en el siguiente video para explorar realmente un poco más para hacer algo más de implementación. Gracias, chicos. Viendo el siguiente video. 28. Acción de eventos 2: Muy bien chicos, gracias por acompañarme una vez más. Esto es Z aquí. De hecho, nos detuvimos cuando intentamos definir la acción del evento. Si realmente ves el último video, por favor mira el último video porque eso explicaría exactamente lo que estamos tratando de lograr aquí. Simplemente procederemos a la configuración. Vamos a crear una configuración personalizada, una configuración personalizada, una configuración personalizada. Así que un archivo de configuración personalizado, ¿verdad? Esto básicamente implementaría un ejecutor de aplicaciones. Se puede implementar una aplicación. El ejecutor de aplicaciones funciona de la misma manera. ejecutor de aplicaciones funciona de la misma manera, un corredor de línea de comandos funciona. Se puede utilizar entonces complicación corredor línea corredor. Hacemos lo mismo, requerido como constructor. Vamos a implementar el corredor. Runner de aplicaciones, entonces voy a estar trayendo en el repositorio privado de eventos solo privado, luego repositorio. Bien. Entonces, ¿qué estamos tratando de lograr aquí? Bien, así que vamos a seguirme en detalles, chicos, entonces harían algunas cosas geniales aquí. Ahora, escanearíamos a través de los proveedores, escanearíamos a través de los proveedores o básicamente escribiríamos código. Para buscar cualquier clase que tenga este marcador personalizado. Busca cualquier clase que tenga su marcador personalizado. Cuando encontramos la clase que tiene su marcador personalizado, entonces en realidad escogeríamos cada una de ellas, obtendríamos el nombre canónico, luego link, link ese tipo de acción, el tipo de acción de este marcador personalizado, luego con el nombre canónico en la tabla Eso es lo que queremos lograr aquí chicos. Eso es básicamente lo que queremos lograr. Comience, está utilizando el proveedor de escaneo de piezas de clase. Sí, voy a estar usando este tipo sanser luego proveedor o Callicanna Creo que me gusta proveedor mejor proveedor Proveedor Gracias, completa. Esta debería ser nuestra clase de marcador de eventos personalizada. Ahora bien, esto es lo que estamos buscando. Estamos filtrando para este tipo en particular. Luego creamos un conjunto de definición de Bin porque al parecer para ser una definición de Bin se convierte en una definición de Bin. Tenemos una definición de Bin. Vamos a llamarlo Definición de bin, vamos a Enlazar Luego escogemos el proveedor, después lo encontramos dentro de un conjunto de paquete o el paquete. ¿Cuál es el nombre del paquete en el que estás ejecutando? Te estás ejecutando en ven Z, mod de primavera costo esto es lo que necesitamos, haz clic en este tipo. Sí, esto es lo que necesito. Z, muelle modular cos Todos llegando a alguna parte, chicos. Bien, bajemos. Entonces buscaremos tu. Veamos tu definición de haz, definición de bin. Eso es genial. Definición de bin. Entonces comprobamos si la definición de Bin es instancia de una definición de ser anotada Recuerda, estamos usando esa anotación. Entonces, si es una instancia de definición de ser anotado, eh, ¿entonces qué seguimos Recuerda a este tipo, llamemos a este conjunto, así que vamos a convertirlo en un Bind Si lo es, entonces llamemos al mapa. Los objetos de cadena de mapa. Cadena a objetos, entonces llamarlo atributo anotado porque ese es el acto que exploramos que no es así? Llamémoslo debería ser, debería ser anotado nate anotado Siendo definición. Siendo definición. Entonces en realidad lo estamos lanzando. Lo estamos lanzando. Aquí, esto básicamente vamos a llamarlo y. Llamémoslo a una nota mapa de atributos, atributos. Atchfootmp. Todo lo que sé esto puede parecer un poco nuevo, pero dirías lo que quieres lograr. Entonces obtenemos los meta datos. Después puntos obtiene los atributos anotados, atributos anotados Después pasa en el binning, que es el marcador o clase personalizada Entonces punto obtiene nombre canónico. Creo que esto tiene sentido ahora, chicos. Obtiene el nombre canónico. Ahora que he conseguido el nombre canónico, necesitamos almacenar todos los detalles dentro un mapa porque necesitamos de todo dentro de un Este es un mapa de cuerdas y cuerdas. Cadena de cadena, llámalo mapa de acción de eventos, un nuevo mapa hash. Entonces eso está hecho. Hemos sido capaces de lograrlo. Luego escogerán el mapa de eventos. Los puntos ponen, y luego ponen el mapa anual thetiute que hemos conseguido Dots obtiene Te preguntas de dónde viene esta acción de evento. Esto es Esto viene de aquí. ¿Dónde está otra vez? Aquí. Lo siento, aquí, acción del evento. Buscas dentro de la clase de marcador personalizado, buscas este nombre, el campo que tiene este nombre. Y eso es exactamente lo que necesitamos. Entonces busca eso. Entonces después de conseguir eso, entonces vamos a moverlo a tostring. ToString. Entonces definición de Bin que hemos conseguido aquí como una definición binaria Bin, luego obtener el nombre de la clase Bin. Entonces este tipo nos daría lo que necesitamos. Entonces, si luego bajamos, entonces podemos mirar a través del mapa de eventos, derecha, Recorriendo a través de él, entonces puedes obtener la acción del evento Vin acción, incluso acción. Recuerda esta acción de evento, quiero cargar esto en la base de datos. Eso es lo que estamos tratando de hacer aquí. Acción Vin. Entonces fue la acción de acción. La acción es entonces acción. Recuerda la clase personalizada que creamos, obtén acción por nombre y luego pasa la clave. La clave es este tipo. La clave es este tipo. Entonces, ¿para comprobar qué tipo de acción es esta? Porque este es el campo está mirando ¿qué tipo de acción es esta? Entonces, una vez que recibe la acción, ¿verdad? Entonces, tenemos la acción. Entonces necesitamos los eventos action set action. Eso tenemos. Entonces eventos acción conjunto de puntos nombre canónico, nombre canónico dentro del VDV, que es una definición de clase Bin que Eso es genial. Entonces quiero que hagamos algo extra. Entonces antes de poner esto en, queremos comprobar si este std consigue acción acción vismti esta lista está vacía, Si no lo encontramos no existe. Estoy diciendo que la acción no existe en la base de datos, ahí es cuando debes hacer esto. Eventos, acción, lista de acciones de eventos. Creo que no estoy creado en una lista de acciones de eventos agregar. Presione en la acción del evento aquí. Entonces solo presiona esto aquí. Esta lista eventos acción. En acción. Entonces solo por favor solo sé un nuevo. Conocemos la capacidad, ¿verdad? Sí, conocemos la capacidad. capacidad básicamente será del tamaño de este, ese tamaño, ¿verdad? Simplemente coloque este evento lista de acciones lista de acciones. Bien. Entonces eventos, eventos, pendiente. Fue lista de acciones. Bien. Entonces hazlo. Entonces hagamos una comprobación más. Si la lista de acciones de eventos está vacía, si no está vacía, esta lista de acciones de eventos no está vacía. Entonces, ¿qué hacemos? Escoge el repositorio, luego vamos a guardar todo. Así que recuerda, estamos cargando todo, todos estos eventos en esta lista de acciones. Entonces, si está vacío, no hay necesidad de molestar a la base de datos. Pero si está vacío, está vacío, entonces simplemente guardamos todo en él, ¿verdad? Entonces esto en realidad nos serviría para cargar únicamente en lo que ya existe en los datos Si no existe, si no existe, lo que no existe es en lo que cargamos. Si existe, no lo carga en. Entonces esto es esto puede ejecutarse varias veces sin la forma el código escrito puede ejecutarse varias veces sin realmente experimentar una falla, tratando de cargarlo ya existe en una base de datos, ¿verdad? Entonces podemos mejorar esto para aquellos que son arrullos, básicamente se puede mejorar puede colocar en el método, hacer que esta carrera Entonces probablemente podrías poner todos estos detalles en una clase personalizada. Cuando se coloca en una clase personalizada, entonces probablemente puedas tener una cerradura de cobertizo, ¿verdad? Puede usar un compartido para determinar si debe ejecutar. Si vas a estar ejecutando, digamos que en realidad tienes un servicio que es un orden distribuido, se ejecuta de manera distribuida más bien. Entonces una vez que haces eso digamos que eres microservicios y quieres c más de una instancia de esto Entonces, aparte de todo funcionando, solo puedes usar el candado de cobertizo para determinar cuál corre. Entonces, cuando el corredor de aplicaciones llega allí, verifica el candado del cobertizo. Cualquiera que sea la que obtenga la llave dentro de la cerradura del cobertizo, entonces es s. Entonces, la cerradura de cobertizo a veces usa según lo programado, ¿verdad? Bien. Entonces solo pensé que debería mencionar que para los que estén interesados en hacer eso, no vamos a estar explorando eso en este curso. Bien, así que ahora he podido lograr lo que nos hemos propuesto hacer, esta es una implementación increíble Esto es costoso. Esto es costoso. Probablemente quieras el método que escribiste, también creas una bandera personalizada para determinar que debería ejecutarse o no. Si por alguna razón sabes que la aplicación, ustedes no han creado un nuevo evento, un nuevo evento que tenga un marcador personalizado, solo pueden elegir esa configuración y simplemente configurarla en caídas para que no se ejecute en absoluto porque esto está usando reflexión y la reflexión en realidad es costo. No ralentiza el inicio de tu aplicación y como creo que esto es algo que quizás quieras explorar. Ten esto, pero hazlo mal una vez solo cuando tengas nuevos eventos que realmente necesitan ser agregados a la tabla tasop Bien. Esto es increíble, ¿verdad? Estoy seguro que ustedes están de acuerdo conmigo, es increíble. Pero, ¿funciona? ¿Funciona? No sabemos si funciona, ¿verdad? ¿Aún tenemos nuestra base de datos arriba? A ver. La base de datos sigue funcionando. Vamos a ejecutar esto. A ver. Al parecer, actualmente, solo tenemos un evento, Ip espero que esto pueda tener pago de tation de evento que es P con la canonicam guardar a Vamos a revisar. Esta es la actualización, vamos a ejecutar esto. Vamos a ejecutar esto. Estoy muy emocionada como ustedes por saber que esto realmente funciona, estoy emocionada como ustedes. Entonces funciona, deberías poder crear la tabla, y ver si esto funciona con precisión. Genial, no hay error. Entonces vamos a refrescar esto. Fresco. Entonces tenemos la acción del evento. Vamos a explorar. Yay. Esto funciona. Entonces pueden ver, ahora podemos obtener la acción, que es P, que es pago, entonces es el nombre canónico, que es Y esto va a ser muy útil, muy, muy útil. Bien, chicos, este es un video relativamente largo, y creo que somos capaces de lograr el objetivo Pasemos a hacer algunas otras cosas interesantes en el siguiente video. Nos vemos ahí, chicos. 29. Vuelve a publicar un evento incompleto: Oigan, chicos, gracias por regresar y una vez más, hicimos algo bastante asombroso, ¿verdad? Algo bastante asombroso en el último video, ¿verdad? Entonces, antes que nada, creo que aquí hacemos algo genial. Entonces quiero seguir adelante para cometer esto. Ya he creado y he creado un número, que es acción de eventos. Así que voy a seguir adelante y comprometeré esto. Yo solo lo llamaré acción de evento implementada. Implementado, Implementado. Entonces esto cierra Tf, I Df y luego podemos empujar. Empuje esperamos que esto realmente funcione. Bonito y agradable. Chicos, ahora queremos explorar algo un poco más asombroso en este video. Así que un poco más increíble. Recuerda, en realidad tuvimos un tuvimos eventos incompletos y eventos completados, no hemos podido ejecutarlo, ¿verdad? No hemos podido desencadenar eventos incompletos para ver si realmente se completarían , de lo contrario Como resultado, vamos a crear una muy única sin embargo, antes de seguir adelante, ¿ podemos intentar ejecutar nuestra prueba? Porque probablemente hemos roto algo aquí. Quiero sospechar que aquí rompimos algo , algo roto aquí. Vamos a ejecutar esto. Vamos a ejecutar esto. Verás, hemos roto algo. Algo roto. Como si chicos, ¿qué rompes? Los pedidos están bien. Veamos todo en quiebra. Esto es decir que otro modelo depende de la acción del evento. Esto depende de la acción del evento. Tenemos que arreglar esto, que es el otro pago DTO, ese es el problema Tenemos que arreglarlo. Tenemos que arreglarlo porque viola la regla Sabía que esto iba a ser un problema, así que vamos a arreglarlo rápidamente. Recuerda, esto ha sido. Este tipo en realidad es visto como un ser dentro de él, al parecer para darnos un problema. ¿Qué hacemos? Vamos a acreditar personalizado Vamos a acreditar la información del paquete. No quiero exponer esto, nunca vamos a usar esto afuera, usa este uso fuera Este es el tipo que usamos. Esta acción y esta. Ni siquiera necesitamos esta cobertura de atributo pero vamos a elegir estos dos. Vamos a exponer a este tipo. Vamos a exponer la información del paquete. Entonces este paquete que info, quiero el Ag. Ustedes ya están acostumbrados a esto, El g dot spring framew modula, modula el nombre de la interfaz porque es sub paquete Recuerda, así paquete, usamos el llamado nombre de la palabra paquetes Acción. Entonces sí, eso es todo. Si ese es el caso, entonces para el tipo que hace uso de ella, tenemos que asegurarnos de que realmente esté llegando. Sí, lo estamos usando, lo estamos usando en. ¿Está en orden, verdad? Sí, ¿no es así? Este tipo, el orden es el tipo. Este es el tipo. ¿No es aquí? Esta parte, vamos a ver. ¿Estoy en el directorio correcto? Oh, lo siento, aquí. Esto es lo que estoy buscando. Queremos agregar queremos decir, Oye, también, quiero que permitas paquete I módulo evento acción. Recuerda, ese es el modo esta acción de evento, luego acción de paquete sub. Todo bien. Con esto hecho, volvamos a hacer una prueba. Vamos a hacer una prueba. Vamos a ejecutar esta prueba de pago de la ONU. A ver. Pero esta obra. A ver. ¿Funciona esto? Esta obra. O aún nos falta algo. A ver. Nos encargaremos de que fue código. Impresionante, increíble. Así vemos. Estamos de vuelta en el camino, chicos. Estamos de vuelta en el camino, ¿verdad? Porque esto es algo muy clave. No debemos olvidar esto, ¿verdad? las lecciones de las que estamos tratando prestar realmente este curso o intentar pasar por este curso, que es modular, debemos asegurarnos de que no rompamos ninguna regla de principio a fin, nunca debemos romper ninguna regla, ¿verdad Bien, así que esto es solo cosas geniales. Esto es solo cosas co. Ahora, lo siguiente que quiero abordar en este video. Lo siguiente que quiero abordar en este video es que quiero mirar recuerda cómo publicamos ahora nuestros eventos incompletos Necesitas poder publicarlos realmente. Entonces con eso, vamos a crear dentro este evento acción porque quiero creer que esta es la misma acción de evento. Entonces voy a liberar esto dentro del mismo tipo de acción, este submodelo de acción así es como lo voy a llamar Yo lo llamo republicar. No sé si hay un ¿Era eso correcto? El fue que publicamos, solo publicamos. Entonces volvamos a publicar. Publicamos eventos incompletados. Finalizados sin completar Eventos incompletos. Hacer eventos singulares. Entonces esto sería SLF para que J sea un servicio para ser un servicio Entonces eso se requiere X constructor. Esto funciona. Esto funciona. Ahora, vamos a estar necesitando varias cosas. Necesitando lo privado, final. ¿Necesito un editor? Sabes, no necesito editor. Necesito evento acción hipotético acción poeta, evento acción post, necesito un evento privado, eventos finales incompletos Recuerde, interactúan para usar el diseño eventos incompletos, eventos incompletos, escribe el privado, final final completado eventos terminados, eventos terminados. Eventos concluidos, luego privados. Probablemente voy a recuperar algunos datos del entorno. Yo sólo jurando el medio ambiente. Medio ambiente. CN entonces solo traeré esto. Bien. Todo bien. Así que hagamos un poco de trabajo, ¿verdad? Vamos a trabajar. Hagamos un poco de trabajo. Bien. Lo estoy viendo otra vez, mirándolo. A ver, vamos a crear un método público, vacío público. Sólo llamémoslo publicar. Publica. Llamémoslo publicas. Entonces tomas una acción, le das una acción que quieras publicar. Creo que esto va a tener más sentido, ¿verdad? La acción una vez que publicamos, entonces obtenemos la opción y obtenemos evento ese evento acción de la fosa. Luego acción de evento opcional, acción de evento, lo llaman acción de evento o digamos acción de evento opcional opcional. Evento acción Dios mío el evento post obtener evento por acción, están pasando la acción, ¿verdad Todo bien. Comprobamos si está vacío, si esto está vacío. Esto está vacío. Entonces solo vamos a registrar algunos detalles info porque no hay acción de evento para estas acciones, esto funciona. No obstante, si el evento está presente, si el evento está presente, entonces puedo registrar esa información, puedo publicar publicamos publicamos eventos incompletos para acción esta acción, ¿de acuerdo? Bien. Entonces acción de eventos, acción de eventos, eso lo conseguimos. Entonces hacemos una clase. Acción clase acción clase, acciones de eventos, esto no es lo que necesito. Necesito esto para conseguir el nombre canónico para mí. Hago clase punto por nombre. No pasar el evento acción punto obtener nombre canónico. Eso es lo que necesito. Entonces esto debería mostrar c mostrar una excepción. Siguiente stione solo tírala en lugar de manejarla. Tírala. Entonces incompleto así que probablemente debería manejarlo aquí para que podamos cuando estamos implementando nuestras acciones, solo entramos aquí. Así que vamos a agregar esto a TryCatch. Entonces, para intentar atrapar. Vuelve a lanzar nuestra excepción personalizada aquí cuando estemos listos. Quiero recuperar esto dentro de este tipo. Vamos a convertirlo en un nulo. Vamos a conocer entonces clase de acción, entonces, esta cera Una clase de acción, luego No p publicaciones de eventos incompletos, punto volver a enviar Entonces tratamos de presentar. Entonces pasamos en Recuerda, toma en un predicado. No pases en el predicado. Así que la publicación de eventos luego la publicación de eventos, puntos obtiene evento, puntos obtiene clase es igual a esta clase que acabamos encontrar tenemos que asegurarnos de que esta es en realidad la misma. ¿Correcto? Tengo que asegurarme de que en realidad esto es lo mismo. Todo empieza con lo mismo. ¿Por qué se queja esto? Esa es la clase final. No hay problema. Podemos simplemente moverlo aquí. Tenemos que exponer a ese tipo, solo ven aquí y así como aquí. Sí. Era películas. Sí, entonces debería estar bien. Así que puedes simplemente lo sé. Todo bien. Eso funciona. Entonces quieres una vez que hayas terminado entonces podemos eliminar eventos, puntos, luego podemos publicación de eventos , luego elegir los eventos. Recuerda, este es el tipo terminado. Esto se completa. Para que puedas escoger la publicación del evento terminada. Tiene una opción de borrar. Entonces puedes eliminar también con un predicado o podemos eliminar con nuestra duración Entonces, si esto realmente funciona con éxito, no podemos garantizar que inmediatamente este se ejecute porque si verificas que es una transmisión y podría tardar un tiempo en completarse realmente. Verán, si nos fijamos en esto, vamos comprobar esta implementación. Mira esto. En realidad, ejecuta un filtro de flujo para cada uno antes de invocar al oyente de destino Entonces no podemos garantizar que terminaría inmediatamente antes de colocar esto en, ¿ verdad? Entonces no podemos garantizarlo. Entonces lo que vamos a hacer así que vamos a hacer es que solo eliminaremos, eliminaremos a cualquiera que no sea el poner la duración, ¿verdad? La duración, duración, ¿verdad? Horas de horas de horas. De horas, luego ponemos la propiedad propiedad para conseguirnos las horas. Eso es en realidad configurable. Literalmente podemos hacer punto configurable get property. Recuerda, aquí definimos ambiente. También podemos usar un valor del marco de primavera, pero confío en usar esto. Entonces llamémoslo elimina evento dot action. Llamémoslo así y éste requiere que sea de clase qué de clase larga, larga o clase. Entonces vamos a darle un valor por defecto. Digamos valor predeterminado de digamos 5,000. Cuántos conjuntos solo dicen 100 Bytes cien. Déjame explicarte esto correctamente. Ahora tenemos algo genial. Podemos llamar a este tipo y solo ver si funciona, necesitamos saber si funciona para que no funcione. Vamos a configurar la variable de entorno de lo que realmente dijimos aquí. Vamos a la variable de entorno enviro bend variable Para ahorrarnos tiempo, lo he copiado asífueron solo hacer esto sí. 5,000. Esto es en realidad eventos, estos eventos. Volvamos a revisar a este tipo. Así que borra eventos. Duración. La duración es sobre la duración utilizada. ¿Bien? Entonces como pueden ver, son mapas para este tipo. Todo bien. Así que en realidad tenemos eso y eso es en realidad cosas geniales. Eso es algo genial. ¿Ya terminamos? Creo que todavía podemos explorar algún detalle extra en lugar de pasar en acción probablemente debería tener uno que publicara todos los eventos completados. Entonces deberíamos tener uno que tenga una lista de acciones. Creo que esa debería ser una buena implementación. Más de eso está en el siguiente video. Gracias, chicos. Ver siguiente video. 30. Vuelve a publicar el evento incompleto 2: Bien, chicos, podemos hacer esto en el último video. Creo que tenemos que probar si funciona, ¿verdad? Creo que alguien va a estar de acuerdo conmigo, tenemos que probar si esto funciona, ¿verdad? Vamos a probarlo si funciona. ¿Tenemos acción de eventos? No tenemos una acción de evento, o vamos a seguir adelante y crear una. Vamos a crear un evento pruebas de acción. Oh, me perdí a estos chicos. Me perdí esto. Yo quería añadir algo aquí. Vaya, no sé por qué me lo perdí. Sé que vamos a ir a buscar por esta acción, así que necesitamos crear un índice para ello dos veces Creo que ustedes estarán de acuerdo conmigo. Lo hago en índice. En index, entonces el nombre solo lo llaman acción ID, acción IDX, luego la lista de columnas, la lista de columnas sería la acción, que coincide con esta y city obtiene por acción ¿Bien? Entonces creo que esto funciona. Creo que esto funciona. Entonces es único, ¿verdad? Sí. Sí. Creo que esto funciona. Esto funciona. Bien. Una vez que realmente iniciemos esto se publicará realmente, el índice realmente se colocará allí. Estábamos tratando de ver si podíamos probar a este tipo. ¿Funciona? ¿ Este tipo trabaja? ¿Bien? Entonces, antes que nada, hagamos una prueba de crédito aquí. La prueba de cred. Lo llamaré en acción Prueba de solucionadores de hicebra Bien como de costumbre, prueba de módulo de aplicación. Entonces necesitamos verificar para poder activar eso. Después una prueba, evita algo solo para verificar. Sí, solo verifica el módulo para verificar el módulo. Verificar módulo, solo para verificar. Sólo vamos a ejecutar una verificación del módulo. Solo confirmemos esto si esto no rompe nada. Sitios. Yo dirijo a este tipo. Bien, así que vamos a dirigir a este tipo. A ver. A ver. Ahora funciona. Entonces la siguiente parada, entremos. Publiquemos por cable los dispositivos terminados para conectar a este tipo o para cablear a los cachorros eventos terminados, llamémoslo eventos completados Vamos a hacer una prueba para ello. Vamos a hacer una prueba para ello. Llámalo pruebas nulas. Eventos calculados completados. Entonces solo llamo nulo, luego hago publicar qué acción recordar la acción de los pagos. Si revisas la tabla, esta tabla tiene una incompleta tiene una que está incompleta. Si esto funciona, debemos encontrar la fecha de finalización aquí. Eso es lo que supongo que encuentra el detalle de finalización. Asegurémonos de que hemos eliminado la simulación para eventos fallidos. Vamos a estar seguros. ¿Por qué es? ¿Por qué es? ¿Por qué es, verdad? ¿Dónde está? ¿Se trata de pagos pagos? También tenemos algo de trabajo aquí, no digamos tabla de pagos, vuelve. Solo vamos a estar seguros, esto realmente debería pasar y ver si realmente selló con éxito, podremos sellarlo. Bien, así que hagamos esta prueba. Hagamos esta prueba. ¿Todo bien? Sí, básicamente debería ser una prueba. Tiendo a activarlo desde aquí. Probablemente quiera crear tal vez algún tipo de controlador probablemente solo ya sea esto solo lo desencadene o algo así o tal vez un trabajo, como mencioné, así que eso funcionaría. A ver si esto funciona. Esa es la suela menos. Esto ha sido empujado. A ver. Impresionante. Ser siempre ver oyente, el oyente ya va a los espectáculos él Dejando los eventos en no encontrado. No se encontró? Pensé que estaba enviando algo más. Una publicación encontrada publicamos buscando eventos completos, una publicación encontrada. Esta enfermedad o pago dF saltando una publicación de vida vocacional lala incompleta Vamos a revisar la mesa. Yo hago algo mal. Vamos a revisar la mesa. Oh, esto no pasó. Esto no pasó por algo que en realidad no sumó. Algo no sumó. A ver. Para los eventos, veamos los eventos que realmente hicimos estos eventos. Veamos qué pudo haber pasado? ¿Quiero eliminar? No creo que quiera borrar todavía. Entonces déjame comentar esto por ahora. Entonces, activemos a este tipo. Vamos a mostrar que esto realmente pasa. Entonces creo que hagamos algo extra. Entonces déjame elegir a este tipo. Hagamos esto. Entonces hagámoslo. Entonces hagamos esto. Vamos a registrar. Hagamos un poco de inicio de sesión, ¿verdad? Variable CP, perdón, perdón. Este debería ser el predicado hablar directo predictor pensando Bien veamos qué pudo haber salido mal. Como puntos de interrupción aquí. Yo vería si esto coincide. Voy a ver si este coincide es eventos completos. A ver. ¿Cómo puedo verificar esto? Déjame pensar. Vemos el nombre el nombre canónico. Nombre canónico u obtener clase. ¿Qué hice aquí? Esto consigue clase, ¿de acuerdo? Eventos. ¿Por qué volviste a tener clase? Eso es sólo un nombre ahí te dan clase. Entonces esta clase. ¿Por qué estoy confiriendo la clase? Lo que se pone en el nombre económico. Entonces los eventos eventos, estos eventos. Para que pueda evaluar, no estoy dando la capacidad de evaluar. Sólo estoy dando la capacidad de evaluar los eventos. Y este evento es un objeto. Entonces estoy tratando de comparar los objetos juntos para mostrar los eventos. Bien. Veamos este identificador. A ver. Yo solo publicaré este video. Podemos volver a ver lo que realmente tengo aquí. Sólo un minuto. Bien. Gracias, chicos. Seguí adelante para probar esto y descubrí cuál es el problema. Nuestra implementación funciona, lo que realmente teníamos aquí para los eventos publicados. Esto realmente funciona. No hace falta que cambies nada. El tema fue básicamente éste, donde estaba el tema. Mientras lo ejecutamos en la prueba, realidad ejecutamos esto desde la prueba, no se encontró al oyente Entonces la acción del evento del oyente aquí. No se encontró al oyente Al hacer esto no se encontró al oyente. Tenía que hacer, tuve que crear un controlador dentro de la acción del evento, luego en realidad lo empujé. Luego activando a esta persona persona usando eso como parámetro de solicitud, luego escogiendo eso y luego publicando desde aquí Entonces eso realmente funcionó. Eso realmente funciona. sólo voy a demostrar. Ir a la acción del evento. Ves que esto se ha completado. Ha concluido, voy a hacer esto voy a establecer a ahora y lo guardaré. Entonces reiniciaría esto reiniciemos la aplicación. Al iniciar la aplicación, creo que coloco algunas cosas en el modo bug. Muevo estos puntos de interrupción y vuelvo a este tipo y coloco aquí los puntos de interrupción para que veamos que la acción es realmente precisa . Vamos a activar. Esto es Vamos a activarlo. Ese es el pago, que es el num. Azúcar, entra aquí. Entonces, evaluemos esta expresión para ver qué tipo de valor, qué tipo de om nos dan. ¿Ves? Así que lo conseguimos con precisión. Entonces una vez que empujemos esto, solo observemos lo que tenemos aquí. Observe esto de cerca. Entonces empuja esto. Ya ves, O pago es si te pierdes ahora. Entonces, vamos a confirmar esto. ¿Ves? Esto en realidad está terminado. Entonces básicamente, eso es todo. Así que somos capaces de hacerlo con éxito. Entonces lo que haría lo haría es que además de esto, cortemos algunos métodos extra personalizados. Así que métodos extra personalizados para poder hacer para que publiquemos. Y si queremos publicar para lista de eventos. Yo puedo hacerlo publicar, después publicamos, también podemos llamarlo publicamos para esta época. Se puede tener, digamos una lista de acciones. Lista de acciones, luego listas de acciones o acciones de acción. Tenemos esto, entonces también esto es acción, no acción, solo acción. Entonces tenemos esto. Entonces podemos entonces cuatro Sin acción para cada uno. No se limite a volver a publicar Acabamos de publicar a este tipo. Eso realmente funciona. Eso nos da lo que tenemos básicamente. Cada uno de ellos, entonces podemos decidir eliminar y podemos comenzar a movernos completamente para que podamos hacer este trabajo podemos usar la expresión Lambda aquí. Esto funciona o podríamos decidir eliminar todo. Nosotros solo lo llamamos republicar Esto publicamos que no toma ningún parámetro, ¿verdad Tomando algo privado ahora, éste lo publicas todo, todo, ¿verdad? Todo. Así que solo para registrar eventos de publicación. Llamémoslo eventos incompletos. Eventos concluidos, ¿verdad? Entonces tienen para lo mismo. Así que solo a esta hora miramos a través de todo, ¿verdad? Para Acción, acción, luego acciones que valoren, tu los valores, ¿verdad? Acción de valores. Entonces esta es tu prueba, luego solo publicamos. Para que podamos hacer esto. Ahora bien, una extracción que podemos hacer es que en realidad podemos colocar en podemos hacer que este schedueDo lo haga horario Programado. Podemos decidir usar una expresión cron Digamos que para aquellos que quisieran que su trabajo corra probablemente a medianoche, podrías tener una expresión cron y colocar para medianoche Creo que la medianoche debería ser cero, cero, luego estrella estrella estrella. Esto funciona o entonces podrías decidir publicar por una tasa fija. Este es un trabajo actual o por una tasa fija. Llamémoslo tarifas fijas, tarifas fijas. Esto es vamos a ver vamos a explorar esto. Sólo voy a descargar la descarga. Veamos exactamente qué dice la documentación sobre lo programado. Sabemos exactamente lo que esto significa. Fix streaming es un cuarto dentro de un periodo de invocación, para seguir invocando este periodo o usar una cadena Solo usa un así que este es un largo fijo, así que solo puedo decir pong ¿Un fondl también? La unidad de tiempo es milisegundos. Pero ¿puede estar sobreleyendo por unidades de tiempo? ¿Tiene una unidad de tiempo? Impresionante. Cuenta con una unidad de tiempo. Simplemente podemos hacer esto luego reemplazando unidades de tiempo. Llámalo unidades de tiempo y unidades de tiempo. Digamos, uh Segundos. Hagamos segundos, ¿ verdad? Eso nos daría la posibilidad de ver si esto realmente funciona con éxito. Entonces voy a hacer 10 segundos, ¿verdad? Haré 10 segundos. Entonces lo que haría es entrar aquí. Voy a entrar en la base de datos, bien, y de hecho voy a borrar estos dos. Voy a ponerlos en nulos. Todo bien. Entonces veamos si esto funciona, ¿verdad? A ver si esto funciona. Entonces esta vez no es un horario que no tenía horario. Entonces, lo que significa que no necesitamos realmente quali desde ningún lado. Así que vamos a ejecutar esto de nuevo y luego solo observemos después de 10 segundos de que viene si esto realmente se activa. Bien. Entonces veamos. Entonces solo traeré esto así que veamos, ¿funciona después de 10 segundos? Otro pago recibido. Ya ves, ha invocado impuesto, ya invocado ya Vamos a confirmar esto Awesome. ¿Ves? Esta Esta caja. Lo hice por todo. ¿Ves? No encontré nada por correo electrónico, fondos para pagos de acción. Yo publico computado para la acción, luego dice que venga después de cada 10 segundos. Creo que podremos demostrar en gran medida cómo funciona el evento de publicación. Así que en esta ocasión, siguiente video, entramos en el pago luego registramos los datos en los pagos y publicamos luego implementa el marcador de evento personalizado para correo electrónico. Bien. Nos vemos en el siguiente video. 31. Implementa pagos y listener de correo electrónico: Todo bien. Gracias gracias por regresar, gracias por seguir acompañándome y gracias por estar aquí conmigo esta vez. Todo bien. Así que entremos. Aquí hemos podido hacer algo de trabajo. Esto es lo que podemos lograr. Debes seguir corriendo después de cada 10 segundos. Creo que solo quiero detenerlo por ahora, no va cada 10 segundos, solo déjalo así. Entonces, ¿qué estamos haciendo a continuación? Vamos al otro servicio. Otro servicio. Por cada pedido que envié, vamos básicamente por cada otro enviado por cada otro enviado, enviemos un correo electrónico, ¿verdad? Vamos a empujar un correo electrónico. Vamos a sacar un correo electrónico. Empujemos un correo electrónico diciendo: Oye, por favor envía un correo electrónico una vez hecho esto. Entonces esa sería una gran prueba para nosotros, ¿verdad? Entonces para completar eso, vamos a crear un correo electrónico DeTao Un detalle de correo electrónico Ella solo llena nuestro caso de uso que estamos tratando de lograr. Así que hazlo un disco. Grabe y luego agregue nuestro marcador personalizado. Si no sabes lo que es este marcador personalizado, necesitas ver videos anteriores para poder ver. Marcador personalizado. Luego hagamos cadena de correo electrónico, cadena, correo electrónico, luego cadena nombre del cliente, luego identificador de orden de cadena, luego cantidad total larga, luego un Bollier Si el pedido está completo, o se completa el pedido. Están terminadas, ¿verdad? Creo que debería ser suficiente, ¿verdad? Creo que deberían bastar o los completos. Ahí se completa. Está bien. Entonces. A continuación, entremos al otro servicio. Acabo de hacer algunas mejoras personalizadas, ¿verdad? Solo haz alguna mejora personalizada. Por lo que queremos enviar el correo electrónico. Así que haga el correo electrónico DTO, correo electrónico DTO, nuevo correo electrónico DTO, no pase ningún dato Entonces, ¿qué son los detalles? El primero es el nombre del cliente, solo el correo electrónico, el correo electrónico del cliente de rata, luego el pedido dT dot obtener el nombre del cliente. Cuál es la siguiente fase o identificador. Eso debería ser de dónde sacamos que eso debería ser de la orden O obtiene o identificador. Entonces, ¿cuál es la cantidad total? El monto total, creo que tenemos el monto total, estamos enviando el monto total aquí, este recibe monto. Creo que debería ser así. Eso debería funcionar. Entonces finalmente, ¿esto o completado es falso? Los otros ya están terminados. Ajustemos este orden completo para simplemente enviar ambos eventos juntos. Pasa esto en. Esto tomará detalles del correo electrónico. Yendo aquí, llevándose a este tipo también. O llevarte el correo electrónico de este tipo contigo. Creo que eso debería funcionar principalmente. Acabo de crear un editor de eventos. El correo electrónico de publicación para usted. Entonces solo diré loglog. Sin información. Entonces solo voy a ver el envío de correo electrónico por correo electrónico para otros. Creo que esto funciona. Creo que esto funciona. Creo que esto funciona. Entonces dentro del pago, la necesidad del pago, hagamos algunas cosas geniales. Hagamos algunas cosas geniales. Vamos a los pagos. A los pagos, no hemos tocado este servicio de pago. Sólo hagamos un poco de trabajo. Hagamos un poco de trabajo. Tenemos esta escucha aquí. Todo bien. Sólo hagamos un poco de trabajo. Ahora tenemos esto recibimos a este tipo. Digamos que el pago es igual a los nuevos pagos, ¿verdad? Solo pagos, entonces eso establece o ID. Establezca d ID, luego solo pague a usted obtenga ID, luego establezca los montos de monto que le pagamos para obtener montos. Entonces lo dejamos al estado. El estado aún está incompleto. Eso sigue incompleto, no hecho, así que está incompleto. Entonces solo llama al repositorio de pagos , eso es pago seguro. Creo que eso básicamente debería hacerlo. Ahora en realidad estás usando el correo electrónico usando el correo electrónico. Significa que básicamente ahora necesitamos tener recordar, deberíamos considerar el correo electrónico como otro modelo diferente porque es posible. Sé que hay algunas empresas en realidad tienen un servicio separado que maneja el correo electrónico. Cada uno de los correos electrónicos que son siete organizaciones va solo a ese servicio. El CV probablemente se integre con algún SMTP de terceros o algún servicio de correo electrónico de terceros, luego simplemente cablean todo y pueden tener varias instancias otra en realidad Vamos a crear un nuevo modelo. Solo llámalo correo electrónico. Esto solo contiene una clase. Simplemente llámalo servicio de correo electrónico. Servicio de correo electrónico, eso es todo. Ese tipo sólo tendrá un oyente. Eso es básicamente lo que tienes. Entonces pruebo para J, entonces eso es componente, entonces solo lo llamo nulo. Enviar correo. Eso es esto funciona. Pero esta vez estamos escuchando, no para esto, estamos escuchando para el detalle final del correo electrónico. Esto lo estamos escuchando . Entonces recuerda que usamos nuestra tonelada en la aplicación, módulo oyente Simplemente puede registrar la información del punto de registro. Entonces decimos correo electrónico propiedades recibidas, propiedades recibidas. Estás asumiendo que el correo electrónico no sabe nada de ningún otro modelo, dices si correo electrónico si correo electrónico, esto es, si correo electrónico Email GTO, que mi toque? Yo creo que sí. Correo electrónico o completo. Si no está completo, entonces hacemos esto más, lo hacemos, ¿verdad? Esto no es de ninguna manera óptimo. Solo estoy tratando de hacer una demostración, ¿ verdad? Entonces esto no es óptimo. Creo que debería haber algunos detalles extra. Se puede decir normalmente lo que sucede es que probablemente debería haber un HTML donde luego configure las cosas. Usas un marcador de posición para colocarlo en y los chicos de la interfaz de usuario o el UIUX habrían diseñado una interfaz agradable y los chicos de front-end tendrían en realidad tienes una plantilla donde solo inyectas Entonces solo superas el mensaje, ellos reciben el mensaje, y simplemente se inyectan en display así que ese es un correo electrónico bastante agradable que se enviará al cliente Eso es lo que pasó. Pero aquí solo lo simulamos, así que solo simularé cadena. Por este es el cuerpo lo que estamos enviando digamos que los correos M plus reciben nombre, diez más esta nueva línea, diez más vamos y solo digamos, otro fue inicializado Otro se inicializó con ID más luego el identificador de correos electrónicos, diez más este plus y 2000 con nosotros suma de esto, luego bajemos Creo que puedes colocar el aquí. Iniciar suma, entonces esos correos electrónicos obtienen montos, montos, montos totales. Entonces recuerda está en largo, debes recordar dividir por 100. Está en largo, dividir por 100. Largo, eso es info, solo di correo electrónico inicial correo electrónico inicial otros detalles. Creo que esto funciona. Esto funciona. Esto funciona. Perdí cuerpo. Este correo electrónico En esta casilla. Esto. No estamos haciendo nada fantasioso, debería ser un común un plus Fancyful Entonces el correo electrónico no funciona. Yo sólo voy a elegir el mismo mensaje solo ser lo mismo. No es de ninguna manera, ninguna forma de anemia. Pedido por correo, digamos que esta vez. Si el pedido está completo, solo diga su pedido. Con ID ID, esta tarea de este Ta algo de esto se completó con éxito. Me completé con éxito. éxito, simplemente llame a este correo electrónico detalles de correo electrónico, detalles finalización o correo electrónico o envíe por correo electrónico detalles de finalización este trabajo detalles de finalización. Solo toma esto. Así que al final del día sólo podemos registrar esa información. Entonces el correo electrónico envía al correo electrónico envía a luego solo registra este correo electrónico, envíalo por correo electrónico al punto GetImilsRcord Bien. Eso es correo electrónico, mientras recibe algo más. Correo electrónico. Todo bien. Entonces así es exactamente como se verá el servicio de correo electrónico. Por lo que ahora necesitamos modificar. Creo que vamos a revisar nuestro otro servicio. Entonces el servicio de datos ahora está bien. Para que podamos mandar a ambos juntos. Nosotros comprobamos. Ahora estamos empujando a publicar el correo electrónico. Creo que podemos probar esto. Podemos probar esto. Entonces veamos cómo funciona esto. Pero esta vez, en realidad también estamos enviando datos de correo electrónico, bien. Entonces veamos, veamos. Entonces lo que pasa es que iniciamos esto y lo ejecutamos. Lo ejecutaremos desde el controlador Dummi que creamos aquí, ¿verdad? Del controlador Dummi Creo que todavía tenemos nuestros datos en alguna parte de aquí, así que permítanme revisar cheque cheque cheque. Solo revisa nuestro boceto. Derecha. Entonces sí, entonces vemos cómo el CSL acaba de empujar esto al otro y veamos que se ejecuta Veamos esto. Esto se completó, así que veamos nuestro registro. Echemos un vistazo a la bitácora. Nosotros. Ves que esto funciona. De hecho me va Empatisive inicializar DZ, bla, bla, bla se inicializó inicializó Entonces el siguiente va correo electrónico enviado para probar en este, el oyente Se pueden ver los otros pagos dentro del oyente, esto realmente funciona El oyente elige oyente para correos electrónicos de la aplicación funcionen correctamente porque ahí es donde registramos este Empaties Simplemente puedes explorar eso rápidamente. Mira esto. Ver. Así que sí vimos las propiedades de correo electrónico recibidas. Entonces, bien. Entonces creo que es un buen hito. Solo demos un paso atrás y vamos a implementar rápidamente para digamos que queremos completar el o. Todo bien Nos vemos en el siguiente video. 32. Corregir el error en Implement Payment 2: Oigan a todos, aquí Z. Hubo un error único que realmente ocurrió en el siguiente video. Rápidamente quiero señalar. Básicamente podrías arreglarlo y nos alejamos para que no tengas que experimentar el mismo problema. Sólo quiero hacer un video muy corto para explicar lo que pasó. Si notas en ese video, realidad cambiamos un detalle. De hecho, entramos en el servicio de pago y cambié esto lo cambié de encendido a pedido completo. Hacer esto inmediatamente de inmediato no se alinearía con lo que ya tenemos en la base de datos. Recuerda esta identificación de vendedor, en realidad se basa en lo que realmente tenemos aquí. Porque cuando realmente empujamos evento, hay un oyente, escucha, el oyente se basa en el paquete, este paquete, luego el nombre del método Una solución rápida, lo que podrías hacer rápidamente es entrar en la base de datos para entrar en la base de datos. Entonces di que estás usando un nombre de paquete diferente. Por eso nombro este nombre de paquete base. Hay un paquete base, nombre de paquete diferente. Entra y cambia todos los registros que tengo encendido, cámbialo para completar orden. Recuerde, hay un identificador de oyente en la tabla de publicaciones de eventos, y eso solucionaría rápidamente el problema Así que no tienes que esperar a que tarde en realidad arreglemos el error. Todo bien. Gracias chicos. Nos vemos en el siguiente video. 33. Implementa el pago 2: Bien, gracias chicos por acompañarme. Una vez más. Bien, esto está aquí. Bien, entonces creo que aquí hubo un errata Estaba usando pago u obtuve otro ID usando el pago y DTO así que he podido corregir esto porque mientras estaba inspeccionando, descubrí que esto era nulo y esto era cero, así que ahora, pero he podido arreglarlo, ¿verdad Todo bien. Así que sí. Un derecho, así que simulemos las piezas otro ID, digamos, el usuario quiere que el cliente quiera completar el pago. Correcto, así que solo podemos hacer eso enviando otro evento desde el pedido. Yo sólo digo este controlador. Aquí teníamos un controlador. Este controlador solo tendrá otro que diga pagos completos completos. Yo sólo hago esto. Público y luego decir entidad de respuesta. Otro, llamémoslo orden completo. Creamos esto en unos minutos. Pedido completo. Llamémoslo llamémoslo orden completo. Pedido completo. Entonces tomas un pedido completo. Terminado. Sí, creo que está bien. Entonces también dale un terminado. Solicitar cuerpo luego devolver responstyg cerca de responsenity, responsentity Entidad de respuesta. Entonces no necesito esta entidad de respuesta. Entonces, luego este otro servicio, eso son pagos completos. Por lo que implemente este pago completo. Entonces tendremos un pedido completo. Bien, creo que esto debería funcionar, ¿verdad? Si quieres sacar el estado HTTP, está bien. Bien, así que antes que nada, busquemos esto. Voy a colocar esto dentro del DTO. Al parecer hazlo un disco, veamos, veamos. Solo da algunos detalles aquí. Sólo llamaremos, llamaremos a esta cadena. Oder identificadores para ser identificador necesario, luego Boler pagos completa Creo que debería estar bien completa creo que esto funciona. Sí, así que esto se ve bonito. Bien, para volver aquí, esto no debería ser feliz. Debería ser feliz, esto debería ser feliz, entonces tenemos que crear a este tipo. Vamos a implementar esto. Todo bien. Voy a tomar todo esto, moverlo al sí. Pago completo. Entonces ese es el siguiente que queremos mirar. Así que básicamente solo buscamos el. Entonces orden repositorio encontrar orden, implementamos este get order by order identifier, luego pasarlo el otro en identificador. Entonces danos una optativa. Yo opcion es un opcional. L solo lo llaman pedido opcional. Cargador opcional. crear más espacio para que podamos ver visiblemente Debe ser cargador opcional. Siguiente cosa, ¿puedes decir si el cargador opcional está vacío? El cargador opcional está vacío. Pero está vacía. Entonces solo tira cerca del tiempo de ejecución corrige todos estos errores más adelante. Entonces otro no encontrado. Está bien. Pero sin embargo, si no está vacío, el otro obtendría el otro solo decir monto final de las cantidades largas sería que tenemos el inventario del pedido inventario, luego monto. Recuerda, creamos esto creamos esto en los últimos algunos de los videos anteriores. Veamos esto donde realmente usamos la consulta, en realidad obtenemos esto, hicimos esto. Todo bien. Tienes que probar esta consulta. Podemos probar fácilmente esta consulta. Yo sólo escojo esto. Entonces sólo podemos ir a Consola crear la consola de consultas. Yo sólo coloco esto aquí. Veamos las identificaciones que tenemos Tenemos ID uno. Hablemos ID uno. 50 hijo es uno. A ver. Esto funciona? Esto funciona. Somos capaces de probar Data works. ¿Dónde estaba yo? Estaba tratando de crear esto. Sí. Ahora somos capaces de obtener los montos finales largos y cuando tenemos eso entonces podemos enviar un correo electrónico o correo electrónico igual a nuevo correo electrónico. No se limite a colocar el correo electrónico del cliente de otros puntos, otro punto obtenga el nombre del cliente. Entonces, ¿qué más? Simplemente pase u obtenga el identificador del cliente, no pase la cantidad, no diga verdad porque en realidad es cierto. Ese es el completarlo. Entonces llamamos al otro servicio. O servicio de eventos. Recuerda que tenemos otro servicio de eventos para enviar nuestros eventos. Entonces solo para completar pagos, completar pagos. Pagos completos. Vamos a permitir que tomemos el pedido completo, el pedido completo. Enviar el pedido completo. Quiero enviar el pedido completo y quiero enviar el correo electrónico. Acabamos de enviar el correo electrónico. Entonces vamos a devolver algo, tal vez nuevo pedido completo. No quiero que los detalles, solo quiero decir, claro. No digas verdad. Simplemente diga que el pago completo es cierto. Eso funciona, ¿verdad? Eso funciona. Entonces, para cuidar los valores nulos, así que usemos un JCN include, coloque JCN include non Entonces eso solo se encargaría para que no veamos la parte nula de la parte de la que no nos ocupamos. Entonces esta ninguna parte de nobity no sería lo mismo. Bien, así que vamos a crear esto. Vamos a crear esto. Todo bien. Bien, así que básicamente solo lee lo mismo. Entonces solo queremos publicar y solo poner esto aquí. Permítanme factorizar estos pagos completos. Entonces esto solo será acuñar aquí. Pagos omnity con otros detalles detalles, luego el correo electrónico, empujando el correo electrónico Espero que el correo electrónico esté completo. Sí, el correo electrónico debe ser copiado, cierto. Todo bien. Entonces eso es básicamente todo. Entonces quiero publicar esto entonces. Llamemos a esto. Llamemos a este paso intentando completar el pago, ¿verdad? Con eso, solo publicamos. Entonces también venimos aquí a decir, pensémoslo. Pensemos en pedacitos. Vamos terminado ido, solo digamos correo electrónico de pago completado. Sí. Si tienes eso, necesitamos un oyente un oyente para este pedido completo Tienes que entrar en la guía de comentarios para implementar esta guía. Tienes que hacer un “void say on” para tener un pedido final completo, un pedido completo. Módulo de aplicación oyente, eso es Vamos a hacer SOUT vamos a usar un registro ya que siempre hemos usado la información de registro Sólo un oyente recibido en oyente digamos orden completo, recibir es.Esto funciona Entonces se puede decir pagos opcionales. Entonces pago, solo ve pagos opcionales. Pagos, costo de pago depositario, pagos de multa que estamos usando lo siento usando Gs Obtener pagos por o DNI. Tienes los pagos completados o el identificador. Entonces vamos a subir un poco esto. Tomemos por este camino. Nosotros tenemos esto. Sí. Solo necesito hacer solo decir si esto está presente, solo escogemos los pagos, los pagos opcionales, luego solo haremos conjuntos de pagos A establece estado completado, establecer estado a estado de pago completado. Entonces depositario de pago eso es guardar. Creo que esto lo maneja. Recuerda que ya hemos atendido el servicio de correo electrónico si esto es cierto Entonces esto es o no está completo, o está completo. Recuerdo lo que estamos haciendo aquí, diciendo, o aquí está completo. Empujando esto. Creo que eso realmente lo maneja. Creo que había otra cosa que no hemos atendido si miras esto de cerca No atienden para ello y ese es el pedido completado. Enviando a este tipo fuera. También es un evento y no lo atendimos. Esto básicamente debería tener también justo como correo electrónico. ¿Presentamos el evento de dominio Creo que no hice esto, haz esto. Yo solo diré implementa eventos de dominio, eventos dominio a partir de moléculas. Lo mismo aquí, implementa eventos de dominio de Jolecles Si esto es esto, también significa que necesito colocar aquí un marcador personalizado, un marcador personalizado Yo no. Creo que estoy complicando las cosas, colocando esto solo vamos a crear cual es el pedido aquí Esto requería que requiriéramos algo así que permítanme llamarlo como se llama respuesta de pedido completado. Permítanme crear algo más llamado respuesta de pedido completado. Completé la respuesta del pedido. Sí. Esto va a funcionar. Esto ya no sería un evento, solo una respuesta simple. Yo solo solo devuelvo un lingote, solo trabajo, entonces ya no necesito esto. Uh en esto ya. Entonces, sus mi escenario. Entonces no necesito esto porque ya no usamos esto, ¿verdad? Entonces puedo colocar un marcador personalizado en marcador personalizado. Después acción evento acción. Todavía no he creado esta acción, así que Cores acción acción pago Esto también debería ser un pago, pero quiero que sea una acción que complete, así que completa los pagos. Llamémoslo C. Acciones completa completa los pagos. Pago completo de underscoe. Esto funciona. Entonces entraré aquí para crear este pago completo de underscoe Viniendo aquí, y yo sólo voy a hacer esto. Seré C. Volveré aquí. Derecha. Recuerda, esto se cargará automáticamente para nosotros, así que no tenemos que preocuparnos por ello. Eso es algo genial porque ya hemos hecho la implementación en esta configuración, totalmente hacer todo lo que no se molestará por eso Entonces, si el sentido de ventilación, esto también se canalizará en porque recuerde que corredor de la aplicación realmente hace el trabajo por nosotros Creo que estamos en un buen lugar ahora mismo, en un buen lugar. No conocemos la implementación. Creo que queremos. Vamos a probar esto. Probemos este pedido completado. Vamos a probar esto. Entremos aquí, ¿verdad? Solo escojamos bots. Entremos aquí. Vamos a entrar aquí. Et lo empujan uno tras otro. Este debería ser creo que quiero que este sea un post también. Publicar un mapeo posterior. Entonces este el espejo, solo etiquetaré esto como completo está completo. Pongamos esto aquí. Eso es correcto. Sí. Entonces esto contendrá qué identificador. Escoge tu identificador en realidad gira aquí abajo el uso lo que es que funciona. Permítanme cambiar esto a Z4. Todo bien. Entonces cambiemos el correo electrónico a cuatro. Bien vamos a empujar esto. Creo que deberíamos hacer algo diferente. Tal vez ¿cuáles son los objetos que tenemos en inventario? Confirmemos esto. Tenemos un bloc de dibujo. Vamos a usar la parte de dibujo. Vamos a cambiar esto a dibujar la parte L solo hazlo un seis. Vamos a darle a esto otra vez. Todo bien. Comprobemos el otro inventario otra tabla. Esta es la otra mesa, una Z cuatro, esta es la última. Comprobemos cuál es el identificador. Este es tu identificador. Volvamos a nuestro guión. Entonces coloquemos aquí el otro identificador, hagamos esto cierto. Publiquemos esto. No se encontró. Lo que hacemos. Déjame ver. Diciendo esto no se encuentra O completa, buscando esto. Esta parte no se encuentra. Vamos a revisar. Creo que ma metió algo aquí. Se completa. Supongamos, ¿qué hicimos mal? A ver. A puntos de quiebre aquí. Vamos a darle otra vez. A ver. No se encuentra. Es decir, algo que no hice bien. Vamos a verlo correctamente. Este el primer tipo pasó por esta orden directamente, luego esta orden se completa, ¿ o es un camino que coloqué aquí A ver. Nosotros solo esto lo siento, no he reiniciado la aplicación No creo que haya reiniciado la aplicación, reiniciemos esto Simplemente no pude encontrarlo no lo pude encontrar porque no lo he reiniciado Entonces ahora probablemente deberíamos haberlo encontrado. Vamos a darle a esto y espero simplemente decir verdad. Todo esto es cierto. ¿Por qué me mostraste o no? A ver. Yo no pensé que no usaba esto. Veamos esto. Oh, perdón, perdón, lo siento está terminado o respuesta. No hice esto respose terminado terminado res pose. Cierto. Sí. Eso es cierto. Empecemos con esto. Todo bien. Veamos que esto se hace realidad. Voy a darle a esto otra vez. Sí, es cierto. Vamos a verificar el pago. Sí, podemos ver todo esto. Esto en realidad está aquí. Nosotros tenemos esto. Este el es incompleto. ¿Por qué está incompleto? No debería estar incompleto. Confirmemos lo que hicimos. Este es el pedido completo, el pedido completo pasó por el enviarlo a los eventos completos. Nosotros estos cordones completos o eventos. Estamos dando los eventos del pedido completo aquí. Evento informático. Entramos aquí, vamos a ver eventos completos, juguemos con esto. Entraría y escogería este identificador. Yo empujaría esto aquí. Empuje esto aquí. Entonces volvamos a correr como ella. Déjame revisar los registros. Correo electrónico completado intentando pagar el pedido, bien. Vamos a revisar. No estoy diciendo este pedido completo, entonces, ¿qué está pasando? Vamos a confirmar. Supongo que por eso en realidad no lo es. Por eso no está terminado. Confirma lo que está pasando. Cerró demasiadas pestañas abiertas. Cerremos todas las pestañas. Cerremos todas las pestañas. Vamos a entrar aquí, hacer esto viniendo aquí, cerrar a este tipo. Entonces llamamos a esto y esto entra, luego el evento, vamos a revisar el otro servicio de eventos. Veamos qué está haciendo el otro servicio de eventos. servicio de eventos publica el otro evento, el pedido completo publica el Intentar tomó esto veamos esto. Esto contiene una marca de pedido completa. Aquí. Déjame comprobarlo. ¿Esto está aquí? Sí. Este ha sido cargado en, completo o marcador. Eso es genial. Usted identificador que esto. La pregunta entonces es, entremos aquí. Tienes los otros eventos. Los otros eventos azuzan este pago entonces este tipo. Volvamos a revisar a este tipo. Evento terminado. La parte terminada está pasando. Qué está pasando Este es el tema que estamos teniendo. Este no está empujando el completado o. Permítanme confirmar una vez más a mi oyente. El oyente pasa por ella está terminada orden, ¿de acuerdo? Leí para esto para esto, solo cambiemos su nombre a pedido terminado. No estoy seguro de que ese sea un problema. Pedido completo. Pedido completo. Todo bien. Muy bien, entonces esto es así, reiniciemos esto así voy a verificar este orden que tenga este identificador, entonces debería poder ver estos registros. Si veo este registro, eso ha conseguido si no veo estos registros, entonces ese es el problema. Entonces veamos esto. Déjame entrar aquí hasta el rasguño y tratemos de disparar esto. Veamos qué pasa. Esto es cierto. Entonces vamos a revisar los registros. Intentar. No voy a conseguir las partes. El correo que envías intentando completar pedido para completar el pago, ¿ verdad? ¿Dónde estaba ese registro? Intentar completar el pago envía su envía su, entonces este oyente no lo está recibiendo. Conseguirlo en este oyente. Acabemos con este video aquí. Esto es bastante largo. Terminemos este video, luego volveremos a ver por qué esto no lo está haciendo. Gracias. 34. Implementa el pago 3: Bien chicos, pude encontrar el problema. El tema es éste. Entonces el error o lo que omití fue este. Esto nunca se registraría si no usas transacción, ¿verdad? Entonces esto fue lo que me perdí. Esto no estaba ahí antes de volver a agregarlo. Creo que todo salió muy bien. Entonces echemos un vistazo a la tabla de pagos. Esto es incompleto. Pongamos este otro identificador. Entonces vayamos al escocés y pasemos esto en. Vamos a ejecutar esto. Todo bien. Coloqué el punto de quiebre aquí. Entonces punto de quiebre solo para verlo entra aquí. Entonces vemos, todo entra. Comprobemos esto ahora. Ya ves, está terminado. Todo bien. Eso básicamente es lo que intentamos lograr. Pude hacer un poco de depuración y de hecho pude averiguarlo. Sí. Lo que también me ayudó a depurar fue depurado en realidad colocó el nivel de inicio de sesión para depurar y esto para ver Dije que estaba intentando registrarse, pero sin embargo, no se estaba registrando, por así decirlo. Esto fue capaz de llegar a darme más información. Todo bien. Sí. Veamos esto. Si miras esta crítica, creo que puedes simplemente explorar esto un poco. Si miras esto críticamente, ves registrando publicación, verías cuándo está tratando de registrarse. Ya ves cuando está tratando de registrarse. Pero sin embargo, no pude encontrar la otra parte, así que pude entender el tema venía de aquí que no salió de aquí. Entonces viendo esto críticamente, vi la transacción y en documentacionstalmente mejor, debes usar esto . Derecha. Ahora poder terminar realmente el concepto general de lo que realmente estamos tratando de construir y pudimos reducir todo. Entonces, lo siguiente que queremos hacer a partir de esta parte de aquí en adelante, creo que, antes que nada, queremos que en realidad guardemos esto. Vamos a guardar esto. Permítanme crear un tema para ello. Ahora solo llámalo pagos, implementación, terminado. Implementación concluida. Lo siento, chicos, puse eso en mi segunda pantalla implementacion terminada, implementacion terminada, ok? Bien, así que solo voy a esto, solo voy a guardar esto. Así que escogeré a este tipo y vamos a guardarlo. Entonces es commits y luego Cos esto. Oh, no es de extrañar. Implementación. Bien, me estaba perdiendo eso. Permítanme editar esta implementación. Bien, entonces creo que se actualizó, así podemos cerrar esto y vamos a empujar así que hagamos que la Guardia escanee Muy bien, entonces se pone empuje. Bien. Todo bien. Entonces, a partir del siguiente video, comenzamos a mirar cosas como la validación. Empezamos a mirar cosas como validación, excepción, cosas C que vienen, chicos, cosas muy geniales que vienen. He visto video nido. 35. Excepción y validación: Chicos, muchas gracias por acompañarme una vez más. Esto es Z aquí. Todo bien. Estamos hablando de modelos abiertos, ¿verdad? Esto es exactamente de lo que queremos hablar. Ahora hemos podido explorar varios modelos. Básicamente exploramos la interfaz. Esa es una interfaz con nombre que quise decir que realmente somos capaces de exponer el subpaquete. Ahora, hablemos de modelos abiertos, ¿verdad? Básicamente podríamos tener un modelo que esté abierto a todos, que todos puedan acceder. Un buen ejemplo que traer a este video en particular es la excepción, ¿verdad? Una excepción es un muy buen ejemplo de, lo que podemos traer, que estará expuesto a todos. Tendremos la excepción para diferentes casos y tendremos el manejador de excepciones globales Para que esto sea un poco más interesante, voy a presentar la validación de primavera, el iniciador de validación de bood de primavera para ayudarnos a lograr esto una manera muy simple o directa Traeré una validación. Esta es la validación. Estoy agregando una validación que en realidad la tenemos aquí. Solo arreglemos esto un poco. Tomaré esto y lo traeré un poquito justo debajo de JPA Recuerda, el o no importa. Yo solo esto es solo la preferencia personal, ¿verdad? Bien, así que hemos podido hacer eso. También noté algo rápido que en realidad no creé, en realidad no creé el modelo, el modelo de prueba para correo electrónico, así que hagámoslo rápidamente. Lo haré antes de proceder. Recuerda, cada modo debe tener un módulo de prueba separado para que puedas realizar un seguimiento de las cosas y asegurarte de que nada esté realmente roto. Todo bien. Entonces voy a hacer esto. Simplemente entraré a mi Windows y prueba rápida y cred esto llamó a esto prueba de integración de correo electrónico, ¿verdad? Todo bien. Prueba de Graion NT. Bien, así que recuerda, acaba de agregar la prueba de mod de aplicación. Entonces solo para verificar solo, solo para verificar, y eso en realidad debería bastar En realidad debería bastar. Acabo de llamar a este correo verificar si correo electrónico. Si correo electrónico. Eso debería hacer. Después, trae y luego agrega prueba. En realidad ejecutamos esto en un momento posterior para ver si todo sigue funcionando muy rápido. Veré que todo sigue funcionando como se esperaba, quise decir entonces. No obstante, saltemos rápidamente para ver cómo funcionará esto para la excepción. Proceder. Voy a crear un módulo llamado paquete llamado excepción. Todo bien. Entonces voy a crear una excepción personalizada. En esta ocasión, creo que se trata de modelar, así que solo lo llamaré modular excepción Sólo para hacer las cosas un poco más directas. Modilar excepción Entonces solo anulamos dos. Hagamos que se extienda. Hagamos que se extienda, excepción de tiempo de ejecución. Entonces solo anular dos. Voy a anular al que no tiene argumento y escribiré el que tiene el mensaje. Creo que esto se perfila. Todo bien. ¿Qué otras cosas voy a necesitar? Sí, quiero hacer de este un modelo abierto, y convertirlo en un modelo abierto en realidad es bastante sencillo. De la misma manera que en realidad tenemos las cosas a lo largo del tiempo. Entonces tendré la información del paquete. Entonces en esta ocasión, tengo el g. tengo el g, luego spring framework, los modulos, modelo de aplicacion de punto. Entonces esta vez, ¿qué tipo de módulo estoy exponiendo el tipo? El tipo será módulo de aplicación abierto. Estoy diciendo, oigan, chicos, que este tipo esté abierto a todos. Esto es bueno. Esto es bueno. Haz esto abierto a todos. Sí. Bien. Entonces, creo que el siguiente paso que vamos a hacer, intentemos correr por toda la aplicación. Reemplacemos toda la excepción de argumento ilegal, todas las demás excepciones con esta excepción modulada Probablemente regresen aquí y luego hagan las cosas y luego manejen las cosas un poco mejor, ¿verdad? Creo que esa debería ser la siguiente causa de acción. Bien, aquí no hay excepción. ¿Tiraste alguna excepción en la configuración? No, no lanzamos ninguna excepción. De hecho, vamos a echar un vistazo a la realidad, vamos a echar un vistazo a vamos a ver la acción. Sólo mira a estos tipos. Sí, este es un caso. Este es un caso. Vamos a hacer cambiar esto para modular. Cambio a excepción moderada. Cambio a excepción moderada. Ahora bien, esto funciona bien. Esto funciona bien. Ahora bien, si realmente estamos cambiando eso, en realidad estamos cambiando eso. Vamos a seguir adelante. A ver. Recuerda, está abierto a todos, así que no deberíamos tener ningún caso en el que realmente suceda algo. Aquí, en realidad podemos lanzar este tiempo de ejecución. En lugar de tiempo de ejecución, campana modular excepción, sólo pasando por sólo ver este sistema sólo se puede obtener el mensaje. Esto funciona. Entonces vamos a revisar la acción del evento. La acción del evento no tiene nada. Comprobemos la configuración. Comprobemos la publicación del evento. ¿Hiciste algún trabajo aquí? No creo que hayamos hecho nada ahora. No, aquí no hicimos nada. Repasemos el inventario. Consulta el servicio. ¿Expuso algo en este servicio? Veamos la implementación del servicio. Oh, sí. De hecho, podemos lanzar esto. Entonces sí, esto funciona. Entonces, creo que eso debería ser para este tipo. Entonces revisemos la T. ¿Hiciste algo en el? No. Pasemos al otro. Solo estamos pasando por solo reemplazar toda la excepción personalizada como prometo que lo haríamos. Solo estamos reemplazando todas las excepciones personalizadas para usar todas nuestras excepciones a nuestra excepción personalizada. Bien, veamos el servicio de eventos. Bien, no hay nada ahí. Entonces esto se ve bien. Comprobemos nuestro convertidor de tipos, Sí. Sí, el convertidor de tipo también tiene algunos cambios. Bien, entonces esto es bueno. Esto es bueno, ¿verdad? Esto es bueno. Esto en realidad no está entrando, así que básicamente puedo simplemente presentarlo. En macetas. Entonces esto está bien ahora. Todo bien. Puedo quitarme esto. Todo bien. ¿Qué más? A ver. El servicio de eventos no tiene nada. O servicio, ¿ tiene algo? Creo que ya hemos pasado por esto antes. Esto no tiene nada para nosotros bien, esto está bien. Comprobemos el pago. El pago debe tener el convertidor. Comprobemos aquí. Vamos a cambiar esto. Ahora aquí podemos cambiar esto y esto debería funcionar como es, como debería significar decir. Entonces tenemos los insumos. Entradas, entonces tienes las entradas, luego tenemos la C, la Z, el caso con cuerpo de resorte, luego la excepción, luego la estrella. Eso funciona. Bien. Comprobemos el servicio de eventos. El servicio de eventos no tiene nada. Bien, así que hemos podido reemplazar todas las excepciones dentro de la aplicación. Entonces esto estuvo bien. Entonces, si ahora se muestra alguna excepción, esta se cortaría. Ahora bien, sabemos que con excepción de lanzamiento, al parecer, necesitamos tener un manejador general, ¿verdad Así que vamos a seguir adelante y crear un manejador de excepciones globales. Seguro que ustedes ya están acostumbrados a esto. Rápidamente solo mencionaremos esto, lo llamaremos global o llamaremos a esta excepción global. Manipulador de excepciones, manejador de excepciones globales y esto debería ser un consejo de control de descanso Controlemos los consejos. Miembro, esto también es un componente. Verificamos a través. Esto en realidad es solo escribir un consejo de controlador, responsable el minuto de descanso, básicamente funciona. Si revisas dentro de este tipo, este también es un componente para ser escaneado y para ser detectado. Todo bien. Con esto, entonces vamos a presentar un ¿sabes qué? Teniendo esto, así podemos seguir adelante y sobrescribir podemos sobrescribir algún método Ver, ¿el método puede ser la lectura? No es así. Si quieres escribir el método, probablemente quieras probablemente quieras usar querer básicamente extender el manejador de excepción de entidad de respuesta y eso nos dará acceso Eso nos da acceso a. Creo que estoy más interesado en el argumento del método excepción porque una vez que realmente intentamos acceder desde la API realmente y tenemos algún cuerpo algún cuerpo de solicitud o algunas cosas en el controlador que se detectarán y solo podemos meter excepción Comprobemos el argumento del método no válido. Esto es bueno. Pero en lugar de hacer esto, esto es en realidad una exageración para mí. Podemos solo para que puedas quitarte esto, no vas a hacer uso de todo esto, y yo solo eliminaré la anulación. Con esto, si estoy haciendo esto, lo que me sirve es que pueda simplemente colocar en el manejador de A excepción aquí En el manejador de excepciones, entonces queremos manejar el argumento método, excepción no válida Eso es caso de uso de subs. Entonces revisemos también. Manejemos El ModuliteCeption, sí, el ModuliteCeption. Agreguemos la excepción del modelo. Entonces llama a esta entidad de respuesta pública. Creo que necesitamos tener un método de retorno. Vamos a llamarlo respuesta, ¿ verdad? Vamos a llamarlo respuesta. Llamemos a esto y manejemos modulif Modulifeception. Bien, esto funciona. Entonces llámalo ModuliteCeption Entonces sólo tienes que seguir adelante para atrapar esto. Entonces solo traemos esta copia y pegamos. Simplemente cambiamos a este tipo a. Entonces tenemos que manejar los errores. Tenemos que manejar los errores. Pensemos en estos pedacitos. Pensemos un poco en estos para manejar los errores. Probablemente deberíamos tener una respuesta, como mencioné. Tengamos una respuesta. Llamemos a esta respuesta. Yo básicamente debería ser récord. Debería ser un disco. Básicamente, solo queremos regresar. Digamos este mensaje de cadena y el estado HTTP, ¿verdad? Estado HTP. Creo que esto funciona. Entonces aquí mismo, puedes entonces sí, así que esto está bien. Entonces también queremos leer básicamente la excepción del resultado vinculante si realmente estamos usando el método. Recuerde que la excepción del argumento del método en realidad va a entrar en los lugares donde estamos haciendo algo como esto donde realmente tenemos a este tipo, al parecer, vamos a colocar algunas anotaciones de RSC de validación Es por ello que introducimos esta validación de inicio. Estar haciendo eso. Rápidamente solo vamos a leer, vamos a leer de la vamos a leer de este tipo. Bien, ¿qué debo hacer? A ver. Para este argumento del método, podemos tener una lista, ¿verdad? Tenemos una lista de errores. Solo devolvamos un mapa, un mapa, luego pensando en pensar, deberíamos tener un mensaje, un mensaje está bien, entonces puedes tener una lista de errores, déjame hacerlo tan simple como es. Hagámoslo tan simple como es. No quiero complicar decenas, realidad puedes modificar tus necesidades Simplemente gire una lista de cadenas porque esto puede devolver varios errores. Vamos a convertirlo en una lista de cadenas y eso funciona. A partir de aquí, tenemos una lista de cadena, lista de cadenas, creo que es mejor si simplemente inferir del lado derecho Hagamos una excepción a esos binarios increíbles. Esto en realidad solo hace todo lo que necesito. Entonces de este tipo, ¿quiero para cada uno no? Quiero detener stream, Stream después de streaming, luego quiero mapear. Entonces quiero mapear el error de campo, el error de campo. Quiero obtener el error de campo, lo llamaré error de campo. Entonces usemos método de referencia método de referencia, luego obtiene el mensaje falso. Entonces es lista. Creo que esto funciona bien. Creo que este resto binario extra recibe pocos errores. Necesitamos pocos errores, no todos los errores. Obtener pocos errores, obtener pocos errores. Esto funciona. Entonces podemos inferir a partir de aquí. Lista de llamemos a los errores de campo. El retorno nueva entidad de respuesta, entonces creo que deberíamos rapir el método privado que simplemente se pega en una lista de fielders que simplemente hará esto más simple Ven aquí, privado. Mapa privado privado de mapa, luego cadena, luego una lista de cadenas, luego lista de cadenas, luego simplemente lo llamamos Obtiene error Era, luego cadena, luego temido errores Bien, esto funciona genial. Entonces, ¿qué queremos hacer aquí? Sólo queremos dejar el nuevo hash. Bien. Entonces queremos decir ratas ponen. Oh. Increíble. Llamémoslo errores. Errores. Después pasamos en los fildeadores, solo regresamos mapa Al regresar aquí, solo llamaremos al mapa Gets r, luego pasaremos los palpadores, filtros, eso funciona Entonces solo llama a los Netst's a ver lo que piensa este tipo. Toma el mapa. Así es bueno pasar encabezados. Digo nuevas cabeceras HT, luego estado GTP, estado P. Estado, la solicitud de batería. Solicitud de batería. Creo que esto funciona. Esto funciona bien. Entonces para esto, solo queremos devolver la respuesta, solo decimos devolver nueva entidad de respuesta. Entonces llamémoslo una nueva respuesta. Nueva respuesta, digamos x obtiene mensaje localizado, mensaje localizado, luego estado TP, solicitud incorrecta, solicitudes incorrectas. Mala solicitud, entonces esto también necesita que la mala solicitud tuviera solicitud. Derecha. Así que solo un simple manejo de exención simple solo para atender realmente escenarios. Creo que lo hemos hecho bien. Sinceramente creo que lo hemos hecho bien, ¿ verdad? Creo que lo hemos hecho bien. Entonces con esto ahora, este es un caso típico de si no tienes la excepción. Ahora bien, esto va a ser genérico para todo. Tenemos que permitirlo dentro. Tenemos que decirle al modelo, los módulos que se heredarán, como, oigan, oigan, chicos, por favor esperen usar esta dependencia del modelo de excepción, modelo de excepción. El caso típico sería en el caso de, el caso del orden. Iremos al módulo O. Nosotros elegimos esto, se puede decir, Oye, también esperamos excepción de excepción, ¿verdad? Modelo de excepción. De la misma manera que podemos entrar, ¿la estamos usando dentro de este tipo? ¿Lo estamos usando aquí? Sí, lo estamos usando aquí. A la derecha, sólo podemos copiar esto para este mismo tipo. ¿Tan solo copiar esto? Entonces colóquelo dentro de inventario porque al parecer estaban usando con inventario ahora, colóquelo dentro de inventario. Esto está dentro del inventario, así que no necesitamos todo esto. Solo quieres exponer excepción. Pero esperas esto dentro de la excepción también. Publicación de eventos usándolo, este tipo ahora lo estamos usando, ¿no? Sí, lo estamos usando. Podemos usar esto. Podemos usar esto. Sólo vamos a usarlo en la base. Simplemente puedes elegir lo mismo del inventario. ¿Somos mil? No. Ya que estás usando ahí, puedes simplemente colocarlo aquí, ¿verdad? Coloca aquí también a este tipo. Entonces sí, el caso de uso está resuelto. Antes de continuar, ejecutemos rápidamente esta prueba. Entonces cuando ejecutemos esta prueba, si no hay errores, entonces este video ya es muy, muy largo. Entonces vuelve a colocar realmente la validación y las anotaciones en los objetos, ¿verdad? En los objetos en los que realmente estás entrando como el cuerpo de la solicitud, entonces puedes comenzar a hacer algunas pruebas para ver si esto realmente funciona con precisión. Bien, vamos a probar esto para estar seguros de que no se rompa nada Bien, podemos ver que algo va, algo va mal, ¿verdad? Entonces, ¿a ver qué pasó con el pago? ¿No lo colocamos en pago? Al parecer, el pago ya se está quejando. Vamos a venir aquí. Coloquemos la excepción aquí. Mostrar este probablemente será el problema. Excepción. Excepción. Entonces bien, todos los demás se ven bien Todo el mundo se ve bien. Bien, vamos a correr por los pagos ahora, ¿verdad? Corremos por el pago. si el pago está bien ahora porque creo que eso es de lo que básicamente se va a quejar pago , ¿verdad Chicos, sé que estos videos se hacen muy largos. Solo quiero estar seguro de que lleguemos a un muy buen hito, en lugar de volver a arreglar y bug. Bien, ya ves, esto está bien ahora. Esto está bien. Entonces veamos qué hay de malo con el inventario. Creo que el inventario tampoco estaba funcionando. Veamos por qué eventual no se estaba ejecutando. Entonces, hagamos una prueba de inventario, ¿verdad? Inventario, ¿cuál es el problema? ¿Qué hice mal? Veamos por eventr Bien, echando un vistazo. Bien, Eventr' también feliz. Entonces todo es feliz. Bien, chicos. Así que voy a volver. No puedo comprometerme. No voy a cometer esto aquí mismo. Quiero terminar todo esto juntos. Voy a volver. De hecho, ordeno a los demás. Bien, muchas gracias por acompañarme. Nos vemos el siguiente video. 36. Excepción y validación 2: Bien chicos, muchas gracias por acompañarme. Sí, bien. Este manejador de excepciones estaba en realidad en el modelo para el manejo de excepciones He podido manejar un par por todos los que en realidad hemos comprobado. Hemos cambiado toda la excepción personalizada de tiempo de ejecución a esta excepción de tiempo de ejecución, excepción de argumento regular a nuestra excepción personalizada, podemos crear realmente el identificador de excepción global. Vamos a probar esto. Colocamos puntos de interrupción, podemos ver si esto está funcionando bien como se esperaba. ¿Todo bien? Lo siguiente que quiero que hagamos es ir creo que el único controlador que tenemos es en el otro modo, ¿ verdad? Ese es el otro módulo. Este otro módulo, en realidad estamos consiguiendo esto y esto o chicos. Comencemos a colocar una excepción personalizada. Empecemos a poner nuestra notación en esto. Por favor chicos notas, puedes usarlo ha sido declarado, puedes usar la validación en los registros. Estoy seguro de que algunas personas no conocen algunas personas realmente saben una manera de hacerlo, pero puedes colocarlo directamente sobre él y funciona bien, no tiene ninguno no tienes ningún inconveniente Esto en realidad fue bueno. Yo sólo lo colocaré. Voy a ser para las cuerdas que estoy usando no en blanco. No en blanco, y sólo voy a enviar un mensaje. Yo solo digo que el nombre del cliente no puede estar en blanco. No puede estar en blanco. Puede ser lob blank Creo que lo mismo va para el correo electrónico. Simplemente llamaré al correo electrónico de este cliente. Economía de correo electrónico del cliente en blanco. Entonces para la lista, si estás al tanto lista Websi lista válida, solo colocas físicamente en válida en ella, en válida Sólo hay que ponerle una valida. El anuncio válido debe estar llamando desde la validación de Yakarta. Entonces puedes ir dentro. Este anuncio válido activará la validación. Este add valid activará la validación dentro de este tipo. Permítanme simplemente arreglar esto para que podamos tenerlo debidamente estructurado. Sí, podemos hacer esto. Al volver aquí, también puedo tener esto voy a decir inventario El nombre del inventario no puede estar en blanco, luego cantidad, coloquemos la validación aquí. Usemos amina, la mínima. Al parecer, no queremos ningún valor negativo. Nosotros solo decimos el mínimo, solo decimos que el mínimo que queremos es uno, toma un largo si revisas, toma un valor largo y colocando el mensaje. El mensaje mensaje solo decimos el valor, el valor debe ser grande mayor el cero. Entonces uno también es aceptable, ¿verdad? Mejor que cero. Entonces esto funciona. Creo que tenemos que probar esto, ¿verdad? Tenemos que probar esto. Así que voy a ejecutar rápidamente esta aplicación. Ejecuto esta aplicación. Vamos a mostrar mi vamos a estar seguros, déjame ejecutar mi redacción de docker solo para estar seguro de que las cosas están funcionando y funcionando Bien. Bien, este tipo empezó bien. Aplicación de estudio. En lugar de aplicación, entonces vamos a disparar algunas peticiones. Voy a estar usando lo que vamos a usar como antes, pero esta vez voy a omitir algunos valores Sólo vamos a cerrar este trabajo. ¿Sabes qué? Ejecutar Déjame correr en el modo bug. Vamos a correr en modo de depuración. Asegurémonos de que las cosas están entrando en nuestra capa de excepción. Entraré aquí, coloco el punto de ruptura aquí, coloco el punto de interrupción Para el controlador, toda la anotación realmente coloca toda la anotación realmente se colocará allí Esperamos que las cosas no pasen de esta parte. Sí, eso me recuerda que necesitamos colocar un válido aquí en válido. Por favor, lo realmente importa. El otro realmente importa. El otro en la materia. Realmente no sé por qué, pero descubrí que tienes que colocar el válido después del cuerpo de solicitud. Si coloca el válido ante el cuerpo de la solicitud, no se activa. No es aparejador Creo que aquí nos perdimos algo. No hemos puesto notación aquí, ¿verdad? No, no, no, no, aquí no hemos colocado nada. Tenemos que hacer eso, chicos. Tenemos que asegurarnos de que esto no es necesario que hagamos esto. Hagamos esto, por favor no está en blanco. No estoy en blanco, en blanco, no, no, este pincel en blanco. No tengo en blanco, el mensaje pin y el mensaje es otro identificador no puede ser Oh, es obligatorio. Digamos que se requiere, aparte de que no se pueden requerir cobijas. Nosotros solo usamos lo mismo para los otros chicos. Vamos a estar seguro lugar tu chico? A ver. Se requiere. Entonces, lo que se requiere. No debería ser mayor de lo que se requiere. Se requiere, se requiere. Creo que esto funciona. Vamos a correr en el modo bug. Entonces, en realidad no estamos tratando de hacer pagos. Solo quieres asegurarte de que las cosas en realidad no pasen. Solo estamos tratando de asegurarnos de deshacer las excepciones. Bien, así que vayamos a un bate rascador. Un rasguño. Aquí es donde nos despidieron, Elia. A ver. Nombrémosle a este 55. Hagamos esto vacío. Hagamos esto vacío. Nombre de la invención. Hagamos esto vacío. ¿Verdad? Entonces aclaremos esto. Vamos a ejecutar esto. A ver. Bien, ¿lo ves? Esto fue capaz elegir nuestro método no válido porque eso es básicamente lo que escoge cuando llega al controlador y los cuerpos de solicitud que estás pasando no está validado o probablemente lo validamos y encontramos errores. Esto es lo que sucede. Si solo nos movemos, ya ves, ya tenemos algunos errores, que es un correo electrónico personalizado se requiere, se requiere nombre de invención. Recuerdo que eso es exactamente lo que hicimos si revisas aquí. En realidad, movemos este correo electrónico del cliente y también eliminamos este uno de los nombres de la invención. Vamos a correr esto hasta el final. Tomemos una consola. Este es un mal pedido. Si vas adentro, vamos a ejecutarlo de nuevo. Vamos a ejecutarlo de nuevo esta vez. Vamos a soltarlo. Recibimos una mala solicitud. Si comprobamos, ves, cliente no en blanco, cliente, todo se obtiene apropiadamente, mensaje predeterminado se requiere nombre de inventario, nombre de inventario, vemos que esto está funcionando bien. Esto está funcionando bien. Ahora bien, si has visto más de esta depuración, la razón por la que he visto todos estos mensajes de depuración fue porque habilité la depuración mientras en realidad estaba probando. Así que puse en modo depuración aquí para módulo y este tipo, creo que ya que no estamos depurando, déjame solo veamos Esto es depuración del módulo de pantalla. Vamos a comentar esto para que podamos sentar las cosas un poco más amablemente. Solo reiniciemos esto. Empecemos esto y solo ejecutemos la prueba una vez más. Vemos exactamente cómo se ve. Vamos a mover esto puedo ver esto. Todo bien. Así que mira nuestra excepción realmente entrar en acción. Hemos podido ver que la excepción entra en juego. Pero vamos a ustedes, ¿dónde está el resultado? El resultado siempre se guarda dentro de este tipo. Creo que siempre se guardó el archivo de Jason. Creo que es la última, pero no estoy segura porque estoy usando a este tipo para otra prueba, otro proyecto. Así que déjame estar seguro. Esto es 24 oh seis. Veamos seis oh uno. Creo que no es reciente. A ver. Bien. Comprobemos esto. Bien, vamos a ver esto. Echemos un vistazo a esto. Vamos a ver esto. ¿Bien? Creo que ¿cómo abro esto de nuevo? Déjame pensar que debería haber una tienda de este Jason File. Creo que es en algún lugar en la parte superior voy a mostrar S. ¿Ves esto? Sí. Esto es. Entonces busquemos seis oh dos. Verás, este es el error. Esta es la respuesta que obtienes. Esta es la respuesta. Porque lo estoy ejecutando de cliente HTP otra vez, es exactamente la respuesta que obtienes si estás huyendo de Postman, obtienes exactamente este mismo resultado Simplemente no quiero salir de esta pantalla. Por eso te estoy mostrando desde este lugar. Bien chicos, hemos podido validar que nuestra excepción funciona. Alguien podría decir, ¿qué pasa con esta otra excepción? Lo que estamos haciendo sólo validando esta sección y esta excepción. ¿ Y la otra excepción? Antes de hacer eso, hagamos rápidamente este pedido completo. Hay este orden completo que simulamos para modular la excepción y vemos cómo eso realmente entra en juego. Tenemos que demostrar que ambos realmente funcionan. Vayamos rápidamente a rascar la parte otra vez. Entonces busquemos el pedido completo. Nosotros colocamos el completo. Este es el pedido completo. Vamos a hacer esto vacío. Hagamos esto vacío y manejemos a este tipo. Verás, también llega hasta aquí, vamos a echarle un vistazo. Veremos qué es lo que es el alimentado o lado cinco en realidad se requiere. Si vuelves a cero, si vuelves a donde realmente se almacenó esto, como puedes ver, o se requiere identificador. He podido demostrar que veamos otros lugares en los que puedo simular esto. A ver, a ver, a ver, a ver. Vamos quiero simular la excepción modult, y eso es lo que quiero hacer ahora mismo Vamos a entrar en el otro. Quiero ver cómo puedo simular esto. A ver. ¿Cómo puedo simular esto? Porque aquí no hay excepción int. Todo se ve bien. ¿Y qué tal veamos el pedido completo, el pago completo? Bueno bueno bueno CC, tenemos esto aquí. Aquí tenemos esto. Cambiemos esto olvidé cambiar esto. No me di cuenta de esto. Cuando pasamos un identificador que no existe, deberíamos obtener identificador de pedido, no encontrado. Voy a decir u ordenar, no encontrado, orden con identificación, digamos, orden. Con ID, no encontrado. Yo haré esto. Después con ID, su ID no se encontró. Luego coloco dentro de esto, solo completo o puntos, obtengo el identificador. Vamos a probar esto. Vamos a probar esto. Vamos a probar esto. Lo que voy a hacer es simplemente colocar un punto de interrupción aquí justo antes de que lo golpee, luego simplemente lo ejecutaremos y veremos cómo funciona Mientras se acerca esto, saltemos a un escocés malo. Esto es para arriba. Vamos a saltar aquí. Sabemos que esto existe. Sabemos que esto existe. Solo quitemos una carta porque esto no va a existir. Vamos a encender esto. ¿Ves? Tenemos aquí dentro. Vamos a ejecutar esto. ¿Ves? De hecho, llega a la excepción moderada, lo que demuestra que esto también está manejando en todas partes la excepción de trémolto Y esto también funciona. Si vas a revisar estas piezas aquí acabamos de despedir esta solicitud. Ya ves, mal pedido, bla, bla, bla, bla, ordena esta nieve encontrada y nuestra respuesta la definimos, que contienen mensaje y ven eso es exactamente lo que estamos consiguiendo aquí, que es este tipo del que hablo este tipo Este tipo en realidad está pateando . Entonces las cosas están funcionando. Las cosas se ven bien, ¿verdad? Estos se ven muy bien. Ahora, alguien podría preguntarme, ¿qué pasa cualquier otra excepción? ¿Cómo lo manejas? Cualquier otra excepción se puede clasificar en excepción de tiempo de ejecución, creo, por lo que podemos entrar aquí y podemos manejar para excepción de tiempo de ejecución. Puedes entrar aquí y elegir un tiempo de ejecución. Una excepción de tiempo de ejecución que surge, esto definitivamente la elegirá. Este puede ser el bloque para la excepción de tiempo de ejecución. Puedes hacer esto y otras excepciones pueden ser manejadas por esto. Esta podría no ser la mejor fantasía. Quizás el mejor enfoque hubiera sido que tuvieras una clase como una clase base, una clase Bs o clase de respuesta estándar que toma en la respuesta, regresas a tu cliente que tendrá un dato T genérico, datos pb que quieras devolver. Entonces tiene un campo de error y mensajes. Entonces puedes hacerlo genérico en lugar de usar una lista de mapas aquí y esta respuesta. Simplemente puede ser el mismo objeto genérico que se devuelve, el mismo objeto se devuelve a los usuarios para esto. Entonces creo que esto lo completa, ¿verdad? Este cómplice. Somos capaces colocar nuestra validación Starker Somos capaces de hacer manejo de excepciones. De hecho, somos capaces de colocar la notación que se supone que debemos, y la probamos y esto está funcionando muy bien. Validación de clientes, toda la validación personalizada y manejo de excepciones es bueno, es bueno. Escribió prueba para la excepción casi se me olvida eso. No olvides ningún módulo, ¿verdad? No te olvidas de ningún módulo. Lo que voy a hacer es simplemente duplicar esto. Sólo voy a duplicar. Vamos a codificar esto más bien, permítanme citar excepción, excepción, excepción. Voy a solo para salir de la prueba, llamarlo prueba de integración de excepción. Oh, yo digo, hay excepción también Oh, sí, excepción debería tener prueba. Hay un módulo. Cada módulo debe tener prueba, ¿verdad? Entonces lo mismo que hacemos aquí. Entonces tenemos la prueba del módulo de aplicación. Entonces dentro de esto tenemos vacío, luego verificar. Vamos a llamarlo verificar, ¿verdad? Entonces esa es la prueba. Entonces, vamos a pegarle a todo. Asegurémonos de que todo esté funcionando como se esperaba. Vamos a golpear todas esas pruebas. Nada debe romperse. Cualquier cosa se rompe, arreglamos, entonces llamaremos a este video. Traemos estos videos para cerrar. Cierra esto. Vamos a cerrar todo esto cancelo parar, entonces quiero correr adentro, ejecutar nuestras pruebas. A ver. Pago, ¿ me vas a dar algún problema? Espero que no. Bien, vemos bien. Estamos bien en eso. La excepción es buena. La instigación es buena. Esto es bueno. Esto es bueno. La era es buena. Entonces la acción del evento es buena, ¿verdad? Entonces la instiguón del correo electrónico es buena. Así que eso satisface contigo. Muy bien, D. Esto se ha completado con éxito. Entonces llegando al siguiente video, voy a comprometerme esto. Voy a cometer esto. Entonces ustedes deberían verlo en GitHub. Lo comprometo contra excepción y excepción y validación personalizada, que no tengamos que esperar solo en el video para verme hacerlo. Y en el futuro, creo que lo siguiente sería entonces tocar algo muy interesante, algo muy interesante, que entonces sería documentación, ¿verdad? Documentación documentación. Muy bien, gracias chicos. Nos vemos. El siguiente video. 37. Documentación de Modulith: Bien, chicos, muchas gracias por quedarte conmigo hasta este momento. Sí. Bien, entonces ahora mencioné el último video que vamos a estar metiendo en documentación. Entonces, lo genial de spin Modulf es que en realidad agregaron una característica de dónde puedes crear diagramas De hecho, podemos crear diagramas donde realmente puedas mostrar algunos de ustedes pueden mostrar exactamente cómo el mod es realmente interactuar entre sí. Creo que es algo muy bueno que deberíamos explorar, y eso es exactamente lo que vamos a hacer en este video. Sin decir muchas palabras, vamos a saltar a ello. Lo primero que tenemos que hacer es que necesitamos crear una clase de prueba diferente, una clase de prueba diferente. Dentro de esta clase de prueba, ahí es donde realmente desencadenaría las cosas. Llamemos a esta documentación, ¿verdad? Haciendo esto, entonces crearemos una clase. Vamos a llamar a la prueba de documentación de clase. Documentación Prueba de documentación. Ahora bien, esto no es parte de la prueba de botas de primavera, así que necesito dejar esto muy claro. No es parte de la prueba de libros de primavera, así que no puedes seguir adelante a anotar con nada, ¿verdad Sin embargo, este es el formato que toma. Así que en realidad creas un módulo de aplicación. Módulo de aplicación crear un módulo de aplicación. ¿Por qué autocomplxe está haciendo esto? Módulo de aplicación. Modo de aplicación, el modo, luego se crea una instancia de modos luego se crea una instancia de aplicación, modos de aplicación Entonces pasando estás pasando tu clase base, Estás pasando esta clase base, ¿ verdad? Te vuelvo a escuchar. Estás pasando la clase base. ¿Cuál es la clase base? Se llama muelle modelo caso inicio rápido en él. Entonces el resorte el módulo de resorte cruzan la clase de aplicación Pasas en esta clase base porque este tipo está básicamente en el nivel superior o se da cuenta en el nivel raíz que en realidad puede hacer la transición a todos estos módulos Eso lo tenemos. Entonces creamos solo una prueba. Esto básicamente será el detonante. Creamos una prueba. ¿Qué estoy haciendo? Prueba, luego nula. Entonces sólo lo llamaré escribir documentación. Documentaciones Ns. A documentación, fragmentos ¿Bien? Todo bien. Entonces comenzaremos diciendo Nuevo Nuevo documento. Sí, nuevo documento. Después pasando los módulos, en realidad creamos aquí. Pasando el módulo. Entonces solo di eso bien. Módulos derechos como planta UML. Exploremos esto primero. Exploremos esta parte, escribamos esto como planta UML. Entonces, lo que hacemos solo ejecutamos esto. Así que no necesitamos ninguna configuración extra. Todo lo que tenemos que hacer es ejecutar la prueba. Así podemos usar la prueba de maving para ejecutar toda la prueba o simplemente usar atajo aquí o simplemente ejecutar toda la prueba Entonces una vez que ejecutamos toda la prueba, lo que debería pasar es que luego deberíamos ver dentro la carpeta de destino la carpeta de destino que se está generando para Mving Entonces si realmente estás usando un Gdo comprobamos el archivo gden Pero para ver exactamente para ver la prueba básicamente escrita Entonces solo observemos vamos a observar eso bien. Esto está hecho, observemos esto deberíamos tener un archivo. Todo bien. Verás, tenemos un archivo llamado Spring Modulate Docs Exploremos esta primavera Modulate Docs. Esto es muy útil. Todo bien. ¿Ves? Esto es simplemente increíble. Esto es simplemente increíble. Ahora, agregué en agregado en un plugin. Creo que el nombre del plugin, no puedo recordar num. Creo que se llama Plant UML. Hay un plugin llamado planta UML que instalé en realidad pude conseguirme esto Normalmente, esto es lo que obtienes. Pero si no sabes exactamente cómo hacer esto, lo que puede pasar es que puedas decir creo que cómo lo exploré al principio fue decir plantas. UML en línea. Hago planta UML en línea. Así fue exactamente como pude ir por eso. Hago planta UML en línea. Entonces copia todo esto. Entonces lo pegas aquí. Entonces pegarlo aquí y esto debería generarlo para ti, esto debería generar ves esto, esto lo generaría. Pero si quieres enchufar, solo ve si tu ID es compatible con la planta UML y la tienes más, puedes simplemente pasar por este enfoque Eso es lo primero que realmente hemos explorado. El plan a UML Hay algo más que básicamente estamos explorando, ¿ verdad? Ya ves que esto es increíble. Vemos exactamente cómo se conecta todo. Vemos que el otro módulo es la guía principal que desencadena todo. Uh, ya ves, Email escucha los eventos desde aquí. Ellos Emil escucha a depender de aquí. Se puede ver que los pagos dependen de excepción. El inventario depende de la excepción. La acción del evento depende de la excepción. Se puede ver incluso los otros modelos ahí. Entonces esto solo te da una visión general completa de toda tu aplicación, que creo que es una muy buena representación diagramática de cómo funciona realmente la aplicación . Esto es simplemente genial. Esto es simplemente genial. Todo bien. También hay algo más que podemos explorar. Podemos decir que también puedes escribir. Puedes ver que aquí solo tenemos un dato. También se puede ver escribir módulo individual individual como UML. Vamos a ejecutar esto de nuevo. Entonces hagámoslo. Vamos a ejecutar esto. Individuales cada uno de ellos uno por uno se escribirá como el UML planificado Veamos exactamente cómo funciona eso. Entonces ves que todo va a estar escribiendo uno tras otro. Así que sólo vamos a esperarlo. Todo va a venir en un poco. Sólo voy a esperar a que todo termine. Todo bien. Bien. Bien, creo que terminamos. Creo que ya está hecho. Bien, vamos a explorar. Impresionante. Impresionante. Para que puedas ver todo cada modelo. Cada modelo que entra. ¿Ves? Es depende de que demuestre con quién está directamente vinculado. Sus ver veamos la acción del evento. Acción de evento también. Ves que esta publicación del evento es independiente. Recuerda, no hicimos nada con esto, esta publicación de eventos personalizados, que en realidad modelamos la tabla que se creó automáticamente para nosotros, Usando un GPA, pero no hicimos nada con él. Yo solo te mostré cómo podrías modelar realmente , en realidad modelar una entidad contra esa mesa y usarla a voluntad. Entonces el standalon de excepción que otros están dependiendo ves, Inventario es dependiendo de ello. Esto es bueno. Esto es bueno. Esto es bueno. También tenemos otra opción que podemos explorar. También hay otra opción. Permítanme cerrar todo esto excepto revelar otras pestañas. También hay otro que también podemos decir punto escribir moduva Modos Modo Ves exactamente cómo funciona esto. Vamos a ejecutar esto de nuevo. Yo sólo voy a correr por todo también otra vez. Esto se está ejecutando a través de, vamos a ver algunas pruebas de integración para que cargue el contexto cada vez que es por eso que toma un poco de tiempo. Solo seamos pacientes para permitir esta carrera, veremos exactamente cómo funciona esto también. Entonces exactamente cómo funciona esto. También hay otra opción una vez que hayas explorado esto donde algunos podrían decir, am no me gusta plantar mil. ¿Hay alguna otra opción? Sí, también hay otra opción que estaremos explorando, permitamos que esto termine. Dejemos que esto termine. Dejemos que esto termine. Esto está hecho, vamos a comprobar. Todo bien. Puedes ver esto esto es tan lindo, ¿verdad? Te dice el paquete base, te dice a los oyentes de eventos lo que está escuchando y te dice qué eventos escuchan aquí mismo Entonces si revisas esta acción de evento, puedes ver, dice que tiene un controlador. Vemos que tiene un servicio llamado evento publicado. Entonces te muestra todos los beans, justo dentro de él, el repositorio. Echemos un vistazo a algo más interesante. Comprobemos la O, ¿ verdad? Veamos el. Ya veo. La O tiene otros eventos, otro servicio. Ves el repositorio, tenemos un básicamente, veamos, tenemos los componentes, tenemos los servicios. Tenemos esto, el servicio de inventario que conectaste al evento. Verás, también tenemos varias cosas co. Varias otras cosas de co, ¿verdad? Así que otras cosas cocinan. Por último, comprobemos el pago. Ves que esto realmente entra. Entonces esto es realmente bueno. Esta muy buena, hombre. Es bueno. Entonces esta es una documentación sólida que se le proporciona, que solo puede copiar físicamente y simplemente colocar ahí afuera en su documentación para que sea utilizada, ¿verdad? Bien, así que vamos a cerrar otras pestañas. Sí, también hay esta opción que quiero explorar. Yo solo leo básicamente la documentación en su contra. Vi algo fascinante. Que son las opciones daga, en realidad podrías explorar Vamos a ver cómo se ve. No estoy viendo como pero vi que podías hacer algo como esto. Por qué quieres cambiar, estás pensando en cambiar este valor predeterminado, cómo se ve a algo un poco tal vez más UML como a lo que tradicionalmente estás acostumbrado Veamos cómo funciona esto. cómo funciona esto. Vamos a ejecutar esto de nuevo. Veamos cómo funciona esto. Solo lo estoy explorando, ¿verdad? No sé si funciona en conjunto con esto, tengo que quitar todos estos y hacer que esto funcione bien. Pero este es solo tu estilo. En realidad, el estudio debería ser escrito. Veamos cómo se. Veamos qué hace. Veamos qué hace. Veamos qué hace. Esto se acerca, que viene. Este tipo viene, explorando cosas. Veamos qué es lo que le pasa. Bien, hecho. Exploración de sets. Veamos esto. Veamos esto. A ver. ¿Cambió algo? No veo ningún cambio. No veo ningún cambio, en serio, ¿verdad? Estaba pensando que va a mostrar algo que nos muestre los diagramas de URL más tradicionales, ¿verdad? Tenía la esperanza de ver eso. Bueno, creo que no estoy diciendo que eso no va a surgir. Probablemente solo necesito revelar forapestañas. ¿Hay para vincular a este tipo con esto? Creo que esto es sólo por defecto. Entonces déjame sacar a todos estos dos. Entonces, saquemos todos estos. Vamos a decorarlo, ¿verdad? Veamos cómo funciona. Veamos cómo funciona este tipo. Sí, saquemos estos alpes. Llévate todos estos dos alves. Todo bien. Vamos a ejecutar esto de nuevo. Veamos qué pasa. Esta solo la última carrera, solo digamos, chicos, solo exploran esto exploran esto. En la documentación, se ve este estilo. Se ve bastante fantasioso. Se ve genial. Esto es exactamente lo que vi. Sentí que esto estaría bien, exactamente lo que vi. Gráfica tradicional de UO Modi que es diferente a esta. Les llevé a Pablo a mostrárselos chicos y vi que Koblar podría lograrlo Este es el código para que realmente esto funcione. Pero sin embargo, creo que no estoy consiguiendo la conexión correcta. Pero creo que ustedes pueden explorar y ver exactamente cómo se ve. A ver esto si conseguimos algo. A ver si conseguimos algo así . Creo que no lo estoy consiguiendo. Creo que no voy a entender esto ahora mismo. Bien. Sí. Entonces básicamente, esto es un así que básicamente, esto es, esto es básicamente las partes de documentación Estoy seguro de que los que hemos explorado son realmente geniales, ¿verdad? Es realmente genial. Creo que en realidad podemos explorar algunas partes más geniales, ¿verdad? Entonces cosas más chulas. Próxima parada, sí. Siguiente parada, creo que todos estarán explorando. Próxima parada, estaré explorando. Entonces ahora mismo como tenemos esto, puedes desplegar esta reproducción. Se puede desplegar esta producción. Esto en realidad se rompería. Para implementar en producción, el conjunto de dependencia necesita agregarlo para soportar realmente el procesamiento en tiempo de ejecución de spring modulate porque como es así, es solo un entorno Eso lo estará viendo en el próximo video S. 38. Documentación de Modulith 2: Muy bien chicos. Gracias por volver conmigo. Se supone que es un video relativamente corto , un video muy corto. No quiero mostrarte cómo se conecta esto en realidad. Acabo de echarle un vistazo otra vez. Descubrí que esto lleva una discusión con las opciones de Dagam. Entonces solo tienes que hacer es elegir a este tipo y simplemente tirarlo dentro de este tipo y tirarlo dentro de este tipo y debería estar bien. Eso básicamente debería funcionar bien. Para el individuo para el individuo y para todo el módulo, veamos qué otras opciones hay. Si no tenemos UML. A ver. Tenemos creo que solo UML y CFO No sé qué hace el CFO. Podemos simplemente explorar B solo quiero mostrarles los factores de recolección. Simplemente ejecuto esto rápidamente y ustedes pueden explorar cómo se ve CFOL, cómo se ve UML Ustedes pueden escoger por defecto, ustedes están usando. Veamos cómo se ve el valor por defecto. Esto sólo está pasando. Creo que es CFOL por defecto, entonces solo elegimos cual solo uno, ¿verdad? Así que solo quería mostrarles cómo esto realmente conecta porque solo le eché un vistazo. Básicamente acabo de revisar la documentación nuevamente hoy documentación mensual para ver cómo se ve, y yo para descubrirla. Así que solo pensé que en realidad debería dejar caer esto rápidamente pero ser importante para algunos. ¿Bien? Así que vamos a comprobarlo. Impresionante, así podemos ver. Esto se ve bien, ¿verdad? Esto se ve muy bien. Esto se ve muy bien. Entonces solo quería mostrarnos esto para la serie individual. Entonces solo quiero mostrarnos esto y creo que sí, gracias chicos. Entonces podemos pasar al soporte de tiempo de ejecución. Gracias. Adiós. 39. Soporte en tiempo de ejecución y actuador: Sí, gracias chicos por acompañarme. Ahora estamos hablando del soporte en tiempo de ejecución. Recuerda que mencioné que esto no puede ir a producción si no tienes el soporte de tiempo de ejecución. El soporte en tiempo de ejecución es muy clave para que lo uses. Y para mostrarte cómo vamos a agregar dependencia, al mismo tiempo, también estaremos introduciendo actuador ¿verdad? Para aquellos que están al tanto del actuador, el actuador en realidad nos ayuda a darle métricas, que puede enchufar para permitir aquí obtener realmente las métricas y exponer así sobre esto en el grafo, ¿verdad? Eso funciona. Así que básicamente, sólo les voy a mostrar la caja chicos. Para demostrar correctamente esto para demostrar correctamente esto, iré a iniciar spring dot IO iniciar el spring dot IO. Ahora bien, si tuviera que agregar dependencia indirectamente a través de mi increíble intellig, tal vez no veamos todo lo que necesitamos agregar Lo que haría para que veamos para que no nos perdamos las cosas, voy a seguir adelante y agregar en Modulf ModulFF solo veo que parece Agreguemos en JPA, para ver todo. Vamos a agregar en Lombok. Derecha. Vamos a agregar en el actuador. Ahora bien, esto es exactamente a lo que me refiero, actuador. Entonces también, entonces creo que lo tenemos todo. Ahora, lo que haremos es entonces, entonces exploraremos a este maven Explorando esto, si lo miras correctamente, verías que tenemos actuador. Ahora mira esto. Contamos con actuador y también tenemos actuador modular Entonces tenemos observabilidad para aquellos que quieren usar la observabilidad, cosas como si quieres usar micrómetro, quieres usar micrómetro, y quieres usar una implementación específica para Sí, básicamente, eso tiene diferente especificación. Entonces con mi viajera, entonces puedes decidir dependiendo del entorno en el que estés trabajando, agregar en podrías agregar en Datadog, dino trace, prometheus, telemetría abierta Entonces podrías agregar un controlador de pila. Entonces hay varios que podrías agregar para la observación. No estás lidiando con la observabilidad en este curso. Este curso es básicamente solo para mostrarle exactamente cómo agregar realmente el actuador y el soporte de tiempo de ejecución. Así que rápidamente solo mostraré otro poco más para que veamos cómo funciona esto. Entonces el soporte de tiempo de ejecución, esto es exactamente lo que esperabas agregar. ¿Correcto? Este es el soporte de tiempo de ejecución si vas a la documentación de spring moduli, se espera que agregues en este tipo, cual es esto, ¿verdad Así que sólo copiaremos esto. Voy a cerrar a este tipo, volveré a nuestro proyecto. Volver a un proyecto. Voy a bajar justo antes de la prueba, voy a añadir en esto. Entonces además, entonces me iría entonces al actuador, recojo el CTATorPick el Sólo estoy tratando de mostrarles cómo lo harían si no están usando Intellig En ambos sentidos, funciona. Después añadimos el actuador, después volveré. Voy a volver. Después bajar, necesito también el CTRedf moduli lo, no voy no voy el momento en que agregas en observabilidad, probablemente porque probablemente podría estar esperando Zipkin Zipkin podría haber sido configurado Mcmmeter te puedo asegurar que siete han sido autofigurados, que empiezas He probado esto y descubrí que si no tienes esas cosas en tu camino de clase, empiezas a tener problemas, por eso no voy a agregar la parte de observabilidad Yo solo voy a agregar solo las cosas importantes que necesitamos, habiendo agregado esto, vamos a ejecutar esto. Vamos a correr las piernas en esto. También quería mencionar que la última documentación que agregamos, he comprometido al GitarPpository, bajo documentación, documentación del módul, para que la puedas encontrar ahí para ver exactamente los cambios que ahí para ver exactamente los Ahora que esto ha sido cableado. La siguiente pregunta entonces es, ¿cómo conectamos esto? Esto es tal como sabemos, como de costumbre, es justo la misma implementación que estamos muy conscientes de donde se está utilizando actuador. Yo sólo voy a entrar aquí. Ahora tenemos el apoyo de tiempo, así que las cosas deberían funcionar tal como están. Yo sólo voy a agregar en la gerencia. Gerencia, entonces quiero incluir la gerencia. Entonces traigo puntos finales. Quiero traer punto final. Entonces quiero la exposición Bit ma no estoy excluyendo, quiero incluir lo que quiero mostrar. Incluir incluir. Entonces solo muestra la salud. Vamos a mostrar la salud. Vamos a mostrar modulf's show modulif porque esta es la palabra clave que necesitamos modulf Vamos esta es la palabra clave que necesitamos modulf Vamos a mostrar esto. Todo bien. Vamos a empezar la aplicación y vamos a golpear el punto final para ver eso? Vamos a darle a esto. Mientras se acerca esto, entonces vemos exactamente cómo surge esto. Una vez que eso está arriba, entonces trataríamos de ver todos los actuadores que están fácilmente disponibles para nosotros, fácilmente disponibles. Déjame que esto esté disponible una vez hecho esto, ¿está hecho? A ver que se hace. Esto está hecho. Esto está hecho. Vamos a entrar aquí. Vamos en Loco host ocho actuador. Todo bien. Para que puedas ver modelarlo. Módulo está disponible. Entonces, una vez que haces clic en modelarlo, boom. Entonces vemos todo lo que tenemos a nuestro alcance. Por lo que nos muestra el modelo de excepción, el modelo de acción de eventos. Vemos el modelo de invención. Ya ves el otro modelo. Ves este modelo. Entonces creo que ustedes están donde pueden ver esto ustedes mismos, ¿verdad? Pero sí digo una cosa. Aparte de ver las cosas como ya evento, ¿por qué no te paras en el hombro con gigantes? Entonces hay algo llamado el personalizador de salud o el personalizador de actuadores, básicamente, el personalizador que tenemos Puede crear un punto final personalizado, que puede agregar al actuador, pero eso está más allá del alcance de este curso. Como se quiere llamar alcance de este curso. Básicamente puedes leer botas de primavera en la práctica, botas de primavera en la práctica. Si tuviera que recordar al autor ahora, creo que las botas de primavera en la práctica es de So Nat Msib SNT Msib la puedes encontrar en la puedes encontrarla en ¿Puedo recordar ahora , manejando Nat Msib SNT Msib la puedes encontrar en la puedes encontrarla en ¿Puedo recordar ahora , manejando Manning.com. Te muestra cómo crear una costumbre personalizada de trator puedes construir este empalme Bueno, vamos. ¿Por qué querrías construir esto? ¿Por qué no te pones esto en ti mismo? ¿Por qué no te limitas a poner esto pone en el actor modular y exponer todo lo que necesitas de inmediato Eso simplemente funciona de inmediato. Todo bien. Yo quería mostrarles cómo esto. Probablemente solo intentemos exponerlo todo. A pesar de que dijiste que no hicieras esto. No siempre hagas esto. Tratemos de exponerlo todo. Veamos cómo funciona esto, ¿verdad? Lo siento, creo que ya que estoy usando Yarmo, necesitaría un Voy a necesitar un código aquí, si me equivoco, voy a necesitar un código aquí Supongo que por eso está funcionando. Creo que a partir de ahora siempre necesitas un código que estés usando Yamo Pero si estás usando aplicación de propiedades, básicamente no necesitas que esta no funcione pero Esto no es reconocido por Yam, así que tienes que colocarlo dentro de los códigos Bien con esto hecho, vamos a golpear el actuador. A ver. Todo bien. Veremos todo lo disponible, todo lo disponible. Básicamente así es como lo colocas. Ahora esto está disponible para ser desplegado en producción, esto está disponible para ser desplegado en producción. Alguien podría preguntarme, ¿a qué te refieres con que estamos bien ahora mismo Oh, sí, esta es exactamente la aplicación que quieres crear. Todo sigue igual. Tus propiedades, probablemente quieras mover las cosas. Recuerden que mencioné algo clave que el componga, deberíamos estar moviendo el archivo de componer, ¿verdad? Deberíamos estar quitando el archivo de componer cuando queramos docorizar Estamos listos para docorizar cuando coloquemos esto en. Entonces creo que lo siguiente será explorar. Queremos empezar a mirar digamos, continuando esta aplicación, ¿no? Vamos a continuarlo. Spring Boots tiene esta increíble integración con la continualización Entonces lo exploraríamos en el siguiente video. Todo bien. Gracias chicos. Creo que fuimos capaces de lograr lo que queríamos lograr aquí. Gracias al ver el siguiente video. 40. Docker: Muy bien, chicos, físicamente se están acercando rápidamente al final de la costa Todo bien. Quiero hablar de documentación. Perdón, voy a hablar de continización, quise decir. Hablaré de la continización. Al parecer, sabemos que la mayoría las aplicaciones creadas en esta época, realidad hay que contenerizar, luego tenerlo desplegado en algún clúster, uberttis o Deco nadó, o incluso si es solo un frasco, aunque sea solo un jar, lo cargues Hoy en día hay varias opciones en las que podrías implementar tu aplicación, ¿verdad? Pero esta particular industria del video tienes que continizar Dcorize Primera opción les voy a estar mostrando chicos, y les mostraré los pros y los contras de algunos. Soy una profundidad continua sobre esto solo para mostrarte. Lo primero que quiero mostrar es que no necesitas hacer nada. No hace falta agregar ninguna dependencia aquí en absoluto. Spring Boots viene en totalmente integrado. Me integro totalmente con Docker. Hasta ahora, tienes un tiempo de ejecución de Docker ejecutándose en ese entorno, básicamente podrías simplemente ejecutar este comando Simplemente ejecute este comando. Déjame mover esto hacia arriba. Vamos a despejar la pantalla. Vamos a conseguir esta pantalla. Simplemente corres. Lo diré porque espero que todos vean, pero solo asumamos, asumamos que todo el mundo ve, pero déjeme decir Maven, Spring, si lo estás ejecutando desde la consola, asegúrate de que tu versión de Java sea la misma versión que se ejecuta en el entorno Entonces si hago versión Vn, creo que deberías tener al menos la versión tres punto ocho, si no me equivoco, 38, la mía es 39 o seis, y estoy ejecutando Java Versión 21. Si no estás seguro, también puedo hacer VN puedo hacer versión de guión Java, ¿verdad Versión de guión de Java, ¿verdad? Se puede ver que estoy ejecutando Java 21, que es totalmente lo mismo que en lo que estoy ejecutando esta aplicación. Entonces lo que pueda entonces solo puedes ejecutar Maven, botas de guión de primavera, luego Eso es todo lo que necesitas hacer. Tal vez enVn espacio, botas de guión de primavera, columna, imagen de guión dued. Solo ejecuta esto y esto es todo lo que necesitas hacer. Esto es básicamente todo lo que necesitas hacer, y automáticamente dockerize todo Ejecuta toda tu prueba y recuerda, puedes saltarte tu prueba. Así que Saltar la prueba es muy sencillo. Todo lo que necesitas hacer es dashi D, luego saltarte la prueba. Yo sólo escribiré un comando después de que se acabe todo. Es solo que con algo como esto, NVn ejecuta unas botas de guion de primavera Después las botas de guión, luego Bud, imagen de guión, luego D, D, saltar las pruebas deberían saltarse la prueba y debería ser la imagen para ti Se puede ver que esto ha conectado y es belleza la imagen. Ver la imagen es primavera corte moderado, 001 snapshot. Alguien me puede preguntar, ¿Y si no quiero este 001? Muy fácil. Puedes ir a tu ir a tu maven Después vas a MVN Mv en este curso. Yo solo me concentraré en Maving. En la sección Pero, hay algo que se llama el nombre final. Puedes crear tu nombre final aquí, y esto realmente lo tendrá. ¿Qué puedes ver también a todos estos tipos, ves cuál es el nombre? Ves el nombre. Ves la versión, puedes evaluarla. Identificador de artefacto de artefactos, puedes evaluarlo. Básicamente puedes hacer si quieres puedes hacer esto. Puede hacer ID de artefacto. ID de artefacto, tal vez hay guión. Entonces puedes colocar en la versión si así lo eliges. Versión, ¿verdad? Y puedes colocar en alguna otra que cosas geniales aquí si quieres, ¿verdad? Y esto para escoger la identificación del artefacto. Tú eliges esta identificación de artefacto. Tú para escoger tu versión, esta versión en la que colocaste, necesito correr, ¿verdad? O si quieres algo nombre personalizado, entonces puedes simplemente hacerlo aquí, y eso debería funcionar. Entonces para los que no están bien con este nombre, eso es lo que estoy tratando de mostrar si no te gusta este nombre, solo usa esto. Solo usa esto y personalízalo como quieras. Quieres mostrar para aquellos que quieren que se cambie el nombre. Así que esto es, ¿verdad? Entonces esta es la primera opción. Entonces vemos que esto sigue construyendo. Vamos a permitir que se construya. Entonces nos enfocamos en la segunda opción. La segunda opción segunda opción requiere que crees un archivo llamado Dockerfile Archivo Docker. Entonces cortaste el archivo Docker en la raíz del proyecto Una vez que cortas el archivo Docker en la raíz del proyecto, entonces comienzas a escribir tus comandos No voy a tomar tiempo en escribir comandos. Ya lo estoy escribiendo, así que lo traeré aquí, ¿verdad? Entonces solo para hacer las cosas lo más simples posible. Así que lo traeré aquí, ¿verdad? Entonces este es un comando básico, ¿verdad? Yo sólo voy a aquí y solo sacaré esto. Así que vamos a, uh bien. Entonces deberías estar en como referencia. No voy a sacarlo. Entonces este soy yo. Este es mi correo electrónico, ¿verdad? Este es mi correo electrónico, probablemente podrías enviarme un correo electrónico si lo eliges. Envíame un correo electrónico para solicitar algunas cosas geniales. Eso es genial. Todo esto es todo lo que necesitas hacer. Todo lo que necesitamos hacer solo Amazon Coreto, usar Amazon. Amazon Coreto. Soy un gran fan de Amazon Coreto, ¿verdad? Amazon Koreto entonces hazlo 21. Amazon Care a 21. Entonces sí, físicamente funciona. Sí. Espero haber deletreado Amazon Coreto correctamente. Pareciendo, Bien, sí, correctamente. Así que primavera en Amazon Coreto y es todo lo que necesitas hacer. En primer lugar, se ven las imágenes construidas. Soy un gran fan de usar la línea de comandos, pero también puedo azotar a este tipo Ese es el contenido de Docker van a las imágenes. Así que vamos a escribir en primavera. Refresquemos esto porque solo podríamos traer en primavera. ¿Ves? Esto es. Esta es la imagen. Tenemos nuestra imagen pero, ¿verdad? Impresionante. Cosas geniales, cosas geniales, cosas geniales. Cosas geniales. A continuación, ¿qué quiero hacer? Me lo he quitado, lo he borrado. Vamos a entrar y luego ejecutar esto. Vamos a ejecutar este archivo. Yo solo proteico. Vamos a ejecutar esto. Ahora, para que esto corra, debes tener tu imagen. Debe tener al menos su expediente Ja pero el archivo Ja. ¿Cómo se ejecuta el archivo Ja? Muy sencillo. Ejecutar el Jahi acaba de hacer VN. Déjeme aclarar esto. Estos son parte del proceso de DevOps, ¿verdad? No tienes que saber todo esto. Pero sin embargo, si te interesa, solo BN limpia el paquete o simplemente salta la prueba. Empaque, luego la prueba de omisión. Eso es todo lo que necesitas hacer cuando ejecutas esto, esto debería construir este archivo por ti. T debería construir este archivo Ja, construir este archivo Ja. Ahora, vamos a explicar lo que estoy haciendo aquí antes por qué está funcionando esto. Sólo digo, oye, usa Amazon correct como mi imagen base. Entonces el mantenedor es solo un nombre solo una etiqueta, no hace nada Diciendo quiero archivo coda angumen. Creo que quiero modificar esto un poco. Modifico esto un poco. Hagamos algo un poco textual. Hagamos algo un poco textra. Lo que quiero hacer es que quiero copiar todo, desde un camino de un camino a este en lugar de usar esto directamente, quiero copiar todo, desde un camino a Snot, no veamos, no, veamos no Quiero copiarlo todo. Esto funciona si tengo una dependencia, pero no quiero usar esto, quiero algo extra. Déjame pausar este video tan rápido corre de nuevo. Porque no quiero perderme este un paso importante. Solo necesito traer solo copia en mi archivo de destino. Necesito copiar este archivo en el contenedor, entonces solo lo asigno aquí. Sólo un minuto. Muy bien chicos. Muchas gracias. He podido modificar esto. Yo solo quería conseguir algo así que no te pierdas la parte importante que quiero mostrarte. Así que volviendo atrás, acabo de añadir que expongas la olla que quieres usar. Entonces como pueden ver, en realidad estoy poniendo un argumento. Este argumento debe centrarse en cualquier cosa que termine con un jar de puntos en la carpeta de destino, que es exactamente cuál coincide con esto. Esto termina con el tarro de puntos. Esto no es el tarro de puntos. Entonces esto termina el dot jar, luego luego copio lo que hay en esta parte, que es el objetivo el Javier. Luego lo copio y lo nombramos para updo jar. Una vez que tengo la q agradable al punto de entrada como Java, esto significa que todo es una línea recta. Sólo lo estoy rompiendo por legibilidad. Entonces puedes establecer la zona horaria. Entonces, sea cual sea el país en el que estés y los estados, que es exactamente lo que estoy haciendo aquí. Estoy en África y estoy grabando desde Legs. Y el jar, al parecer, cuando quieres ejecutar en Java, básicamente haces guión Java guión Java hyphen jar, luego el nombre de tu aplicación, digamos abc dot Eso es básicamente lo que haces. Pero ahora mismo, estos son los argumentos adicionales que en realidad agregas. Me salto estas razones. Esta es la parte donde se agrega el perfil de resorte activo. Esta parte es de perfil de resorte activo. Entonces puedes establecer un perfil tal vez de resorte. ¿Correcto? Entonces, una vez que establezca su perfil, sea cual sea el perfil, lo que sea que le asigne a esto será lo que se conectará a esta imagen para su uso. Puedes explorar. Yo sólo quiero mostrarles que también es posible. Entonces, ¿cómo hago esto? Simplemente ejecuto este comando básicamente. Yo sólo ejecuto este comando. Voy a explicar lo que hace este comando. Este comando básicamente significa. Significa que tu Docker, construyes Dash T significa que quieres darle una etiqueta Si no le das una etiqueta, solo elige un nombre aleatorio. Verías el nombre que realmente va a usar, ¿verdad? Entonces eliges una etiqueta, y una vez que escojo la etiqueta, le doy un nombre Módulo es un punto cero, luego puntos significa aprender en la diatría de trabajo actual ¿Cuál es la actual diataria del ala? Lo haces Como está demostrando que actualmente estoy en la carpeta raíz de este tipo. Ahí es donde puedo ver mi archivo Docker, bien, mi archivo Docker Así que voy allá y ejecuto esto, ¿verdad? Y como pueden ver, ya he corrido este comando antes, así que va a ser bastante rápido porque deberían ejecutarlo antes, antes que nada, descargar el Amazon Coreto realmente les muestro chicos Entonces esta es la segunda opción, ¿verdad? Esta es la segunda opción, chicos. Entonces déjame seguir adelante para eliminar a este tipo. Bien, así que lo eliminé de mi registro Docker. Entonces vamos a comentar esto, ¿verdad? Entonces la opción final que quiero mostrarles chicos es esta para que puedan ejecutar las tres opciones dependiendo de ustedes. Ahora, traje esto porque en caso de que quieras agregar tu zona horaria porque mayoría de la gente tiene problemas con la zona horaria. Una vez que agregas zona horaria, la fecha y hora local que estás usando para ejecutar el día local, las fechas de la fecha a partir de lo que estás usando tu aplicación Java se ajustarán a esto, verdad? A esto lo confirmaremos. Yo sólo quería mostrárselos chicos. Entonces finalmente, hay algo llamado herramientas de capa, ¿verdad? Herramientas de capa donde rompes el sabor, luego tu frasco de grasa, dentro de tu carbón gordo, las rompes ¿cavas profundo y realmente usas el lanzador Este cambio en la primavera tres, creo que en la primavera dos, hubo que no tienes este lanzamiento. Entonces solo g para hablar framework que arranca el cargador, el lanzador Ja. Pero en esta ocasión, primavera tres de hecho introdujo esto. Espero estar en lo cierto, agregó esto. Entonces esta es scala que necesitas correr. Esto en realidad está en la lista, por lo que en realidad solo puede usar esto directamente. Lo mismo, eliges el Amazon Coreto, en realidad lo configuras como una compilación Entonces directorio W, W directary, solo estoy cambiando directorio W. Dictry de trabajo significa que si esto no existe, cambiará. Ahora bien, ¿por qué es esto importante? Uh, hay esta escuela de tha que dice que no está bien correr porque dijiste Linux es un contenedor de linux, imagen para ser un contenedor de linux. La escuela de esos ensayos no está bien para ejecutar tu aplicación en el directorio raíz de un contenedor Linux. Entonces cambia el directorio de trabajo. Si usas el directorio de trabajo si esta parte no existe, para crearla automáticamente para ti. Entonces esta opción. Entonces ya hemos visto este comando antes. Te muestro una, te muestro este comando er también. Después corres la capa dos. Esta capa dos extraerá dándote todo esto, obtienes todo esto. Uh, te hubiera mostrado que este video es bastante largo. Te habría mostrado una vez que realmente abras el hecho, obtienes todos estos archivos, ves todos estos archivos dentro de él, ¿verdad Todo esto realmente existe dentro de tu factu, ¿verdad? Después copias desde build. Esto es solo que está ejecutando las cosas a un nivel más gnual en lugar de esto solo corriendo el hecho Yo prefiero esto. Entonces al final, sólo voy a recoger esto. Este comando también es importante en caso de que quiera establecer en caso de que quiera establecer mi zona horaria, así que solo ejecuto esto puedo ejecutar esto también. Inteligente me da el hábito de simplemente ejecutar esto directamente, solo voy a correr desde la línea de comandos en caso de que estés desplegando, solo ejecutaré el mismo comando, solo lo golpeo. A ver. Lo mismo, lo descompone todo, entonces es capaz de conseguirlo realmente, ¿verdad? Eso es básicamente todo. Eso es básicamente todo. Yo sólo quería mostrárselos chicos. En realidad, tres chicos son tres formas de construir realmente tu imagen. Estas son tres formas geniales de construir tu imagen. Cualquiera que sea la forma que elijas, usa N. Así es como construir tu imagen Entonces puedes ejecutarlo. ¿Cómo corremos? Yo sólo puedo elegirlo. Entonces no configuré mi perfil. Entonces lo que puedo hacer es simplemente decir que Duka corre. Eso debería ser B, entonces creo que si estoy en lo correcto, 880, 80 80. Entonces vamos a darle un nombre. Vamos a darle un nombre. Sólo diré que esto debería ser una columna. Perdón, déjame plastilar esto. Déjeme aclarar esto. Claire. Sólo Clare esto Entonces justo en esto entonces 80. Recuerda que configuré esto. Esto podría ser un problema. Conjuntos no puse el creo que debería estar bien. Debería estar bien. Estaba pensando que estaba usando este conjunto el perfil de resorte. No configuré el perfil de resorte. Si esto entonces vamos a tener un nombre. Vamos a llamarlo N, entonces solo lo llamaré modulf Modulate debería ejecutar como Modult como contenedor Entonces recuerda que ya he corrido esto, así puedo escoger. Vamos a la imagen. ¿Dónde está la imagen? Busquemos modulth. Esto es modulif sin usar. Entonces solo di modulif y esa es una des porque esa es la versión que Ese es el objetivo Cambiemos el nombre por algo mejor. Vamos a llamarlo como MOD MOD. Vamos a ejecutar esto. Creo que lo soporta dash dash nombre ahora? Dash Dash nombre nombre. Creo que esta se requiere. Sí. Se puede ver pix default, esto se ejecuta, solo ejecuta la aplicación. ¿Cuál fue el error aquí? Sí, estoy seguro de que ustedes están al tanto de por qué sucedió esto en realidad. ¿Correcto? El motivo por el que sucedió es porque no me he mudado. Todavía estoy usando mi D, este chico de niños, ¿verdad? Entonces para eso tenemos que mover todo aquí, ¿no? Tengo que moverlo dentro este tipo para que puedas correr. Entonces probablemente deberíamos hacerlo rápidamente. En esta ocasión, ya no se utiliza el soporte Docker. Entonces tienes que sacar el soporte Docker que estás moviendo hacia la producción Entonces solo les estoy enseñando a ustedes cómo hacer esto para que no tengan ningún reto. Tienes que comentar esto, quitar esto. Lo siento. ¿Qué estoy haciendo? Esa debería ser la puerta en el momento equivocado. ¿Fue otra vez? Hacer coche mal momento. ¿Me resulta difícil ir niños? Mis dependencias. Esto es. Yo sólo puedo quitar esto, luego refrescar esto. Entonces solo copio lo que usamos en la carpeta de prueba. Yo sólo coincide exactamente donde tu. Partidos solo voy a recoger a este tipo. Entonces vamos a entrar aquí, solo tirarlo a este tipo. Entonces haz esto, entonces solo voy a comentar. Voy a comenzar con este tipo. Así que recuerda el nombre de usuario, recuerda la contraseña. Las mejores formas de hacerlo. En realidad no quiero. Lo que puedes hacer es crear otro entorno y llamar a esa aplicación guión Docker Luego usa variables de eronamiento. Entonces puedes dar click en las variables de Eronment y podrás ejecutarlo Pero es bastante trabajo. No quiero que parezca que tenemos una forma especificada. Entonces, dependiendo del entorno a implementar, puedes elegir a cualquiera, ¿verdad? Entonces creo que lo que usamos ahí fue modulif esta parte también era modulf modulif esta parte también era modulf, ¿verdad? Sí. Todo bien. Así que solo ejecuta la aplicación para arranque y solo demuestro que estos siguen funcionando como de costumbre. Tú diriges esto. Solo esto para estar seguros, estos siguen bien. Bien, todo conecta. Entonces esto sigue funcionando. Esto sigue funcionando. Esta fue la parte que mencioné si vas a producción, necesitas mudarte. Ahora que nos estamos preparando para la producción o debería decir producción de cotización? Les estoy enseñando cómo hacer esto. Entonces tendré que correr una vez más los despejados Maven. Ese es el paquete limpio de Maven, las pruebas de salto porque no quiero que se ejecute la prueba Mientras eso corre, enseguida, yo solo así que esto está corriendo. Vamos a permitir rápidamente que esto termine su trabajo. Bien, así que esto está hecho. Yo cotejo esto Entonces hagamos rápidamente una imagen Docker RM. Quiero borrar lo que tenemos antes. Módulo Módulo. Módulelo, luego uno que ahí. No se puede eliminar. Bien. Creo que ya está funcionando, ¿verdad? Ya está funcionando. Así que entremos aquí. Vamos al contenedor. El contenedor ya está así que vamos a eliminar a este tipo. Balas Dele. ¿Qué pasó? ¿Qué estoy haciendo aquí? Detén esto. Detén esto. Primavera mis eliminaciones. Veamos mi contenedor. Vayamos a mis servicios. Entonces vamos a eliminar esta parada detener este contenedor Docker. Ya no quiero que este contenedor Du funcione, ¿verdad? Quiero despejar esta construida. ¿Qué me estoy perdiendo aquí? A ver lo que me falta. A ver. Creado. Volvamos a ejecutar el comando. ¿Me falta algo? Lo siento, necesito que este tipo corra. Necesito que el Docker lo componga. Este tipo debería estar corriendo. Vamos a aplastar esto. Esta es otra vez. Siguen corriendo o viendo. Quiero estar seguro de que todo sigue funcionando como de costumbre. Déjeme hacerlo abajo. Tratando de limpiar todo. Contando ahora. Bien, veamos ahora. Tristán. Esto ahora se quiere aclarar. Ya terminé. Bien, así que esto se ha ido. Entonces esto ya no está. ¿Puedo eliminar? Ya veo. Bien. Tengo Déjame ver. Creo que tengo arriba projecton. Espero que no. Déjame ver. Espero no tener un proyecto final. Déjame solo verificar porque tenemos arriba projecton. Esto básicamente sería contradictorio. Oh, guau Creo que este video realmente se está haciendo muy largo. Déjame tratar de ejecutar las cosas rápidamente. Bien, entonces esto ha creado. Intentemos eliminar si tenemos alguna corrida. Bien, increíble. He podido borrar. Tengo la imagen construida así que vamos a correr rápidamente creo que tengo que hacer hasta invitado solo correr rápidamente este brote. Ahora recuerden, ahora he colocado todo en el Yamu para que esto funcione Eso está en la profundidad de ablación. Entonces vamos a escribir esto. Creo que tengo el mando. Yo sólo quiero ejecutarlo. Bien. Entonces ves que se ha conectado o está tratando de conectar JDBC, vamos a ver. Muestre esto. Es una pregunta para ver por qué es. Esta es la experiencia de calentamiento para la contraseña, ¿verdad? ¿En qué tipos configuraron mi contraseña? ¿Tengo la contraseña correcta y correcta? Déjame comprobarlo. ¿Qué usé o qué usé? Entonces tengo una variable de entorno. Entonces ustedes pueden simplemente tal vez saltarse este video, solo quiero mostrarles chicos para aquellos que puedan estar realmente interesados, no sé exactamente cómo hacer esto. Eso es lo que en realidad estoy pasando por esto para explicar para que todos puedan tener una buena idea de cómo funciona esto. Bien. Así Mod Lif Modula Entonces esto es todo. Módulo Modulf Mamá Doctor, a ver, no es coleccionar, ¿de qué se queja? Todo bien. Vamos a revisar. Vamos a comprobarlo. Estoy seguro de que esto nos dará una idea si algo está tratando de conectar. Sí, esto está tratando de conectar. Vamos a ejecutar esto de nuevo. ¿Por qué no dirige Sr.? Veamos por qué el señor no se está postulando. Este es un contenedor, un contenedor Docker, RM, cojo este ID, BE BE entonces lo obligo a cerrar RM el chef. Eso cierra. Intentemos ejecutarlo de nuevo. Ahora, vamos a ejecutarlo de nuevo. No es conectar base de datos, podría haber una serie de razones. Sólo quiero mostrarles cómo funciona . Esto físicamente funciona. Ahora, para conectarse realmente a la base de datos, hay una serie de cosas que puedes hacer. Ahora ahora apuesta el servicio. Debería intentar conectarme al intentar conectarme con este tipo, que es el anfitrión local. Está tratando de conectarse al host local. El puesto local está disponible. Si compruebas si haces una red inicia una red arranca, entonces si haces AO entonces pipe find STR, junto a 5432 Entonces, ¿ve? Spot. Este spots realmente funciona. Quiero mostrarles cómo funciona. No podemos cubrir todo el contenedor Docker aquí, pero al menos quiero mostrarles a ustedes cómo construir una imagen de Docker sobre exactamente a qué conectarse Y ahora esto va a estar buscando local ahora. Esto está mal porque va a estar tratando de conectarse al host Local. Recuerde, Anfitrión local dentro de un contenedor Docker. Sí, este es el tema. Host local dentro de un contenedor Docker, no es lo mismo Ya que no es lo mismo que el host y el sistema locales. ¿Recuerdas cuál es el nombre ahora? Linux, la imagen es un entorno virtual, un entorno completamente diferente. Entonces no nos va a encontrar. Lo que puedo hacer es fijar esto a Postgres. Si configuro esto en Postgres, entonces ejecutaré la imagen Voy a ejecutar mi docker, esta parte aquí, yo corro a este tipo si revisas Postgres, esto se está ejecutando como Si revisamos los contenedores en funcionamiento, esto es contenedor funcionando. Hay un contenedor ejecutando código Pogre ¿Cuál es el nombre ahora Nombres. Todo bien. Entonces esto debería estar funcionando como Postgres, ¿verdad? Entonces deberíamos tener un nombre llamado Posgra. Entonces, si intentas hacer eso, eso realmente conectaría. Si hacemos esto, esto realmente conectaría. Vamos a hacer VN Pero paquete, ¿verdad? Esto es realmente bastante largo, hombre. Esto es realmente bastante largo. Pero solo quería terminar esto rápidamente en esta nota para que no tengamos que venir aquí. Déjame quitarme esto. Hagamos esto otra vez. Hagamos esto otra vez. Ahora estoy usando gas post, 543, dos. El gas post será ahora el nombre del contenedor. Ahora busca el nombre del contenedor y eso es a lo que se conecta. Creo que eso es básicamente lo que debemos hacer. Entonces yo solo imagen de Docker, vamos a eliminar Imagen eliminar Diciendo que un contenedor está usando esto, voy a hacer contenedor, contenedor, RM, luego chef. Intentemos esto otra vez. Docker Pero, volvamos a construir esta imagen. Tratando de ser la imagen. Entonces ya hay un archivo disponible. Quiero que esto sea nombrado. Ahora, un archivo compuesto suele tener algo un parámetro llamado nombre de contenedor. Nombre del contenedor, entonces lo llamaré Postgres. Sí. No lo sé. Creo que ahora solo soy todo que acaba de llegar a mi memoria. Entonces volvamos a ejecutar esto. Volvamos a ejecutar esto. Entonces volvamos a ejecutar esto. Entonces ahora que ejecutamos esto, veamos el nombre del contenedor ahora. Yo solo quiero que sea nombre corto Postgres. Contenedores. Veamos el nombre. Contenedores. Así que esto está bien, ¿sabes qué? Creo que la consola en realidad me está enfriando un poco. Estoy bastante acostumbrado a la línea de comandos. Entonces hagámoslo. Puedo hacer Docker contenedor LS. Bien, así que estos son los contenedores Docker. El nombre es, ya sabes, no quiero nombrar esto porque en realidad lo está manejando de este tipo y no quiero esto. Entonces lo que haría es detener esto. Voy a parar. Es un video muy largo. Así que ustedes, probablemente estoy yendo más allá solo para asegurarme de que para aquellos en realidad no sé exactamente qué hacer para saber exactamente cómo manejar esto. Eso es lo que en realidad estoy tratando de hacer. Entonces, en lugar de correr esto desde la primavera, voy a hacer lo que haría es ejecutarlo directamente. Ahora hay a lo que llamas Docker guión componer, luego D componer Entonces guión componer lo que hace es comprobarlo, hay un archivo de composición en esta parte y es un compuesto Sí, hay un compositor, este archivo compositor, entonces trata de sacarlo a colación. Entonces Docker guión componer, arriba así que vamos a esto. Ahora bien, esto es para arriba. Entonces ha traído esto a colación de lo que esperaba conexión. Entonces si comprobamos esto es un contenedor. Todo bien. Entonces esta ventana se agota. Vamos a otra ventana. Entonces hay un contenedor Docker LS. ¿Ves? El nombre es SPSGres. Esto es lo que quería sacar. Entonces el nombre es Pogresgus. Ahora que nosotros pero eso ahora, volvamos a ejecutar nuestro comando. Ejecutemos este Docker. Docker Run para simplemente conectar de nuevo. Docker Run, entonces vamos a ejecutar esto. Deberías buscar eso y mirar que ya no va a estar conectando con el anfitrión de Loca. Me conecté con eso o chico para mostrarnos exactamente si realmente fue capaz de ver eso. Bien. Estoy seguro de que ese es exactamente el tema, no sé por qué no estoy averiguando esto ahora mismo Bien, chicos, solo quiero mostrarles que acabo de regresar en el siguiente video para mostrarles cómo funciona Esto ya es bastante largo. De hecho lo siento mucho esto es muy largo, pero solo quiero explicar esto con más detalle. Gracias chicos. Adiós. 41. Corregir errores en Docker 2: Oigan, todos. Z aquí. Derecha. También quiero mostrar rápidamente un error que realmente ocurrió, ¿verdad? No es un error básicamente. Fue un proceso en el que construí los detalles. Todavía estaba tratando de reunir mis pensamientos. Pensé que rápidamente sacaría esto a colación. Entonces, cuando estás viendo el video punto uno, estás viendo el video, que es el siguiente video, mientras estás viendo el siguiente video. Este aliado señala cuando llegas al minuto 21, al minuto 21, es una larga sesión de depuración, creo que el video terminó cerca de unos 30 minutos En realidad terminó 8 minutos fueron realmente realmente solo sobre la depuración Si te recomendaría probablemente podrías saltarte esto. Entonces solo video de 21, solo pasa a Docker dos. Pasemos al video de Docker two, verás exactamente cómo en realidad FIX está usando las redes de redacción de Docker Rápidamente quiero mencionar esto. Sin embargo, toqué una gran cantidad de información valiosa que podría ser útil para ustedes más adelante en el futuro. Así que probablemente solo te quedes y te ordenes y veas todo el proceso de depuración Además, quiero mencionar quiero mencionar que en las Door Rs, bien, hay una parte donde realmente se nombra el nombre del oyente en el método, de modo que el nombre del oyente en el método, Este nombre en el método. Así que en realidad podrías saltarte de nuestro video 948. Si esta parte fue básicamente donde renombramos. Al igual que el primero el video que realmente se mencionó, el video que ves justo antes del implementar pago dos, hay un video llamado implementar Pago dos. Error de ficción que en realidad mencionaba ahí. Aquí es de donde esto sólo está hablando. En este Docker dos fue donde estamos tratando probar dónde estamos pegando vía cartero y no estamos viendo la acción siendo no ver la acción realmente se refleja en la realmente se refleja en la Podrías simplemente saltarte del video 948 al 14 32 y les muestro exactamente ahí es donde nombramos todos esos datos Nombramos todos aquellos a los que realmente nombramos todos los ID de escucha para confirmar el método correcto que ahora estás usando Eso realmente funciona muy bien, ¿verdad? Podrías simplemente saltarte y así no tienes que esperar. Pero sin embargo, puedes quedarte para ver todo el proceso de depuración Simplemente sentí que podría ser un poco aburrido, así que no quiero que ustedes se sientan frustrados. Entonces solo decidí explicar esto en realidad. Eso es un resumen. No pude repasarlo otra vez. Cuando llegas al video cuando llegas a Docker uno, cuando llegas al video 21, al minuto 21 quise decir, podrías saltar rápidamente, luego llegar hasta Docker dos Yo arreglo el error que tenemos aquí o tú solo el proceso de depuración Adicionalmente, si realmente revisas el video del implemento, el pago del implemento dos, hice un video que resalta el error que realmente encontramos, y esta flecha en realidad se vio a gran escala que estamos tratando de probar vía Cartero, y no somos capaces de no reflejar la base Así que rápidamente simplemente seguí adelante para mostrarles dónde estaba el error en realidad arreglamos ese error, y en realidad lo arreglamos. Así que simplemente te quedas para ver cómo sale todo. Gracias chicos. Nos vemos en video de Nest. 42. Docker 2: Todo bien. Gracias, chicos. Así que volvemos al caso Docker. Recuerden ahora que en realidad tenemos recordar que este fue el último error que tenemos, y estoy seguro que la razón por la que estamos teniendo este error fue porque no se está conectando a las aplicaciones la aplicación no está conectada a la post adivinar dentro de la misma aplicación o dentro de la misma dentro del contenedor, ¿verdad? Ahora bien, lo que noté es, no especificó la red. Ahora, DCA en realidad tiene un concepto llamado redes donde los contenedores pueden hablar entre sí Si el valor por defecto es siempre si no especifica el predeterminado, no se hablan entre sí. El predeterminado, en realidad he habilitado esta red de módulos y he conectado para que sea una red puente. Bridge significa que en realidad todo debería hablar como si estuvieran en la misma publicación. Pero aunque sea costumbre, ahora podrán platicar entre ellos, aunque esto no sea un puente conductor. Pero sin embargo, están en la misma red ahora pueden platicar entre ellos. Aparte de usar el host local con el que estamos teniendo problemas en el otro momento, la misma publicación va allí. Debería estar buscando un contenedor llamado postgres, y eso es exactamente lo que he intentado lograr aquí Ahora he ampliado esto y ahora voy a traer el servicio Modult Voy adelante a escribir esto. Voy adelante para escribir esto y esto. Voy a él para que escriba esto y esto luego se puede conectar. Lo que voy a hacer es modelarlo el nombre del contenedor, colocar un nombre y el nombre debería ser suficiente Básicamente solo uso exactamente el mismo nombre nombre debería ser suficiente Ahora, a continuación, la imagen de las imágenes que construías. Recuerda la imagen que construiste la imagen de Docker frígida, luego modela la la estrella de registro Se puede ver lo que hicimos esa vez. Pero realmente es uno que es cero. Entonces ahora lo tenemos ahí. Entonces estoy exponiendo esto en olla et ET. Expongo esto en macetas 5432. Entonces esta estoy exponiendo mascota. Entonces el resorte activo es dev. Eso es perfecto activo. No creo que esto sea importante porque creo que por defecto eso lo que la selección. Entonces quiero que dependa del gas pus. Post gas es esto, ¿verdad? Entonces quiero que dependa de posar gas. Entonces también lo estoy colocando en la misma red, y estoy diciendo que debería reiniciarse en menos existencias. Entonces lo que podemos hacer ahora es correr esto. Si ejecutamos esto como es, esto correrá primero porque éste depende de éste va a esperar. Vamos a ejecutar esto. Bien, así que vamos a comprobarlo. Como pueden ver, los chicos de Ws está listo y funcionando. Ahora vamos a comprobar el servicio de Modult. Todo bien. Puedes ver esta conexión con éxito. Es un éxito. El último video fue bastante largo. Tuve que mostrar rápidamente ese feo envoltorio. Estoy volviendo para explicar cómo funciona esto y cómo puedes hacerlo funcionar y ahora puedes conectarte. Esto también está funcionando. Recuerda que exponemos nuestra atreaa Solo volvamos a ejecutar el actuador, veamos, ¿sigue funcionando Ah, sí, funciona porque ya está disponible. Esto ya está disponible en 80 80, prueba el otro. Oh, esto funciona. Atto. Esto también funciona. ¿Podemos probar endpoint? Oh, claro, sí, podemos probar endpoint. Ipoint debería estar funcionando Puedo usar mi boceto, usar mi boceto. Mi boceto como siempre. Es mi rasguño. Entonces físicamente sólo puedo tratar de pagar vamos a recoger esto. Sólo puedo tratar de pagar. Creo que esto es un gobernante, ¿ verdad? Esto es un gobernante. Yo sólo trato de pagar. Entonces para mis fans del cartero, solo usan Postman Así que todo se verá todo bonito y bonito. Agradable, genial. Bien, así que solo conectaré todo. Así que sólo voy a crear nuevas publicaciones. Consigamos un nuevo post. Quiero una nueva solicitud. ¿Escojo palabra clave gráfica? No quiero palabra clave gráfica. Et ve. Entonces quiero una nueva solicitud, así que vamos por favor No, no quiero esto. Dame la gráfica K. De todas formas, veamos. Así que voy a elegir esto. Esta es la URL. IO. Entonces veamos. ¿Alguien puede decirme por qué digo gráfico? No se supone que grafica. ¿Por qué está escogiendo el valor por defecto como gráfico Que confíe en él. Bess realmente interesante. Solo usemos a este tipo. Publicar uno. ¿Falta algo aquí? Quest ¿Nuevo qué? Nuevo HTTP. Bien. No sabía que tenían eso. Coloquemos esto aquí. Entonces necesitamos el cuerpo. Mi cuerpo Jason Jason viene aquí. Entonces coloca solo algunas pruebas rápidas. Solo escojamos esto. Habla esto. Sólo tírala aquí, cartero. Esto es bueno. Menos prueba. Solo eliminemos esto. Vamos a verificar si una validación aún entra en acción. Si entra en acción una validación, déjame mover esto para que sea cero Vamos a darle a esto. Como puedes ver, todavía entra una validación, el polímero es mayor que la Casmmia Debería haber dicho, a lo mejor debería haber dicho que la cantidad debería ser mayor que ahí, pero supongo que ustedes entienden. Esto sigue funcionando. Vamos a reemplazar esto de nuevo como la prueba prueba seis en test.com Vamos a la Z seis. Vamos a darle a esto. Todo bien. Podemos ver que esto funciona. Probablemente solo debería devolver el UID. Pero de todos modos, sabemos exactamente lo que está pasando aquí. Yo sólo voy aquí. C aquí, aquí, viniendo aquí, ven aquí y solo revisa nuestros pedidos. Tomemos el seis. Déjame elegir el identificador o, ¿verdad? Entonces vamos a correr al tipo O. Solo quiero asegurarme para los que están usando Postman, que también puedan ver cómo funciona. Pasemos a este guión y escojamos nuestro pedido. Este pedido se completa. Es que completa. Yo sólo vengo aquí. Oder completa Entonces también un post el cuerpo un Jason. Entonces escojo a este tipo y solo hago esto solo escojo este tipo y escojo esto y vengo aquí, lo arrojo aquí. Entonces le pegué a esto. ¿Qué hice mal? ¿Ves? Protocolo no válido. Veamos, protocolo, HTP. Lo siento. Estoy tomando dos latas. Bien, vamos a esto. Correcto, así completado verdadero. Vamos a la base de datos. Asegurémonos de que las cosas funcionen. Vamos a refrescar esto. Vamos a los pagos. Entonces los pagos solo los pagos completados, ¿no? Los datos me recodificaron esto. Así que vamos a revisar los eventos. Los eventos en realidad contienen esto. Entonces ves algunas cosas no se completan aquí. Así que en realidad tratarías de decir, en realidad podríamos probar a decir, vamos a completar todo esto. Simplemente llamaré al evento para que solo presente esto es igual para ver. Se puede ver que aquí hay varios nulos, estoy seguro, cuando ejecute esto, todos estos nulos deberían estar fuera del camino y todo debería estar terminado Creo que es bueno que probemos? ¿Expuso el punto final? No estoy seguro de que lo hiciéramos. No estoy seguro de que expongamos el punto final. Pero vamos a echarle un vistazo. Vamos a echarle un vistazo. Eso debería ser un evento. Evento, sí, lo exponemos. Exponer acción de igualdad, llamarlo acción de evento. Elige al mismo mismo tipo. Creo que es un get then events. Acción del evento. Así que vamos a echarle un vistazo. Esta es acción, una sola acción. Creo que solo uno oh, sí. Creo que es una. Pero me interesa la publicación de todo. Pero de cualquier manera, solo usemos esto. Vamos a usar esto, ¿verdad? Vamos a usar esto. A ver. Entonces esto pensamos que es cadena, luego consíguelo. Primero que nada, confirmemos qué acción incluso falta. Así que vamos a comprobar. Vamos a ser capaces de descifrar Recuerda, somos capaces de saber. Entonces esta es orden terminada, orden terminada, ¿verdad? Y el pedido completado está utilizando qué DTO? Recuerda, ¿el DTO DTO es qué? Entonces, ¿qué soy? DTO, Dt es pedido completo, DTO pedido completo. Entonces, ¿cuál otro falta? Solo completa el pedido. Pedido completo. ¿Cuál es el detalle? Recuerden, tenemos una acción en todos y cada uno de ellos. Orden completa que debe estar aquí, orden completa. ¿Cuál es la acción? La acción es el pago completo. Yo sólo puedo entrar aquí y solo hacer parámetro de solicitud, solicitar param ¿Cuál es la clave? Déjame ver. Coloca la llave. La clave es la acción, sólo a la Acción. Ahora solo presiona esto aquí, ¿verdad? Entonces, vamos a darle a esto. Sin contenido. Sí, así fue como agregamos. Dijías que no había contenido, ¿verdad? Sin contenido. Entonces veamos si se dispara. A ver si se dispara. A ver si se dispara. Bien. Déjame revisar los registros. ¿No imprimiste estos? Oh, no ejecutamos esta aplicación ni qué. ¿Eso fue lo hago? Oh, no, no hay servicios. Creo que me equivoco las cosas. Estamos huyendo de Docker estamos huyendo de Docker, así que vamos a revisar los registros de Docker En realidad me equivoqué. Es un poco vamos a revisar los registros de Docker, revisar los servicios, luego contenedor, vamos a ver qué está bien Entonces estos son nuestros registros. Entonces esto es, veamos, el oyente orden completo, no encontrado, saltando en vocación, dejando los contenidos Entonces no es encontrar al oyente, ¿por qué es eso? Publicamos eventos concluidos. Bien, para pagos completos, y esto no se encuentra. A ver. Entonces empujamos a este tipo empujamos a este tipo, y vamos a completar pagos, pagos, veamos, pagos , pagos, pagos, pagos. Pagos. Entonces evento de pago, terminado, estoy esperando a este tipo. No se encontró oyente de escucha. No se encontró al oyente, eso sería un problema desde donde lo empujamos ¿Tenemos una transaccional en él? Un evento transaccional. Pago completo, tenemos una transaccional, cual está disponible aquí Creo que ya vimos este error antes. Vamos a empujar esto. Volvamos a entrar aquí. Oh, sí. A ver. A ver. Publicar. Creo que creamos, ¿verdad? Publicar. Está pegando a este evento y está tratando de darle a esto. Bien. Y cuando está tratando de hacer esto. Creo que en realidad podríamos tener una transacción aquí. Comparemos esto. Prueba, veamos. Ahora no encuentra una transacción. Bien. Pensé que en realidad lo habías descubierto. Esto va a fallar porque hay algo 88. Vamos a correr esto en uno es ollas uno ollas. No se pudieron obtener datos, lo sé porque hay algo más mal. Lo sé. Local lo siento, debería ser localhost Sí. Entonces debería ser vamos a Pot spring. No, esto no. Creo que ClebleTpot servlets. Macetas de servidor. Se ollas, vamos a hacer un 81. Vamos a dirigir a este tipo. Bien, comenzando Bien, así que vamos a ejecutar este 881 Veamos qué está pasando. Vamos a ejecutar esto. Todo bien. Sin contenido. Veamos dentro de esto. Entonces aquí hay un error. Estoy recibiendo la ventana IGT run, ventana servicios ventana redonda Bien, así que estoy diciendo oyente no encontró invocación de oyente, y esa es la razón por la que estamos teniendo ¿Bien? Todo bien. Déjame hacer una pausa esto y volver inmediatamente veamos qué pasa. A, gracias chicos. Ya lo descubrí. Creo que el tema fue muy claro. Simplemente no estaba mirando. Recuerda que teníamos esto para ser el otro detalle de pago que estaba encendido. Entonces escribimos esto para estar también en. Fue más tarde en el curso, tuve que cambiarle el nombre a esto para completar el futuro. Entonces mirándolo, está buscando pagoservicio punto encendido, Servicio de pago punto on. Y eso fue ahora que etiquetamos. Lo hemos cambiado a servicio de pago para completar el pedido. Entonces por eso está fallando. Entonces es por eso que debes asegurarte de que debes asegurar que el oyente porque está tomando conocimiento del oyente del oyente, hay una clase que tiene el oyente y el nombre del método el oyente porque está tomando conocimiento del oyente del oyente, hay una clase que tiene el oyente y el nombre del método . Entonces, ¿cuál es la forma rápida de arreglar esto? Entonces, para arreglar esto, lo que podemos hacer es entrar aquí, al menos sacar esto. Lo que podemos hacer es llegar a la publicación de eventos. Entonces revisamos el tipo de eventos, ¿verdad? El tipo de eventos o el escritor del oyente. Comprobamos al oyente. Entonces cambiamos esto. Ya ves, está buscando un pedido completo. Entonces cambiamos esto para completar el orden. Completa. Entonces supongo que es una buena manera de depurar porque en realidad podríamos enfrentar esta cara mi pase en el futuro. Yo tampoco lo sabía, ¿verdad? Venir aquí me está dando más perspicacia también, Bien, debemos ser muy conocedores de esto ya que tenemos problemas Bien. Bien, así que cometamos esto. Puedo detener esto a menos que lo despida desde dentro de nuestro contenedor de muelle. Yo sll dejó esa carrera. Todavía dejé esa carrera. Volvamos a nuestros servicios. Por lo que nuestro contenedor Docker sigue funcionando. Entonces con este error, así que intentemos enfocarnos de nuevo en él. Voy a cambiar esto de nuevo a 80 80. Depuré el 881, pero ahora volvemos a 80 80 a menos que llegue a esto Vamos a pegarle a este tipo. Así que vamos. Entonces esto no es contenido. Vamos a averiguarlo. Todo bien. Usted ve, completa o la recibida en esto. Si volvemos a esta parte e iniciamos esta, ya ves que en realidad todo está terminado. Todo está terminado. Creo que esta es una buena curva de aprendizaje para todos y fr, podemos ver que estos son errores comunes que puedes enfrentar en caso de que cambies el nombre. El nombre de su oyente no debe cambiar, el método no debe cambiar Si el clúster contiene su oyente y el método cambia, tendría problemas De lo contrario, tienes que venir y actualizar a estos tipos. Todo bien. Así que solo quería mostrar esto y agradecerles chicos por quedarse conmigo hasta este momento. Pudido probar todos los escenarios. Hay algunas pruebas que le muestran cómo cablear el contenedor Docker, cómo probar algún contenedor Docker, les mostraron cómo batir redacción de Docker y colocar el Todos estos detalles estarán disponibles. Entonces, ¿estás completamente bien que esto es un pozo completo que esto es modult Creo que sería bueno para mí comprometer esto para que sea bueno porque creo que queremos copiar esto. Mi guider Git solo se quejará. Mi guider Git se quejará. Simplemente comenzaré esto para que todos puedan usar lo que quieran Pero espero poder saltarme. Lo que puedo hacer es dejarme agregar esto a Git guardian, agregar esto a Git agregar esto a Git. Entonces vamos a Git Commit. Llamemos a esto D dos. Llamemos a esto al menos como comprometerse contra al menos me gusta comprometernos contra llamemos a esta implementación de Docker Creo que así deberíamos llamarlo implementación Docker. Eso es bueno para comprometernos. Creo que cogí el equivocado. Debería ser la correcta. Sí, vamos a entrar aquí. Entonces el que mostré antes, creo, y ese fue el curso que realmente desarrollé personalmente. Entonces este es el curso que utilizo en la enseñanza de esto, ¿verdad? Entonces, vengamos aquí. Vayamos aquí. Vamos a llamarlo D veamos, prueba Docker. Pruebas Docker. Sí. Creo que deberían funcionar. Entonces, vamos a comprometernos esto al lado para que podamos verlo. Hago cierra. Hay una manera de saltarse guardián o hacer N. Eso es para Git guardian. No va a quejarse. Sha Sha. Vamos a empujar Bien, así que he puesto a disposición el compositor Docker, para que ustedes puedan probar con él, jugar con Ahora, voy a estar mostrando uno más. Estoy pensando en mostrar una sección más. Por esto, creo que en realidad hemos completado todo en la mezcla porque en realidad voy a lanzar otro video más adelante para ver cómo podemos hacer algunas cosas increíbles y geniales. Así que por favor solo ten cuidado. Si descubres más videos, simplemente amable adelante y véalo. Estoy seguro de que en realidad es mejorar tu curva de aprendizaje para saber exactamente cómo funcionan realmente otras cosas. Oh, bueno, creo que vamos a poder probar esto de extremo a extremo. Tenemos prueba de integración, probamos alambre. De hecho hicimos una demo. De hecho, tiramos alrededor del escenario de inventario, inventario y los otros me gusta. Hablaré más en este próximo video. Gracias. 43. Prepárate para Kubernetes: Oigan, todos. Z aquí. Todo bien. Ahora que ya terminamos de decorizar la aplicación, Te he mostrado tres formas diferentes en las que puedes realmente decorizar la aplicación Nos fijamos en el camino en movimiento donde en realidad se podría ejecutar comando de movimiento que en realidad usa el dimage trampolín le mostró ese También te mostré cómo usar realmente el archivo Docker y te mostré esta primera parte, también te mostré la segunda parte De hecho, podrías usar esto diferentes maneras ya que realmente eliges hacerlo. Uh, lo siguiente que quiero mostrarles que es bastante importante es que queremos hacer la transición a coberts, ¿verdad Y como pretendemos hacer la transición a Cubontis. Todo bien. Y a medida que hacemos la transición hacia cobertis necesitamos atender realmente algunas cosas Y lo que lo principal que necesitamos atender es que las propiedades que realmente lees, ¿verdad? Esto debido a que la aplicación es algo apátrida, realidad la usamos de una manera que es apátrida Por lo que todos los datos se externalizan con base de datos o archivo de propiedades Entonces lo que pasaría es cuando corremos en producción, ¿verdad? Y una vez que implementemos la aplicación, necesitamos elegir las propiedades del entorno de producción, y eso es lo que vamos a estar viendo. El primer bit voy a estar tocando, si miras el docople Mira a Decofle De hecho, establecí esta propiedad aquí que en realidad establece la propiedad para la zona horaria. Estoy en África, estoy en Piernas y la Javanga. Yo agregaría una propiedad más aquí, agregaría una propiedad más. Sí. Y esto en realidad esto correspondería realmente al perfil de resorte activo. Entonces aquí estamos configurando deliberadamente a dev, pero ahora mismo, vamos a estar cambiando esto. Se trata de datos de desarrollo. Entonces, si queremos cambiar a producción, necesitamos realmente valores pasivos de producción. Entonces, como resultado, lo que pasaría es lo que sea que estemos pasando aquí, lo que sea que pasemos aquí como un perfil de resorte activo desde una línea de comandos o desde unas propiedades que les voy a estar mostrando cuando entremos en Cubonts sería exactamente lo que va a venir Si no establecemos nada, esto no encuentra ningún valor, si no estableces ningún valor, vendrá aquí y luego a default. Así es como funciona, ¿verdad? De hecho, priorizo propiedades de la línea de comandos sobre la aplicación Yam application, el valor de las Entonces una vez que esto no se encuentra, anula. Esto realmente va a entrar en marcha. Pero si realmente se encuentra el perfil de resorte , déjame dividir esto ¿verdad? Pero si esto se encuentra, si este bit se encuentra aquí, automáticamente lo hará automáticamente escribiendo porque vemos que estoy escribiendo los perfiles de primavera son propina. Bien, solo quiero mostrarles esto, así que tenlo en cuenta mientras realmente exploramos este bit y vemos cómo funciona esto realmente. Bien, uh, dicho eso, ahora volvamos a saltar. Así que en realidad he cambiado lo primero que vamos a estar tomando conocimiento. Entonces cuando queramos declarar esta propiedad, declarar un perfil de guión swing, voy a estar usando eso Bien, genial. Entonces, el siguiente hoyo que quiero que veamos es esta parte. Necesitamos hacer la transición de algunos de estos datos a entornos de producción, ¿verdad? Entonces, ¿qué haría en mi caso? Lo que haría es bastante sencillo. Entonces entraría aquí y lo crearía bajo archivo de propiedad. Así que lo voy a hacer cuando copie, voy a pasar. Entonces para ser exactamente lo mismo, voy a empezar a cambiar el valor. Así cha a la aplicación Docker. Entonces significa usar DocoFleUse el archivo Daco, use Doc FiaOce que pasa en los perfiles de resorte activos como Docker, realidad va a estar usando estas propiedades, Queremos cambiar, probablemente queramos leer esto también. Llamar llamémoslo un nombre de usuario. Sólo llámenlo moduli. Subrayar usemin, ¿verdad? Y el default lo voy a pasar así que siempre es bueno tienes un default, ¿verdad? Si no encuentra esto, es por defecto a esto, ¿verdad? En realidad se pone por defecto. No obstante, algunos patean contra esto para decir, no, no queremos incumplir. No quiero por defecto para realmente entrar en acción. Si falla, por defecto. Pero voy a seguir adelante y mostrarte por defecto porque solo estoy tratando de mostrarte las posibles todas las formas posibles en las que podrías hacer esto para saber que realmente puedes pasar por defecto aquí, ¿ verdad? Entonces, entremos aquí. Hagamos lo mismo aquí o usemos una contraseña. Vamos a estar cambiando varias cosas aquí. Venir aquí o venir aquí o cambiar esto. Esto sería moduli o lo llamaría host, llamaría moduldHST luego por aquí viniendo entonces aquí viniendo Vamos a llamarlo macetas moduli. Moduli host moduli ollas. Voy a darle a esto un default de 5432 porque chicos nivel virtual es 5432 Entonces cambiaremos esto también. Nombre Moduli DB. Lo llamaré moduli DB o nombre Modly Db. Bueno, lo que funcione wt. Así nombre de Modly DB. ¿Todo bien? Entonces esto es genérico. Estos cambiarían, ¿verdad? Compararía con los otros cinco que terminaste con esto. Para los DD Lot siempre se recomienda a la hora de entrar en producción, ¿verdad? Sería un caso en el que ya te hayas movido ya ejecutas el script. Si realmente usa GPA para ejecutar su script en modo de desarrollo, tiene que elegir esos scripts exportarlo o respaldarlo, lo que sea, luego moverlo a la base de datos de producción y su equipo de DBA realmente lo su equipo de DBA realmente Eso es exactamente lo que se supone que va a pasar, esta propiedad no está permitida. No permitido. No se le permite administrar esta propiedad en producción, ¿verdad? Entonces lo que vamos a hacer es que vamos a estar ejecutando la aplicación contra la misma base de datos usando el modo de desarrollo, ¿verdad? Para simular realmente las cosas, ¿verdad? Pero lo que debería pasar es esto ya no debería estar ahí porque ya nos hemos mudado en todas las propiedades que pretendemos, ¿verdad? Por lo que esta propiedad siempre se recomienda que se quite esto totalmente o lo establezca como ninguno. Pero hay dos escuelas de pensamientos para esto, ¿verdad? La primera escuela de pensamiento es, quitársela. Nadie sabe siquiera una propiedad para cambiarla aquí o dejarla aquí y dejarla como se sabe, ¿verdad? Pero siempre recomiendo quitársela para que nadie se vea tentado a siquiera cambiarlo para crearlo o actualizarlo o lo que sean los otros que tenga, ¿verdad? Dejaré esto como se conoce solo para mostrarle que esta propiedad existe. Después, aplaza la inicialización verdadera. Ya no estamos inicializados. Todo nuestro guión ya está disponible. Entonces, como ves, ya no necesito esto, ¿verdad? Esto nunca se ejecutaría, y este script nunca debería ejecutarse también porque esto nunca se ejecutará. Toda esta propiedad ni siquiera debería existir. ¿Verdad? Abiti ni siquiera debería estar disponible. Deberías tomar todo esto o porque la aplicación solo debe conectarse directamente. No debería echarle un vistazo a todo esto porque las actualizaciones solo tratamos de buscar cambios y actualizaciones, crear para eliminar la base de datos, y traerla. Entonces no queremos todo esto. Definir inicialización, no somos diferentes. No lo estamos inicializando porque ya hemos ejecutado este script y la base de datos de producción Entonces esto no es realmente necesario para que realmente lo presentemos. Así que prácticamente podemos eliminar esto. Lo dejaré aquí en cuanto a lo que hacemos no todo lo que necesitamos, ¿verdad? Digo que estas cosas están disponibles. Están disponibles. Al igual que tenemos espejo a nuestro dev. Vamos a dividir esto. Tenemos espejo a esta parte. Así que solo quiero mostrarles que voy a dejar esto, pero ya se lo he dicho para que ustedes puedan comparar la diferencia. Pero recuerden que lo mencioné, esto no debería ir a producción. Esto no está bien ir a producción. Esto por alguna razón rara, algunos tal vez solo quieran hacer un pequeño cambio. Y olvida que se supone que ni siquiera debes usar esto y usar update y llevar algunas cosas extra que se supone que no debes. ¿Por qué no el guión que necesario ha sido incorrecto? La manera ideal escoge el script de tu entorno de prueba, ejecuta el script en tu base de datos de producción, pero la creación de las tablas y cuáles y qué tienes. Haz eso. Después conecta la aplicación a la misma. Eso es exactamente lo que se supone que es. Esa es la forma en que asegura que tu solicitud siga siendo apátrida, ¿verdad? Son los datos que está disponible la base de datos que utiliza no hay datos en la base de datos, no hay nada que usar, y así es exactamente como deberíamos ser. Todo bien. Entonces también venimos aquí. Estas partes, realmente no exploramos esto, y yo siempre diría que lo pusieran a caer. Lo que básicamente hace este tipo es, digamos que tenemos eventos incompletos que vimos. Si configuramos esto a che, lo que sucedería es automáticamente una vez que se inicien las aplicaciones, se intente disparar todos los eventos. No creo que sea el enfoque correcto. Deberíamos tener que tomar el control de esto. Pero, ¿quién sabe? Entonces la compañía podría decidir también ambiente podría decidir que quieres hacer este detonante en cada neurona, ¿verdad Pero si quieres decir esto como cierto, recuerda lo que discutimos en incompleto así que estamos tratando de publicar el evento. Te dije que deberías usar un planificador y les mostré chicos cómo usar el planificador para activar realmente el evento Entonces mencioné que si estás teniendo más de una instancia, necesitas empezar a pensar en usar una empiezas a pensar en usar lo que es Shed Lock, usar Mopy Shedocks implementación muy común, solo puedes buscar en Internet, solo puedes buscar en Internet, usar Shedok entonces eso realmente pasaría si tienes dos instancias, cualquiera que sea la que obtenga la clave de la base de datos antes que nada, sea la que obtenga la clave de la base de datos antes lo bloquea que hace un cambio y el otro no es capaz de interactuar realmente con esa aplicación. Esto solo es una visión general, pero esta parte siempre debe permanecer también. No voy a tocar esto. Sí, hacemos uso de esto a pesar que me lo quité en la aplicación, pero si revisas, si comprobamos dónde publicamos realmente dónde publicamos realmente nuestro evento aquí, comenté esto. Aquí es donde lo estamos usando, ¿verdad? Yo lo comenté. Esto es Joy usándolo. Entonces utilizo el ambiente u obtengo propiedad. Yo realmente podría usar esto, que mencioné donde queremos eliminar aplicaciones más antiguas, ¿verdad? Sólo quería mostrarles esto otra vez. Queremos eliminar propiedades más antiguas. Lo siento publicaciones más antiguas, me refiero a propiedades, publicaciones más antiguas, después de que nos enviaron y los pupilos entonces podemos establecer me detengo en esto bastante, ¿verdad? Y estoy seguro que ustedes solo pueden regresar y vemos los videos para ver cómo funciona. Y esto es una parte de lo programado, que mencioné. Pero esto muestra la par de la cerradura del cobertizo. Podemos simplemente el modo de desarrollo solo tener una instancia. Pero si ustedes chicos si ustedes piensan que es menos y tengo un par de personas que realmente no sé cómo usar cobertizo Lock. Nosotros solo comentamos, comentamos solo deja los comentarios o simplemente en realidad lo planteamos como una pregunta. Si puedo ver cerca de un buen número de personas que mencionaron que no saben cómo usar la cerradura del cobertizo, seguiré adelante y en realidad implementaré eso. Voy a esperar eso, ¿verdad? Sólo quiero mostrar por qué se utiliza este camino. Pronto podría decir, pero esto debería ser encontrado. Oh, sí, hay dos maneras. Estoy usando el ambiente para traerlo. Otros podrían haber usado a su valor. Podría usar en el valor qué resorte realmente proporciona el marco de sprit realmente proporciona Bueno, yo solo prefiero usar el ambiente. Sólo me gusta ser consistente. En algunos de mis proyectos, utilizo a todo el valor. Entonces utilizo un ambiente. La clave es que puedes hacer varias cosas en una primavera puedes hacer lo mismo en primavera de varias maneras. Esa es la palabra. Pero sin embargo, sea consistente. Eso es lo que pasa con la pantalla, sé consistente. Entonces cualquiera aquí dentro del proyecto sabe que eres consistente, yo simplemente caería en usar exactamente lo que has usado. Solo si tienes problemas de rendimiento, o probablemente hay que pensar cambiar y van a cambiar, tienes que cambiar por todas partes. Todo bien. Creo que eso se explica. Entonces, vengamos aquí. Voy a hacer lo mismo que en realidad colocaría esto aquí. Voy a llamar a esto eventos llamar a los eventos subrayado. Llamémoslo eliminar eventos duración. Por lo tanto, elimine, subraye eventos, subraye la duración. Bien. Entonces sí, entonces te doy el valor por defecto de 5,000 que inicialmente lo usamos. Bien, entonces esta parte, ¿ verdad? Lo usamos de todo. Sí. Acabo de lanzar para la gerencia, esta es la parte para en el Actuador donde queríamos ver todo lo que el Actuador tenía para ofrecer. Pero esto no es recomendable en la producción. No quieres hacer esto en producción, ¿verdad? Lo que probablemente quieras hacer en producción es exponer lo que necesitas. Solo necesitas exponer lo que necesitas. No se expone todo. Entonces como resultado, lo que voy a hacer es esto. Entonces vamos a tener así que pensemos en ello. Bien, entonces vamos a tener así que voy a llamar a esto, llamémoslo actor, actuador, extremos expuestos, ¿verdad Puntos finales expuestos. Todo bien. Entonces sí, entonces probablemente querríamos irnos con default como salud. Sólo voy a liberar la salud sola. Entonces, la salud debería ser lo único que realmente está disponible por defecto si en realidad no la pasamos Pero mientras hacemos esto, voy a tratar de ver si podemos liberar salud y módulos, ¿verdad? Muy bien, entonces Saba pot. ¿W se está ejecutando este Saba? Bien. Entonces esto es que a la gente le encanta usar ATAT Esto no importaría cuando realmente corres en Kubernetes porque esto sería Kubernetes, tienes una unidad donde ejecutas cosas en una vaina y la olla en la que corres no significa realmente que eso es lo que tienes en todo tu sistema, aunque yo explicaría Solo quiero explicarte esto para que ustedes tengan puedan dejarlo como el TT Esto no afecta nada, cuando volvamos, entonces podemos decidir el bote en el que debes correr. Lo que haría es volver aquí, haré ollas de servidor. Entonces en realidad te pondría por defecto a 80 81. Así es exactamente como deberíamos vernos. Si ves que hemos externalizado todas las propiedades que hay que cambiar Entonces escoge esto y mientras trabajamos en la sección de Cbonti después haber pasado por el comando básico, trata de explicar las otras cosas y estamos trabajando en esta Entonces entonces les mostraré chicos dónde enchufarían todas estas propiedades. Gracias chicos por darme. Los veré chicos en el siguiente video. 44. Prueba de propiedades externalizadas: Todo bien. Gracias, chicos. por volver con M Z aquí. Bien, ya que en realidad has hecho el poco de externalizar todas las propiedades, debería ser simplemente ideal para reconstruir realmente la imagen porque si no lo haces, no debería llevar estos detalles adicionales Recuerda que esto es archivos nuevos o agregarlos. Tenemos que asegurarnos de que en realidad es empujado al registro Docker Hagámoslo. Voy a hacer VN BN limpio. Puede empaquetar paquete limpio, luego D, omitir pruebas. Thi lo hará pero la aplicación. Es muy probable que falle. Creo que esto va a fallar. Porque la prueba probablemente podría requerir excepto saltarse esas partes, porque nos saltamos esta parte. Si no te saltaste la prueba, esto básicamente fallará porque esta redacción de Docker no se ejecutará y tendrá problemas, ¿verdad Bien. ¿Así que se está haciendo eso? Veamos esto. Bien, entonces tenemos esto. Todo bien. Entonces el siguiente bit es así ahora que tenemos esto, necesitamos construir, voy a construir la imagen y voy a empujar al registro, ¿verdad? Entonces para hacer eso, déjame estar seguro. Estoy tratando de ver algo. Yo estaba esperando. Asegurémonos de que todo funcionó como de costumbre. Yo hice una limpieza. Necesito construir. Yo no quería la prueba. Bien. Bien, se ve bien. Ahora, vamos a ver. Limpiemos esto, esto, esto. Objetivo compilar, Pero la imagen. Bien. Todo bien. Esto es bueno. Claire. A menos que construyamos T, entonces usamos el mismo nombre de servicio. Pero uno o cero en las partes actuales, entonces eso básicamente apuntaría a este archivo Docker, y este dockerfile a su vez apuntaría a este archivo Porque recuerda, usamos un tarro de puntos, usamos un tarro estrella en realidad coincide con esto. Hagamos esto. Veamos esto. Hagamos esto. Empujemos esto esto en realidad debería entrar. Oh, sí. Entonces eso es extractivo, todos los procesos funcionando Entonces esto está completo con éxito, ¿verdad? Este éxito. Así que vamos a revisar nuestra imagen. Hacemos una imagen Docker. Déjame sacar esto a colación porque está muy por debajo. Entonces, vamos a sacarlo a colación. Voy a hacer una imagen de Docker Recuerda, puedes hacer esto en cualquier terminal. Yo solo prefiero ya que estoy usando lo mismo. Ya que Intelligen tiene terminal, solo estoy usando directamente, así que no tenemos a donde me estoy moviendo a diferentes pantallas Bien, entonces imagen menos. Entonces esto es Modult increíble. Entonces esto es genial. Una forma más nítida de hacerlo voy a hacer una imagen menos entonces voy a hacer modular puedo hacer MOD luego estrella Sí, así que eso coincidirá cualquier cosa que comience con esto, ¿verdad? Entonces puedes ver que esto es genial, ¿verdad? Esto es genial. Tenemos la imagen disponible. Recuerdo que es la misma imagen que realmente usamos dentro de nuestro archivo de redacción, ¿verdad? Esto es que estoy coincidiendo con el nombre ya colocado ahí, que es cero distal. Ahora bien, con esto en su lugar para ejecutar la aplicación tal como está, ¿no? Esto fallaría automáticamente, ¿verdad? Esto fallaría automáticamente porque recuerde que la aplicación estará usando esta guía para ejecutarse realmente, para ejecutarse por sí misma. Quiero explicar un poco de diferencia porque esto puede sonar confuso para algunas personas. Recuerde que este archivo de redacción se generó cuando usamos nuestra dependencia de componer Docker, iving dependencia . Entonces esto se generó. Ahora, deliberadamente agregamos esto cuando intentamos probar los bits de Docker, ¿verdad Entonces esto no es absolutamente necesario. Estás cuando solo intentas ejecutar la aplicación, pasamos la etapa de ejecución de la aplicación solo desde el IDE. Hemos probado Docker y estamos tratando de mudarnos directamente a los cubanits Ahora hemos agregado algunos detalles extra aquí, que es este tipo. Veamos si estas propiedades si agregamos estas propiedades directamente, ¿funcionaría esto? ¿Funcionaría esto en Docker? Si funciona en Docker, entonces no deberíamos tener ningún problema en coberti Entonces, ¿cómo lo probamos? Lo primero que voy a hacer, simplemente ejecutaré este servicio tal como está. Yo no haría nada. Recuerda, te expliqué todos estos bits en el video en el video que realmente miramos . Yo le expliqué todos estos bits. Creo que la única diferencia ahora es si comprobamos esto, vamos a comparar comprobamos esto, vamos a ver las propiedades de la aplicación, estoy usando 80 81 aquí. Estoy usando 80 81 aquí. Todo bien. No hay nada malo en usarlo. Simplemente puedes apegarte a usar 80 81, ¿verdad? Yo sólo quiero ser consistente. Volvamos aquí. Simplemente podemos exponer todo 808-18-0801 Yo podría decir exponer T 81 objetivo 80 81 al objetivo 80 80. El contenedor estará funcionando en 88. Si bien lo que se expondrá a la línea de comandos al host será 881, ¿verdad Así es como funciona Docker. Esa es la configuración. Este no es el 881. Permítanme ser consistente. Así que solo al 80 81 o a la verdad coinciden con lo que realmente tenemos aquí. Ahora, vamos a ejecutar esto tal como está. No hemos agregado estas propiedades adicionales. Ahora, queremos decir que este perfil sea docker. Recuerda, aquí hemos creado otro perfil, Docker, que sea Docker Sería esto al parecer espero que falle. No ha sido eso, ahora estás esperando todas estas propiedades que no están disponibles, y eso es exactamente lo que debería suceder. Ejecutemos esto y veamos cómo playout con check verificamos los registros para ver exactamente qué está sucediendo Todo bien. Entonces esto se está ejecutando, y vamos a ver. Así que recuerda, le dijimos a post guess sería el primero en correr porque esto depende de post. Recuerda, esto depende de post guess, que es post guess service. Entonces ahora que esto se inicia, vamos a revisar el costo de los módulos. Entonces vamos a ver. Muelle modular, espero ver veo Perfil de resorte. Ya veo. Se espera perfil primaveral. ¿Pueden ustedes recordar dónde está el perfil de primavera? El perfil de resorte es lo que usamos en nuestro archivo Docker. Mira esto. Archivo Docker Por lo que está tratando de pasar el perfil de resorte a los perfiles de resorte activos. Ya ves, las cosas empiezan a romperse, lo cual es algo bueno. Entonces, lo que haría, detengamos esto primero. Detengamos esto. Detener. Y déjeme matarlo. Todo bien. Entonces volveré a mi archivo de redacción. Ahora lo estás haciendo funcionar, ¿verdad? Estás tratando de que funcione. Ahora, no estamos usando perfiles de resorte activos directamente ahora. Estoy usando perfiles de resorte aquí, ¿verdad? Estoy diciendo que use esta propiedad perfil de resorte y páselo al perfil de resorte está activo aquí. Yo solo lo estaba usando directamente, así que esto no va a funcionar. El madurar sería, yo iría a decir perfil de subrayado primaveral Eso coincidiría con esto y pasaré en Docker. Ahora, quítate esto o simplemente comienza. Entonces, volvamos a ejecutar esto. Entonces iremos paso a paso para que ustedes vean cómo funciona, y ahora se están pasando las propiedades para que todo tenga sentido, ¿verdad? Entonces no tenemos que saltarnos. No quiero apresurar esto para que podamos entender paso a paso, porque si te pierdes una sola configuración, descubres que la aplicación no está funcionando, podría estar bastante frustrada. Bien, así que volvamos a ejecutar esto. Justo en esto otra vez. Voy a ir a estas partes. Recuerda, no tienes que usar esto si eres ruidoso inteligente, ve a las partes donde tienes tu componer yo solo hago Docker componer y eso funcionaría automáticamente Estoy tratando de evitar cambiar demasiadas pantallas para que no vayamos de una pantalla a otra. Voy a ser bastante confuso. Pero sólo podrías venir aquí. Acabamos de llegar a cualquier línea de comandos, vamos a las partes donde realmente tienes este proyecto. Tienes este archivo de redacción Docker. Lo que haría es simplemente copiar mi parte aquí, copio el camino absoluto, vengo y solo veo el voy a tenerlo como si hiciera Ls. Puedes configurar mi componer yo podría hacer componer. Así es exactamente como sacarlo a colación, compone Docker. Presione Docker componer solo presione Enter. Ignora esto. Ignorar esto es solo auto completo, ignora esto y eso realmente sacará esto a colación. Volveré a la terminal inteligente para tenerla cableada así continuamos con lo que estamos haciendo. Bien, entonces déjame ejecutarlo desde la línea de comandos para que tenga sentido cómo lo vas a hacer. Ya que estoy usando lo mismo, estoy usando un tiempo aquí, así que voy a hacer aquí hago LS. Para que veas, aquí tengo mi archivo de redacción , así que solo sacaré esto. Ver D componer. Todo bien. Entonces hagámoslo. Para que puedas ver los sábados, los sábados. Todo bien. Entonces vamos a ver ¿cuál es el problema? Entonces esto puedo ver esto sigue refiriéndose al perfil de resorte. Entonces, lo que significa que aún no está cableado. Esto no es cableado. Así que vamos a depurar. Vamos a depurar. Veamos qué está pasando. Vamos a depurar. Entonces volveré a mi terminal. Entonces si no lo ejecutas en dash Dm seguirá corriendo. Así que volveré aquí y solo la bajaré. Der componer abajo. Estoy parando todo y esto debería parar automáticamente. Genial. Todo bien. Volvamos aquí hay D perfil de resorte. A ver. Tenemos resorte bajo perfil Scope. Nosotros usamos. Muelle bajo perfil de alcance. Aquí lo estoy configurando a Docker, ¿qué me estoy perdiendo? Perfil de resorte activo. Espero que este tipo entre como un ambiente disponible aquí. Tenemos este perfil primaveral, veamos. A ver. Esto lo conseguimos. Las cosas es simplemente leerlo directamente. Bien. Todo bien. Yo estaría necesitando una ENV aquí. Voy a necesitar un ENV EMV, así que tenemos que cablear el archivo Docker, el archivo ENV diciendo así que quiero que sea una variable de entorno Déjame entender eso. Todo bien. Gracias. Gracias por acompañarme. Yo hice un cambio y el cambio que hice es que veas el archivo P de resorte. Lo estaba usando directamente. Entonces usándolo directamente de esta manera. ¿Correcto? Yo usando dilin de esta manera Y el efecto de hacer esto es que lo ves como una cuerda. Necesito interpolarlo. Se llama interpolación de cadenas. Necesito colocarlo entre calibres. Sí. Esto sería entonces capaz de leerlo. Entonces dijimos esto como Docker, podrás leerlo. Eso es lo que quería hacer. Esto requerirá que hagamos para volver a correr. Recuerda, estamos haciendo este cambio usando este archivo Docker y el archivo docker se usa para construir nuestra imagen y los aspectos de imagen y los aspectos de imagen que tenemos todo, el jab pero Vamos a seguir adelante y ejecutar esto de nuevo, hacer un movimiento. Paquete limpio D Saltar pruebas. Todo bien. Entonces esto debería completarse casi de inmediato porque no lleva tiempo. Bien, así que vamos a hacer con eso. Lo siguiente es que necesitamos ver rápidamente la imagen. Vamos solo pero esta imagen. Así que construyendo la imagen. Recuerden que antes mencioné todo este comando. Entonces esto está construido. Confirmemos nuestra imagen. Como mencioné allí Docker imagen menos que Modu la SA Tenemos esto construido. Bien. Bueno. Esto lo tenemos hecho. Esto no es exacto. Todo está casado para lograr. Ahora, vamos a ejecutar esto. Hagamos un Docker Compose up y veamos qué pasa Docker componer componer. Antes de que realmente golpeemos esto, recuerda esto, estamos tratando de sacar a relucir a este tipo en particular de aquí. Estamos tratando de ejecutar esto para ver lo que pasamos perfil de giro aquí para ser Docker. ¿Ahora cambia? ¿Tenemos el entorno cambiar el cambio de perfil a Docker, lo que desencadenará este camino en particular y esperamos que caiga requiriendo que pongamos en todos estos detalles, verdad Todos estos detalles. Si no pasamos estos detalles, debería usar el valor predeterminado. Eso es lo que estamos diciendo. No se encuentran los detalles, usa el valor predeterminado. Si encontramos esto como Modulit encuentra nuestro módulo ¿qué pasa con esto? Recuerda que no pusimos esto. No pusimos esta en particular. ¿Correcto? Entonces esto debería fallar por el nombre de la base de datos DB que no proporcionamos, ¿verdad? Porque no pasamos un default así como pasamos un default a esto, ¿verdad? Me gusta dejar uno para que vea exactamente cómo se siente así que muestra exactamente lo que pasó. Bien, así que vamos a darle a esto. Entonces, ¿esto se está ejecutando? El Docker compone, el gas del poste está arriba. Ahora la aplicación se está ejecutando. Verás, esto está fallando. Esto está fallando. Veamos el fracaso. Vamos a subir un poco. ¿Por qué está fallando? Ya ves, increíble. Un perfil ahora es Docker. Esto es la lectura. Ahora, ¿por qué está fallando? No es una excepción de puntero porque ¿por qué? Es comparar, si lo miras quejándose de la base de datos, se está quejando de que está tratando de conectarse a JDBC, y al parecer no puede conectarse porque buscando un puntero no, hay no lo pasamos en realidad está esperando una cadena como valor de la base de datos, entonces, pero estamos pasando un nulo porque no pasamos nada Así que eso coincide con nuestra solicitud. Entonces pasemos eso rápidamente a menos que si las cosas funcionan. Así que entraré rápidamente aquí y haré Docker Compose abajo rápidamente derribar todo. Y eso detendría esto de inmediato. Bueno. Entonces eso detiene esto de inmediato. Sí. Bien, así que vamos a aclararlo. Entonces, así que eso realmente aclara esto. Bien, entonces eso significa dicho y hecho. Recuerda que pasamos por defecto aquí. Yo solo te mostré que este default para nosotros pasando default aquí, automáticamente, si no ve esto, recoge todo esto. Entonces vamos a hacer, en lugar de pasar los valores por defecto, hagamos la propiedad, voy a hacer la lata adecuada estableciendo todos estos valores que adquirimos Entonces terminamos con el docofle. Ahora estamos en la redacción. Ahora bien, ¿cuáles son los valores que nos fijamos? Entonces establecemos este modulif. Ven aquí, modulf y establece esto, ¿verdad? Este es el módulo I pasando como una cadena, son cadenas. Entonces contraseña también módulo. Paquete también estado de ánimo solo copia este lugar esto aquí. Entonces los anfitriones el anfitrión. Esa es la base de datos. Recuerden, les mencioné esto antes que una vez que estén con el contenedor Docker, con el contenedor Docker, nosotros con debug para un proceso muy largo Tenemos que usar el nombre del servicio, porque pertenecen a la misma red. Yo explico esto. Si estás confundido, por favor mira amablemente a Doris parte uno y DP dos Explico esto en detalle cómo se supone que deben ser para conectarse al nombre del servicio. El anfitrión. Consulta el anfitrión con el que te estás conectando. Se supone que es servicio PoscastPCAS. Eso es a lo que nos estamos conectando. Entonces la olla la olla ya es de alambre. Adelante y aún así etiquetarlo. Esto es lo mismo trayendo el anfitrión Entonces 5432. Después el nombre DB. Nombre DB. Yo elijo el nombre DB. No lo conecté antes. Pongo nombre DB de aquí. Esa es la base de datos. Así que permítanme ser consistente pasar todo como una cadena. Entonces como una cadena. Creo que un número, ¿verdad? Pero creo que vas a picar. Lo revisaremos. Veremos si realmente lo acepta. Bien, ¿qué más? Entonces este evento retrasa la duración. Así que, deliberadamente, puedo establecer esto en 4.000, ¿verdad? Sólo para cambiar un poco las cosas. Entonces este actuador. Ahora, veamos el actuador que está expuesto. Recuerda, es solo salud. Entonces, ¿y si quiero exponer la salud? Comer modulf. Recuerda, deberíamos poder ver la salud y el módulo que expone usando esto. Todo bien. Entonces el servidor, qué estamos ejecutando en 80 81. Añadamos también el bote aquí para correr en 80 81. Todo bien. Hemos hecho bastante trabajo. Un poco de trabajo. Bien, con esto hecho, vamos a ejecutar la redacción de Docker. Veamos, y arreglemos cualquier error si hay Docker componga, Compost line up, compost up. Les he enseñado cómo funciona esto. Entonces, en lugar de escribir el comando cada vez, solo usaré los atajos inteligentes. Así que en realidad hábitos bo. Yo haré esto. Todo bien. Entonces esto está arriba, mira el post está arriba. Veamos qué pasa aquí. Todo bien. ¿Pueden ver que sucede algo increíble? ¿Puedes ver esto? Impresionante. Para que pueda ver el Docker. Este es el perfil. Se puede ver la base de datos completada, se conectaron correctamente, y no hay errores arrojados. Entonces la manera de probar esto es que solo exponemos la salud y el módulo de la misma. Así que vamos a confirmar eso. Recuerden, ¿ estamos exponiendo qué en 80 81 ahora? Esto va en 80 81, como ve, 80 81, pero estoy exponiendo en 80 81 también. Tan confuso. ¿Esto es 80 81 o es para el anfitrión o esto para el contenedor? Entonces, permítanme derribar esto rápidamente . Voy a bajar esto, luego expondré el 80 80. Solo se puede acceder en 80 80, pero el contenedor se ejecutará en 80 81. Quiero obtener la diferencia. Por eso estoy tratando de pasar por este proceso. Vamos a subir y ejecutar estos servicios. Bien. Entonces puedes ver esto está arriba la base de datos está arriba. Veamos esto. Bien, la conexión se conectó con éxito, y ¿qué podemos ver? ¿Empecé en qué? 80 81. Pero recuerden, estaremos accediendo a la web 80 80. Intentemos evaluar sobre. Intentemos evaluar en 80 81. Intentemos evaluar el 80 81. Vamos a lo que pasa. Entonces Anfitrión local 80 81, ¿verdad? 80 81, luego haz Atria o no puede encontrar nada. No hay nada llamado árboleto. No hay nada de eso hay un 81. No hay nada malo en el 881, porque estamos corriendo en ATT, volvamos a ATT. Todo bien. ¿Pueden ver esto, chicos? Pude exponer la salud, exponer mod lef? Esto realmente funciona tal como pretendíamos. Esto es simplemente increíble. Chicos. Esto es increíble. Esto es realmente, realmente increíble. De hecho, somos capaces de hacer esto. Ahora bien, así es como ejecuto mi prueba y deliberadamente muestro esta parte para que sepamos cómo funciona. Lo hice para que ustedes entiendan que si están tratando hacer la transición de su aplicación para que se ejecute en Kubernetes, necesitan poder hacer que funcione Si solo estás apuntando directamente a Kubernetes y por alguna razón, no tienes Kubernetes en tu entorno local, tienes varios errores Lo que tienen que hacer es que les he enseñado a ustedes cómo conectar a estos tipos. Utilizando Docker componer, puedes conectar la base de datos y también el servicio Hablé sobre cómo conectar la red juntos. No sé si mencioné esto, pero si no lo hice, el momento en que configuraste tu red así, y esta automáticamente crea el volumen y la red para ti, ¿verdad? Porque si no lo hiciera, tendría que hacer un comando urónico que crea el volumen Docker, te voy a dar el nombre que crea Docker Network Pero hacer esto dentro del archivo de componer Docker componer crea automáticamente la red y el volumen ¿verdad Y les enseñé a cablear esto y lo mostré paso a paso. Entonces, por favor, ¿puedes ver los otros videos o los videos anteriores en Docker Rice para ver cómo realmente traje todo esto y pude hacer esto? Lo extra que estoy haciendo en este video es mostrarles a ustedes cómo conectar todos estos detalles. Te mostré sin esta propiedad de ambiente, voy a señalar a Docker Yo falla, y somos capaces de ver por qué en realidad señalamos pudimos ver cómo funciona esto. Y para demostrárnoslo, me quité cambié el bote 881 a ATAT Entonces el contenedor está en 80 81, y esto está en ATAT, así que realmente somos capaces de conectarlos y que podamos aprobar Otra forma de confirmar qué olla se está ejecutando tu servicio? Esto es para usuarios de Windows. Para otros usuarios también puedes hacer lo mismo. Esto se hace por vamos a abrir una terminal. Vamos a abrir terminal. Net inicia AO, luego encuentra STR. Esto es estrictamente para Windows, luego pasas en las macetas 80 81. Ahora, no hay nada malo en el 881. Por eso esto no está mostrando nada. Pero paso en 88, ¿ves? Muestra los detalles que Tight. También tienes Net en Linux, que también se traduce a Mac esta vez en lugar de usar 881 usando find SEI usando grab En lugar de usar ANO, no sé si tienen todas estas propiedades. Simplemente podrían aprovechar a cada uno de ellos solo una luz de investigación y encontrarla. Entonces usa grab para encontrar cualquier Podlson 80 81 y para mostrarte los detalles Dot quiero mostrarles todo esto, soy capaz de completar la sesión de doc. Lo sentimos, es necesario completar la sesión de externalización de la solicitud en preparación para que nos mudemos a Cubert Solo me tomé mi tiempo para explicar cómo también podemos ejecutar las cosas en Doka usando un componerse Docer y como pueden ver, ambas aplicaciones se están ejecutando, que es el post guess y el módulo Dirijo dos servicios juntos para mostrar cómo se conectarían realmente. Creo que este es un hito bastante bueno. Yo nos ahorraría el estrés. Yo solo registraría esto en verifico un problema. ¿Cómo debo llamar a este tema? ¿Cómo debería llamarlo? Diré probando la externización Entonces creo que así es como probablemente lo llamaré probando la externalización de Docker Pero debido a que estás usando lanzando ubertis solo diría testing, deployment, externalization Creo que esas palabras no son realmente precisas. Déjame pensarlo un poco. Creo que se me ocurrió un buen nombre. Y la razón por la que estoy tratando de ser muy específico con el nombre para que cuando solo quieras ver los commits exactos y las cosas que cambié, sepas exactamente lo que hice. Y eso es lo que estoy tratando de ser por eso estoy tratando de ser muy específico. Yo lo llamaré voy a traer a este tipo. Lo llamaré una prueba, propiedades externalizadas. Entonces esto funciona. Bien, así que voy a elegir esto. Ahora entra dentro de mi expediente. Voy a hacer un Docker, chequear un Git. CommitneM pasa en I cierra. Entonces sí. Bien, entonces todos los cambios realizados, puedes escoger de esto en realidad. Entonces se pone empuje. A menos que vea venir esto, derecho S esta viniendo. Bien, así que esto está cerca. Bien, chicos Te veré en el siguiente video. Ahora que hemos hecho esto, básicamente, creo que es hora de que luego saltemos a Cubertspper Los veo en el siguiente video. 45. Conclusión de Modulith: Aquí, todos, aquí. Es genial tenerte aquí. Si eres capaz de llegar a este punto, enhorabuena. Eres supersto Has podido reunir tanto conocimiento, has podido detallar cosas como explorar mea componer, conocerte cuándo y cuándo no usarlo Definiciones de identidad, realmente puedes usar la multitud sobre JPA, sabiendo exactamente la diferencia entre ellos. Ahora ya conoces las funcionalidades centrales del módulo, cómo abstraer cosas en diferentes módulos o paquetes como algunos lo llamarían, luego saber cuándo exponer y cuándo no exponer. Eso es realmente un montón de conocimiento que has reunido ahí. También sabes cosas como módulos abiertos y sabes cuándo estás ejecutando tu prueba de integración sabes exactamente cuándo traer realmente un nuevo módulo para hablar realmente con un módulo diferente. Sólo ponle el tuyo a los chicos. Tampoco quiero olvidar que también tienes un evento masivo, y escuchar eso es bastante impresionante. Ahora ya sabes cómo comunicarte de una manera desacoplada, lo cual es maravilloso Y ahora ya sabes cómo documentarlo tu moduli, lo cual es bastante impresionante, chicos, bastante, bastante impresionante Y estoy muy, muy, muy emocionada por ti. Bien. No obstante, esta es solo la primera entrega. Siempre te prometo un fin a otro. Entonces esta es la primera entrega. Hay que mirar cosas como pipeline, pipeline CICD, que vendrán en la siguiente clase Entonces siguiendo eso , vamos a estar viendo uberts en detalle Tanta cosa divertida por venir chicos. Espero verte en la segunda entrega de este curso, todo lo que necesitas hacer ir a la sección de descripción una vez que vayas a la sección de descripción o a la sección A, y verás el enlace a las otras clases, en las que puedes simplemente saltar y comenzar a participar de inmediato Bien, chicos, vean en el siguiente video.