Mostrando entradas con la etiqueta Genexus-Tomcat. Mostrar todas las entradas
Mostrando entradas con la etiqueta Genexus-Tomcat. Mostrar todas las entradas

miércoles, febrero 21, 2018

Configurar Generador client.cfg




Tomado de: Configurar CLIENT.CFG


Introducción
Muy a menudo, debe editar client.cfg para actualizar la información; por ejemplo, cuando pone una aplicación en producción y no conoce los datos de conexión, usuario, contraseña, etc.
Otro caso típico en el que debe editar este archivo es cuando está monitoreando el grupo de conexiones mientras 'ajusta' su configuración, cambiando el tamaño, los minutos de reciclaje.
Aunque se trata de un archivo de texto, un usuario que no lo conoce tiene dificultades para identificar las claves de las propiedades que desea modificar. Esta es la razón por la cual se implementó la utilidad de configuración del cliente. Permite actualizar client.cfg independientemente de GeneXus, utilizando una interfaz más amigable que permite identificar cada una de las opciones.

Descripción
Para entornos Windows, puede llamarlo desde GeneXus usando el 'Menú desarrollador' - menú 'Utilidades' - opción 'Configuración de cliente de aplicación'

También puede llamarlo manualmente; asegúrese de tener los archivos client.cfg, GxUtils.jar y gxclassr.zip en una carpeta específica. Luego, en una consola, ejecute el siguiente comando:

java -cp GxUtils.jar;.;gxclassr.zip;swt.jar com.genexus.ClientConfig



domingo, diciembre 17, 2017

Tomcat 7 y Genexus

Tomado de: Tomcat7 y Genexus
Blog de configuracion de Genexus y Tomcat7
WebSAc Tomcat7
Consulta stackoverflow sobre tomcat7

Tomcat 7 tiene un cambio importante a nivel de seguridad que afecta la prototipación de aplicaciones generadas con Java.
Para mostrar los servlets de los objetos GeneXus, se utiliza una clase llamada servlet invoker que permite ejecutar todos los servlets generados.
En Tomcat 7, como cumple con la especificación de servlet 3.0, ya no se soporta dicho mecanismo de ejecución y los mismos deben ser declarados.

Por defecto al prototipar con Tomcat 7 se detalla el siguiente error:
404 "resource not found"

Se describe en este sac, algunos puntos a tener en cuenta para trabajar con Tomcat 7.

Descripción Detallada

Cuando se trabaja con Tomcat 7 se debe tener en cuenta lo siguiente:
_ Asegurarse que la propiedad "use annotations for servlet definition" en web information se habilita (valor "Yes").
_ Utilizar la propiedad Java Package name y especificar un valor.

A partir de Tomcat 7, todos los servlets se tienen que generar con un metatag llamado WebServlet.
Cuando la webapp levanta, el tomcat recorre todas las clases de la aplicación para ver cuáles tiene ese tag para determinarlos como servlets a ejecutar. Es recomendable que todos los servlets tengan package; si los mismos tienen package, la aplicación es ejecutable.

Por compatibilidad, si no se utiliza "Java package name", igualmente GeneXus creará en la WebApp un folder vacío, de nombre 'dummy' para que la aplicación sea ejecutable; de lo contrario, el error 404 "resource not found" se detalla en el browser.

En algunos build de tomcat 7 ,como el (7.0.35), al hacer deploy de una aplicación que no utiliza el gam se genera un error HTTP 404 , dicho error genera este log en el tomcat:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tomcat_error_foroJavaEnvironment]]

Caused by: java.lang.NoClassDefFoundError: artech/security/api/gamrefreshtoken

Este problema se ha debido a que en las clases standars (gxclassR.jar) se hace referencia por reflexión a servlets del gam, y en caso de no tener el jar del GAM ( artech.security-<DBMS>.jar ) en la aplicación se genera el error anterior. En el upgrade 2 se arreglan este error, y en el U1 se puede trabajar utilizando el work around descripto a continuación.

Work Around

Para evitar el error HTTP 404:
Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tomcat_error_foroJavaEnvironment]]

Caused by: java.lang.NoClassDefFoundError: artech/security/api/gamrefreshtoken

