Bienvenido a Java Mexico

Java México es una comunidad de desarrolladores mexicanos en el lenguaje Java.

Este sitio es colaborativo, automáticamente al registrarte obtienes un Blog para compartir tus conocimientos o información acerca del lenguaje. Antes de publicar en tu blog o los foros por favor lee los lineamientos de publicación.

Para dudas y problemas con respecto al lenguaje Java puedes visitar los Foros de Discusión.

Inicializadores (Inicializadores de Instancia)

Continuando con el post anterior sobre bloques estáticos, pero ahora toca definir los usos, ventajas y desventajas de los inicializadores tambíen conocidos como "inicializadores de instancia", como se puede deducir estos bloques están dedicados para colocar bloques de código para inicializar variables que pertenezcan a la instancia.

Los inicializadores de instancia son bloques de código que pertenecen a la instancia, y se declaran dentro de la clase entre llaves como a continuación se muestra en el siguiente código:

package com.ejemplos.inicializadores;

public class Ejemplo1 {

        {
                System.out.println(this.getClass().getSimpleName());
        }

        Ejemplo1() {
                System.out.println("Constructor");
        }

        public static void main(String[] args) {
                new Ejemplo1();
        }

        {              
                System.out.println(this.getClass().getName());
        }

        {
                System.out.println(this.getClass().getSuperclass());
        }

}

Salida:

Ejemplo1
com.ejemplos.inicializadores.Ejemplo1
class java.lang.Object

Constructor

Obtener el Valor seleccionado de im combo BOx

Hola que tal amigos de java México saben tengo una pregunta.
¿Como obtener el id del item seleccionado?

 @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getSource() == viEva.cbArea) {
            viEva.cbAspecto.removeAllItems();
           
            String selec =viEva.cbArea.getSelectedItem().toString();
            Object obj = viEva.cbArea.getSelectedItem();
           // System.out.println("ID "+ obj.);
           String slq = "SELECT IdAspecto, Aspecto FROM Aspecto JOIN Area ON Aspecto.IdArea = Area.iDarea WHERE Area='" + selec + "';";

            viEva.cbAspecto.setModel(md.LlenarIndiceCombos(slq));
        }

    }

el debugear veo que la variable

obj

tiene las propiedades de valor y de id, pero no encuentro la manera de como acceder a esas propiedades.
el metodo con el que lleno los combos es el siguiente

