miércoles, febrero 29, 2012

EAR + GeneXus + JBoss

Genexus cuenta con una herramienta que nos facilita el empaquetado de nuestra aplicación llamada "EAR Deployment". La misma nos realiza el empaquetado mediante un wizard ahorrándonos todo el trabajo. Lo bueno que tiene es que no hay que tener conocimientos extra para poder generar un EAR.

Partimos de la base de que ya tenemos por ejemplo un procedimiento que le marcamos la propiedad "Exposed as Enterprise Java Bean" y Call Protocol = Enterprise Java Bean. Esto nos habilita a ejecutar el WinDeveloper y luego seleccionamos la opción "Deployment Wizard" el cual nos muestra las siguientes pantallas.







NOTA: Puede darnos un error a la hora de levantar el JBOSS si tengo la opción "Deploy Message"

Error: "java.lang.ClassCastException: Object at '' in context {java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory,...."

Realmente no tengo claro la causa del error pero si genero el EAR sin la opción "Deploy Message" deja de dar el error y el EJB me queda disponible. Estoy Usando GeneXus 9.0



lunes, febrero 27, 2012

EJB + GeneXus + JBoss 5.1


Desde hace unos días estoy participando en un proyecto en el cual tengo que trabajar contra JBoss, en principio no tenía que hacer nada complicado pero después de varias idas y vueltas me plantearon sacar información del contexto de JBoss mediante EJB al igual que los sistemas existentes.
Analizando un poco el proyecto decidí investigar las opciones que me brinda GeneXus para trabajar con EJBs, en principio estoy solo experimentando ya que seguramente tenga que poner código java a mano pero si lo puedo hacer parcialmente en GeneXus es ganancia ya que siempre que puedo trato de poner Genexus en lugares donde no lo usan.

Estoy trabajando con GeneXus 9.0 sin posibilidad de migrar de versión por lo que tuve que comenzar a configurar el ambiente para experimentar con EJB,   lo primero que me complico fue la configuración del Classpath ya que los jars que se configuraban en versiones anteriores de JBoss  cambiaron de nombre.  Mejor dicho JBoss reorganizo sus archivos de dependencias cambiando el nombre por lo que la versión 4.1, 5.1 y 6.0 tienen nombres diferentes.

En síntesis para compilar un EJB tenemos que agregar al classpath:
JBoss 4X:  jboss-j2ee.jar, javax.servlet.jar
JBoss 5.1: jboss-javaee.jar
JBoss 6X: jboss-ejb-api_3.1_spec.jar, jboss-jms-api_1.1_spec.jar

Esto son los archivos que se refieren a JBOSS, en la documentación de GeneXus se explican los otros archivos que se deben agregar al classpath para trabajar con EJBs.

martes, febrero 21, 2012

Ingeniería inversa en Android

 Todo desarrollador en alguna oportunidad ha tenido la necesidad o la curiosidad de realizar la "Ingeniería Inversa" a un programa para verle las tripas. 

En mi caso lo he realizado alguna vez para investigar el código de algo que me llamaba la atención, en particular lo hice muchas veces con la gxclassr.zip de GeneXus hasta que publicaron el código fuente. 

En la actualidad me encuentro investigando Android por lo que me puse a buscar herramientas que a partir de un ".apk"  me permitieran ver el código fuente. En internet encontré un documento PDF que explica muy claramente como realizar Ingeniería inversa básica en Android, de todas formas hago un resumen para los que no les gusta leer mucho.

En otro post explique que son los APK por lo que voy directo al grano:

a) Descomprimir el APK con cualquier herramienta que tengan a mano, en mi caso winrar
b) Tomar el classes.dex (Dalvik Executable) y usar el dex2jar para convertirlo a jar
c) Tomar el JAR y pasarlo por el JD-GUI

Siguiendo estos pasos podemos tener el código fuente de un apk, siempre nos podemos topar con algún código "ofuscado" o protegido con proGuard pero siempre existe forma por lo que usa google y tendrás resultados.

lunes, febrero 20, 2012

Soap 1.1 y Soap 1.2 en el mismo WSDL

Hace unos días tuve que participar en un proyecto con algo muy pequeño que básicamente consiste en consumir un servicio web con varios métodos. En principio esto no debería traer ningún problema ya que simplemente desde GeneXus ejecuto el WSDL Inspector y listo. 

El problema estaba a la hora de compilar ya que me daba error de métodos duplicados, por ej. Existía un método llamado "TienePermiso" que a la hora de compilar me decía que ya estaba definido.


Compiling plogin.java
.\Sdtuy_Gup_wsdl__wsGup.java:182: tienepermiso(SdtTienePermiso_Param) is already defined in Sdtuy_Gup_wsdl__wsGup
   public SdtTienePermiso_Result tienepermiso( SdtTienePermiso_Param gxTp_TienePermiso_Param )
                                 ^
1 error
NMAKE : fatal error U1077: 'C:\SoftGXJava\java16\bin\javac.exe' : return code '0x1'
Stop.
 
Realmente estuve un par de días que no encontraba la causa por lo que ya estaba desarrollando el consumo de estos servicios a mano hasta que el proveedor del servicio me comento que el wsdl tenía la definición en Soap 1.1 y Soap1.2. Mi sorpresa era que no tenía idea que se podía hacer esto y menos que el WSDL Inspector lo iba a consumir sin problemas pero que me iba a dar error recién en la compilación.