hay que hacer 2 cosas.
1- entrar al archivo de configuración del tomcat Tomcat 7.0\conf\catalina.properties y en la propiedad tomcat.util.scan.DefaultJarScanner.jarsToSkip agregar el jar gxclassR.jar.
Se puede agregar *.jar que mejora la performance, pero si existen otra aplicaciones distinta de genexus con servlets referenciados desde el jar que se deben levantar estas aplicaciones van a fallar.
Esto es para evitar que se scanee el jar para buscar annotations.

2- Modificar el web.xml que esta en el web-inf de la aplicacion (\Tomcat 7.0\webapps\<carpetadelaAplicacionenTomcat>\WEB-INF) y quitar la siguientes lineas

<servlet> <servlet-name>GXOAuthAccessToken</servlet-name> <servlet-class>com.genexus.webpanels.GXOAuthAccessToken</servlet-class> </servlet>
<servlet-mapping> <servlet-name>GXOAuthAccessToken</servlet-name> <url-pattern>/oauth/access_token</url-pattern> </servlet-mapping>

Este web.xml se genera cada vez que se corre la aplicación , así que cada ves que se corre la aplicación hay que modificarlo. Para evitar esto se puede modificar el web7.xml que esta en el target enviroment , si se modifica este web.xml solo se precisa modificarlo una vez dado que el otro web.xml se crea a partir de este , pero si se pasa a usar el gam hay que volver a escribir las lineas que se borraron.
 























viernes, marzo 18, 2016

Generar web.xml desde el mismo Genexus








&Directorio.Source = 'C:\Tomcat7webapps\miaplicacion\WEB-INF\classes'
msg('Directorio '  + &Directorio)
if &Directorio.exists() 
    msg("Este directorio si EXISTE!")
else
    msg("ESTE DIRECTORIO NO EXISTE !")
endif

&i = dfwopen("miweb.xml"," ",'')
&i = dfwptxt("----------------")
&i = dfwnext()

for &auxFile in &directorio.GetFiles('class')
&i = dfwptxt("<servlet>")
&i = dfwnext()
&pos = StrSearch(&auxFile.GetName(),'.class',1)
&pos = &pos - 1
&cadena = Substr(&auxFile.GetName(),1,&pos)
&cadena = "<servlet-name>" + trim(&cadena) + "</servlet-name>"
&i = dfwptxt(&cadena.Trim())
&i = dfwnext()
&cadena = Substr(&auxFile.GetName(),1,&pos)
&cadena = "<servlet-class>" + trim(&cadena ) + "</servlet-class>"
&i = dfwptxt(&cadena.Trim())
&i = dfwnext()
&i = dfwptxt("</servlet>")
&i = dfwnext()
endfor


&i = dfwptxt("----------------")
&i = dfwnext()

for &auxFile in &directorio.GetFiles('class')
&i = dfwptxt("<servlet-mapping>")
&i = dfwnext()
&pos = StrSearch(&auxFile.GetName(),'.class',1)
&pos = &pos - 1
&cadena = Substr(&auxFile.GetName(),1,&pos)

&cadena = "<servlet-name>" + trim(&cadena ) + "</servlet-name>"
&i = dfwptxt(&cadena.Trim() )
&i = dfwnext()
&cadena = Substr(&auxFile.GetName(),1,&pos)
&cadena = "<url-pattern>/servlet/" + trim(&cadena ) + "</url-pattern>"
&i = dfwptxt(&cadena.Trim() )
&i = dfwnext()
&i = dfwptxt("</servlet-mapping>")
&i = dfwnext()
endfor

    &i = dfwclose()           

Return


domingo, octubre 25, 2015

Desplegar campos BLOB en un Webpanel y Reporte PDF desde una cadena CODE64 resultado de un Servicio REST.


Un de las situaciones mas interesantes cuando se tiene un balanceador de carga de aplicaciones web basadas en java, es tener la posibilidad de transferir el archivo de imagenes en una cadena de datos CODE64, lo que facilita el proceso de trasnferenciad e informacion entre diferentes usuarios de las aplicaciones, adicional permite que se invoque un servicio web RESP/SOAP para que genera dicha imagen y luego pueda ser desplegada en la aplicacion muy agilmente, aqui citamos un ejemplo.

