Mostrando entradas con la etiqueta genexus. Mostrar todas las entradas
Mostrando entradas con la etiqueta genexus. Mostrar todas las entradas

jueves, 16 de abril de 2015

Instalación de Postgresql, Java, Jboss, en Linux Centos, para alojar aplicación genexus

En el siguiente post voy a comentar todos los pasos que tuve que dar para poder tener una máquina virtual (en mi caso pero podría ser un equipo físico) con Jboss y que funcione una aplicación generada con genexus.
Detalle de software que utilice.
Linux Centos 6.4 minimal
Genexus Evo3 U1
Java 7
PostgreSql 9
Jboss 7.1.1

Voy a ir contando paso a paso lo que hice y por qué.

Primero tengo que instalar Centos, eso no lo voy a detallar pero comento que descargue la versión 6.4 que la tuve que buscar bastante porque estaba discontinuada por no tener mantenimiento (necesitaba que fuera esa versión porque estaba replicando un ambiente de producción). Luego de tener la instalación completa, la actualizamos

yum update
yum upgrade

Luego de tener el equipo instalado y funcionado con las últimas actualizaciones vamos a empezar a instalar el software base.
Con el siguiente comando vemos la versión de java que podríamos instalar
yum search java | grep 'java-'

Buscamos la versión 7 y corremos lo siguiente
yum install java-1.7.0-openjdk-src.x86_64

Ahora vamos a instalar PostgreSQL, con la misma idea buscaos la versión que tenemos en los repositorios e instalamos la que queramos.
yum install postgresql-server.x86_64
Luego vamos a configurar postgresql, debemos de seguir la siguiente secuencia

service postgresql initdb
service postgresql start
su postgres
psql
ALTER USER postgres WITH PASSWORD ‘pass_que_prefiera;
\q
Exit

Si vamos a acceder desde afuera deberíamos de tocar los siguientes archivos
/var/lib/pgsql/data/pg_hba.conf
En mi caso como si quiera accede desde afura tuve que dejarlo asi:
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust
#######ident
host    all         all         192.168.73.153/32           trust

Y el archivo postgresql.conf debo de buscar las líneas que están comentadas y des comentarlas y modificarlas para que quede así:
listen_addresses = '*'
port = 5432 

Ahora debemos de continuar instalando jboss, para eso instalamos algunas herramientas previas

yum install wget
yum install unzip

Ahora descargamos e instalamos jboss

wget http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip
unzip jboss-as-7.1.1.Final.zip -d /usr/share
adduser jboss
chown -fR jboss.jboss /usr/share/jboss-as-7.1.1.Final/
su jboss
cd /usr/share/jboss-as-7.1.1.Final/bin/
./add-user.sh (ManagementRealm, usuario foo y pass)

Ahora ejecutamos jboss y probamos que funciones accediendo por el navegador, por las dudas bajamos el firewall porque por defecto tiene reglas y pueden hacernos ruido en este paso.

Limpiar las reglas de iptables (firewall)
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Levantar jboss (ver que no de ningún error)

/usr/share/jboss-as-7.1.1.Final/bin/standalone.sh -Djboss.bind.address=0.0.0.0 -Djboss.bind.address.management=0.0.0.0&
Acceder de cualquier navegador a la ip del equipo y debería de mostrarnos la página de jboss inicial.

Con esto tendremos casi todo, pero lo mejor es dejar el firewall con las reglas que tiene y agregar nuestras reglas.
Les dejo un ejemplo del archivo /etc/sysconfig/iptables en el que expongo el puerto 8080 para jboss, el 9990 para la consola de administración de jboss, y el 5432 para conectarme a postgres desde fuera (esto si es producción no se debería de agregar)

############### archivo /etc/sysconfig/iptables ########################
# Generated by iptables-save v1.4.7 on Wed Apr 15 07:59:02 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13:1644]

-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9990 -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

# jboss
-A FORWARD -p tcp -m tcp --dport 8080 -j ACCEPT

# postgresql
-A FORWARD -p tcp -m tcp --dport 5432 -j ACCEPT

# jboss admin
-A FORWARD -p tcp -m tcp --dport 9990 -j ACCEPT


-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5432 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9990 -j ACCEPT

