Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
Este documento describe las nuevas funcionalidades implementadas y los errores corregidos en los
diferentes upgrades de la versión 7.0 del generador Java. También se detallan los puntos a tener en
cuenta para su instalación.
Cada nuevo upgrade incluye lo del upgrade anterior, por lo que no es necesario instalar cada uno de
ellos, con el último es suficiente.
Este problema se presenta solo si se había ejecutado como applet desde el Internet Explorer una
aplicación GeneXus generada con la versión anterior. En este caso habrá un conflicto entre las clases
estándar GeneXus que se instalan automáticamente en el Internet Explorer al ejecutar un applet
GeneXus y las clases que se distribuyen con el upgrade 1.
Para solucionar esta incompatibilidad es necesario regenerar las gxdb++, lo cual se realiza corriendo un
“Create Database”. Si no se desea crear la base de datos física, se recomienda utilizar la preference
“Reorganize Server Tables” = No .
Nota: Esto implica que no se puede instalar el generador si se tiene alguna reorganización pendiente,
dado que al regenerar las GXDB++ se actualizará el modelo.
UPGRADE #3
Nuevas Funcionalidades
Esta clave también la usa el com.genexus.PasswordChanger por lo que es posible cambiar el user-
password con ese utilitario respetando la clave.
Recycle connections
Se soporta una nueva funcionalidad en los pools de conexiones denominada 'Recycle connections' que
puede ser habilitada o no.
Si se marca, se le puede especificar cada cuantos minutos puede reciclar esa conexion. La idea es
cuando pase ese tiempo de que la conexion se creó, en el momento en que esté en un estado
'desconectable', se desconecta del pool, y al usuario se le da otra conexion del pool. 'Estado
desconectable' es sin commits pendientes ni cursores abiertos en las R/W y sin cursores abiertos en las
R/O. El objetivo de esta feature es evitar que una conexion este abierta 'para siempre'.
JDBC Log Configuration
Se agregó el tab 'JDBC log configuration' al form de 'namespaces' del ServerConfig. Se pasó la parte de
configuración JD BC a un tab propio.
* Enable buffering: Hoy el log es 'unbuffered', lo que implica que es muy lento generar log. Si se pone
'buffered' es mas rapido pero como no se graba 'enseguida', si se consulta un log mientras se esta
ejecutando la aplicacion, el log va a estar incompleto. Tambieén puede quedar truncado si la aplicacion
cancela con una excepcion no manejada por el programa.
* Log Detail : Combo con valores High y Low. Indica en nivel de detalle del log. Con nivel 'high' de
detalle el tamaño del log queda mucho mas grande que con nivel 'low'
* Log Level : Combo con valores Namespace/Datastore/Connection. Permite crear un archivo de log por
namespace, o uno por cada datastore o uno por cada conexion. Es util para que se mas facil entender el
camino de ejecucion de una aplicacion.
* Use unique name : Indica si se quiere que el nombre del archivo se genere automaticamente o si se
quiere usar uno 'fijo'. Si es automatico, se pide el directorio donde se quiere guardar los logs. Si es fijo,
se guarda siempre en el mismo. Los nombres automaticos son de la forma "gx_" + MMDD + "_" +
HHMMSS + <namespace> + "_" + <datastore> + "_" + <conexion> + ".log" (si se elige log level =
conexión se ponen todos, sino solo hasta datastore o namespace respectivamente).
• Reportes en el servidor
Se soporta la ejecución de reportes en el servidor y visualizarlos en el cliente. Para ésto se
implementaron las siguientes funciones:
- getremotefile(&ServerFile, &LocalFile)
Copia un archivo del servidor al cliente
- opengxreport(&FileName)
Abre un .GXR
Sea RReport el reporte que se desea correr en el server, entonces debe tener:
- la property 'Report output' seteada con el valor 'to file'
- la regla output_file(&FileName)
- debe ser remoto, o sea main y un location especificado
call(RReport, &FileName )
// Abrir el reporte
&a = opengxreport("report.gxr")
// Borrar el archivo
&a = deletefile("report.gxr")
Nota:
Para poder utilizar estas funciones se debe especificar la preferencia FUNCTIONS con el valor “Allow non-
standard funcionts” tanto en el modelo de diseño como en prototipo/producción.
En el pool read-only se pone la cantidad de usuarios que están usando la conexión (corresponde al valor
de configuración de cantidad de usuarios por conexión)
En el pool read-write se pone el tiempo que hace que la conexión esta esperando la ejecución de una
sentencia. La idea es poder identificar que una conexión quedo loqueada.
Errores Corregidos
• SAC #7448: El Gx Serv Aplic. no genera log JDBC a nivel de NAMESPACE
El Servidor de Aplicaciones GeneXus no genera logs JDBC por cada NAMESPACE que se tiene configurado
sino uno a nivel del servidor de aplicaciones, es decir el mismo para todos ellos.
• SAC #10422 El GXMSend contra SMTP no se dispara mas que una vez
El GXMSend de la implementación de las funciones de mail en java contra SMTP no se dispara mas que
una vez en la aplicación.
• SAC #10462 Evento llamado solo con tecla de funcion se ejecuta 2 veces
Cuando se llama a un evento de un work panel con una tecla de función (por ejemplo F6), y el mismo no
esta llamado de otro lado, entonces se ejecuta 2 veces.
• SAC #10465 Variable &mode en evento after TRN ejecutando en tres capas
Si se pregunta por la variable &mode en el evento “after TRN” en un transacción y ejecutando en tres
capas y se está en modo delete, la variable retorna vacío en lugar de retornar 'DLT'.
• SAC #11004 Error al acceder via POP3 para bajar mails con attachment
Al acceder via POP3 para bajar mails con attachment se presentaba un error del tipo
"java.lang.NullPointerException at java/lang/String.startsWith" cuando estos eran enviados de
programas de mail particulares, por ejemplo pasaba con el Lotus Notes.
• SAC #11024 Numéricos quedan mal grabados por funciones manejo de texto
Si utilizando las funciones de manejo de texto (dfwopen, dfwpnum, dfwnext) se graban en un archivo de
texto campos numericos de una tabla, no quedan bien grabados los valores de los mismos.
Nuevas Funcionalidades
A partir de la beta 3 de la solis (y también estará en el upgrade 2 de la 7.0) en el GXWS se cuenta con
una nueva opción en su menu: Setup – Settings, donde se puede habilitar estas opciones.
La forma de hacerlo es en la preference 'Name Server Host', para RMI, se pone servidor:puerto. De esta
forma se puede levantar mas de un servidor de aplicaciones en el mismo equipo, incluso estos
servidores de aplicaciones pueden ser de distintas versiones.
Existe un utilitario con el generador llamado PasswordChanger que permite encripta r el usuario y
password en los .cfg
jview com.genexus.PasswordChanger
Notas:
-El generador no encripta el usuario y password por defecto en tiempo de generación.
-El utilitario ServerConfig encripta el usuario y password.
-Si se quiere desencriptar el usuario y password basta con editar el cfg y cambiarlos.
Ø Cuando una conexion read-only da un error, se saca la conexion del pool, y se cierra (en
realidad no se cierra enseguida, se cierra cuando algun otro usuario pide una conexion). Esto
implica que los usuarios que la estuvieran usando van a recibir un error, pero que cuando se
conecten de nuevo obtendran otra conexion y seguiran trabajando.
Ø Se agrega una preference 'Maximum clients per read-only connection (default=10)' que
se graba en el .cfg con la clave 'PoolROUsers'. Indica la cantidad de usuarios finales entran en
un misma conexion read-only. Esto permite limitar la cantidad de usuarios que van a caer
cuando haya un error en una conexion. Por ej, si se deja '10', entonces solo van a caer 10
usuarios cuando a uno le de un Internal Driver Error. Se agrega esta preference tambien en el
ServerConfig.
Ø El default del tamaño del pool read-only paso de '1' a infinito, para que funcione bien con el
default de la preference anterior.
Utilizando esta opción ya no es necesario "levantar" el nameserv; por lo cual solo alcanza con "levantar"
el osagent y colocar en el classpath del cliente y del servidor el archivo vbjorb.jar
A su vez ejecutando con la VM de sun ya NO es necesario indicar en la command line por medio de
properties que se va a utilizar VisiBroker
Errores Corregidos
• SAC #8921 Imagen con evento asociado en Web Panel tiene borde en NS
Si se tiene una imagen a la que se seteó la propiedad Borderwidth con valor 0 y se le asocia un evento
clic, al ejecutar el Web Panel con Netscape, la imagen se visualizaba con borde.
• SAC #9342 GPF al ejecutar wkp con tabdialogs y subfile en uno de ellos
Si se tiene un work panel con tabdialogs, y un subfile en uno de ellos, al ejecutarlo con JVIEW daba un
error de tipo GPF.
• SAC #9453 Problemas con funciones que reciben un host por parámetro
Las funciones que reciben un host por parámetro no están funcionando en forma adecuada cuando el
parámetro es pasado por una variable o atributo. Por ejemplo, en el siguiente caso no estaba enviando
el mail:
&Servidor = ‘hostname’ o att con el nombre del host
&error = gxMLoginSMTP(&Servidor, &Nombre, &Direccion ),
java.lang.StringIndexOutOfBoundsException: -1
• SAC #9571 Error en GXWS Dep.: 'Unexpected end of ZLIB input stream'
Cuando se agregaba como dependency un .JAR que pudiera estar corrupto, al generar el .jar (build) con
el GXWS Deployment se presentaba el siguiente error:
• SAC #9640 Problemas con función VAL sobre valores con exponente
Se tiene un string que representa un valor con exponente; por ejemplo "1.234234E6". Al utilizar la
función val sobre dicho string el valor retornado no era correcto; en el ejemplo anterior retornaba
1.234234
• SAC #9677 Problema con edit sobre tabdialog con picture ZZZZZZ Z9
En una transacción, si se tiene un atributo de tipo N(8) y picture 'ZZZZZZ Z9', es decir con mas
caracteres que el tamaño del tipo, al editarlo tiene un comportamiento extraño.
• SAC #9721 TRN con subfiles en modo DEL permite modificar valores sub.
En una transacción con subfiles, llamada en modo DELETE, permitía modificar valores del subfile
• SAC #9758 Con WFC algunos fonts, con determinado size, se truncan
Con WFC algunos fonts, con determinado size, se truncaban. Por ejemplo el Arial 8 no bold.
• SAC #9912 Problema con 'Use LDAP User for userid('server')' en 3 capas
Si en una aplicación en 3 capas se tiene la preference 'Use LDAP User for userid('server')' seteada en
YES, y lo primero que se hace en la aplicación es un userid('server'), estaba devolviendo el vacío en vez
del login LDAP.
• SAC #9928 Error con WFC por isvalid y tabdialogs al salir de trn
Si se tiene una trn1 con una varible; en el evento IsValid de esta variable se llama a una trn2 que tiene
tabdialogs. En ejecución, con WFC, al salir de esta segunda transacción se presenta un error.
• SAC #9941 Error al ejecutar por segunda vez applet sin cerrar browser
Se tiene una aplicación generada en 3 capas y corriendo como applet. Si se cierra la aplicación, no se
cierra el browser y se vuelve a llamar a la aplicación se presentaba el siguiente error:
java.lang.NullPointerException
at com/ms/com/ComLib.release (ComLib.java)
• SAC #9980 No funciona filtro por variable de tipo date nula en SQL
No esta filtrando los registros en un subfile de de un work panel cuando se tiene una variable de tipo
date (&vardate) como filtro del mismo sobre atributo de tipo date (attdate); o sea en las conditions se
tiene:
attdate <= &vardate .or. null(&vardate ) ;
• SAC #10028 Error al dar refresh en subfile con carga a pedido y scroll
Se presenta un error en tiempo de ejecución cuando se hace 'refresh' de un work panel con un subfile
con carga a pedido con 'scroll'.
• SAC #10140 La aplicación podía dejar de responder al dar CANCEL durante el LOAD
En algunos casos, la aplicación podía dejar de responder al ejecutar CANCEL mientras se estaba
ejecutando el LOAD.
Nuevas Funcionalidades
• Exportación y ejecución de programa de reorganización en Java
A partir del Upgrade 1 version 7 (ceibo release) se cuenta con la posibilidad de crear un .jar con los
programas de la reorganización.
Nota:
Es común que algunos Web Panels de un modelo se ejecuten en el ambiente donde "estén",
dependiendo de qué Web Panel hizo referencia (armó un link) a ellos. Estos Web Panels (los primeros)
tienen que tener la propiedad "Protocol specification" en el valor "Do not specify". Otra alternativa es
que la propiedad mencionada tenga el valor "Use model's preference value" si la preferencia del modelo
"Protocol specification" tiene el valor "Do not specify".
Por ahora no es posible distribuir estas clases con el generador, pero los usuarios si pueden hacerlo. Se
supone que van a liberar una versión de las NetComponents que nos permitirá distribuirlas.
Para utilizarlas hay que poner el archivo 'NetComponents.jar' en el classpath. Si no se encuentra dicho
.jar en el classpath, se utilizará la versión ante rior de las funciones FTP.
• Comando SQL
El comando SQL soporta la ejecución de sentencias SQL dinámicas, es decir sentencias armadas en
tiempo de ejecución.
&Role = "MyRole"
SQL SET ROLE TO [!&Role!]
Nota: Hay que tener en cuenta que las sentencias SQL que se utilicen en el comando SQL de GeneXus
NO pueden retornar valores (SELECT, RPC, etc.).
A partir del upgrade 1, se elimina la preference 'use gxoffice', y cuando se usan las funciones con el API
GXoffice y se usa el modo 'I', se usa la implementación Java. Cuando se usa el modo 'O' o 'M', se usa la
implementación de la gxoffice.dll.
La preference 'SMTP server' queda por compattibilidad para usuarios que usaban directamente las
funciones de mail de java, pero para aquellos usuarios que programen estas funciones a partir de ahora,
se recomienda usar las funciones GxMMode y GxMLoginSMTP y esta preference no es necesario
especifarla.
Ø Soporte para ejecución del GXWS con la máquina virtual de Sun. Esto permite hacer la
instalación del GXWS desde Netscape teniendo el plug-in del jdk1.3
Ø Opción de incluir el ‘client.cfg’ o no dentro del .jar de la aplicación
Ø Opción de instalación de la máquina virtual de Microsoft
Ø Actualización automática del GXWS Client en caso de una nueva versión.
Ø Se eliminó la instalación explícita del GXWS Client (GeneXus Web Start Install). La misma se
hace automáticamente desde el browser.
Ø Generación de log en caso de errores en el GXWS Client.
Ø Despliegue de mensajes de consola de la aplicación.
Ø Desinstalación desde el diálogo 'add/remove programs' de aplicaciones instaladas por el GXWS
Client.
Compatibilidad:
Esta nueva implementación ES COMPATIBLE con la anterior. Aquellos usuarios que tengan el GXWS de la
7.0 instalado asi como aplicaciones instaladas con él, seguirán funcionando desde el nuevo GXWS Client.
Limitación temporal:
Si se ejecuta una aplicación instalada con la versión 7.0, desde el GXWS Client nuevo, se presentará un
error. De todas formas, al dar OK al mensaje de error, ésta ejecutará sin problemas, asi como también
ejecuta sin problemas desde el browser y desde el shorcut directo. Se corregirá este problema en el
próximo upgrade.
Nota:
Para actualizar las aplicaciones a la versión dejada en el web server, es necesario tener instalado el
nuevo GeneXus Web Start Client. Para ello, el cliente deberá llamar a la aplicación desde el browser.
Desde el shorcut o desde el GeneXus Web Start anterior (7.0) no las actualizará.
A partir de esta versión, las próximas versiones del GXWS Client si se actualizará automáticamente.
Errores Corregidos
• SAC #8923 - Link a un proc/rpt con Call protocol = HTTP en Web Panels
Si se utiliza la función Link invocando a un procedimiento o reporte cuya propiedad "Call protocol" tiene
el valor HTTP, el link se generaba en forma incorrecta.
• SAC #8926 - Error en función GXXlsCre sobre subfile con att de tipo date
Al ejecutar el evento que llama a la función GXXlsCre de esta forma:
call('gxXlsCre','d:\java\prueba.xls',2,2,&titulo(),1,"SUBFILE")
donde una de las columnas del subfile es de tipo DATE o DATETIME
se presentaba un error en tiempo de ejecución.
• SAC #9163 - Error al estatizar wbp con funciones cookies y/o de sesion
Al estatizar un web panel que utiliza funciones de cookies o de manejo de sesión, se presentaban errores
al crear el .html.
• SAC #9303 - No refresca en pantalla variables del subfile asignadas en evento click
Si se asigna una variable del subfile en el evento click sobre si misma, cuando se da click sobre la
variable en cuestión, no cargaba el valor de la misma.