Document Details

JesusDR89

Uploaded by JesusDR89

null

2015

Pablo Arellano

Tags

java .NET Jakarta EE software development

Summary

This document covers Java EE/Jakarta EE and .NET architecture, components, persistence, and security. It details the characteristics, elements, languages, and functions of both environments. The document is part of a preparation guide for IT technician positions.

Full Transcript

2015-2016 Bloque 3 - Tema 6 ARQUITECTURA JAVA EE/JAKARTA EE Y PLATAFORMA.NET: COMPONENTES, PERSISTENCIA Y SEGURIDAD. CARACTERÍSTICAS, ELEMENTOS, LENGUAJES Y FUNCIONES DE AMBOS ENTORNOS. DESARROLLO DE INTERFACES PREPARACIÓN OPOSICIONES TÉCNICOS AUXILIARES DE INFORMÁTICA B3T6...

2015-2016 Bloque 3 - Tema 6 ARQUITECTURA JAVA EE/JAKARTA EE Y PLATAFORMA.NET: COMPONENTES, PERSISTENCIA Y SEGURIDAD. CARACTERÍSTICAS, ELEMENTOS, LENGUAJES Y FUNCIONES DE AMBOS ENTORNOS. DESARROLLO DE INTERFACES PREPARACIÓN OPOSICIONES TÉCNICOS AUXILIARES DE INFORMÁTICA B3T6 JAKARTA EE Y.NET TAI ÍNDICE ÍNDICE............................................................................................................................................................ 2 1. ARQUITECTURA JAKARTA EE..................................................................................................................... 3 1. Arquitectura......................................................................................................................................... 5 2. Servidor Jakarta EE y contenedores..................................................................................................... 8 3. Componentes..................................................................................................................................... 11 4. Servicios.............................................................................................................................................. 24 5. Persistencia........................................................................................................................................ 28 6. Seguridad........................................................................................................................................... 49 7. Empaquetamiento y despliegue de aplicaciones................................................................................ 52 8. Frameworks y otras APIs.................................................................................................................... 53 2. PLATAFORMA.NET.................................................................................................................................. 56 1..NET Framework................................................................................................................................. 58 2. Arquitectura....................................................................................................................................... 64 3. Persistencia........................................................................................................................................ 74 4. Seguridad........................................................................................................................................... 85 5. Administrador de paquetes................................................................................................................ 87 6. Frameworks y otras APIs.................................................................................................................... 87 PABLO ARELLANO www.theglobeformacion.com Página 2 B3T6 JAKARTA EE Y.NET TAI 1. ARQUITECTURA JAKARTA EE Las arquitecturas web han revolucionado el panorama del desarrollo de software en los últimos años. Esta revolución se ha debido a diferentes causas de entre las que destacan poderosamente la explosión de Internet y sus protocolos, y el apoyo por parte de la industria a este nuevo paradigma de aplicación. El desarrollo de sistemas corporativos basados en una arquitectura Web es algo relativamente reciente. Durante los años 90, los desarrollos de aplicaciones corporativas se diseñaban con tecnología cliente/servidor. La implantación de la tecnología cliente/servidor no se hizo sin problemas ya que dieron lugar a entornos heterogéneos y distribuidos que eran muy difíciles de integrar y sobre todo de gestionar. La necesidad de distribuir aplicaciones a un creciente número de clientes, situados en centros geográficamente dispersos, creó importantes problemas de eficiencia, eficacia y servicio durante la utilización de estas aplicaciones cliente/servidor. El objetivo inicial de alcanzar flexibilidad, acceso rápido y seguro a los datos corporativos, a un precio razonable, seguía siendo una meta por conseguir. El coste de gestión de estos sistemas era enorme y las corporaciones seguían buscando una nueva tecnología que resolviese al menos algunos de estos problemas. A finales de los 90, gran número de desarrollos corporativos empezaron a aprovechar los estándares, lenguajes y protocolos surgidos alrededor de la Web, creándose el concepto de las arquitecturas multicapa, que se presentaban como alternativa a la arquitectura cliente/servidor clásica, que permitiría utilizar un entorno cliente ligero y, por lo tanto, evitar el problema de la distribución y mantenimiento del software de los PCs cliente. Indudablemente estos inicios fueron duros ya que la tecnología que se estaba utilizando no había sido inicialmente pensada para lo que ahora se quería utilizar. Las empresas de software iniciaron una carrera para conseguir adaptar los protocolos, lenguajes y estándares de Internet, que parecían claramente asentados en un tipo de aplicaciones con gran cantidad de información estática e interfaces de usuario sencillas, a las necesidades de los desarrollos corporativos estratégicos. Java es uno de estos lenguajes que aparecieron alrededor de Internet y ha impulsado el desarrollo de aplicaciones con arquitectura Web como ningún otro lenguaje. La complejidad de las arquitecturas web seguía siendo bastante importante, poco a poco se definieron recomendaciones y estándares que intentaron simplificarlo. Con la publicación de las especificaciones J2EE (Java 2 Enterprise Edition) se dio el impulso definitivo para la entrada de esta tecnología en el ámbito empresarial, con muchas menos dudas, ya que estos estándares sí fueron pensados para la problemática de complejos desarrollos corporativos y se ha convertido en la base para los próximos años de la arquitectura de desarrollo para la Web con tecnología Java. PABLO ARELLANO www.theglobeformacion.com Página 3 B3T6 JAKARTA EE Y.NET TAI Jakarta Enterprise Edition o Jakarta EE es un conjunto de especificaciones y prácticas que permiten desarrollar, desplegar y gestionar aplicaciones Java multicapa de entorno empresarial. La plataforma Jakarta EE consta de un conjunto de servicios, APIs y protocolos que proporcionan la funcionalidad necesaria para desarrollar aplicaciones en lenguaje de programación Java basadas en una arquitectura distribuida de varios niveles o capas. NOVEDAD La plataforma Java EE 8 es la última versión especificada por Oracle en el año 2017. A partir de ese momento la organización Eclipse Foundation es la nueva encargada. Como Java es una marca registrada por Oracle, en 2018 Eclipse cambió el nombre de Java EE a Jakarta EE. Actualmente, versión 10. Jakarta EE modifica el nombre de los JCP a Eclipse EE.next Working Group (EE.next). La plataforma Java EE se desarrolla a través de Java Community Process (JCP), que es responsable de todas las tecnologías Java. Grupos de expertos compuestos por partes interesadas han creado solicitudes de especificación Java (JSR) para definir las diversas tecnologías Java EE. El trabajo de la Comunidad Java bajo el programa JCP ayuda a garantizar los estándares de estabilidad y compatibilidad entre plataformas de la tecnología Java. Las especificaciones Jakarta EE se consideran generales. Tenemos especificaciones de: - Plataforma: incluye un conjunto de especificaciones individuales. - Perfil: solo incluyen aquellas especificaciones individuales para desarrollar un tipo específico de aplicaciones. Perfiles: o Perfil web. o Perfil core. Updated Not Updated New MicroProfile es una especificación de la comunidad de código abierto para microservicios Enterprise Java. Esta comunidad colabora dentro de un grupo de trabajo de la Fundación Eclipse para llevar microservicios a la comunidad Enterprise Java. MicroProfile adopta el perfil Core de Jakarta EE. PABLO ARELLANO www.theglobeformacion.com Página 4 B3T6 JAKARTA EE Y.NET TAI Además de la plataforma Jakarta EE, se citan otras plataformas existentes (propiedad de Oracle): - Java Card: permite que elementos seguros, como tarjetas inteligentes y otros chips de seguridad a prueba de manipulaciones, alojen aplicaciones basadas en tecnología Java. Pensado para IoT. - Java ME (Micro Edition): proporciona un entorno robusto y flexible para aplicaciones que se ejecutan en dispositivos integrados y móviles: microcontroladores, sensores, puertas de enlace, teléfonos móviles, PDAs, decodificadores de TV e impresoras entre otros. Java Embedded es parte de esta plataforma. - Java SE (Standard Edition): permite desarrollar e implementar aplicaciones Java de escritorio y servidor. 1. Arquitectura Los desarrollos basados en arquitecturas multicapa, como es el caso de Jakarta EE, utilizan dos conceptos que conviene aclarar: - Capa: una capa es una funcionalidad de la aplicación separada del resto. Por tanto, desde un punto de vista lógico, una aplicación se puede dividir en varias capas. - Nivel: un nivel es un entorno físico donde residen una o varias capas. Es un enfoque desde un punto de vista físico. La arquitectura multicapa que sigue capa es la que se muestra en la figura: Jakarta EE Jakarta EE Application 1 Application 2 Client Client Machine Tier Application Web Client Pages Jakarta Server Pages Faces Web Tier Jakarta EE Server Enterprise Enterprise Beans Beans Business Tier EIS Database Database Database Server Tier PABLO ARELLANO www.theglobeformacion.com Página 5 B3T6 JAKARTA EE Y.NET TAI Por lo general, las aplicaciones de varias capas tienen una capa de cliente, una capa de negocio y una capa de datos. El nivel de cliente consta de un programa de cliente que realiza solicitudes al nivel de servidor. Éste se divide en una capa web y una capa de lógica de negocio, que manejan las solicitudes de los clientes y procesan los datos de la aplicación, almacenándolos en un almacén de datos permanente en el nivel de datos. El desarrollo de aplicaciones Jakarta EE se concentra en la capa web y de negocio. La arquitectura de desarrollo multicapa se caracteriza por dividir el sistema en distintas capas que se comunican a través de interfaces: (1) Nivel de cliente El nivel de cliente consta de clientes de aplicaciones que acceden a un servidor Jakarta EE y que generalmente se encuentran en una máquina diferente del servidor. Los clientes hacen solicitudes al servidor. El servidor procesa las solicitudes y devuelve una respuesta al cliente. Muchos tipos diferentes de aplicaciones pueden ser clientes Jakarta EE. Los clientes pueden ser un navegador web, una aplicación independiente u otros servidores, y se ejecutan en una máquina diferente del servidor Jakarta EE. (2) Nivel servidor Jakarta EE - Capa de presentación web La capa web consta de componentes que manejan la interacción entre los clientes y la capa de negocio. Sus tareas principales son las siguientes: - Genere dinámicamente contenido en varios formatos para el cliente. - Recopile información de los usuarios de la interfaz del cliente y devuelva los resultados apropiados de los componentes en el nivel empresarial - Controle el flujo de pantallas o páginas en el cliente. - Mantener el estado de los datos para la sesión de un usuario. - Realice una lógica básica y mantenga algunos datos temporalmente en beans administrados. PABLO ARELLANO www.theglobeformacion.com Página 6 B3T6 JAKARTA EE Y.NET TAI Algunas de las principales tecnologías Jakarta EE que se utilizan en la capa son (en la imagen, todas las APIs): - Jakarta Faces (JSF): un marco de componentes de interfaz de usuario para aplicaciones web que le permite incluir componentes de IU (como campos y botones) en una página HTML, llamada página Facelets; convierten y validan datos de componentes de la interfaz de usuario, guardan datos de componentes de la IU en almacenes de datos del lado del servidor y mantienen el estado del componente. - Jakarta Servlets: clases del lenguaje de programación Java que procesan dinámicamente solicitudes y construyen respuestas, generalmente para páginas HTML. - Jakarta Server Pages (JSP): nos permite incrustar en el código HTML código Java para generar las partes dinámicas. (3) Nivel servidor Jakarta EE - Capa de negocio o lógica de negocio La capa de negocio consta de componentes que proporcionan la lógica empresarial para una aplicación. La lógica empresarial es un código que proporciona funcionalidad a un dominio comercial particular, como la industria financiera o un sitio de comercio electrónico. En una aplicación empresarial diseñada adecuadamente, la funcionalidad principal existe en los componentes de nivel empresarial. En esta capa se encuentran las siguientes tecnologías Jakarta EE (en la imagen, todas las APIs): - Componentes Jakarta Enterprise Beans (versión actual 4.0) (en Java EE, EJB). - Jakarta RESTful Web Services (en Java EE, JAX-RS, Java API for RESTful Web Services): API para desarrollo de servicios web RESTful. - Jakarta XML Web Services (en Java EE, JAX-WS, Java API for XML Web Services): provee funcionalidad para servicios web que utilizan mensajes XML y que siguen el estándar SOAP. - Jakarta SOAP with Attachments (en Java EE, SAAJ, SOAP with Attachments API for Java): API que permite la producción y el consumo de mensajes que cumplen con las especificaciones SOAP. PABLO ARELLANO www.theglobeformacion.com Página 7 B3T6 JAKARTA EE Y.NET TAI (4) Nivel servidor Jakarta EE - Capa de persistencia o acceso a datos La capa de persistencia se encarga de la manipulación de los datos que requiere el sistema de información y que están situados en diferentes fuentes de datos. Esta capa puede estar diferenciada de la capa de negocio o estar integrada en ella. Las tecnologías de Jakarta EE para el acceso a los datos son: - API de conectividad a base de datos (JDBC). - API para acceso a servicios de directorio (JNDI) - Jakarta Persistence (versión actual 3.1). La API de persistencia de Java (en Java EE, JPA). - Jakarta Transactions (versión actual 2.0). La API de transacciones Java (en Java EE, JTA). - Jakarta Data (actualmente en desarrollo). La API de acceso a datos relaciones/no relaciones y en nube. (5) Nivel de datos Este nivel consta de servidores de bases de datos, sistemas de planificación de recursos empresariales y otras fuentes de datos. Estos recursos generalmente se encuentran en una máquina separada del servidor Jakarta EE, y se accede a ellos por componentes de la lógica de negocio. 2. Servidor Jakarta EE y contenedores Un servidor Jakarta EE es un servidor de aplicaciones que implementa las API de la plataforma Java EE y proporciona servicios estándar Jakarta EE (capa web y de negocio). Los servidores Jakarta EE que cumplen las especificaciones Jakarta EE se les denomina servidores de aplicaciones certificados. PABLO ARELLANO www.theglobeformacion.com Página 8 B3T6 JAKARTA EE Y.NET TAI Los servidores de aplicaciones Java EE certificados son productos comerciales: PRODUCTO COMPAÑÍA WebLogic Oracle Java EE JOnAS ObjectWeb JBoss Red Hat Eclipse GlassFish Eclipse Foundation Software Enterprise Application Platform Fujitsu WebSphere Liberty IBM Jakarta EE 10 Open Liberty Open Liberty PLATFORM Server Community y Server Enterprise Payara JBoss Enterprise Application Platform Red Hat WildFly WildFly Eclipse GlassFish Eclipse Foundation Jakarta EE 10 WebSphere Liberty IBM WEB PROFILE JBoss Enterprise Application Platform Red Hat y Jakarta EE 10 Open Liberty Open Liberty CORE PROFILE Server Community y Server Enterprise Payara WildFly WildFly Los servidores Jakarta EE alojan varios tipos de componentes de aplicación que corresponden a las capas en una aplicación multicapa. El servidor Jakarta EE proporciona servicios a estos componentes en forma de contenedor. Un contenedor es un proceso donde se ejecutan los componentes. Los contenedores Jakarta EE son la interfaz entre el componente y la funcionalidad de la capa inferior proporcionada por la plataforma para soportar ese componente. La funcionalidad del contenedor está definida por la plataforma y es diferente para cada tipo de componente. No obstante, el servidor permite que los diferentes tipos de componentes trabajen juntos para proporcionar funcionalidad en una aplicación empresarial. - El contenedor del cliente de la aplicación es la interfaz entre los clientes de la aplicación Jakarta EE (aplicaciones especiales de Java SE que usan componentes del servidor Jakarta EE) y el servidor Jakarta EE. PABLO ARELLANO www.theglobeformacion.com Página 9 B3T6 JAKARTA EE Y.NET TAI El contenedor del cliente de la aplicación se ejecuta en la máquina del cliente y es la puerta de enlace entre la aplicación del cliente y los componentes del servidor Jakarta EE que utiliza el cliente. - El contenedor web es la interfaz entre los componentes web y el servidor web. Un componente web puede ser un servlet, una página JSP o JSF. El contenedor gestiona el ciclo de vida del componente, envía solicitudes a los componentes de la aplicación y proporciona interfaces para datos de contexto, como información sobre la solicitud actual. El contenedor web se ejecuta en el servidor web (habitualmente) o en el servidor Jakarta EE. Contenedores web: Apache Tomcat es un contenedor de servelts y JSPs. El protocolo AJP (Apache Jserv Protocol), orientado a paquetes, permite la comunicación entre el servidor web (por ejemplo, Apache) y Tomcat a través de conexiones TCP persistentes. Apache sirve las peticiones de páginas estáticas y Tomcat las peticiones de páginas con contenido dinámico. - El contenedor EJB es la interfaz entre los beans empresariales, que proporciona la lógica empresarial de una aplicación Jakarta EE, y se ubica en el servidor Jakarta EE. El contenedor EJB se ejecuta en el servidor Jakarta EE y gestiona la ejecución de los beans empresariales de una aplicación. Interoperabilidad Muchas de las API proveen interoperabilidad con componentes que no forman parte de la plataforma Jakarta EE, como servicios web externos o CORBA. Jakarta EE Interoperability ofrece las facilidades de interoperabilidad que pueden estar disponibles en la plataforma Jakarta EE. IIOP HTT P IIOP HTT P SSL SSL SOAP SOAP JRMP JRMP EJB / IIOP / SSL HTT P HTT P Web EJB Container Container Database Application Client Container Jakarta EE Platform JRMP IIOP SOAP HTT P HTT P SSL PABLO ARELLANO www.theglobeformacion.com Página 10 B3T6 JAKARTA EE Y.NET TAI Java RMI (RMI, Remote Method Invocation) es una tecnología que proporciona comunicación remota entre programas escritos en el lenguaje Java, permitiendo tener los objetos distribuidos en diversas máquinas, esto es, que un objeto que se ejecuta en una JMV (máquina virtual Java) invoque métodos en un objeto que se ejecuta en otra JVM. Anterior a esta tecnología, para realizar llamadas a funciones y procedimientos remotos se usaba (RPC, Remote Procedure Calls). Para usar Java RMI se necesita el siguiente paquete: import java.rmi.*; Cada servicio RMI (objeto remoto) se define mediante una interface, que especifica los métodos que se pueden invocar en el objeto remoto. Esta interface debe estar disponible en el cliente y en el servidor. Además, se puedan pasar argumentos al método remoto y recibir los datos que devuelve (tipos primitivos u objetos de clases que sean serializables). RMI-JRMP es el protocolo de invocación de método remoto (RMI, Remote Method Invocation) específico de Java que permite la comunicación de aplicaciones distribuidas basadas exclusivamente en Java. Java IDL (IDL, Interface Description Language) es una implementación CORBA que permite que dos objetos interactúen sobre diferentes plataformas a través de una red. Al ser una interfaz, posibilita que objetos escritos con diferentes lenguajes (a diferencia de Java RMI) interactúen entre sí. RMI/IIOP (IIO, Internet Inter-ORB Protocol) es un protocolo de comunicación para CORBA que utiliza RMI para permitir la comunicación entre aplicaciones distribuidas en diferentes lenguajes (no necesariamente Java). 3. Componentes Los componentes se despliegan y ejecutan en contenedores especializados. Citamos los siguientes componentes: - Componentes WEB: o Jakarta Servlet. Versión actual 6.0. (en Java EE, Java Servlet) o Jakarta Pages (JSP). Versión actual 3.1. (en Java EE, JavaServer Pages) o Jakarta Faces (JSF). Versión actual 4.0. (en Java EE, JavaServer Faces) - Componentes de NEGOCIO: o Jakarta Enterprise Beans (EJB). Versión actual 4.0. (en Java EE, Enterprise JavaBeans) PABLO ARELLANO www.theglobeformacion.com Página 11 B3T6 JAKARTA EE Y.NET TAI (1) Servlets Un servlet es una clase de lenguaje de programación Java que se utiliza para ampliar las capacidades de los servidores que alojan aplicaciones a las que se accede mediante un modelo de programación de petición/respuesta. Se utilizan en los servidores web proporcionando contenido dinámico al usuario. Para este tipo de aplicaciones, la tecnología Java Servlet define clases de servlet específicas de HTTP. Los servlets son pequeños programas escritos en Java que admiten peticiones a través del protocolo HTTP. Por lo tanto, los servlets pueden recibir peticiones desde un navegador web, procesarlas, y devolver una respuesta al navegador, normalmente en HTML. Para realizar estas tareas podrán utilizar las clases incluidas en el lenguaje Java. Los servlets se instalan, gestionan y ejecutan en un componente del sistema denominado contenedor web, que se comunican con el cliente normalmente mediante el protocolo HTTP. Estos programas suelen ser intermediarios entre el cliente (la mayoría de las veces un navegador web) y los datos (normalmente una base de datos). El funcionamiento básico de un servlet es el siguiente: - El cliente envía una petición al servlet mediante HTTP. - El servlet procesa los argumentos de la petición. - El servlet realiza la tarea solicitada. - El servlet devuelve una respuesta al cliente, normalmente en HTML. El ciclo de vida de un servlet tiene 3 fases: - Instanciación e inicialización: se crea el servlet en memoria (si no existe una instancia previa del mismo) y se llama al método init() para inicializar su funcionamiento. - Gestión de peticiones: para atender cada petición, el servidor de aplicaciones o contenedor de servlets crea un hilo de ejecución del servlet, lo que permite atender varias peticiones de forma simultánea, compartir datos de forma automática, etc. Como desventaja, es importante tener en cuenta los posibles problemas de concurrencia que pueden derivarse de esto. - Destrucción: si durante un tiempo (configurable) el servlet no recibe peticiones, es descargado de memoria. PABLO ARELLANO www.theglobeformacion.com Página 12 B3T6 JAKARTA EE Y.NET TAI La estructura básica de un servlet comprende: - La importación de las clases necesarias para desarrollar nuestros propios servlets, son: import jakarta.servlet.*; (en Java EE, javax.servlet.*) import jakarta.servlet.http.*; (en Java EE, javax.servlet.http.*) - La clase a implementar debe extender un servlet del API. Como las aplicaciones a desarrollar son aplicaciones web utilizaremos como clase base el servlet HttpServlet, que implementa el comportamiento de un servlet capaz de trabajar con el protocolo http: public class MiClase extends HttpServlet {... } La clase HttpServlet es una clase abstracta de la que heredarán todos los servlets destinados a dar servicios desde un contenedor web. Los métodos más interesantes y que un servlet puede sobrecargar son los siguientes: o doGet(): se ejecuta cuando se recibe una petición HTTP GET. o doPost(): se ejecuta cuando se recibe una petición HTTP POST. o doPut(): se ejecuta cuando se recibe una petición HTTP PUT. o doDelete(): se ejecuta cuando se recibe una petición HTTP DELETE. o init() y destroy(): gestionan el ciclo de vida del servlet, ejecutándose en la creación y destrucción del servlet. o getServletInfo(): lo utiliza el servlet para proporcionar información acerca de sí mismo. o service(): maneja la petición HTTP para redirigir al método doXXX que corresponda. Los métodos doXXX reciben como parámetros, objetos de la clase HttpServletRequest con la información de la solicitud HTTP y HttpServletResponse, donde se incluye la información de respuesta a la petición HTTP. En ellos se implementa normalmente la funcionalidad del servlet ante los distintos tipos de solicitudes HTTP. - Después debemos sobrescribir, si lo necesitamos, el método init() heredado de la superclase, encargado de inicializar el servlet. En él debemos incluir todo lo que queramos que se ejecute sólo cuando se cree el servlet en memoria. Para ello, primero llamamos al init() de la superclase. Después podemos incluir las inicializaciones necesarias. public void init(ServletConfig conf) throws ServletException { super.init(conf); // Inicializaciones } - Finalmente se sobrescriben los métodos doXXX según los tipos de peticiones que se vayan a tratar. PABLO ARELLANO www.theglobeformacion.com Página 13 B3T6 JAKARTA EE Y.NET TAI Ejemplo: Nombre Apellidos import java.io.*; import jakarta.servlet.*; import jakarta.servlet.http.*; public class ArgumentosPost extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); out.println("Nombre: " + req.getParameter("nombre")); out.println("Apellidos: " + req.getParameter("apellidos")); } } El protocolo HTTP es un protocolo que no es capaz de almacenar el estado en el que se encuentra, es decir, no es capaz de almacenar qué ha pasado en el pasado inmediato. Los servidores de aplicaciones suplen esa carencia permitiendo que almacenemos variables en un entorno de ejecución de nuestra aplicación web denominado sesión. Los servlets son capaces de conectarse a una determinada sesión en curso o crear una nueva y añadir, modificar o borrar atributos de la sesión. Ejemplo: aplicación web que cuenta el número de veces que accedemos o recargamos una página mientras la sesión está activa. import java.io.*; import jakarta.servlet.*; import jakarta.servlet.http.*; public class Contador extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); HttpSession session = request.getSession(true); Integer contador; if (session.isNew()) { out.println("Hola. "); contador = new Integer(0); } else { out.println("Hola de nuevo. "); contador = (Integer)session.getAttribute("valor"); } PABLO ARELLANO www.theglobeformacion.com Página 14 B3T6 JAKARTA EE Y.NET TAI Integer nuevoValor = new Integer(contador.intValue()+1); session.setAttribute("valor", nuevoValor); out.println("En la sesión: "+session.getId()+ " el contador vale " + contador + "\n"); } } (2) Faces Jakarta Faces es un framework IU para aplicaciones web Java. Está diseñado para reducir significativamente la carga de escribir y mantener aplicaciones que se ejecutan en un servidor de aplicaciones Java. Jakarta Faces: - Facilita la construcción de IU a partir de un conjunto de componentes de interfaz de usuario reutilizables. - Simplifica la migración de los datos de la aplicación hacia y desde la IU. - Ayuda a gestionar el estado de la IU en todas las solicitudes del servidor. - Proporciona un modelo sencillo para comunicar eventos generados por el cliente al servidor. - Permite crear y reutilizar fácilmente los componentes de IU personalizados. Para usar Jakarta Faces se necesita el siguiente paquete: import jakarta.faces.*; (en Java EE, javax.faces) Java Server Faces (JSF) ofrece: - Un conjunto de APIs para representar componentes de IU y administrar su estado, manejar eventos y validación de entradas, definir la navegación de la página y respaldar la internacionalización y la accesibilidad. - Una biblioteca de etiquetas personalizadas de JSP para expresar una interfaz JSF dentro de una página JSP. La página web myfacelet.xhtml está construida utilizando etiquetas de componente JSF, las cuales se utilizan para agregar componentes a la vista (myView en la imagen), que es la representación de la página en el lado del servidor. La página web también puede hacer referencia a objetos, como eventos, validadores y conversores que estén registrados en los componentes, y también a los componentes JavaBeans que capturan los datos y procesan la funcionalidad específica de la aplicación de los componentes. A petición del cliente, la vista se presenta como respuesta. La renderización es el proceso mediante el cual, basándose en la vista del lado del servidor, el contenedor web genera una salida HTML que puede ser leída por el navegador. Los componentes de JSF son: - Componentes IU: clases que extienden de IUComponentBase (subclase de UIComponent), la cual define el estado y el comportamiento por defecto de los PABLO ARELLANO www.theglobeformacion.com Página 15 B3T6 JAKARTA EE Y.NET TAI componentes. Componentes: UIColumn, UICommand, IUForm, UIInput, UIMessage, UIPanel… - Conversor: transforma de forma conveniente los valores de los objetos Java vinculados a los componentes JSF en Strings y transforman los Strings enviados por el cliente (parámetros HTTP) en los objetos Java vinculados a los componentes JSF según el tipo que corresponda. - Validador: comprueba que los valores recibidos y almacenados en los componentes JSF cumplen las restricciones especificadas. - Renderizador: genera la representación de los componentes a mostrar en los clientes y de recuperar las entradas de usuario recibidas para actualizar los valores vinculados a los componentes. Por último, recordamos que tanto Jakarta Faces como JSF son una especificación, por lo que necesitamos de un framework que implemente dicha especificación. Entre las implementaciones destacamos: - Eclipse MojarraTM (incluido en Eclipse GlassFish) es una implementación que define un marco MVC para crear IU para aplicaciones web, incluidos los componentes de la IU, la gestión del estado, la entrega de eventos, la validación de entradas, la navegación por páginas y el soporte para la internacionalización y la accesibilidad. - Apache MyFaces. (3) JSP JSP es un lenguaje que permite insertar etiquetas de distintos tipos que añaden comportamiento dinámico a nuestras páginas. JSP se considera un nivel de abstracción por encima de los servlets, ya que las páginas JSP se transforman en servlets para ejecutarse. Ejemplo: Salvo por algunos detalles, el código incluido entre las etiquetas es código Java normal y corriente: podemos definir variables, mostrar su contenido, debemos incluir paquetes, etc. Se puede incluir código Java dentro de las páginas JSP de tres formas distintas: - Expresiones: que se evalúan y el resultado se muestra en el navegador. Pueden ser tan sencillas como incluida en el ejemplo anterior o pueden contener concatenaciones y acceso a atributos estáticos de clases de java. PABLO ARELLANO www.theglobeformacion.com Página 16 B3T6 JAKARTA EE Y.NET TAI Ejemplo: - Scriptlets: son fragmentos de código Java entre las etiquetas. Para poder mostrar cosas en el navegador debemos utilizar el objeto implícito out. Ejemplo: - Declaraciones: que se encuentran entre los símbolos. Las variables declaradas se consideran globales. En el ejemplo “hola mundo”, podemos ver cómo se declara una variable global de tipo String que luego se utiliza. Ejemplo: Como se comentó en la introducción, los archivos JSP se transforman en un servlet para su ejecución. Las directivas influyen en la manera en la que se realiza esta transformación. Hay tres tipos de directivas: - : se utiliza para importar clases, acceder a la sesión, gestión de errores, etc. - : nos permite incluir un fichero dentro de otro. Simplemente copia el contenido de un fichero dentro de otro. - : se utiliza en el uso de JSTL1 (JavaServer Pages Standard Tag Library). 1 Extiende JSP proporcionando cuatro bibliotecas de etiquetas: core, xml, sql y fmt. PABLO ARELLANO www.theglobeformacion.com Página 17 B3T6 JAKARTA EE Y.NET TAI Las acciones tienen diversos usos, como por ejemplo incluir la salida resultante de ejecutar un fichero JSP en otro. Podemos escribir un fichero index.jsp de la forma. Ejemplo: Y un fichero cuerpo.jsp de la forma: 0) acceso=true; session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } return acceso; } public User datosUsuario(String username) { User usuario = new User(); Session session = HibernateUtil.getSessionFactory().openSession(); try { session.beginTransaction(); String query = "FROM User WHERE user='"+username+"'"; usuario = (User) session.createQuery(query).uniqueResult(); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } return usuario; } public boolean existeUsuario(String username) { Session session = HibernateUtil.getSessionFactory().openSession(); boolean acceso = false; try { session.beginTransaction(); String query = "FROM User WHERE user='"+username+"'"; List lista = session.createQuery(query).list(); if(lista.size()>0) acceso=true; PABLO ARELLANO www.theglobeformacion.com Página 46 B3T6 JAKARTA EE Y.NET TAI session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } return acceso; } public List list() { Session session = HibernateUtil.getSessionFactory().openSession(); List lista = null; try { session.beginTransaction(); String query = "FROM User"; lista = session.createQuery(query).list(); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } return lista; } public void add(User user){ Session session = HibernateUtil.getSessionFactory().openSession(); try { session.beginTransaction(); session.saveOrUpdate(user); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } } public void update(User user){ Session session = HibernateUtil.getSessionFactory().openSession(); try { session.beginTransaction(); session.saveOrUpdate(user); session.getTransaction().commit(); PABLO ARELLANO www.theglobeformacion.com Página 47 B3T6 JAKARTA EE Y.NET TAI } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } } public void delete(User user){ Session session = HibernateUtil.getSessionFactory().openSession(); try { session.beginTransaction(); session.delete(user); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction()!=null) { session.getTransaction().rollback(); } } finally { session.close(); } } } public class HibernateUtil { private static SessionFactory sessionFactory; public static void buildSessionFactory() { if(sessionFactory == null) { Configuration conf = new Configuration().configure(); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(). applySettings(conf.getProperties()); sessionFactory = conf.buildSessionFactory(builder.build()); } } public static SessionFactory getSessionFactory() { if(sessionFactory == null) { buildSessionFactory(); } return sessionFactory; } public static void closeSessionFactory() { if((sessionFactory != null) && (!sessionFactory.isClosed())) { sessionFactory.close(); } } } PABLO ARELLANO www.theglobeformacion.com Página 48 B3T6 JAKARTA EE Y.NET TAI Por último, recordamos que JPA es una especificación de persistencia por lo que necesitamos de un framework de persistencia que implemente dicha especificación. Entre los frameworks de persistencia destacamos: - Hibernate: ORM mediante archivos XML o anotaciones. Actualmente disponible en su versión 6, distribuido bajo licencia LGPL. Dispone de un lenguaje propio de consultas denominado HQL (Hibernate Query Language). Es el framework de persistencia por excelencia, el más utilizado. Tiene una variante, Hibernate OGM, que ofrece persistencia sobre bases de datos NoSQL. - EclipseLink (de Eclipse Foundation). - Apache OpenJPA. - Apache Cayenne. - MyBatis (antes iBATIS). - jOOQ. - Ebean (también para Kotlin). JNDI Para trabajar con directorios de nombres, se requiere el uso de clases e interfaces para acceder a dichos servicios de nombres, necesitándose el paquete: import javax.naming.*; 6. Seguridad Toda organización que tenga recursos confidenciales a los que puedan acceder muchos usuarios o recursos que atraviesen redes abiertas sin protección, como Internet, necesita protección. La capa de negocio y web están formadas por componentes que se implementan en varios contenedores. Estos componentes se combinan para crear una aplicación empresarial de multicapa. La seguridad de los componentes es proporcionada por sus contenedores. Un contenedor proporciona dos tipos de seguridad: declarativa y programática. - La seguridad declarativa expresa los requisitos de seguridad de un componente de la aplicación mediante descriptores de implementación o anotaciones. Un descriptor de implementación es un archivo XML externo a la aplicación y que expresa la estructura de seguridad de una aplicación, incluidos los roles de seguridad, el control de acceso y los requisitos de autenticación. PABLO ARELLANO www.theglobeformacion.com Página 49 B3T6 JAKARTA EE Y.NET TAI Las anotaciones, también llamadas metadatos, se utilizan para especificar información sobre seguridad dentro de un archivo de clase. Cuando se despliega la aplicación, el descriptor de despliegue de la aplicación puede usar o anular esta información. Las anotaciones le ahorran tener que escribir información declarativa dentro de los descriptores XML. En cambio, simplemente coloca anotaciones en el código y se genera la información requerida. - La seguridad programática está integrada en una aplicación y se utiliza para tomar decisiones de seguridad. La seguridad programática es útil cuando la seguridad declarativa por sí sola no es suficiente para expresar el modelo de seguridad de una aplicación. La API para seguridad programática consta de métodos de la interfaz Jakarta Security SecurityContext y métodos de la interfaz Jakarta Enterprise Beans EJBContext y la interfaz del servlet HttpServletRequest. Los métodos de la interfaz Jakarta Security SecurityContext están destinados a reemplazar los métodos correspondientes de las interfaces EJBContext y HttpServletRequest. Mecanismos de seguridad Java SE Java SE proporciona soporte para una variedad de características y mecanismos de seguridad: - Java Cryptography Architecture (JCA) contiene una arquitectura de proveedor y un conjunto de APIs para firmas digitales, hashes (SHA), validación de certificados y certificados, cifrado simétrico (DES, 3DES, IDEA…), cifrado asimétrico (RSA, DSA, ElGamal…), generación y gestión de claves y generación segura de números aleatorios. Reemplaza y amplia al API Java Cryptography Extension (JCE). Java ofrece para el manejo de la seguridad los siguientes paquetes principales: java.security, javax.crypto. Bouncy Castle es un proyecto de software libre que desarrolla una serie de APIs criptográficas libres y, entre otros, ofrece un proveedor (provider) para el JCA de Java. También, disponible para C#. - Java Authentication and Authorization Service (JAAS) es un conjunto de APIs que permite que los servicios autentiquen y apliquen controles de acceso a los usuarios. JAAS proporciona un marco del módulo de autenticación conectable (PAM) para la autenticación y autorización de usuarios. - Java Generic Security Services (Java GSS-API) es una API basada en token utilizada para intercambiar mensajes de forma segura entre aplicaciones que se comunican. El GSS-API ofrece acceso uniforme a servicios de seguridad además de una variedad de mecanismos de seguridad subyacentes, incluido Kerberos. - Java Secure Sockets Extension (JSSE) proporciona un marco y una implementación para una versión Java de los protocolos TLS y DTLS (Datagram Transport Layer Security) e PABLO ARELLANO www.theglobeformacion.com Página 50 B3T6 JAKARTA EE Y.NET TAI incluye funcionalidad para el cifrado de datos, la autenticación del servidor, la integridad del mensaje y la autenticación opcional del cliente para habilitar comunicaciones seguras de Internet. - Simple Authentication and Security Layer (SASL) es un estándar de Internet (RFC 2222) que especifica un protocolo para la autenticación y el establecimiento opcional de una capa de seguridad entre las aplicaciones cliente y servidor. SASL define cómo se intercambiarán los datos de autenticación, pero no especifica el contenido de esos datos. SASL es un marco en el que pueden encajar mecanismos de autenticación específicos que especifican el contenido y la semántica de los datos de autenticación. Java SE también proporciona un conjunto de herramientas para administrar almacenes de claves, certificados y archivos de políticas, generar y verificar firmas jar y obtener, enumerar y administrar tickets de Kerberos. Mecanismos de seguridad Jakarta EE Los servicios de seguridad de Java EE son proporcionados por el contenedor de componentes y pueden implementarse utilizando técnicas declarativas o programáticas. Los servicios de seguridad de Java EE proporcionan un mecanismo de seguridad robusto y fácil de configurar para autenticar a los usuarios y autorizar el acceso a las funciones de la aplicación y los datos asociados en muchas capas diferentes. Los servicios de seguridad Java EE están separados de los mecanismos de seguridad del sistema operativo. (1) Seguridad de la capa de aplicación Los contenedores de componentes son responsables de proporcionar seguridad de la capa de aplicación, servicios de seguridad para un tipo de aplicación específico adaptado a las necesidades de la aplicación. En la capa de aplicación, los firewalls de la aplicación se pueden usar para mejorar la protección de la aplicación al proteger el flujo de comunicación y todos los recursos de la aplicación asociados contra ataques. La seguridad de Jakarta EE es fácil de implementar y configurar y puede ofrecer un control de acceso preciso a las funciones y datos de la aplicación. Sin embargo, como es inherente a la seguridad aplicada en la capa de aplicación, las propiedades de seguridad no son transferibles a las aplicaciones que se ejecutan en otros entornos y protegen los datos solo mientras residen en el entorno de la aplicación. En el contexto de una aplicación empresarial tradicional, esto no es necesariamente un problema, pero cuando se aplica a una aplicación de servicios web, en la que los datos a menudo viajan a través de varios intermediarios, hay que usar los mecanismos de seguridad Java EE junto con la seguridad de la capa de transporte y seguridad de capa de mensaje para una solución de seguridad completa. (2) Seguridad de la capa de transporte Es proporcionada por los mecanismos de transporte utilizados para transmitir información. Se basa en HTTPS (TLS). La seguridad de transporte es un mecanismo de seguridad punto a punto que puede usarse para autenticación, integridad de mensajes y confidencialidad. Cuando se ejecuta sobre una sesión protegida por TLS, el servidor y el cliente pueden autenticarse entre sí y negociar un algoritmo de cifrado y claves criptográficas antes de que PABLO ARELLANO www.theglobeformacion.com Página 51 B3T6 JAKARTA EE Y.NET TAI el protocolo de la aplicación transmita o reciba su primer byte de datos. La seguridad está activa desde el momento en que los datos salen del cliente hasta que llega a su destino, o viceversa, incluso a través de intermediarios. El problema es que los datos no están protegidos una vez que llegan al destino. Una solución es cifrar el mensaje antes de enviarlo. (3) Seguridad de la capa de mensajes En la seguridad de la capa de mensajes, la información de seguridad está contenida en el mensaje SOAP y/o el archivo adjunto del mensaje SOAP, lo que permite que la información de seguridad viaje junto con el mensaje o archivo adjunto. Cuando se envía desde el remitente inicial, el mensaje puede pasar a través de nodos intermedios antes de llegar a su receptor previsto. En este escenario, las partes encriptadas continúan siendo opacas para cualquier nodo intermedio y solo pueden ser desencriptadas por el receptor previsto. Por esta razón, la seguridad de la capa de mensajes también se conoce como seguridad de extremo a extremo. Las tecnologías que nos ayudan a implementar la seguridad en una aplicación Jakarta EE son: - Jakarta Security. - Jakarta Authentication. - Jakarta Authorization. 7. Empaquetamiento y despliegue de aplicaciones Los componentes Jakarta EE deben ser empaquetados para facilitar su posterior instalación en el servidor Jakarta EE. La especificación Jakarta EE define cómo se debe realizar este empaquetado de modo que cualquier servidor compatible con las especificaciones pueda instalar el paquete. Una aplicación Jakarta EE está compuesta, en principio, por componentes EJB, componentes web (servlets y/o JSP), clases con utilidades de servidor, componentes de cliente y ficheros HTML. Todos estos componentes se deben empaquetar junto con unos ficheros de configuración conocidos como descriptores de despliegue o deployment descriptors. Los tipos de empaquetado son: - Jakarta/Java Archive (.jar): los ficheros en formato JAR están basados en el formato ZIP y se utilizan para empaquetar un conjunto de ficheros. Los ficheros que conforman nuestra aplicación y los ficheros de metainformación que se pueden utilizar para la configuración de las clases incluidas forman parte del.jar. - Web Archive (.war): este tipo de empaquetamiento permite la posibilidad de agrupar toda la estructura de directorios vista en.jar más el deployment descriptor (fichero de configuración web.xml) en un único fichero de extensión.war. El empaquetado de un.war es igual a un fichero.jar. Sin embargo, como diferencia un Web Archive puede ser desplegado directamente en el servidor de aplicaciones, ya que las aplicaciones webs no se instalan, se despliegan. PABLO ARELLANO www.theglobeformacion.com Página 52 B3T6 JAKARTA EE Y.NET TAI - Enterprise Archive (.ear): empaquetamiento asociado básicamente a los EJB, aunque también se puede utilizar en aplicaciones web. Un fichero EAR puede contener uno o varios ficheros WAR, uno o varios ficheros JAR los cuales albergan los EJB de nuestra aplicación, uno varios ficheros JAR con las clases de servicio o utilidad y un deployment descriptor. 8. Frameworks y otras APIs Frameworks - Spring: framework que agiliza el desarrollo de aplicaciones empresariales. Este framework de código abierto implementa un contenedor de inversión de control (IoC), puede ser usado para la programación aplicaciones web o de escritorio estándar y cuenta con gran variedad de módulos que nos facilitan el trabajo. - Spring MVC: subproyecto de Spring dirigido a facilitar y optimizar el proceso de creación de aplicaciones web utilizando el patrón MVC (Modelo Vista Controlador), donde el Modelo representa los datos o información que manejará la aplicación web, la Vista son todos los elementos de la UI (Interfaz de Usuario), con los que el usuario final interactúa con la aplicación y el Controlador es el encargado de manipular los datos en según la interacción del usuario. - Spring Boot: subproyecto de Spring MVC que permite el desarrollo de aplicaciones web autocontentidas que llevan embebido el contenedor de servlets. - Spring Web Services (Spring-WS): facilita el desarrollo de servicios web SOAP. - Struts 2: framework de código abierto de Apache para el desarrollo de aplicaciones web siguiendo el patrón de diseño MVC. Permite la integración con Spring e Hibernate. - Guice: framework de inyección de dependencias utilizado en aplicaciones Java creado por Google. - PrimeFaces: framework de código abierto con un conjunto de componentes para JSF. - Play: framework de desarrollo web de código abierto. - JHipster: framework de código abierto que se utiliza para desarrollar aplicaciones web y microservicios. - Apache Axis2: framework para desarrollo de servicios web SOAP y RESTful. - Apache CXF: framework que soporta servicios web SOAP y RESTful. - Jersey: framework de Eclipse con soporte para servicios web RESTful en Java. PABLO ARELLANO www.theglobeformacion.com Página 53 B3T6 JAKARTA EE Y.NET TAI - RESTEasy: framework para desarrollo de servicios web RESTful en Java (JAX-RS). - Apache Wicket: framework de desarrollo de aplicaciones web. - VRaptor: framework MVC de código abierto. - Google Web Toolkit (GWT): framework de código abierto desarrollado por Google para crear y optimizar aplicaciones web de alto rendimiento basadas en navegador (JS, AJAX a través de XMLHttpRequest) sin que el desarrollador tenga que ser un experto. - Jena: framework de Apache para construir aplicaciones de Web Semántica y Datos Vinculados en Java. - MINA: framework de Apache para desarrollar aplicaciones de red de alto rendimiento y alta escalabilidad. - Grails: framework escrito en Groovy orientada a crear aplicaciones web de forma sencilla que adopta el principio DRY. Librerías y herramientas - JUnit: biblioteca que evalúa el funcionamiento de nuestro desarrollo mediante pruebas funcionales de clases y métodos. Última versión estable, 5. - DBUnit: extensión de JUnit para realizar pruebas del funcionamiento de las operaciones de base de datos. - JMeter: herramienta de Apache para realizar pruebas de estrés o rendimiento en Java. - Mockito: herramienta de Apache para realizar pruebas unitarias, basado en mock (objetos simulados). - log4j: implementa un sistema de log (de Apache). - SLF4J (Simple Logging Facade for Java): ofrece una fachada para varios frameworks de loggin. - Jackson: procesador JSON (de Apache). - Commons: conjunto de componentes Java reutilizables (de Apache, https://commons.apache.org/). - HttpComponents: conjunto de componentes Java de bajo nivel centrados en HTTP (de Apache), como HttpCore o HttpClient. - JasperReports: permite la generación de informes. Bibliotecas alternativas: Birt Reports y FineReport. PABLO ARELLANO www.theglobeformacion.com Página 54 B3T6 JAKARTA EE Y.NET TAI - Google Guava: conjunto de bibliotecas comunes Java de código abierto. - iText: generación de archivos en formato PDF. - Spring Security: gestiona la seguridad de la aplicación. Uso asociado al framework Spring o también de forma independiente. - Javadoc: herramienta para generar documentación API en formato HTML a partir de comentarios de documentos en código fuente. - Maven: herramienta de Apache para gestión y construcción de proyectos Java. - Ant: herramienta de Apache para compilación y construcción. - Ivy: administrador de dependencias de Apache, parte de Ant. - Lucene: biblioteca de Apache que implementa un motor de búsqueda de texto para recuperación de información. - Velocity: proyecto de Apache que es un motor de plantillas basado en Java. - Thymeleaf: motor de plantillas Java del lado del servidor que permite la creación de páginas web con representación. Tiene un uso frecuente en combinación con el framework Spring. PABLO ARELLANO www.theglobeformacion.com Página 55 B3T6 JAKARTA EE Y.NET TAI 2. PLATAFORMA.NET.NET es una plataforma de desarrollo de uso general, multiplataforma (Android, Apple, Linux y Windows) y de código abierto (licencia MIT) para crear tipos diferentes de aplicaciones. Tiene varias características clave, como la compatibilidad con varios lenguajes de programación, modelos de programación asincrónica y simultánea e interoperabilidad nativa, que permiten una amplia variedad de escenarios en diversas plataformas. C# es el lenguaje de programación de referencia para.NET..NET Standard es una especificación formal de las API (biblioteca) de.NET que son comunes en todas las implementaciones de.NET (.NET Framework,.NET Core, Mono, Xamarin, UWP y Unity)..NET Standard permite que las bibliotecas se compilen con el conjunto acordado de API comunes, lo que garantiza que se puedan usar en cualquier aplicación.NET: móvil, escritorio, IoT, web… La última versión de.NET Standard es la 2.1 y Microsoft no publicará ninguna versión más..NET y.NET 5 y versiones posteriores se convierten en la mejor forma de compartir código adoptando un enfoque diferente para establecer la uniformidad que elimine la necesidad de.NET Standard. El motivo de abandonar.NET Standard en favor de.NET es no separar la especificación de la implementación de las API y, también, la ampliación rápida de nuevas funcionalidades a la API evitando procesos previos de revisión de propuestas..NET Standard ofrece las siguientes ventajas: - Define un conjunto uniforme de API denominada BCL (Biblioteca de Clases Base) para todas las implementaciones de.NET. La BCL conforma utiliza el espacio de nombres de System.*. PABLO ARELLANO www.theglobeformacion.com Página 56 B3T6 JAKARTA EE Y.NET TAI - Permite a los desarrolladores generar bibliotecas portables que se pueden usar en las implementaciones de.NET con este mismo conjunto de API. Las implementaciones actuales de.NET son: -.NET Framework: entorno clásico. El runtime utilizado es CLR (Common Language Runtime). Se suele utilizar el término.NET para hace referencia a esta implementación ya que es la implementación de.NET original. Ha empezado a cumplir.NET Standard desde la versión 4.5. -.NET 9 (antes.NET Core): de código abierto, multiOS (Windows, macOS y Linux). El runtime utilizado es coreCLR. Microsoft en los últimos años ha hecho un esfuerzo para otorgar más protagonismo a su comunidad de desarrollo y al software libre. Fruto de ello es la creación de.NET Core (actual.NET 9), implementación de.NET Standard, pero orientada desde el principio a la portabilidad entre plataformas (Windows, Linux y MacOS, y también con Docker), sin dependencias específicas de Windows. - Mono: de código abierto y multiplataforma, tiene su origen en Linux. El runtime utilizado es Mono runtime. - Xamarin: de código abierto y multiplataforma, para crear aplicaciones Android, iOS, tvOS, macOS y Windows con.NET. En mayo de 2024, Microsoft dejará de prestar soporte para Xamarin porque ésta se ha integrado en.NET. PABLO ARELLANO www.theglobeformacion.com Página 57 B3T6 JAKARTA EE Y.NET TAI - UWP (Universal Windows Platform): propio de Windows, usado para compilar aplicaciones Windows modernas y táctiles y software para IoT. El runtime utilizado es.NET Native para UWP. Busca ofrecer a desarrolladores un entorno único de desarrollo que permite generar aplicaciones para las diferentes versiones de Windows (tabletas, PCs, Xbox, etc). Por último, destacamos UNITY, una plataforma de desarrollo 3D en tiempo real para compilar aplicaciones 2D y 3D, como juegos y simulaciones, con.NET y el lenguaje de programación C#. Cada implementación tiene su propio runtime: CLR es el clásico para.NET Framework, CoreCLR es el de.NET 9, Mono runtime el de Mono y.Net Native para UWP. Los lenguajes de programación que ofrece.NET son: - C#. - F#. - Visual Basic. Un lenguaje de programación que permita desarrollar aplicaciones en.NET Framework debe cumplir las especificaciones del Common Language Infrastructure (CLI), definido en el estándar ECMA-335 y en ISO/IEC 23271. 1..NET Framework.NET Framework es el núcleo de la plataforma y ofrece la infraestructura necesaria para desarrollar y ejecutar aplicaciones.NET. Consta de 2 componentes principales: - Common Language Runtime (CLR): es el motor de ejecución que controla las aplicaciones en ejecución. - Biblioteca de clases de.NET Framework: proporciona una biblioteca de clases reutilizable al que pueden llamar los desarrolladores desde sus propias aplicaciones. PABLO ARELLANO www.theglobeformacion.com Página 58 B3T6 JAKARTA EE Y.NET TAI Los servicios que ofrece.NET Framework a las aplicaciones en ejecución son los siguientes: - Administración de la memoria. En muchos lenguajes de programación, los programadores son responsables de asignar y liberar memoria y de administrar la vida útil de los objetos. En las aplicaciones de.NET Framework, CLR proporciona estos servicios en nombre de la aplicación. - Sistema de tipos comunes (CTS, Common Type System). En los lenguajes de programación tradicionales, el compilador define los tipos básicos, lo que complica la interoperabilidad entre lenguajes. En.NET Framework, los tipos básicos los define el CTS de.NET Framework (por ejemplo, Boolean, Byte, Char…) son comunes a todos los lenguajes que tienen como destino.NET Framework. Esto permite la interoperabilidad entre los diferentes lenguajes de programación. - Biblioteca de clases extensa. - Marcos y tecnologías de desarrollo (ver apartado Biblioteca de clases). - Interoperabilidad de lenguajes. Los compiladores de lenguajes cuya plataforma de destino es.NET Framework emiten un código intermedio denominado Lenguaje intermedio común (CIL), que, a su vez, se compila en tiempo de ejecución a través del CLR. Con esta característica, el código escrito en un lenguaje de programación concreto es accesible desde otras aplicaciones escritas lenguajes distintos, de modo que los programadores puedan centrarse en crear aplicaciones en su lenguaje preferido. - Compatibilidad de versiones. Como norma general, las aplicaciones que se desarrollan con una versión determinada de.NET Framework se ejecutan sin modificaciones en una versión posterior. - Ejecución en paralelo..NET Framework ayuda a resolver conflictos entre versiones y permite que varias versiones del CLR coexistan en el mismo equipo. Esto significa que PABLO ARELLANO www.theglobeformacion.com Página 59 B3T6 JAKARTA EE Y.NET TAI pueden coexistir varias versiones de las aplicaciones, y que una aplicación se puede ejecutar en la versión de.NET Framework con la que se compiló. - Compatibilidad con múltiples versiones (multi-targeting). Al establecer.NET Standard como destino, los desarrolladores pueden crear bibliotecas de clases que funcionan en varias plataformas de.NET Framework compatibles con esa versión del estándar. La arquitectura de.NET Framework se puede observar en la siguiente figura: CLR Common Language Runtime es el entorno donde se ejecutan todas las aplicaciones.NET. La herramienta Clrver.exe notifica todas las versiones instaladas de CLR en el equipo. Esta herramienta se instala automáticamente con Visual Studio. La herramienta de desarrollo compila el código fuente de cualquiera de los lenguajes soportados por.NET en un código intermedio o administrado denominado Common Intermediate Language (CIL, antes MSIL o IL, Microsoft Intermediate Lenguaje), similar al bytecode de Java. Para generar dicho código el compilador se basa en el Common Language Specification (CLS) que determina las reglas necesarias para crear ese código CIL compatible con el CLR. Para ejecutarse se necesita un segundo paso, un compilador JIT (Just-In-Time) es el que genera el código máquina real que se ejecuta en la plataforma del cliente y se lleva a cabo en el mismo equipo en que debe ejecutarse el código. Se requieren tantas compilaciones JIT PABLO ARELLANO www.theglobeformacion.com Página 60 B3T6 JAKARTA EE Y.NET TAI como instancias de la aplicación se estén ejecutando. Puesto que la compilación JIT tiene lugar durante la ejecución de la aplicación, el tiempo de compilación es parte del tiempo de ejecución. Por tanto, los compiladores JIT tienen que compensar el tiempo invertido en optimizar el código con el ahorro que puede generar el código resultante. Pero un JIT conoce el hardware real y puede liberar a los desarrolladores de tener que enviar diferentes implementaciones. AOT (Ahead Of Time) es un compilador similar a JIT, que convierte IL en código de máquina. A diferencia de la compilación JIT, la compilación AOT ocurre antes de que la aplicación se ejecute y, normalmente, se realiza en un equipo diferente. De esta forma se consigue con.NET independencia de la plataforma hardware. Servicios de CLR: - Compilador de CIL a nativo. - Recolector de basura (GC, Garbage Collector): es un recolector de elementos no utilizados que implementa la administración de memoria automática. GC libera la memoria ocupada por objetos que ya no se usan. - Motor de seguridad. - Motor de depuración. - Verificador de tipos. - Administrador de excepciones. - Soporte multiproceso (threads). PABLO ARELLANO www.theglobeformacion.com Página 61 B3T6 JAKARTA EE Y.NET TAI CLR admite un modelo de seguridad denominado seguridad de acceso del código o CAS (Code Access Security) para el código administrado. En este modelo se conceden permisos a los ensamblados basados en la identidad del código. El código puede ser administrado o no administrado. Si es administrado, la gestión de memoria, punteros… la realiza el CLR. Si no es administrado el CLR no participa en la ejecución del código, es el sistema operativo el que se encarga de ello. Con respecto a la seguridad, los componentes administrados reciben grados de confianza diferentes en función de una serie de factores, entre los que se incluye su origen (como Internet, red empresarial o equipo local). Esto significa que un componente administrado puede ser capaz o no de realizar operaciones de acceso a archivos, operaciones de acceso al Registro y otras funciones delicadas, incluso si se usa en la misma aplicación activa. El runtime impone la solidez del código mediante la implementación de una infraestructura estricta de comprobación de tipos y código (CTS, Common Type System) que garantiza que todo el código administrado sea autodescriptivo. Ensamblados Los ensamblados son las unidades de creación de las aplicaciones.NET Framework (concepto específico de este framework). Son la unidad fundamental de implementación, control de versiones, reutilización, ámbitos de activación y permisos de seguridad. Un ensamblado es una colección de tipos y recursos compilados para funcionar en conjunto y formar una unidad lógica de funcionalidad (componente). Proporcionan al CLR la información necesaria para conocer las implementaciones de tipos. Los ensamblados adoptan la forma de un archivo ejecutable.exe o de biblioteca.dll. Cada ensamblado.exe se ejecuta en su propio dominio de aplicación (AppDomain), es decir, en su propio proceso de Windows. Sin embargo, los procesos host de CLR, como IIS (Internet Information Services) o Microsoft SQL Server, pueden decidir ejecutar varios dominios de aplicación en el mismo proceso de Windows. PABLO ARELLANO www.theglobeformacion.com Página 62 B3T6 JAKARTA EE Y.NET TAI Un ensamblado ofrece (funciones): - El código que ejecuta el CLR. - Un límite de seguridad. Un ensamblado es la unidad en la que se solicitan y conceden los permisos. - Un límite de tipos. La identidad de cada tipo incluye el nombre del ensamblado en que reside. - Un límite del ámbito de referencia. El manifiesto del ensamblado contiene los metadatos que se usan para resolver tipos y satisfacer solicitudes de recursos. - Un límite de versión. El ensamblado es la unidad versionable más pequeña de CLR. Todos los tipos y recursos del mismo ensamblado tienen la misma versión, como una unidad. - Una unidad de implementación. Cuando se inicia una aplicación sólo deben estar presentes los ensamblados a los que llama la aplicación inicialmente. Elementos de un ensamblado: - Manifiesto del ensamblado, que contiene los metadatos del ensamblado (es el único elemento obligatorio): o Nombre ensamblado. o Referencia cultural: información sobre la referencia cultural o idioma que admite el ensamblado. o Nº versión. o Lista de archivos del ensamblado: código hash de cada archivo que contiene el ensamblado y nombre de archivo. o Información sobre otros ensamblados a los que hace referencia. - Metadatos de tipos. - Código CIL, el sign code permite firmar el ejecutable para garantizar la integridad. - Conjunto de recursos. Biblioteca de clases de.NET Framework La biblioteca de clases de.NET Framework es una colección de clases reutilizables que se integran con CLR. La biblioteca de clases está orientada a objetos, lo que permite mediante herencia poder ampliar el código administrado. Esto hace que las clases de.NET Framework sean fáciles de usar y reduce el tiempo asociado con el aprendizaje de las nuevas características de.NET Framework. Además, los componentes de terceros se integran sin dificultades con las clases de.NET Framework. Como en cualquier biblioteca de clases orientada a objetos, las clases de.NET Framework permiten realizar diversas tareas de programación comunes, como son la administración de cadenas, la recolección de datos, la conectividad de bases de datos y el acceso a archivos. PABLO ARELLANO www.theglobeformacion.com Página 63 B3T6 JAKARTA EE Y.NET TAI Además de estas tareas habituales, la biblioteca de clases incluye tipos adecuados para diversos escenarios de desarrollo especializados, como: - ASP.NET para aplicaciones web. - ADO.NET para el acceso a los datos. - Windows Communication Foundation (WCF) para las aplicaciones orientadas a servicios. - Windows Presentation Foundation (WPF) para las aplicaciones de escritorio de Windows. - Windows Workflow Foundation (WF): para flujos de trabajo. 2. Arquitectura A continuación, se muestra la arquitectura detallada de una aplicación en.NET: Aplicación cliente Podemos crear aplicaciones basadas en Windows mediante: - Windows Presentation Foundation (WPF): permite crear aplicaciones de cliente de escritorio para Windows. El núcleo de WPF es un motor de representación basado en vectores e independiente de la resolución que está diseñado para sacar partido al moderno hardware gráfico. WPF amplía el núcleo con un conjunto completo de características de desarrollo de aplicaciones que incluyen XAML (Extensible Application Markup Language), controles, enlace de datos, diseño, gráficos en 2D y 3D, animación, PABLO ARELLANO www.theglobeformacion.com Página 64 B3T6 JAKARTA EE Y.NET TAI estilos, plantillas, documentos, elementos multimedia, texto y tipografía. WPF es parte de. NET, así que permite compilar aplicaciones que incorporan otros elementos de la API de.NET. Ejemplo: Click Me! La lista de controles de WPF son: o Botones: Button y RepeatButton. o Presentación de datos: DataGrid, ListView y TreeView. o Presentación y selección de fechas: Calendar y DatePicker. o Cuadros de diálogo: OpenFileDialog, PrintDialog y SaveFileDialog. o Entrada de lápiz digital: InkCanvas y InkPresenter. o Documentos: DocumentViewer, FlowDocumentPageViewer, FlowDocumentReader, FlowDocumentScrollViewer y StickyNoteControl. o Entrada: TextBox, RichTextBox y PasswordBox. o Diseño: Border, BulletDecorator, Canvas, DockPanel, Expander, Grid, GridView, GridSplitter, GroupBox, Panel, ResizeGrip, Separator, ScrollBar, ScrollViewer, StackPanel, Thumb, Viewbox, VirtualizingStackPanel, Windowy WrapPanel. o Multimedia: Image, MediaElement y SoundPlayerAction. o Menús: ContextMenu, Menu y ToolBar. o Navegación: Frame, Hyperlink, Page, NavigationWindow y TabControl. o Selección: CheckBox, ComboBox, ListBox, RadioButton y Slider. o Información del usuario: AccessText, Label, Popup, ProgressBar, StatusBar, TextBlock y ToolTip. Los controles se sitúan en contenedores (Canvas, DockPanel, StackPanel, Grid). Ejemplo: Dock = "Top" Dock = "Bottom" PABLO ARELLANO www.theglobeformacion.com Página 65 B3T6 JAKARTA EE Y.NET TAI Dock = "Left" This TextBox "fills" the remaining space. - Windows Forms: permite crear aplicaciones de escritorio tradicionales con componentes básicos IU. Se utiliza un formulario, como contenedor, en el que se pueden incluir controles Label, Button, Listbox y TextBox. Una vez definida la interfaz se implementan los manejadores de eventos sobre los controles. - Silverlight: permite la presentación de IU en navegadores web. Microsoft Chrome no soporta esta tecnología. El soporte técnico para Silverlight finalizó en 2021. ASP.NET (Capa de presentación) ASP.NET (Active Server Pages) es un conjunto de tecnologías del framework.NET para construir servicios y aplicaciones web en Windows. En ASP.NET “clásico” tanto aplicaciones como servicios web se despliegan en el servidor de aplicaciones IIS (Internet Information Services). El ensamblado System.Web contiene todas las clases de ASP.NET. Sin embargo, con la llegada de Core, se definió un framework llamado “ASP.NET Core”, extremadamente similar a ASP.NET clásico, pero multiplataforma y de código abierto con la finalidad de compilar aplicaciones tanto en local como destinadas a la nube, y que formó parte de.NET Core. De esta manera se pueden desarrollar aplicaciones de ASP.NET que sean portable entre los diferentes entornos que soporta.NET Core. Para el desarrollo de nuevas aplicaciones se debe usar ASP.NET Core. Modelos/marcos de programación El hecho de elegir uno de los modelos de programación al comenzar un proyecto de ASP.NET no excluye necesariamente a los otros, sino que es posible tener aplicaciones “híbridas” y en muchos casos tendrá todo el sentido desarrollar ciertas partes de la aplicación con un modelo de programación y otras partes con otro modelo distinto. PABLO ARELLANO www.theglobeformacion.com Página 66 B3T6 JAKARTA EE Y.NET TAI - ASP.NET Web Forms fue el primero de los modelos de programación en existir proporcionando un gran nivel de abstracción. Está basado en eventos y controles que favorecen la productividad mediante la programación declarativa, reduciendo la cantidad de código necesaria para implementar una determinada funcionalidad. El código se ejecuta en el servidor y genera dinámicamente la salida de la página web (HTML) al navegador o al dispositivo cliente. - ASP.NET MVC se concibió como alternativa a Web Forms y proporciona un modelo de programación basado en el patrón de diseño MVC. Entre sus principales características destacan su completa integración con pruebas unitarias y la separación más clara entre la lógica de presentación (vista), la lógica de negocio (controlador) y la lógica de datos (datos). Pueden existir más de un controlador en una app. La sintaxis para el nombre de un controlador es nombreController. ASP.NET MVC invoca a un controlador concreto y dentro de él a un método de acción específico en función de la dirección URL entrante, que sigue la siguiente sintaxis: /[Controller]/[ActionName]/[Parameters] ASP.NET MVC incluye una plantilla de aplicación de página única (SPA, Single Page Application) para crear una aplicación web que carga una sola página HTML y después la actualiza dinámicamente, en lugar de cargar páginas nuevas. Tras la carga inicial de la página, la SPA habla con el servidor a través de solicitudes AJAX. - ASP.NET Web Pages es el más reciente de los modelos de programación, perteneciente a.NET Core. Utiliza la sintaxis Razor. Fue creado como respuesta a una creciente demanda de desarrolladores web sin experiencia previa con ASP.NET, cuya iniciación en ASP.NET Web Forms o MVC les suponía una inversión inicial de tiempo demasiado grande. Web Pages proporciona un modelo de programación más simple y rápido de aprender, sin PABLO ARELLANO www.theglobeformacion.com Página 67 B3T6 JAKARTA EE Y.NET TAI renunciar a toda la funcionalidad y flexibilidad de ASP.NET. Cada página de Razor se compone de un par de archivos: o.cshtml: contiene el marcado HTML con código C# que usa la sintaxis Razor. o.cshtml.cs: contiene código C# que controla los eventos de página. Conceptos básicos sobre ASP.NET Web Pages: - El carácter @ indica a ASP.NET que lo que sigue es código Razor, no HTML. ASP.NET tratará todo lo que haya después del carácter @ como código hasta que vuelva a ejecutarse en HTML (ejemplo @{código} ) También @ es utilizado en expresiones. La sintaxis es @expresion. - Las llaves {} encierran un bloque de código Razor si el código tiene más de una línea. Las llaves indican a ASP.NET dónde se inicia y finaliza el código para ese bloque. - Los caracteres // marcan un comentario, es decir, una parte del código que no se ejecutará. - Cada instrucción tiene que terminar con un punto y coma ;. - Puede almacenar valores en variables, que declare con la palabra reservada var. Cuando se crea una variable, se le asigna un nombre, que puede incluir letras, números y subrayados. Los nombres de variable no pueden comenzar con un número y no pueden usar el nombre de una palabra reservada del lenguaje. - Las cadenas de caracteres (como "ASP.NET" y "páginas web") se delimitan entre comillas dobles. - Expresiones Razor implícitas: comienzan por @, seguido de código C#. Ejemplo: @DateTime.Now - Expresiones Razor explícitas: constan del símbolo @ y un paréntesis de apertura y de cierre. El contenido situado entre paréntesis @() se representa en la salida. Ejemplo: Last week this time: @(DateTime.Now - TimeSpan.FromDays(7)) - Las estructuras condicionales permitidas son @if, else if, else y @switch. Notar que else if y else no necesitan @. - Las estructuras repetitivas soportadas son @for, @foreach, @while, y @do while. Ejemplo: @foreach (var person in people){ Name: @person.Name Age: @person.Age } PABLO ARELLANO www.theglobeformacion.com Página 68 B3T6 JAKARTA EE Y.NET TAI Ejemplo: @{ // Working with numbers var a = 4; var b = 5; var theSum = a + b; // Working with characters (strings) var technology = "ASP.NET"; var product ="Web Pages"; // Working with objects var rightNow = DateTime.Now; } Testing Razor Syntax Testing Razor Syntax The value of a is @a. The value of b is @b. The sum of a and b is @theSum. The product of a and b is @(a*b). The technology is @technology, and the product is @product. Together they are @(technology + " " + product) The current date and time is: @rightNow The URL of the current page is @Request.Url Las directivas se representan con la palabra reservada en cuestión antecedido por el símbolo @. Vamos a nombrar las directivas más destacables: - @page: indica que el archivo es una página Razor. - @using: uso de espacios de nombres de la BCL. PABLO ARELLANO www.theglobeformacion.com Página 69 B3T6 JAKARTA EE Y.NET TAI - @namespace: establece el espacio de nombre de la clase de la página Razor. - @layout: especifica un diseño para un componente Razor. - @implements: implementa una interfaz para la clase generada. Respecto al manejo de sesiones, podemos configurar el estado de una sesión. Para ello, se utiliza el paquete Microsoft.AspNetCore.Session. Se puede configurar la creación de cookies o el tiempo de inactividad de una sesión antes de ser cerrada. Finalmente, destacamos el objeto Request. Contiene toda la información que el explorador envía a la aplicación cuando se solicita o envía una página. Este objeto incluye cualquier información que el usuario proporcione, como valores de campos de texto o un archivo para cargar. También incluye todo tipo de información adicional, como cookies, valores en la cadena de consulta URL (si existe), la ruta de acceso del archivo de la página que se está ejecutando, el tipo de navegador que utiliza el usuario, la lista de idiomas que se establecen en el explorador y mucho más. El objeto Request es una colección (lista) de valores. Para obtener un valor individual de la colección, especificamos su nombre: var someValue = Request["name"]; El Request objeto expone realmente varios subconjuntos, entre ellos: - Request.Form: proporciona valores de elementos dentro del elemento POST enviado si la solicitud es una solicitud. - Request.QueryString: le da solo los valores de la cadena de consulta de la dirección URL. Por ejemplo, en http://mysite/myapp/page?searchGenre=action&page=2dirección la dirección URL es la cadena de consulta, ?searchGenre=action&page=2. - Request.Cookies: colección le da acceso a las cookies que el navegador ha enviado. Ejemplo: @{ var db = Database.Open("WebPagesMovies"); var selectCommand = "SELECT * FROM Movies"; var searchTerm = ""; if(!Request.QueryString["searchGenre"].IsEmpty() ) { selectCommand = "SELECT * FROM Movies WHERE Genre = @0"; searchTerm = Request.QueryString["searchGenre"]; } if(!Request.QueryString["searchTitle"].IsEmpty() ) { selectCommand = "SELECT * FROM Movies WHERE Title LIKE @0"; searchTerm = "%" + Request["searchTitle"] + "%"; } var selectedData = db.Query(selectCommand, searchTerm); var grid = new WebGrid(source: selectedData, defaultSort: "Genre", rowsPerPage:3); } PABLO ARELLANO www.theglobeformacion.com Página 70 B3T6 JAKARTA EE Y.NET TAI Movies.grid { margin: 4px; border-collapse: collapse; width: 600px; }.grid th,.grid td { border: 1px solid #C0C0C0; padding: 5px; }.head { background-color: #E8E8E8; font-weight: bold; color: #FFF;.alt { background-color: #E8E8E8; color: #000; } Movies Genre to look for: (Leave blank to list all movies.) Movie title contains the following: @grid.GetHtml( tableStyle: "grid", headerStyle: "head", alternatingRowStyle: "alt", columns: grid.Columns( grid.Column("Title"), grid.Column("Genre"), grid.Column("Year") ) ) WebMatrix es un conjunto de herramientas que proporciona una manera sencilla de crear sitios web para Microsoft Windows. Incluye IIS Express, ASP.NET y SQL Server Compact. PABLO ARELLANO www.theglobeformacion.com Página 71 B3T6 JAKARTA EE Y.NET TAI Capa de servicios En esta capa tenemos los siguientes componentes: - Interfaz de servicios: es como un servicio web, expone los servicios para que otro servicio web lo use. Son elementos tipo fachada que controlan los servicios de asignación y transformación para permitir la comunicación con un servicio. Implementados mediante WCF (Windows Communication Foundation), los servicios web pueden ser SOAP o REST. Las siglas “ABC” son claves para WCF porque coinciden con aspectos básicos de cómo están compuestos los End-Points de un Servicio WCF. Los End- Points son básicamente los extremos en las comunicaciones basadas en WCF y por lo tanto también los puntos de entrada a los servicios. Un End- Point es internamente bastante complejo pues ofrece diferentes posibilidades de comunicación, direccionamiento, etc. Un EndPoint está compuesto por “ABC”, es decir: o “A” para “Address” (Dirección): ¿Dónde está el servicio situado? La dirección se proporciona para los protocolos HTTP, TCP, MSMQ. o “B” para “Binding” (Enlace): ¿Cómo hablo con el servicio? El enlace especifica cómo acceder al servicio, definiendo el protocolo de transporte empleado, la codificación de los mensajes y los protocolos WS-Security utilizados. o “C” para “Contract” (Contrato): ¿Qué me ofrece el servicio? Es la interfaz al exterior del servicio, especificándose los métodos, tipos y operaciones a exponer. Conviene resaltar gRPC, un marco alternativo a WCF basado en HTTP/2 que ofrece sobre WCF un mayor rendimiento y escalabilidad. - Intercambio de mensajes. PABLO ARELLANO www.theglobeformacion.com Página 72 B3T6 JAKARTA EE Y.NET TAI Capa empresarial En esta capa tenemos los siguientes componentes: - Fachada de la aplicación (Application Facade): es un componente opcional que se utiliza cuando la comunicación con los componentes de lógica de presentación requiere de la composición de funcionalidad de varios componentes empresariales. - Flujos de trabajo empresariales (workflows): WF (Windows Workflow Foundation). WF genera el nivel de abstracción para desarrollar aplicaciones interactivas de ejecución prolongada. Las unidades de trabajo se encapsulan como actividades. Las actividades se ejecutan en un entorno que proporcione los medios para el control de flujo, el control de excepciones, la propagación de errores, la persistencia de los datos de estado, la carga y descarga de flujos de trabajo en progreso de la memoria, el seguimiento y el flujo de la transacción. - Componentes de Negocio: implementan las reglas de negocio. - Entidades de Negocio: representan los datos que se pasan entre los componentes. Las entidades empresariales se pueden implementar en.NET mediante ADO.NET Entity Framework. Permite utilizar clases POCO2 (Plain Old ClrObjects), que son clases del modelo de dominio que ignoran la persistencia. Servidores empresariales: Microsoft BizTalk Server permite conectar software diverso. Es una arquitectura de publicación y suscripción que usa adaptadores para recibir y enviar mensajes, implementa procesos empresariales a través de la orquestación e incluye la administración y el seguimiento de estas distintas partes. BizTalk Server incluye también la administración de socios comerciales para mensajería de negocio a negocio, alta disponibilidad para maximizar el tiempo de actividad, una plataforma de desarrollo para crear sus propios componentes, una consola de administración para administrar los artefactos y la supervisión de la actividad empresarial para administrar agregaciones, alertas y perfiles. 2 Es una estructura de datos de.NET que solo contiene propiedades o campos públicos. Un POCO no debe contener ningún otro miembro, como métodos, eventos o delegados. Un POCO no hereda de otra clase ni implementa una interfaz. Es habitual que los POCO se usen con la serialización. PABLO ARELLANO www.theglobeformacion.com Página 73 B3T6 JAKARTA EE Y.NET TAI 3. Persistencia En la capa de acceso a datos o de persistencia acedemos a los datos de 3 formas diferentes: - Agentes de Servicios: permiten a los componentes empresariales acceder a un servicio externo encapsulando el acceso a un servicio. - ADO.NET: mediante un conjunto de clases. - Entity Framework: mediante el mapeo objeto/relacional. ADO.NET (ActiveX Data Object.NET) es un conjunto de clases que exponen servicios de acceso a datos. Proporciona acceso coherente a orígenes de datos como SQL Server y XML, así como a orígenes de datos expuestos mediante OLE DB y ODBC. ADO.NET separa el acceso a datos de la manipulación de datos y crea componentes discretos que se pueden utilizar por separado o conjuntamente. Los dos componentes principales de ADO.NET para tener acceso a los datos y manipularlos son: - Los proveedores de datos.NET Framework. - El DataSet. (1) Proveedores de datos.NET Framework (Data provider) Los proveedores de datos.NET Framework son componentes diseñados explícitamente para: - la manipulación de datos y - el acceso rápido a datos de solo lectura y solo avance. Podemos utilizar los siguientes proveedores de datos.NET Framework según el origen de datos: - SQL Server: usa su propio protocolo para comunicarse con SQL Server. Es ligero y funciona bien porque está optimizado para tener acceso a una SQL Server directamente sin agregar una capa de conectividad de base de datos (ODBC) OLE DB o abierta. PABLO ARELLANO www.theglobeformacion.com Página 74 B3T6 JAKARTA EE Y.NET TAI Para hacer uso en una aplicación C# referenciamos el espacio de nombres: using System.Data.SqlClient; - OLE DB: se comunica con un origen de datos de OLE DB a través del componente de servicio OLE DB, que proporciona agrupación de conexiones y servicios de transacción, y el proveedor de OLE DB para el origen de datos. Para hacer uso en una aplicación C#: using System.Data.OleDbd; - ODBC: utiliza el administrador de controladores ODBC (DM) nativo para habilitar el acceso a los datos. Para hacer uso en una aplicación C# hacemos referencia al espacio de nombres: using System.Data.Odbc; - Oracle: permite el acceso a los datos de los orígenes de datos de Oracle a través del software de conectividad de cliente de Oracle. Para hacer uso en una aplicación C# hacemos referencia al espacio de nombres: using System.Data.OracleClient; - EntityClient: proveedor de datos especial que se usa para obtener acceso a datos basándose en un Entity Data Model (EDM). A diferencia de otros proveedores de datos.NET Framework, no interactúa directamente con ningún origen de datos. En su lugar, usa Entity SQL para comunicarse con el proveedor de datos subyacente. PABLO ARELLANO www.theglobeformacion.com Página 75 B3T6 JAKARTA EE Y.NET TAI Los objetos principales de los proveedores de datos son: - El objeto Connection proporciona conectividad a un origen de datos específico. Se requiere especificar la información de autenticación necesaria en una cadena de conexión. Cada proveedor de datos concreto incluye un objeto DbConnection: o SQL Server: SqlConnection. o OLE DB: OleDbConnection. o ODBC: OdbcConnection. o Oracle: OracleConnection. o EntityClient: EntityConnection. Ejemplo: OdbcConnection connection = new OdbcConnection(connectionString); Para abrir la conexión invocamos el método Open de la conexión. - El objeto Command permite tener acceso a comandos de base de datos para devolver datos, modificar datos, ejecutar procedimientos almacenados y enviar o recuperar información sobre parámetros. Lo utilizamos una vez la conexión esté abierta. - DataReader lee un flujo de datos de solo avance y solo lectura hacia delante de alto rendimiento desde el or

Use Quizgecko on...
Browser
Browser