COMMIT
# Completed on Wed Apr 15 07:59:02 2015
############### FIN ######################################


Ademas deberiamos de configurar para que jboss se levantara cada vez que se reinicie el servidor, yo cree un arrancador muy basico que se puede configurar a nuestras necesidades. Este archivo se podria llamar /etc/init.d/jobss711

######################### archivo /etc/init.d/jobss711 #################3

#!/bin/bash 
### BEGIN INIT INFO 
# Provides:          jbossas7 
# Required-Start:    $local_fs $remote_fs $network $syslog 
# Required-Stop:     $local_fs $remote_fs $network $syslog 
# Default-Start:     2 3 4 5 
# Default-Stop:      0 1 6 
# Short-Description: Start/Stop JBoss AS 7 
### END INIT INFO 
# chkconfig: 35 92 1 
 
## Include some script files in order to set and export environmental variables 
## as well as add the appropriate executables to $PATH. 
[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh 
[ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh 
 
JBOSS_HOME=/usr/share/jboss-as-7.1.1.Final
 
AS7_OPTS="$AS7_OPTS -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true"   ## See AS7-1625 
AS7_OPTS="$AS7_OPTS -Djboss.bind.address.management=0.0.0.0" 
AS7_OPTS="$AS7_OPTS -Djboss.bind.address=0.0.0.0" 
 
case "$1" in 
    start) 
        echo "Starting JBoss AS 7..." 
        #sudo -u jboss sh ${JBOSS_HOME}/bin/standalone.sh $AS7_OPTS           ##  If running as user "jboss" 
        #start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/standalone.sh -- $AS7_OPTS   ## Ubuntu 
        ${JBOSS_HOME}/bin/standalone.sh $AS7_OPTS & 
    ;; 
    stop) 
        echo "Stopping JBoss AS 7..." 
        #sudo -u jboss sh ${JBOSS_HOME}/bin/jboss-admin.sh --connect command=:shutdown            ##  If running as user "jboss" 
        #start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/jboss-admin.sh -- --connect command=:shutdown     ## Ubuntu 
        ${JBOSS_HOME}/bin/jboss-cli.sh --connect command=:shutdown 
    ;; 
    *) 
        echo "Usage: /etc/init.d/jbossas7 {start|stop}"; exit 1; 
    ;; 
esac 
 
exit 0

######################### FIN archivo #################

Con chkconfig podremos agregarlo para que inicie y finalice cuando arranquemos o apaguemos el equipo, ver como se adapta a cada instalación de Linux, por ejemplo si quieren que se arranque cuando iniciamos entorno grafico o no. Por ejemplo algo asi
chkconfig –level 345 jboss711 on

Probemos en reiniciar el equipo y probar que siga funcionando jboss y postgresql

Esta todo funcionando, ahora lo único que falta es crear el war desde gx, con el Depoyment wizard sin hacer ningún cambio, lo único que hay que hacer es agregar todas las clases al war generado (se puede editar con winzip) ya que genexus solo agrega algunas y si se quiere agregar cuando se está generando desde la aplicación DW de gx se cae (en mi caso, pueden probarlo ustedes).
Y por último hay que tirar el war en /usr/share/jboss-as-7.1.1.Final/standalone/deployments, mirar el log y ver que no tire ningún error, y por último en un navegador accede a la aplicación.
Recordar que el link sería algo así:



miércoles, 19 de noviembre de 2014

Orden de reglas en GX

Muchas veces tenemos que poner reglas en Transacciones genexus que son un poco complicadas y tenesmos que pensar cual regla se ejecuta antes de otra, con el tiempo uno lo hace ya casi por instinto, pero siempre nos queda la duda de esta bien lo que estamos haciendo.
Como encontré en la wiki de Gx algo que está bien claro, sobre todo para las versiones nuevas lo pego acá para que todo el mundo lo tenga un poco más claro.


Rule Triggering Order

