JBoss AS 7 / WildFly. Francisco Javier Solans Benedí Software Developper

Tamaño: px
Comenzar la demostración a partir de la página:

Download "JBoss AS 7 / WildFly. Francisco Javier Solans Benedí Software Developper francisco.solans@neodoo.es"

Transcripción

1 JBoss AS 7 / WildFly Francisco Javier Solans Benedí Software Developper

2 Tecnología Java 2

3 Tecnología Java Write once, run anywhere. 3

4 Unix y derivados FreeBSD 9.1 NetBSD BSD family OpenBSD BSD (Berkeley Software Distribution) Bill Joy SunOS Time Darwin NextStep 3.3 Mac OS X Xenix OS Apple Microsoft/SCO GNU/Hurd K16 GNU Richard Stallman Minix GNU/Linux Linus Torvalds Andrew S. Tanenbaum Research UNIX Bell Labs: Ken Thompson, Dennis Ritchie, et al Commercial UNIX UnixWare AT&T Univel/SCO Solaris Sun Microsystems System III & V family 11 11/11 11i v3 HP-UX 7.1 TL1 AIX IBM IRIX SGI 4

5 Arquitectura Java EE El tándem Apache HTTP Server, Apache Tomcat y JBoss AS / WildFly sobre entornos GNU/Linux conforman una de las arquitecturas Java EE más potentes del mercado: Licencia GPL (coste cero). Flexibilidad y escalabilidad: Clustering, tolerancia a fallos (servicio 24x7), balanceo de carga y farming. 5

6 Proyectos JBoss The Open Source Platform for Service Oriented Architectures 6

7 Proyectos JBoss Los proyectos JBoss son un conjunto extensible y escalable de productos middleware con coste cero en licencias (Open Source), para crear rápidamente aplicaciones e-business. Versión comunidad JBoss.ORG: JBoss.ORG Versión empresarial JBoss EAP: EAP Gestionada por la comunidad sin ningún tipo de soporte. El fabricante RedHat certifica, testea y paquetiza los proyectos de la comunidad con soporte a través de suscripciones. 7

8 Java Platform Enterprise Edition Introducción a la plataforma Java EE 8

9 Sistemas distribuidos Los sistemas distribuidos dividen una aplicación en distintos módulos independientes. El fallo de un módulo tiene menos impacto en el sistema completo lo que les hace más: Disponibles. Escalables. Mantenibles. Sistema distribuidos: pequeños, ágiles y adaptables. Sistema monolíticos: grandes, inflexibles e inadaptables. 9

10 La plataforma Java Enterprise Edition (Java EE) Java EE facilita el desarrollo de sistemas distribuidos basados en componentes. Las aplicaciones desplegadas con la tecnología Java EE: Están estandarizadas. Siguen unas guías de especificación escritas. Están escritas en Java. Se pueden desplegar en cualquier servidor de aplicaciones. 10

11 Componentes y contenedores Java EE Los componentes se ejecutan dentro de contenedores / servidores Java EE. 11

12 Servicios estándares Java EE 6 Servlet 3.0 JavaServer Pages 2.2 Expression Language 2.2 JSP Standard Tag Library 1.2 JavaServer Faces 2.0 Enterprise JavaBeans 3.1 Lite Common Annotations for the Java Platform 1.1 Java Transactions API 1.1 Java Persistence API

13 Servicios estándares Java EE 7 Servlet 3.1 JavaServer Pages 2.3 Expression Language 3.0 JSP Standard Tag Library 1.2 JavaServer Faces 2.2 Enterprise JavaBeans 3.2 Common Annotations for the Java Platform 1.1 Java Transactions API 1.2 Java Persistence API

14 JBoss AS 7 / WildFly Instalación del servidor de aplicaciones 39

15 Arquitectura del servidor (1) JBoss AS 7 / WildFly 8 está diseñado sobre un nuevo kernel basado en dos proyectos: Módulos JBoss: Gestiona la carga de clases de los recursos en el contenedor. Modular Service Container (MSC): Proporciona una forma de instalar, desinstalar y gestionar servicios utilizados por el contenedor. 40

16 Arquitectura del servidor (2) Diagrama de estado de MSC: 41

17 Instalación del servidor JBoss AS / WildFly es un servidor de aplicaciones de código libre implementado en Java. Pasos en la instalación: Descargar e instalar la distribución J2SE de Oracle o la alternativa OpenJDK (recomendable). Configurar las variables de entorno JAVA_HOME y PATH. Descargar JBoss AS 7 / WildFly 8 de Instalar JBoss AS 7 / WildFly 8 descomprimiendo el fichero. Configurar la variable de entorno JBOSS_HOME (opcional). Arrancar el servidor Desde JBOSS_HOME/bin, ejecutar el script standalone.sh Acceder a la página de acceso desde el navegador: 42

18 Command Line Interface (CLI) También puede conectarse al servidor a través de una interfaz llamada Command Line Interface (CLI). Desde JBOSS_HOME/bin, lanzar jboss-admin.sh jboss-admin.sh --connect command=:shutdown disconnected /] connect Connected to :9999 Detener JBoss AS / WildFly lanzando la señal de interrupción Ctrl+C. Detener JBoss AS / WildFly utilizando la interfaz CLI: disconnected /] connect Detener JBoss AS / WildFly en una máquina remota: [disconnected /] connect Connected to localhost:9999 Detener JBoss AS / WildFly lanzando el apagado desde un script: [ :9999 /] :shutdown Rearranque de JBoss AS / WildFly: [disconnected /] connect Connected to localhost:9999 [localhost:9999 /] :reload Connected to localhost:9999 [localhost:9999 /] :shutdown 44

19 Eclipse y JBoss AS / WildFly Eclipse es compatible con JBoss AS 7 / WildFly. Disponible en Existe un plugin para JBoss AS / WildFly denominado JBoss Tools que aporta más funcionalidades al IDE. Ejercicio: Instalar JBoss Tools Desde el IDE, ir a Help Install New Software. Añadir la ruta y seleccionar las extensiones para instalarlas. 45

20 Sistema de ficheros del servidor (1) El sistema de ficheros del servidor está dividido en dos partes fundamentales, diferenciando entre servidor independiente (standalone) y dominio de servidores (domain). 46

21 Sistema de ficheros del servidor (2) Directorio bin: Lugar donde se arrancas las instancias, o de forma independiente (standalone.sh) o como dominio (domain.sh). Alberga también el script jboss-admin.sh para arrancar la interfaz CLI. Directorio docs: Subdirectorio folder: Contiene un fichero licenses.xml que contiene información de las licencias y sus dependencias. Subdirectorio schema: Contiene los ficheros.xsd utilizados como esquemas en la configuración. 47

22 Sistema de ficheros del servidor (3) Directorio domain: Contiene los ficheros de configuración. El principal fichero de configuración es domain.xml. Otro fichero clave es host.xml, que define la gestión del dominio. Contiene el subdirectorio ext, dónde se da soporte a las extensiones al estilo Java SE / EE. El directorio folder: Aloja los logs del dominio. El directorio server: El fichero logging.properties define el formato de logging. Directorio content: Directorio lib: Directorio configuration: Utilizado como repositorio para almacenar los módulos. Contiene un conjunto de subdirectorios para cada servidor definido en el fichero de configuración. 48

23 Sistema de ficheros del servidor (4) Directorio standalone: Directorio deployments: Directorio configuration: Contiene los ficheros de configuración. El principal fichero de configuración es standalone.xml. Directorio lib: El fichero mgmt-users.properties securiza las interfaces de gestión. Directorio data: Contiene los logs del servidor en modo standalone. El directorio tmp: Contiene el subdirectorio ext, utilizado para definir extensiones del servidor de aplicaciones. El directorio folder: Lugar dónde el servidor almacena los datos en tiempo de ejecución. Ubicación dónde los usuarios colocan sus despliegues (WAR, EAR, JAR, SAR,...). Utilizado por Virtual File System como localización temporal para los artifactos. 49

24 Sistema de ficheros del servidor (5) Directorio welcome-folder: Contiene la página por defecto cargada al acceder al home del servidor ( se le conoce como contexto web del root. Directorio modules: Los módulos del servidor están definido en este directorio. El archivo jboss-modules.jar es la librería necesaria para arrancar el kernel del servidor de aplicaciones, basado en los módulos de JBoss. 50

25 Cargando un módulo (1) Un módulo puede considerarse como una unidad conectable. En relación a las versiones anteriores (JBoss AS 4 / 5 / 6), representan las librerías jar que se insertaban en los directorios server, lib,... Los módulos de JBoss puede cargarse de dos formas: Utilizando un sistema de fichero estático (defecto). Ejecutando directamente un JAR. JAR Desplegado directamente en el servidor como un 'deploy'. 51

26 Cargando un módulo (2) En $JBOSS_HOME/modules/system/layers, se crea una estructura de directorios idéntica al paquete que contiene el jar y se agrega el directorio main. Ejemplo: Las clases del fichero asm jar están en package asm.asm por lo que se crea asm / asm / main. main En el directorio main, se inserta la librería jar así como la definición del módulo (module.xml). Ejemplo: <module xmlns="urn:jboss:module:1.3" name="asm.asm asm.asm"> <properties> <property name="jboss.api" value="private"/> </properties> <resources> <resource-root path="asm jar"/> </resources> <dependencies> </dependencies> </module> 52

27 JBoss AS 7 / WildFly Configurando el servidor 53

28 Configurando el fichero del servidor (1) En JBoss AS 7, se han sustituido el conjunto de ficheros XML por un único fichero de configuración. El fichero de configuración no es un fichero estático por lo que varía durante la ejecución del servidor (desplegando una aplicación, creando un datasource,...). Los ficheros de configuración por defecto son: standalone.xml para servidores independientes. Localizado en el directorio JBOSS_HOME/standalone/configuration. Validado mediante los ficheros.xsd de JBOSS_HOME/docs/schemas. domain.xml para dominios de servidores. 54

29 Configurando el fichero del servidor (2) Estructura de árbol del fichero de configuración del servidor: 55

30 Configurando el fichero del servidor (3) Extensions: Listado de módulos básicos compartidos por todos sus servicios. <extensions> <extension module="org.jboss.as.clustering.infinispan"/> <extension module="org.jboss.as.messaging"/> </extensions> Paths: Definición de rutas empleadas por el servidor. <paths> <path name="log.dir" path="mylogdir" relative-to="jboss.server.log.dir"/> </paths> <periodic-rotating-file-handler name="file" autoflush="true"> <file relative-to="log.dir" path="myserver.log"/> </periodic-rotating-file-handler> 56

31 Configurando el fichero del servidor (4) Management-interfaces: Configuración de las herramientas de gestión en entorno web y desde línea de comando (CLI). <socket-binding-group name="standard-sockets" default-interface="public">... <socket-binding name="management-native" interface="management" port="9999"/> <socket-binding name="management-http" interface="management" port="9990"/>... </socket-binding-group> Profiles: Perfiles que engloban un conjunto de funcionalidades del servidor. 57

32 Configurando el fichero del servidor (5) Interfaces: Contiene las direcciones de red IP/interfaces o el hostname del servidor. Ejemplo 1: Vincular la parte pública a una IP. <interface name="public"> <interfaces> <inet-address value=" "/> <interface name="management"> </interface> <inet-address value="$ {jboss.bind.address.management: }"/> </interface> Ejemplo 2: Vincular la parte pública a cualquier IP. <interface name="public"> <interface name="public"> <any-address /> <inet-address value="$ {jboss.bind.address: }"/> </interface> </interface> </interfaces> Ejemplo 3: Vincular la parte pública a la tarjeta eth0. <interface name="public"> <socket-binding-group name="standard-sockets" default-interface="public">... <nic name="eth0" /> </interface> </socket-binding-group> 58

33 Configurando el fichero del servidor (6) Socket-binding-group: Configuración de los puertos de red. <socket-binding name="messaging-throughput" port="5455"/> </socket-binding-group> A través del fichero XML: <socket-binding-group name="standard-sockets" defaultinterface="public"> <socket-binding name="jndi" port="1099"/> A través de CLI: /] /socket-binding-group= <socket-binding name="jmx-connector-registry" port="1090"/> <socket-binding name="jmx-connector-server" port="1091"/> standard-sockets/socket-binding=http:writeattribute(name="port", <socket-binding name="http" port="8080"/> value="8090") <socket-binding name="https" port="8447"/> { <socket-binding name="osgi-http" port="8090"/> "outcome" => "success", <socket-binding name="remoting" port="4447"/> "response-headers" => { <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <socket-binding name="txn-socket-process-id" port="4714"/> <socket-binding name="messaging" port="5445"/> "operation-requires-reload" => true, "process-state" => "reload-required" } } 59

34 Configurando el fichero del servidor (7) system-properties: Conjunto de propiedades de sistema añadido al servidor como parte del proceso de arranque. <system-properties> <property name="myproperty" value="dummyvalue"/> </system-properties> Deployments: Despliegue de las aplicaciones. 60

35 Arquitectura del servidor Diagrama de los principales subsistemas de JBoss AS 7 / WildFly: 61

36 Configurando de pool de hilos (1) Una factoría de hilos es un objeto que crea hilos bajo demanda. La configuración del pool de hilos puede incluir los siguientes elementos: Factoría de hilos. Bounded Threads. Unbounded Threads. Queueless Threads. Scheduled Threads. 62

37 Configurando de pool de hilos (2) La factoría de hilos es un objeto que crea nuevos hilos bajo demanda. Implementa la clase java.util.concurrent.threadfactory. java.util.concurrent.threadfactory No está incluida por defecto en la configuración del servidor. Ejemplo: <thread-factory name="mythreadfactory" thread-name-pattern="my Thread %t" group-name="dummy" /> 63

38 Configurando de pool de hilos (3) El pool de hilos de tipo bounded es el pool más común utilizado por el servidor de aplicaciones. Ejemplo: <bounded-queue-thread-pool name="jca-shortrunning" blocking="true"> <core-threads count="10" per-cpu="20"/> Previene el agotamiento de los recursos definiendo una restricción al tamaño del pool. <queue-length count="10" per-cpu="20"/> <max-threads count="10" per-cpu="20"/> <keepalive-time time="10" unit="seconds"/> </bounded-queue-thread-pool> 64

39 Configurando de pool de hilos (4) El pool de hilos de tipo unbounded siempre acepta tareas nuevas aunque corre el riesgo de agotar los recursos del sistema. Ejemplo: <unbounded-queue-thread-pool name="unbounded-threads"> <max-threads count="10" per-cpu="20"/> <keepalive-time time="10" unit="seconds"/> </unbounded-queue-thread-pool> 65

40 Configurando de pool de hilos (5) El pool de hilos de tipo queueless es similar al pool de hilos de tipo bounded pero sin incluir una cola dónde almacenar las tareas. Ejemplo: <queueless-thread-pool name="queueless-threadpool" blocking="true"> <max-threads count="10" per-cpu="20"/> <keepalive-time time="10" unit="seconds"/> </queueless-thread-pool> 66

41 Configurando de pool de hilos (6) El pool de hilos de tipo scheduled se utiliza para tareas en el lado del servidor que requieren ejecuciones periódicas o en intervalos de tiempo. Ejemplo de Scheduled Thread Pool: <scheduled-thread-pool name="remoting"> <max-threads count="10" per-cpu="20"/> <keepalive-time time="10" unit="seconds"/> </scheduled-thread-pool> 67

42 Configurando el módulo de logging (1) Las librerías de logging más populares en Java son: Log4J: Proyecto de la fundación Apache. J2SE logging libraries (JUL): Forman parte de la plataforma J2SE. La framework de logs de JBoss está basada en JUL, que se apoya en 3 conceptos principales: loggers, handlers y formatters. 68

43 Configurando el módulo de logging (2) Por defecto, el módulo de logging de JBoss AS / WildFly (org.jboss.logmanager) org.jboss.logmanager utiliza JUL (org.jboss.logging) aunque también puede utilizarse la implementación de Log4J (jboss-logmanager-log4j). 69

44 Configurando el módulo de logging (3) El módulo de logs de JBoss contiene un conjunto de handlers. Un objeto handler obtiene los mensajes de log de un logger y los exporta (consola, fichero,...). Por defecto, los siguientes handlers están definidos: console-handler: Escribe mensajes de logs en la consola. periodic-rotating-file-handler: Escribe en un fichero, rotando el log después de un periodo de tiempo. size-rotating-file-handler: Escribe en un fichero, rotando el log tras alcanzar un tamaño determinado. asynchronous handler: Conecta con otros handlers para producir eventos de logs asíncronos. custom handler: Handler personalizado. 70

45 Configurando el módulo de logging (4) Ejemplo de console-handler: <console-handler name="console" autoflush="true"> Ejemplo de periodic-rotating-filehandler: <periodic-rotating-file-handler name="file" autoflush="true"> <level name="info"/> <level name="info"/> <formatter> <pattern-formatter pattern="%d{hh:mm:ss,sss} %-5p [%c] (%t) %s%e%n"/> </formatter> <formatter> <pattern-formatter pattern="%d{hh:mm:ss,sss} %-5p [%c] (%t) %s%e%n"/> </formatter> </console-handler> <file relative-to="jboss.server.log.dir" path="server.log"/> <suffix value=".yyyy-mm-dd"/> </periodic-rotating-file-handler> 71

46 Configurando el módulo de logging (5) Ejemplo de size-rotating-file-handler: <size-rotating-file-handler name="filesize" autoflush="true" > Ejemplo de asynchronous handler: <async-handler name="async" > <level name="info" /> <rotate-size value="500k" /> <queue-length>1024</queue-length> <level name="info"/> <overflow-action>block</overflow-action> <formatter> <sub-handlers> <pattern-formatter pattern="%d{hh:mm:ss,sss} %-5p [%c] (%t) %s%e%n"/> <handler-ref name="file" /> </sub-handlers> </formatter> <file relative-to="jboss.server.log.dir" path="server.log"/> </async-handler> </size-rotating-file-handler> 72

47 Configurando el módulo de logging Un objeto logger se utiliza para loggear mensajes de un sistema específico o componentes de aplicación. En el fichero de configuración del servidor, el root-logger define dos handlers que está conectado al handler CONSOLE y FILE: <root-logger> <level name="info"/> Ejemplo: <handlers> <logger category="com.sample"> <handler name="console"/> <level name="warn"/> <handler name="file"/> </logger> </handlers> </root-logger> 76