Después de luchar un rato solo me quedaba modificar el archivo ARI y el XML que se genera cuando se usa el WSDL Inspector, en mi caso uso GeneXus 9.0 por lo que los archivos se encontraban bajo la carpeta kbdata.

En síntesis borre del archivo lo que estaba duplicado, regenere y  la aplicación quedo funcionando sin problemas. No tengo claro si en GeneXus Ev. 1 pasa esto pero lo dejo documentado por si alguien sigue trabajando con GeneXus 9.0.








domingo, febrero 19, 2012

Android Para Principiantes

La idea es compartir con la comunidad los pasos que tuve que seguir a la hora de empezar a investigar Android y que a pesar de que existe mucha documentación siempre es bueno aportar información en español para que otros puedan aprovecharla como lo hago yo a diario.


Preparando el ambiente de desarrollo para Android

Hola Mundo en Android

Errores varios trabajando con Android

sábado, febrero 18, 2012

Instalar ADT para Eclipse

A la hora de desarrollar para Android existe un plugin para Eclipse llamado ADT (Android Developer Tools), esto nos provee una herramienta para que podamos trabajar desde Eclipse con Android y hacerlo de forma rápida y sencilla.

Para instalar el ADT solo tengo que abrir mi Eclipse e ir al menú Help>Install New Software...>, en la ventana presionar el botón ADD y agregar la fuente de instalación. Eclipse nos abrirá una ventana para agregar un nuevo repositorio:


En Name podemos poner ADT y en Location: https://dl-ssl.google.com/android/eclipse/

Esto nos quedara como repositorio como muestra la siguiente imágen:


Después de configurar el nuevo repositorio solo tengo que seleccionar las opciones disponibles y presionar el botón "Finish", con esto me queda instalado el plugin ADT y solo me queda comenzar a trabajar con Android.


Preparando el ambiente de desarrollo para Android

En esta oportunidad quiero describir los pasos resumidos que se deben seguir para preparar nuestro ambiente de desarrollo a la hora de trabajar con Android utilizando Eclipse.

Lo primero que hay que hacer a la hora de preparar nuestro ambiente es empaparnos en el tema entrando en la documentación oficial que expone google para los desarrolladores Android, el sitio se llama Android Developers. En este sitio se encuentra toda la información necesaria para poder utilizar esta plataforma, pero si quieren ahorrar tiempo y buscan algo mas resumido pueden seguir los siguientes pasos:

  1. Descargar la última versión de Eclipse llamada INDIGO
  2. Descargar el SDK de Android
  3. Configurar el ADT para Eclipse o consultar la guía paso a paso
 Al finalizar estos pasos tengo pronto mi ambiente para poder desarrollar el clásico Hola Mundo para android.

viernes, febrero 17, 2012

Errores varios Trabajando con Android

La idea es documentar los problemas que voy encontrando a la hora de retomar mi trabajo con Android, los errores que se pueden encontrar son de ambiente o por inexperiencia.

La mayoría ya se encuentran documentados en la web pero siempre es bueno hacer un pequeño aporte, todo lo que encuentre lo voy a ir poniendo en esta nota.

 ERROR: Unknown command 'crunch'... Este error me daba a la hora de ejecutar una aplicación, el error se desplegaba justo antes de ejecutar el Emulador.

Lo primero que me puse a pensar fue que cosas podían haber cambiado desde la última prueba que había realizado en Android, por suerte había cambiado desde la versión de Eclipse hasta la versión del ADT por lo que me imagine que tenía que ver con incompatibilidad entre versiones o algo por el estilo. 

La solución fue abrir el SDK Manager y actualizar las Tools (Android SDK Tools y Android SDK Platform-tools) , fue lo primero que hice ya que en la imagen se puede visualizar que existía una actualización para realizar.





 ERROR: Debug Certificate expired on dd/mm/yy

Un error común es que el certificado que se utiliza para android expire, tenemos dos formas de solucionarlo:
a) Borrar el archivo debug del directorio ".android"



b) Utilizar la herramienta keytool para generar el certificado nuevamente con una fecha mayor a la que le pone Android por defecto.



Hola Mundo en Android

Siempre que comenzamos a investigar un lenguaje de programación siempre comenzamos con el clásico "Hola Mundo" y como no podía ser de otra manera vamos a explicar paso a paso como hacerlo con Android utilizando Eclipse como herramienta de desarrollo.

a) Crear un nuevo Proyecto para Android




b)Poner como nombre del proyecto HolaMundo




c) Seleccionar para que versión se piensa desarrollar



d) Ingresar los datos de la aplicación



Una vez creado el proyecto Eclipse me presenta el contenido del proyecto, lo que hago es ir a la Actividad llamada HolaMundoActivity para modificarla y agregar la leyenda "Hola Mundo".



La modificación que voy a realizar es agregar un TextView, para que el código quede de la siguiente manera:


La imágen muestra la pequeña modificación que hice para desplegar el Hola Mundo. Para ejecutar nuestra aplicación tenemos que ejecutar el emulador que nos mostrara el siguiente resultado: