Author Archive

Forzar modo de compatibilidad en Explorer

jueves, enero 12th, 2012

Una de las cosas funestas de la emision de nuevas versiones de Internet Explorer son las de compatibilidad, páginas que antes se te visualizaban de forma correcta ahora ya no. Existe una forma de generar las compatibilidades con versiones anteriores que me ha resultado, esto es incluir una etiqueta meta en la cabecera de la página


Con esto la compatibilidad se acercará más a lo que necesitas.
Encontré esta solución en dos sitios distintos (sigue el enlace 1 o el enlace 2) pero establecían «IE=IE7» o «IE=IE8» pero a mi me resultó sólo con «IE=8».

Error en lectura de archivo fuera del Application Server

jueves, enero 12th, 2012

Tengo una pagina JSP encargada del proceso de «download» para cualquier archivo. Esta había sido probada en varios sistemas operativos hasta que me topé con Solaris. En Solaris uno no puede leer un archivo que este fuera de la ruta del servidor de aplicaciones, envía error y no lee el archivo (en otros sistemas operativos no sucede). Para poder hacerlo no hay que abrirlo como File sino como URL, pero para abrirlo como URL, hay que antepornerle el protocolo ‘file://’, siendo esto compatible con todos los sistemas operativos.

String file = "file://" + request.getParameter("file");
	
OutputStream output = response.getOutputStream();
InputStream in = null;
try {
    URL url = new URL(file);
    in = url.openStream();
    byte[  ] buf = new byte[4 * 1024]; 
    int bytesRead;
    while ((bytesRead = in.read(buf)) != -1) {
        output.write(buf, 0, bytesRead);
    }
} finally {
    if (in != null) in.close();
}

La verdad es que independientemente del sistema operativo esto debió ser siempre así, sólo que muchas veces uno se queda con lo primero que le resulta.

Error de compilacion de un Package en Oracle (PLS-201 o PLS-00201)

jueves, enero 12th, 2012

Un error raro me apareció mientras compilaba un package

ERROR at line 1:
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-201: identifier 'UNDEFINED' must be declared

Este error se da comunmente a package que tienen relacionados una vista, una solución fue reconstruir la vista según lo explicado en un blog ya que las vistas que tenían ‘select *’ eran las que provocavan el problema.

Eectivamente el error desapareció, pero ninguna de mis vistas tienen el ‘select *’ por lo que la razon es otra. Como utilizo SQL Developer para desarrollar en Oracle, me di cuenta que en la definición de las vistas (al ver la lengueta SQL de la vista) guarda además los nombre de los campos de la vista, aun cuando esto se ocupe el ‘select *’, o sea, la vista se define

CREATE OR REPLACE FORCE VIEW "MI_VISTA" ("CAMPO_UNO", "CAMPO_DOS", ...)
AS ...

Si cambias sólo el select de la vista sin reconstruir la vista te aparecerá ese error en los packages relacionados con ella.

Creación de script para compilación de objetos inválidos en Oracle

jueves, enero 12th, 2012

Para generar sentencias de compilación para los objetos que se encuentran en estado inválido en Oracle sería útil el siguiente script:

select
   'ALTER ' || OBJECT_TYPE || ' ' ||
   OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from
   dba_objects
where
   status = 'INVALID' and owner = 'nombre_del_schema'
and
   object_type in ('PACKAGE','FUNCTION','PROCEDURE','PACKAGE BODY')
;

Encontrando objetos inválidos en Oracle

jueves, enero 12th, 2012

Por lo general en los momentos de compilación de un Packages que esta basado en una vista muchas veces falla por que encuentra la vista o parte de la definicion de un package inválida. El siguiente script esta construido para detectar los objetos invalidos de un esquema

select
   owner, object_type, object_name
from
   dba_objects
where
   status != 'VALID' and owner = 'nombre_del_schema'
order by
   owner,
   object_type
; 

Obviamente si eliminas el «and and owner = ‘nombre_del_schema'» saldrán todos los objetos que se encuentran descompilados.

Instalar JBoss como servicio en Solaris

sábado, noviembre 26th, 2011

Existe en Solaris una forma de configurar un servicio a través de generar un script y crear un archivo XML para la configuracion del servicio.