48 JBoss AS 7 / WildFly Configurando servicios 78

49 Configurar la base de datos 79

50 Introducción (1) La conectividad a la base de datos se configura añadiendo un datasource al servidor de aplicaciones. Las aplicaciones obtienen una conexión a la base de datos a través del datasource, configurado previamente en el servidor de aplicaciones. Ejemplo: Connection result = null; try { Context initialcontext = new InitialContext(); DataSource datasource = (DataSource) initialcontext.lookup("java:/mysqlds"); result = datasource.getconnection(); } catch ( Exception ex ) { log("cannot get connection: " + ex); } 80

51 Introducción (2) Por defecto, JBoss AS 7 / WildFly utiliza la base de datos H2 (www.h2database.com ). En un entorno de producción, una aplicación necesita una base de datos de mayor envergadura como MySQL, PosgreSQL u Oracle. Para configurar una base de datos, se requieren dos pasos: Instalar el driver JDBC. Añadir el datasource a la configuración del servidor. 81

52 Instalar el driver JDBC: Método 1 Dentro de la arquitectura modular del servidor, servidor podemos instalar el driver como un módulo. <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-x.x.xbin.jar"/> Ejemplo: Instalar el driver JDBC de MySQL. Descargar el driver JDBC de MySQL ( Descomprimir el fichero. Copiar la librería mysql-connector-javax.x.x.jar en el directorio JBOSS_HOME/modules/com/mysql/main. </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module> Crear el fichero module.xml y ubicarlo en el directorio anterior. 82

53 Configurar el datasource (1) Ejemplo de configuración de localdatasource en MySQL: <idle-timeout-minutes>0</idle-timeout-minutes> <query-timeout>600</query-timeout> </timeout> <datasources> </datasource> <datasource jndi-name="java:/mysqlds" poolname="mysqlds_pool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> <drivers> <driver name="mysql" module="com.mysql"/> <connection-url> </drivers> jdbc:mysql://localhost:3306/mydb </connection-url> </datasources> <driver>mysql</driver> <pool /> <security> <user-name>jboss</user-name> <password>jboss</password> </security> <statement/> <timeout> 83

54 Configurar el datasource (2) Una vez instalado el driver JDBC, es necesario configurar el datasource en el servidor. En JBoss AS 7 / WildFly, pueden definirse dos tipos de datasources: local datasource. xa-datasources. La definición del datasource puede realizarse accediendo al fichero de configuración del servidor o a través de la interfaz web de administración. 84

55 Configurar el datasource (3) Ejemplo de configuración de localdatasource en MySQL: <idle-timeout-minutes>0</idle-timeout-minutes> <query-timeout>600</query-timeout> </timeout> <datasources> </datasource> <datasource jndi-name="java:/mysqlds" poolname="mysqlds_pool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> <drivers> <driver name="mysql" module="com.mysql"/> <connection-url> </drivers> jdbc:mysql://localhost:3306/mydb </connection-url> </datasources> <driver>mysql</driver> <pool /> <security> <user-name>jboss</user-name> <password>jboss</password> </security> <statement/> <timeout> 85

56 Configurar el datasource (4) El datasource puede contener una configuración del pool de conexiones. <pool> En cada conexión al pool, el servidor puede crear una caché de sentencias: <statement> <min-pool-size>5</min-pool-size> <max-pool-size>10</max-pool-size> <prefill>true</prefill> <track-statements>true</track-statements> <prepared-statement-cache-size>10</preparedstatement-cache-size> <share-prepared-statements/> <use-strict-min>true</use-strict-min> </pool> </statement> 86

57 Configurar el datasource (5) Ejemplo de xa-datasource con MySQL: <datasources> <xa-datasource jndi-name="java:/xamysqlds" pool-name="mysqlds_pool" enabled="true" use-java-context="true" use-ccm="true"> <xa-datasource-property name="url">jdbc:mysql://localhost:3306/mydb</xa-datasource-property> <xa-datasource-property name="user">jboss</xa-datasource-property> <xa-datasource-property name="password">jboss</xa-datasource-property> <driver>mysql-xa</driver> </xa-datasource> <drivers> <driver name="mysql-xa" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.mysqlxadatasource</xa-datasource-class> </driver> </drivers> </datasources> 87

58 Instalar el driver JDBC: Método 2 Existe un mecanismo más sencillo para el instalación del driver JDBC, tratándolo como una unidad de despliegue. Ejemplo: Instalar el driver JDBC de MySQL. Definir el datasource en el fichero de configuración del servidor: En el caso de un servidor standalone, standalone copiar el fichero mysql-connector-javax.x.x-bin.jar en el directorio JBOSS_HOME/standalone/deployments. <datasource jndi-name="java:/mysqlds" poolname="mysqlds_pool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> En el caso de un servidor en modo domain, domain desplegar el fichero mysqlconnector-java-x.x.x-bin.jar desde la consola web o CLI. <driver>mysql-connector-java bin.jar</driver> <connectionurl>jdbc:mysql://localhost:3306/mydb</connectionurl> <pool /> <security> <user-name>jboss</user-name> <password>jboss</password> </security> </datasource> 88

59 Programando con Java EE 6 Java EE 6 soporta la configuración de un datasource a través de programación. = "java:/oracleds", classname = " oracle.jdbc.oracledriver", portnumber = 1521, servername = " ", databasename = "OracleSID", user = "scott", password = "tiger", properties = public class DataSourceEJB = "java:/oracleds") private DataSource ds; } 89

60 Configurando Enterprise Java Beans 90

61 Configurando el contenedor EJB (1) Un contenedor EJB proporciona el entorno para alojar y gestionar los componentes EJB. JBoss AS 7 es capaz de soportar el siguiente conjunto de componentes EJB: Stateless session beans (SLSB): Objetos cuyas instancias no tienen estado conversacional con el cliente. Stateful session beans (SFSB): Objetos cuyas instancias mantienen un estado conversacional con el cliente. Message-driven beans (MDB): Objetos que permiten el procesamiento asíncrono de mensajes enviado por cualquier productor JMS. 91

62 Configurando el contenedor EJB (2) Además de los componentes EJB estándares, el servidor soporta las especificaciones EJB 3.1 introducidos en Java EE 6: Singleton EJB: Similar al stateless session bean pero sólo existe una instancia para atender las llamadas de los clientes. No-interface EJB: Objeto en el que todos sus métodos son públicos y automáticamente expuestos al cliente. Asynchronous EJB: Procesan las llamadas del cliente de forma asíncrona de forma más evolucionada que los MDB. 92

63 Configurando Stateless session beans (1) Ciclo de vida de un SLSB: 93

64 Configurando Stateless session beans (2) Ejemplo de configuración del pool a través del fichero de configuración: <subsystem xmlns="urn:jboss:domain:ejb3:1.2"> Ejemplos de configuración del pool a través de CLI: <session-bean> /subsystem=ejb3/strict-max-bean-instancepool=large-pool:add(max-pool-size=100) <stateless><bean-instance-pool-ref pool-name="slsbstrict-max-pool"/></stateless>... Añadir un pool: </session-bean> Definir el pool por defecto: /subsystem=ejb3:write-attribute(name=default-slsbinstance-pool, value=large-pool)... <pools> <bean-instance-pools> <strict-max-pool name="slsb-strict-max-pool" max pool-size="25" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="minutes"/> Cambiar el tamaño del pool: /subsystem=ejb3/strict-max-bean-instancepool=large-pool:write-attribute(name="max-poolsize",value=50) </bean-instance-pools> </pools>... </subsystem> 94

65 Configurando Stateful session beans (1) Ciclo de vida de un SFSB: 95

66 Configurando Stateful session beans (2) El servidor utiliza una caché para almacenar las instancias EJB activas en la memoria. <passivation-stores> <file-passivation-store name="file" maxsize="500" /> <cluster-passivation-store name="infinispan" backing-cache="sfsb" max-size="500"/> Ejemplo de configuración: </passivation-stores> <subsystem xmlns="urn:jboss:domain:ejb3:1.2">... <session-bean> <stateful default-access-timeout="5000" cacheref="passivating" clustered-cache-ref="clustered"/> </subsystem> </session-bean>... <caches> <cache name="simple"/> <cache name="passivating" passivation-storeref="file"/> <cache name="clustered" passivation-storeref="infinispan"/> </caches> 96

67 Configurando Message Driven Beans (1) Ciclo de vida de un MDB: 97

68 Configurando Message Driven Beans (2) Ejemplo de configuración de un pool MDB: <subsystem xmlns="urn:jboss:domain:ejb3:1.2"> <mdb> <resource-adapter-ref resource-adapter-name="hornetq-ra"/> <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> </mdb> <pools> <bean-instance-pools> <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instanceacquisition-timeout-unit="minutes"/> </bean-instance-pools> </pools> </subsystem> 98

69 Configurando el servicio Timer El servicio EJB Timer proporciona un mecanismo para invocar métodos en un momento determinado o en intervalos de tiempo (crontab). En la clase Java, basta con definir el método con la Ejemplo de configuración del fichero: <subsystem xmlns="urn:jboss:domain:ejb3:1.2"> <timer-service thread-pool-name="default"> <data-store path="timer-service-data" relativeto="jboss.server.data.dir"/> </timer-service> <thread-pools> <thread-pool name="default" max-threads="10" keepalive-time="100"/> Ejemplo: public void timeouthandler(timer timer){ </subsystem> System.out.println("* Received Timer event: " + timer.getinfo()); timer.cancel(); } 99

70 Configurando el sistema de mensajería 100

71 Configurar el sistema de mensajería (1) Los sistemas de mensajería soportan dos tipos de mensajes asíncronos: Queue messaging. Publish-Subscribe messaging. Un mensaje enviado es procesado sólo por un consumidor. Un mensaje enviado es procesado por múltiples consumidores. Nota: a partir de JBoss AS 7.1.0, el fichero de configuración del módulo de mensajería se encuentra en standalone-full.xml. 101

72 Configurar el sistema de mensajería (2) Por defecto, el proveedor JMS es HornetQ (www.jboss.org/hornetq). La integración se basa en un adaptador JCA que gestiona la comunicación entre el servidor de aplicaciones y el servidor HornetQ. Cumpliendo las especificaciones Java EE, el conector garantiza pool de conexiones, transaccionalidad y seguridad. 102

73 Configurar el sistema de mensajería (3) El transporte de un mensaje JMS es una parte fundamental en la optimización del sistema de mensajería. Uno de los conceptos más importantes en la capa de transporte de HornetQ es: acceptor: Establece que tipo de conexión es aceptado por el servidor HornetQ. connector: Define cómo conectarse al servidor HornetQ. 103

74 Configurar el sistema de mensajería (4) HornetQ define dos tipos de acceptor / connector: invm: Utilizado cuando el cliente HornetQ y el servidor funcionan en la misma máquina virtual. netty:utilizado cuando el cliente HornetQ y el servidor funcionan en diferentes máquinas virtuales. 104

75 Configurar el sistema de mensajería (5) Por defecto, JBoss AS 7 / WildFLy viene con un par de acceptor / connector preconfigurados: <netty-connector name="netty-throughput" socketbinding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <acceptors> <in-vm-acceptor name="in-vm" server-id="0"/> </connectors> <netty-acceptor name="netty" socketbinding="messaging"/> <netty-acceptor name="netty-throughput" socketbinding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> </acceptors> <connectors> <in-vm-connector name="in-vm" server-id="0"/> <netty-connector name="netty" socketbinding="messaging"/> 105

76 Configurar el sistema de mensajería (6) La definición de la configuración de conexiones se incluye por defecto en el fichero de configuración: <connector-ref connector-name="netty" backupconnector-name="in-vm"/> </connectors> <entries> <connection-factory name="invmconnectionfactory"> <entry name="remoteconnectionfactory"/> <connectors> </entries> <connector-ref connector-name="in-vm" backupconnector-name="netty"/> </connection-factory> </connectors> <entries> <entry name="java:/connectionfactory"/> Existen destinos JMS ya predefinidos: <jms-queue name="testqueue"> <entry name="queue/test"/> </entries> </connection-factory> <connection-factory name="remoteconnectionfactory"> <connectors> </jms-queue> <jms-topic name="testtopic"> <entry name="topic/test"/> </jms-topic> 106

77 Configurar el sistema de mensajería (7) Ejemplo de invocación a cola JMS desde = "MessageMDBSample", activationconfig = = "destinationtype", propertyvalue = = "destination", propertyvalue = " = "acknowledgemode", propertyvalue = "Auto-acknowledge") }) public class SampleMDBean implements MessageListener private MessageDrivenContext context; } 107

78 Configurar el sistema de mensajería (8) HornetQ dispone de su propio motor de persistencia: <journal-file-size>102400</journal-file-size> <journal-min-files>2</journal-min-files> <journal-type>nio</journal-type> <persistence-enabled>false</persistence-enabled> 108

79 Configurando el servicio de transacción 109

80 Configurar el servicio de transacción (1) Ciclo de vida del módulo de transacciones: 110

81 Configurar el servicio de transacción (2) Una transacción representa un grupo de operaciones que se han de ejecutar de forma atómica. El contenedor EJB es un gestor transaccional que soporta JTA (Java Transaction API). Ejemplo de configuración: <subsystem xmlns="urn:jboss:domain:transactions:1.0"> <core-environment> <process-id> <uuid/> </process-id> </core-environment> <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> <coordinator-environment default-timeout="300" enable-statistics="true" /> <object-store/> </subsystem> 111

82 JBoss AS 7 / WildFly Configuración del subsistema web 112

83 Configuración del contenedor web El contenedor web de JBoss AS está basado en un fork de Apache Tomcat 7.0 que implementa las tecnologías Servlet 3.0, JavaServer Pages 2.2 y Java Server Faces 2.1. </virtual-server> </subsystem>... <socket-binding-group name="standard-sockets" default-interface="public"> <socket-binding name="http" port="8080"/> La configuración del contenedor web también se encuentra en el fichero standalone.xml (o domain.xml): <socket-binding name="https" port="8443"/>... </socket-binding-group> <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host"> <connector name="http" protocol="http/1.1" scheme="http" socket-binding="http"/> <virtual-server name="default-host" enablewelcome-root="true"> <alias name="localhost"/> <alias name="example.com"/> 113

84 Configuración del contenedor web El contenedor web de WildFly se ha sustituido por el proyecto Undertow. <servlet-container name="default" default-buffercache="default" stack-trace-on-error="local-only" > <jsp-config/> <persistent-sessions/> </servlet-container> Ejemplo de configuración básica : <subsystem xmlns="urn:jboss:domain:undertow:1.0"> <buffer-caches> <buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10"/> <handlers> <file name="welcome-content" path="$ {jboss.home.dir}/welcome-content" directorylisting="true"/> </handlers> </subsystem> </buffer-caches> <server name="default-server"> <http-listener name="default" socket-binding="http" /> <host name="default-host" alias="localhost"> <location name="/" handler="welcomecontent" /> </host> </server> 117

85 JBoss AS 7 / WildFly Configurar el servidor en modo domain 118

86 Introducción Un dominio es una unidad de administración en el que todos los servidores son gestionados por un controlador de dominio. 119

87 Configuración del controlador de dominio Modificamos el fichero domain/configuration/host.xml : La etiqueta <local/> indica que servidor es el controlador de dominio. <domain-controller> <local/> </domain-controller> Declaramos la IP del controlador de dominio : <interfaces> <interface name="management"> <inet-address value=" "/> </interface> </interfaces> Ejecutamos la sentencia add-user.sh en el controlador de dominio para crear un usuario: Is this new user going to be used for one AS process to connect to another AS process e.g. slave domain controller? yes/no? y To represent the user add the following to the server-identities definition <secret value="ce3ebeke=" /> 120

88 Configuración del controlador de host Para cada esclavo, modificamos el fichero domain/configuration/host.xml : Indicamos un nombre de host único : <host xmlns="urn:jboss:domain:1.0" name="slave">... </host> Incorporamos el valor secreto para el usuario generado en el maestro : <security-realm name="managementrealm"> <server-identities> <secret value="c2xhdmvfdxnlcl9wyxnzd29yza=="/> </server-identities> Indicamos la dirección / puerto del maestro : Nota: El username es opcional y si no se indica, se escoge el nombre del host. <domain-controller> <remote host=" " port="9999" username="slave" security-realm="managementrealm"/> </domain-controller> 121

89 Grupos de servidores En el maestro, accedemos al fichero domain/configuration/domain.xml : Si es necesario, creamos un nuevo grupo de servidores adicional indicando un profile y grupo de mapeos de sockets ya definidos. <server-groups> <server-group name="main-server-group" profile="full"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="full-sockets"/> </server-group> <server-group name="other-server-group" profile="full-ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="full-ha-sockets"/> </server-group> </server-groups> 122

90 Servidores Para cada controlador de hosts, puede definir servidores en cada grupo de servidores a través del fichero domain/configuration/host.xml : <servers> <server name="server-one" group="main-server-group"/> <server name="server-two" group="other-server-group"> <!-- server-two avoids port conflicts by incrementing the ports in the default socket-group declared in the server-group --> <socket-bindings port-offset="150"/> </server> </servers> Aunque puede parametrizarse la JVM a nivel de grupo de servidor, también puede realizar a nivel de servidor : <jvm name="default"> <heap size="512m" max-size="1g"/> </jvm> 123

91 Ejercicio Crear la siguiente arquitectura de servidores en modo dominio : Analizar los logs del controlador de dominio y host. 124

92 JBoss AS 7 / WildFly Despliegue de aplicaciones 125

93 Tipos de aplicaciones Java EE (1) Las aplicaciones empresariales Java pueden empaquetarse en los siguientes tipos de ficheros: JAR: Paquete básico de recursos comunes y de aplicación. Incluye una colección de Java Server Pages (JSP), servlets, clases de Java, XHTML, HTML y otros tipos de ficheros. Desde Java EE 6, una aplicación web puede albergar EJB's en el archivo WAR; esto significa que pueden estar alojados en WEB-INF/classes o WEBINF/lib. EAR: Aplicaciones empresariales. Generalmente, se utiliza para encapsular clases de Java y metadatos asociados. WAR: Aplicaciones web. Compresión en formato zip. Es un fichero que contiene un conjunto de módulos. 126