When a Transaction has been confirmed, the events will be triggered in the following order:
  • BeforeValidate
  • Check Extended Table (Internal GeneXus triggering event; Refcall rules are triggered here).
  • Confirm data
  • Check Optimistic Concurrency (Internal GeneXus triggering event; Record modification and locking are checked in this event).
  • AfterValidate (first level)
  • BeforeInsert/Update/Delete
  • DB is updated
  • AfterInsert/Update/Delete
    • BeforeValidate Level
    • Confirm data
    • AfterValidate Level
    • BeforeInsert/Update/Delete Level
    • AfterInsert/Update/Delete Level
  • AfterLevel Level
  • DB is updated; the success message is displated ('Data has been successfully added')
  • BeforeComplete
  • Commitment of the LUW
  • AfterComplete

jueves, 7 de noviembre de 2013

OLE Error: SC:499 - FAC 4 - SEV 1

Este error se da cuando genexus no se instala bien, esto sucede muy a menudo cuando se instalan versiones viejas de gx (en mi caso Gx 8.0)  en Windows 7.
Salta el error cuando se intenta compilar un objeto, cuando se intenta importar un objeto de otro modelo o de diseño, o hacer un copy model.

Solución:
            1 – ejecutar el bat GXRegNT.bat que está en la carpeta de instalación de gx (normalmente C:\Program Files (x86)\ARTech\GeneXus\gxw80)
            2 – revisar que el generador que se este intentando generar este instalado
            3 – registrar en .net los tres exe de genexus que se indican arriba.
-          C:\Windows\Microsoft.NET\Framework\v2.0.50727>RegAsm.exe "C:\Program Files (x86)
\ARTech\GeneXus\gxw80\GXWSDLInspector.exe"
-          C:\Windows\Microsoft.NET\Framework\v2.0.50727>RegAsm.exe "C:\Program Files (x86)
\ARTech\GeneXus\gxw80\WizardNewModel.exe"
-          C:\Windows\Microsoft.NET\Framework\v2.0.50727>RegAsm.exe "C:\Program Files (x86)

\ARTech\GeneXus\gxw80\GXThemeEditor.exe"

martes, 5 de noviembre de 2013

Error 0x80070005 Acceso Denegado

Este error se da cuando tenemos un servidor de licencias genexus e intentamos acceder desde otro equipo, normalmente pasa con sistema operativo Windows 7.

Pasos a seguir para licenciar genexus con servidor de licencias en distinto pc
Para utilizar las licencias en otro pc, se debe de indicar la ip o el nombre del  pc en el license manager de genexus como se muestra en la imagen



Se debe de seleccionar Remote License e indicar la ip del equipo que oficia de servidor de licencia.
Si ocurre el error que se muestra en la imagen, ya sea en el license manager como al abrir genexus se debe de seguir los pasos que indico abajo para poder evitar este error.



Voy a explicar suponiendo que las maquinas no están en un dominio, para esto hay ayuda en el wiki de genexus, también voy a suponer que el servidor de licencias funciona, y los clientes están en Windows 7, ya que con Windows XP es más sencillo (igual aplica y se puede tomar como referencia) (http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,4,61,O,S,0,,22835), igual si ven los pasos son casi todos iguales, solo hay algunos distintos.
-          Primero en el servidor de licencias debemos de crear el usuario con el que se conecta el o los pc clientes, debe de indicarse siempre el usuario y la contraseña idénticos.
-          Ambos equipos, servidor y cliente deben de estar en el mismo grupo de trabajo.
-          En el servidor debe de existir un grupo llamado ARTech Remote Protection User, y los usuarios que creamos antes todos deben de pertenecer a este grupo. Ademas algo que no se necesita pero podemos utilizarlo en el futuro es el grupo GXprotAdmin, se usa más que nada para loguear los errores del license manager, a este grupo también agregar los usuarios de los clientes (los que creamos en el primer punto). Si alguno de estos grupos no existen se deben de crear.



-          En el cliente crear si no existe los 2 grupos que se indicaron arriba y agregar el usuario del equipo a estos grupos
-          Ahora se debe de dar permiso de acceso remoto al usuario anónimo, esto se hace de la siguiente forma:
1 Inicio > Ejecutar > dcomcnfg, luego en mi pc le damos botón derecho y propiedades, luego en Anonymous Logon en Editar Limites le damos acceso remoto, como se muestra en las siguientes imágenes.






sábado, 28 de julio de 2012

Largo de nombres de tablas en DB2 con Genexus 9.0

