1. Franklin Ramirez
3090-09-10357
Deploy (Despliiegues)
El proceso de Despliegue
Préviamente al despliegue real, las aplicaciones J2EE se entregan en un formato
de archivo empresarial (*.ear, un fichero Java comprimido). Consta de uno o más
módulos J2EE y descriptores de despliegue. Un descriptor de despliegue es un
fichero XML que proporciona información al contenedor J2EE sobre las
condiciones de despliegue de la aplicación o módulo.
Entre los descriptores de despliegue se incluyen los descriptores de despliegue
genérico de J2EE, como ejb-jar.xml, y descriptores específicos del vendedor,
como orion-ejb-jar.xml o weblogic-ejb-jar.xml, que configuran las características
específicas de cada contenedor J2EE. Un módulo J2EE consiste en uno o más
componentes J2EE para el mismo tipo de contenedor con un descriptor de
despliegue para ese tipo. En este artículo, se explican un módulo EJB y un módulo
web. Un módulo EJB consta de uno o más EJB's (de sesión o de entidad) y otros
ficheros de clases. El descriptor de despligue genérico es ejb-jar.xml. El módulo se
empaqueta en un fichero *.jar. Un módulo web puede contener servlets, .jsp, .html
y clases java y se empaqueta como un fichero *.war. El descriptor de despligue
genérico es web.xml.
Existen cuatro formas diferentes de desplegar aplicaciones J2EE construidas
utilizando marcos de trabajo como Oracle ADF:
Despliegue en Caliente
Una aproximación que básicamente construye en el servidor el directorio, los
ficheros de clases, y otras estructuras que podrían ser descomprimidas desde un
fichero *.ear. En vez de pre-empaquetar la aplicación y luego desplegarla en el
servidor, el código de la aplicación se compila directamente en el servidor, en los
directorios y subdirectorios apropiados. El problema de esta aproximación es que
los cambios en los descriptores u otros elementos declarativos podrían no
actualizarse dinámicamente en el servidor, y podrían requerir un reinicio de éste.
Perfiles de Despligue
Una aproximación basada en un asistente (wizard), dirigida por el IDE o una
herramienta de despliegue, que resulta en un fichero que contiene toda la
información necesaria para construir y desplegar un componente en un entorno
partícular. Por ejemplo, Oracle JDeveloper 10g genera ficheros *.deploy,
básandose en la configuración del proyecto activo, que contiene toda la
información necesaria para construir y desplegar un componente desde
JDeveloper 10g a un servidor designado (Oracle Application Server, BEA
WebLogic, standalone Oracle Application Server Containersfor J2EE 10g, Tomcat,
o JBoss). Se pueden combinar diferentes perfiles de despliegue en un único perfil
de despliegue. Uno de los artefactos generados por un perfil de despliegue son los
descriptores de despliegue para cada uno de los elementos de la aplicación.
2. Franklin Ramirez
3090-09-10357
Apache AntUna aproximación programática utilizando la herramienta basada en
Java Antpara construir y desplegar aplicaciones J2EE. Esta aproximación tiene
muchas ventajas, como una abundante documentación y experiencia, una amplia
adopción de la herramienta, y la relativa facilidad con la que los desarrolladores
pueden configurar esta herramienta para ayudarles a automatizar el ciclo
Desarrollo de Paginas Web Unidad 4 Servidor de aplicaciones web
desarrooladores pueden extender sus funcionalidades escribiendo sus propias
tareas. Ant tiene soporte interno para CVS, JUnit, y otras tareas para que usted
pueda automatizar tanto la construcción y el despliegue como el proceso de
pruebas de código. Oracle JDeveloper10g hace fácil el despliegue utilizando Ant
proporcionando soporte para la creación y ejecución de tareas de Ant.
Control de Despliegue basado en la Consola
Una aproximación orientada al servidor que trata con herramientas
administrativas. La mayoría de los servidores de aplicaciones J2EE tienen una
consola de control u otro tipo de interface de usuario para desplegar ficheros
*.waro *.ear. Oracle, por ejemplo, soporta la utilización de una consola basada en
web para manejar el despliegue de aplicaciones J2EE en Oracle Application
Server; BEA WebLogic también tiene su propia consola de control.
Cada una de esas aproximaciones tiene sus pros y sus contras. En este artículo,
nos enfocaremos en el despliegue de aplicaciones Oracle ADF utilizando los
perfiles de despliegue de Oracle JDeveloper10g, y luego utilizando Ant (en la
Parte 2). No se verá el despliegue en caliente ni el despliegue desde consolas de
servidores de aplicaciones.
El proceso de desarrollo, testeo y despliegue (como se muestra en la Figura 2),
sitúa diferentes requerimientos en cada uno de los distintos entornos (vea la Tabla
1) en los que ocurre el proceso global:
Desplegar en OC4J
Desplegar en OC4J es especialmente fácil desde Oracle JDeveloper, y todos los
ficheros auxiliares también pueden instalarse fácilmente desde Oracle JDeveloper.
Dependiendo de su entorno, podría no necesitar seguir todos los pasos siguientes.
Por ejemplo, si ya tiene instaladas en OC4J las librerías de ejecución de ADF,
podría saltarse el primer paso. Las instrucciones empiezan desde Oracle
JDeveloper, y asumen que usted ya ha configurado el proyecto de ejemplo.
Paso 1: Instalar las Librerías de Ejecución de ADF
Si las librerías de ejecución de ADF no están instaladas en el servidor OC4J, o si
quiere instalar una nueva versión:
SeleccioneADF RuntimeInstalleren el menú tools.
SeleccioneStandalone OC4J.
SeleccioneNexten la página de bienvenida.
Introduzca el directorio raíz de OC4J y seleccioneNext.
SeleccioneInstall a new version of the ADF Runtime.
PulseNexty Finish.
3. Franklin Ramirez
3090-09-10357
Después de que la instalación termine satisfactoriamente, deberá reiniciar OC4J.
Paso 2: Crear una Conexión con el Servidor de Aplicaciones
Para desplegar en OC4J utilizando perfiles de despliegue, debe crear una
conexión con el servidor. Cuando configure OC4J, aségurese de que ha
concecidoprivielegios de "administrative" al usuario que planea utilizar con las
propiedades de conexión.
Seleccione la pestaña Connectionsen el navegador. Desarrollo de Paginas Web
Unidad 4 Servidor de aplicaciones webde construcción y despliegue. Además,
como Ant, está escrito en Java, los
Haga doble click en Application server.
Introduzca el nombre de la conexión ('oc4j') y seleccione el tipo Standalone
OC4J.
PulseNext.
Introduzca el nombre de usuario y la password del adminstrador de OC4J y
seleccione el checkboxdeploypassword.
PulseNext.
Chequee la URL, y pulseNext.
Pruebe la conexión pulsando sobre el botónTest connection.
Si el resultado esSuccesspulse sobre Next.
PulseFinish.
Ahora ya podrá navegar por el árbor JNDI en el panel de conexiones, expandiendo
el árbol.
Paso 3: Crear los Descriptores de Depliegue
Por cada capa de la aplicación (presentación, servicios de negocio, y persistencia)
debe crear los descriptores de despliegue apropiados. Empecemos con el
proyecto Oracle TopLink.
Pulse con el botón derecho sobre el objeto TopLinkMappingen el proyecto
Toplink.
SeleccioneGenerate toplink-deployment-descriptor.xml
Oracle JDeveloper genera un fichero XML que contiene informacón sobre el
nombre del proyecto, el login a la base de datos, y los descriptores para los
mapeos de objetos Java a las tablas de la base de datos.
Debería poder acceder a los descriptores de despliegue (ejb-jar.xml y orion-ejb-
jar.xml) del bean de sesión EJB ya que estos los crea automáticamente Oracle
JDeveloper 10g en el momento de la creación del EJB. Además también debería
tener disponibles los descriptores de despliegue de su capa de presentación
(web.xml). Al añadir JSPs (JavaServerPages) a su proyecto web, Oracle
JDeveloper 10g genera automáticamente los descriptores apropiados.
Paso 4: Crear Perfiles de Despliegue para cada Capa
Oracle JDeveloper10g escanea las propiedades del proyecto para determinar los
ficheros y librerías que necesita empaquetar en el módulo J2EE. Tenga cuidado
de las dependencias entre los distintos proyectos del workspace, de esta forma:
4. Franklin Ramirez
3090-09-10357
Para el proyecto de tres capas, el proyecto BusinessServices depende del
proyecto TopLinkModel
Para el proyecto de dos capas, el proyecto WebView depende de los proyectos
TopLinkModel y BusinessServices.
Desarrollo de Paginas Web Unidad 4 Servidor de aplicaciones web
5. Franklin Ramirez
3090-09-10357
Como desplegamos los objetos de TopLink con el proyecto de servicios de
negocio (tres capas) o el proyecto web (dos capas) no necesitamos generar un
perfil de despliegue para esos objetos.
Para la configuración de tres capas, empezaremos generando un perfil de
despliegue para la capa de servicios de negocio:
Pulse con el botón derecho sobre el proyecto de servicios de negocio y
seleccione New.
SeleccioneDeploymentProfilesen Categories.
SeleccioneEJB JAR File en Items.
Pulse OK.
SeleccioneFilters bajoProject output.
Asegurese de que las clases de TopLink de la capa de persistencia están en
esta pestaña:
SeleccionePlatformy seleccione la conexión hacia OC4J que creó en el paso 2.
PulseOK.
Ahora podemos generar el perfil de despliegue para el cliente web. Oracle
JDeveloper10g genera un perfil de despliegue para el proyecto web cuando se
crea, por eso sólo necesita editarlo.
Haga doble click en el fichero webapp.deploy en la pestaña Resourcesdel
proyecto web.
Cambie el nombre del fichero war a departments.war
Si está desplegando la aplicación de dos capas, chequee que las clases de
TopLink y las clases de los servicos de negocio en las pestañas File groups, WEB-
INF/classesy Filtersestán seleccionadas. Si no ve estas clases debe asegurarse
de que ha seleccionado correctamente las dependencias del proyecto y que lo ha
compilado.
Seleccione la plataforma e introduza la conexión al servidor de aplicaciones que
creó anteriormente.
Paso 5: Crear un Perfil de Despliegue Golbal (sólo tres capas).
Si va a desplegar la aplicación de dos capas, puede utilizar el perfil de despliegue
del proyecto web para desplegar el archivo. Si quiere desplegar la aplicación de
tres caas, necesita un perfil de despliegue global que ensamble los dos módulos
en un archivo.
Pulse con el botón derecho sobre el proyecto BusinessServices y seleccione
New...
SeleccioneDeploymentProfilesen Categories.
SeleccioneEAR file en Items.
Introduzca el nombre del perfil de despliegue y pulseOK para iniciar el editor.
EnGeneral, edite el nombre de la aplicación:
SeleccioneApplicationassembly.
Marque los perfiles de despliegueque ha creado para los módulos EJB y WAR:
SeleccionePlatform.
6. Franklin Ramirez
3090-09-10357
Seleccione la conexión a OC4J que creó en el paso 2.
PulseOK.
Desarrollo de Paginas Web Unidad 4 Servidor de aplicaciones web
Paso 6: Desplegar la Aplicación.
Ahora ya estámos listos para desplegar la aplicación en OC4J. Primero veamos
los aspectos de despliegue de la aplicación de tres capas.
Pulse con el botón derecho sobre el perfil de despliegue global.
SeleccioneDeployto oc4j (esto debería ser el nombre de la conexión al servidor
de aplicaciones que creó en el Paso 2).
El despliegue empezará. El progreso se puede monitorizar tanto en el panel de
mensajes de JDeveloper10g como en la vantana de comandos de OC4J.
JDeveloper10g primero genera el fichero *.ear, y luego lo despliega en el OC4J.
El fichero *.ear se guardará en el directorio deploydel proyecto para que pueda
reutilizarlo.
application.xml (el descpriptor de aplicación J2EE estándar que lista el módulo
EJB y el módulo Web de este ejemplo):
<?xml version = '1.0' encoding = 'windows-1252'?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE
Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>OracleEmpDeptApp</display-name>
<module>
<ejb>deptfacade.jar</ejb>
</module>
<module>
<web>
<web-uri>departments.war</web-uri>
<context-root>oraclesample</context-root>
</web>
</module>
</application>
orion-application.xml; el descriptor específico de OC4J que describe la localización
del fichero datasources.xml, en el que Oracle JDeveloper 10g almacena todas las
conexiones. (Cuando utiliza TopLink, la información sobre la conexión a la base de
datos se almacena en toplink-deployment-descriptor.xml, por eso no necesitará
datasources.xml).
Paso 7: Probar la Aplicación Desplegada
En la aplicación de tres capas, queremos probar el despliegue del bean de sesión.
Oracle JDeveloper10g puede generar un sencillo cliente Java para probar el bean.
7. Franklin Ramirez
3090-09-10357
Pulse con el botón derecho sobre el EmpDeptFacadeBean en el proyecto de
servicios de negocio:
SeleccioneNew Sample Java Client...
SeleccioneConnect to Remote App Server.
Seleccione el nombre de la aplicación J2EE que ha introducido en el perfil de
despliegue global.
Seleccione el nombre del servidor de aplicaciones.
PulseOK
Desarrollo de Paginas Web Unidad 4 Servidor de aplicaciones web
Abra el fichero Java generado.
Añada una sentencia importjava.util.Collection
Añada el siguiente código al método main(), justo antes de la sentencia catch:
Collection emps = empDeptFacade.getEmployees( );
System.out.println("number of emps: "+ emps.size());
Collection depts = empDeptFacade.getDepartments( );
System.out.println("number of departments: "+ depts.size());
pulse con el botón derecho sobre el cliente Java generado y seleccione Run.
Debería ver la siguiente salida (los números podrían diferir):
Ahora pruebe el cliente:
Abra un navegador.
Tecle la URL: http://localhost:8888/oraclesample/departments.jsp
Si desplegó la aplicación en otra máquina, introduzca su nombre en la URL. Si
utilizó un contexto raíz diferente, cambie el nombre del contexto en la URL.
El formato general es: http://[hostname]:[port]/[context-root]/[jspname].jsp
Si el despliegue se realizó con éxito, verá una página con una lista de los primeros
diez departamentos.
Que son los contenedores en los servidores y cual es su
funcionamiento.
El contenedor de bucles For define un flujo de control que se repite en un paquete.
La implementación del bucle es similar a la estructura de bucle For de los
lenguajes de programación. En cada repetición del bucle, el contenedor de bucles
For evalúa una expresión y repite el flujo de trabajo hasta que la expresión se
evalúe como False.
El contenedor de bucles For utiliza los siguientes elementos para definir el bucle:
Una expresión de inicialización opcional que asigna valores a los contadores
de bucle.
Una expresión de evaluación que contiene la expresión usada para
comprobar si el bucle debe detenerse o continuar.
8. Franklin Ramirez
3090-09-10357
Una expresión de iteración opcional que incrementa o disminuye el contador
del bucle.
El siguiente diagrama muestra un contenedor de bucles For con una tarea Enviar
correo. Si la expresión de inicialización es @Counter = 0, la expresión de
evaluación es @Counter< 4 y la expresión de iteración es @Counter = @Counter
+ 1, el bucle se repetirá cuatro veces y enviará cuatro mensajes de correo
electrónico.
Las expresiones deben ser expresiones de SQL Server 2005 IntegrationServices
válidas. Para obtener más información, vea Referencia de expresiones de
IntegrationServices.
Para crear las expresiones de inicialización y asignación, puede utilizar el
operador de asignación (=). La gramática de expresiones de IntegrationServices
no admite este operador; sólo se puede utilizar en las expresiones de inicialización
y asignación del contenedor de bucles For. Cualquier expresión que utilice el
operador de asignación debe tener la sintaxis @Var = <expression>, donde Var es
una variable de tiempo de ejecución y <expression> es una expresión que sigue
las reglas de sintaxis de SSIS. La expresión puede incluir variables, literales y
cualquier operador o función compatible con la gramática de expresiones de SSIS.
La evaluación de la expresión debe devolver un tipo de datos que se pueda
convertir al tipo de datos de la variable.
Un contenedor de bucles For sólo puede tener una expresión de evaluación. Esto
significa que el contenedor de bucles For ejecutará todos los elementos de flujo de
control el mismo número de veces. Como el contenedor de bucles For puede
incluir otros contenedores de bucles For, es posible generar bucles anidados e
implementar bucles complejos en paquetes.
Puede establecer una propiedad de transacción en el contenedor de bucles For
para definir una transacción para un subconjunto del flujo de control del paquete.
De esta manera, puede administrar las transacciones en mayor detalle. Por
ejemplo, si un contenedor de bucles For repite un flujo de control que actualiza los
datos de una tabla varias veces, puede configurar el bucle For y su flujo de control
para que utilicen una transacción, a fin de asegurarse de que si no se actualizan
todos los datos correctamente, no se actualice ningún dato. Para obtener más
información, veaIncorporar transacciones en paquetes.
Configurar el contenedor de bucles For
9. Franklin Ramirez
3090-09-10357
Puede establecer propiedades a través del Diseñador SSIS o mediante
programación.
Para obtener más información acerca de las propiedades que puede establecer en
el Diseñador SSIS, haga clic en uno de los temas siguientes:
Editor de bucles For
Página Expresiones
Para obtener más información sobre cómo establecer estas propiedades en el
Diseñador SSIS, haga clic en uno de los temas siguientes:
Cómo configurar un contenedor de bucles For
Cómo establecer las propiedades de los contenedores
Definición portable de DataSource en Java EE 6
Antes de Java EE 6, podíamos crear objetos DataSource usando mecanismos
propietarios de cada proveedor (como comandos), y así usábamos el DataSource
en la aplicación. Sin embargo, Java EE 6 hace que la definición de DataSource
sea más flexible. Java EE 6 presenta un nuevo mecanismo para definir objetos
DataSource, que podemos declarar de forma portable en cualquier servidor de
aplicaciones compatible con Java EE 6. Ahora podemos declarar las definiciones
de los DataSource usando anotaciones o en los descriptores de despliegue.
Las aplicaciones Java EE usan objetos DataSource cuando acceden a bases de
datos relacionales usando el API JDBC. Un DataSource tiene un conjunto de
propieades que identifica y describe el origen de datos que representa. Estas
propiedades incluyen información como la ubicación del servidor de la base de
datos, el nombre de la base, y el protocolo de red para comunicarse. Además, los
objetos DataSource trabajan con el servicio de nombres JNDI (Java Naming and
Directory Interface). Una vez que un objeto DataSource está registrado en el
servicio JNDI, las aplicaciones puedan usar el API JNDI para acceder al objeto
DataSource, el cual se usa para conectarse a la base de datos que representa.
CrearDataSource usando anotaciones
Java EE 6 brinda dos nuevas anotaciones para crear definiciones de
DataSource: @DataSourceDefinition y@DataSourceDefinitions. Ambas
anotaciones están en el paquete javax.annotation.sql. Usamos la
10. Franklin Ramirez
3090-09-10357
anotación@DataSourceDefinition para crear una única definición de DataSource.
usamos la anotación@DataSourceDefinitions para crear múltiples definiciones de
DataSource.
La anotación @DataSourceDefinition
Usamos la anotación @DataSourceDefinition para crear una definición de
DataSource. Podemos usar esta anotación en una clase de componente de
aplicación, como un cliente de aplicación, servlet o EJB (Enterprise Java Bean).
Esta anotación define un objeto DataSource y lo registra con JNDI. Configuramos
al DataSource con las propiedades de la anotación. También podemos agregar
propiedades específicas para cada proveedor con el elemento properties de la
anotación.
Por ejemplo, la siguiente anotación crea una definición de DataSource para una
base de datos Derby:
@DataSourceDefinition(name = "java:app/env/Servlet_DataSource",
minPoolSize = 0,
initialPoolSize = 0,
className = "org.apache.derby.jdbc.ClientXADataSource",
user = "APP",
password = "APP",
databaseName = "testdb",
properties = {"connectionAttributes=;create=true"}
)
La definición del DataSource se identifica de forma unívoca con el elemento name.
Este es el nombre JNDI con el cual se registrará el DataSource. Noten que el
nombre de este elemento comienza con un namespace de alcance, en este
casojava:app. Java EE 6 introduce namespaces de entorno para componentes de
aplicaciones, que incluye los siguientes alcances:
java:comp. Los nombres en este namespace tienen visibilidad para el
componente.
java:module. Los nombres en este namespace son compartidos por todos los
componentes de un módulo. Por ejemplo, los componentes EJB definidios en el
archivo ejb-jar.xml
java:app. Los nombres en este namespace son compartidos por todos los
componentes y módulos de una aplicación. Por ejemplo, los componentes de
application-client, web y EJB en un archivo .ear
java:global. Los nombres en este namespace son compartidos por todas las
aplicaciones en el servidor.
11. Franklin Ramirez
3090-09-10357
Dependiendo del namespace de alcance que indiquemos en el elemento name,
podremos hacer que el DataSource esté disponible en un todo módulo, una
aplicación, o globalmente en todo el servidor. Entonces, si usamos los siguientes
prefijos en el atributo name:
java:comp/env/, el datasource estará disponible en todos los componentes en
donde fue definido, como un servlet o EJB.
java:module/env/, el datasource estará disponible para todos los componentes
EJB definidos en el archivo ejb-jar.xml
java:app/env/, el datasource estará disponible para todos los componentes y
módulos de la aplicación, como componentes EJB, servlet y clientes de aplicación.
La anotación @DataSourceDefinitions
Podemos usar la anotación @DataSourceDefinitions para crear múltiples
definiciones de DataSource en una clase de componente. Indicamos cada
definición de DataSource en el elemento value de la anotación. Veamos un
ejemplo para crear mútiples definiciones para Derby en un EJB:
@DataSourceDefinitions(
value = {
@DataSourceDefinition(name = "java:app/env/HelloStatefulEJB_DataSource",
minPoolSize = 0,
initialPoolSize = 0,
className = "org.apache.derby.jdbc.ClientXADataSource",
portNumber = 1527,
serverName = "localhost",
user = "APP",
password = "APP",
databaseName = "testdb",
properties = {"connectionAttributes=;create=true"}
),
@DataSourceDefinition(name = "java:comp/env/HelloStatefulEJB_DataSource",
minPoolSize = 0,
initialPoolSize = 0,
className = "org.apache.derby.jdbc.ClientXADataSource",
portNumber = 1527,
serverName = "localhost",
user = "APP",
password = "APP",
databaseName = "testdb",
12. Franklin Ramirez
3090-09-10357
properties = {"connectionAttributes=;create=true"}
)
}
)
@Stateful
publicclass HelloStatefulEJB implements HelloStateful {
...
...
}
CrearDataSource usando descriptoresdedespliegue
Podemos crear definiciones de DataSource usando un descriptor de despliegue,
como application.xml, application-client.xml, web.xml, ejb-jar.xml. Por ejemplo, el
siguiente descriptor crea las mismas definiciones de DataSource que usamos en
el ejemplo anterior:
<data-source>
<name>java:app/env/Application_Level_DataSource</name>
<class-name>org.apache.derby.jdbc.ClientXADataSource</class-name>
<server-name>localhost</server-name>
<port-number>1527</port-number>
<database-name>testdb</database-name>
<user>APP</user>
<password>APP</password>
<property>
<name>connectionAttributes</name>
<value>;create=true</value>
</property>
</data-source>
Vimos dos ejemplos para crear la misma definición de DataSource, usando
anotaciones y usando el descriptor de despliegue. De hecho, de esta manera es
posible crear dos definiciones de DataSource con el mismo nombre. En este caso,
los valores especificados en el descriptor de despliegue tienen precedencia por
sobre las anotaciones. Por ejemplo, si creamos dos definiciones de DataSource
con el mismo nombre, una usando anotaciones y la otra con el descriptor de
despliegue, e indicamos un nombre de base de datos en cada lugar, se usará el
nombre de base de datos configurado en el descritpor. Sin embargo, y indicamos
13. Franklin Ramirez
3090-09-10357
un valor en la anotación y no lo especificamos en el descriptor, se usará el valor
de la anotación en conjunto con la información del descriptor.