jueves, 6 de mayo de 2010

POJOs y JS

Hola que tal a todos, últimamente he estado entretenido en el desarrollo de una aplicación de monitoreo, esta aplicación debe presentar ciertas ordenes ademas de su estado y ciertos parámetros cada determinado tiempo. Es un aplicación web y por ciertas restricciones que tenemos dentro de la compañía solo puedo desarrollar simples JSP y Servlets (seria mas fácil y rápido poder utilizar algún framework como JSF pero no nos es permitido); para hacerlo un poco mas dinámico, tengo ciertas llamadas AJAX hacia los servlets que me ayudan a recargar los datos necesarios y es aquí donde entra el punto en cuestión.


Los resultados de los servlets son guardados en simples clases de java creadas para el proyecto, estos resultados deben de ser regresados a los JSPs y eso por eso que todas las clases poseen un metodo toJSON(), este método crea un JSONObject, de la libreria json-simple (una librería simple y buena para codificar o decodificar JSON en java) el cual es regresado como String a la función JSP que haya echo la llamada donde es evaluada y renderizada por el explorador.

Aquí les pongo un ejemplo de como lo hago:


Tengo la clase Supervisor de Java:

public class Supervisor {
/*Table Definition*/
public static final String ID_COLUMN_NAME = "sup_id";
public static final String LOGIN_COLUMN_NAME = "login";
public static final String NAME_COLUMN_NAME ="name";
public static final String EMAIL_COLUMN_NAME = "email";
private long id;
private String login;
private String name;
private String email;
public Supervisor(long id, String login, String name, String email) {
this.id = id;
this.login = login;
this.name = name;
this.email = email;
}
/**
* @return the id
*/
public long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}
/**
* @return the login
*/
public String getLogin() {
return login;
}
/**
* @param login the login to set
*/
public void setLogin(String login) {
this.login = login;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the email
*/
public String getEmail() {
return email;
}
/**
* @param email the email to set
*/
public void setEmail(String email) {
this.email = email;
}
public String toString(){
return this.name;
}
public JSONObject toJSON(){
JSONObject result = new JSONObject();
result.put(ID_COLUMN_NAME, new Long(this.id));
result.put(LOGIN_COLUMN_NAME, this.login);
result.put(NAME_COLUMN_NAME, this.name);
result.put(EMAIL_COLUMN_NAME, this.email);
return result;
}
}


y digamos que tengo un JSP que cuenta con la siguiente función (utilizando JQuery por su puesto, no puedo vivir sin el).

$.post('SvSupervisor.java',
{"action":"getsup","sup_id":1},
function(xmlHttpResponse){
//La respuesta contiene el objeto JSON del supervisor en cuestion
var supervisor = JSON.parse(xmlHttpResponse);
alert(supervisor.name);
//O el resto del tratamiento que se le quiera dar al objeto.
});

Todo esto lo hago a mano, la pregunta seria. Existe algun framework que nos ayude a relacionar un objeto Java con un objeto JavaScript facilmente?

Un saludo

sábado, 29 de agosto de 2009

Slackware 13.0 Listo!!!!

Les escribo para comentarles que la nueva version de Slackware Linux ya esta disponible, para todos nosotros que nos gusta esta magnifica distribucion hay que estan contentos. Entre las mejoras que contiene esta un nuevo sistema de paquetes (txz) con una mejor compresion que el anterior y nuevas versiones de X, KDE y XFCE. Ademas de ya contar oficialmente con una version para 64 bits.
No puedo esperar a terminar de descargarlo y probar.

vayan a http://www.slackware.com/getslack

viernes, 31 de julio de 2009

Google Docs

