Programando con Café

Programando con Café es el lugar de encuentro de todos sus tutoriales de programación que usted necesita en diferentes lenguajes de programación y base de datos

domingo, septiembre 18, 2011

JAVA - Struts 2 Hola Mundo Tutorial – Lo básico de Struts 2


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

Hola, mi nombre es Felipe Vásquez Ganoza, y Henry me ha proporcionado esta oportunidad para poder publicar algunas entradas en el blog. Empezaremos por un tutorial muy básico de Struts 2, el famoso Hola Mundo.


Struts 2 Hola Mundo Tutorial – Lo básico de Struts 2

Struts 2 es un framework de desarrollo del lado web, como framework está basado en automatizar las tareas comunes y proveer un marco común de trabajo para el desarrollador, en otras palabras, define la arquitectura de la aplicación o componente.
A diferencia de Struts 1, Struts 2 es un marco completamente nuevo, basado en los proyectos OpenSymphony  y Web Works Framework. Usa el modelo MVC y es lo bastante flexible para poder escalarlo con otros frameworks como Hibernate, Spring, etc.
Struts 2 define el Controlador con el FilterDispatcher, el cual procesa todas las peticiones (request) por parte del cliente, se encarga de verificar en el struts.xml los filtros y acciones a llevar a cabo según corresponda.
El Modelo lo implementan las clases Action, las cuales son básicamente simples POJO (plain old java object), los cuales no necesariamente deben implementar una interfaz, pero sí implementar el método execute(); sin embargo es una buena práctica que implemente la interfaz ActionSupport, de esa forma nos aseguramos automáticamente de implementar  otras interfaces que nos permiten validar y no sobre cargar el método exectue(). Cabe recordar que el Modelo es la parte que implementa la lógica del negocio.
Por último, la Vista puede ser definida por varias tecnologías como JSP, Html, XHtml, Velocity, etc.
A continuación explicaré una simple aplicación conocida por cualquier programador como Hola Mundo, la desarrollaremos en Eclipse y Apache Tomcat.
Los requisitos para desarrollarla son:
  • Tener instalada el SDK a partir de 1.5 o superior.
  • Eclipse (http://www.eclipse.org/downloads/)
  • Apache Tomcat (http://tomcat.apache.org/index.html)
  • Descargar las librerías de Struts 2 (http://struts.apache.org/download), es recomendable descargar la última y más estable versión.

  1. Creamos un proyecto dinámico en Eclipse: File à  New à Dynamic web Project

Le damos un nombre: HolaMundo


Ya tengo instalado previamente el Apache Tomcat, el cual lo descargan desde la página de Apache, el ejecutable según el SO que tengáis. Luego lo pueden agregar en Eclipse, ya sea desde la ventana anterior (la parte de Target runtime à  New Runtime, y seleccionan la carpeta donde se instaló en el disco) o desde el menú: window à  preferences à  server à  runtime enviroments, y agrergar la home del Apache Tomcat.

Luego de creado el proyecto, Eclipse nos mostrará la siguiente estructura:



Donde crearemos el siguiente directorio para las clases:
Click derecho sobre JavaResources à  src à  Folder à  le damos el nombre que deseemos: org.per.trux.actions
Recordando un poco la estructura del proyecto web, apreciemos que tenemos varias carpetas, pero las que nos interesan son WebContent, WEB-INF, lib y src, por ahora. Las páginas de vista (Jsp, Html, velocity, etc) van en la raíz de WebContent (la mayoría de veces, dependiendo de la arquitectura se puede reubicarlas), en la raíz de WEB-INF va el web.xml, dentro de lib van las librerías (.jar) que necesitemos según las tecnologías a utilizar), y dentro de src van las clases (.java) y el struts.xml. Todo esto se puede modificar dependiendo de la arquitectura que se defina, pero por defecto son como las he mencionado.
  1. Ahora agregamos las librerías y archivos de configuración básicos del proyecto para Struts 2. Primero descomprimir el .zip con las librerías descargadas de Struts 2 (en esta aplicación he utilizado: Struts 2.2.3.1), seleccionamos las siguientes librerías del folder lib:
  • struts2-core-2.2.3.1.jar
  • xwork-core-2.2.3.1.jar
  • ognl-3.0.1.jar
  • freemarker-2.3.16.jar
  • commons-logging-1.1.1.jar
  • commons-fileupload-1.2.2.jar
Para este proyecto tan simple, con estas librerías nos basta por ahora. Copiamos esos archivos, damos click derecho sobre la carpeta lib del proyecto en Eclipse, y elegimos: pegar. Nos debe quedar así:



Ahora creamos la página de inicio (Index.jsp), damos click derecho sobre WebContent à  New à  JSP File (si no encuentran esa opción directamente, seleccionen Others y busquen en una de las secciones).


Creamos ahora los archivos de configuración necesarios: web.xml y struts.xml. Click derecho sobre WEB-INFà Newà File, le damos el nombre de web.xml
Click derecho sobre el directorio srcà Newà File, le damos el nombre de struts.xml


Ahora agregamos el contenido en los archivos recién creados, primero en web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Esta configuración es la más básica y por defecto para usar struts 2, podemos apreciar que se hace referencia al controlador (FilterDispatcher), el mapeo de las urls: /*, el cual indica al controlador que revise todas las peticiones (request) que envíe el cliente, y por último la página de inicio por defecto: index.html. Esta es una configuración muy básica, pero podemos explicar que aquí se pueden agregar más parámetros, como cadenas de conexiones, más servlets, etc. Esto dependerá de la arquitectura del proyecto.
Ahora editamos el archivo struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="struts-default">

            <action name="holaMundo" class="org.per.trux.actions.HolaMundo">
                  <result name="SUCCESS">/HolaMundo.jsp</result>
            </action>
     
    </package>
</struts>

Aquí podemos apreciar las acciones a ejecutar por Struts 2, previo definimos el paquete, el cual nos proporciona el poder definir una estructura elegante y separar las diferentes acciones según sea el caso, cabe destacar que  se pueden incluir (include) más archivos Xml que hereden de este base, de esa forma podemos organizar la estrutura del proyecto y no hacer que el archivo por defecto crezca y sea inmanejable, una vez más acoto que esto dependerá de la arquitectura del proyecto.
Dentro del paquete van las acciones, <action>, la cual tiene los atributos básicos: name, el cual es el nombre de la acción a realizar, en este caso, cuando en la url termine en: holaMundo.action (notar que en el archivo struts.xml no viene ese nombre, no es necesario ya que struts es lo suficiente inteligente para mapearla), luego en este caso hay una clase en el atributo class que ejecutará la acción (Modelo, la clase Action), la cual tiene la Uri donde se encuentra: actions.HolaMundo. luego tenemos el resultado que se mostrará con el result al cliente en caso que sea exitosa la acción: <result name="ok">/bienvenida.jsp</result>, esto nos dice que en caso de devolver la cadena (String) ok la acción (HolaMundo.java), nos envíe a la página: bienvenida.jsp
Esta es una simple aplicación, pero se pueden definir mucho más complejas acciones a realizar.
Por último creamos un archivo más: bienvenida.jsp, damos click derecho sobre WebContent à  New à  JSP File.
  
  1. Ahora creamos nuestra clase y agregamos contenido a nuestras páginas jsp. Primero la clase que estará en la carpeta: src/actions/HolaMundo.java

Hay que darle a refresh al proyecto para poder visualizarlo en la carpeta src.
Agregamos las propiedades de tipo String: nombre y saludo, luego usamos la funcionalidad de Eclipse para que nos autogenere los get y set de ambos atributos de clase:



Implementamos el método obligatorio execute, el cual devuelve por defecto un String:

package org.per.trux.actions;

/**
*
* @author Felipe Vásquez Ganoza
*/

import com.opensymphony.xwork2.ActionSupport;

public class HolaMundo extends ActionSupport{

      private static final long serialVersionUID = 1L;
      private String saludo;
     
      public String execute() throws Exception {
            setSaludo("Hola Mundo en Struts 2");
            return "SUCCESS";
      }
      public String getSaludo() {
            return saludo;
      }
      public void setSaludo(String saludo) {
            this.saludo = saludo;
      }

}

  1. Ahora editamos nuestras vistas: index.html


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
      <head>
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=holaMundo.action">
      </head>

      <body>
                  <h3>Cargando...</h3>
      </body>
     
</html>


y bienvenida.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
      <h1><s:property value="saludo" /></h1>
</body>
</html>

  1. Ejecutamos el proyecto: Click derecho sobre el proyecto à  Run As à  Run on server
O podemos exportar el .war y copiarlo directamente en el directorio de nuestro servidor, para exportar el .war desde eclipse, damos click derecho sobre el proyecto à  Export à  war file
Espero haya sido explicativo este pequeño tutorial  y poder expandir o volverlo más complejo en futuros posts.

Un saludo,
Felipe Vásquez Ganoza


sábado, septiembre 17, 2011

IBM - IMPORTAR MODELO AL WebSphere Integration Developer 7.0 Y VISUALIZARLO EN EL BPC


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. ENTORNO




  • WebSphere Integration Developer 7.0 (WID)
  • WebSphere Business Modeler 7.0 (WBM)
  • Windows 7 Professional
  • JDK 1.6.0 - 24


2. INTRODUCCIÓN



Según IBM, WebSphere Integration Developer es un entorno de creación fácil de usar para la integración completa en SOA.
WebSphere Integration Developer simplifica la integración y agiliza la adopción de SOA, ya que representa los activos actuales de IT como componentes de servicio para su reutilización y eficacia.
Se trata de una herramienta basada en Eclipse para la creación de soluciones de integración y gestión de procesos de negocio basadas en SOA en WebSphere Process Server, WebSphere ESB y WebSphere Adapters.

  • Simplifica la integración en características enriquecidas que agilizan la adopción de SOA, ya que representa los activos de IT existentes como componentes de servicio para impulsar su reutilización y eficacia.
  • Una experiencia de creación simplificada que agiliza el desarrollo de soluciones, incluida la mejora en el soporte de herramientas de mediación.
  • Construye soluciones de integración y procesos utilizando una tecnología intuitiva que permite arrastrar y soltar para definir visualmente la secuencia y el flujo de procesos de negocio.
  • Integra pruebas, depuraciones y despliegue para el desarrollo de soluciones.
  • Permite el desarrollo empresarial, que se integra completamente en WebSphere Business Modeler para importar modelos con el objetivo de llevar a cabo una implementación rápida.
  • Da soporte a la generación de interfaces para la interacción de usuarios, que se pueden personalizar fácilmente 

3. DESARROLLO


3.1. Exportar proyecto del WebSphere Business Modeler Advanced 7.0

Estando en el WebSphere Business Modeler Advanced 7.0 debemos hacer clic derecho en el proyecto del modelo que hemos desarrollado en nuestro tutorial anterior, para visualizarlo hacer clic AQUÍ, y presionamos el botón exportar.














De ahí le decimos que el proyecto lo vamos a exportar a un formato para el WebSphere Integration Developer















Le asignamos la ubicación a donde lo vamos a exportar nuestro proyecto















Nos da unos detalles de los proyectos que vamos a exportar















Y al final nos pedirá que proyectos deseamos exportar y le decimos que todos los proyectos que hemos realizados
















3.2. Importar proyecto del WebSphere Business Modeler al WebSphere Integration Developer

Abrimos que el WID y nos vamos al menú de opciones Archivo --> Importar



















Y el tipo de proyecto que vamos a importar es uno del tipo Otros --> Intercambio de Proyectos



















Buscamos nuestro proyecto que exportamos en el punto 3.1. e importamos todos los proyectos que encuentre en dicho zip generado por el WBM


















Y finalmente veremos que nuestro proyecto se importo exitosamente al WID















3.3. Crear instancia en el Business Process Choreographer (BPC)

Debemos primor de agregar nuestros proyectos importados al WebSphere Process Server que tiene el WID, para ello hacemos clic derecho en el servidor y seleccionamos la opción "Añadir y eliminar proyectos"














Y añadimos todos los proyectos



















Iniciamos nuestro WebSphere Process Server














Cuando termina de iniciar el servidor ya podríamos entrar al BPC, para ello hacemos clic derecho en el servidor y nos vamos al menú de Lanzar-->BPC













Y nos abrirá la venta para entrar al BPC y ponemos nuestro usuario y clave
















Para crear una instancia en el BPC nos vamos al menú que dice "Actualmente Valida" y nos sale los procesos que están activos y hacemos clic en el enlace que dice "Envió de Solicitud"












Y luego hacemos clic en el botón que dice "Iniciar instancias"












Y llenamos la información de nuestro Business Item y damos clic en el botón de "Someter"












Y cuando nos vamos a la opción "Administradas por mi"








Veremos que ya se creo nuestra instancia














4. CONCLUSIONES



Como vimos haciendo el diseño en el modeler, importarlo al WID es muy sencillo y muy fácil su manejo. En el próximo tutorial se le enseñara como trabajar la instancia.


jueves, septiembre 15, 2011

IBM - CREAR UN MODELO CON WEBSPHERE BUSINESS MODELER 7.0


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. ENTORNO



  • WebSphWebSphere Business Modeler 7.0
  • Windows 7 Professional
  • JDK 1.6.0 - 24


2. INTRODUCCIÓN


Para este tutorial utilizaremos el Business Item (BI) que creamos en el tutorial anterior, si desea visualizarlo puede hacer clic AQUÍ, la única diferencia es que hemos agregado un atributo mas que es "Estado", que nos permitirá ver si nuestra solicitud fue aprobada o no. Teniendo ya el BI ya creado, le vamos hacer su modelo para poder visualizarlo y luego integrarlo en nuestro WebSphere Integration Developer V7.0. para poder crear instancias.















3. DESARROLLO



3.1. Creando el proyecto

Debemos de crear un proyecto en el WebSphere Business Modeler (que mas adelante solo lo llamaremos Modeler), para ello nos vamos a Archivo --> Nuevo --> Proyecto








De ahí debemos de seleccionar un proyecto del tipo "Proyecto de creación de modelos empresariales"


















Luego nos pedirá que le pongamos un nombre al proyecto "ProgramandoConCafe-Modelo" y le pondremos el nombre a nuestro proceso "Envio de Solicitud"


















Y finalmente nos pedirá que escojamos el tipo de diseño


















3.2 Creando el modelo

Para que nuestro modelo que vamos hacer se pueda integrar de manera correcta con el WebSphere Integration Developer V7.0 (WID) debemos de activar la vista de WebSphere Process Server











De ahí vamos arrastrar dos "Tarea Humana", una tarea humana es cuando necesita la intervención de un usuario para completar la tarea en "Tarea" es un proceso automático. A estas dos tareas humanas lo llamaremos












De ahí agregaremos una decisión simple, que vendría a ser algo parecido como un IF, esta condición evaluara el estado de la solicitud, si el estado es 1 termina el proceso en caso contrario pedirá que de nuevo redacte la solicitud.










Después agregaremos una fusión, cada decisión simple o múltiple espera una "fusión", una "fusión" espera que llegue una linea para realizar la tarea siguiente a diferencia de la "unión" que espera que todas sus lineas lleguen para seguir con la tarea.










Para decir que la solicitud navegue por todo el modelo solo tenemos que arrastrar nuestro BI Solicitud y ponerlo cerca a las lineas para que reemplace el "texto" por un BI.











Y debemos de hacer el siguiente diseño








Cuando le damos guardar nos saldrá que tenemos un error, debido a que no hemos establecido la condición








Para establecer la condición debemos de hacer doble clic en la "Decisión Simple" luego nos vamos a la pestaña donde dice "Ramas de Salida" y presionamos el botón "Editar"














Luego nos sale una nueva venta donde presionaremos el botón "Añadir" para poder agregar la condición
















Vamos a escoger que como termino de analices evalué nuestro BI específicamente el estado, para ello de la primera opción escogemos "Entrada" y seleccionamos el atributo "Estado", luego como operador escogeremos "es igual a" y como valor de texto escribimos "1". Para que cuando el estado sea "1" termine el proceso.
















Y cuando demos guardar ya no saldrá el error anterior