Empce un proyecto nuevo y el cliente exigio que se utilizase DB2. Este proyecto lo desarrollaremos con Genexus 9.0, y es una migracion de un proyecto que tenemos con MySql. Al intentar crear la base de datos desde Genexus me daba problema con tablas e indices que el largo del nombre era mayor a 18 caracteres.
Investigando y obteniendo ayuda de artech, encontramos que este problema se da con Genexus 9 ya que DB2 anterior a la versión 10, no soportaba mas de 18 caracteres, entonces genexus por mas que se configuraba en las propiedades del modelo que el largo de las tablas era 30 igual daba error y no dejaba impactar la base, segun algunos sac para la version Evo1 U3 de genexus esto se soluciona.
Pero existe un workaround, en el archivo config.gx que si no existe se debe de crear en la raiz del modelo, copiar lo siguiente:


rgz0001=w
rgz0002=w
rgz0014=w 

Luego de esto se sigue trabajando igual, no cambia nada en la operativa diaria.
 

sábado, 14 de mayo de 2011

Conversor de colores

El titulo no dice mucho, pero la idea sería que tengo los colores en RGB y los necesito en hexadecimal, entonces buscando en san-google, encontré una página que además de darme esta conversión, me da otras (por ejemplo CMYK), y tienen varias cosas más que no he investigado, pero eso se los dejo a ustedes.

La página que les comentaba es la siguiente:


domingo, 3 de abril de 2011

Instalar y configurar ambiente Linux con Ruby para aplicacion Genexus Ev2 para Android

Luego de hacer mil pruebas voy a comentar cómo hacer para tener un ambiente Linux, en mi caso la distro que utilice fue Ubuntu, con Ruby, en mi caso la versión 1.9.1 que es la que funcionaba con Genexus Evolution 2 (beta 2 y algún nigth buils mas, pero creo que no me equivoco si digo que desde evolution 1 en delante, hasta hoy funciona), y una aplicación en mi caso particular para Android.

Perimo contarle que hice muchas pruebas, en las que utilizando Ubuntu Desktop 10.10 (supongo que server 10.10 es lo mismo), no pude llegar a que funcionara, el problema es que instales lo que instales, de ultima queda instalado Ruby 1.9.2, y esto no le gusta a las aplicaciones Genexus.

Las otras pruebas las realice (y en esta si me quedo andando) con Ubuntu Server 10.4.

También les cuento que probé varias formas de instalar, tanto ruby como las otras cosas que necesito, por ejemplo passenger, y la única que me función es la que voy a describir abajo, probar instalando por rvm (que es un manejador / instalador de ruby, dicho muy brutamente), con el código fuente, a la vieja usanza del famoso make, make install, con apt-get, pero repito la única forma que me anduvo fue como describo (para obtener este manual estuve trabajando más de 1 semana entera, y muchas horas en cada dia)

Bueno me base en un manual que la gente de artech tienen desde hace tiempo y mucha ayuda de alguien de Artech (su nombre es Daniel Mendez, y es un conocido de los eventos gx, por más que nunca hable con el), para el que quiera mirarlo les deja el link http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Linux+setup+for+running+Ruby+applications+using+mod-rack

Pero con este manual no basta (por lo menos a mi no me basto ni por casualidad).

Empecemos:

Paso 1: Instalar Ruby:

Para esto ejecutamos lo siguiente (recordar que esto es para Ubuntu Server 10.4 en la versión más nueva no funciona porque termina instalando la versión 1.9.2)

$ sudo apt-get install ruby1.9.1-dev ruby1.9.1 ri1.9.1 rdoc1.9.1 irb1.9.1 libreadline-ruby1.9.1 libruby1.9.1

Paso 2: Crear los links a lo instalado:

$ sudo ln -s /usr/bin/ruby1.9.1 /usr/local/bin/ruby

$ sudo ln -s /usr/bin/ri1.9.1 /usr/local/bin/ri

$ sudo ln -s /usr/bin/rdoc1.9.1 /usr/local/bin/rdoc

$ sudo ln -s /usr/bin/irb1.9.1 /usr/local/bin/irb

$ sudo ln -s /usr/bin/gem /usr/local/bin/gem