&MiBlob es de tipo BLOB.
&Imagen  es de tipo Image

&MiBlob.FromBase64String(&CadenaCode64)
&Imagen.FromURL(&MiBlob
)


Se desplega la variable &Imagen en un webpanel o en reporte PDF.

Como resultado de un servicio web se obtiene lo siguiente:

            &Url                        = "graficar"
            &HttpClient.Host      = 'localhost'
            &HttpClient.Port       = 8080       
            &HttpClient.BaseUrl  = '/graficador/rest/'

            &HttpClient.AddVariable('DATOSAGRAFICAR',    &XmlConDatos)
            &HttpClient.Execute("POST", &Url)
            &StatusCode            = &HttpClient.StatusCode
            &Resultado               = &HttpClient.ToString()

            &MiBlob.FromBase64String(&Resultado)
            &Imagen.FromURL(&MiBlob)




Articulo de Referencia:Articulo de Refrencia
 
A partir de la version X existen métodos de Blob para hacer el To y FromBase64. en la versión 90 no existen pero se pueden programar con un prograna externo.
 
Descripción Detallada 

El código nativo seria (**) y se invocaría de la siguiente forma en el código GX.

En .NET ser invoca así:


csharp [!&tst!] = context.FileToBase64( "prompt.gif");
csharp [!&txt1!] = context.FileFromBase64( [!&tst!], "gif" );
msg( &txt1, nowait)

En Java se invoca así (para usarlo en java hay que usar una gxlcassr actualizada, solicitarla a soporte):

java [!&txt!] = GXutil.blobToBase64( "prompt.gif");
java [!&txt1!] = GXutil.blobFromBase64( [!&txt!], "gif" );
msg( &txt1, nowait)


(**)
using System;
using System.IO;
public class Base64Utils
{
static public string ToBase64(string fileName)
{
try
{
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] bContent = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
return Convert.ToBase64String(bContent);
}
catch
{
return "";
}
}

static public void FromBase64( string fileName, string b64)
{
byte[] bContent = Convert.FromBase64String(b64);
try
{
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter( fs);
bw.Write(bContent, 0, bContent.Length);
bw.Close();
fs.Close();
}
catch
{
}
}
}

Tambien se puede invocar directamente a la funcionalidad del framework, en cualquier version, algo como:

csharp byte[] array = System.Text.Encoding.ASCII.GetBytes([!&var!]);
csharp [!&base64cred!] = System.Convert.ToBase64String(array);
 

 

lunes, septiembre 14, 2015

Scroll Horizontal y Vertical de una Grilla en Genexus

Un ejemplo de como realizar Scroll Horizontal y Vertical, revisar las instrucciones:
  Hacer SCROLL con Genexus.

Para quienes utilizan WorkWithPlus, aqui se tiene un ejemplo de como hacerlo:
Ejemplo con el Patron WorkWithPlus

Un Ejemplo mas Elaborado: Ejemplo de SCROLL con HTML Embebido


Otra alternativa, cuyo ejemplo se tomo del Foro de genexus:
Ejemplo de Scroll desde Genexus


Una forma de hacerlo es declarando 2 text block con formato tipo "Raw HTML"
y colocarlos en el web panel o web tran. uno al inicio de la grilla y el otro al final
Luego en el event star colocar lo siguiente:


T11.Format = 2 // raw html
T12.Format = 2 // raw html
// scrool grid
T11.caption= '<div style="overflow:auto;height:200px;width:800px;align:left;MARGIN: 0px 0px 0px 0px ;'
T11.caption+= 'scrollbar-face-color : #68838B;'
T11.caption+= 'scrollbar-highlight-color : #7A8B8B;'
T11.caption+= 'scrollbar-3dlight-color : #000000;'
T11.caption+= 'scrollbar-shadow-color : #000000;'
T11.caption+= 'scrollbar-darkshadow-color : #000000;'
T11.caption+= 'scrollbar-track-color : #000000;'
T11.caption+= 'scrollbar-arrow-color : #000000;'
T11.caption+= '">'
T12.caption = '</div>'



viernes, marzo 28, 2014

¿Cómo Acelerar el Emulador de Android?


