Resistencia - Jornada de Actualización Profesional MS 2008

Los espero ahí :)

NHibernate Validator: Documentacion liberada

Aquí está la prometida documentación de NHibernate Validator 1.0.0 Alpha1. Se puede descargar aquí en diferentes formatos: html, pdf y la API en formato chm.

Desgargar documentacion

Security en Visual Basic

Los últimos desafíos que estoy experimentando son en Visual Basic. Como bien saben no soy programador de VB nativo pero gracias a unos helpers funciono :)

Este challenge viene de la mano de:

Visual Basic + Seguridad + Intercepción

Este es el framework (por ahora la foto):

La idea es básicamente contar con una aplicación que pueda denegar a servicios (por abajo de la UI) a usuarios con roles por debajo de los requeridos. Por ejemplo vamos a ver a este servicio, que tiene un mensaje Save:

Como pueden ver el atributo encima del método indica el nivel de autorización que se necesita para acceder al método, sería el Rol. En resumidas cuentas esto nos dice es que si un usuario necesita invocar este método en cualquier implementación de este servicio, él mismo debe cumplir tener ese Rol dentro de la Aplicación, esto es, antes debía haberse autenticado.

Ahora, cómo hacemos la intercepción antes que se ejecute el método? Usando un container que permita tales capacidades, en este caso con ayuda total de Windsor Container.

1) Se solicita un container, en este caso el container se lo extrae del HttpContext.

2) Solicitamos al container una implementación de IUserService, él nos devuelve una instancia envuelta en un proxy. Debemos recordar que los servicios son agnósticos de la capa de presentación (ya sea Winforms or Asp.Net)

3) Cuando ejecutamos Save, se ejecuta primeramente una validación por parte del Framework de Seguridad para ver si el usuario “llamador” cumple con el rol correspondiente. Sino lo hace se lanza una excepción y el método no es invocado. También tenemos intercepción después de terminada la ejecución real del método, si bien decidimos no hacer nada, el framework de seguridad nos permite extender muy fácilmente (implementando 1 clase).

El Framework posee una clase para para la validación previa a la ejecución de los métodos: AspNetInterceptor y esta es la implementación:

Todavía no libero el código, pero en poco tiempo pienso hacerlo como es costumbre

Todo tiene su encanto

Me gusta ver código que se lea a simple vista, este es un claro ejemplo de ello:

Muchos critican a VB pero tiene su encanto a la hora de definir este tipo de lógica

NHibernate FAQ Blog

Hace tiempo ya este blog viene sacando a la luz post acerca de NHibernate. Se los recomiendo, posee HowTo’s muy explicativos.

Rastrear una IP con una GUI en Visual Basic…

Como dijo Sid (de la Era de Hielo): “Ay mamá perezosa!”

Por favor, quién le dijo que diga eso la pobre chica?  

Fuente: John Papa blog

Integrando NHibernate.Validator con Db4o

Para quien no están familiarizado con NHibernate Validator: es un buen framework para validar objetos en cualquier parte de nuestra aplicación.

Ahora, como podemos integrar esta herramienta para poder validar nuestros objetos antes de almacenar un objeto en Db4o? La respuesta es fácil.

Recordemos que NHibernate Validator puede configurarse para validar usando .Net Attributes o archivos Xml. En este caso veremos como hacerlo usando la primer aproximación. La clase Customer debería lucir así:

Ahora para hacer la integración, llamaremos a un helper que haga el trabajo por nosotros. Nuestro código luciría así:

Como puedes ver, con una simple clase ayudante podemos configurar la integración con una línea de código, algo muy fácil. En esta línea el método Initialize registra los eventos en Db4o.

Ahora, vayamos a ver la Validación en Acción. El código de abajo muestra a la aplicación intentando guardar una instancia inválida de un objeto:

Entonces cuando un Save/Update está a punto de ocurrir, primero que nada, NHibernate Validator chequeará si la entidad se encuentra dentro un estado válido, sino lo está, una InvalidStateException será lanzada, entonces Db4o encapsula esta excepción con una excepción EventException, que luego deberemos atrapar y desencapsular para recuperar la primera excepción, y de esta manera obtenemos los valores inválidos que de la entidad. Sería bueno que Db4o no encapsule la excepción pero por varios motivos esto no puede ser así, esto fue discutido en el foro de Desarrollo de Db4o aquí.

Entonces, fue fácil integrar NHV con Db4o. No ?

Descargar el ejemplo

Sharpen - Conversión inteligente desde Java a C#

Este release lo estaba esperando desde hace mucho tiempo por parte de Db4o, y los que siguen a Db4o de cerca creo que también.

Para los que no están familiarizados, Db4o corre sus aplicaciones en ambas plataformas: Java y .Net. El mayor trabajo se realiza en Java, que luego mediante Sharpen se realiza la conversión hacia C#, si bien no el 100% de Db4o.Net está generado, la mayoría lo está.

Espero que sirva !

Voy a tener que terminar rápido la documentación de NHV

Retina.Net de nuevo a las andanzas

Andrés Vettori me deja un comentario aquí, contando que Retina.Net está nuevamente en actividad.

Para los que no saben, Retina.Net es un framework de persistencia de objetos nacido aquí en Argentina, cuyo project leader es el mismo Andrés.

Pasen y vean en Codeplex: http://www.codeplex.com/retina

Al parecer hay muchos planes sobre Retina: Linq, Designer, Generics, etc. Sin dudas hay que darle una mirada :)

Gracias Andrés.