94 Tipos de aplicaciones Java EE (2) De forma complementaria, el servidor es capaz de procesar los siguientes archivos que proporcionan funcionalidades adicionales al servidor: RAR: Utilizado para definir un componente de adaptador de recurso (basado en el proyecto IronJacamar). SAR: Permite el despliegue de archivos de servicios conteniendo servicios Mbean. 127

95 Despliegue sobre servidores en modo standalone 128

96 Desplegando con la consola web La consola web es accesible desde la dirección Desde JBoss AS / WildFly, es necesario crear un usuario para acceder a la consola web. Ejecutar el script JBOSS_HOME/bin/add-user.sh. Pasos en el despliegue de una aplicación: Ir a Runtime -> Deployments -> Manage Deployments. Pulsar el botón Add Content y continuar la secuencia de páginas en la que se solicita el fichero a subir y el nombre asociado. Clickear el botón Enable para finalizar el despliegue. 129

97 Desplegando con Eclipse Eclipse es uno de los IDE's más difundidos para el desarrollo de aplicaciones Java. El plugin JBoss Tools (http://www.jboss.org/tools) extiende las funcionalidades de integración con los proyectos JBoss. Pasos en el despliegue: Ir a la sección Server, pulsar el click derecho en el proyecto a desplegar y elegir Full Publish. El menú JBoss / WildFly Runtime contiene las opciones Overview y Deployment y permite elegir la ubicación y el empaquetamiento de los despliegues. 130

98 Despliegue manual (1) Las aplicaciones colocadas en el directorio deployments son desplegadas por el escaneador de despliegues utilizando marcadores de ficheros con la finalidad de ejecutar operaciones atómicas en el sistema de ficheros del SO. Los marcadores de ficheros consisten en archivos vacíos, - colocados por el servidor o el usuario -, para indicar el estado de una operación. El marcador de fichero más importante el.dodeploy, que inicia un despliegue de la aplicación. Ejemplo: Salida por consola del despliegue de una aplicación. 05:48:13,438 INFO [org.jboss.as.deployment] (DeploymentScanner-threads - 1) Found struts-blank.war in deployment directory. To trigger deployment create a file called struts-blank.war.dodeploy 131

99 Despliegue manual (2) Los usuarios de Unix pueden activar el despliegue utilizando el comando touch. Ejemplo: touch struts-blank.war.dodeploy En caso de que el despliegue sea correcto, el proceso es confirmado en la consola de texto: 05:49:23,211 INFO [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployed "struts-blank.war"i Si un despliegue falla, se genera la marca de fichero.failed conteniendo información del error en el proceso. Si tenemos el modo auto-deploy activado, remover el fichero.failed activaría el redespliegue de la aplicación. 132

100 Despliegue manual (3) Si removemos el fichero.deployed, la aplicación es eliminada y una marca de fichero.undeployed es generado; en caso de eliminar este archivo, la aplicación se desplegará de nuevo. El usuario puede crear una marca de fichero.skipdeploy que deshabilita el despliegue automático de una aplicación mientras este archivo exista. Ejemplo: touch $JBOSS_HOME/standalone/deployments/struts-blank.war.skipdeploy cp -r struts-blank.war/ $JBOSS_HOME /standalone/deployments rm $JBOSS_HOME /standalone/deployments/struts-blank.war.skipdeploy El servidor proporciona marcadores de fichero adicionales como.isdeploying,.isundeploying o.pending colocados por el escaneador de despliegues para indicar el estado del despliegue / undespliegue de un recurso. 133

101 Despliegue sobre servidores en modo domain 134

102 Despliegue usando CLI (1) Iniciar la secuencia arrancando CLI y conectándose al controlador de dominio: [disconnected /] connect Connected to domain controller at localhost:9999 A partir de este momento, debe indicarse a que grupo de servidores asociar el despliegue: Desplegar en todos los grupos de servidores: Ejemplo de despliegue: /] deploy../smart-middleware.ear all-server-groups Successfully deployed smart-middleware.ear Ejemplo de undespliegue: /] undeploy smart-middleware.ear --all-relevant-server-groups Successfully undeployed smart-middleware.ear 135

103 Despliegue usando CLI (2) Desplegar en un grupo de servidor: Ejemplo: Despliegue en un grupo de servidores. /] deploy smart-middleware.ear --server-groups=main-server-group Successfully deployed smart-middleware.ear Ejemplo: Despliegues en varios grupos de servidores. /] deploy smart-middleware.ear --server-groups=main-server-group,other-server-group Successfully deployed smart-middleware.ear Ejemplo: Undesplegar de un grupo de servidor. /] undeploy struts-blank.war --server-groups=main-server-group Successfully undeployed struts-blank.war 136

104 Despliegue con la consola web El despliegue de aplicaciones a través de la consola de administración se realiza accediendo a la dirección Seleccionar Runtime -> Deployment -> Manage Deployments. Subir la aplicación utilizando el botón Add Content. Para instalar / desinstalar de los grupos, seleccionar los grupos y clickear Add to Gorup. Pulsar el botón Enable para finalizar el despliegue de la aplicación. 137

105 Carga de clases en el servidor de aplicaciones 138

106 Nombre de módulo (1) La carga de clases está basada en los módulos de JBoss AS 7 / WildFly. Cualquier aplicación Java EE desplegada es considerada también como un módulo. Una aplicación empaquetada en un archivo de nivel superior (JAR, WAR, EAR,...) recibe el siguiente nombre de módulo : deployment.[archive name] Ejemplo: La aplicación smart-web.war se despliega con el nombre de módulo deployment.smart-web.war. deployment.smart-web.war 139

107 Nombre de módulo (2) Una aplicación con diferentes módulos recibirá un nombre de módulo que concatena cada archivo unitario: deployment.[ear_archive_name]. [sub_deployment_archive_name] Ejemplo: La aplicación anterior smart-web.war embebida dentro de smart-middleware.ear se despliega con el nombre de módulo deployment.smart-middleware.ear.smart-web.war. deployment.smart-middleware.ear.smart-web.war 140

108 Tipo de dependencias Por defecto, cada módulo de aplicación desplegado está aislado del resto de módulos. Sin embargo en cuanto se añade una dependencia a un módulo, ésta es utilizada por el servidor de aplicaciones: Las librerías del módulo core (clases Enterprise) se consideran como dependencias implícitas por lo que son añadidas automáticamente por el servidor cuando el desplegador detecta su uso. El resto de librerías de módulos requieren ser declaradas explícitamente (manualmente por el usuario) en el fichero MANIFEST o jboss-deploymentstructure.xml. 141

109 Dependencias implícitas Si una aplicación utiliza cualquiera de los módulos core mencionado, no es necesario indicar su dependencia ya que el servidor lincará el módulo automáticamente. 142

110 Dependencias explícitas (1) Los módulos no considerados como dependencias implícitas deben ser declaradas por el usuario. Ejemplo: Uso de la librería Log4J en una aplicación web. Crear el fichero META-INF/MANIFEST con el siguiente contenido: Dependencies: org.apache.log4j Ejemplo: Uso de la librería Log4J en una aplicación web. Empaquetar los ficheros JAR de Log4J. En determinadas ocasiones, las librerías pueden estar encapsuladas en el servidor pero no considerabas dependencias implícitas (por ej: Log4J). Si se desea utilizar, hay que declarar en el fichero METAINF/MANIFEST.MF la directiva Dependencies: [module]. En caso de requerir diferentes dependencias, pueden añadirse las múltiples dependencias separadas por comas. Ejemplo: Agregar varias dependencias. Dependencies: org.apache.log4j,org.apache.velocity 143

111 Dependencias explícitas (2) Podemos exportar las dependencias utilizadas en un módulo de aplicación a otras aplicaciones utilizando la directiva export. Ejemplo: Exportar las dependencias de smart-web.war Dependencies: org.apache.log4j export Las aplicaciones marcadas como dependientes del módulo deployment.smart-web.war también tendrán acceso a estas dependencias. Dependencies: deployment.smart-web.war El parámetro export puede utilizarse para exportar una dependencia a todos los subdespliegues dentro de un ear. 144

112 Dependencias explícitas (3) Si se define una sección global-modules en standalone.xml / domain.xml, haremos un módulo accesible a otros (no recomendable). Es similar a meter en los servidores antiguos una librería en $JBOSS_HOME/common/lib. Ejemplo: <subsystem xmlns="urn:jboss:domain:ee:1.0"> <global-modules> <module name="org.apache.log4j" /> </global-modules> </subsystem> 145

113 Estrategias avanzadas de despliegue (1) De la misma forma que se han activado las dependencias Log4J utilizando en el archivo MANIFEST, puede obtenerse el mismo resultado con jboss-deployment-structure.xml. Ejemplo: Añadir una dependencia de módulo Log4J a la aplicación EAR. <jboss-deployment-structure> <sub-deployment name="smart-web.war"> <dependencies> <module name="org.apache.log4j" /> </dependencies> </sub-deployment> </jboss-deployment-structure> 146

114 Estrategias avanzadas de despliegue (2) El fichero jboss-deploymentstructure.xml no es exclusivo de los EARs. Una aplicación web puede contener el fichero en WEB-INF aunque sólo se leerá el de mayor nivel. Ejemplo: Eliminar la implementación JSF 2.1 embebida en JBoss AS / WildFly por otra alternativa. <jboss-deployment-structure> <deployment> <exclusions> <module name="javax.faces.api" /> <module name="com.sun.jsf-impl" /> Pueden excluirse dependencias implícitas agregadas automáticamente en una aplicación. </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </deployment> </jboss-deployment-structure> 147

115 Estrategias avanzadas de despliegue (3) Por defecto, todos los subdespliegues de una aplicación se ven entre ellos. Listado de prioridades en la carga de clases: Máxima prioridad a los módulos (incluidas las librerías del directorio modules). Librerías indicadas por el usuario en en fichero MANIFEST.NF o jbossdeployment.structure.xml. Librerías empaquetadas dentro de la aplicación (Ej: WEB-INF/classes, WEBINF/lib,...). Librerías encapsuladas dentro del mismo archivo EAR (directorio lib). 148

116 Estrategias avanzadas de despliegue (4) Ejemplo: Las librerías EJB.jar ubicadas en el directorio WEB-INF esconden la implementación del nivel superior. Ejemplo: Hacer que WebApp.war utilice la librería EJB-jar del nivel superior. <jboss-deployment-structure> <ear-subdeployments-isolated>false</earsubdeployments-isolated> <sub-deployment name="webapp.war"> <dependencies> <module name="deployment.app.ear.ejb.jar" /> </dependencies> </sub-deployment> </jboss-deployment-structure> Si ponemos ear-subdeploymentsisolated a true, la aplicación web no será capaz de encontrar las clases ubicadas en EJB.jar y la librería Utilityjar. 149

117 Estrategias avanzadas de despliegue (5) Ejemplo: Resolución anterior manteniendo el aislamiento entre módulos. Ubicamos las librerías comunes en el directorio lib y añadimos una dependencia a las clases EJB. <jboss-deployment-structure> <ear-subdeployments-isolated>true</earsubdeployments-isolated> <sub-deployment name="webapp.war"> <dependencies> <module name="deployment.app.ear.ejb.jar" /> </dependencies> </sub-deployment> </jboss-deployment-structure> 150

118 Estrategias avanzadas de despliegue (6) Los casos anteriores muestran cómo gestionar las dependencias desde JBoss AS / WildFly. Existe una alternativa basada en Java utilizando el atributo Class-Path del fichero MANIFEST.MF. Ejemplo: Referenciar la clase Utility.jar en la aplicación web. Manifest-Version: 1.0 Class-Path: Utility.jar 151

119 JBoss AS 7 / WildFly 8 Gestionando el servidor 152

120 Introducción Las herramientas de gestión permiten controlar las instancias del servidor. JBoss AS 7 / WildFly 8 proporciona varios canales para la configuración y administración de los recursos del servidor: La interfaz de línea de comando (CLI). La consola web de administración. Ficheros XML de configuración. Nota: Cualquier cambio se sincroniza en los ficheros de configuración. 153

121 La interfaz CLI (1) Es una interfaz de bajo nivel que permir gestionar el servidor desde línea de comando. CLI está ubicado en el directorio $JBOSS_HOME/bin y se arranca con el script jboss-cli.sh. Ejecutando el script, arrancamos una sesión desconectada a la cual hay que conectarse: Existe otra forma de conectarse automáticamente desde línea de comando: $JBOSS_HOME/bin/jboss-cli.sh connect Para cerrar la conexión desde CLI, basta con utilizar la sentencia de salida de la shell: /] quit Closed connection to localhost:9990 You are disconnected at the moment. Type connect' to connect to the server or help' for the list of supported commands. [disconnected /] connect Connected to standalone controller at localhost:

122 La interfaz CLI (2) La navegación a través de los recursos y la ejecución de comandos se realiza a través de una estructura de árbol. Ejemplo 1: /] /subsystem=deployment-scanner/scanner=default:write-attribute(name=scaninterval,value=2500) Ejemplo 2: /] cd /subsystem=deployment-scanner/scanner=default scanner=default] :write-attribute(name=scan-interval,value=2500) Ejemplo 3: scanner=default] cd.. scanner=default] pwd 155

123 La interfaz CLI (3) Vista del árbol de recursos en JBoss AS 7 / WildFly 8 : 156

124 La interfaz CLI (4) Los comandos que pueden ejecutar sobre un recurso son los siguientes (leer / escribir): read-resource: Lee los atributos de un recurso con información básica o completa con todos los recursos hijo. read-resource-description: Obtiene una descripción del recurso seleccionado. read-operation-names: Lee los nombre de las operaciones disponibles en un nodo. read-operation-description: Obtiene las descripciones de las operaciones disponibles en un nodo. read-children-names: Obtiene los nombre de todos los hijos a partir de un recurso. read-children-resources: Obtiene información de de todos los hijos de un determinado tipo a partir de un recurso. read-children-types: Proporciona una lista de hijos seleccionado un recurso. read-attribute: Obtiene el valor de un atributo de un recurso. write-attribute: Escribe el valor de un atributo de un recurso. Ejemplo: /] /subsystem=datasources:read-resource(recursive=true) 157

125 La interfaz CLI (5) Ejecutar comandos: add-jms-queue add-jms-topic Ejecutar scripts en un fichero : Mensajería JMS : datasource add / remove batch run-batch list-batch Holdback-batch [parada1] take-snapshots delete-snapshot(name= standalone.xml ) Histórico : Batch : jboss-cli.sh file=neodoo-deploy.cli Snapshots : Datasources : history 158

126 Ejemplo de Datasource Ejemplo: Creación de un datasource Desplegamos el driver JDBC de MySQL copiando el fichero JAR en JBOSS_HOME/standalone/deployments Verificamos que el driver está instalado correctamente: /] /subsystem=datasources:installed-drivers-list Crear el nuevo datasource para el driver MySQL. /] data-source add --jndi-name=java:/mysqlds --pool-name=mysqlpool connectionurl=jdbc:mysql://localhost:3306/mydb --driver-name=mysql-connector-java bin.jar --user-name=myuser --password=password --max-pool-size=30 Ejemplo: Eliminación de un datasource. /] data-source remove jndi-name=java:/mysqlds Ejercicio: Instalar el driver JDBC como módulo. 159

127 Snapshots Existe la posibilidad de disponer de snapshots de la configuración del servidor. En el caso de un servidor standalone, se almacena los siguientes contenidos en JBOSS_HOME/standalone/configuration/standalone_xml_history. standalone.initial.xml contiene el fichero original de JBoss AS. standalone.boot.xml contiene el fichero del último arranque satisfactorio de JBoss AS. standalone.last.xml contiene el fichero de la última configuración satisfactoria de JBoss AS. En el caso de un servidor en modo domain, se utilizan los subdirectorios domain_xml_history y host_xml_history ubicados dentro del directorio JBOSS_HOME/domain/configuration. 160

128 La consola web (1) Por defecto, no se puede acceder a la consola ya que no existe ningún usuario asociado. Paso 1: 1 Crear un usuario de administración. 162

129 La consola web (2) Paso 2: 2 Arrancar el servidor y acceder a 163

130 La consola web (3) Pantalla de configuración : 164

131 La consola web (4) Pantalla de ejecución : 165

132 La consola web (5) La configuración de la consola web se encuentra en el fichero standalone.xml o domain.xml : Definición del puerto : <socket-binding-group name="standard-sockets" default-interface="public"> <socket-binding name="management-http" interface="management" port="$ {jboss.management.http.port:9990}"/> </socket-binding-group> Asignación de dirección : <interface name="management"> <inet-address value="${jboss.bind.address.management: }"/> </interface> 166

133 JBoss AS 7 / WildFly Tuning del servidor 167

134 Gestión de la memoria (1) La memoria se compone de las siguientes secciones: 'Young Generation' que se divide en 'Eden' y dos zonas de supervivencia ('From Space' y 'To Space'). 'Old Generation' que se compone de la zona 'Ternured Space'. 'Permanent Generation'. Generation' 168

135 Gestión de la memoria (2) Los objetos se crean en la zona 'Eden'. Cuando 'Eden' está lleno, el 'garbage collector' revisa todos los objetos del 'Eden', copia los objetos vivos a 'From Space' y libera la memoria de los objetos muertos. 169

136 Gestión de la memoria (3) Cuando 'Eden' se llena de nuevo, repite el proceso copiando los objetos vivos del 'Eden' a 'To Space' y del 'From Space' a 'To Space'. Si 'To Space' se llena y quedan objetos libres en 'Eden' o en 'From Space', estos objetos son copiados a 'Ternured' (Old Generation). Cuando el GC no puede conseguir suficiente memoria ('minor collection'), realiza otra limpieza ('major collection') en la que el GC suspende parte o todos los hilos ('stop-theworld') y vacía completamente el 'Young Generation'. 170

137 Gestión de la memoria (4) Los bytecode de las clases (ficheros.class) se almacenan en el 'Permanent Space'. Una vez cargados los bytecodes, la JVM puede crear instancias de una clase (objetos) en el 'heap'. Para asegurar que las clases no se eliminen del permanent space, la JVM tiene la opción noclassgc Leer clases del sistema de ficheros es más costoso que de la memoria. OJO! Si el espacio se llena, no hay forma de hacer limpieza y desencadenará en un fatídico OutOfMemoryError. Nota: Reservar espacio suficiente para almacenar todas las clases y permitir la limpieza de clases. 171