Esto se puede hacer acá o más adelante, pero como lo necesito lo hago acá, si nos fijamos en la carpeta /usr/local/bin, vamos a ver que el link a gem no está bien (debe de aparecer en rojo), pero por ahora la dejamos así.

Paso 3: Instalar algunas gemas que precisamos.

$ sudo apt-get install libmysql-ruby1.9.1

$ sudo apt-get install rubygems1.9.1

$ sudo apt-get install libmysqlclient15-dev

Para este paso y para todos los que vienen cada cosa que instala debemos de ver que no quiera instalar algo distinto a la versión 1.9.1, si por alguna cosa dice que quiere instalar alguna otra versión, tenemos que buscar la vuelta para no hacerlo.

Paso 4: Instalar gema passenger

$ sudo gem install passenger

A esta altura si nos fijamos el link de gem que hicimos en el punto 2 ya debe de estar verde.

Para cerciorarnos que todo sigue bien desde la consola debemos de ver la versión de ruby

$ ruby -v

Si esto nos dice 1.9.1 esta todo bien, si dice otra cosa algo hicimos mal y no creo que funcione la aplicación genexus.

Paso 4: Instalar passenger.

Primero tenemos que descargarnos passenger, yo la versión que instale fue la 3.0.5. Luego que lo tengamos lo copiamos a alguna ruta, en mi caso /home/teto/passenger, luego entramos a la carpeta bien (la van a ver dentro de lo que descomprimimos), y le daremos permiso de ejecución y ejecutamos lo siguiente:

$ cd ./passenger-X.X.X/bin/
$ chmod 777 passenger-install-apache2-module
$ ./ passenger-install-apache2-module

Esto es interactivo, es decir que nos va tirando por consola varios mensajes, el primero es que va a empezar a trabajar, luego hace un chequeo, y acá es donde empieza a complicarse un poco la instalación, ya que casi seguramente no pase todos los chequeos, pero al final el instalador nos va diciendo que nos está faltando y cómo podemos hacer para instalarlo, todo es con apt-get, pero aca hay que tener mucho, mucho, cuidado, ya que si empezamos a ejecutar lo que nos dice, sin mirar lo que va a instalar (sobre todos las dependencias que necesitan los paquetes que instalamos), que en ningún momento nos diga que va a instalar algo distinto a ruby 1.9.1. Mi consejo es que vayan instalando de a una y que vayan mirando las dependencias, y si algo les da una dependencia de con un ruby 1.8 (este fue mi caso), que lo dejen de lado y vayan instalando lo otro, que nos dijo, o buscando la versión 1.9.1 del paquete. Sé que no es muy específico lo que digo pero solo en un par de paquetes nos da problemas, la gran mayoría se pueden instalar directamente.

Cuando se termina de instalar passenger, nos da 3 renglones que tenemos que guardarlos para poner en el archivo de configuración de apache.

Si llegamos a este paso ya tendríamos casi todo pronto, lo que nos falta ahora es tener apache instalado, y configurado.

Paso 4: instalación y configuración de apache2.

$ sudo apt-get install apache2


En el archivo /etc/apache2/apache2.conf al final agregamos las 3 líneas que nos dio el instalador
de passenger en mi caso es algo así



LoadModule passenger_module
/home/teto/ruby/passenger-3.0.5/ext/apache2/mod_passenger.so
PassengerRoot /home/teto/ruby/passenger-3.0.5
PassengerRuby /usr/bin/ruby1.9.1


Ademas tenemos que modificar el httpd.conf para indicar el directorio virtual del apache,
en mi caso es algo asi (esto también lo indica el instalador de passenger pero lo que nos
pone no está del todo bien)


VirtualHost // esto va entre simbolos de mayor menos
ServerName localhost
DocumentRoot /home/teto/ruby/aplicacion/public
Directory /home/teto/ruby/ aplicacion /public
// esto va entre simbolos
// de mayor menos
AllowOverride all
Options -MultiViews
/Directory
// esto va entre simbolos de mayor menos
/VirtualHost // esto va entre simbolos de mayor menos

Si se fijan, mi aplicación , se llama aplicación, pero tenemos que indicar hasta public.

Paso 5: copiar la aplicación.

