Bienvenidos al Blog de Aldo Malaver

Este Blog contiene articulos que te ayudaran a resolver muchos problemas, comenta cada articulo por favor. Gracias.

miércoles, 16 de noviembre de 2011

Manejo de Colecciones Concurrentes


Manejo de Colecciones Concurrentes
Actualmente estoy haciendo un trabajo  con colas y se me presento un caso de colas, donde tenía una cola que tenía como elementos cadenas que luego iban a ser consumidos por n hilos. Entonces para eso cree una cola Java utilizando el objeto Queue<Objeto>.

import java.util.Queue;

public class Prueba implements Runnable{

      private Queue<String> cola;

      public Prueba(){
            cola = new LinkedList<String>();
      }
}


Además la clase implementa la interface Runnable
      public Queue<String> getCola() {
            return cola;
      }

      public void run() {
            while(true){
                  if(cola.size() > 0)
                        mostrarMensaje(cola.remove());
            }
           
      }
     
      public void mostrarMensaje(final String mensaje){
            System.out.println(mensaje);
      }
     

Por último creamos un public static void main para poder agregar datos a la cola y correr los n hilos.
public static void main(String [] args){
      Queue<String> cola = new LinkedList<String>();
      for(int i = 0; i < 1000; i++){
            cola.add(String.valueOf(i));
            System.out.println(i);
      }
      Prueba p = new Prueba(cola);
      Prueba p2 = new Prueba(cola);
      new Thread(p).start();
      new Thread(p2).start();            
}

Si nos damos cuenta, en el método run tenemos que preguntar si la cola que estamos utilizando tiene elementos, sino hacemos eso, nuestro programa nos arrojará un error. También nos podría dar problema con los hilos y el mismo acceso a la cola por lo Java ha desarrollado clases para trabajar con más eficiencia los hilots y la multitarea.
Para eso utilizaremos colecciones concurrentes para poder iniciar n hilos y que no haya problemas de concurrencia. Java tiene un paquete java.util.concurrent para cual utilizaramos la interfaz BlockingQueue y la clase
public class Prueba1 implements Runnable{

      public BlockingQueue<String> cola;
     
      public Prueba1(BlockingQueue<String> cola){
            this.cola = cola;
      }

      public BlockingQueue<String> getCola() {
            return cola;
      }

      public void setCola(BlockingQueue<String> cola) {
            this.cola = cola;
      }
     
      public void run() {
            while(true){
                  try {
                        mostrarMensaje(cola.take());
                  } catch (InterruptedException e) {                  
                        e.printStackTrace();
                  }
            }
           
      }
     
      public void mostrarMensaje(String mensaje){
            System.out.println(mensaje);
      }
     
      public static void main(String [] args){
            BlockingQueue<String> cola = new LinkedBlockingQueue<String>();
            for(int i = 0; i < 1000; i++){
                  cola.add(String.valueOf(i));
                  System.out.println(i);
            }          
     
            Prueba1 p = new Prueba1(cola);
            Prueba1 p2 = new Prueba1(cola);
            new Thread(p).start();
            new Thread(p2).start();

      }

En esta clase ya no es necesario preguntar si la cola tienes valores, la interfaz BlockingQueue utiliza multitarea y por lo cual verifica los elementos de la cola, administra bien los bloqueos.


No te olvides de donar para poder crear más publicaciones.

jueves, 10 de noviembre de 2011

Reverse Engineer de modelo de datos en Erwin


Paso 1: Abrimos el erwin y nos aparecera un dialogo de conexión, y seleccionaremos el botón cancelar.

Paso 2: En la parte del menú, seleccionamos reverse Engineer.



Paso 3: Al seleccionar esto nos saldrá un wizard, donde nos pedirá que tipo de modelo a utilizar, entonces seleccionaremos el tipo Logical/physical, y además nos pedirá el motor de base de datos que utilizaremos para traer toda la información. En este caso será Oracle con la versión 10.x, luego seleccionamos el botón next. A continuación se muestra la imagen.


Paso 4: Al seleccionar next, nos aparecerá una pantalla para seleccionar los objetos que deseamos ver en el erwin (tablas, tablespace, índices, entre otros), además es una parte importante solamente seleccionar las tablas y vistas que pertenecen al usuario actual, pues sino erwin traerá los objetos de todos los esquemas (Tables/Views owned by Current user).


Paso 5: Luego hacemos click en el botón next, y nos pedirá las credenciales para que erwin se pueda conectar a la base de datos y pueda traer todos los objetos seleccionados en el paso anterior.
User name: es el nombre del usuario con el cual nos conectamos (nombre del esquema).
Password: contraseña del usuario
Connect String: es el nombre de la conexión que se encuentra en el tnsnames.ora.
Luego hacemos click en el botón connect y erwin empezará a crear el modelo en base a la base de datos seleccionada. A continuación se muestra la imagen de credenciales de la base de datos a conectarse.


No te olvides de donar para poder crear más publicaciones.