138 Garbage Collectors (1) Existen cuatro tipos de colectores en J2SE Platform version 1.5: Serial Collector. Utiliza un sólo hilo para la limpieza del 'Young Generation'. El mecanismo de limpieza de 'Ternured Zone' es el mismo que el Serial Collector. Es utilizado con la opción -XX: +UseParallelGC. La aplicación es pausada por periodos cortos durante la recolecta (stop-theworld). Throughput Collector. Collector Utiliza múltiples hilos para limpiar la 'Young Generation' (minor collection). La aplicación es pausada por periodos cortos durante la recolecta (stop-theworld). 172

139 Garbage Collectors (2) Concurrent Low Pause Collector (CMS). Incremental Pause Collector. Collector Utiliza un sólo hilo para la limpieza del 'Old Generation'. Es utilizado con la opción -XX: +UseTrainGC. No soportado en versiones futuras. Se ejecuta concurrentemente con la aplicación. La aplicación es pausada por periodos cortos durante la recolecta (stop-theworld). Es utilizado con las opciones -Xincgc or -XX:+UseConcMarkSweepGC. 173

140 Garbage Collectors (3) El garbage collector puede combinar 'Parallel Collector' y 'CMS Collector'. Contenidos y fotografías extraidos de: 'Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine' en ning_5.html 'Java theory and practice: Garbage collection in the HotSpot JVM' en 174

141 Monitorizando 175

142 Garbage Collection en el Hotspot Java Virtual Machine Monitorizar la actividad del Garbage Collection a través de argumentos de línea de comando de JDK. JDK Enlaces: Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning en Ejemplos: Ejemplos -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -Xloggc:file 176

143 JStat Es una herramienta integrada en Sun JDK 5 de monitorización de estadísticas de rendimiento de la JVM. Ejemplos: Ejemplos jstat -gcutil s 5 Uso: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] jstat -gc -t `pgrep java` 5000 Más información: share/jstat.html Nota: La herramienta jps integrada en Sun JDK 5 permite obtener los identificadores de la máquina virtual Java (vmid). Visualizar las estadísticas del recolector de memoria. jstat -gcutil -t -h5 `pgrep java` 5000 Visualizar 5 veces en repeticiones de 1 segundo el vmid Visualizar los eventos del recolector de memoria con porcentajes. jstat -gccause -t `pgrep java` 1000 Visualizar el tiempo invertido por el recolector de memoria y el motivo de la limpieza. 177

144 JConsole La utilidad jconsole es una herramienta gráfica integrado en Sun JDK 5 compatible con JMX para monitorizar JVM. Más detalle en 178

145 VisualVM VisualVM es una herramienta de monitorización incluida en la distribución J2SE. Ejecutable jvisualvm en el directorio $JAVA_HOME/bin Ejemplo: Ejemplo Ver los procesos Java y vincularlos con los elementos del dominio. 179

146 JBoss AS 7 / WildFly El propio servidor de aplicaciones permite la monitorización de los recursos: A través de la consola web. Utilizando la herramienta CLI. Este método se emplea para conectar con herramientas de monitorización externas (nagios, zabbix,...) Ejemplo: /] /subsystem=datasources/data-source=exampleds/ 180

147 RHQ Es una herramienta de monitorización, proyecto de la comunidad JBoss. 181

148 JBoss AS 7 / WildFly Seguridad en Java EE y el servidor de aplicaciones 184

149 Seguridad en Java EE (1) Autenticación: Asigna una identidad al usuario. El usuario proporciona su identidad con credenciales. Autorización: Establece los derechos de acceso basado en la identidad del usuario. Representa la consulta User / Roles. Roles Representa la consulta User / Password. Password 185

150 Seguridad en Java EE (2) En Java EE, los contenedores son los responsables de proporcionar la seguridad a las aplicaciones. En un contenedor, existen dos tipos de seguridad: A través de ficheros o anotaciones. Mediante programación. Ejemplo: Los componentes EJB utilizan el descriptor ejb-jar.xml. Ejemplo: Métodos como isuserinrole() o getuserprincipal() para Servlets / JSP. Por defecto, la implementación de la seguridad se basa en Java Authentication and Authorization Service (JAAS). 186

151 Seguridad en el servidor Estas características se configuran a través de los dominios de seguridad JBoss: Parametrización en el fichero de configuración del servidor standalone.xml / domain.xml. Un dominio de seguridad JBoss: Está vinculado a un nombre. Está configurado para acceder a la información de seguridad en diversas fuentes (sistema de fichero, base de datos, LDAP). Abstrae los mecanismos de autenticación y autorización de usuarios. Una instancia JBoss puede tener diferentes dominios de seguridad JBoss, tanto a nivel de aplicación, componente o servicio. JBoss utiliza el proyecto PicketBox, que se basa en JAAS. 187

152 Módulo de login por defecto En JBoss AS 7.1 existe un módulo de login RealmUsersRoles por defecto basado en ficheros con usuarios y roles. <subsystem xmlns="urn:jboss:domain:security:1.1"> <security-domains> <security-domain name="other" cache-type="default"> <authentication> <login-module code="remoting" flag="optional"> <module-option name="password-stacking" value="usefirstpass"/> </login-module> <login-module code="realmusersroles" flag="required"> <module-option name="usersproperties" value="${jboss.server.config.dir}/application-users.properties"/> <module-option name="rolesproperties" value="${jboss.server.config.dir}/application-roles.properties"/> <module-option name="realm" value="applicationrealm"/> <module-option name="password-stacking" value="usefirstpass"/> </login-module> </authentication> </security-domain> </subsystem> El script add-user.sh agrega el usuario y rol directamente en estos ficheros. 188

153 Módulo de login por defecto En WildFly 8 existe un módulo de login ManagementRealm por defecto basado en ficheros con usuarios y roles. <management> <security-realms> <security-realm name="managementrealm"> <authentication> <local default-user="$local" skip-group-loading="true"/> <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> </authentication> <authorization map-groups-to-roles="false"> <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/> </authorization> </security-realm>... </security-realms> El script add-user.sh agrega el usuario y rol directamente en estos ficheros. 189

154 Ejemplo de seguridad 190

155 Securizar aplicación web (1) Ejemplo: Securizar una aplicación web con el módulo de login por defecto. Paso 1: 1 Descargar el proyecto struts-blank.war del proyecto Struts. Paso 2: 2 Anadir el usuario neodoo con el rol neodoo mediante la aplicación adduser.sh. Seleccionar el rol ApplicationRealm e indicar una contraseña. Aparecerá el usuario y rol en los ficheros application-users.properties y application-roles.properties. 191

