martes, 6 de noviembre de 2007

Frases - Escuela

En el momento que tanto profesores como alumnos dejen de quejarse de que no tienen tiempo o no hay tiempo, en ese momento se mejorará la transferencia de conocimiento.

jueves, 1 de noviembre de 2007

Excelentes Frases

Sólo cuando la mente está libre del deseo de llegar a ser algo, de obtener un resultado y, en consecuencia, está libre de temor, puede hallarse en un estado de completa quietud y silencio. Sólo entonces es posible esa creatividad que es la realidad misma.
Krishnamurti

sábado, 28 de julio de 2007

NetBeans con Esteroides

En muchas ocasiones comente que Netbeans era un Editor de Java menos poderoso que eclipse y JDeveloper, sin embargo hoy en día NetBeans con el apoyo de Sun se ha convertido en un editor de primera clase al soportar:

  • Swing
  • Java Server Faces
  • Struts 1.2.9
  • Visual Web Pack
  • JPA con Hibernate y Top Link
  • UML
  • BPEL
  • Web Services (Sun Application Server 9)
Además permite la configuración con varios servidores de aplicaciones y Servlet Engines, para los cuales existen configuración de fabrica con:
  • Tomcat 5.5
  • JBoss
  • Sun AS 9

sábado, 2 de junio de 2007

Frases-Junio 2007

Aqui agrego algunas frases que en ocasiones cito, no sé si vengan de algo que ya he leido, algo que he visto, sólo sé que las digo.

Si quieres que alguien aprenda, tienes que estar ahi para el momento en que te necesite y ser paciente.

domingo, 20 de mayo de 2007

ES-Senderos

Para muchos es fácil catalogar a las personas, vasta con solo mirarle, la ropa, los zapatos o el peinado, sin embargo porque les resulta tan difícil observar la mirada y analizar sus expresiones.

Aun es tiempo de que no puedo simplemente mirar el exterior y dejar de hurgar en los ojos y expresiones del rostro. Quiero seguir pensando que las vivencias y las cicatrices de nuestra vida se llevan en la mirada. Deseo recordar que ese dolor que habito nuestra vida se cicatriza en nuestro corazón y nos hace ser fuertes encontrando: una razón que llene de luz nuestra sonrisa, un temple que no se inmuta ante las inclemencias temporales de la vida.

He buscado por muchos caminos el dolor que mantenga mi espíritu tranquilo, brindando paz a esas personas con las que cruzo palabras o miradas. Sigo un camino que parece guiarme sin una dirección clara, sin embargo las sensaciones y emociones que la vida me da, me hacen sentir como la sangre fluye por mis venas, me demuestran como puedo enojarme, gritar y reír.

Cada mañana me levanto y no siquiera observo si mi mirada es mas tranquila, lo único que hago es correr porque siempre hay un lugar a donde llegar y en ocasiones no es un lugar como el que busca mi corazón. Sigo la monotonía de un día lleno de emociones que mi corazón no busca, sigo un día de aventuras y peripecias que la vida me ofrece para darme cuenta cual es mi razón de hacer las cosas, cual es mi razón de continuar y no quedarme en el mismo lugar que el día anterior. Cada día es un paso breve en una vida que es tan corta como no imaginamos y tan larga como la aprovechemos.

Los días pasan uno tras otro como si fueran segundos en aquel viejo reloj que muchos años atrás inicio su marcha sintiendo aquella cálida brisa que la vida nos da.

miércoles, 25 de abril de 2007

SSO - OpenSSO y sus Agentes

Después de muchos y muchos experimentos logramos hacer funcionar el openSSO y puede decirse que el mayor problema que se nos presentó fue el nombre de dominio. Esto debido a que el sso utiliza los dominios (.cetechihuahua.gob.mx, .itesm.mx) para poder generar la cookie y reconocer el servidor que la está solicitando.

