Estigmatizados

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

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

Configuración de Alfresco Community 3.2 con CAS

alfresco-dashboardTenemos Alfresco y Liferay autenticando con LDAP. Vamos a ir un paso más buscando el Single Sign On -SSO-. Para ello vamos a utilizar el “Central Authentication System”.
Sitio web: Jasig CAS
Información sobre la instalación en: Alfresco Wiki

Prerrequisitos

  • Servidor CAS instalado
  • Certificado SSL para el servidor CAS instalado

Sigue leyendo

agosto 18, 2009 Posted by | CMS, Infraestructura, Portales, Uncategorized | , , , | 7 comentarios

¿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

The Big Picture: Liferay + Alfresco + Jasig CAS + OpenLDAP

The Big Picture

The Big Picture

Nos vamos acercando al entorno deseado. Tenemos Liferay y Alfresco autenticando con OpenLDAP. Es hora de añadir el Single Sign On (SSO), utilizando una solución desarrollada por la universidad de Yale: Central Authentication System (CAS).

En primer lugar vamos a configurar el servidor CAS:
  1. Deberemos configurar un “LDAP Authentication Handler”
  2. Deberemos configurar el servidor para SSL.
  3. Deberemos configurar los clientes para que confíen en el certificado del servidor generado en el punto (2) -esto es necesario porque vamos a trabajar con certificados de prueba (self-signed)

Sigue leyendo

agosto 13, 2009 Posted by | Portales | , , , , , | 5 comentarios

Configuración de Tomcat 5.5 para SSL

Dado que tengo CAS en un Tomcat 5.5 voy a configurar el conector SSL. Ésta es una tarea muy sencilla pero he tenido un problema y quiero resaltarlo en este post por si otro pringao como yo cae en el mismo agujero.
Más información en Apache.org

Asunciones

  • En este ejemplo voy a utilizar certificados self-signed; con esto quiero decir que van a ser certificados de prueba que no van a ser validados por ninguna entidad certificadora como VeriSign, Thawte, etc.
  • Utilizaré como servidor Tomcat 5.5
  • Utilizaré la herramienta keytool JDK keytool para generar los certificados

  Sigue leyendo

agosto 12, 2009 Posted by | Portales | , , | 2 comentarios

Instalación de CAS; certificado SSL. cacerts keystore password

Más o menos tenemos Alfresco y LifeRay tirando de un mismo OpenLDAP. Ahora vamos a ir un paso más y habilitar “Single Sign On” utilizando una solución creada originalmente por la universidad de Yale: el Central Authentication System o su popular acrónimo CAS.

Como las URL de CAS están protegidas por SSL, vamos a crearnos un certificado propio para las pruebas. Ese certificado lo almacenaremos en el almacén -keystore- de nuestra JRE (la que utilice nuestro servidor).

Los pasos son básicamente 3 y sólo he encontrado problemas en el tercero (por culpa de la clave del keystore de la JRE).

  1. Generar clave SSL
    keytool -genkey -alias tomcat -keypass changeit -keyalg RSA
  2. Exportar el certificado
    keytool -export -alias tomcat -keypass changeit -file server.crt
  3. Añadir el certificado al keystore de la JRE
    keytool -import -file server.crt -keypass changeit -keystore ..\jre\lib\security\cacerts
    El problema viene en este último paso. Nos piden la contraseña del almacén de claves. ¿Qué demonios...? ¿Cuál es la contraseña del keystore de la JRE? Buena pregunta; yo tuve que hacer una búsqueda en Google: "cacerts keystore password" y la respuesta es changeit.
    Jaja, por eso los ejemplos funcionan todos, nosotros como nos empeñamos en personalizar nuestras claves... 

 Resumiendo:

 La contraseña por defecto del cacerts es changeit

 C:/desarrollo/java/install/jdk1.6.0_14/jre/lib/security/cacerts

En Windows la ruta del almacén de claves generado  está en el perfil del usuario. En mi caso

C:/Documents and Settings/Fer/.keystore

agosto 12, 2009 Posted by | Uncategorized | , , , , , , | 1 comentario

Software LDAP

Dado que estamos trabajando contiuamente con LDAP en Windows, voy a incluir algunas direcciones con software de interés. Principalmente dónde encontrar una versión de OpenLDAP compilada para Windows.

agosto 11, 2009 Posted by | Uncategorized | , , , | Deja un comentario

Every dog has his day -Alfresco y openLDAP también-

Según un compañero de fatigas de Rusia éste es un dicho popular allí. Tengo que preguntarle si es el equivalente a nuestro

A todo gochu le llega su San Martín

En mi caso a Alfresco parece que le está llegando ya que más o menos está autenticando con LDAP. Realmente está haciendo chaining entre la autenticación integrada de Ejemplo de mi árbol LDAPAlfresco y el LDAP.

Gracias a un ingeniero de Alfresco -gracias dward- y a muchas horas probando he llegado a las siguientes conclusiones:

Olvidaos de los ejemplos de chaining disponibles en:

C:\desarrollo\java\install\alfresco-3.2\tomcat\shared\classes\alfresco\extension\chaining-example.zip

Son para versiones anteriores y no funcionan en la Community 3.2. Tenemos que configurarlo de acuerdo a la versión 3.2 Instrucciones aquí aunque hay un problema: no funciona el mecanismo de redefinición de propiedades -configuring subsystems- por lo que las propiedades relativas a LDAP tenemos que agregarlas al archivo de configuración global.

C:\desarrollo\java\install\alfresco-3.2\tomcat\shared\classes\alfresco-global.properties

 Adjunto un ejemplo de cómo es mi archivo:

Sigue leyendo

agosto 11, 2009 Posted by | Uncategorized | , , , , , | 8 comentarios

Tail y grep en Windows

Trabajando con proyectos open source y trabajando en Java, a buen seguro echaremos de menos esa agreste, pero familiar pantalla del shell de Unix. Ni siquiera Bender -el robot- podría -estando sobrio- discernir dónde está un error en esos interminables log4j sin la ayuda del tail y del grep. Si nuestro operativo es Windows… ¿estamos condenados?

No si instalamos el kit de recursos de XP que incluye tail y qgrep.
Windows 2003 resource kit

Esto combinado a que podemos especificar las propiedades del ancho y alto de la ventana del CMD así como el muy

Propiedades de la ventana de comandos de Windows

Propiedades de la ventana de comandos de Windows

útil “Modo de Edición Rápida” nos permitirá trabajar como si estuviéramos en Linux, Solaris, etc.
tail -f alfresco.log | qgrep ldap

agosto 10, 2009 Posted by | Uncategorized | , , | Deja un comentario

Alfresco Subsystem extension classpath override mechanism not working

Necesito configurar Alfresco para que utilice LDAP como mecanismo de autenticación ya que quiero centralizar los usuarios en mi Apache Directory. La documentación de Alfresco es bastante confusa y no me parece tan fácil como dicen configurar el LDAP.
Quiero mantener el sistema de autenticación de Alfresco por si tengo problemas con el LDAP, luego voy a encadenar ambos Alfresco Authentication Chain

Como podéis ver en el título del post el mecanismo para redefinir las propiedades de los elementos de la cadena de autenticación no funciona. ver Bug
Yo he bajado a principios de esta semana la release de la Community y creo que tiene el problema menciondo. La solución parece ser obtener una nightly build.

agosto 7, 2009 Posted by | Uncategorized | , | Deja un comentario