Si eres un desarrollador Android, sabes que el emulador toma mucho tiempo para arrancar (sin mencionar el lento desempeño una vez que ya está funcionando) y esto afecta tu productividad.
Afortunadamente, si cuentas con un equipo razonablemente moderno con un procesador Intel® que tenga Intel® Virtualization Technology habilitada, puedes hacer usó de está tecnología para acelerar significativamente el emulador de Android. En esté artículo explicaremos los pasos necesarios para hacer esto. Es posible hacerlo tanto en sistema operativo Windows cómo en Mac OS y Linux. En los dos primeros casos se utiliza Intel® Hardware Accelerated Execution Manager (Intel® HAXM), y en el caso de Linux se utiliza KVM.

1. Introducción

A continuación te guiaremos para realizar la instalación del Intel® Hardware Accelerated Execution Manager (Intel® HAXM), un motor de virtualización asistido por hardware (hipervisor) que usa Intel® Virtualization Technology (Intel® VT) para acelerar el desarrollo de Android en Windows y OSX. También explicamos cómo configurar una máquina virtual basada en kernel (KVM) asistida por hardware en Linux.

2. Instalación

2.1. Prerrequisitos

  • Tener instalado el kit de desarrollo de software (SDK) de Android.
  • Tu equipo debe tener un procesador Intel compatible con Intel VT-x y EM64T, y con la funcionalidad Execute Disable (XD) Bit habilitada desde el BIOS.

2.2. Instalación en Windows

Después de haber instalado el SDK de Android, abre el SDK Manager. En la sección de extras, podrás encontrar el Intel HAXM.
Marca la casilla y haz clic en el botón “Install packages…”; cuándo hayas instalado el paquete, el estado aparecerá cómo “Installed”. Esto es engañoso, ya que en realidad no queda instalado. El SDK tan sólo copia el ejecutable de Intel HAXM a nuestra máquina, pero todavía tenemos que instalarlo. Para instalar el ejecutable de Intel HAXM, busca en tu disco duro IntelHaxm.exe (o IntelHAXM.dmg en Mac OS X). Si dejaste todos los valores predeterminados, debería estar en C:Program FilesAndroidandroid-sdkextrasIntelHardware_Accelerated_Execution_ManagerIntelHaxm.exe.
Intel HAXM sólo funciona en combinación con una de las imágenes de sistema x86 de procesador Intel® Atom™. Al momento de publicar esté artículo existen imágenes x86 disponibles para Android 2.3.3 (API 10), 4.0.3 (API 15), 4.1.2 (API 16), 4.2.2 (API 17) y 4.3 (API 18). Estás imágenes de sistema de Intel se pueden instalar de la misma manera que las imágenes basadas en ARM, mediante el administrador de SDK.
haxm01.jpg
Cuando das clic en el ejecutable de IntelHaxm, se muestra una pantalla de bienvenida cómo esta:
haxm03.jpg
haxm04.jpg
Puedes ajustar la cantidad de memoria RAM que se asigna a Intel HAXM. Después de ajustarla, haz clic en “Next”. La pantalla siguiente confirma la asignación de memoria. Si todo está cómo lo desea, haz clic en “Install”.
haxm05.jpg
A fin de poder instalar el Intel HAXM, debes tener habilitada Intel VT-x en el BIOS, si no, verás un error cómo esté durante la instalación:
haxm06.jpg
Si se produce esté error, ve al BIOS y habilítala.
haxm07.jpg
La segunda opción para descargar el Intel HAXM y la imagen de sistema del emulador x86 Emulator System Image es ir directamente al sitio web: http://software.intel.com/es-es/android y descargar de allí todos los componentes necesarios.

2.3. Instalación en Linux

Los pasos para acelerar el emulador de Android en Linux son diferentes que en Windows y Mac OS X, porque Intel HAXM no es compatible con Linux, así que es necesario usar KVM en su lugar. Los pasos que se muestran a continuación corresponden a Ubuntu* 12.04 y pueden diferir ligeramente en otras distribuciones de Linux.

2.3.1. Instalación de KVM

Para instalar y ejecutar KVM, primero necesitas comprobar que tu CPU admite virtualización de hardware. Tal vez la forma más práctica de hacer esto es con el comando “kvm-ok” que se encuentra en el paquete “cpu-checker”.
  1. $ sudo apt-get install cpu-checker
  2. $ sudo kvm-ok