Por lo cual nos fue necesario configurar el servidor de sso con su nombre de dominio real, ejemplo sso.cetechihuahua.gob.mx.

De está manera reinstalamos el opensso y en la pantalla de configuración le asignamos el nombre de sso.cetechihuahua.gob.mx, en lugar de su dirección IP (10.0.0.xx). Además en está ocasión seleccionamos un cookie domain más acorde a nuestras necesidades ".cetechihuahua.gob.mx"

Por último la configuración del Tomcat, la hicimos como se nos indica en el artículo: "Single Sign-On Using Sun Java System Access Manager 2005Q4 and Sun Java System Access Manager Policy Agent 2.2". Para esté paso nos fue necesario agregar al DNS a la PC que tenía el tomcat, y agregar el TomcatProfile como indica el artículo.

viernes, 20 de abril de 2007

SSO - Implementando un Login con Java y OpenSSO

He iniciado las pruebas con un login de basado en un aplicacion Web, con el objetivo de evaluar el API de OpenSSO y validar si está es una opción factible para el desarrollo de nuestras aplicaciones.

Antes de Iniciar con estos pasos es necesario saber que es el archivo AMConfig.properties y ver los requisitos del API para clientes. Para más información consultar "How the Client SDK Works"

Una vez que tenemos el SSO instalado y configurado, procedemos a bajar los APIs para el client SDK en la siguiente dirección: http://download.java.net/general/opensso/nightly.

Creamos nuestro Web Project con eclipse WTP o JDeveloper y copiamos nuestro sso client sdk al directorio WEB-INF/lib.



Creamos nuestra pantalla de log in con la tecnología que preferimos





Creamos la clase de autenticación


import java.io.IOException;
import java.util.MissingResourceException;
import java.util.Properties;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.TextOutputCallback;
import javax.security.auth.callback.UnsupportedCallbackException;

import com.iplanet.am.util.SystemProperties;
import com.sun.identity.authentication.AuthContext;
import com.sun.identity.authentication.spi.AuthLoginException;

public class Login {
private static final String moduleName = "DataStore";

private String loginIndexName;
private String orgName= "opensso";
private User user;

/**
* Constructor
* @param user
*/
public Login(User user) {
this.user = user;
loginIndexName = "http://sso.cetechihuahua.gob.mx:8080/fma";

}

protected AuthContext getAuthContext()
throws AuthLoginException {
AuthContext lc = new AuthContext(orgName);
AuthContext.IndexType indexType = AuthContext.IndexType.MODULE_INSTANCE;
lc.login(indexType, moduleName);
debugMessage(loginIndexName + ": Obtained login context");
return lc;
}

private void addLoginCallbackMessage(Callback[] callbacks)
throws UnsupportedCallbackException {
int i = 0;
try {
for (i = 0; i < succeed =" false;" callbacks =" null;" callbacks =" lc.getRequirements();" succeed =" true;">



Creamos un servlet que ejecute la autenticación



package sso;

import java.io.IOException;
import java.util.Properties;

import javax.security.auth.callback.UnsupportedCallbackException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.iplanet.am.util.SystemProperties;
import com.sun.identity.authentication.AuthContext;
import com.sun.identity.authentication.spi.AuthLoginException;

/**
* Servlet implementation class for Servlet: SSOLogin
*
*/
public class SSOLogin extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {

static {
System.err.println("Loading properties");
Properties props = new Properties();
props.setProperty("com.iplanet.am.naming.url",
"http://sso.cetechihuahua.gob.mx:8080/afm/namingservice");
SystemProperties.initializeProperties(props);
System.err.println("Properties Inicializadas");
}

/*
* (non-Java-doc)
*
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
* HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

/*
* (non-Java-doc)
*
* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
* HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("Autenticando");

Login login = new Login(new User(request.getParameter("usuario"),
request.getParameter("password")));
AuthContext lc;
try {
lc = login.getAuthContext();
if (login.login(lc)) {
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/firmado.jsp");
dispatcher.forward(request, response);
} else {
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/error.jsp");
dispatcher.forward(request, response);
}
} catch (AuthLoginException e) {
e.printStackTrace();
} catch (UnsupportedCallbackException e) {
e.printStackTrace();
}
}
}

Ligas de Interes:


http://forum.java.sun.com/thread.jspa?threadID=5054004

SSO - Gil VS OpenSSO Round 3

El openSSO parece ser una solución excelente para problemas de autenticación de usuarios, sin embargo hasta el momento, la configuración y el uso del SSO resultan complejos, ya que utiliza muchos conceptos, la configuración a pesar de ser sencilla requiere que la persona tenga conocimientos de muchos terminos, como DS, LDap, dominios, configuración de servidores, entre otras cosas.

Hasta el momento la alternativas que conosco para autenticar con el SSO son utilizando un agente y utilizando el API.

Utilizando el Agente

Los agentes para el SSO son distribuidos por SUN y su labor es monitorear los dominios, contextos o aplicaciones que se encuentran en un server. Por ejemplo si mi aplicación usa Java y está en tomcat, yo instala una aplicación de nombre abs, con el war abs.war. entonces mi url seria:

http://localhost:8080/abs.

En ese caso si yo configurara el agente para monitorear abs, automanticamente al teclear esta dirección en el navegador, la página sería redireccionada al SSO para autenticarse. Una vez autenticado se regresaría el flujo a mi aplicación y dependiendo de la seguriddad me permitiría acceder a ella.

Los agentes funcionan con muchos servidores, Apache, IIS, WebLogic, Tomcat, etc. por lo cual cuando no utilizamos tecnologías de java, son excelentes.

Utilizando el API

El SSO tiene un API de Java que permite establecer conexiones con nuestro servidor de Accesos (Donde está instalado el OpenSSO), Si nosotros queremos tener el control y personalizar la implementación podemos utilizar esta opción además esta opción no requiere de Agentes.

martes, 17 de abril de 2007

SOA - Capítulo I - En Busca de SOA

Hasta el día hoy hemos trabajado arduamente sin un objetivo claro y entendible, ya que por mas que investigamos e instalamos openSource nos hemos dado cuenta de que nuestras necesidades sobrepasan por ahora el openSource y estamos intentando organizar nuestros esfuerzos hacia una arquitectura orientada a Servicios y un ambiente federado.

Posiblemente entender SOA (Service Oriented Arquitecture) resulta sencillo para muchos ya que es un concepto en que muchos procesos de negocios se definen a través de la integración de servicios proporcionados, por uno o más sistemas y por uno o más organizaciones.

Sin embargo en nuestra región la integración de aplicaciones por medio de SOA es aún un mito ya que como desarrolladores estamos acostumbrados hacer aplicaciones gigantescas que tengan muchos módulos, por lo cual podemos decir que es un conjunto de código en un solo proyecto de implementación. Una forma de en la que podemos ver este tipo de sistemas se muestra en la siguiente figura:

Sin embargo para desarrollar esté tipo de aplicaciones se requiere al menos 4 o 5 desarrolladores que lo implementen, y en muchas ocasiones no existe documentación, un diseño previo y menos una arquitectura, lo que hace que estos sistemas sean en extremo complejos, difíciles de mantener y dependen de las personas que los desarrollan. Por estos motivos a los arquitectos de soluciones y aplicaciones les resulta fundamental evaluar este tipo de situaciones y al ser un problema muy complejo se han buscado muchas maneras como los objetos COM, EJBs, CORBA, etc. hasta que se ha llegado a SOA, que resuelve muchos de los problemas de integración de aplicaciones. Posteriormente se irá describiendo las características de SOA a medida que las vayamos descubriendo y entendiendo.

Una arquitectura en SOA tiene una forma como la siguiente:

Por otro lado hemos hablado de un ambiente federado y es una pregunta un tanto difícil de entender por el momento diremos que federación es la capacidad de poder utilizar servicios de muchas organizaciones, dominios o servidores como si fueran uno.

Si deseas tener una perspectiva general de Identity Management ver está liga:

sábado, 14 de abril de 2007

ES - Razones

La monotonía y el trabajo diario nos fuerzan a pensar solo en lo que hacemos en DIA, olvidando a quienes están a nuestro alrededor.

Es tan drástica la monótona, es tan esclavizante el trabajo que solo vivimos para ellos y no ellos para hacernos felices a nosotros, recordemos como miramos el reloj cuando están a punto de ser las 3:00, las 4:00, o cualquier hora a la que se acabe nuestro trabajo. ¿Por qué simplemente puedo disfrutar el día cuando estoy fuera de mi escritorio y alejado de los papeles del trabajo?

Una vida sin razón es como un laberinto sin salida, una vida en la camínanos, corremos, suplicamos sin encontrar una razón

Por la cual respiramos, por la cual sonreímos y mucho peor, por la cual amamos.

Una vida sin aceptarse es como caminar en el fuego, creyendo nunca quemarnos, que las llamas que viven en nuestro interior nunca afloraran y nunca despertaremos.

Desearía saber que es lo que me apasiona, que me da esa fuerza para continuar intentando vivir una y otra vez, una razón por lo cual hago lo que hago y vivo en donde vivo, son desear partir sin desear rezar por la noches y sin escuchar los mensajes que me lleva el viento.

Como quisiera encontrar la quietud, para saber que es lo que en realidad amo, paso mis días con las ilusiones que dejan los vestigios de la monotonía y el andar diario, sigo el camino que marca el reloj con el avanzar de sus manecilla, sin siquiera preguntarme que me lleva a amar la vida que se me dio.

Y deambular en una pregunta sin respuesta como lo es ¿Que quiero de mi vida?

jueves, 12 de abril de 2007

ES-Continuar

En ocasiones quisiera encontrar el camino para resolver los problemas del mundo exterior, sin embargo lo único que hago es esperar y suspirar, lo único que hago es quedarme sentado, viendo el sol por la mañana y la luna al anochecer.

Acaso es vida, los días que pasan uno tras otro sin darme cuenta cuando respirar, sin darme cuenta cuando el reloj avanzo 15 horas y dejó el sol atrás.

Por las noches desearía ser aquel quien voló por los cielos, subió el Himalaya, camino por la India, vivió en las montañas. o ser aquel que cuando la luna llega está sentado a las orillas del río que escucho Sidharta y seguir el camino de buda, y tal vez rezar.

En ocasiones cuando escucho a los pájaros cantar y miro a mi alrededor, todo parece pasar, las palabras fluyen por mis labios y las lagrimas de mi corazón, siento mi respirar, escucho mi conciencia y siento la presencia de Jesús.

Hoy a mi lado Jesús está, Jesús que con su sonrisa me resista y me muestra su sol. Camino hacia él, pasando a un lado del árbol de mis recuerdos, el campo de los ayeres, el baúl de mis recuerdos... Y me doy cuenta...

hoy es un día para recordar que Jesús habitó mi corazón, hoy es un día para darme cuenta de que mis tormentos no se comparan con la dicha de mirar el sol, hoy es el día en el cual yo encontraré una razón más para aceptar mis problemas y caminar, hoy es un buen día para darme cuenta de que la vida es muy corta para estar triste, para sufrir y para añorar a quien se fué.

Hoy es un buen día para abrir mi corazón y sonreír día tras día al sentir el viento, mirar el sol y escuchar a los pájaros cantar.

Errores: Struts y los tipos de datos checkbox

El error que se muestra a continuación es muy común cuando utilizamos y queremos utilizar cadenas en las propiedades del ActionForm.

En ocasiones queremos abusar de la potencia de un lenguaje como Java cuando utilizamos Struts 1.2.x, sin embargo existen casos en los que eso no es posible como por ejemplo :

Cuando utilizamos objetos ActionForm y se nos ocurre la grandiosa idea de utilizar variables de tipo String y a esas variables les creamos su métodos set y get, todo parece ser perfecto. Pero si se nos ocurre la grandiosa idea de crear un método como el siguiente:

/**
* Validates if a turn time is selected
* @return the turnTimeHistoricChart
*/
public boolean isTurnTimeHistoricChart() {
return turnTimeHistoricChart.equals(TRUE);
}

teniendo los siguientes métodos tambien:
/**
* Sets the information for field turnTimeChart
* @param turnTimeChart the turnTimeChart to set
*/
public void setTurnTimeChart(String turnTimeChart) {
this.turnTimeChart = turnTimeChart;
}

/**
* Gets the information ofturnTimeHistoricChart
* @return the turnTimeHistoricChart
*/
public String getTurnTimeHistoricChart() {
return turnTimeHistoricChart;
}

Struts puede pensar que el tipo de variable es boolean en lugar de String y nunca asignar el valor que capturamos en el formulario, por lo cual resulta importante no implementar nuestra funcionalidad de está manera.

sábado, 7 de abril de 2007

Intentando Modelar UML desde un IDE

Sin darme cuenta, ha pasado mucho tiempo ya desde que he buscado una herramienta que me permita modelar UML desde mi editor de código Eclipse y hasta el momento todos tienen varios problemas puede decirse que el costo es el principal y pues mis requerimientos son muchos:

  • Modele Java 5
  • Integración con el IDE: Ssi no se puede integrar que la ingeniería inversa sea sencilla.
  • Tenga acceso a control de Versiones: Por ejemplo omondo se veía bastante bien, pero solo la versión de paga tenia acceso a control de versiones.
  • Que permite el trabajo en equipo: Muchas herramientas tienen un servidor que permite hacer la fusión de los modelos (Enterprise Architect, Rational Rose Modeler, Visual Paradigm) , otros generan un archivo independiente para cada diagrama (Rational Application Developer, JDeveloper, Omondo).
  • Diagramas agradable: Esta categoría la dominan Rational Aplication Developer, y JDeveloper los caules generan los diagramas mas agradables a la vista.
  • Facilidad de uso: Al ser el modelado una actividad que no a todos los desarrolladores agrada, la herramienta debe crear modelos y sus relaciones de una manera sencilla.
  • Recursos que consume: La herramienta debe ser ligera y que pueda ser utilizada en una Equipo que tenga desde Pentium 4 y 512MB en RAM, por lo cual herramientas como JDeveloper y Rational Application Developer no son muy buena opción.
  • Multiplataforma: La herramienta pueda ejecutarse en las plataformas de Windows y Linux de forma nativa, ya que por ejemplo Enterprise Architect se puede instalar en Linux pero su funcinamiento deja mucho que desear.
He visto varias herramientas de diseño, en las cuales he encontrado detalles importantes y en algunas buena funcionalidad, pero son pocas las que cumplen con la mayoría de los requisitos. algunas de las que he evaluado son:

  • Enterprise Architect
  • Visual Paradigm
  • JDeveloper
  • Poseidon
  • Rational Application Developer 6.0
  • Omondo
  • eUML
  • ArgoUML
  • Jude
  • AmaterasUML
  • StarUML
  • Rational Rose 7.0
  • Concept Draw
  • Smart Draw
  • Infinidad de plug-ins de eclipse
Con base a esos criterios, es muy difícil decidir o peor aún una que cumpla con ellos, ya excelentes herramientas como Rational Application Developer y Rational Software Architect 7.0 cumplen con muchos de esos puntos excepto con el rendimiento, RAD a simple vista no soporta Java 1.5, JDeveloper es muy bueno (Pero buscaba algo en eclipse).