martes, 12 de marzo de 2013

Instalando, Iniciando y Configurando Tomcat 7 en Fedora Linux 18


Como mencione en una entrada anterior tengo la intención de aprender a programar aplicaciones que corran en un navegador de internet, lo que implica conocer un par de lenguajes nuevos y el uso de algunos programas, como lo es Apache Tomcat, el cual es un servidor para paginas web y servlets.

Como de costumbre con este tipo de cosas los tutoriales de su uso son abundantes, pero los tutoriales sobre su instalación y configuración inicial no lo son, y peor si se toma en cuenta que parece que cada distribución ubica la configuración donde les da la gana.

Para este caso en particular veremos como llevar a cabo la instalación en Fedora Linux 18 mas la configuración inicial y como hechar a a andar el servicio, asi que comencemos.

Instalación.

Acceda al manejador de paquetes de Fedora, conocido como Software si tiene el idioma en español y en este busque "tomcat", esto le mostrara una gran cantidad de paquetes, si bien lo ideal seria solo instalar los paquetes que fuéramos a ocupar, ya que la idea es aprender a usar tomcat optaremos por la instalación completa, esta opción la da el paquete que simplemente se llama tomcat y que tiene como icono una caja dentro de otra, como muestra la figura 1

Figura 1: Paquete de instalación de Tomcat.

Basta con lo seleccione para instalarlo y se descargaran e instalaran todos los paquetes necesarios, incluyendo sobretodo las aplicaciones para configuración.

Configuración.

Antes de iniciar el servicio tomcat es buena idea configurar los usuarios para poder hacer esto abra una terminal, acceda a la cuenta del administrador y vaya a /usr/share/tomcat/conf en este directorio encontrara un archivo llamado tomcat-users.xml abralo con su editor de texto preferido.

Figura 2: tomcat-users.xml

Diríjase al final del archivo, si esta usando un editor con resaltado de sintaxis como emacs notara que hay varias lineas comentadas, algunas que comienzan con las instrucciones <user name estas instrucciones son las que nos permiten definir los usuarios que pueden configurar tomcat y los roles que tendrán. 

De nuevo, ya que la idea es tener un entorno tomcat util para realizar practicas y experimentos con la configuración no nos preocuparemos por la seguridad en este momento definiremos unos usuarios con todos los permisos que seran:

<user name="admin" password="s3cret" roles="admin,manager, 
   admin-gui,admin-script,manager-gui,manager-script,
   manager-jmx,manager-status" />

Estos le permitirán entrar como administrador y realizar la configuración desde una de las aplicaciones que se instalaron, la cual veremos a continuación.

Iniciando servicio Tomcat.

Ahora que esta todo configurado es momento de iniciar el servicio, ya que por cuestiones de seguridad el servicio no se inicial al arrancar el sistema.

Para hacer esto abra una terminal y como administrador ingrese el comando:
service tomcat start esto iniciara el servicio sin mas problemas.

Figura 3: Iniciando tomcat.

Accediendo a tomcat
Ya que halla iniciado el servicio y que le regrese una pantalla similar a la Figura 3 abra su navegador de internet preferido y acceda a la dirección 127.0.0.1:8080 esto le deveria mostrar una pantalla como la figura 4


Figura 4: pantalla principal de Tomcat.
Notara que en la parte derecha hay tres botones y uno dice "Manager App", de click sobre este, le pedira el nombre de usuario y contraseña que definio en tomcat-users.xml

Figura 5: Usuario y contraseña.
Basta con que los introduzca y podra acceder a la configuración, desde donde podra monitorear, detener, iniciar y desplegar las aplicaciones que se pueden correr en tomcat.

Figura 6: Gestor de Aplicaciones Web de Tomcat

Y ya que terminemos lo que estemos haciendo es buena idea desactivar el servicio tomcat, esto se logra con el comando service tomcat stop desde una terminal como administrador.

Figura 7: Apagando tomcat.
Espero que esta entrada sea de utilidad y tan pronto tenga a la mano algunos ejemplos sencillos veremos como crear y desplegar aplicaciones en tomcat, nos vemos


domingo, 10 de marzo de 2013

Trucos para el formateo de cadenas y fechas en Java

Una de las cosas que tienden a resultar mas llamativas cuando se pasa del C al Java es la gran cantidad de herramientas que este ultimo proporciona para el manejo de cadenas de texto, ya que, si si bien estas existen en C, las versiones del Java tienden a ser un tanto mas fáciles de usar y la sobrecarga de funciones se aprovecha muy bien para hacer el código mas legible y compacto que el equivalente en C.