Este comando nos indicará si nuestro equipo cuenta con la capacidad de ejecutar KVM y si ya está habilitado en el BIOS o tenemos que habilitarlo.
El siguiente paso es instalar la KVM y otros paquetes necesarios. Para hacerlo, escribe:
  1. $ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
Si obtienes una pantalla de configuración de Postfix, selecciona “No configuration”.
A continuación, agrega tu usuario al grupo KVM y al grupo libvirtd. Para hacerlo, escribe:
  1. $ sudo adduser your_user_name kvm
  2. $ sudo adduser your_user_name libvirtd
Después de la instalación, vuelve a iniciar sesión y los cambios surtirán efecto. Para probar la instalación, escribe:
  1. $ sudo virsh -c qemu:///system list
Ahora puedes ir al paso siguiente, que es crear y ejecutar el dispositivo virtual de Android (AVD). Esté procedimiento es el mismo para Linux y Windows.

2.4. Cómo crear un AVD (dispositivo virtual de Android*)

Después de instalar el SDK e Intel HAXM (o KVM en Linux), puedes crear un dispositivo virtual que tenga emulación acelerada por hardware. Para hacerlo, ve a AVD Manager y crea un nuevo dispositivo. Asegúrate de seleccionar Intel Atom (x86) cómo CPU/ABI. Está selección sólo aparece en el menú desplegable si tienes instalada la imagen de sistema x86 Intel; para que los gráficos sean más suaves, activa la emulación de GPU cuándo crees el AVD.
Haz clic en New y crea tu AVD x86. Asegúrate de elegir una API compatible con imágenes de sistema x86, que CPU/ABI esté establecido en x86 y de haber habilitado la emulación de GPU (OpenGL ES*). Cuándo hayas hecho esto, haz clic en Create AVD para crear el AVD.
haxm11.jpg
Para iniciar el AVD x86, haz clic en Start y luego en Launch.
haxm12.jpg
Si la instalación fue exitosa, cuándo se esté iniciando el emulador, aparecerá un cuadro de diálogo que indicará que Intel HAXM se está ejecutando en modo virtual rápido. También puedes revisar los detalles en “About phone” dentro del emulador.

Conclusión

En esté artículo hemos revisado cómo podemos apoyarnos en las capacidades de los procesadores Intel para acelerar el emulador para Android en Windows, Mac y Linux. La mejora de rendimiento que apreciarás con Intel HAXM o KVM depende de tu equipo, pero debería ser entre 5 y 10 veces mejor que al no usar aceleración.
Si deseas conocer más herramientas y recursos que ofrece Intel para desarrolladores Android, te recomendamos que visites la zona para desarrolladores Android en http://software.intel.com/es-es/android

Fuente:Articulo Original

sábado, marzo 08, 2014

Aumentar Memoria en Tomcat7 y ubicacion para Genexus

  • Mmodificar el archivo CATALINA.BAT y asignar el siguiente valor 
  • set JAVA_OPTS=%JAVA_OPTS% -Xms512M -Xmx1024M -XX:PermSize=64m -XX:MaxPermSize=256m
  • Ejecutar startup.bat
  • Revisar si existe la asignación de memoria
Si el Genexus no recone automatica mente la ubicacion del Tomcat7, generalmente esto sucede cuando no realizamos la instalación, en lugar de ello se descomprime el archivo ZIP.

Debemos revisar que exista en el registro lo siguiente:

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\6.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\7.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\7.0\Tomcat7]
"InstallPath"="C:\\Tomcat7"
"Version"="7.0.50"

Si no existe cargar esos datos, hacer con REGEDIT y  registrar los datos arriba citados

Si requerimos hacerlo en linux ejecutar lo siguiente:

Linux:
JAVA_OPTS="$JAVA_OPTS -server -Xms256M -Xmx512M -XX:PermSize=64m -XX:MaxPermSize=128m"


Su significado:

-Xms256M => memoria heap inicial alocada

-Xmx512M => memoria heap máxima
-XX:PermSize=64m => perm gen inicial asignado
-XX:MaxPermSize=128m => perm gen máximo