public DefaultComboBoxModel llenarComboIndiceValor(String sql) {
        result = consultarSQL(sql);
        modeloCombo = new DefaultComboBoxModel();
        int cont = 0;
        String col[]= new String[2];
        try {

Comunicación asíncrona entre procesos Java

En este post de jpaul estuve comentando acerca de algunas de las broncas de RMI, y de cómo hay opciones más eficientes para cuando se necesita implementar comunicación eficiente entre dos aplicaciones Java, usando algo similar a RMI.

Primero que nada, quiero mostrar cuál es el problema concreto con RMI: cada llamada que se recibe en la aplicación que publica el componente, se hace en un hilo separado. Para demostrar esto, tomé el ejemplo original y lo modifiqué un poco: El servidor tarda un poco de tiempo, y también imprime el nombre del hilo actual y el número total de hilos activos:

Random rng = new Random(System.currentTimeMillis())

Remote stub = UnicastRemoteObject.exportObject(new TestRemote() {
  @Override
  public String sayHello(String name) throws RemoteException {
    println "Corriendo en ${Thread.currentThread().name} total ${Thread.activeCount()}"
    if(rng.nextBoolean())Thread.sleep(10)
    return "Hello, " + name;
  }
}, 0);
def registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
registry.bind("Test", stub);
println "Escuchando..."

Bloques estáticos

Hace poco tuve una conversación con un amigo acerca del uso de bloques estáticos y pues sabíamos muy poco de ellos, dicha platica nos hizó investigar más sobre el tema, lo cual originó que escribierá sobre usos, ventajas y desventajas de los bloques estáticos:

Primero toca definir que es un bloque estático: también conocido como inicializador estático es aquel bloque de código que pertenece a una clase o interface y se define entre llaves de código precedidas por la palabra reservada static como se presenta el siguiente fragmento de código:

    public class Ejemplo{

         static int numero;        

         static{
             System.out.println("Esto se imprime dentro de un bloque estático o inicializador estático");
             numero = 10;
         }
         
        public static void main(String [] args){
             
        }
    }

Varianza en Ceylon

Bueno pues después del artículo maratónico acerca de varianza en Java, ahora quiero explicar cómo se implementó esto en Ceylon. Para ello vamos a usar los mismos ejemplos, de modo que quede clara la comparación.

Lo primero son las tres clases para el ejemplo, y la primera función:

class A() {}
class B() extends A() {}
class C() extends B() {}

B f(B param) => C();

Hasta aquí, todo funciona exactamente igual que en Java:

B algo;
A a = f(algo); //OK
B b = f(algo); //OK
C c = f(algo); //Error

f(A()); //ERROR
f(B()); //OK
f(C()); //OK

En Ceylon también existe la covarianza en los tipos de retorno, similar a lo que se introdujo en Java 5:

class Padre() {
  shared default A metodo() => A();
}
class Hijo() extends Padre() {
  shared actual C metodo() => C();
}

Con los parámetros no se puede hacer algo similar. Ceylon no tiene sobrecarga de métodos, pero no tiene contravarianza en los parámetros; por lo tanto, al refinar un método de un supertipo, los parámetros deben ser exactamente del mismo tipo que en la declaración original, o el compilador emite un error.

Varianza, Covarianza y Contravarianza

En los sistemas de tipado estático, existe este concepto de varianza, que a veces puede entenderse muy fácil pero tampoco es tan intuitivo como parece.

Para ilustrar la varianza, vamos a definir una jerarquía de clases muy simple:

public class A {}
public class B extends A {}
public class C extends B {}

Y definimos un método o función que usa estos tipos:

public B f(B param) {
   //Qué puede devolver?
}

Primero que nada, viéndolo desde fuera, ¿A qué tipo de variables podemos asignar lo que devuelve esta función?

B algo;
A a = f(algo);
B b = f(algo);
C c = f(algo);

Las primeras dos líneas son correctas, la tercera da un error. Esto es porque la función devuelve un valor de tipo B, y B es también un A. Pero no podemos asignar a una subclase de B, al menos no sin hacer un cast, pero no vamos a hacer casts en esta ocasión. B no es un C, por lo tanto la tercera línea no compila.

Hasta aquí todo bien. Ahora, ¿Qué le podemos pasar como argumento a esta función? Tiene un solo parámetro de tipo B. En esta ocasión, es alrevés:

f(new A()); //ERROR
f(new B()); //OK
f(new C()); //OK

Buscar información en una base de datos y mostrarla en una tabla de tu formulario

Pool metodospool = new Pool();
DefaultTableModel ModeloTabla;
   

public void Buscar(String valor, String filtro, JTable tablacontactos){

    String [] columnas={"ID","Nombres","Apellidos","Email","Celular", "Dirección", "Ciudad"};
    String [] registro=new String[7];
    ModeloTabla=new DefaultTableModel(null,columnas);
    String SSQL;
    Connection conect = null;

 
    if(filtro.equals("Apellidos")){
   
        SSQL= "SELECT id_contacto, nombres, apellidos, email, celular, direccion, ciudad "
              + "FROM contacto WHERE apellidos LIKE '%"+valor+"%'";
       
    }else if(filtro.equals("Email")){
   
        SSQL= "SELECT id_contacto, nombres, apellidos, email, celular, direccion, ciudad "
              + "FROM contacto WHERE email LIKE '%"+valor+"%'";
   
    }else{
   
        SSQL= "SELECT id_contacto, nombres, apellidos, email, celular, direccion, ciudad "
              + "FROM contacto WHERE celular LIKE '%"+valor+"%'";
   
    }
   
           
     
    try {

        conect = metodospool.dataSource.getConnection();
        PreparedStatement st = conect.prepareStatement(SSQL);

JNI (Java Native Interface) Invocar una función en C desde Java Linux

Explicaremos lo mas breve posible la configuracion e instalacion invocando una funcion en C desde Java en este caso lo aremos con el sistema operativo Linux, el famoso Hola mundo bueno; empezemos con la explicacion:

  • Primeramente Verificamos la version de Java que tenemos instalado
  • @kali:~$ java -version
    java version "1.6.0_34"
  • Posteriormente creamos nuestra clase Java
  • public class HolaMundo {
           
            public HolaMundo(){
              System.out.println("\n Iniciando el constructor ...");       
            }
           
            public void FuncionSimple(String str){
                   
                    System.out.println("Funcion Simple ="+ str);
            }
           
            public static void FuncionEstatica(String str){
                    System.out.println("Iniciando una funcion metodo statico="+str);
            }
           
           
            public static void main(String[] args) {
                    HolaMundo obj =new HolaMundo();
                    obj.sampleFunc("Hola Bienvenido Invocando Funcion de C desde Java");
                    System.out.println("\n Llamando una funcion....");
                   
            }

    }

  • Compilamos la clase Java HolaMundo
  • javac HolaMundo.java
  • Creamos el Header de C
  • Update Masivo

    Hola a todos, espero me puedan ayudar, tengo un problema, necesito actualizar masivamente una gran catidad de registros, tengo el siguiiente codigo para hacerlo pero no se si este bien o talves necesita ser optimizado, porfavor espero me puedan ayudar, estoy trabajando sobre el servidor de Aplicaciones Jboss.

    @Override
        public void insertamasivo(List<ArchivoTransaciones> archivos, ArchivosRecolectados archivorecolectado) {
            int contador = 0;
            try {            
                long tiempoInicio = System.currentTimeMillis();

                for (ArchivoTransaciones arch : archivos) {
                    arch.setArchivosRecolectadosId(archivorecolectado);
                    em.persist(arch);
                    if (contador++ % 20 == 0) {
                        em.flush();
                        em.clear();
                    }
                }
                long totalTiempo = System.currentTimeMillis() - tiempoInicio;
                System.out.println("El tiempo de demora es :" + (totalTiempo / 60000) + " minutos");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("SE DETUVO EN EL No --> " + contador);
            }

        }
     

    Leer y Escribir archivos Scanner y PrintStream

    Vamos a crear un pequeño ejemplo realizando una suma de dos numeros que se encuentren dentro de un archivo .txt para ello en este pequeño blog utilizaremos Scanner para leer el archivo y PrintStream para guardar la suma de esos dos numeros.
    http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html

    El codigo quedaria de la siguiente manera.

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintStream;
    import java.util.Scanner;

    public class suma {
            private Scanner file;
            private PrintStream save;
            private int suma;
            public static void main(String[] args) throws FileNotFoundException {
                    suma s=new suma();
                    s.sumar();
            }
            public void sumar() throws FileNotFoundException
            {
                    file=new Scanner(new File("suma.txt"));
                    save=new PrintStream("guardar.txt");
                    int numero1;
                    int numero2;
                    numero1=file.nextInt();
                    numero2=file.nextInt();
                    suma=numero1+numero2;
                System.out.println("La suma es:"+"del"+numero1+"+"+numero2+"="+ suma);
                 save.println("La suma es:"+"del"+numero1+"+"+numero2+"="+ suma);
                   
            }

    }

    Saludos.

    Distribuir contenido