Claro que ayuda mas si se sabe como se llaman y se usan dichos métodos y dado que he tenido que usarlos recientemente creo que seria bueno poner aquí lo que he encontrado.

Ejemplo: Obteniendo datos de un "numero" folio

Numero entre comillas pues mas que un numero es un conjunto de datos, la mayoria numericos.
El ejemplo que se usara es bastante sencillo, tenemos un numero de folio en este formato:

B0075801003130500

 
Las secciones que componen el folio se colorearon diferente para que sean mas faciles de distinguir, notamos cuatro secciones.

  1. La serie del folio en negro
  2. El numero de folio en rojo
  3. La fecha de expiración en azul
  4. El valor del documento con ese folio (en este ejemplo son vales)

Y la pregunta principal, ¿Como sacamos esos datos del folio y los pasamos a un formato mas útil?, como pasar el numero de folio y el valor a enteros y la fecha a un objecto Date.

Por fortuna la clases String, Integer y SimpleFormatDate de Java nos proporcionan los métodos para realizar eso de forma sencilla y claram los metodos en los que nos enfocaremos son:

String.substring

Este método nos regresa una cadena de texto compuesta por los caracteres entre las posiciones, comenzando a contar desde cero,  indicadas en los argumentos, tiene dos sobrecargas principales que son:

.substring(int inicio)
Toma un solo argumento y regresa la cadena compuesta por todos los caracteres empezando desde esa posición.

.substring(int inicio, int fin)
Este metodo nos regresa la cadena delimitada entre los dos argumentos, pero tiene un detalle en extremo importante que se debe considerar ya que regresa los caracteres desde inicio hasta fin-1por lo que se debe de tomar eso en cuenta a la hora de contar los caracteres

Con ambos metodos facilmente podemos obtener los valores del numero de folio y el valor del mismo, ahora para convertirlos en enteros usaremos el metodos parseInt de la clase Integer

Integer.parseInt(string value)

El uso de este método es bastante sencillo, basta pasarle como argumento una cadena de texto y regresara un entero con el valor representado en la cadena.

SimpleDateFormat.parse(string date)

Ya solo queda obtener un objecto Date que contenga la fecha en el folio, para esto se hará uso de la clase SimpleDateFormat contenida en el paquete java.text, la función de esta clase es convertir una cadena de texto, en un formato preestablecido, en el objecto Date correspondiente.

Para hacer uso de esta clase se necesita realizar tres pasos que son

  1. Crear un objecto SimpleDateFormat pasando al constructor el formato en el que estaran los datos.
  2. Usar el método parse pasando como argumento la cadena de texto que representa la fecha, este nos regresara el objecto Date.
  3. Capturar la excepción ParseException que el método lanza en caso de aparecer un error.
El paso tres ciertamente parece extraño, pero es una medida para evitar errores en los datos.

Ya para concluir y hacer mas claro cualquier detalle en el uso de estas clases aqui esta el ejemplo mencionado con el folio en el formato descrito al comenzar.


package mx.com.omega.parse;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringParse {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String folio = "A0075801004130500";
        String tmp;
        char serie;
        int numFolio;
        int monto;
        Date fecha;
        SimpleDateFormat formato=null;
      
        // charAt nos entrega el caracter en la posicion indicada
        serie = folio.charAt(0);
      
        // subString nos da la cadena que va desde el argumento1 hasta argumento2-1
        tmp = folio.substring(1, 7);
        numFolio = Integer.parseInt(tmp);
      
        formato = new SimpleDateFormat("ddMMyy");
        tmp = folio.substring(7, 13);
      
        try {
            fecha = formato.parse(tmp);
        } catch (ParseException e) {
            // TODO Bloque catch generado automáticamente
            e.printStackTrace();
            fecha = null;
        }
              
        // Este overload obtiene la cadena desde el argumento hasta el final
        tmp = folio.substring(13);
        monto = Integer.parseInt(tmp);
      
        formato = new SimpleDateFormat("yyyy-MM-dd");
      
        System.out.println("Serie del tiquet:\t" + serie);
        System.out.println("Numero de folio :\t" + numFolio);
        System.out.println("Denominacion del tique:\t$" + monto);
        System.out.println("Vigencia del tiquet:\t" + formato.format(fecha));
      
    }

}


De nuevo esperando que todo esto sea de utilidad y nos vemos luego.