miércoles, 5 de marzo de 2008

Desmitificando – “El generador Java es difícil”

No es anormal encontrarse con usuarios GeneXus que le tienen “miedo” al generador Java.
Se cuentan historias terribles de usuarios que intentaron configurar y hacer funcionar un modelo Java web en la versión 9.0 de GeneXus y terminaron internados en el manicomio más cercano a su oficina.
Estas historias si bien nunca pudieron ser demostradas tienen su justificativo… Para lograr hacer funcionar un modelo Java web había que seguir los siguientes pasos:
  • Configurar el camino al compilador Java
  • Configurar el camino al interprete Java
  • Configurar el camino al Make que seguramente uno no tenia instalado en su maquina por lo cual debía instalarlo previamente.
  • Configurar el web application base URL.
  • Agregar al classpath el driver JDBC
  • Crear y configurar una web application en el servidor de servlets de su preferencia.
  • Configurar las propiedades del modelo ‘servlet directory’, ‘static content base URL’, ‘static content directory seen from client’, teniendo en cuenta la web application previamente creada.
  • Copiar gxclassr.zip y los archivos correspondiente al driver JDBC al dir lib de la web application previamente creada

Si alguna vez pasó por estos pasos y no es uno de los que fue internado seguramente sabe de lo que estoy hablando, si no tiene idea de lo que le estoy hablando seguramente la lista anterior le pareció lo suficientemente complicada o al menos extensa como para no intentarlo.

A pesar de fuertes presiones de parte de profesionales que obtenían grandes partes de sus ingresos dedicándose a configurar modelos Java a usuarios que no querían pasar por esa tortura; en la versión Rocha el configurar un modelo Java web es parte del pasado.

Veamos paso a paso como se fueron solucionados los distintos pasos de la configuración.

  • Configurar el camino al compilador Java
  • Configurar el camino al interprete Java
    Fácil, GeneXus se fija en el registry de Windows cual es el JDK de Sun mas nuevo que esta instalado en la maquina y se toma de ahí el compilador y el interprete.


  • Configurar el camino al Make que seguramente uno no tenia instalado en su maquina por lo cual debía instalarlo previamente.
    Se empezó a usar un modelo de Make propio implementado por el archivo GXJMake.exe que viene con el generador, por lo cual ya no se tiene que configurar.


  • Agregar al classpath el driver JDBC
    Se empezaron a distribuir con el generador drivers JDBC para los DBMSs que lo permiten. Los mismos están en el directorio drivers que esta bajo el directorio del generador. Todos los archivos que se encuentran ahí se agregan en forma automática al classpath, por lo tanto si el driver JDBC de su agrado no esta en esa lista, solo tiene que copiarlo ahí y se agregará en forma automática al classpath.


  • Crear y configurar una web application en el servidor de servlets de su preferencia.
    Si el usuario tiene instalado en su maquina un tomcat 5.5 o superior toda esta configuración se hace en forma automática por parte de GeneXus, creando una web application con el nombre del modelo.


  • Configurar el web application base URL.
  • Configurar las propiedades del modelo ‘servlet directory’, ‘static content base URL’, ‘static content directory seen from client’, teniendo en cuenta la web application previamente creada.
  • Copiar gxclassr.zip y los archivos correspondiente al driver JDBC al dir lib de la web application previamente creada
    Si se cumplió con el punto anterior de tener un tomcat 5.5 o superior todas estas configuraciones se hacen en forma automática teniendo en cuenta la web application creada por GeneXus previamente.

Resumiendo, en la versión Rocha de GeneXus si usted tiene un JDK de SUN instalado y un tomcat 5.5 o superior no tiene que configurar ninguna propiedad del modelo para poder prototipar usando el generador Java.

22 comentarios:

Enrique Almeida dijo...

Ignacio: Buen post!.

En la Rocha esta funcionando con tomcat 6.0?. Porque hoy cree un java environment en NB10715 y me pidio el camino al compilador y al interprete a pesar de tener tomcat instalado, sobre vista.

Ahi abandone y volvi a .NET para hacer las pruebas que queria.
No tengo miedo a y me gusta java.. pero lleva mas tiempo hacer las cosas.

PD: No pude borrar el Environment java despues de haber creado el otro.

Fabi dijo...

Aleluya!.
Voy tirando entonces el word aquel que me hice hace años: "Como configurar un modelo Java y no morir en el intento" ??

Ignacio Roqueta dijo...

Enrique, si funciona con tomcat 6.0.
Si te pidio el camino al compilador y el interprete es porque no pudo encontrar en el registry el JDK de Sun.
Si mal no recuerdo habia un problema con el JDK 1.5.0.11 que dejaba mal el camino de instalacion en el registry. Si es este tu caso, lo mejor es instalar un JDK mas nuevo que tenga solucionado ese problemas y te reto a que lo pruebes de nuevo que seguramente te va a funcionar.

Enrique Almeida dijo...

Con el JDK 1.6.5, funciono perfecto...
Gracias!.