Encontre en este sitio una explicación de los servicios y del comportamiento de los servicios. En el esta explicado como hacerlo para JBoss 5.x, pero en mi caso tuve que hacer modificaciones para JBoss 4.2.3.GA.

Primero crea un script llamado jboss

#!/sbin/sh

. /lib/svc/share/smf_include.sh

getproparg() {
	val=`svcprop -p ${1} ${SMF_FMRI}`
	[ -n "$val" ] && echo $val
}

if [ -z ${SMF_FMRI} ]; then
	echo "SMF framework variables are not initialized."
	exit ${SMF_EXIT_ERR}
fi

METHOD=${1}	# %m	(start/stop)
INSTANCE=${2}	# %i	(instance name)

# read other properties...
JBOSS_USER=root
JBOSS_HOME=/usr/local/jboss-4.2.3.GA
JBOSS_HOST=`getproparg instance/host`
JBOSS_PROFILE=${INSTANCE}
JBOSS_PARTITION=`getproparg instance/partition`
JBOSS_UDP_ADDRESS=`getproparg instance/udp_address`
JBOSS_UDP_PORT=`getproparg instance/udp_port`
JBOSS_PROP=`getproparg instance/properties`
JBOSS_EXTRA_OPTS=

if [ -z ${JBOSS_HOME} ]; then
	echo "jboss/home property not set"
	exit ${SMF_EXIT_ERR_CONFIG}
fi

if [ ! -z ${JBOSS_PARTITION} ]; then
	JBOSS_EXTRA_OPTS="${JBOSS_EXTRA_OPTS} -g ${JBOSS_PARTITION}"
fi

if [ ! -z ${JBOSS_UDP_ADDRESS} ]; then
	JBOSS_EXTRA_OPTS="${JBOSS_EXTRA_OPTS} -u ${JBOSS_UDP_ADDRESS}"
fi

if [ ! -z ${JBOSS_UDP_PORT} ]; then
	JBOSS_EXTRA_OPTS="${JBOSS_EXTRA_OPTS} -m ${JBOSS_UDP_PORT}"
fi

if [ ! -z ${JBOSS_PROP} ]; then
	JBOSS_EXTRA_OPTS="${JBOSS_EXTRA_OPTS} -D${JBOSS_PROP}"
fi

if [ ! -d ${JBOSS_HOME}/server/${JBOSS_PROFILE} ]; then
	echo "jboss/profile ${JBOSS_PROFILE} not found"
	exit ${SMF_EXIT_ERR_CONFIG}
fi

case "${METHOD}" in
'start')
	su ${JBOSS_USER} -c "${JBOSS_HOME}/bin/run.sh -c ${JBOSS_PROFILE} -b ${JBOSS_HOST}" ${JBOSS_EXTRA_OPTS} &
	;;

'stop')
	su ${JBOSS_USER} -c "${JBOSS_HOME}/bin/shutdown.sh -S"
	;;

*)
	echo "Usage: ${0} {start|stop}"
	exit 1
	;;
esac

exit ${SMF_EXIT_OK}

De esto lo más importante es el usuario y la ruta de JBoss, en general, como en casi cualquier sistema operativo es mejor crear un usuario para el servicio, en este caso jboss, aqui esta establecido el root directamente, lo que podría ser una falla de seguridad.

Este debe copiarse

cp jboss /lib/svc/method/
chmod +x /lib/svc/method/jboss

Luego debe crearse un XML para inciar el serivio, el del sitio original, yo lo modifique para JBoss-4.2.3.GA, las diferencias son que en la carpeta server las aplicacione son all, minimal y default, en cambio en JBoss 5.x son más.

El XML sería entonces






    

        
        
            
        

        
        
            
        


        

        

        
        
            
            
        

        
        
            
                
                
                
                
                
            
        
        
            
                
                
                
                
                
            
        
        
            
                
                
                
                
                
            
        

        

        

    


Luego de crearlo debes incorporarlo como servicio a través del siguiente comando

svccfg import jboss.xml

Para aplicar la configuracion de multicast debes cambiar las propiedades a través del siguiente comando

svccfg -s svc:/application/jboss:default setprop instance/host=0.0.0.0
svcadm refresh jboss:default

Luego de lo cual puedes aplicar el comando para inciar (y habilitar)

svcadm restart jboss:default

Para reiniciar

svcadm restart jboss:default

O para detener

svcadm restart jboss:default