Que tal a todos, ahora les voy a escribir una pequeña opinión sobre las experiencias que he tenido con Google Docs. Actualmente estoy estudiando mi Maestría en Administración de TI con modalidad en linea y esta valiosa herramienta me ha sido de suma utilidad para realizar las actividades requeridas en las materias.
Google Docs the permite editar documentos en linea y exportarlos a los formatos mas populares en el mercado (pdf, doc, odt, txt y rtf). Los documentos pueden ser compartidos y editados al mismo tiempo por colaboradores permitiendo la estructuración de documentos dinámicamente. Google también permite la edición de hojas de calculo o spreadsheets, asi como un básico motor de presentaciones y bases de datos. Google Docs sigue creciendo con la adición de nuevos templates, nuevas funcionalidades y nuevas ideas. Ademas por ser una aplicación web es soportado por la mayoría de los navegadores en el mercado (Chrome, Firefox, IE, Opera, etc) y sin la necesidad de instalar nada en tu computadora.
Claro que no todo es miel sobre hojuelas, google docs tiene la limitante de no poder almacenar documentos de texto mayores a 500 kb + 2 mb de imágenes; las hojas de calculo no pueden almacenar 10,000 filas y 256 columnas, además documentos con 100,000 celdas y 40 hojas, solo teniendo 11 hojas abiertos al mismo tiempo y además las presentaciones no pueden ser mayores a 10 Mb.
Google Docs no es un reemplazo para paquetes de oficina complejos como OpenOffice o MS Office pero puede llegar a ser una buena alternativa para la realización de tareas y trabajos sencillos como los que la mayoría hacemos en su vida cotidiana. En verdad les recomiendo que lo prueben solo hay que tener una Google Accoutn que puede ser solicitada gratuitamente en: https://www.google.com/accounts/

La pagina para Google Docs es http://docs.google.com.

sábado, 25 de julio de 2009

Mejor Linux para Laptops

Que tal gente, últimamente he estado buscando cual seria la mejor distribución Linux que funcione adecuadamente en mi laptop Dell vostro 1310. Compre la computadora para realizar mis trabajos requeridos en mis cursos de maestría y por supuesto que tenia pre-instalado Windows Vista. Tengo pocos años utilizando Linux pero me encanta el sistema. He probado algunas distribuciones en mi pc de escritorio y la verdad la que mas me convenció fue Slackware (aunque tarde un poco en configurar todo mi sistema completamente), es genial poder tener control total de todo el sistema y aprender su funcionamiento indagando dentro de sus fuentes. Ahora para mi laptop he probado, Suse, Ubuntu, Fedora, Sabayon entre otros. Pero ninguno termina de convencerme tanto como Slackware; así que me gustaría saber cuales han sido sus experiencias utilizando el sistema en sus computadoras portátiles.
Saludos a todos

miércoles, 1 de julio de 2009

Postgre 8.4 Listo!!!

La nueva versión del poderoso DBMS PostgreSQL (Version 8.4), ya esta lista y liberada. Algunas de sus mejoras son, queries recursivos, permisos a nivel columna, localización a nivel BD, algunas herramientas de monitoreo y mas. La lista completa de mejoras esta en este link:
http://www.postgresql.org/about/press/features84.html

Para descargarlo vayan a:
http://www.postgresql.org/download/

No puedo esperar a probarlo. Después les posteo que tal me fue.

viernes, 19 de junio de 2009

IE 8 mejor que Firefox???

Recién vi que Microsoft publico una campaña en donde compara IE 8, Firefox y Chrome (claro que el ganador es IE 8). En la página se despliegan una serie de características como privacidad, compatibilidad, personalización entre otras.
Les dejo el link a la pagina de IE 8.
Le creeremos a Microsoft?

sábado, 13 de junio de 2009

Notificaciones con Npgsql y PostgreSQL 8.3

Hola que tal buen rato ya sin escribir, últimamente estuve muy ocupado con el trabajo, ya saben que hay momentos en los que todo falla al mismo tiempo. Esta vez me toco estar trabajando en una aplicación ASP.Net en la que ya llevo algunas semanas desarrollando, pero pues como siempre, los altos mandos no quieren gastar mas dinero en el desarrollo ya que nuestro servidor de Oracle esta limitado de licencias, es por esto que se decidió buscar una alternativa de DBMS gratuita (PostgreSQL). ¿Por que no MySql? preguntaran; bueno se decido utilizar un servidor Postgre por su poder y su gran capacidad de desarrollo a travez de su lenguaje PL/PgSQL. Bueno el caso no es eso lo que vamos a discutir hoy. Durante el desarrollo me encontré con la necesidad de realizar varias funciones no muy complejas, pero llegue a una en la que era necesario comunicarse con el mundo exterior para reportar sus resultados. Existen metodos muy sencillos: ejecuta la funcion y si algo sale mal arroja una excepcion y aborta:

begin
--Haz algo
if algo_malo then
RAISE EXCEPTION 'Mensaje algo salio mal';
end if;
end;

