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.

También puedes responder nuestra encuesta para saber en que estado vives!

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.

    JNI (Java Native Interface) Centos

    En este blog se mostrara como crear un archivo sencillo en Java para mostrar el Famoso Hola Mundo Utilizando JNI, para saber mas de Java Native Interface Verificar el siguiente Link:

    https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface...
    La realizacion del pequeño tutorial se realiza mediante el SO Linux en particular CENTOS; Buenos empezemos a realizar la creacion del programa y la compilacion.

  • Se crea primeramente la clase Java la llamaremos Testing.java
  • class Testing{
        private native void Hola();
        public static void main(String... args){
         System.loadLibrary("Testing");// recibe el nombre de una libreria dinamica y la carga...
         new Test().Hola();
        }

       
    }

    Posteriormente cuando ya se tiene creada la clase se compila en mi caso seria de la siguiente manera.

    javac Testing.java Realizamos la compilacion de la clase Testing.java
    y tambien compilamos de la siguiente manera donde nos generara un archivo Testing.h

    javah Testing y nos genera el header nativo de C.

    /* DO NOT EDIT THIS FILE - it is machine generated */

    Ejemplo bastante simple de RMI

     

    He aquí un ejemplo bastante simple de RMI (Servidor y Cliente).

    Primeramente escribimos la interfaz remota con los métodos requeridos. Por ejemplo, un método para saludar:

    package com.company.app;

    import java.rmi.Remote;
    import java.rmi.RemoteException;

    public interface TestRemote extends Remote {

        String sayHello(String name) throws RemoteException;

    }

    A continuación, implementamos esta interfaz en una clase. Para mayor simplicidad, he utilizado una clase anónima. Y ya que estamos en esto, escribimos también el programa Servidor, el cual registrará la instancia generada a partir de la clase anónima:

    ¿Qué opinan sobre esta frase de James Gosling?

    Se cumple ? Si o no y porque.


    Distribuir contenido