Estigmatizados

La informática profesional no es un juego de políticos

Jarfinder Tool – Utilidad cli para localizar clases Java en el Classpath

El título parece un chiste de Chiquito… Disculpad, tengo que cuidar también el mercado anglosajón 🙂
Esta utilidad tiene básicamente la misma función que la JSP para localizar clases vista en un post anterior.
Ejecutada sobre un directorio busca los archivos .jar existentes y crea un ClassLoader para delegar en él la búsqueda de la clase indicada como parámetro.
Presenta un par de diferencias con la versión JSP, estas diferencias se traducen en pros y contras.

Pros
—-
Al poder ser invocada desde línea de comando es mucho más sencilla de usar; no tenemos por qué andar copiando la JSP en el contexto de una aplicación. Tan sólo tenemos que ejecutarla indicando el directorio padre donde se encuentran los archivos JAR que pueden contener la clase buscada (ej: c:\install\alfresco\tomcat)

Contras
—-
Al crear un ClassLoader propio, el JAR que esta utilidad encuentra puede no coincidir con el JAR que utiliza el ClassLoader de la aplicación web. Recordemos que los ClassLoader se organizan en una jerarquía y ésta puede ser parent-child o child-parent. Si dos JAR contienen una misma clase la versión de línea de comandos no tiene por qué devolver el mismo JAR que utiliza el ClassLoader de la aplicación web.

Un ejemplo de uso de la utilidad sería:
jarfinder /R -class org.apache.coyote.ActionCode -dir .

Siendo jarfinder un archivo de script (sh o bat) tal como:

@echo off
c:\desarrollo\java\install\jdk1.6.0_14\bin\java.exe -jar "C:\Archivos de programa\Desarrollo\jarfinder.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

El código fuente Java de la utilidad:

Sigue leyendo

Anuncios

septiembre 14, 2009 Posted by | Programación | Deja un comentario

Resultados de: ¿Cuánto sabemos de Java?

Cerramos la encuesta para valorar cuánto sabemos de Java, agradeciendo al “Sr. Francisco Ros” su atinada respuesta que una vez más nos demuestra por qué está donde está 🙂

encuesta-01

Resultados

La opción mayoritariamente escogida es la de que Java pasa los tipos básicos por valor y el resto por referencia. Esto viene a demostrar -junto con ¿Quién quiere ser millonario?- que no siempre la opción más popular es la más correcta.

La solución es:

Java sólo permite el paso de parámetros por valor

Más información en: http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html

A diferencia de C/C++ no podemos indicar a otro método la dirección de una variable local para que este segundo método pueda modificar su contenido. El paso es siempre por valor; es decir: en la llamada se crean copias de las variables argumento y se copian sus valores.

En Java las variables pueden clasificarse según el tipo sobre el que se definen:

  • Tipos primitivos: int, char, long, …
  • Tipos referencia: Array, referencias a objetos (String), …

Lo anterior ¿quiere decir que cuando pasamos un objeto se copia todo el contenido del objeto? La respuesta es no, dado que los objetos nunca se pasan como argumentos; lo único que se pasa es la referencia al objeto. Esta referencia podemos verla como un smart pointer de C++, como una variable que simplemente guarda la dirección del objeto. Cuando en Java se pasa una referencia a objeto se crean copias de la variable referencia y se copia su valor: la dirección de memoria donde está el objeto.

Resumiendo:

El paso de parámetros en Java se realiza por valor, lo único que para objetos se pasan variables referencia por valor.

Experimento

Los excépticos pueden comprobar que la afirmación anterior es cierta probando el siguiente ejemplo:

public class TestArgPass {

	private static void concat(String origStr, String concatStr) {
		origStr = origStr + concatStr;
	}	

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String origStr = "Hola ";
		String concatStr = "Mundo";

		concat(origStr, concatStr);

		System.out.println(origStr);
	}
}

Si el paso fuese por referencia origStr debería apuntar a un nuevo String formado por la concatenación de los literales “Hola ” y “Mundo”; en caso contrario origStr permanecería con el mismo valor que tenía antes de la llamada; es decir: apuntando a un objeto String con valor “Hola “.

agosto 21, 2009 Posted by | Programación | , , | Deja un comentario

¿Cuánto sabemos de Java?

Como perro más o  menos viejo en C++, no puedo dejar de mirar a Java con cierto resentimiento. ¿Por qué el cruel destino nos obliga a dejar de lado el mejor lenguaje de programación de la historia? Queridísimo C, tú que eres lo más de lo más -pluscuamperfecto 🙂 – ¿por qué te has ido? ¿Por qué tenemos que programar en un lenguaje pensado para lavadoras?

Proteja la vida de suuu lavadora conn JavaA

Bromas a parte, se decía antaño que no eras un verdadero programador si no conocías el Assembler -los más fanáticos decían que los mnemónicos eran pa nenazas, que si no veías a la rubia en el código mejor comprabas una revista de IBM de “aprenda a programar”- El caso es: ¿un buen programador de Java es un buen programador?

Empecemos por realizar la pequeña encuesta que abre este post

Sólo hay una respuesta correcta 🙂

agosto 17, 2009 Posted by | Programación | 5 comentarios