Una excepcion es un nivel de mensajes dentro de PostgreSQL y significa que algo fuera de lo común ha ocurrido, pero existen veces en las que nada grave ha salido mal y solo necesitamos enviar un mensaje. O de algun batch de instrucciones solo algunas salieron mal y no podemos abortar la ejecusion ya que las instrucciones que si se procesaron correctamente se cancelarian. Para esto exiten varios niveles en los cuales nosotros podemos colocar un mensaje sin necesidad de abortar la ejecusion de nuestra funcion PL/pgSql el que nos interesa en este post es el nivel de notificacion o NOTICE (Lista Completa).

Bueno primero lo primero para lanzar una notificacion en el sitema de postgre solo hay que invocar RAISE NOTICE. Un ejemplo seria:

RAISE NOTICE 'Mensaje de Notificacion';

Las notificaciones quedaran registradas en el sistema dependiendo de la configuración del servidor postgre, pero como hacemos que Npgsql reciba estas notificaciones que surgen en el servidor, como primer paso tenemos que configurar PostgreSQL para que los mensajes NOTICE sean enviados a los clientes; para hacer esto tenemos que cambiar la variable de entorno "client_min_messages". Esto lo podemos hacer cambiando su valor dentro del archivo "postgresql.conf" localizado dentro del directorio de instalación de Postgre y haciendo que el servidor recargue la configuración del archivo; los valores posibles para esta variable son cualquiera de los listados en los niveles mensajes arriba direccionados. Establecemos esta variable a "notice", para que todos los mensajes generados con este nivel o niveles siguientes sean enviados al cliente y así poderlos capturar con npgsql en nuestro programa.
Las lineas de configuración quedarían mas o menos as
í: (Nota: Esto es en Postgre 8.3, no lo probé para otra versión).

client_min_messages = 'notice' # values in order of decreasing detail:
# debug5
# debug4
# debug3
# debug2
# debug1
# log
# notice
# warning
# error


Una vez que el servidor esta configurado para enviar los mensajes de notificación, solo necesitamos hacer que nuestro NpgsqlConnection maneje los mensajes que el servidor nos enviara. Así que en el código de nuestra aplicación solo tenemos que agregar una función que actuara como manejador de los mensajes.

Para hacer esto necesitamos establecer cual método sera el encargado de procesar los mensajes que lleguen al cliente. En nuestra conexión necesitamos agregar una función en la propiedad Notice que se llamara una vez que se reciban las mensajes provenientes del servidor. Quedaría mas o menos así:

NpgsqlConnection conn = new NpgsqlConnection('CADENA DE CONEXION');
conn.Notice += MetodoManejador;

public void MetodoManejador(object sender, Npgsql.NpgsqlNoticeEventArgs e)
{
//Procesar el mensaje
}

Y eso seria todo, cabe mencionar que el objeto NpgsqlNoticeEventArgs contiene el mensaje proveniente del servidor. Un punto extra, a partir de la versión 1.0 de Npgsql existe soporte para notificaciones sinctronas, esto quiere decir que Npgsql puede recibir las notificaciones del servidor sin una interacción extra que saque las notificaciones generadas. Para habilitar esta opción es necesario agregar en la cadena de conexión el parametro
"SyncNotification = true".

A continuación les dejo un pequeño ejemplo que realice.

string conString = "CADENA DE CONEXION";
Npgsql.NpgsqlConnection con = Utilities.GetNpsqlConnection(conString);
Npgsql.NpgsqlCommand com = new Npgsql.NpgsqlCommand("sp_raise_notice", con);
com.CommandType = CommandType.StoredProcedure;
com.Connection.Notice += new Npgsql.NoticeEventHandler(Connection_Notice);
com.Connection.Open();
try
{
com.ExecuteNonQuery();
}
catch (Exception e)
{
writeMessage(e.Message);
}
finally
{
com.Connection.Close();
}

//Metodo Manejador
void Connection_Notice(object sender, Npgsql.NpgsqlNoticeEventArgs e)
{
writeMessage(e.Notice.Message);
}


Nota por razones de seguridad no pongo mi cadena de conexión pero en ella esta habilitada la opción SyncNotification. Si tienen alguna duda de como formar su cadena de conexión para postgre pueden visitar la pagina:
http://www.connectionstrings.com/postgre-sql
O si quieren pueden visitar el manual completo de NpgSQL (muy completo) en:
http://npgsql.projects.postgresql.org/docs/manual/UserManual.html

Saludos a Todos!!!.