Bueno esto es la parte fácil (creo), teniendo ya compilada y bien configurada la aplicación en genexus, recordar poner bien la base de datos, el webroot que tienen que tener algo asi: http://ipdelservidor/aplicacion, luego generamos y compilamos, para que nos cree todos los objetos que necesitamos.

Luego detecatamos donde nos crea los objetos (si lo dejaron por defecto estaría en RubyModel), y copiamos todo, a la carpeta del servidor /home/teto/ruby/aplicacion.

Luego creamos dentro del servidor una carpeta tmp y una public (/home/teto/ruby/aplicación/tmp y /home/teto/ruby/aplicación/public)

Luego (y esto no se si es necesario y me parece que no pero yo lo hago por las dudas) encontramos la carpeta gxruby de donde instalamos genexus y la copiamos también a la carpeta /home/teto/ruby/aplicación.

Paso 6: probar que funcione.

Lo podemos probar desde el emulador o desde algún celular que tenga android, si es desde el emulador solo tenemos que darle play a genexus (si tenemos todo bien configurado, la base creada etc., la aplicación se muestra en el emulador) o ejecutar nuestra aplicación en el cel.

Bueno con esto a mí me funciono, por favor si hay algún error o si alguien tienen una forma más fácil, me lo comenta para investigarlo.

viernes, 11 de febrero de 2011

orphaned case en Genexus

En algunas situaciones en KB genexus 9, al compilar me ha saltado este error “orphaned case”, esto se da cuando tenemos algún Datastor, que no tienen definido bien el tipo de motor que se usa, esto pasa cuando creamos un modelo nuevo, y no definimos bien la parte de Datastor.

Lo que hay que hacer es elegir el motor que van a trabajar y con esto se soluciona, lo que van a tener que hacer es además generar los objetos que dan problemas.

domingo, 15 de agosto de 2010

Genexus y Ruby

Estaba probando algo de ruby, con genexus, y una aplicación que andaba en el U1 de evolution con el U2, no funcionaba.

Investigando en la red encontré que la instalación de U2 (quizás porque tengo Windows 7), no instalaba bien, lo que pasaba era que no seteaba el path de donde está instalado Ruby.

Entonces lo que hay que hacer es agregar al path, ya sea del usuario o del sistema (yo prefiero del sistema) la ruta donde se instalo Ruby (normalmente c:\Ruby\bin).

Con eso ya se soluciona el problema de que genexus no encuentre a Ruby.

Para los que venimos de Windows Xp, para acceder a las variables de sistema, lo que hay que hacer en 7 es, en inicio, en buscar, escribimos “variables de entorno”, y nos muestra 2, una de sistema y otra de usuario, ambas llaman a la ventana que conocíamos de xp, si hacemos click en la de sistema, se abre la ventana, le damos en variables de entorno y luego solo tenemos que editar el path.

lunes, 17 de mayo de 2010

Actualizar estadisticas Informix

El problema que estoy teniendo es que tenía una tabla que la cargaba en un solo proceso y esto cargaba 16 millones de registros.

La clave de esta tabla era los 2 primeros registros y luego tenia uno de datos que era un VarChar de 800.

El problema es que al procesar algo de la tabla que comentaba, que es decir al hacer un select sobre esta tabla, como las estadísticas no estaban actualizadas, el motor informix, no se daba cuenta que la tabla tenia 16millones de registros y se pensaba que tenia 0 registros, entonces no utilizaba el índice que debía, ya que le motor suponía que al tener tan pocos registros, que no utilizara índices sino directamente recorra la tabla entera.

Esto lo que pasaba era que utilizaba demasiado espacio tanto en los temporales como en los logs de informix, lo cual hacia que mi aplicación se cayera y dijera que no tenia espacio para procesar esto.

Antes de actualizar las estadísticas, hacer un count de la tabla migración me demoraba aprox 20 minutos, luego de actualizar las estadísticas me demora un minuto y poquito.

Entonces el comando para actualizar las estadísticas de informix es el siguiente:

UPDATE STATISTICS LOW FOR TABLE nombreTabla; (ejecución muy rápida, estadísticas poco detalladas, planes de ejecución adecuados)