156 Securizar aplicación web (2) Paso 3: 3 Configurar el fichero WEBINF/web.xml: </security-constraint> <login-config> <auth-method>basic</auth-method> <web-app> <realm-name>file</realm-name>... </login-config> <security-constraint> <security-role> <web-resource-collection> <role-name>neodoo</role-name> <web-resource-name>htmlauth</web-resourcename> </security-role> </web-app> <description>application security constraints </description> <url-pattern>/*</url-pattern> <http-method>get</http-method> Paso 4: 4 Indicar el módulo de seguridad en el fichero WEB-INF/jboss-web.xml: <http-method>post</http-method> <jboss-web> </web-resource-collection> <security-domain>java:/jaas/other</securitydomain> <auth-constraint> <role-name>neodoo</role-name> </jboss-web> </auth-constraint> 192

157 Securizar la interfaz de gestión Por defecto, el acceso remoto está protegido al contrario que el acceso local. <http-interface securityrealm="managementrealm"> <socket-binding http="management-http"/> </http-interface> </management-interfaces> <management> </management> <security-realms> <security-realm name="managementrealm"> <authentication> <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> El fichero mgmt-users.properties espera contraseñas de la forma: </authentication> username=hex( MD5( username : realm : password)) </security-realm> </security-realms> <management-interfaces> <native-interface securityrealm="managementrealm"> <socket-binding native="management-native"/> La creación de un usuario puede crearse con la sentencia add-user.sh. </native-interface> 194

158 Securizar la interfaz de gestión Por defecto, el acceso remoto está protegido al contrario que el acceso local. <management-interfaces> <http-interface securityrealm="managementrealm" http-upgradeenabled="true"> <management> <socket-binding http="management-http"/> <security-realms> </http-interface> <security-realm name="managementrealm"> </management-interfaces> <authentication> <local default-user="$local" skip-grouploading="true"/> <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> El fichero mgmt-users.properties espera contraseñas de la forma: username=hex( MD5( username : realm : password)) </authentication> <authorization map-groups-to-roles="false"> <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/> </authorization> La creación de un usuario puede crearse con la sentencia add-user.sh. </security-realm> </security-realms> 195

159 Otros módulos de Login 196

160 Módulo de login Database (1) El módulo de login Database puede atacar a la base de datos mediante un datasource JDBC: Crear las tablas de la base de datos asociadas al usuario (principals) y roles (roles). Tabla Principals: Asocia el usuario PrincipalID con la contraseña válida. PrincipalID: Tipo varchar. Password: Tipo varchar. Ejemplo: Database MySQL. CREATE TABLE USERS(login VARCHAR(64) PRIMARY KEY, passwd VARCHAR(64)) CREATE TABLE USER_ROLES(login VARCHAR(64), role VARCHAR(32)) INSERT into USERS values('admin', 'admin') INSERT into USER_ROLES values('admin', 'Manager') Tabla Roles: Asocia el usuario PrincipalID con su conjunto de roles. PrincipalID: Tipo varchar. Role: Tipo varchar. RoleGroup: Tipo varchar. 197

161 Módulo de login Database (2) El módulo de login ha de configurarse en el fichero de configuración del servidor. dsjndiname: El nombre JNDI del DataSource de la base de datos que contiene las tablas lógicas Principals y Roles ; si no se indica, apunta por defecto a java:/defaultds. Ejemplo: principalquery: La sentencia para obtener el usuario equivalente a select Password from Principals where PrincipalID=? ; si no se indica, apunta por defecto a la indicada anteriormente. rolesquery: La sentencia para obtener los roles equivalente a select Role, RoleGroup fromroles where PrincipalID=? ; si no se indica, apunta por defecto a la indicada anteriormente. <security-domain name="mysqldomain" cachetype="default"> <authentication> <login-module code="database" flag="required"> <module-option name="dsjndiname" value="java:/mysqlds"/> <module-option name="principalsquery" value="select passwd from USERS where login=?"/> <module-option name="rolesquery" value="select role,'roles' from USER_ROLES where login=?"/> </login-module> </authentication> </security-domain> 198

162 Módulo de login Database (3) Por defecto, la contraseña se almacena en texto plano por lo que existe un peligro serio de seguridad. Existe la posibilidad de encriptar la password con cualquier algoritmo proporcionado por el proveedor JCA. Ejemplo: <login-module code="database" flag="required"> <module-option name="dsjndiname" value="java:/mysqlds"/> <module-option name="principalsquery" value="select passwd from USERS where login=?"/> <module-option name="rolesquery" value="select role, 'Roles' from USER_ROLES where login=?"/> <module-option name="hashalgorithm" value="md5"/> <module-option name="hashencoding" value="base64"/> <module-option name="hashstorepassword" value="true"/> </login-module> El propio Linux dispone de métodos de generación de contraseñas aunque puede generarse una clase en Java mediante las clases java.security.messagedigest y org.jboss.security.base64util. 199

163 Módulo de login Database (4) Para utilizar este módulo en un proyecto web, hay que referenciarlo en el fichero WEB-INF/jboss-web.xml de la siguiente forma: <jboss-web> <security-domain>java:/jaas/mysqldomain</security-domain> </jboss-web> 200

164 Módulo de login LDAP (1) LDAP (Lightweight Directory Access Protocol) es el estándar de facto para proporcionar servicios de directorio a las aplicaciones. <module-option name="bindcredential" value="secret"/> El módulo de login ha de configurarse en el fichero de configuración del servidor. <module-option name="rolesctxdn" value="ou=roles,dc=example,dc=com"/> Ejemplo: <module-option name="roleattributeid" value="cn"/> <module-option name="basectxdn" value="ou=people,dc=example,dc=com"/> <module-option name="basefilter" value="(uid={0})"/> <module-option name="rolefilter" value="(member={1})"/> <module-option name="searchscope" value="onelevel_scope"/> <login-module code="ldapextended" flag="required"> <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.ldapctxfactory"/> <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/> <module-option name="allowemptypasswords" value="true"/> </login-module> <module-option name="java.naming.security.authentication" value="simple"/> <module-option name="binddn" value="uid=admin,ou=system"/> 201

165 Módulo de login LDAP (2) binddn: Es el DN utilizado para conectar contra el servidor LDAP para las consultas de los usuarios y roles. basectxdn: Es el DN del contexto por donde empezar a buscar el usuario. basefilter:es un filtrador que busca la localización del contexto del usuario a autenticar. roleattributeid: Es el nombre del atributo del rol del contexto que corresponde con el nombre del rol. searchscope: Define el ámbito de búsqueda a una de las cadenas. allowemptypasswords: Es un flag que indica si la contraseña puede estar vacía. rolesctxdn: Es el DN del contexto para buscar los roles del usuario. rolefilter: Es un filtrador para buscar los roles de un usuario autenticado. 202

166 Securizar EJBs Los componentes EJB's puede incorporar mecanismos de seguridad a través de anotaciones: Ejemplo: Securizar a nivel de clase. import org.jboss.ejb3.annotation.securitydomain; import uritydomain: Indica el dominio sallowed: Lista de roles As: Asigna un { "neodoo" }) public class SecureEJB { } Ejemplo: Securizar a nivel de { "neodoo" }) public void createuser(string country,string name) { User customer = new User mitall: Permite acceso a todos los yall: Prohibe acceso a todos los roles. customer.setcountry(country); customer.setname(name); em.persist(customer); } 203

167 Securizar web services La seguridad de los web services dependerá si está basado en : factory.setusername("admin"); factory.setpassword("admin"); POJOWebService client = (POJOWebService) factory.create(); POJO: Idéntico a Servlet / JSP (web.xml y jboss-web.xml) client.dosomething(); EJB: Utilizando anotaciones. Ejemplo: Cliente accediendo a JaxWsProxyFactoryBean factory = new = " servicename = "SecureEJBService") factory.getininterceptors().add(new = "BASIC", securewsdlaccess = false) factory.getoutinterceptors().add(new = "mysqldomain") factory.setserviceclass(pojowebservice.class); factory.setaddress("http://localhost:8080/pojoservic e"); Ejemplo: EJB basado en anotaciones. public class SecureEJB {... } 204

168 JBoss AS 7 / WildFly Securizando la capa de transporte 205

169 Crear certificados 206

170 Crear certificados keytool es una herramienta de gestión de claves y certificados proporcionada por Sun incluida en el directorio bin de la distribución JDK. Administra los pares de clave publico/privado y los certificados asociados. Esconde las claves públicas (certificados) de los canales de comunicación. keytool almacena las claves y los certificados en un almacén de claves (keystore). Un keystore contiene dos tipos de entradas: Entradas de claves: claves privadas. Entradas de certificados validados: clave pública certificada. Todas las entradas del almacén de claves pueden accederse a través de un único alias. 207

171 Crear clave y almacén (1) Generar una clave privada/pública: privada/pública keytool -genkey -alias training -keypass neodoo Un alias training referencia a la entrada en el almacén de claves (keystore). La contraseña inicial neodoo puede cambiar posteriormente: keytool -genkey -alias training -keypass neodoo -new Utilizar -keystore para indicar el nombre y ubicación del keystore. keytool -genkey -alias training -keypass neodoo -keystore keystore.jks Por defecto, en Linux crea el certificado en el directorio $HOME del usuario con el nombre.keystore 208

172 Crear clave y almacén (2) Ejemplo: Cuál es el código de país de dos letras de la unidad? fsolans]# keytool -genkey -alias training -keypass neodoo -keystore keystore.jks Introduzca la contraseña del almacén de claves: Volver a escribir la contraseña nueva: [Unknown]: ES Es correcto CN=neodoo.es, OU=Neodoo Microsystems S.L., O=Training Department, L=Zaragoza, ST=Spain, C=ES? [no]: si Cuáles son su nombre y su apellido? [Unknown]: neodoo.es Cuál es el nombre de su unidad de organización? [Unknown]: Cuál es el nombre de su organización? [Unknown]: Training Department Cuál es el nombre de su ciudad o localidad? [Unknown]: Zaragoza Cuál es el nombre de su estado o provincia? [Unknown]: Spain 209

173 Crear el CSR Para obtener un certificado de la entidad certificadora (CA), generar un Certificate Signing Request (CSR): keytool -certreq -v -alias training -keystore keystore.jks -storepass neodoo -file training.csr Enviar el fichero training.csr a la entidad certificadora (Certification Authority) para obtener el certificado: 210

174 Importar nuestro certificado Guardar nuestro certificado mostrado en la página web en un fichero local (training.crt). Importar nuestro certificado en el almacén de claves: Antes descargar e importar certificados de Cacert o la importación siguiente da un fallo. keytool -import -v -trustcacerts -alias training -keystore keystore.jks -keypass neodoo -storepass neodoo -file training.crt 211

175 Descarga de certificados Descargar los certificados de Cacert.org (http://www.cacert.og/index.php?id=3): Seleccionar los ficheros en formato PEM y guardarlos en el disco local. Class 1 PKI Key (Root Certificate). Class 3 PKI Key (Intermediate Certificate). 212

176 Importar certificados Importar los certificados de Cacert en el almacén de claves (keystore): keytool -import -v -alias cacert -keystore keystore.jks -file root.crt keytool -import -v -alias cacert3 -keystore keystore.jks -file class3.crt fsolans]# keytool -import -v -alias cacert -keystore keystore.jks -file root.crt fsolans]# keytool -import -v -alias cacert3 -keystore keystore.jks -file class3.crt Introduzca la contraseña del almacén de claves: Introduzca la contraseña del almacén de claves: Propietario: CN=CA Cert Signing Authority, OU=http://www.cacert.org, O=Root CA Se ha agregado el certificado al almacén de claves [Almacenando keystore.jks] Emisor: CN=CA Cert Signing Authority, OU=http://www.cacert.org, O=Root CA... Confiar en este certificado? [no]: si Se ha agregado el certificado al almacén de claves 213

177 Otras sentencias del keystore (1) Visualizar el contenido de una entrada del almacén de claves: keytool -list -v -alias cacert -keystore keystore.jks Visualizar todas las entradas del almacén de claves: keytool -list fsolans]# keytool -list -keystore keystore.jks -storepass neodoo Tipo de Almacén de Claves: JKS Proveedor de Almacén de Claves: SUN Su almacén de claves contiene 3 entradas cacert3, 10-sep-2012, trustedcertentry, Huella Digital de Certificado (SHA1): AD:7C:3F:64:FC:44:39:FE:F4:E9:0B:E8:F4:7C:6C:FA:8A:AD:FD:CE training, 10-sep-2012, PrivateKeyEntry, Huella Digital de Certificado (SHA1): D9:05:DC:3A:FB:F4:3A:D7:23:13:CE:19:FE:31:99:35:82:AB:E1:5C cacert, 10-sep-2012, trustedcertentry, Huella Digital de Certificado (SHA1): 13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33 214

178 Otras sentencias del keystore (2) Eliminar una entrada del almacén de claves: keytool -delete -alias training -keystore keystore.jks Exportar un certificado a un fichero: keytool -export -alias neodoo -keystore keystore.jks -file training.cer 215

179 Habilitar HTTPS 216

180 Habilitar HTTPS (1) Para activar el puerto HTTPS, es necesario obtener una clave: keytool -genkey -alias training -keyalg RSA -keystore keystore.jks -validity 3650 Aunque el navegador web notifique la imposibilidad de certificar la autoridad de la clave, no es obligatorio que la clave esté validada por una autoridad certificadora (CA). kk]$ keytool -genkey -alias training -keypass neodoo -keystore neodoo-training.jks Escriba la contraseña del almacén de claves: Volver a escribir la contraseña nueva: Cuáles son su nombre y su apellido? [Unknown]: neodoo.es Cuál es el nombre de su unidad de organización? [Unknown]: Training Department Cuál es el nombre de su organización? [Unknown]: Cuál es el nombre de su ciudad o localidad? [Unknown]: Zaragoza Cuál es el nombre de su estado o provincia? [Unknown]: Spain Cuál es el código de país de dos letras de la unidad? [Unknown]: ES Es correcto CN=neodoo.es, OU=Training Department, O=, L=Zaragoza, ST=Spain, C=ES? [no]: si 217

181 Habilitar HTTPS (2) Para habilitar el conector HTTPS, es necesario configurar el subsistema web del fichero de configuración del servidor. Ejemplo: <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" > <connector name="http" protocol="http/1.1" scheme="http" socket-binding="http"/> <connector name="https" protocol="http/1.1" scheme="https" socket-binding="https" secure="true"> <ssl key-alias="training" password="neodoo" certificate-key-file="/home/fsolans/keystore.jks" ciphersuite="all" protocol="tls"/> </connector> <virtual-server name="default-host" enable-welcome-root="true"> <alias name="localhost"/> <alias name="example.com"/> </virtual-server> </subsystem> 218

182 Habilitar HTTPS (2) Para habilitar el conector HTTPS, es necesario configurar el subsistema web del fichero de configuración del servidor. En WildFly 8, el contenedor web se ha sustituido por el proyecto Undertow. Ejemplo: <buffer-cache name="default"/> <security-realms> <server name="default-server">... <http-listener name="default" socketbinding="http"/> <security-realm name="ssl-realm"> <https-listener name="https" socketbinding="https" security-realm="ssl-realm"/> <server-identities> <ssl> <keystore path="keystore.jks" relativeto="jboss.server.config.dir" keystorepassword="neodoo" alias= training /> <location name="/" handler="welcomecontent"/> <filter-ref name="server-header"/> </ssl> <filter-ref name="x-powered-by-header"/> </server-identities> </host> </security-realm> </server> </security-realms>. <subsystem xmlns="urn:jboss:domain:undertow:1.1"> <host name="default-host" alias="localhost"> </subsystem> 219

183 Habilitar HTTPS (3) Si queremos forzar a una aplicación web el acceso HTTPS, hemos de agregar una restricción de seguridad (web.xml) con un elemento <user-data-constraint> cuyo <transport-guarantee> sea CONFIDENTIAL. Ejemplo: <security-constraint> <web-resource-collection> <url-pattern>/profile/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>confidential</transport-guarantee> </user-data-constraint> </security-constraint> Ejercicio: Incorporar HTTPS al contexto root de JBoss AS / WildFly. 220

184 Habilitar HTTPS Para verificar la configuración, acceder a una aplicación web via HTTPS: https://localhost:8443/ 221

185 Curso de JBoss AS 7 / WildFly Alta disponibilidad 222

186 Arquitectura HA Arquitectura básica de clustering de JBoss: El motor del clustering se basa en el proyecto JGroups que proporciona la comunicación entre los nodos del cluster a través de multicast. Otro bloque primordial es Infinispan que gestiona la consistencia de la aplicación a través del cluster. 223

187 Configuración HA En JBoss AS 7 / WildFly 8, los servicios de clustering sólo necesitan modificar el fichero de configuración del servidor: Un servidor independiente sólo puede tener un perfil por lo que el servidor adjunta un fichero de configuración denominado standalone-ha.xml que contiene todos los servicios de clustering. Un servidor de dominio es capaz de almacenar múltiples perfiles en el fichero de configuración domain.xml por lo que puede emplearse tanto en dominios clusterizados o no clusterizados. 224

188 Clustering de servidores independientes Un cluster de servidores independientes puede albergar los siguientes escenarios: Cluster de nodos AS corriendo en diferentes máquinas. Cluster de nodos AS corriendo en la misma máquina. 225

189 Clustering en diferentes máquinas (1) Ejemplo: Configurar la siguiente arquitectura HA. En este escenario, cada servidor está instalado en diferentes máquinas. Representa el caso más simple ya que es suficiente con vincular cada servidor a una IP y arrancarlo utilizando una configuración con los servicios de clustering. 226

190 Clustering en diferentes máquinas (2) Abrir el fichero standalone-ha.xml del primer servidor y configurar la interfaz de red: <interfaces> Abrir el fichero standalone-ha.xml del segundo servidor y configurar la interfaz de red: <interfaces> <interface name="management"> <interface name="management"> <inet-address value=" "/> <inet-address value=" "/> </interface> </interface> <interface name="public"> <interface name="public"> <inet-address value=" "/> <inet-address value=" "/> </interface> </interface> </interfaces> </interfaces> Para iniciar el cluster, arrancar cada uno de los servidores: standalone.sh --server-config=standalone-ha.xml 227

191 Clustering en diferentes máquinas (3) Ejemplo: Crear una aplicación web MiAppWeb.war con soporte para clustering. Habilitar el clustering modificando el fichero web.xml <web-app> <distributable/> En caso de distribuir la aplicación en un conjunto de servidores independientes, la mejor forma es creando un script CLI que despliegue la aplicación en todos los nodos. Ejemplo: </web-app> connect Copiar la aplicación en los nodos de servidor y verificar el resultado en la consola. deploy MiAppWeb.war connect deploy MiAppWeb.war Un cluster de servidores independientes no soporta farming. Crear el script CLI: Ejecutar el fichero en la interfaz CLI: jboss-admin.bat --user=username password=password --file=deploy.cli 228

192 Clustering en la misma máquina En este caso, parte de los nodos de servidor se alojan en la misma máquina. Definir múltiples IP's en la misma máquina. Configurar un desplazamiento de puertos en cada servidor que comparta máquina. 229

193 Definir múltiples IPs (1) Configurar la IP para la tarjeta eth0 ifconfig eth up Configurar la IP para la tarjeta eth1 ifconfig eth up Actualizamos el fichero standaloneha.xml en cada nodo con su correspondiente IP : <interfaces> <interface name="management"> <inet-address value=" x"/> </interface> <interface name="public"> <inet-address value=" x"/> </interface> </interfaces> 230

194 Definir múltiples IPs (2) Arrancamos cada uno de los nodos: nodo 1:./standalone.sh -c standalone-ha.xml nodo 2:./standalone.sh -c standalone-ha.xml En vez de modificar los ficheros de configuración de los nodos 1 y 2, se pueden pasar los parámetros a través de la línea de ejecucion: nodo 1:./standalone.sh -c standalone-ha.xml -Djboss.node.name=node1 nodo 2:./standalone.sh -c standalone-ha.xml -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=

195 Desplazamiento de puertos (1) En todos los servidores de la misma máquina, configuramos el fichero standaloneha.xml de la siguiente forma: <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:[ip_privada]}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:[ip_privada]}"/> </interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:[ip_privada]}"/> </interface> </interfaces> 232

196 Desplazamiento de puertos (2) Mantenemos intacto el fichero del nodo 1: <socket-binding-group name="standardsockets" default-interface="public">... </socket-binding-group> Definimos un desplazamiento de puertos en el nodo 2: <socket-binding-group name="standardsockets" default-interface="public" portoffset="${jboss.socket.binding.portoffset:150}">... </socket-binding-group> 233

197 Desplazamiento de puertos (3) Arrancamos cada uno de los nodos: nodo 1:./standalone.sh -c standalone-ha.xml nodo 2:./standalone.sh -c standalone-ha.xml En vez de modificar los ficheros de configuración de los nodos 1 y 2, se pueden pasar los parámetros a través de la línea de ejecucion: nodo 1:./standalone.sh -c standalone-ha.xml -Djboss.node.name=node1 nodo 2:./standalone.sh -c standalone-ha.xml -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=

198 Clustering en un dominio de servidores (1) En un dominio de servidores, el servicio de clustering se encuentra en el fichero de configuración domain.xml. El servidor define los siguientes perfiles: default: Soporta los componentes web de la plataforma Java EE y algunas extensiones. full: Contiene el perfil anterior y el sistema de mensajería. ha: Perfil por defecto con funcionalidades de clustering. full-ha: Perfil completo con funcionalidades de clustering. Si queremos utilizar clustering en un dominio de servidores, tendremos que utilizar o bien el perfil ha o full-ha. full-ha 235

199 Clustering en un dominio de servidores (2) Ejemplo: Configurar la siguiente arquitectura HA. 236

200 Clustering en un dominio de servidores (2) Paso 1: 1 <server-groups> Presuponemos que ya disponemos de una arquitectura de servidores en modo domain. <server-group name="grupo-servidor-uno" profile="ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> Paso 2: 2 <socket-binding-group ref="ha-sockets"/> Definimos los grupos de servidores en el fichero domain.xml del controlador de dominio (host 1). </server-group> <server-group name="grupo-servidor-dos" profile="ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-groups> 237

201 Clustering en un dominio de servidores (3) En el primer host, configuramos los nodos de servidor en host.xml : En el segundo host, configuramos los nodos de servidor en host.xml : <servers> <servers> <server name="servidor-uno" group="grupo-servidoruno"/> <server name="servidor-tres" group="grupo-servidordos"/> <server name="servidor-dos group="grupo-servidoruno" auto-start="false"> <server name="servidor-cuatro" group="gruposervidor-dos" auto-start="false"> <socket-bindings port-offset="150"/> <socket-bindings port-offset="150"/> </server> </server> </servers> </servers> Arrancamos el controlador de dominio (host1) y posteriormente los hosts del dominio (host2). Ejercicio: Configurar la arquitectura desde la consola web de administración. 238

202 Curso de JBoss AS 7 / WildFly 8 Clustering de aplicaciones 239

203 Clustering en Session Bean (1) Stateless Session Bean (SLSB). Al no retener el estado entre invocaciones, sólo es necesario balancear la carga entre los diferentes servidores. Añadir la anotación org.jboss.ejb3.annotation.clustered public class ClusteredBean { public void dosomething() { // Do something } } Adicionalmente, puede incluirse la política de balanceo de carga (Round robin, RandomRobin, FirstAvailable y 240

204 Clustering en Session Bean (2) Stateful Session Bean (SFSB). Añadir la anotación org.jboss.ejb3.annotation.clustered public class ClusteredBean { public void dosomething() { // Do something } } Por defecto, utiliza el contenedor de caché sfsb, que replica las sesiones entre todos los nodos. 241

205 Clustering en Session Bean (3) Puede referenciarse a otras caché con la org.jboss.ejb3.annotation.cacheco nfig Ejemplo de configuración de la caché dist-cache: <cache-container name="custom-sfsb" defaultcache="dist-cache"> <alias>dist-sfsb-cache</alias> <distributed-cache owners="3" mode="async" name="dist" <locking <file-store/> public class ClusteredBean {... </distributed-cache> </cache-container> } 242

206 Clustering en Entities (1) Las Entidades no proporcionan servicios remotos como los session beans por lo que no utilizan balanceo de carga o replicación de sesión. La persistencia JPA de los EJB 3.0 en JBoss AS 7 / WildFly se basa en la framework Hibernate. Dispone de una caché de segundo nivel cuya misión es la de guardar entidades o colecciones localmente obtenidos de la base de datos o mantener los resultados de una consulta reciente. Para habilitar el segundo nivel de caché, es necesario agregar algunas propiedades. Si utilizamos JPA para acceder al segundo nivel, hay que modificar persistence.xml. Ejemplo: <shared-cache-mode>enable_selective</shared-cache-mode> <properties> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_minimal_puts" value="true"/> </properties> 243

207 Clustering en Entities (2) Ejemplo: Configuración necesaria para usar Infinispan como proveedor de caché para aplicaciones nativas con Hibernate (fichero hibernate.cfg.xml). <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.jndiinfinispanregionfactory"/> <property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/hibernate"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.jbosstransactionmanagerlookup"/> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_minimal_puts" value="true"/> 244

208 Clustering en Entities (3) A menos que nose haya configurado shared-cache-mode a ALL, Hibernate no cachea los Entity de forma automática. El desarrollador debe indicar que Entities o consultas necesitan ser cacheadas. Ejemplo: Cachando un Entity. import javax.persistence.*; import org.hibernate.annotations.cache; import @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region="properties") public class private String private String value; // Getter & setters omitted for brevity } 245

209 Clustering en Entities (4) La caché de consultas mantiene los datos de una consulta eliminando carga de trabajo a la base de datos. Ejemplo: Cacheando name = "listusers", query = "FROM User c WHERE c.name = :name", hints = = "org.hibernate.cacheable", value = "true") } ) }) public class private String private String name;... } 246

210 Clustering de aplicaciones web Es necesario añadir la siguiente directiva al fichero web.xml de la aplicación web: Ejemplo: <jboss-web> <replication-config> <cache-name>web.dist</cache-name> <web-app> </replication-config> <distributable/> </jboss-web> </web-app> Por defecto, una aplicación web utiliza la caché web definida en Infinispan. Sin embargo, podemos asignar otra caché por unidad de despliegue con el fichero jboss-web.xml. Ejemplo: Caché definida en el fichero de configuración del servidor. <cache-container name="web" defaultcache="repl"> <alias>standard-session-cache</alias> <distributed-cache mode="async" name="web.dist" batching="true"> <locking isolation="repeatable_read"/> <file-store/> </distributed-cache> </cache-container> 247

211 JBoss AS 7 / WildFly Balanceo de carga de aplicaciones web 273

212 Introducción Motivos para colocar el servidor web Apache delante de JBoss AS / WildFly: Mejor rendimiento al servir contenidos estáticos. Reutilización de los módulos de Apache (mod_php, mod_ssl,...). Gestiona el balanceo de carga a través de los conectores mod_jk / mod_proxy / mod_cluster. Conectores utilizados en la integración Apache y JBoss AS / WildFly: Librerías mod_jk y mod_proxy de Apache. Proyecto mod_cluster de JBoss (recomendado). 274

213 Conector mod_jk (1) Paso 1: 1 Descargar Apache 2 e instalar. Paso 2: 2 Descargar e instalar mod_jk 1.2.x Accesible en Paso 3: 3 Comprobar que el fichero APACHE_HOME/conf/httpd.conf contiene la siguiente directiva: # # Load config files from the config directory "/etc/httpd/conf.d". # Include conf.d/*.conf 275

214 Conector mod_jk (2) Paso 4: 4 Crear la configuración mod_jk. Crear el fichero APACHE_HOME/conf.d/mod-jk.conf. # Load mod_jk module # Update this path to match your modules location LoadModule jk_module modules/mod_jk.so # Where to put jk shared memory # Update this path to match your local state directory or logs directory JkShmFile # Where to put jk logs # Update this path to match your logs directory location (put mod_jk.log next to access_log) JkLogFile # Declare the module for <IfModule directive> (remove this line on Apache 2.x) #AddModule mod_jk.c # Update this path to match your conf directory location (put workers.properties next to httpd.conf) JkWorkersFile /etc/httpd/conf/workers.properties /var/log/httpd/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel # Where to find workers.properties /var/log/httpd/mod_jk.shm info # Select the timestamp log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # Send everything for context /examples to worker named worker1 (ajp13) JkMount /app/* worker1 276

215 Conector mod_jk (3) Paso 5: 5 Configurar los workers mod_jk. Crear el fichero APACHE_HOME/conf/worker.properties: # Define 1 real worker using ajp13 worker.list=el worker using ajp13 worker.list=worker1 # Set properties for worker1 (ajp13) worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=

216 Conector mod_jk (4) Paso 6: 6 Configurar JBoss AS a través del fichero de configuración del servidor. Hablitar el puerto 8009 de escucha del protocolo AJP: <socket-binding-group name="standard-sockets" default-interface="public" port-offset="$ {jboss.socket.binding.port-offset:0}"> Habilitar el conector AJP en JBoss AS ya que por defecto no está incorporado: <socket-binding name="http" port="8080"/> <socket-binding name="ajp" port="8009"/> <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false"> Configuramos el worker en jvmroute: <connector name="http" protocol="http/1.1" scheme="http" socket-binding="http"/>... </extensions> <connector name="ajp" protocol="ajp/1.3" scheme="http" socket-binding="ajp" enabled="true"/> <system-properties> <virtual-server name="default-host" enablewelcome-root="true"> <property name="jvmroute" value="worker1"/> <alias name="localhost"/> <alias name="example.com"/> </system-properties> Paso 7: Rearrancar Apache. Paso 8: Rearrancar JBoss AS. </virtual-server> </subsystem> 278

217 Conector mod_jk (4) Paso 6: 6 Configurar WildFly a través del fichero de configuración del servidor. <socket-binding-group name="standard-sockets" default-interface="public" port-offset="$ {jboss.socket.binding.port-offset:0}"> Los perfiles ha y full-ha ya tienen configurado el conector ajp. Hablitar el puerto 8009 de escucha del protocolo AJP: <socket-binding name="http" port="8080"/> <subsystem xmlns="urn:jboss:domain:undertow:1.1"> <buffer-cache name="default"/> <socket-binding name="ajp" port="8009"/> <server name="default-server"> Configuramos el worker en jvmroute: <http-listener name="default" socketbinding="http"/>... </extensions> <ajp-listener name="ajp" socket-binding="ajp"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <system-properties> <filter-ref name="server-header"/> <property name="jvmroute" value="worker1"/> <filter-ref name="x-powered-by-header"/> </system-properties> </host> </server> Paso 7: Rearrancar Apache. Paso 8: Rearrancar WildFly. 279

218 Conector mod_proxy - HTTP (1) El módulo mod_proxy utiliza el protocolo HTTP para redireccionar peticiones de Apache a JBoss AS. LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so A partir de Apache 1.3. # # Load config files from the config directory "/etc/httpd/conf.d". Paso 1: 1 Descargar Apache2 Web Server e instalar. Paso 2: 2 Comprobar que el fichero APACHE_HOME/conf/httpd.conf contiene las siguientes directivas: # Include conf.d/*.conf Paso 3: 3 Crear el fichero /etc/httpd/conf.d/mod_proxy_http.conf: ProxyPass /app ProxyPassReverse /app ajp://localhost:8080/app 280

219 Conector mod_proxy - AJP (1) El módulo mod_proxy utiliza el protocolo HTTP para redireccionar peticiones de Apache a JBoss AS. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so A partir de Apache 2.2. # # Load config files from the config directory "/etc/httpd/conf.d". Paso 1: 1 Descargar Apache2 Web Server e instalar. # Include conf.d/*.conf Paso 2: 2 Comprobar que el fichero APACHE_HOME/conf/httpd.conf contiene las siguientes directivas: LoadModule proxy_module modules/mod_proxy.so Paso 3: 3 Crear el fichero /etc/httpd/conf.d/mod_proxy_ajp.conf: ProxyPass /app ajp://localhost:8009/app ProxyPassReverse /app ajp://localhost:8009/app 281

220 Conector mod_proxy - AJP (2) Paso 4: 4 Configurar JBoss AS a través del fichero de configuración del servidor. Habilitar el puerto 8009 de escucha del protocolo AJP: <socket-binding-group name="standard-sockets" default-interface="public" port-offset="$ {jboss.socket.binding.port-offset:0}"> Añadir el conector AJP en JBoss AS ya que por defecto no está incorporado: <socket-binding name="http" port="8080"/> <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false"> <socket-binding name="ajp" port="8009"/> <connector name="http" protocol="http/1.1" scheme="http" socket-binding="http"/> <connector name="ajp" protocol="ajp/1.3" scheme="http" socket-binding="ajp" enabled="true"/> <virtual-server name="default-host" enablewelcome-root="true"> Paso 5: Rearrancar Apache. Paso 6: Rearrancar JBoss AS. <alias name="localhost"/> <alias name="example.com"/> Deshabilitar el puerto 8080 si sólo se desea acceder vía AJP. </virtual-server> </subsystem> 282

221 Conector mod_proxy - AJP (2) Paso 4: 4 Configurar WildFly a través del fichero de configuración del servidor. <socket-binding-group name="standard-sockets" default-interface="public" port-offset="$ {jboss.socket.binding.port-offset:0}"> Añadir el conector AJP en JBoss AS ya que por defecto no está incorporado: Habilitar el puerto 8009 de escucha del protocolo AJP: <socket-binding name="http" port="8080"/> <subsystem xmlns="urn:jboss:domain:undertow:1.1"> <buffer-cache name="default"/> <socket-binding name="ajp" port="8009"/> <server name="default-server"> <http-listener name="default" socketbinding="http"/> <ajp-listener name="ajp" socket-binding="ajp"/> Deshabilitar el puerto 8080 si sólo se desea acceder vía AJP. <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> Paso 5: Rearrancar Apache. Paso 6: Rearrancar WildFly. </host> </server> 283

222 Comparativas Cuando usar mod_jk o mod_proxy como balanceador de carga: El balanceo de carga es más sencillo de configurar con mod_proxy que con mod_jk. mod_proxy funciona bien con Apache HTTP v2.2.2 o superior; no utilizarlo con versiones anteriores. mod_jk es más antiguo por lo que está más testeado que mod_proxy. mod_proxy_http no reenvía la información SSL a Tomcat. mod_proxy permite utilizar HTTPS entre Apache y Tomcat. Cuando usar el balanceo de carga mod_proxy+mod_proxy_http y mod_proxy+mod_proxy_ajp: mod_proxy+mod_proxy_ajp AJP es binario por lo que se guardan las transmisiones. Tomcat gestiona AJP de una forma más eficiente y rápida que HTTP. Sin embargo, mod_proxy_http implementa en la actualidad pool de conexiones y balanceo de carga por lo que uno necesita testear ambas configuraciones antes de decidir. 284

223 Conector mod_cluster (1) El módulo mod_cluster es un balanceador de carga basado en el protocolo HTTP que incluye una mejora en la gestión y configuración de los nodos. Paso 1: 1 Descargar Apache2 Web Server e instalar Paso 2: Descargar mod_cluster e instalar. Obtener el proyecto binario en Descomprimir y copiar las librerías en el directorio modules de Apache. 285

224 Conector mod_cluster (2) Paso 3: 3 Configurar Apache para usar mod_cluster. Crear el fichero APACHE_HOME/conf.d/mod_cluster.conf y habilitar los siguientes módulos: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule slotmem_module modules/mod_slotmem.so LoadModule manager_module modules/mod_manager.so LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule advertise_module modules/mod_advertise.so 286

225 Conector mod_cluster (3) Paso 4: 4 Configurar el balanceador de carga. Configuramos el balanceador en el fichero APACHE_HOME/conf.d/mod_cluster.c onf : Opcionalmente, podemos agregar la gestión web del módulo: <Location /mod_cluster-manager> SetHandler mod_cluster-manager Order deny,allow Listen :8888 Allow from all <VirtualHost :8888> </Location> <Location /> Order deny,allow Deny from all Allow from Paso 5: 5 Rearrancar Apache. </Location> KeepAliveTimeout 60 MaxKeepAliveRequests 0 ManagerBalancerName mycluster ServerAdvertise On </VirtualHost> 287

226 Conector mod_cluster (4) El conector mod_cluster puede gestionarse con CLI. El comando list-proxies muestra los hostnames de los proxies conectados: Ejemplo: El comando read-proxies obtiene información de los proxies. Ejemplo: subsystem=modcluster] :read-proxies-info { "outcome" => "success", subsystem=modcluster] :list-proxies "result" => [ { "neodoo1:8888", "outcome" => "success", "result" => [ ", "neodoo1:8888", "neodoo2:8888", "neodoo2:8888" ]... " } ] } 289

227 Conector mod_cluster (5) El comando add-proxy añade un proxy. Ejemplo: El comando remove-proxy elimina un proxy. Ejemplo: subsystem=modcluster] :add-proxy(host=neodoo1, port=8888) subsystem=modcluster] :removeproxy(host=neodoo1, port=8888) {"outcome" => "success"} {"outcome" => "success"} 290

228 Conector mod_cluster (6) El comando enable-context habilita un contexto web. Ejemplo: El comando disable-context deshabilita un contexto web. Ejemplo: subsystem=modcluster] :enablecontext(context=/neodoo-app, virtualhost=defaulthost) subsystem=modcluster] :disablecontext(context=/neodoo-app, virtualhost=defaulthost) {"outcome" => "success"} {"outcome" => "success"} El comando stop-context detiene un contexto web. Ejemplo: subsystem=modcluster] :stopcontext(context=/neodoo-app, virtualhost=defaulthost, waittime=50) {"outcome" => "success"} 291

229 Conector mod_cluster (7) Ejemplo: Testear la arquitectura montada con mod_cluster. Crear la aplicación web balancer.war con la siguiente página index.jsp. <% Integer counter = (Integer)session.getAttribute("counter"); if (counter == null) { session.setattribute("counter",new Integer(1)); } else { session.setattribute("counter",new Integer(counter+1)); } System.out.println("Counter"+session.getAttribute("counter")); out.println("counter "+session.getattribute("counter")); %> Apuntar a la dirección en 292

230 Conector mod_cluster (8) Ejemplo: Utilizar Jmeter para testear la arquitectura anterior. Descargar el proyecto de Crear un Thread Group: Indicar Name (Thread Group) y Number of Threads (100). Crear un elemento HTTP Request: Indicar Name (HTTP Request), Server Name o IP ( ), Port Number (8888) y Path (balancer). Añadir un elemento Listener para recolectar los resultados en una tabla / gráfica. Desde el menú principal ir a Run -> Start. 293

231 Conector mod_cluster (9) Por defecto, mod_cluster contiene unas métricas definidas: <subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <mod-cluster-config advertise socket="modcluster"> Sin embargo, pueden personalizarse las métricas incorporando el elemento dynamic-load-provider. Ejemplo : <subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <dynamic-load-provider> <mod-cluster-config advertisesocket="mod_cluster"> <load-metric type="busyness"/> </dynamic-load-provider> <dynamic-load-provider history="10" decay="2"> </mod-cluster-config> <load-metric type="cpu" weight="2" capacity="1"/> </subsystem> El mapeo de puertos del módulo se encuentra por defecto configurado de la siguiente forma: <load-metric type="sessions" weight="1" capacity="512"/> </dynamic-load-provider> <socket-binding name="modcluster" port="0" multicast-address=" " multicastport="23364"/> </mod-cluster-config> </subsystem> 294

232 Conector mod_cluster (9) Por defecto, mod_cluster contiene unas métricas definidas: <subsystem xmlns="urn:jboss:domain:modcluster:1.2"> <mod-cluster-config advertise-socket="modcluster" connector="ajp"> <dynamic-load-provider> Sin embargo, pueden personalizarse las métricas incorporando el elemento dynamic-load-provider. Ejemplo : <subsystem xmlns="urn:jboss:domain:modcluster:1.2"> <mod-cluster-config advertise-socket="modcluster" connector="ajp"> <load-metric type="cpu"/> </dynamic-load-provider> <dynamic-load-provider history="10" decay="2"> </mod-cluster-config> <load-metric type="cpu" weight="2" capacity="1"/> </subsystem> El mapeo de puertos del módulo se encuentra por defecto configurado de la siguiente forma: <load-metric type="sessions" weight="1" capacity="512"/> </dynamic-load-provider> <socket-binding name="modcluster" port="0" multicast-address=" " multicastport="23364"/> </mod-cluster-config> </subsystem> 295

233 Conector mod_cluster (10) Las métricas pueden gestionarse a través del fichero de configuración. Ejemplo: Personalización del balanceo de carga con atributos dinámicos. <subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <mod-cluster-config advertise-socket="mod_cluster"> <dynamic-load-provider history="10" decay="2"> <load-metric type="cpu" weight="2" capacity="1"/> <load-metric type="sessions" weight="1" capacity="512"/> </dynamic-load-provider> </mod-cluster-config> </subsystem> 296

234 Conector mod_cluster (11) Las métricas pueden también manipularse directamente a través de la interfaz CLI. "load-metric" => [{ "type" => "cpu" }] Ejemplo: Agregar métricas: } } subsystem=modcluster] :add-metric(type=cpu) } {"outcome" => "success"} subsystem=modcluster] :read-resource(name=modcluster-config) Ejemplo: Eliminar métricas: subsystem=modcluster] :remove-metric(type=cpu) { "outcome" => "success", {"outcome" => "success"} "result" => { "dynamic-load-provider" => { "history" => 9, "decay" => 2, 297

235 Conector mod_cluster (12) Ejemplo: Ajustar las métricas de dos servidores. Modificamos el fichero de configuración en ambos: Ejemplo: Cambios sobre el ejercicio anterior: <subsystem xmlns="urn:jboss:domain:modcluster:1.0"> Modificar el primer servidor: <load-metric type="heap" weight="2" capacity="512"/> <mod-cluster-config advertisesocket="mod_cluster"> Modificar el segundo servidor: <load-metric type="heap" weight="2" capacity="1"/> <dynamic-load-provider history="10" decay="2"> <load-metric type="heap" weight="2" /> Ver comportamiento a través de las trazas de la consola. <load-metric type="mem" weight="1" /> <load-metric type="cpu" weight="1" /> </dynamic-load-provider> </mod-cluster-config> </subsystem> Ver comportamiento a través de las trazas de la consola. 298

236 JBoss AS 7 / WildFly Automatización IT 299

237 Ansible (1) Ansible es una herramienta que permite configurar sistemas, desplegar software y automatizar otras tareas de infraestructura. Website del proyecto en Mayor facilidad de uso con respecto a otras herramientas similares (Chef, Puppet, ). Instalación vía Yum (CentOS) : Instalación vía Apt (Ubuntu) : # Instalamos Extra Packages for Enterprise Linux (EPEL) $ sudo apt-get install software-propertiescommon $ sudo yum install ansible $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible 300

238 Ansible (2) Ejemplo: Despliegue de un servidor Jboss AS 7 / WildFly en modo standalone. Paso 1: 1 Descargar el playbook y ajustar los parámetros. Paso 2: 2 Preparamos los servidores a gestionar con Ansible: Generamos la clave ssh en el nodo maestro. ssh-keygen -t rsa -C Copiamos la clave pública en todos los servidores: ssh-copy-id ssh-copy-id Comprobamos la conectividad a los servidores: ansible all -m ping Paso 3: 3 Ejecutar el playbook. 301

239 JBoss AS 7 / WildFly Computación en la Nube 302

240 Cloud Computing La computación en la nube (Cloud computing) es un paradigma que permite ofrecer servicios de computación a través de Internet. Autor: Oliver Widder Licencia Creative Commons 303

241 Cloud Computing Capas de la nube: IaaS (infrastructure as a service): Orientado al desarrollador. PaaS PaaS (Platform as a service): Infraestructura de computación y almacenamiento. SaaS Entorno de desarrollo y ejecución de la aplicación. Orientado al desarrollador. IaaS Virtualización SaaS (Software as a service): Aplicaciones en entorno web. Orientado al cliente final. Hardware 304

242 PaaS PaaS (Platform as a Service) es la capa intermedia entre IaaS y SaaS que ofrece una plataforma de computación para el desarrollo y ejecución de aplicaciones. Ventajas: El desarrollador puede disponer de forma inmediata de la plataforma y exclusivamente en el código de la aplicación. El proveedor PaaS gestiona la escalabilidad, fiabilidadm parches y actualizaciones de la plataforma. Entorno de desarrollo centrarse Entorno de ejecución PaaS 305

243 Algunos proveedores PaaS Amazon: Líder en IaaS cuyos productos más conocidos son EC2 (Elastic Compute Cloud) y S3 (Simple Storage Service). AWS Elastic Beanstalk es la plataforma PaaS para desplegar y gestionar aplicaciones web en Java sobre la nube AWS. Google: Google App Engine: Pila completa de desarrollo para crear y alojar aplicaciones web escalables en Java y Python sobre la infraestructura Google. CloudBees: Permite construir, testear y desplegar aplicaciones web en Java en la nube a través de las plataformas y 306

244 Infraestructura (1) El proyecto CirrAS (http://www.jboss.org/stormgrind/projects/cirras) es un conjunto de proyectos que permiten el despliegue automático de un servidor JBoss AS en cluster. Construido utilizando el proyecto BoxGrinder (http://boxgrinder.org), CirrAS se compone de las aplicaciones front-end, back-end y gestión. OpenShift es una plataforma para el despliegue y gestión de aplicaciones Java EE en servidores JBoss AS 7 funcionando en la Nube. Es una solución PaaS para ejecutar aplicaciones CDI y está previsto soportar Java EE

245 Infraestructura (2) OpenShift ofrece dos tipos de servicios para el despliegue de aplicaciones Java en la Nube: Express: Es una plataforma gratuita basada en cloud para desplegar aplicaciones Java EE, Ruby, PHP y Python. Flex: Es una plataforma basada en cloud para aplicaciones Java EE y PHP que puede ser desplegada en un alojamiento dedicado. 308

246 Ejercicio (1) Paso 1: 1 Crear una cuenta para utilizar OpenShift Express. Registro en https://openshift.redhat.com/app/user/new/express Paso 2: 2 Instalar las herramientas cliente de OpenShift. En el caso de RedHat / Fedora / CentOS: fsolans]# wget https://openshift.redhat.com/app/repo/openshift.repo fsolans]# sudo mv openshift.repo /etc/yum.repos.d/ fsolans]# yum install rhc En el caso de Ubuntu: sudo apt-get install ruby-full rubygems git-core sudo gem install rhc Paso 3: 3 Crear un dominio OpenShift Express. Es necesario disponer de un dominio antes de crear una aplicación; la sintáxis de la aplicación será applicationnamedomainname.rhcloud.com. fsolans]# rhc domain create -n fsolans -l -p xxx 309

247 Ejercicio (2) 310

248 Ejercicio (3) Paso 4: 4 Creamos la aplicación kitchensink sobre OpenShift Express. ~]# rhc app create -a kitchensink -t jbossas-7 Paso 5: Descargar el proyecto kitchensink del repositorio git. ~]# cd kitchensink kitchensink]# git remote add upstream -m master git://github.com/openshift/kitchensink-example.git kitchensink]# git pull -s recursive -X theirs upstream master Paso 6: 6 Desplegar el proyecto en la Nube. kitchensink]# git push Paso 7: 7 Acceder a la aplicación mediante la URL 311

249 Ejercicio (4) 312

SIGES. Requerimientos Técnicos y Manual de Instalación

SIGES. Requerimientos Técnicos y Manual de Instalación SIGES Requerimientos Técnicos y Manual de Instalación Siges Manual Técnico Página 2 Índice 1 Requerimientos Técnicos... 5 1.1 Requerimientos de Hardware... 5 1.2 Red... 5 1.3 Requerimientos de Software...

Más detalles

Instalación de Servidor de Aplicaciones - JBoss. Por: Carlos Carreño V. ccarreno@jbossperu.org

Instalación de Servidor de Aplicaciones - JBoss. Por: Carlos Carreño V. ccarreno@jbossperu.org Instalación de Servidor de Aplicaciones - JBoss Por: Carlos Carreño V. ccarreno@jbossperu.org Introducción JBoss AS es un contenedor de aplicaciones J2EE EJB 2.1/3.0 y componentes Web Soporte de Clustering

Más detalles

JAVA EE 5. Arquitectura, conceptos y ejemplos.

JAVA EE 5. Arquitectura, conceptos y ejemplos. JAVA EE 5. Arquitectura, conceptos y ejemplos. INTRODUCCIÓN. MODELO DE LA APLICACIÓN JEE5. El modelo de aplicación Java EE define una arquitectura para implementar servicios como lo hacen las aplicaciones

Más detalles

Tema 5. Plataforma Java EE

Tema 5. Plataforma Java EE Tema 5. Plataforma Java EE SCS Sistemas Cliente/Servidor 4 o informática http://ccia.ei.uvigo.es/docencia/scs septiembre 2011 FJRP, FMBR 2008-2011 ccia SCS 5.1 Introducción a Java EE Java EE (Java Enterprise

Más detalles

Aplicaciones web construidas a base de componentes:

Aplicaciones web construidas a base de componentes: Java EE Aplicaciones Web/Sistemas Web Juan Pavón Mestras Dep. Ingeniería del Software e Inteligencia Artificial Facultad de Informática Universidad Complutense Madrid Material bajo licencia Creative Commons

Más detalles

1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server

1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server Requisitos Versión 1.5 (o superior) de la JDK de Java NetBeans 6 como IDE de desarrollo JBoss 4.2.x como Application Server Variable de entorno de Windows JAVA_HOME apuntando al directorio de instalación

Más detalles

Curso de Java EE Todos los Derechos Reservados Global Mentoring Experiencia y Conocimiento para tu Vida 1

Curso de Java EE Todos los Derechos Reservados Global Mentoring Experiencia y Conocimiento para tu Vida 1 1 Los Enterprise Java Beans (EJB) es código Java del lado del Servidor. Normalmente tienen la lógica de negocio de nuestra aplicación, y por lo tanto cubren el rol de la capa de servicio de nuestras aplicaciones

Más detalles

1. Definición. Open Source. Escalable. Alto desempeño. Arquitectura Modular. Producto de licencia de código abierto sin coste adicional.

1. Definición. Open Source. Escalable. Alto desempeño. Arquitectura Modular. Producto de licencia de código abierto sin coste adicional. 1. Definición JBoss es un proyecto de código abierto, con el que se consigue un servidor de aplicaciones basado en J2EE, e implementado al 100% en Java. Por lo tanto al estar basado en Java, JBoss puede

Más detalles

Understanding JBoss EAP 6

Understanding JBoss EAP 6 Understanding JBoss EAP 6 Introducción a JEE Que es JEE? Arquitectura Java Empresarial. Define un modelo de aplicaciones distribuidas en diversas capas (tiers). Capa cliente: o capa WEB. Es dónde suele

Más detalles

JavaEE. www.javasoft.com

JavaEE. www.javasoft.com JavaEE Java Enterprise Edition www.javasoft.com Por qué Java en el servidor? Ventajas Independencia de la plataforma portabilidad Gran conjunto de APIs Reusabilidad y modularidad Seguro en la ejecución

Más detalles

Tema 5. Plataforma Java EE

Tema 5. Plataforma Java EE Tema 5. Plataforma Java EE SCS Sistemas Cliente/Servidor 4 o informática http://ccia.ei.uvigo.es/docencia/scs enero 2009 FJRP, FMBR 2008/09 ccia SCS 5.1 Introducción a Java EE Java EE (Java Enterprise

Más detalles

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1)

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1) TECNOLOGÍAS (1/2) (L1) EJB ( Enterprise Java Beans ) JSP ( Java Server Pages ) JNDI ( Java Naming and Directory Interface ) JDBC ( Java Data Base Connectivity ) Java Mail JSF ( Java Server Faces ) TECNOLOGÍAS

Más detalles

Técnico Superior en Programación con Java SE Standard Edition

Técnico Superior en Programación con Java SE Standard Edition Código: M087_04 Técnico Superior en Programación con Java SE Standard Edition Modalidad: Distancia Duración: 120 horas Objetivos: Este pack de materiales formativos proporcionará al alumnado la base que

Más detalles

Universidad ORT - Arquitectura de Software. Requisitos

Universidad ORT - Arquitectura de Software. Requisitos Requisitos Versión 1.5 (o superior) de la JDK de Java NetBeans 6.5 como IDE de desarrollo JBoss 4.2.x como Application Server Variable de entorno de Windows JAVA_HOME apuntando al directorio de instalación

Más detalles

Curso: Programación con JAVA SE Estándar Edition.

Curso: Programación con JAVA SE Estándar Edition. Curso: Programación con JAVA SE Estándar Edition. Código: 1062 Familia Profesional: Programación. Acreditación: Formación reconocida a través de vías no formales Modalidad: Distancia Duración: 150 horas

Más detalles

Caso J2EE. Necesidades del negocio. Arquitectura Luther

Caso J2EE. Necesidades del negocio. Arquitectura Luther Caso J2EE Grupo de Construcción de Software Facultad de Ingeniería Universidad de los Andes Necesidades del negocio Describa el objetivo funcional del sistema que desea Inmedius Enumere los RNF que debe

Más detalles

Desarrollo y servicios web Sesión 18

Desarrollo y servicios web Sesión 18 Desarrollo y servicios web Sesión 18 Luisa Fernanda Rincón Pérez 2014-2 Qué son los patrones arquitectónicos? Definen la estructura de la solución al mas alto nivel. Por esto es lo primero que se tiene

Más detalles

Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1. Gerardo Lecaros Felipe Díaz

Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1. Gerardo Lecaros Felipe Díaz Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1 Gerardo Lecaros Felipe Díaz Problemática Petición de salas de forma tradicional Solución J2EE Java 2 Platform, Enterprise Edition

Más detalles

Notas técnicas de JAVA Nro. 7 Tip Breve

Notas técnicas de JAVA Nro. 7 Tip Breve Notas técnicas de JAVA Nro. 7 Tip Breve (Lo nuevo, lo escondido, o simplemente lo de siempre pero bien explicado) Tema: JAVA Basics: Diferencias conceptuales entre JavaBeans y Enterprise JavaBeans (EJB)

Más detalles

Curso de Java EE Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1

Curso de Java EE Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1 Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1 Vivimos en un mundo globalizado, donde la eficiencia y productividad de las empresas es un factor crucial para

Más detalles

Desarrollo de Aplicaciones Web con Eclipse

Desarrollo de Aplicaciones Web con Eclipse Desarrollo de Aplicaciones Web con Eclipse Oscar Gosdinski Software Services Representative Java Es un lenguaje de programación y una plataforma de desarrollo. 2 Lenguaje de alto nivel que puede ser caracterizado

Más detalles

Tema 3. Plataforma Java EE

Tema 3. Plataforma Java EE Tema 3. Plataforma Java EE DAGSS Diseño de Arquitecturas de Grandes Sistemas Software 4 o Grado Ing. Informática http://ccia.ei.uvigo.es/docencia/dagss noviembre 2014 FJRP 2014 DAGS 3.1 Introducción a

Más detalles

Requisitos técnicos para la instalación. Arquitectura Hardware Arquitectura Software. Instrucciones de instalación GONG-R

Requisitos técnicos para la instalación. Arquitectura Hardware Arquitectura Software. Instrucciones de instalación GONG-R v 3 Junio 2015 ÍNDICE Introducción Requisitos técnicos para la instalación Arquitectura Hardware Arquitectura Software Instrucciones de instalación Instalación módulo GONG2 Instalación módulo eporte Instrucciones

Más detalles

Toda la información de instalación se puede encontrar en el fichero "install.log".

Toda la información de instalación se puede encontrar en el fichero install.log. MAST STORAGE Instalación Linux 1. Descargue el archivo de instalación (obm-nix.tar.gz) y ejecútelo. 2. Descomprima el fichero de instalación en /usr/local/obm mkdir /usr/local/obm cd /usr/local/obm gunzip

Más detalles

Desarrollo de Aplicaciones web con JPA, EJB, JSF y PrimeFaces

Desarrollo de Aplicaciones web con JPA, EJB, JSF y PrimeFaces Desarrollo de Aplicaciones web con JPA, EJB, JSF y PrimeFaces Fernando Pech-May 1, Mario A. Gomez-Rodriguez 1, Luis A. de la Cruz-Diaz 1, Salvador U. Lara-Jeronimo 1 1 Instituto Tecnológico Superior de

Más detalles

II Curso Online JAVA-J2EE

II Curso Online JAVA-J2EE II Curso Online JAVA-J2EE TEMA 3 Introducción a J2EE Autor: PCYTA / Centro de Excelencia de Software Libre de Castilla-La Mancha Versión: 1.0 Fecha: Revisado 13-02-2008 23:56 Licencia: CC-by-sa 2.5 0 Licencia

Más detalles

PROGRAMA FORMATIVO. Administración y Desarrollo de Servidor de Aplicaciones Red Hat JBoss

PROGRAMA FORMATIVO. Administración y Desarrollo de Servidor de Aplicaciones Red Hat JBoss PROGRAMA FORMATIVO Administración y Desarrollo de Servidor de Aplicaciones Red Hat JBoss Septiembre 2014 DATOS GENERALES DE LA ESPECIALIDAD 1. Familia Profesional: INFORMÁTICA Y COMUNICACIONES Área Profesional:

Más detalles

Toda nuestra Experiencia a tu alcance

Toda nuestra Experiencia a tu alcance Informática y Administración y Desarrollo de Servidor de Aplicaciones Red Hat JBoss Con este curso aprenderás a realizar eficazmente tareas de administración del servidor de aplicaciones JBoss, entre ellas

Más detalles

Certificaciones: Diploma de Aprobación en Desarrollo Web con Java.

Certificaciones: Diploma de Aprobación en Desarrollo Web con Java. DIPLOMATURA EN DESAR ROLLO DE APLICACIONE S WEB CON JAVA PARTE I: OBJETIVOS ESPECÍFICOS La Diplomatura en Desarrollo de Aplicaciones Web con Java tiene los siguientes objetivos específicos: Adquirir habilidad

Más detalles

Tema 1: Introducción a las Tecnologías Java

Tema 1: Introducción a las Tecnologías Java Tema 1: Introducción a las Tecnologías Java Índice Características de las aplicaciones empresariales Tecnologías Java Alternativas a las tecnologías Java XML Material de clase Características de las aplicaciones

Más detalles

Guía de Instalación Abril-2009

Guía de Instalación Abril-2009 Antes que empiece a copiar datos en el servidor de copia el servidor MBO (el servidor MBO), necesita instalar MBO Manager (MBO) en su ordenador. Instalar MBO en Windows Siga les instrucciones del asistent

Más detalles

Módulo Superior de Diseño de Aplicaciones Web. Despliegue de Aplicaciones Web Tarea 3 José Luis Comesaña Cabeza

Módulo Superior de Diseño de Aplicaciones Web. Despliegue de Aplicaciones Web Tarea 3 José Luis Comesaña Cabeza Módulo Superior de Diseño de Aplicaciones Web Despliegue de Aplicaciones Web Tarea 3 José Luis Comesaña Cabeza Diciembre de 2012 1. Una aplicación web puede ser desplegada en diferentes servidores web

Más detalles

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura Desarrollo de Proyectos en en el Gobierno de Extremadura Página 1 de 10 Control de versiones Núm Fecha Descripción Autores 1.0 01/09/2012 Estandar para el desarrollo de portales con el gestor de contenidos

Más detalles

Middleware dotcms. Sara Estellés. José M. Gómez. Universidad de Alicante. Informe Técnico LegoLangUAge 02/2013

Middleware dotcms. Sara Estellés. José M. Gómez. Universidad de Alicante. Informe Técnico LegoLangUAge 02/2013 Informe Técnico LegoLangUAge 02/2013 Middleware dotcms Sara Estellés José M. Gómez Universidad de Alicante Grupo de Investigación en Procesamiento del Lenguaje Natural y Sistemas de Información Contenido

Más detalles

Requisitos técnicos para la instalación. Arquitectura Hardware Arquitectura Software. Instrucciones de instalación GONG-R

Requisitos técnicos para la instalación. Arquitectura Hardware Arquitectura Software. Instrucciones de instalación GONG-R ÍNDICE Introducción Requisitos técnicos para la instalación Arquitectura Hardware Arquitectura Software Instrucciones de instalación GONG-R Instalación módulo GONG2 Instalación módulo GONG-Reporte Instrucciones

Más detalles

Proyecto Fin de Carrera de Daniel Prado Rodríguez

Proyecto Fin de Carrera de Daniel Prado Rodríguez Marco Conceptual para la Gestión de Conocimiento de entornos de colaboración: aplicación a la creación 391 INDICE 7 Manual de Instalación...393 7.1 Introducción...393 7.2 J2SDK...393 7.3 Kawa...394 7.4

Más detalles

Profesor: José Luis Montoya Restrepo

Profesor: José Luis Montoya Restrepo Profesor: José Luis Montoya Restrepo Caso de Estudio: Escalando el modelo de autenticación síncrono a través de la mensajería. Arquitectura común para aplicaciones Web Autenticación síncrona Escalar horizontalmente

Más detalles

Facultad de Sistemas e Informática

Facultad de Sistemas e Informática Escuela Politécnica del Ejército Sede Latacunga Facultad de Sistemas e Informática Galarza Maira Tapia Cevallos Paulina DESARROLLO DE APLICACIONES DISTRIBUIDAS UTILIZANDO PATRONES DE DISEÑO MODELO/VISTA

Más detalles

Instrucciones de instalación de IBM SPSS Modeler Server 17 para UNIX

Instrucciones de instalación de IBM SPSS Modeler Server 17 para UNIX Instrucciones de instalación de IBM SPSS Modeler Server 17 para UNIX Contenido Instrucciones para la instalación.... 1 Requisitos del sistema........... 1 Requisitos adicionales.......... 1 Instalación...............

Más detalles

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEBSERVICE

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEBSERVICE ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEBSERVICE Versión 1.8 Área de Aplicaciones Especiales y Arquitectura de Software Hoja de Control Título Documento de Referencia Responsable Manual de usuario del

Más detalles

DIPLOMATURA DESARROLLO DE APLICACIONES JAVA

DIPLOMATURA DESARROLLO DE APLICACIONES JAVA DIPLOMATURA DESARROLLO DE APLICACIONES JAVA Contenidos MÓDULO UNO: Características del Lenguaje. OOP Reconocer las características del lenguaje Java y sus componentes. Distinguir la similitudes y diferencias

Más detalles

Enterprise JavaBeans 3. Aplicaciones Distribuidas

Enterprise JavaBeans 3. Aplicaciones Distribuidas Enterprise JavaBeans 3 Aplicaciones Distribuidas Contenido Introducción Motivación Características básicas Servicios integrados en EJB 3 Ejemplo Hola Mundo Inyección de dependencia Tipos de EJB 3 Conclusiones

Más detalles

[CASI v.0109] Pág. 1

[CASI v.0109] Pág. 1 I. DATOS INFORMATIVOS Carrera Especialidad Curso Código Ciclo : Quinto Requisitos Duración Horas Semana : 08 horas Versión : v.0109 II. SUMILLA : COMPUTACIÓN E INFORMATICA : Ingeniería de Software : Lenguaje

Más detalles

Universidad Tecnológica Nacional FRC DIPLOMATURA SUPERIOR en Desarrollo bajo Plataforma Java EE

Universidad Tecnológica Nacional FRC DIPLOMATURA SUPERIOR en Desarrollo bajo Plataforma Java EE 1. PROPUESTA CURRICULAR 1.a) OBJETIVOS Universidad Tecnológica Nacional FRC DIPLOMATURA SUPERIOR en Desarrollo bajo Plataforma Java EE El curso "Desarrollo bajo Plataforma Java EE" ofrece a los estudiantes

Más detalles

Manual de Instalación y configuración

Manual de Instalación y configuración Manual de Instalación y configuración Proceso de ETL y Transferencia de datos para el sistema de Información Hospitalaria, InfHos Diciembre 2013 Proceso de Extracción, Transformación, Carga y Transferencia

Más detalles

Manual de instalación del servidor Sierra

Manual de instalación del servidor Sierra Manual de instalación del servidor Sierra 1. Contenido y preparación de la instalación...1 2. Instalación de PostgreSQL con PostGIS para el soporte de datos espaciales.... 2 3. Instalación de Apache Geronimo...3

Más detalles

Curso de Jboss Administración

Curso de Jboss Administración Curso de Jboss Administración Este curso está dirigido a gente interesada en la administración de Jboss, el cual nos brindará un soporte robusto para el despliegue de aplicaciones Java, tanto Web como

Más detalles

Programación en Java. Temario. David Contreras Bárcena

Programación en Java. Temario. David Contreras Bárcena Programación en Java David Contreras Bárcena David Contreras Bárcena (ETSI) - Comillas 1 Temario 1. Introducción 1. Lenguaje java 2. Compilador SDK 1.4 3. Sintaxis 4. Tipos de datos 5. Estructuras de Control

Más detalles

Tema 1. Introducción a Java EE

Tema 1. Introducción a Java EE Objetivos del tema Propiedades de las aplicaciones empresariales El Modelo Cliente/Servidor Presentar la Plataforma Java Presentar Java EE y otras tecnologías horizontales Tema 1. Introducción a Java EE

Más detalles

Formación Profesional a Distancia Página 1 de 8. Módulo: Despliegue de Aplicaciones Web (DAW) C.F.G.S. : Desarrollo de Aplicaciones Web

Formación Profesional a Distancia Página 1 de 8. Módulo: Despliegue de Aplicaciones Web (DAW) C.F.G.S. : Desarrollo de Aplicaciones Web INSTRUCCIONES: La puntuación total del examen será de 10 puntos. Parte teórica: 6 puntos. Parte Práctica: 4 puntos. Cada pregunta del examen teórico puntúa 0,2 puntos. Cada dos preguntas mal quita una

Más detalles

Java Web Server Tabla de Contenidos

Java Web Server Tabla de Contenidos Java Web Server Tabla de Contenidos 3. Java Web Server...2 3.1 Conceptos generales... 2 3.2 Elección de servidor Web con capacidad para servlets...3 3.3 Instalación de Tomcat 5... 4 3.3.1 Comienza la instalación...5

Más detalles

DESPLIEGUE DE SENTINET

DESPLIEGUE DE SENTINET DESPLIEGUE DE SENTINET INTRODUCCIÓN Sentinet es una solución que proporciona gestión y gobierno de infraestructuras SOA desplegadas tanto on-premise, en la nube o en entornos híbridos. Sentinet está desarrollada

Más detalles

CentralTECH JAVA EE 7 Desarrollo

CentralTECH JAVA EE 7 Desarrollo CT-2776: de Aplicaciones Sobre este curso El curso está dirigido a profesionales y estudiantes IT que deseen adquirir los conceptos y tecnologías necesarias para implementar aplicaciones Web empresariales

Más detalles

Java y Eclipse. Lenguajes y Entornos de Programación Libre

Java y Eclipse. Lenguajes y Entornos de Programación Libre Java y Eclipse Lenguajes y Entornos de Programación Libre El lenguaje Java Un poco de historia: 1990: James Gosling, responsable de una empresa filial creada por Sun Microsystems, empieza a diseñar Java

Más detalles

'HVDUUROORGH$SOLFDFLRQHV

'HVDUUROORGH$SOLFDFLRQHV 'HVDUUROORGH$SOLFDFLRQHV FRQ-(( $SOLFDFLRQHV'LVWULEXLGDV0XOWLFDSD &RQWHQLGR Plataforma J2EE Aplicaciones Distribuidas multicapa Arquitectura Multicapa Componentes J2EE Componentes de Clientes: aplicaciones

Más detalles

Enterprise JavaBeans

Enterprise JavaBeans Enterprise Java Beans y JBoss Enterprise JavaBeans Es una de las API que forman parte del estándar de construcción de aplicaciones empresariales J2EE (ahora JEE 5.0) de Oracle Corporation (inicialmente

Más detalles

Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos

Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos Sistemas de Información Grado de Informática Dpto. de Informática e Ingeniería

Más detalles

Entorno de desarrollo Instalación y configuración

Entorno de desarrollo Instalación y configuración Entorno de desarrollo Instalación y configuración GExCALL Formación http://gexcall.unex.es/formacion El plugin ADT (Android Development Tools) extiende al IDE Eclipse. Te permite crear y depurar aplicaciones

Más detalles

Introducción al Desarrollo de Aplicaciones Empresariales

Introducción al Desarrollo de Aplicaciones Empresariales Introducción al Desarrollo de Aplicaciones Empresariales Definición Java 2 Enterprise Edition: plataforma de desarrollo de aplicaciones para empresas, basado en EJBs. EJB (Enterprise Java Beans): especificación

Más detalles

Integración de Oracle WebLogic con Oracle Real Application Cluster

Integración de Oracle WebLogic con Oracle Real Application Cluster Oficina de Calidad Subdirección de Tecnologías de la Información Integración de Oracle WebLogic con Oracle Real Application Cluster Referencia documento: InfV5_JASAS_WLS_vs_RAC_V310.doc Fecha: Versión:

Más detalles

Guía de utilización del demostrador cliente de los servicios web de la Plataforma de Contratación del Estado

Guía de utilización del demostrador cliente de los servicios web de la Plataforma de Contratación del Estado Guía de utilización del demostrador cliente de los servicios web de la Plataforma de Contratación del Estado Dirección General del Patrimonio del Estado Subdirección General de Coordinación de la Contratación

Más detalles

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEB PARA PROYECTOS NEXUS

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEB PARA PROYECTOS NEXUS ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEB PARA PROYECTOS NEXUS Versión 1.1 Área de Aplicaciones Especiales y Arquitectura de Software Hoja de Control Título Documento de Referencia Responsable Manual de

Más detalles

MANUAL DE IMPLEMENTACIÓN DEL SISTEMA CRM PARA LA UGC DE LA CNEL REGIONAL MANABÍ

MANUAL DE IMPLEMENTACIÓN DEL SISTEMA CRM PARA LA UGC DE LA CNEL REGIONAL MANABÍ MANUAL DE IMPLEMENTACIÓN DEL SISTEMA CRM PARA LA UGC DE LA CNEL REGIONAL MANABÍ Elaborado por: Juliana Lopez Luis Ulloa Fecha de Publicación: 08/09/2010 Versión: 1.0.1 1 Tabla de Contenido Consideraciones

Más detalles

Qué es Java? Introducción a Java. Lenguajes Orientados a Objetos. Qué es Java? Historia de Java. Objetivos de Java

Qué es Java? Introducción a Java. Lenguajes Orientados a Objetos. Qué es Java? Historia de Java. Objetivos de Java Qué es? Introducción a es Un lenguaje de programación Un entorno de desarrollo Un entorno de ejecución de aplicaciones Un entorno de despliegue de aplicaciones Utilizado para desarrollar, tanto applets

Más detalles

Hands-On Lab. Windows Azure: Java, Eclipse y Azure. Última Actualización: 16/12/2011

Hands-On Lab. Windows Azure: Java, Eclipse y Azure. Última Actualización: 16/12/2011 Hands-On Lab Windows Azure: Java, Eclipse y Azure Última Actualización: 16/12/2011 1 Contenido INTRODUCCIÓN... 3 Objetivos 3 Prerequisitos 4 PREPARANDO EL ENTORNO... 5 Instalar Windows Azure Toolkit para

Más detalles

Servidores de aplicaciones. Sesión 1: Introducción a los servidores de aplicaciones. Instalación de BEA WebLogic

Servidores de aplicaciones. Sesión 1: Introducción a los servidores de aplicaciones. Instalación de BEA WebLogic Servidores de aplicaciones 2003-2004 Depto. Ciencia Computación e IA Introducción a los S.A.-1 Especialista en Aplicaciones y Servicios Web con Java Enterprise Servidores de aplicaciones Sesión 1: Introducción

Más detalles

Taller de Sistemas de Información 2

Taller de Sistemas de Información 2 Taller de Sistemas de Información 2 Mensajeria 6 de Setiembre de 2012 Instituto de Computación Facultad de Ingeniería Universidad de la República de Uruguay Messaging La comunicación que hemos visto hasta

Más detalles

Servidor de mapas en HA con Jboss, Geoserver y PostGIS.

Servidor de mapas en HA con Jboss, Geoserver y PostGIS. Servidor de mapas en HA con Jboss, Geoserver y PostGIS. 30 de marzo de 2015 9ª 9ª Jornadas Jornadas de de SIG SIG Libre, Libre, 2015 2015 Presentación INCLAM: Quienes somos? 3 Y vosotros? David Tabernero

Más detalles

Instrucciones de instalación de IBM SPSS Modeler Server 16 para UNIX

Instrucciones de instalación de IBM SPSS Modeler Server 16 para UNIX Instrucciones de instalación de IBM SPSS Modeler Server 16 para UNIX Contenido Instrucciones para la instalación.... 1 Requisitos del sistema........... 1 Requisitos adicionales.......... 1 Instalación...............

Más detalles

Panorámica de la asignatura

Panorámica de la asignatura Arquitecturas típicas. Mario Muñoz Organero Departamento de Ingeniería Telemática http://www.it.uc3m.es/mario Panorámica de la asignatura RED Comunicaciones Servidores información Intercambio de datos

Más detalles

Herramientas de Programación: Introducción a Unix

Herramientas de Programación: Introducción a Unix Herramientas de Programación: Introducción a Unix Dr. Gregorio Toscano Pulido Laboratorio de Tecnologías de Información Centro de Investigación y de Estudios Avanzados del IPN Cinvestav-Tamaulipas Dr.

Más detalles

Características de OpenCms

Características de OpenCms Características de OpenCms Se basa en Java y Xml OpenCms está totalmente desarrollado en java bajo el estándar servlet. Por lo tanto, se puede integrar fácilmente en entornos hardware y software existentes,

Más detalles

http://www.cem.itesm.mx/extension/ms

http://www.cem.itesm.mx/extension/ms Diplomado Programación orientada a objetos con Java y UML Las empresas necesitan contar con sistemas de información modernos, ágiles y de calidad para alcanzar sus objetivos y ser cada vez más competitivos

Más detalles

INFORME N 028-2012-GTI INFORME TÉCNICO PREVIO DE EVALUACIÓN DE SOFTWARE

INFORME N 028-2012-GTI INFORME TÉCNICO PREVIO DE EVALUACIÓN DE SOFTWARE INFORME N 028-2012-GTI INFORME TÉCNICO PREVIO DE EVALUACIÓN DE SOFTWARE 1. Nombre del Área El área encargada de la evaluación técnica para la adquisición de una plataforma de software escalable de es el

Más detalles

Introducción a JAX-WS Web Services

Introducción a JAX-WS Web Services INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO ALUMNO: SANLUIS CASTILLO JOSE DAVID PROFESOR: CIFUENTES ALVAREZ ALEJANDRO SIGFRIDO MATERIA: WEB APPLICATION DEVEPLOMENT Introducción a JAX-WS

Más detalles

Especialista TIC en Programación con JAVA 8 SE Standard Edition (Online)

Especialista TIC en Programación con JAVA 8 SE Standard Edition (Online) Especialista TIC en Programación con JAVA 8 SE Standard Edition (Online) TITULACIÓN DE FORMACIÓN CONTINUA BONIFICADA EXPEDIDA POR EL INSTITUTO EUROPEO DE ESTUDIOS EMPRESARIALES Especialista TIC en Programación

Más detalles

MOM LSUB. 3 de abril de 2013 GSYC

MOM LSUB. 3 de abril de 2013 GSYC MOM LSUB GSYC 3 de abril de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Oracle WebLogic Server 11g: Tipos de Dominio

Oracle WebLogic Server 11g: Tipos de Dominio Newsletter Mayo 2013 Contenido Oracle WebLogic Server 11g: Tipos de Dominio Página: 1 Modo Producción o Desarrollo Por Ing. Iván García igarcia@datum.com.gt 4 Oracle RAC Cache Coherency Modo Producción

Más detalles

ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS

ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS Versión 1.4 Área de Aplicaciones Especiales y Arquitectura de Software Hoja de Control Título Documento de Referencia Responsable Manual de Usuario NORMATIVA

Más detalles

Diplomado Java Web Programming with Servlets, JSP, JSF & Ajax

Diplomado Java Web Programming with Servlets, JSP, JSF & Ajax Diplomado Java Web Programming with Servlets, JSP, JSF & Ajax Descripción: Por nuestra experiencia de más de 11 años enseñando Java y pioneros en este tipo de Diplomados creamos este entrenamiento. Nuestro

Más detalles

Tema 2: La Tecnología Java

Tema 2: La Tecnología Java Tema 2: La Tecnología Java 0 La Tecnología de Java Es : Un lenguaje de programación Similar a C/C++ sin los problemas de manejo de memoria. Un ambiente de desarrollo Compilador, intérprete, generados de

Más detalles

Tema 1: Introducción a Java EE

Tema 1: Introducción a Java EE Tema 1: Introducción a Java EE Índice Arquitecturas características de las aplicaciones empresariales Tecnologías J2EE Alternativas a J2EE Patrones arquitectónicos Model-View-Controller y Layers Recursos

Más detalles

5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados

5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados 5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados Introducción Qué tipos de EJBs ilustra MiniPortal? Entity Beans CMP (UserProfile) SLSBs

Más detalles

INTRODUCCIÓN A JAVA. Índice

INTRODUCCIÓN A JAVA. Índice INTRODUCCIÓN A JAVA Índice Qué es Java? La plataforma Java 2 La Máquina Virtual de Java Características principales Qué ventajas tengo como desarrollador? Bibliografía 2 1 Qué es Java? La tecnología Java

Más detalles

Servlets. Unidad: 4 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Servlets. Unidad: 4 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Servlets Unidad: 4 Laboratorio de Programación Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Indice Introducción CGI Servlets: concepto, caracteristicas Servlets Vs. CGI Ciclo

Más detalles

Revista Digital Universitaria. 10 de agosto 2004 Volumen 5 Número 7 ISSN: 1067-6079

Revista Digital Universitaria. 10 de agosto 2004 Volumen 5 Número 7 ISSN: 1067-6079 Revista Digital Universitaria 10 de agosto 2004 Volumen 5 Número 7 ISSN: 1067-6079 JAVA o L.I. Anabell Comas Becaria de la Coordinación de Publicaciones Digitales anabell@alethia.dgsca.unam.mx o http://www.revista.unam.mx/vol.7/num12/art104/art104.htm

Más detalles

Sistema de aprendizaje por refuerzo para la mejora del rendimiento del alumno en prácticas

Sistema de aprendizaje por refuerzo para la mejora del rendimiento del alumno en prácticas Memoria resumen del Proyecto de Innovación Docente (PID) Ref.: 52B (periodo 2009-2011) Sistema de aprendizaje por refuerzo para la mejora del rendimiento del alumno en prácticas Investigador Principal:

Más detalles

Desarrollo de Software con

Desarrollo de Software con Desarrollo de Software con Antonio J. Vélez Q. Universidad del Valle Sede Palmira Contenido Definición de Enterprise Bean Cuando usar Enterprise Beans Tipos de Enterprise Beans Enterprise Bean Con componentes

Más detalles

Facultad de Ingeniería Escuela de Ciencias y Sistemas 2011-14674 Estructura de Datos Guatemala 2013 JSF + JSP + RichFaces

Facultad de Ingeniería Escuela de Ciencias y Sistemas 2011-14674 Estructura de Datos Guatemala 2013 JSF + JSP + RichFaces JSF + JSP + RichFaces Manual Introductorio al uso de JSF, JSP y RichFaces en Java El siguiente documento es un manual muy introductorio, ya que la primera vez que me encontré con estas 3 frases juntas

Más detalles

JWF. Guía de Instalación. IdeaSoft Uruguay s.r.l. 11300, Montevideo, Uruguay Tel:+598 (2) 7104372 www.isoft.com.uy. Java WorkFlow

JWF. Guía de Instalación. IdeaSoft Uruguay s.r.l. 11300, Montevideo, Uruguay Tel:+598 (2) 7104372 www.isoft.com.uy. Java WorkFlow JWF Java WorkFlow Guía de Instalación Version 2.0 Diciembre 2002 IdeaSoft Uruguay s.r.l. 11300, Montevideo, Uruguay Tel:+598 (2) 7104372 www.isoft.com.uy JWF 2.0 Guía de Instalación IdeaSoft Uruguay Marcas

Más detalles

MANUAL DE ACTUALIZACIÓN DE AGREGA V3.0.4

MANUAL DE ACTUALIZACIÓN DE AGREGA V3.0.4 MANUAL DE ACTUALIZACIÓN DE AGREGA V3.0.4 Plataforma de objetos digitales educativos AGREGA Autores: Daniel González Versión: 1.0 Fecha: 14/01/2011 HISTORIA DEL DOCUMENTO Versión v1.0 Descripción Creación

Más detalles

Curso Programación en la Web: Configuración de software. Por: María Consuelo Franky. profesora Dpto. de Ingeniería de Sistemas Universidad Javeriana

Curso Programación en la Web: Configuración de software. Por: María Consuelo Franky. profesora Dpto. de Ingeniería de Sistemas Universidad Javeriana Curso Programación en la Web: Configuración de software Por: María Consuelo Franky profesora Dpto. de Ingeniería de Sistemas Universidad Javeriana Enero de 2009 Tabla de Contenido 1 Propósito de este documento...

Más detalles

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE PRÓLOGO... 13 APECTOS BÁSICOS DE JAVA... 15 1.1. LA MÁQUINA VIRTUAL JAVA... 15 1.2. EDICIONES JAVA... 16 1.3. ESTRUCTURA DE UN PROGRAMA JAVA... 16 1.4. EL MÉTODO

Más detalles

Fractalia Remote Systems Departamento de Ingeniería. Manual de Operador y Cliente Fractalia Remote Support FRS 0.1. 01/09/2011 Arturo Mencía Martínez

Fractalia Remote Systems Departamento de Ingeniería. Manual de Operador y Cliente Fractalia Remote Support FRS 0.1. 01/09/2011 Arturo Mencía Martínez Fractalia Remote Systems Departamento de Ingeniería Manual de Operador y Cliente Fractalia Remote Support FRS 0.1 01/09/2011 Arturo Mencía Martínez Propiedades del documento Fractalia Remote Systems, S.L.

Más detalles

INTRODUCCIÓN A JAVA EE

INTRODUCCIÓN A JAVA EE Unidad de Aprendizaje 1 INTRODUCCIÓN A JAVA EE ÍNDICE 1.1 Introducción...3 1.1.1 Java Card... 3 1.1.2 Java Micro Edition (Java ME)... 4 1.1.3 Java Standard Edition (Java SE)... 4 1.1.4 Java Enterprise

Más detalles

UNIVERSIDAD TÉCNICA DEL NORTE

UNIVERSIDAD TÉCNICA DEL NORTE UNIVERSIDAD TÉCNICA DEL NORTE FACULTAD DE INGENIERÍA EN CIENCIAS APLICADAS ESCUELA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES INFORME TÉCNICO TEMA: ESTUDIO DE LOS MODELOS DIGITALES E-BUSINESS PARA GESTIÓN

Más detalles

Aplicaciones J2EE. Repasamos. Tres tipos de aplicaciones. Aplicaciones Web Java Objetos distribuidos EJBs Aplicaciones Empresariales

Aplicaciones J2EE. Repasamos. Tres tipos de aplicaciones. Aplicaciones Web Java Objetos distribuidos EJBs Aplicaciones Empresariales Aplicaciones J2EE Repasamos Tres tipos de aplicaciones Aplicaciones Web Java Objetos distribuidos EJBs Aplicaciones Empresariales 1 Aplicaciones Web Java Introducción Colección de recursos tales como Jsps

Más detalles

WDpStats Procedimiento de instalación

WDpStats Procedimiento de instalación WDpStats Procedimiento de instalación Tabla de contenidos WDpStats... 1 Procedimiento de instalación... 1 Tabla de contenidos... 1 Resumen... 2 Requisitos... 2 Instalación... 2 Dificultades... 6 Ejecución...

Más detalles