Ignacio Roqueta dijo...

Arriba!!!
Quedo a la espera entonces de futuros reportes de error sobre pruebas de modelos en Java ;)

Ronald dijo...

Hola Estimado Ignacio, muy bueno tu blog, ya quiero pasar a la versión X, pero por las aplicaciones que tengo aún no puedo migrar y siguo con el sufrimiento (que aún no me llevó al manicomio) de la configuración gx java y tomcat.

Ahora, por los problemas de saturación de memoria que tiene el Tomcat 5, migré mi aplicación con Tomcat y jdk 1.6, mi aplicación compilada con el jdk 1.4, corre perfectamente en el Tomcat 6.

En fin, trate de crear y compilar con el jdk 1.6 y sale el error GXcfg.java:10: package com.genexus.ui does not exist .

Ahora mi pregunta es la siguiente: Genexus 9 (Java U6 y dev U5) es compatible con Tomcat 6? y jdk 1.6

Si puedes comentar algo respecto de eso para los que seguimos con el martirio de Gx 90 y Java sería genial, Salu2

Ignacio Roqueta dijo...

Ronald, no deberias de tener problemas en usar GeneXus 9 con el JDK 1.6 ni con Tomcat 6.
El problema que te esta dando al compilar no parece tener relacion con estar usando el JDK 1.6 sino mas bien parece que no hayas puesto el gxclassr.zip en el classpath, porque no esta encontrando una de las clases estandar.

Anónimo dijo...

Hola soy Jorge, mi problema es que lo estoy tratando de usar con el OC4J y no con tomcat, me manda errores de que la API Servlet no se puede ubicar por lo tanto las clases no están disponibles.

Ignacio Roqueta dijo...

Jorge, la implementacion esta pensada para prototipar y esta solo disponible para ser usada con Tomcat. Si quieres usar el OC4J entonces deberias de usar el Deployment Wizard para armar un WAR que se pueda instalar en el OC4J

Fabián Eduardo dijo...

Estimado, interesante articulo me podrias dar algun consejo para hechar a andar mi aplicación generada con genexus en tomcat 6, tengo los ultimos parches U5 DEV y U6 GEN JAVA, pero no logro q la aplicacion se ejecute en TOMCAT 6, pues en el DEPLOYMENT WIZARD no hay la opcion de construir el WAR para tomcat 6 y los WAR creados para TOMCAT 5.x no funcionan sobre la ultima version de TOMCAT la 6.0.20, q debo configurar sobre la aplicacion en el TOMCAT 6, pues ni en el manager del TOMCAT me sale la aplicacion en la lista, muchas gracias cualquier comentario.

Ignacio Roqueta dijo...

Fabian, seguramente este sac te sirva:

http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,4,61,O,S,0,,21759;S;0;A;0;0;;;;;;;;;;;;;;;;;A;%20%20/%20%20/%20%20;;0;9;;21759;;99;;0;1;%200;N;N;S;B;B

Saludos

Fabián Eduardo dijo...

Ignacio muchas gracias, exactamente funciono muy bien nuevamente muchas gracias, pues justamente quiero migrar las aplicaciones de las cuales estoy a cargo en la oficina a TOMCAT 6, pues entiendo que es mejor el rendimiento y la carga de la paginas sobre esta ultima version , agradezco tu ayuda de igual forma sobre algun consejo de configuracion de TOMCAT 6 sobre WINDOWS 2003 SERVER, pues con el TOMCAT 5.5 como q las aplicaciones al ingresar unos 50 usuarios se vuelven muy lentas, cualquier ayuda te agradeceria.

Ignacio Roqueta dijo...

Fabián, el tema de que la aplicación se te ponga lenta después de ingresar 50 usuarios no creo que este relacionado con el tema de usar tomcat 5.5 o 6. Supongo que al migrar a tomcat 6 te va a pasar algo similar.
Mas bien tendrías que hacer un estudio mas orientado a ver las conexiones a la base de datos y el comportamiento del pool de conexiones o la memoria o CPU del servidor para ver por donde viene la mano.

Anónimo dijo...

Hola, soy German; tengo un problema con Genexus 9.0. El programa especifica y compila sin problema pero al cargar la página (usando tomcat 5.0.19) me genera el siguiente error:
javax.servlet.ServletException: java.lang.NoSuchMethodError: com.genexus.internet.MsgList.getDisplaymode()S
Revisé el archivo gxclassr.zip y se encuentra en el lib del Web-Inf; incluso, he copiado este archivo desde el directorio de instalación de Gx9.0
La base de datos es DB2.
Gracias si me pueden dar pistas que mas revisar.

Ignacio Roqueta dijo...

Hola German.
Ese error se da cuando el código generado quedo desfasado con la versión de la gxclassr que esta usando la webapplication.
Puede ser porque en realidad la gxclassr del directorio lib de la webapp es vieja o bien porque te esta tomando otra gxclassr de una versión distinta del dir lib del tomcat que tiene precedencia sobre el lib de la webapp.
Saludos