UPDATE STATISTICS MEDIUM FOR TABLE nombreTabla; (ejecución relativamente rápida, estadísticas confiables, planes de ejecución buenos)

UPDATE STATISTICS HIGH FOR TABLE nombreTabla; (ejecución muy costosa, estadísticas con máximo detalle, planes de ejecución óptimos)

Si se esta ejecutando esto desde genexus, se debe de poner adelante SQL, y poner este código en algún procedimiento.

viernes, 23 de abril de 2010

Tranferir licencias GX

Tengo un equipo el cual voy a formatear, y necesito respaldar mis licencias Genexus.

Para esto vamos a utilizar el equipo que yo tengo, otro equipo con Genexus la versión que esté utilizando que tenga los upgrade igual a mi equipo.

Entonces en el otro equipo tengo que ejecutar el LicenceManajer, esto está en el menú de inicio de programas en el menú de Genexus, y tiene un icono de una llave.

Entonces ejecutamos el LM, luego que aparece la ventana arriba a la derecha tenemos un botón Transfer, seleccionamos la licencia que guardaremos (debemos hacer un archivo y el proceso por cada una de las licencias a guardar) hacemos click en el botón, y nos lleva a la ventana que mas vamos a utilizar.

En esta ventana tenemos varias cosas para hacer, la idea es generar un archivo .trf, desde el equipo al que le voy a agregar las licencias, luego desde mi equipo exportar las licencias a ese archivo, y por ultimo levantar estas licencias en el otro equipo, y ahí la licencia queda segura en el otro pc, luego que instale mi equipo, se hace lo mismo pero tomando como base la licencia que tiene el otro equipo, es decir al revés que como lo hicimos primeramente.

Entonces con el LM en la pantalla que nombre arriba, vamos a generar un .trf, entonces tenemos que marcar abajo a la izquierda “Register Transfer”, marcar la ruta donde queremos guardar el archivo y presionamos OK. Esto genera un archivo .trf, que tenemos que pasarlo en este caso a mi equipo.

Estando en mi equipo ejecuto nuevamente el LM y me paro en la pantalla que nombre arriba, y en la ruta marcamos donde este el .trf que pasamos a mi equipo, luego seleccionamos “Tranfer Out”, y la cantidad de licencias que pasaremos, normalmente 1, pero pueden ser mas (de un solo generador por ejemplo 1 licencia de Java), y presionamos ok, y se sobrescribe el .trf.

Por ultimo tenemos que volver el .trf al otro equipo, podemos sobrescribir el que ya habíamos generado, y vamos a ver que el tamaño es mayor. Luego ejecutamos el LM, y debemos seleccionar la ruta del archivo (por defecto se guarda la ultima utilizada), y debemos seleccionar “Tranfer In”.

Si seguimos los pasos que puse acá, debería de aparecer la licencia en la pantalla principal del LM. Para que todo esto funcione los 2 equipos deben de tener genexus al mismo upgrade de developer y del generador que estemos traspasando.

miércoles, 21 de abril de 2010

Comprimir tar en windows

Mi entorno de trabajo tiene que ser Windows porque trabajo mayormente con Genexus, que este no anda en Linux, y la mayoría de las aplicaciones que desarrollo son para Linux, entonces tengo que pasar los objetos que genero, en mi caso las clases y js a un ambiente Linux.

Si es dentro de la LAN, lo puedo pasar directamente a las clases y js por medio de WinSCP, pero el tema es cuando se suben a un servidor que no está en la LAN, o por ejemplo en los hosting que te ofrecen una determinada cantidad de MB por mes, entonces tenemos que compactar lo más posible para pasar los objetos.

Como en el 99% de los casos los servidores Linux por defecto saben descomprimir los archivos .gz (o tar.gz), esta es la compresión que a mí me gusta.

Entonces el programa que utilizo para comprimir en Windows a tar.gz se llaman 7zip, es un programa bastante viejo que ha mejorado mucho en los últimos tiempo.

Además es gratis, y muy intuitivo de usar (para hacer un tar.gz se necesitan 2 pasos igual que en Linux, primero un tar, y luego lo comprimimos).

domingo, 18 de abril de 2010

DataSelector en genexus 10

Muchas veces tenemos aplicaciones que repetimos una y otra vez las mismas consultas, un ejemplo de esto es el clásico usuarios habilitados, cuando el usuario se va a loguear al sistema al validarlo si el usuario esta activo, cuando vamos a hacer algo con los usuarios mostramos los que están activos. Entonces el código sería algo así:

For each

Where UsuarioEstado = “A”

……

Y esto se repite por todo el sistema, pero que pasa si ahora hacemos la aplicación que sea paga, entonces tenemos algo asi

For each

Where UsuarioEstado = “A”

Where UsuarioPago = “S”

…..

Y esto debemos de cambiarlo en todos lados.

Entonces Genexus 10 (X, evolutio1, etc., como quieran nombrarla) tiene un nuevo objeto que se llama DataSelector, y sirve para ayudarnos en estos casos. El data selector lo que hace es decir cuales son las condiciones que debe de cumplir una consulta, también puede recibir parámetros, decirle el orden, y por ultimo un defined by para recorrer la tabla correcta.

Lo que debemos hacer es primero definir el data selector, que seria asi

Parametros: no recibr

Condition: UsuarioEstado = “A”

Order: aca pude ser el nombre por ejemplo

Defined by: supongo que con los 2 campos recorre bien la tabla entonces no le indico nada

Al desarrollar la aplicación ponernos en todo los for each que tengan que ver con los usuarios activos

For each USING nombre del datastore

……

Entonces como dije si ahora tenemos que tener solo los usuarios actives y que pagaron, debemos de cambiar el DataStore agregándole una condition, y no tocar nada mas de la aplicación.

jueves, 1 de abril de 2010

Penca Mundial 2010

En esta oportunidad no es información técnica lo que voy a compartir, solamente voy a promocionar una penca para el Mundial Sudáfrica 2010 de fútbol.
La misma la he realizado enteramente yo y es solo (por ahora) por diversión, así que espero los comentarios, las quejas, las preguntas, etc.

Datos técnicos de la aplicación:
Realizada con Genexus Evolution, generando para java y base de datos mysql.

http://pencamundial2010.servegame.com:8080/mundial/servlet/inicio

Bueno ahora mejore un poco el acceso a la penca, ya que cambie el servidor que esta esta aplicación, les paso el nuevo link. Ademas si entraron las primeras veces van a ver muchos cambios.

http://pencamundial2010.servegame.com/mundial/servlet/login

Estimados, ahora ya tenemos dominio propio y podemos acceder por la siguiente dirección
http://www.juegauruguay.net
Ademas anexamos una penca paga, con los cual cada usuario puede jugar pagando solo 150$, y se llevara el premio, que es la suma de lo que todos apuesten. si la cantidad de usuarios es bastante, entonces se podrá poner no solo premio para el primero sino también para los siguientes puestos.

Espero que el tiempo que haya estado bajo la aplicación (ya que se tuvo que migrar a este nuevo sitio), que fue de un par de horas, no les haya causado muchos problemas. Gracias por entender.


Amigos de JuegaUruguay.net, ya estamos a unos pocos dias de iniciar la copa del Mundo Sudáfrica 2010. Si ya están registrados (recuerden que es gratis) en la penca, quizás recibieron las noticias que cada cierto tiempo estoy enviando y sabrán que ya superamos los 200 jugadores.
Si todavía no se registraron, registrense, y empiecen a jugar.

miércoles, 20 de enero de 2010

Mysql y Genexus en linux

Para poder utilizar Mysql con Genexus, sin tener que modificar a mano las tablas lo que hay que hacer es lo siguiente, en my.cnf, agregar

lower_case_table_names=1

esto en la sección [mysqld] del my.cnf . Si no tienen el my.cnf (deberían de tenerlo porque es donde se configura mysql, para no dejarlo por defecto y arreglarlo a nuestras necesidades) deben de ver el archivo que arranca el motor (normalmente /etc/init.d/mysql) ahí debe mostrar donde debe de existir este archivo (my.cnf) y solo poner las 2 lineas, primero la sección y luego el lower case.

Por que pasa esto? bueno genexus crea las tablas en minúsculas, pero al intentar acceder a alguna tabla la busca en mayúscula, entonces no encuentra lo que busca, por eso se le dice al motor que no sea key sensitive.