Anónimo dijo...

Nice post and this enter helped me alot in my college assignement. Thanks you on your information.

Alejandro dijo...

Hola Ignacio... Tantos Años sin contacto (de Browse en Chile).

Ojalá puedas ayudarme con este problema.

Genexus X Ev1
--> GXAjax HTTP error (500)
Me ocurre tanto en Tomcat 5.5 como en WAS 6.1 al ejecutar una aplicación web que no tiene código, solo tablas y variables.

Revisando los logs lo único extraño es : javax.servlet.ServletException: java.lang.ClassNotFoundException: GXcfg

¿Alguna idea?

Saludos.
Alejandro Sepúlveda S.
Asociación Chilena de Seguridad

Enrique valladares dijo...

Ignacio, tu si sabes de que hablas , soy uno de los casi dementes por eso de la aplicacion web, nunca he podido generar nada en web, solo en win, y he tratado por casi 2 años de seguir las recetas de fabricio de los santos, y nada, antes no generaba mas que las clases con web server ISS y .net, en java ni eso, ahora si genera y compila bien, pero tomcat se niega a ejecutar por no encontrar los objetos y clases java,y net peor, ya ni trato... configure una estructura en tomcat 5.5 con gx 9 tal como se instruye, revise el classpath varias veces, recargue la aplicacion en tomcat, ya hice pruebas como se sugiere al tomcat y funciona excepto con mis generaciones.
mis configuraciones son.

Servlet directory:

D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\WEB-INF\classes

Temp media directory:

/temp

Static content base url:

/images

Static content directory seen from client:

D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\images


Classpath:

gxclassr.zip;gxUtils.jar;.;;D:\Java\mysql-connector-java-5.0.4-bin.jar;;D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar

Aquì renombre con DOS, al archivo gxclassr.zip a gxclass.jar

Compiler path.

D:\Archivos de programa\Java\jdk1.5.0_09\bin\javac.exe

Make path:

D:\Java\nmake.exe

Interpreter path:

D:\Archivos de programa\Java\jdk1.5.0_09\bin\java.exe

Web app base Url:

http://localhost:8080/Mi_sistema/servlet/

mi estructura de archivo web:

D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\WEB-INF\classes

Aqui existen las clases generadas por Gx 9.0

D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\WEB-INF\lib

Aqui copie los archivos

Mysql.connector-java.5.0.4-bin
Gxclassr.jar
itext.jar
GxUtils.jar

D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\images

D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\temp

Sè que es mucho pedir, pero ni modo (lo peor es no intentarlo), necesito tu ayida... por favor!

Atte.

Ignacio Roqueta dijo...

Enrique, al parecer lo que falta en tu caso es crear y configurar el archivo web.xml que va en el directorio D:\Archivos de programa\Apache Software Foundation\Tomcat 5.5\WEBAPPS\Mi_sistema\WEB-INF\.
Ese archivo es el que le indica el tomcat cual es el camino de los servlets.
Todo esto en la version X se hace en forma automatica si se tiene instalado el JDK y Tomcat.

Ruben dijo...

Ignacio,
Tengo el mismo problema que Enrique valladares,,ya configure de la misma forma siguiendo un tutorial, pero a la hora de compilar me da el error
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x1' con el (gx9.0 java y mysql)---segun e leido me falta crear el "web.xml" mi pregunta es como la creo? o puedo copiarla de algun lado para modificarla..desde ya muy agradecido

Anónimo dijo...

[url=http://officialnflpackers.com/]Aaron Rodgers Navy Jersey[/url]

Your list can help you to get your articles published on a regular basis by ezine publishers and webmasters who enjoy your writing Inkjet cartridges can print on almost anything including fabric, film, and almost any size piece of paper There are many sharp points that can tear the cloth's fiber and leave loose strands inside the printer Like everything else in life, illness or accidents don't always happen between 8:00 a
Next time your pooch needs a bath, focus on giving him a massage while you're working the shampoo into his coat Take baby clips using a SHARP nail clipper (my preference is spring style or cat clippers for small dogs)

[url=http://texansfootballstore.com/]J.J. Watt Jersey[/url]
[url=http://officialbroncosroom.com/]Youth Von Miller Jersey[/url]

Anónimo dijo...

If I miss that chance, she's gone Introduce two friends who don't know each other Use your intuition The effects of the mistakes he makes in his ministry does not reflect back in his life alone but it is suffered at an exponential magnitude in the lives of the people he is ministering to
He also wisely addresses the mental processes of Neanderthal and we open another debateAny company that introduces a new product will hire people to try it out before it is introduced to the market Too many people know that insurance is important

Mike Ditka Jersey
Heath Miller Nike Jersey

Choices are out there Whether you are doing a behavior, having a body function, or thinking, you are on some level doing something voluntarily The leaves are on the verge of turning from green to vivid and blazing bright colors A happy life is the product of living a great present

JJ Watt Jersey