Sunteți pe pagina 1din 52

AVALON

APUNTES DEL DESARROLLO


Y SOLUCION DE POSIBLES ERRORES
DE AUDITORIA AVALON

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

CONTROL DE VERSIONES
DOCUMENTO :
Ubicacin:
Ver. Fecha
01
02

21/10/2010

APUNTES AVALON: INSTALACIN Y SOLUCION DE POSIBLES ERRORES

Descripcin
Creacin del documento inicial de diseo.
Revisin final

1.- INSTALACION DE AVALON

2.- LOS COMANDOS EN AIX

3.- ACCESO A BBDD


3.1. LIMPIEZA DE LA BBDD DE AVALON
4.- TRAZAS IMPORTANTES

4.1. Merlin.log
4.2. Log.log
4.3. Publicacion.log
4.4. Consumo.log

4.5. Catalina.out
5.- MODIFICACIONES EN AVALON
6.- RECOMENDACIONES
7.- POSIBLES ERRORES EN AVALON
7.1.

Error: Cuando en AvalonBackoffice salta


mensaje Unsupported major.minor version 50.0

un

error que

contiene

el

7.2. Error: Cuando en AvalonBackoffice salta un error que


contiene
el
mensaje:
javax.servlet.ServletException:
Exception in JSP: /full_audit_user.jsp:6

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 2 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

7.3. Error: Salta error en catalina.out


7.4. Error: No arranca el Tomcat con el comando startup
en AIX
7.5. Error: En catalina.out se ve el error: cabecera2 not
found
7.6. Error: se queda pillado algn proceso
7.7. Error: no se puede borrar un fichero desde el cliente
filezilla
8.- NOTAS IMPORTANTES

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 3 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

1 INSTALACION DE AVALON
Se tiene que instalar todo avalon en pre-produccin por lo que se debe instalar:
-

Tomcat>5 en AIX

MYSQL en una de las mquinas, volcar toda la BBDD, slo el esquema mas no los
datos

Ver si se pasa todo a un solo repositorio o si cada mdulo pasa a una mquina
especfica. Lo suyo es la segunda opcin.

POR INSTALAR EN PRODUCCION


Identifica
dor

Depende
ncia

Tarea
En
entorno
Desarrollo:
Requisitos
mnimos
del
Entorno
Servidor:
-Hardware:
1GB
de
RAM
Athlon 1,5 Ghz/Pentium 4 1,5 Ghz (o
equivalente)
Ethernet Gigabit o Fiber Channel.
-Software:
S.O. HP-UX, Windows 2000 profesional,
Linux,
Solaris,
Mysql,
Apache
Tomcat
5.5,
Framework
JSF,
Driver: mysql-connector-java-5.1.7-bin.jar
En entorno Desarrollo / Test: Instalacin
del IDE (Entorno de Desarrollo Integrado de
cdigo abierto multiplataforma): Eclipse
SDK Versin: 3.2.0
En entorno Desarrollo / Test: Instalacin
del JRE (Java Runtime Environment, El
JRE
acta
como
un "intermediario" entre el sistema
operativo y Java.): jre1.6.0_03
En entorno Desarrollo / Test: Instalacin
del J2SDK (Java 2 Standard Development
Kit
es
el
entorno
de desarrollo estndar para la plataforma
Java 2 distribuido por Sun): j2sdk1.4.2_12
En entorno Desarrollo / Test: Instalacin
del Tomcat (Tomcat es un servidor web con
soporte
de
servlets y JSPs. ):Tomcat 5.5.28

En entorno Desarrollo / Test: Instalacin


de MySQL (MySQL Server 5.1)

AVALON Solucin de Auditoria y Gestin de la Seguridad

Respons
able

Estad
o

Alvaro

Cerra
do

Alvaro

Cerra
do

Alvaro

Cerra
do

Alvaro

Cerra
do

Alvaro

Cerra
do

Alvaro

Cerra
do

Pgina 4 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

10

11

12
13

14
15

14

16

15

17

En entorno Desarrollo / Test: Instalacin


de JSF (Java Server Faces, la interface
grfica que nos permite desarrollar
aplicaciones empresariales robustas, en
tiempos de desarrollo cortos, con una
interfaz web amigable.)
En entorno Produccin: Requisitos
mnimos
del
Entorno
Servidor:
-Hardware:
1GB
de
RAM
Athlon 1,5 Ghz/Pentium 4 1,5 Ghz (o
equivalente)
Ethernet Gigabit o Fiber Channel.
-Software:
S.O. HP-UX, Windows 2000 profesional,
Linux,
Solaris,
Mysql,
Apache
Tomcat
5.5,
Framework
JSF,
Driver: mysql-connector-java-5.1.7-bin.jar
En entorno Produccin: Instalacin del
IDE (Entorno de Desarrollo Integrado
de cdigo abierto multiplataforma): Eclipse
SDK Versin: 3.2.0
En entorno Produccin: Instalacin del
JRE (Java Runtime Environment, El JRE
acta
como
un "intermediario" entre el sistema
operativo y Java.): jre1.6.0_03
En entorno Produccin: Instalacin del
J2SDK (Java 2 Standard Development Kit
es
el
entorno
de desarrollo estndar para la plataforma
Java 2 distribuido por Sun): j2sdk1.4.2_12
En entorno Produccin: Instalacin del
Tomcat (Tomcat es un servidor web con
soporte
de
servlets y JSPs. ):Tomcat 5.5.28
En entorno Produccin: Instalacin de
MySQL (MySQL Server 5.1)
1. Identificar de la configuracin
realizada
para
el
piloto.
2. Realizar un listado de las auditoras
realizadas
para
el
piloto
3. Enviarla a validar por E. Funcional
Validacin de la lista de entidades /
vistas a validar.
Configuracin en eclipse de los
requisitos a auditar
Revisin
para
Optimizacin
del
rendimiento de los programas java, es
decir, evitar el mal uso innecesario de
la
memoria,
evitar
accesos
costosos al disco y BBDD, agilizacin
de los procesos, etc. para lo que
se ha tomado en cuenta tcnicas y
patrones de diseo, etc.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Alvaro

Cerra
do

Fran

Fran

Fran

Fran

Fran
Fran

lvaro
Fran
Alvaro

lvaro

Pgina 5 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

En /avalon/apache-tomcat-5.5.28/conf hay un fichero muy importante llamado


server.xml en donde se configura el puerto que usar el Tomcat para alojar Avalon, el
cual se puede cambiar si es necesario, especialmente cuando este puerto este muy
congestionado. Se suele cambiar al puerto 8080, que es la que viene por defecto
//server.xml

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->


<Connector port="8888" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<!-- Note : To disable connection timeouts, set connection Timeout value
to 0 -->

2 LOS COMANDOS EN AIX


Para entrar al AIX se necesita pinchar en el Putty u otro programa similar

Se pincha en Run

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 6 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Luego se muestra esta ventana donde si ingresas el host Name que es 170.251.100.197,
que para la facilidad se puede salvar la configuracin, en este caso lo hemos salvado con
nombre eeee

Ni bien pinchas en Open se muestra esta pantalla negra en donde se logea con
Usuario: root
password: Accenture1
Para facilitar las cosas se puede ejecutar el comando bash para que guarde cada
comando que se ejecute, esto es una especie de doskey en MS-DOS

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 7 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Para arrancar se debe de cargar el classpath en donde estn las libreras para eso se
entra a:
cd /avalon/apache-tomcat-5.5.28/bin
Luego se debe exportar el JAVA_HOME
export JAVA_HOME=/usr/java14/jre
Para arrancar se necesita el comando:
. ./startup.sh
Inmediatamente aparecer lo siguiente:

Y para parar:
. ./shutdown.sh
Luego aparecer algo as:

Para ver el proceso que usen el puerto 8888 esta,


lsof -i tcp:8888
Luego aparecer algo as:
Para ver los procesos que usa java, podemos usar tuberas:
ps -e|grep java
Luego aparecer algo as:

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 8 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Para ver el proceso que usen el puerto 8888 y estn escuchando o estn en espera, etc
netstat -an|grep 8888
Luego se ver algo as:

3 ACCESO A BBDD
Para acceder a la BBDD entramos por MySQL Query Browser 1.2.17 el cual es de muy
fcil tratamiento. Segn entras ponemos:
Server Host: 172.18.40.15 Port: 3306

(Esto puede variar segn la maquina que nos den)

UserName: root
Password: Sotil01
Default Schema: avalon

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 9 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Tambin se puede acceder a MySQL Administrator desde aqu, esto es una aplicacin que
bsicamente se est usando para crear backup de los datos (conservando la estructura y
modelo de la BBDD)

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 10 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

La mecnica es la siguiente:
1.- Pinchamos en el botn New Project
2.- Se mueve el esquema avalon hacia la derecha (Backup Content)
3.- Se Pincha en Execute Backup Now
4.- Se pincha en sabe para guardar el fichero backup en alguna ruta
5.- Finalmente pinchar en ok

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 11 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 12 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

El proceso opuesto, es decir, restaurar la base datos es:


1.- Pinchar en Restore
2.- Pinchar en Open Backup File
3.- Elegir el fichero de backup y pinchar en Open
4.- Pinchar en Start Restore y finalmente en Close.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 13 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

3.1 LIMPIEZA DE LA BBDD DE AVALON


Para hacer el borrado de la bbdd de Avalon se ha utilizado el comando TRUNCATE.
Por ejemplo:
TRUNCATE tcontribuyente;
Al hacer truncate a todas las tablas de avalon (todas las tablas de auditora) se ha
quitado parte del cdigo de los bean, de la query hemos quitado:
TAUD_CUSO_AUDITADAS.ID_AUD>'1600'
en
JRBeanBorrado
y
and
TAUD_CUSO_AUDITADAS.ID_AUD>'2000' en JRBeanDiagnosticos
ya que
TAUD_CUSO_AUDITADAS.ID_AUD =0 y and tresolucion.ID_AUD>2000 ya que
tresolucion.ID_AUD =0
No se puede borrar las siguientes tablas porque son la estructura de la auditora
como las vistas y datos a auditar:

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 14 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

. taud_aplicacion: La aplicacin a auditar

. taud_cuso: Los casos de uso auditados


. taud_cuso_perfil: El nivel de permisos segn el caso de uso de la vista
. taud_database: Las tablas del modo BBDDCustom
. taud_dato_entidad: Los datos auditados por entidad
. taud_dato_entidad_controlado: Los datos sensibles
. taud_entidad: las entidades a auditar
. taud_full_audit_user: Usuarios a auditar
. taud_operaciones: Las operaciones a auditar: Consulta, Modificacin, Borrado
. taud_pantalla_cuso: pantalla a auditar, que en este caso es siebel
. taud_pantalla_parametro: Las vistas de Siebel que se auditan
. taud_perfil: Los perfiles de usuario
. taud_parametros_arq: Dato que identifica al usuario
. taud_parametro_entidad_auditad: todos los campos a auditar

TRAZAS IMPORTANTES
4.1 Merlin.log

Este log nos muestra las queries que ejecuta avalon para guardarlos en nuestra bbdd, este
empieza a ejecutarse en Lanzador.java de la ruta com.accenture.avalon.audittrail.Lanzador
y tiene una configuracin Custom. En este log se puede ver si se estn ejecutando las
queries necesarias
Aqu se muestra un fragmento:
2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - antes de enviar: cuerpo null
2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - antes de enviar: datosVisto null
2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - cerrando la conexion en
GuardadorBBDDCustom
2010-10-21
14:15:46,480
[ActiveMQ
----------------------------------------------------------

Session

Task]

DEBUG

com.accenture.avalon.audittrail.Lanzador

2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - --------------Datos a la Salida del
auditor (lanzador) ---------------2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - hay que procesar el mensaje?0

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 15 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - mensaje datos..{SWEVI=,


SWEView=Listado_de_PIA_CA,
SWEVLC=1-1DZ1L_Siebel+Public+Sector_37%7c1287622843%7c0_0_19227_000_L,
_sn=LpUEcwcuPm9AKjl9b05Gt7yocKuY7a2WcQikg8xCp.c_, SWECmd=GetViewLayout}
2010-10-21 14:15:46,480 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - mensaje getDatosVuelta {}
2010-10-21 14:15:46,481 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - msg.getCabecera().getDatos()->{SWEVI=, SWEView=Listado_de_PIA_CA, SWEVLC=1-1DZ1L_Siebel+Public+Sector_37%7c1287622843%7c0_0_19227_000_L,
_sn=LpUEcwcuPm9AKjl9b05Gt7yocKuY7a2WcQikg8xCp.c_, SWECmd=GetViewLayout}
2010-10-21
14:15:46,481
[ActiveMQ
msg.getCabecera().getIdOperacion-->-1

Session

Task]

DEBUG

com.accenture.avalon.audittrail.Lanzador

2010-10-21 14:15:46,481 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - -------------- FIN a la Salida del
auditor (lanzador)---------------2010-10-21 14:15:46,481 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - --------------------Fin del
Lanzador-----------------2010-10-21 14:15:48,300 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - --------------------Inicio del
Lanzador-----------------2010-10-21
14:15:48,300
[ActiveMQ
Session
msg.getCabecera().getDatosVuelta() {Status=Completed}

Task]

DEBUG

com.accenture.avalon.audittrail.Lanzador

2010-10-21 14:15:48,301 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - msg.getCabecera().getDatos()->{SWERowIds=,


SWEBID=-1,
SWESP=false,
SWEVI=,
SWERPC=1,
SWEActiveView=Vista_Activa_Listado_de_PIA_CA,
_sn=LpUEcwcuPm9AKjl9b05Gt7yocKuY7a2WcQikg8xCp.c_, SWEDIC=false, SWECmd=InvokeMethod, SWENeedContext=true,
SWEC=22, SWEP=, SWEReqRowId=0, SWEView=Listado_de_PIA_CA, SWETS=1287666816062, SWEMethod=NewQuery,
SWERowId=, SWEActiveApplet=IMSERSO Order List CA Applet, SWER=65535, SWEApplet=IMSERSO Order List CA Applet,
SWEField=s_2_1_23_0}
2010-10-21
14:15:48,301
[ActiveMQ
msg.getCabecera().getIdOperacion-->-1

Session

Task]

DEBUG

com.accenture.avalon.audittrail.Lanzador

2010-10-21 14:15:48,301 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - --------------Analizamos los datos
que nos llegan en crudo ---------------2010-10-21 14:15:48,301 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - usuario ADMINISTRADOR046
2010-10-21 14:15:48,301 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - SELECT count(*) as isSpy
FROM taud_full_audit_user where cod_usuario=?
2010-10-21 14:15:48,302 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - No puedo guardar datos.El
mensaje es nulo a la entrada de guardador.
2010-10-21 14:15:48,302 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - **************obteniendo en id de
la auditoria**********
2010-10-21 14:15:48,302 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - idAud0
2010-10-21 14:15:48,302 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - **************guardado de la
cabecera**********
2010-10-21
14:15:48,341
[ActiveMQ
Session
Task]
DEBUG
com.accenture.avalon.audittrail.Lanzador
com.mysql.jdbc.PreparedStatement@725c2eae: INSERT INTO taud_full_audit (ID_AUD,cabecera,cuerpo,consultados,FECHA)
VALUES(4284,'<com.accenture.avalon.message.Cabecera>\n
<datos>\n
<entry>\n
<string>SWERowId</string>\n
<string></string>\n
</entry>\n
</datos>\n
<idAplicacion>1</idAplicacion>\n
<usuario>ADMINISTRADOR046</usuario>\n
<terminal>172.18.40.31</terminal>\n
<idOperacion>-1</idOperacion>\n
<idCuso>-1</idCuso>\n
<uri>/avalon/bridge/epublicsector_esn/start.swe</uri>\n
<estado>0</estado>\n
<origen>1</origen>\n
<ttl>2147483647</ttl>\n
<tStampCreate>2010-10-21
14:15:48.112
GMT+01:00</tStampCreate>\n
<tStampInsert>2010-10-21
14:15:48.299
GMT+01:00</tStampInsert>\n
<uniqueId>1289084520126</uniqueId>\n</com.accenture.avalon.message.Cabecera>','<map>\n
<entry>\n
<string>SWERowId</string>\n
<string></string>\n </entry>\n</map>','<map>\n <entry>\n
<string>Status</string>\n
<string>Completed</string>\n </entry>\n</map>','2010-10-21 14:15:48')
2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - INSERT INTO taud_full_audit
(ID_AUD,cabecera,cuerpo,consultados,FECHA) VALUES(?,?,?,?,?)
2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - cerrando la conexion en
GuardadorBBDDCustom
2010-10-21
14:15:48,361
[ActiveMQ
Session
msg.getCabecera().getDatosVuelta() {Status=Completed}

Task]

DEBUG

com.accenture.avalon.audittrail.Lanzador

2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - msg.getCabecera().getDatos()->{SWERowIds=,


SWEBID=-1,
SWESP=false,
SWEVI=,
SWERPC=1,
SWEActiveView=Vista_Activa_Listado_de_PIA_CA,

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 16 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

_sn=LpUEcwcuPm9AKjl9b05Gt7yocKuY7a2WcQikg8xCp.c_, SWEDIC=false, SWECmd=InvokeMethod, SWENeedContext=true,


SWEC=22, SWEP=, SWEReqRowId=0, SWEView=Listado_de_PIA_CA, SWETS=1287666816062, SWEMethod=NewQuery,
SWERowId=, SWEActiveApplet=IMSERSO Order List CA Applet, SWER=65535, SWEApplet=IMSERSO Order List CA Applet,
SWEField=s_2_1_23_0}
2010-10-21
14:15:48,361
[ActiveMQ
msg.getCabecera().getIdOperacion-->-1

Session

Task]

DEBUG

com.accenture.avalon.audittrail.Lanzador

2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - --------------Fin los datos que nos
llegan en crudo ---------------2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - --------------Analizamos si llegan
los datos de Cabecera ---------------2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - Estado del menasaje
message.getCabecera().getEstado() 0:Lanzador.lanzar
2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - Merlin analiza el mensaje
2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - Auditar.recogerEntidades
{SWERowIds=,
SWEBID=-1,
SWESP=false,
SWEVI=,
SWERPC=1,
SWEActiveView=Vista_Activa_Listado_de_PIA_CA,
_sn=LpUEcwcuPm9AKjl9b05Gt7yocKuY7a2WcQikg8xCp.c_, SWEDIC=false, SWECmd=InvokeMethod, SWENeedContext=true,
SWEC=22, SWEP=, SWEReqRowId=0, SWEView=Listado_de_PIA_CA, SWETS=1287666816062, SWEMethod=NewQuery,
SWERowId=, SWEActiveApplet=IMSERSO Order List CA Applet, SWER=65535, SWEApplet=IMSERSO Order List CA Applet,
SWEField=s_2_1_23_0}
2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - ********Compruebo si la
aplicacion esta auditada*********
2010-10-21 14:15:48,361 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - SELECT COUNT(*) as
ISAUDITADA
FROM
TAUD_APLICACION
WHERE
TAUD_APLICACION.ID_APLICACION='1'
AND
TAUD_APLICACION.IBAJA_LOGICA=0
2010-10-21 14:15:48,362 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - ********Inicio prueba Recoger
entidades*********
2010-10-21 14:15:48,362 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - SELECT COUNT(*) AS
NUMPARAMETROS
FROM
TAUD_PANTALLA_CUSO,TAUD_PANTALLA_PARAMETRO,TAUD_APLICACION
WHERE
TAUD_APLICACION.ID_APLICACION='1'
AND
TAUD_PANTALLA_CUSO.IAUDITADO=1
AND
TAUD_PANTALLA_CUSO.NOM_PANTALLA
='/avalon/bridge/epublicsector_esn/start.swe'
AND
TAUD_PANTALLA_CUSO.ID_PANTALLA=TAUD_PANTALLA_PARAMETRO.ID_PANTALLA
AND
TAUD_PANTALLA_CUSO.IBAJA_LOGICA=0 AND TAUD_PANTALLA_PARAMETRO.IDX=1
2010-10-21 14:15:48,364 [ActiveMQ Session Task] DEBUG com.accenture.avalon.audittrail.Lanzador - la pantalla tiene ms de un caso
de uso parametrizado

4.2 Log.log
Este fichero te muestra si ha habido una correcta conexin con la BBDD, tambin te
muestra parmetros importantes
--------------------------------------------------------------------------------Starting DbConnectionBroker Version 1.0.13:
dbDriver = com.mysql.jdbc.Driver
dbServer = jdbc:mysql://172.18.40.15:3306/avalon
dbLogin = root
log file = /avalon/logs/log.log
minconnections = 4
maxconnections = 7
Total refresh interval = 0.1 days
logAppend = false
maxCheckoutSeconds = 60

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 17 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

debugLevel = 2
----------------------------------------Thu Oct 21 15:28:54 GMT+01:00 2010 Opening connection 0 com.mysql.jdbc.ConnectionImpl@77a3b644:
Thu Oct 21 15:28:58 GMT+01:00 2010 Opening connection 1 com.mysql.jdbc.ConnectionImpl@2973f648:
Thu Oct 21 15:29:05 GMT+01:00 2010 Opening connection 2 com.mysql.jdbc.ConnectionImpl@1427b649:
Thu Oct 21 15:29:09 GMT+01:00 2010 Opening connection 3 com.mysql.jdbc.ConnectionImpl@5bdc7652:
Thu Oct 21 17:53:12 GMT+01:00 2010 ***** Recycling connection 0:
Thu Oct 21 17:53:12 GMT+01:00 2010 Opening connection 0 com.mysql.jdbc.ConnectionImpl@40a6b63b:
Thu Oct 21 17:53:15 GMT+01:00 2010 ***** Recycling connection 1:
Thu Oct 21 17:53:15 GMT+01:00 2010 Opening connection 1 com.mysql.jdbc.ConnectionImpl@794df63b:
Thu Oct 21 17:53:19 GMT+01:00 2010 ***** Recycling connection 2:
Thu Oct 21 17:53:19 GMT+01:00 2010 Opening connection 2 com.mysql.jdbc.ConnectionImpl@6c9d763b:
Thu Oct 21 17:53:23 GMT+01:00 2010 ***** Recycling connection 3:
Thu Oct 21 17:53:23 GMT+01:00 2010 Opening connection 3 com.mysql.jdbc.ConnectionImpl@320e363b:

4.3 Publicacion.log
Este fichero te muestra la cola MQ que bsicamente coge el debug de DEBUG
com.accenture.avalon.webfilter.Config que guarda datos de configuracin que se guardan
en local.
2010-10-29 12:43:28,099 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - ContextPath: /avalon
2010-10-29 12:43:28,099 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - Method: POST
2010-10-29
12:43:28,099
[http-8888-Processor17]
/avalon/bridge/epublicsector_esn/start.swe

DEBUG

com.accenture.avalon.webfilter.Config

URi:

2010-10-29 12:43:28,100 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - Tiempo Identificacin: 0


2010-10-29 12:43:28,333 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - Tiempo Proceso: 234
2010-10-29 12:43:28,334 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - Tiempo peticin: 235
2010-10-29
12:43:28,334
[http-8888-Processor17]
DEBUG
LogManager:com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

com.accenture.avalon.webfilter.Config

2010-10-29 12:43:28,334 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , inicio


2010-10-29 12:43:28,334 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , estados:ENABLED,ACTIVADA
2010-10-29 12:43:28,334 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , Message creado
2010-10-29 12:43:28,334 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ insertarInfoAuditoria , init
2010-10-29 12:43:28,339 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ insertarInfoAuditoria , tiempo final de envio:0.0050
2010-10-29 12:43:28,339 [http-8888-Processor17] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , insertando mensaje
2010-10-29
12:45:28,336
[http-8888-Processor11]
DEBUG
===============================================================

com.accenture.avalon.webfilter.Config

2010-10-29 12:45:28,336 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - ContextPath: /avalon


2010-10-29 12:45:28,336 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - Method: POST

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 18 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

2010-10-29
12:45:28,336
[http-8888-Processor11]
/avalon/bridge/epublicsector_esn/start.swe

DEBUG

com.accenture.avalon.webfilter.Config

URi:

2010-10-29 12:45:28,336 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - Tiempo Identificacin: 0


2010-10-29 12:45:28,432 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - Tiempo Proceso: 96
2010-10-29 12:45:28,432 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - Tiempo peticin: 96
2010-10-29
12:45:28,433
[http-8888-Processor11]
DEBUG
LogManager:com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

com.accenture.avalon.webfilter.Config

2010-10-29 12:45:28,433 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , inicio


2010-10-29 12:45:28,433 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , estados:ENABLED,ACTIVADA
2010-10-29 12:45:28,433 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , Message creado
2010-10-29 12:45:28,433 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ insertarInfoAuditoria , init
2010-10-29 12:45:28,437 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ insertarInfoAuditoria , tiempo final de envio:0.0040
2010-10-29 12:45:28,437 [http-8888-Processor11] DEBUG com.accenture.avalon.webfilter.Config - QueueLogManagerActiveMQ registrar_Operacion , insertando mensaje

4.4 Consumo.log
Este fichero coge la informacin del mensaje como la cabecera y cuerpo. Bsicamente
coge los debug de com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
2010-10-29 12:43:28,528 [ActiveMQ
Usuario:ADMINISTRADOR024

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - idAplicacion:1


2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - idOperacion:-1
2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWERowId:
2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWERPC:1
2010-10-29 12:43:28,528
SWEService:Message Bar

[ActiveMQ

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO


_sn:GNao7l.oDYHNGuAlt9F44XdCYZ5oN1cLanlCkuy6VUw_

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:43:28,528 [ActiveMQ


SWEIPS:@0*0*1*0*0*3*0*5*SWEBS1*1

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:43:28,528 [ActiveMQ


SWEMethod:UpdatePrefMsg

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWEBS:1


2010-10-29 12:43:28,528
SWECmd:InvokeMethod

[ActiveMQ

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWEC:8


2010-10-29 12:43:28,528 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - Status:OK
2010-10-29 12:45:28,533 [ActiveMQ
ProcesaMessage::procesa(Message m)

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,535
<bck.Message>

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

[ActiveMQ

<cabecera>

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 19 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

<datos>
<entry>
<string>SWERowId</string>
<string></string>
</entry>
</datos>
<idAplicacion>1</idAplicacion>
<usuario>ADMINISTRADOR024</usuario>
<terminal>172.18.40.31</terminal>
<idOperacion>-1</idOperacion>
<idCuso>-1</idCuso>
<uri>/avalon/bridge/epublicsector_esn/start.swe</uri>
<estado>0</estado>
<origen>1</origen>
<ttl>2147483647</ttl>
<tStampCreate>2010-10-29 12:45:28.336 GMT+01:00</tStampCreate>
<uniqueId>1290159614496</uniqueId>
</cabecera>
<cuerpo>
<datos>
<entry>
<string>SWERPC</string>
<string>1</string>
</entry>
<entry>
<string>SWEService</string>
<string>Message Bar</string>
</entry>
<entry>
<string>_sn</string>
<string>GNao7l.oDYHNGuAlt9F44XdCYZ5oN1cLanlCkuy6VUw_</string>
</entry>
<entry>
<string>SWEIPS</string>
<string>@0*0*1*0*0*3*0*5*SWEBS1*1</string>
</entry>
<entry>
<string>SWEMethod</string>
<string>UpdatePrefMsg</string>
</entry>
<entry>
<string>SWEBS</string>

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 20 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

<string>1</string>
</entry>
<entry>
<string>SWECmd</string>
<string>InvokeMethod</string>
</entry>
<entry>
<string>SWEC</string>
<string>8</string>
</entry>
</datos>
<datosVuelta>
<entry>
<string>Status</string>
<string>OK</string>
</entry>
</datosVuelta>
</cuerpo>
</bck.Message>
2010-10-29 12:45:28,535 [ActiveMQ
Usuario:ADMINISTRADOR024

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,535 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - idAplicacion:1


2010-10-29 12:45:28,535 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - idOperacion:-1
2010-10-29 12:45:28,536 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWERowId:
2010-10-29 12:45:28,536 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWERPC:1
2010-10-29 12:45:28,536
SWEService:Message Bar

[ActiveMQ

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,536 [ActiveMQ Session Task] INFO


_sn:GNao7l.oDYHNGuAlt9F44XdCYZ5oN1cLanlCkuy6VUw_

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,536 [ActiveMQ


SWEIPS:@0*0*1*0*0*3*0*5*SWEBS1*1

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,536 [ActiveMQ


SWEMethod:UpdatePrefMsg

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,536 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWEBS:1


2010-10-29 12:45:28,536
SWECmd:InvokeMethod

[ActiveMQ

Session

Task]

INFO

com.accenture.avalon.webfilter.QueueLogManagerActiveMQ

2010-10-29 12:45:28,536 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - SWEC:8


2010-10-29 12:45:28,536 [ActiveMQ Session Task] INFO com.accenture.avalon.webfilter.QueueLogManagerActiveMQ - Status:OK

Todos estos ficheros de trazas de avalon se encuentran en la siguiente ruta


/avalon/logs

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 21 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

4.5 Catalina.out:
Son las trazas de Tomcat, puede tener un alto nivel de detalle y esta ubicado en
/avalon/apache-tomcat-5.5.28/logs. De momento tiene un nivel bajo de trazas debido a que
puede llegar a pesar mucho lo que dificultara el buen funcionamiento del servidor. Para
ello se ha implementado un Shell que est ubicado en /avalon/apache-tomcat-5.5.28/bin
para que se borre diariamente despus de haber hecho las trazas de todo un da para
liberar espacio del disco duro del servidor que es el siguiente:
/bin
export DAYS=1
export LOG_DATE=`date '+%G%m%d'`
if [ -z "$DAYS" ]
then
echo "Missing argument : You must define how many days (from the beginning" 1>&2
echo "

of today) logs you wish to keep" 1>&2

exit 1
fi

find ${LOGAREA} -type f -name 'catalina.out' -exec /avalon/apache-tomcat-5.5.28/bin {} {}.log.$LOG_DATE \;


find ${LOGAREA} -type f -name 'catalina.out' -exec /avalon/apache-tomcat-5.5.28/bin /dev/null {} \;
find ${LOGAREA} -type f -name 'catalina.out.*' -mtime +${DAYS} -exec /avalon/apache-tomcat-5.5.28/bin/rm -f {} \;
exit 0

Este es un fragmento del catalina.out:


Created MBeanServer with ID: 6e2b6f98:12baf027fe6:-8000:imas01:1
Oct 15, 2010 9:30:00 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the
java.library.path: /usr/java14/jre/bin:/usr/java14/jre/bin/classic:/usr/java14/jre/bin:/usr/lib
Oct 15, 2010 9:30:01 AM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8888
Oct 15, 2010 9:30:01 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2198 ms
Oct 15, 2010 9:30:01 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Oct 15, 2010 9:30:01 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.28
Oct 15, 2010 9:30:01 AM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
Oct 15, 2010 9:30:03 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive AvalonMQ.war
ActiveMQ Broker...started....
Oct 15, 2010 9:30:05 AM org.apache.catalina.startup.HostConfig deployWAR

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 22 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

INFO: Deploying web application archive avalon.war


sKeysKeysKeysKeysKeysKeysKeysKeysKeysKeyavalon.log4j.pattern
estoyencargarFicheroConfigestoyencargarFicheroConfig
is is is is is is is is is is is is is is is java.io.ByteArrayInputStream@65609b72
prop.loadprop.loadprop.loadprop.loadprop.loadprop.load
{avalon.log4j.filePath.merlin=/avalon/logs/merlin.log,
avalon.task.classname.publicacion.pendiente=com.accenture.avalon.task.ReenvioPublicacionPendiente,
avalon.log4j.logLevel=0,
avalon.clase_control_acceso=com.accenture.avalon.audittrail.acceso.EvaluarAcceso,
avalon.task.dateFormat.publicacion.pendiente=HH:mm,
avalon.jdbc.password=Sotil01,
avalon.clase_finegrained_data=com.accenture.avalon.audittrail.procesoGuia.ControlValorDatoEntidad;,
avalon.task.periodo.publicacion.pendiente=24,
avalon.clase_rawDataProcess=com.accenture.avalon.audittrail.procesoGuia.FullAudit;,
avalon.task.startTime.consumo.pendiente=17:10,
avalon.backup.filePath.consumo.pendiente=/avalon/backup_consumo/,
avalon.jdbc.logFileString=/avalon/logs/log.log,
avalon.backup.filePath.publicacion.pendiente=/avalon/backup_publicacion/,
avalon.task.dateFormat.consumo.pendiente=HH:mm,
avalon.jms.initialContextFactory=oracle.j2ee.rmi.RMIInitialContextFactory,
avalon.jdbc.minConns=4,
avalon.jdbc.url=jdbc:mysql://172.18.40.15:3306/avalon,
avalon.jms.connectionFactoryName=jms/PruebaConnFactory,
avalon.jms.securityPrincipal=test,
avalon.task.startTime.publicacion.pendiente=10:55,
avalon.backup.fileSize.consumo.pendiente=512,
avalon.task.periodo.consumo.pendiente=24, avalon.log4j.filePath.publicacion=/avalon/logs/publicacion.log, avalon.log4j.pattern=%d [%t]
%-5p
%c
%m%n,
avalon.jdbc.maxConns=7,
avalon.jdbc.maxConnTime=0.1,
avalon.jms.securityCredentials=test01,
avalon.jms.destinationName=jms/PruebaQueue,
avalon.log4j.filePath.consumo=/avalon/logs/consumo.log,
avalon.backup.fileSize.publicacion.pendiente=512,
avalon.jms.providerURL=tcp://localhost:61616,
avalon.jms.keepalive.time=5,
avalon.log4j.maxFileSize=10MB,
avalon.task.classname.consumo.pendiente=com.accenture.avalon.task.ReenvioConsumoPendiente,
avalon.datasourceName=jdbc/auditords,
avalon.guardarbbdd.clase=com.accenture.avalon.audittrail.db.GuardadorBBDDCustom,
avalon.log4j.maxBackupIndex=25,
avalon.log_manager.classname=com.accenture.avalon.webfilter.QueueLogManagerActiveMQ,
avalon.jdbc.usuario=root, avalon.jdbc.driver=com.mysql.jdbc.Driver}
eeeeeeeeeeeeeeeeeeeeeeeeeeeeejava.util.Hashtable$Enumerator@6c761b72
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.filePath.merlin
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)/avalon/logs/merlin.log
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.classname.publicacion.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.task.ReenvioP
ublicacionPendiente
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.logLevel
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)0
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.clase_control_acceso
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.audittrail.acces
o.EvaluarAcceso
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.dateFormat.publicacion.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)HH:mm
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.password
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)Sotil01
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.clase_finegrained_data
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.audittrail.proce
soGuia.ControlValorDatoEntidad;
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.periodo.publicacion.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)24
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.clase_rawDataProcess
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.audittrail.proce
soGuia.FullAudit;
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.startTime.consumo.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)17:10
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.backup.filePath.consumo.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)/avalon/backup_consumo/

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 23 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.logFileString
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)/avalon/logs/log.log
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.backup.filePath.publicacion.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)/avalon/backup_publicacion/
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.dateFormat.consumo.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)HH:mm
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.initialContextFactory
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)oracle.j2ee.rmi.RMIInitialContextFacto
ry
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.minConns
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)4
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.url
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)jdbc:mysql://172.18.40.15:3306/avalo
n
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.connectionFactoryName
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)jms/PruebaConnFactory
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.securityPrincipal
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)test
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.startTime.publicacion.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)10:55
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.backup.fileSize.consumo.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)512
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.periodo.consumo.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)24
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.filePath.publicacion
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)/avalon/logs/publicacion.log
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.pattern
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)%d [%t] %-5p %c - %m%n
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.maxConns
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)7
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.maxConnTime
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)0.1
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.securityCredentials
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)test01
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.destinationName
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)jms/PruebaQueue
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.filePath.consumo
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)/avalon/logs/consumo.log
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.backup.fileSize.publicacion.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)512
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.providerURL
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)tcp://localhost:61616
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jms.keepalive.time

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 24 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)5
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.maxFileSize
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)10MB
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.task.classname.consumo.pendiente
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.task.ReenvioC
onsumoPendiente
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.datasourceName
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)jdbc/auditords
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.guardarbbdd.clase
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.audittrail.db.Gu
ardadorBBDDCustom
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log4j.maxBackupIndex
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)25
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.log_manager.classname
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.accenture.avalon.webfilter.Queu
eLogManagerActiveMQ
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.usuario
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)root
strKeystrKeystrKeystrKeystrKeystrKeystrKeyavalon.jdbc.driver
prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)prop.getProperty(strKey)com.mysql.jdbc.Driver
strValuestrValuestrValuestrValuestrValuestrValue%d [%t] %-5p %c - %m%n
sKeysKeysKeysKeysKeysKeysKeysKeysKeysKeyavalon.log4j.filePath.publicacion
strValuestrValuestrValuestrValuestrValuestrValue/avalon/logs/publicacion.log
sKeysKeysKeysKeysKeysKeysKeysKeysKeysKeyavalon.log4j.logLevel
strValuestrValuestrValuestrValuestrValuestrValue0
sKeysKeysKeysKeysKeysKeysKeysKeysKeysKeyavalon.log4j.maxFileSize
strValuestrValuestrValuestrValuestrValuestrValue10MB
sKeysKeysKeysKeysKeysKeysKeysKeysKeysKeyavalon.log4j.maxBackupIndex
strValuestrValuestrValuestrValuestrValuestrValue25
0

[main] DEBUG com.accenture.avalon.webfilter.Config - Config - inicializarSistemaLog - Sistema de Log inicializado

loggerloggerloggerloggerloggerloggerloggerloggerorg.apache.log4j.Logger@6b71db72
1

Es recomendable que estos ficheros se pase a local desde el programa cliente filezilla (u
otro similar) para su anlisis.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 25 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

5 MODIFICACIONES EN AVALON
Sobre todo se ha puesto trazas para ver posibles errores que se ha ido apareciendo. Para
hacer una configuracin Custom hemos cambiado la clase de GuardadorBBDD a
GuardadorBBDDCustom que bsicamente difieren por las tablas que usan, mientras la
primera clase usa una sola tabla para almacenar todo, la segunda usa una tabla para cada
entidad. Por lo que todas las clases que usaban GuardadorBBDD ahora usan
GuardadorBBDDCustom
Hay clases que ahora mismo no se usa como:
-

GuardadorMensajesErroneos.java:
taud_mensajes_erroneos

porque

no

hay

nada

en

Desde luego todos los que corresponde al proyecto GUIA que son:
-

FullAuditFilter

IProcessFineGrainedData

CheckSession

GenericParameterParser

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 26 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

GenericResponseParser

GenericSessionParser

JsCodeInyection

MiniGuiaResponseParser

MiniGuiaSessionParser

ProcesaMsg

ProcesaMsgAlways

Para no tocar los cdigos de las clases se ha creado ficheros properties o xml de
configuracin.
Se ha cambiado del fichero avalon.properties
#####################JDBC PROPERTIES
avalon.jdbc.driver=com.mysql.jdbc.Driver
avalon.jdbc.url=jdbc:mysql://172.18.40.15:3306/avalon
avalon.jdbc.usuario=root
avalon.jdbc.password=Sotil01
avalon.jdbc.minConns=4
avalon.jdbc.maxConns=7
avalon.jdbc.logFileString=/avalon/logs/log.log
avalon.jdbc.maxConnTime=0.1
avalon.guardarbbdd.clase=com.accenture.avalon.audittrail.db.GuardadorBBDDCustom
avalon.log4j.filePath.merlin=/avalon/logs/merlin.log

En activemq.xml se ha quitado la etapa de persistenceAdapter ya que estaba pillado


y no dejaba que se lea la etapa de la configuracin de mysql del fichero
avalon.properties. Entonces el activemq.xml ha quedado as:
<!-- START SNIPPET: xbean -->
<beans xmlns="http://activemq.org/config/1.0">
<broker useJmx="true" persistent="false" >
<transportConnectors>
<transportConnector uri="tcp://localhost:61616?wireFormat.maxInactivityDuration=-1"/>
</transportConnectors>
</broker>
</beans>
<!-- END SNIPPET: xbean -->

La explicacin es la siguiente:

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 27 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Cuando el cdigo de pruebas unitarias con JMS normalmente quiere evitar los
overhead del funcionamiento de procesos separados; adems si se
quiere aumentar el tiempo de startup lo ms rpido posible ya que las pruebas a
menudo tienden a correr en la unit test y desea una respuesta inmediata.
Tambin
la
persistencia
puede
a menudo causar problemas, es decir pruebas previas pueden afectar a las futuras por
lo
que
se
necesitan
la
purga
de
las
colas
en el inicio (startup).
As que cuando se haga las pruebas unitarias de
siguiente:

JMS se recomienda lo

- Usar un embedded brker (agente integrado) para evitar un proceso agente


independiente requerido.
- Deshabilitar el brker persistence (agente persistente) para que no sea necesario
la purga de cola de antes y despus de las pruebas.
- A menudo es ms sencillo y rpido de usar slo el cdigo de Java para crear el
brker a travs de un archivo de configuracin XML utilizando Spring, etc.
Usted puede hacer todo esto con el siguiente cdigo de Java para crear
su ConnectionFactory JMS, que tambin se crea automticamente un embedded
brker
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");

O sera ms explcito crear brker primero con el siguiente cdigo de Java


BrokerService broker = new BrokerService();
broker.setPersistent(false);
broker.start();

O se puede utilizar el apoyo de Spring


Entonces se ha quitado lo que est escrito en rojo:
<!-- START SNIPPET: xbean -->
<beans xmlns="http://activemq.org/config/1.0">
<broker useJmx="true" persistent="false">
<persistenceAdapter>
<journaledJDBC journalLogFiles="5" dataDirectory="../data"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector uri="tcp://localhost:61616"/>
</transportConnectors>
</broker>
</beans>

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 28 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

<!-- END SNIPPET: xbean -->

En el mtodo getParameter de la clase SiebelParameterParser se ha introducido


una instancia de la clase creada para que en la traza parseada cambie los key
SWEView y SWEActiveView por los nombres o alias correspondientes, los cuales
son ms descriptivos, por ejemplo:

Antes: SWEView: IMSERSO Solicitudes Provincia List View


Ahora: Listado_de_Solicitudes_Provincia
Antes SWEActiveView
Ahora: SWEActiveView: Vista_Activa_Listado_de_Solicitudes_Provincia
Con lo que en AvalonBackoffice se puede configurar mejor la auditora
Lo mismo pasa con el mtodo parameterParser de la clase SiebelResponseParser pero
con la diferencia que estos dan alias a los campos. Por ejemplo (De la misma vista
anterior):
Antes: s_2_1_20_0
Ahora: Nombre
Antes: s_2_1_23_0
Ahora: IdExpediente
En donde ms se ha cambiado es en los informes pdf y en sus correspondientes beans
porque se ha tenido que modificar el criterio de bsqueda segn el informe. Tambin se ha
cambiado las queries debido a su gran volumen de datos por lo que se tiene que hacer
filtros en estas.
-

En IJRBean
pool = new DbConnectionBroker(
"com.mysql.jdbc.Driver",
"jdbc:mysql://172.18.40.15:3306/avalon",
"root",
"Sotil01",

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 29 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

En los dems beans se ha cambiado bsicamente las queries. Por ejemplo: En


JRBeanBorrado

String
query="select
distinct
TAUD_CUSO_AUDITADAS.ID_AUD,TAUD_CUSO.ID_CUSO,TAUD_CUSO_AUDITADAS.FECHA_EJECUCION,
" +"TAUD_CUSO_AUDITADAS.COD_USUARIO,TAUD_ENTIDAD.DESCRIPCION as ENTIDAD," +
"TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD as ID_DATO_ENTIDAD," +
"TAUD_DATO_ENTIDAD.DESCRIPCION
as
DATO,tresolucion.VALOR_DATO
as
VALOR_DATO,tvisualizado.VALOR_DATO
as
"
+"VALOR_DATITO
from
TAUD_CUSO_AUDITADAS,tresolucion,TAUD_DATO_ENTIDAD,tvisualizado,TAUD_ENTIDAD,TAUD_
CUSO"
+"
where
TAUD_CUSO_AUDITADAS.ID_AUD=tvisualizado.ID_AUD"
+"
and
TAUD_ENTIDAD.ID_ENTIDAD=
TAUD_DATO_ENTIDAD.ID_ENTIDAD
and
TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO" +" and ((TAUD_CUSO.ID_CUSO=16) or
(TAUD_CUSO.ID_CUSO=5)) " +" and tresolucion.VALOR_DATO <> '' " +" and
tvisualizado.VALOR_DATO<> '' and tvisualizado.VALOR_DATO <> 'Status=Continue;'"
+" group by TAUD_CUSO_AUDITADAS.FECHA_EJECUCION";

En donde se recopila los casos de uso: Borrado Lgico y Fsico de Resoluciones


Como ha cambiado el id_dato_entidad debido a que hay ms campos y entidades
entonces:
//Esto corresponde a los datos de entrada, es decir los campos que el usuario
//usa como campos de entrada en la bsqueda
switch (id_dato_entidad){
case 0:{
borrado.setVisto_vuelta(rs.getString("VALOR_DATITO"));
break;
}
case 160:{
borrado.setVisto_nombre(rs.getString("VALOR_DATO"));

break;
}
case 151:{
borrado.setVisto_apellido1(rs.getString("VALOR_DATO"));
break;
}

Para ello se ha tenido que cambiar los mtodos set y get de la clase, por ejemplo:

public String getVisto_fresolucion() {


return visto_fresolucion;
}

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 30 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

public void setVisto_fresolucion(String visto_fresolucion) {


this.visto_fresolucion = visto_fresolucion;
}

Tambin en el mtodo getvisto_vuelta () se ha acondicionado el cdigo para que lea el


alias de los campos de salida, por lo que:
public String getVisto_vuelta() {
if (visto_vuelta==null) return "";
String[] pares=visto_vuelta.split(";");
Arrays.sort(pares);
ArrayList al=new ArrayList();
LinkedHashMap hm=null;
int old_id=-1;
int primero_visto=0;

for (int k=0;k<pares.length;k++){


String[] par=pares[k].split("=");
String
fila1=par[0].substring(0,par[0].indexOf('_')
+1).replaceAll("R","").replaceAll("_","").replaceAll("","0");

int fila2=Integer.parseInt(fila1);
// fila de la tabla
int fila= (fila2)/10;

//id2 corresponde a cada columna


String id2= par[0].substring(par[0].indexOf('_')+1);
//par1 es el (clave, valor)
String par1= ((par.length==2)?par[1]:"");

if (fila <(primero_visto-1))continue;//descartados
if (old_id!=fila){
old_id=fila;
if (hm!=null) al.add(hm);
hm=new LinkedHashMap();

}
//Esto corresponde a los datos de salida, es decir los campos de las columnas
if(id2.equalsIgnoreCase("Apellido1")){
hm.put("Apellido1", par1);
}
if(id2.equalsIgnoreCase("Apellido2")){
hm.put("Apellido2", par1);

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 31 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

}
if(id2.equalsIgnoreCase("TipoIdentificacion")){
hm.put("Identif.", par1);
}

Lo mismo pasa con las clases JRBeanDatosSocioEconomicos


String
query="select
distinct
TAUD_CUSO_AUDITADAS.ID_AUD,TAUD_CUSO.ID_CUSO,TAUD_CUSO_AUDITADAS.FECHA_EJECUCION,
"
+"TAUD_CUSO_AUDITADAS.COD_USUARIO,TAUD_ENTIDAD.DESCRIPCION
as
ENTIDAD,"
+"TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD
as
ID_DATO_ENTIDAD,"
+"TAUD_DATO_ENTIDAD.DESCRIPCION
as
DATO,
tpia.VALOR_DATO
as
VALOR_DATO,
tvisualizado.VALOR_DATO
as
VALOR_DATITO"
+"
from
TAUD_CUSO_AUDITADAS,
tvisualizado,TAUD_DATO_ENTIDAD,"
+"TAUD_ENTIDAD,TAUD_CUSO,tpia
where
TAUD_CUSO_AUDITADAS.ID_AUD=tvisualizado.ID_AUD
"
+"
and
TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD=tvisualizado.ID_DATO_ENTIDAD"+"
and
tvisualizado.VALOR_DATO <> 'Status=Completed;'"+" and tvisualizado.VALOR_DATO <>
'Status=Continue;'" +" and tvisualizado.VALOR_DATO <> ''" +" and tpia.VALOR_DATO
<> ''" +" and TAUD_ENTIDAD.ID_ENTIDAD= TAUD_DATO_ENTIDAD.ID_ENTIDAD " + "
and
TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO" +" and ((TAUD_CUSO.ID_CUSO=12) or
(TAUD_CUSO.ID_CUSO=14) or (TAUD_CUSO.ID_CUSO=15) or (TAUD_CUSO.ID_CUSO=19)" +"
or (TAUD_CUSO.ID_CUSO=20) or (TAUD_CUSO.ID_CUSO=21) or (TAUD_CUSO.ID_CUSO=1))
" +" group by FECHA_EJECUCION";

Que bsicamente hace una bsqueda de la operativa de PIA, que son: PIA Renta, PIA
Patrimonio, PIA Prestaciones Pblicas, PIA Renta Interoperabilidad, PIA Patrimonio
Interoperabilidad, PIA Prestaciones Pblicas Interoperabilidad y PIA CA

JRBeanDiagnosticos:
String
query="select
distinct
TAUD_CUSO_AUDITADAS.ID_AUD,TAUD_CUSO.ID_CUSO,TAUD_CUSO_AUDITADAS.FECHA_EJECUCION,
"
+"TAUD_CUSO_AUDITADAS.COD_USUARIO,TAUD_ENTIDAD.DESCRIPCION
as
ENTIDAD,"
+"TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD
as
ID_DATO_ENTIDAD,"
+"TAUD_DATO_ENTIDAD.DESCRIPCION
as
DATO,tdiagnostico.VALOR_DATO
as VALOR_DATO,tvisualizado.VALOR_DATO"
+"
as
VALOR_DATITO"
+"
from
TAUD_CUSO_AUDITADAS,tvisualizado,TAUD_DATO_ENTIDAD,tdiagnostico,"
+"
TAUD_ENTIDAD,TAUD_CUSO where TAUD_CUSO_AUDITADAS.ID_AUD=tvisualizado.ID_AUD"+ "
and
TAUD_ENTIDAD.ID_ENTIDAD=
TAUD_DATO_ENTIDAD.ID_ENTIDAD
"
+"
and
TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO" +" and tvisualizado.VALOR_DATO <>
'Status=Completed;'"+" and ((TAUD_CUSO.ID_CUSO=13) or (TAUD_CUSO.ID_CUSO=17))" +"
and tvisualizado.VALOR_DATO <> 'Status=Continue;' and tdiagnostico.VALOR_DATO <>
''" + "
and
tvisualizado.VALOR_DATO
<>
''"
+"
group
by
TAUD_CUSO_AUDITADAS.FECHA_EJECUCION";

Esto es un anlisis de los datos de diagnstico, especficamente de los casos de uso:

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 32 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Expediente Dictamen Diagnstico y Solicitud Dictamen Diagnstico


Con JRBeanFirma:
String
query="select
distinct
TAUD_CUSO_AUDITADAS.ID_AUD,
TAUD_CUSO.ID_CUSO,TAUD_CUSO_AUDITADAS.FECHA_EJECUCION,"+"TAUD_CUSO_AUDITADAS.COD_
USUARIO,TAUD_ENTIDAD.DESCRIPCION as ENTIDAD,TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD"+"
as ID_DATO_ENTIDAD,TAUD_DATO_ENTIDAD.DESCRIPCION as DATO,tresolucion.VALOR_DATO"+
"
as
VALOR_DATO,tvisualizado.VALOR_DATO
as
VALOR_DATITO
from
TAUD_CUSO_AUDITADAS,tresolucion,"+"
TAUD_DATO_ENTIDAD,tvisualizado,TAUD_ENTIDAD,TAUD_CUSO"+"
where
TAUD_CUSO_AUDITADAS.ID_AUD=tresolucion.ID_AUD"+"
and
TAUD_ENTIDAD.ID_ENTIDAD=
TAUD_DATO_ENTIDAD.ID_ENTIDAD"+"
and
TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO"+"
and
tvisualizado.ID_AUD=tresolucion.ID_AUD"
+"
and
((TAUD_CUSO.ID_CUSO=8)
or
(TAUD_CUSO.ID_CUSO=24) or (TAUD_CUSO.ID_CUSO=22) or (TAUD_CUSO.ID_CUSO=23)" +
"
or
(TAUD_CUSO.ID_CUSO=18))"
+
"
and
tvisualizado.VALOR_DATO
<>
'Status=Continue;'
and
tvisualizado.VALOR_DATO<>
''"+
"
and
TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD<'13'
and
(TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD>'9')
"
+"
or
(TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD='25'))
"+"
group
by
TAUD_CUSO_AUDITADAS.FECHA_EJECUCION;";

Se recopila los casos de uso: Firma de Resoluciones, Lista Solicitudes Resoluciones, Lista
Revisiones Resoluciones, Lista PIA Resoluciones y Modificar Estado de Resolucin.
Con JRBeanOperaciones se ha tenido que igualar los usuarios en letra minscula con las
de letra mayscula, por ejemplo: ADMINISTRADOR046 con administrador046 porque los
estaba clasificando por separado cuando son exactamente iguales, por lo que se usa
UPPER(TAUD_CUSO_AUDITADAS.COD_USUARIO) y tambin se ha ordenado en orden
alfabtico a los casos de uso:
String
query="select
UPPER(TAUD_CUSO_AUDITADAS.COD_USUARIO)
AS
COD_USUARIO,TAUD_CUSO.DESCRIPCION_CUSO,TAUD_CUSO.NOMBRE_CUSO,TAUD_CUSO.ID_CUSO,CO
UNT(*)
as
total"
+"
from
TAUD_CUSO,TAUD_CUSO_AUDITADAS
where
TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO
"
+"GROUP
BY
TAUD_CUSO.DESCRIPCION_CUSO,"+"TAUD_CUSO_AUDITADAS.COD_USUARIO,TAUD_CUSO.NOMBRE_CU
SO,TAUD_CUSO.ID_CUSO" +" order by 1,2";

En JRBeanDatosSensibles bsicamente se ha cambiado el campo private String


solicitado por private String id_entidad_auditada debido a que el campo solicitado slo
se usaba en la configuracin plug and play y ahora estamos usando la configuracin
Custom por lo que tambin ha cambiado la query
String
query=select
distinct
TAUD_CUSO_AUDITADAS.ID_AUD,TAUD_CUSO_AUDITADAS.FECHA_EJECUCION,"
+"TAUD_CUSO_AUDITADAS.COD_USUARIO,TAUD_ENTIDAD.DESCRIPCION
as
ENTIDAD,"
+"TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD
as
ID_DATO_ENTIDAD,"
+"TAUD_DATO_ENTIDAD.DESCRIPCION as DATO, tvisualizado.VALOR_DATO," +"t.VALOR_DATO
as dato_controlado," +//"t.SOLICITADO as solicitado"+ "t.ID_ENTIDAD_AUDITADA
as
ID_ENTIDAD_AUDITADA"+"from
TAUD_CUSO_AUDITADAS,tvisualizado,TAUD_DATO_ENTIDAD,TAUD_CUSO_DATOS_CONTROLDADO,"

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 33 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

+"
TAUD_ENTIDAD,TAUD_CUSO,TAUD_CUSO_DATOS_CONTROLDADO_DE
t
"
TAUD_CUSO_AUDITADAS.ID_AUD=tvisualizado.ID_AUD"+"and
TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD=tvisualizado.ID_DATO_ENTIDAD"+"and
TAUD_ENTIDAD.ID_ENTIDAD=TAUD_DATO_ENTIDAD.ID_ENTIDAD"+"and
TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO"+"and
t.ID_AUD=TAUD_CUSO_AUDITADAS.ID_AUD"+"and
TAUD_CUSO_DATOS_CONTROLDADO.ID_AUD=TAUD_CUSO_AUDITADAS.ID_AUD"
+"
TAUD_CUSO_AUDITADAS.ID_AUD;

+"

order

where

by

Aqu se muestra los datos sensibles que el usuario consulta, modifica o borra. De
momento tenemos que cada vez que el usuario hace una consulta de expediente cuyo
nmero de expediente es scdswsf o cuando en las vistas donde haya el campo de
Estado de Resolucin y tenga valor firmada se va a registrar en este informe.
En cuanto a las pruebas, se est grabando datos, es decir que todos los datos puestos
como parmetros con su respectivo nombre se va a guardar en las tablas de
almacenamiento de datos, que debera ser en las tablas de cada entidad, es decir en las
tablas texpediente, tresolucion, tPia, etc., ya que se ha optado por el modelo de base de
datos Custom. Por lo que se ha cambiado en el fichero avalon.properties, que es el fichero
que guarda toda la configuracin, la variable avalon.guardadorbbdd.clave por lo que no
se va a usar el valor de GuardadorBBDDCustom envs de GuardadorBBDD.
De momento se ha probado con consulta de expedientes, estaba saliendo error debido a
que en el Lanzador.java estaba mal configurado, es decir que estaba seleccionando en la
tablas sin tomar en cuenta la baja lgica, es decir este campo debe estar a 0 cuando no
est de baja, lo que es lo mismo se debe de tomar en cuenta solo los campos que no
estn dados de baja.
Adems de las tablas de auditora se ha creado las tablas correspondientes a cada
entidad, es decir, expediente, resolucin, etc.
Estas tablas tiene los mismos campos y van a servir sobre todo para ver la entrada cuyo
identificador y valor son los campos ID_DATO_ENTIDAD y VALOR, respectivamente. Los
datos de salida van a una tabla nica que es tvisualizado. Por lo que la base de datos que
se usa es tipo Custom, es decir, tablas distribuidas.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 34 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Se est haciendo la auditora de la consulta, modificacin y borrado de la operativa.

Para cada entidad se ha puesto los campos correspondientes a auditar

Todas
las
pruebas
se
basan
en
la
pantalla
de
Siebel
que
es
/avalon/bridge/epublicsector_esn/start.swe que es un puente con la aplicacin del saad

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 35 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Aqu es donde se define los campos auditados para cada Parmetro y sus valores. Estos
valores al ser regulares, admiten ms de un valor por lo que por ejemplo, para el
parmetro SWECmd se puede tener los siguientes valores InvokeMethod GotoNextSet
GetViewLayout BatchCanInvoke, etc. Esto es porque no solo el usuario puede hacer uso
del primer pantallazo sino tambin puede hacer uso de la paginacin y otras operaciones.

Aqu se definen los parmetros a auditar, aqu se puede mostrar los cambios realizados
para que estos parmetros sean ms descriptivos. Este cambio consiste a que ponemos
un alias usando un fichero properties al que se llama a travs de la implementacin de una
clase java justo antes del parseo de la trama. Por ejemplo en la consulta de expedientes,
en
el
fichero
properties
hay
una
fila
IMSERSOExpedientesCAListView.s_2_1_16_0=Apellido1, por lo que en Avalon solo se
ingresa su alias en el parmetro URL.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 36 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

6 RECOMENDACIONES (para futuros evolutivos):

Es mejor usar StringBuffer que String para concatenar cadenas: La concatenacin


de objetos String impacta en el rendimiento por la creacin de nuevos objetos
temporales, que pueden llegar a ocupar mucha memoria. Los String son objetos
inmutables, una vez creados no se puede modificar su contenido, haciendo
necesaria la creacin de un nuevo String con cada concatenacin. Para modificar
de forma repetida un String debe utilizarse un StringBuffer y luego convertirlo a
String. Claro que en algunos casos no es mejor usar el buffer porque se puede dar
el caso que algn dato se pierda al pasar al buffer por alguna razn de desconexin
por lo que por ejemplo en una transaccin financiera no sera pertinente su uso, ya
que sera fatal la perdida de datos debido alguna desconexin.

Se debe tener mucho cuidado con usar los mtodos synchronized (sobretodo
usados para los ficheros de trazas) debido a que dentro de estos se ponen procesos
que siempre se ejecutan por lo que se antepone condiciones para que pueda usar
los hilos adecuadamente. Por ejemplo:

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 37 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

public

synchronized void guardar(Transaccion trans,Message msg) throws Exception {


logger = Config.getLoggerMerlin(GuardadorBBDD.class);
PreparedStatement
pstmt=null;

int idAud=0;
try {
if (msg==null){
if ((logger!=null) && (logger.isDebugEnabled())) logger.debug("No puedo guardar datos.El
mensaje es nulo a la entrada de guardador.");
}
if ((logger!=null) && (logger.isDebugEnabled())) logger.debug ("**************obteniendo en
id de la auditoria**********");
idAud=trans.getIdAud();//MaxIdManager.getNextIdAud();

Se recomienda tener un sistema persistente para que en el caso se caiga la base de


datos se pueda tirar de la configuracin local, para ello se implementa ficheros de
consumidores - publicadores. Los objetos almacenados en la sesin deben ser
serializables: Esto permite compartir la sesin entre servidores de aplicaciones
mediante sesiones persistentes, haciendo posible que ante la cada de un servidor otro
atienda sus peticiones.

Midiendo el rendimiento de StringBuffer y StringBuilder


Pero, qu tan ms rpido es un StringBuilder? A modo de ejemplo, vamos a
concatenar un milln de String ("zim") a un StringBuilder y a un StringBuffer, y
compararemos los tiempos. El cdigo que ejecutaremos ser el siguiente:
StringBuffer sbuffer = new StringBuffer();
inicio = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
sbuffer.append("zim");
}
fin = System.currentTimeMillis();
System.out.println("Tiempo del StringBuffer: " + (fin-inicio));
StringBuilder sbuilder = new StringBuilder();
inicio = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
sbuilder.append("zim");
}
fin = System.currentTimeMillis();
System.out.println("Tiempo del StringBuilder: " + (fin-inicio));

Con varias ejecuciones, los tiempos son constantemente menores para el


StringBuilder:
StringBuffer: 93 milisegundos en concatenar un milln de String
StringBuilder: 47 milisegundos en concatenar un milln de String
Es decir, en la mayora de los casos, StringBuilder puede resultar un 50% ms
rpido para concatenar String.
AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 38 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Y el operador de suma?
La misma prueba con el operador de suma se lleva una eternidad, ya que la
creacin constante de nuevos objetos hace que la JVM tenga que empezar a limpiar
continuamente el Heap. A modo de referencia, concatenar tan slo 100.000 String
con el operador de suma se demora 99812 milisegundos, por lo que su rendimiento
no tiene comparacin.
En la amplia mayora de los casos es recomendable utilizar la clase StringBuilder
para concatenar cadenas de caracteres. La clase StringBuilder tiene el mismo API
que StringBuffer, por lo que reemplazar cdigo que usa StringBuffer es
relativamente sencillo.
La nica salvedad sera si la concatenacin ocurre en un entorno multihilos, donde
diferentes hilos van modificando la misma concatenacin. De todas formas, en la
mayora de los casos la concatenacin ocurre en variables locales dentro de
mtodos, por lo que el uso de StringBuilder sigue siendo la opcin recomendada.

Es mejor usar pool de conexiones, con esto cada vez que un nodo se conecta solo
cuando necesite una conexin de forma repetida y en periodos cortos, y una vez
que haga sus queries hagan commit la conexin se cerrar liberando as de
conexiones perennes innecesarias y as se reutiliza los objetos y caches y se evita
la creacin excesiva de objetos. Cabe decir tambin que se prefiere el uso de
PrepareStatement frente al Statement porque permite realizar el paso de
preparacin (prepareStatement) una nica vez y realizar la ejecucin ( execute*)
muchas veces. Se consideran sentencias estticas aquellas cuya estructura es fija y
de una ejecucin a otra slo cambia el valor de los parmetros. Cuando una
sentencia esttica se utilice varias veces debe emplearse PreparedStatement en
vez de Statement.

Por ejemplo:
En vez de utilizar:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(SELECT COL1,
COL2 WHERE COL3 = VALOR1);

Se debe utilizar:
PreparedStatement pstmt = conn.prepareStatement(SELECT COL1,
COL2 WHERE COL3 = ?);
pstm.setString(1, VALOR1);
ResultSet rs = pstmt.executeQuery();

Los PreparedStatement deben definirse con la parte fija de la sentencia, sustituyendo


las variables por interrogantes.
Al ejecutar una sentencia en la base de datos tienen lugar dos procesos:
o Preparacin: consiste en interpretar el texto de la sentencia y convertirlo en
algo que la base de datos pueda ejecutar.
AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 39 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Ejecucin: se lleva a cabo la sentencia solicitada


Los PreparedStatement estn asociados a una conexin a base de datos por lo que
son tiles cuando para una conexin ejecutamos de forma repetida una misma
sentencia.
En las aplicaciones web cada vez que se necesita una conexin a base de datos se
recupera de un pool de conexiones por lo que puede parecer que no es interesante
utilizar PreparedStatements, pero no es as. WebSphere Application Server tiene para
cada pool de conexiones una cach de PreparedStatement utilizadas y que son vlidas
porque las conexiones del pool se mantienen abiertas. Una aplicacin web que
necesite acceder a base de datos recuperar una conexin al pool y cuando pida
preparar una sentencia se buscar primero si existe en la cach. Si la sentencia ya est
preparada se puede utilizar directamente. Si no est en la cach se prepara y se
almacena para reutilizarla futuras ejecuciones.
Por ejemplo, para recuperar el nombre de un usuario cuando hace logon a la
aplicacin:
Connection con = PoolConexiones.getConexion(MiBaseDatos);
PreparedStatement pstm = con.prepareStatement(SELECT NOMBRE APELL1 APELL2 FROM CLIENTES WHERE IDCLIENTE
= ?);
pstm.setInt(1, idCliente);
pstm.executeQuery();

Parece que con prepareStatement() se prepara la sentencia en cada ejecucin, pero


no es as. En la primer peticin se prepara la sentencia y se almacena luego en la
cach. En las siguientes ejecuciones se reutiliza la sentencia de la cach.

Es muy recomendable seguir alguna gua de estilo. No importa cul, facilitando el


trabajo,
y
la
mantenibilidad
del
cdigo.
Por
ejemplo
http://java.sun.com/docs/codeconv/index.html.

Utilizar el container de la Standar Java Library. Utilizar ArrayList para


secuencias, HashSet para conjuntos, HashMap para arrays asociativos, y
LinkedList tanto para pilas (mejor que Stack, aunque haya que crear un
adaptador para darle la interface de Stack) como para colas. Luego se
recomienda utilizar (hacer upcast de) ArrayList como List, HashSet como Set
y HashMap como Map, por si es necesario cambiar de implementacin en un futuro.
Adems la clase Arrays proporciona algoritmos para la manipulacin de arrays.
Slo en el caso de tener requisitos de sincronizacin, utilizar estructuras
sincronizadas (o algn tipo de sincronizacin sobre estructuras no sincronizadas,
ver siguiente punto). Las implementaciones propuestas (en el paquete java.util)
son eficientes y estn bien probadas.

Vaciar las colecciones que permanezcan en memoria cuando ya no van a ser


utilizadas, para eliminar referencias a los objetos contenidos y que estos puedan ser
liberados de memoria. Si no se hace as, quedan objetos en memoria, ocupando
recursos innecesariamente, constituyendo lo que se denomina un memory leak.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 40 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

- Usar Collection.clear() si est soportado.


- Usar Vector.setSize(0) en colecciones de tipo Vector.

Iteradores: Mientras se accede a una coleccin con un iterador si se modifica su


estructura, por ejemplo otro thread haciendo put() o remove(), el iterador en el siguiente
acceso detectar este cambio y lanzar la excepcin ConcurrentModificationException.
Esta situacin se produce aunque la coleccin sea sincronizada.
Para controlar esta situacin se proponen dos opciones:
o Si la coleccin es sincronizada, sincronizar tambin el acceso con el iterador.
Por ejemplo:
synchronized(coleccion) {
Iterator i = coleccion.iterator();
while(i.hasNext()) {
...
}
}

o Capturar la excepcin ConcurrentModificationException y tratar


adecuadamente la situacin, por ejemplo reintentando la operacin.
Se recomienda no hacer llamadas innecesarias a los mtodos de una clase que
podran generar bucles: Evitar condiciones de finalizacin con clculos innecesarios,
ya que se ejecutarn con cada iteracin del bucle.
Ejemplo:
Sin optimizar:
for (int i = 0; i < myList.size(); i++) {
System.out.println(myList.get(i).toString());
}

Optimizado:
int size = myList.size();
for (int i = 0; i < size; i++) {
System.out.println(myList.get(i).toString());
}

Evitar cdigo innecesario: tratar de evitar llamadas a funciones costosas


innecesarias, por ejemplo, se invoca a una funcin costosa y luego en funcin de
una condicin se usa su resultado o no.
Esto es cierto en particular para la creacin de objetos: se recomienda no crear los
objetos al principio del mtodo, sino en el lugar del cdigo en el que se vayan a utilizar
por primera vez, de modo que en ejecucin la lgica condicional evite en algunos casos
la creacin de estos objetos.
//ejemplo 1 ineficiente

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 41 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

// si l2 es null se crean t1 y t2, y se invoca a sumar(l1)


public int sumarListas(Lista l1, Lista l2) {
TablaFormateada t1=new TablaFormateada(l1);
TablaFormateada t2=new TablaFormateada(l2);

if (l1==null) return;
temp1=sumar(t1);
if (l2==null) return;
temp2=sumar(t2);
return temp1+temp2;
}

// ejemplo 2 eficiente
// si l2 es null no hay proceso
// no se crean los objetos t1 y t2 y no se invoca a sumar(l1)
public int sumarListas(Lista l1, Lista l2) {
if (l1==null || l2== null) return;
TablaFormateada t1=new TablaFormateada(l1);
TablaFormateada t2=new TablaFormateada(l2);

temp1=sumar(t1);
temp2=sumar(t2);
return temp1+temp2;
}

Evitar recursividad innecesaria: la recursividad permite crear cdigo ms sencillo y


elegante, pero puede ser ineficiente si no se usa adecuadamente. Por ejemplo, si
tenemos una estructura de datos jerrquica (un rbol) en la que cada nodo tiene un
valor numrico. Supongamos que queremos obtener el mximo valor del rbol,
basta crear un mtodo para recorrer desde la raz recursivamente el rbol 1 vez.
Supongamos ahora que queremos ahora calcular para cada nodo del rbol el
mximo de sus descendientes. Una implementacin muy ineficiente es recorrer el
rbol, y para cada nodo invocar el mtodo anterior para obtener el mximo de su
subrbol.
Se recorre el rbol numerosas veces. Mucho ms eficiente es
implementar otro mtodo recursivo que obtenga el mximo de un nodo, como el
mximo de los mximos de sus subnodos. En este caso se recorre el rbol una sola
vez. Por ejemplo:
private int[]calculaAnchoColumnas(int[]ancho_columna,String[] cabecera,List list,int
max_colum_length){
//cuerpo anchos
for (int i=0;i<list.size();i++){
HashMap map=(HashMap)list.get(i);
for (int k=0;k<cabecera.length;k++){
if (ancho_columna[k]>max_colum_length)
ancho_columna[k]=max_colum_length;
String elemento=(String)map.get(cabecera[k]);
if ((elemento!=null) && (ancho_columna[k]<elemento.length())){
ancho_columna[k]=elemento.length();
if (ancho_columna[k]>max_colum_length)
ancho_columna[k]=max_colum_length;
}
}
}
return ancho_columna;

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 42 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Cuando se obtienen o crean recursos que es necesario liberar, como conexiones a


base de datos de un pool o al abrir ficheros y conexiones de red, debe utilizarse la
clusula finally para garantizar que son liberados y simplificar el cdigo.

En el acceso a ficheros, una prctica habitual muy ineficiente cuando se quiere


escribir en el fichero, es abrir el fichero, escribir, y cerrar el fichero. Es mucho ms
eficiente abrir el fichero al comienzo de la ejecucin y mantenerlo abierto mientras
sea necesario para realizar las escrituras, y slo cerrarlo al final de la ejecucin
(incluyendo las salidas anmalas por excepciones). El caso de las conexiones a BD
es parecido. En una aplicacin monothread sera recomendable seguir este mismo
esquema. En una aplicacin web en la que se disponga de un pool de conexiones,
es el pool el que gestiona el abrir y cerrar conexiones

En la lectura y escritura de informacin de ficheros o de la red debe utilizarse flujos


con buffer como son BufferedInputStream, BufferedReader, BufferedOutputStream y
BufferedWriter. As se reduce el nmero de lecturas y se aumenta el rendimiento.
Por ejemplo: para leer un fichero binario se puede utilizar:
FileReader fR = new FileReader(pathFichero);
BufferedReader bR = new BufferedReader(fR);
while (!finFichero) {
bR.readLine();
}

En lugar de:
FileReader fR = new FileReader(pathFichero);
while (!finFichero) {
fR.readLine();
}

Esta recomendacin es especialmente eficiente en un sistema multithread (por ejemplo


una aplicacin web) en el que los distintos threads escriben a un fichero. Dado que es
necesario utilizar algn mecanismo de sincronizacin para el acceso concurrente de
escritura a fichero, la alternativa con buffer en memoria proporciona un acceso de
escritura ms rpido en la mayora de los casos (se sincroniza una escritura a
memoria), y slo cuando el buffer est lleno se vuelca a disco.

En mtodos muy llamados, cuando sea posible, se debe utilizar


System.currentTimeMillis()
en
vez
de
new
java.util.Date()
o
new
java.util.GregorianCalendar(),
ya
que
es
mucho
menos
costoso.
System.currentTimeMillis() devuelve el nmero de milisegundos transcurridos desde el
1 de Enero de 1970.
Por ejemplo: Si queremos controlar cuando caduca un dato de una cach podemos
calcular el momento de su caducidad aadiendo al nmero de milisegundos de la fecha
actual el tiempo de validez en milisegundos.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 43 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Sin optimizar:
GregorianCalendar caducidad = new GregorianCalendar();
caducidad.add(GregorianCalendar.SECOND, tiempoVidaSeg);
objetoCache.setCaducidad(caducidad);
// Comprobar si ha caducado
if (objetoCache.getCaducidad().before(
new GregorianCalendar())) {

// ha caducado
...
}

Optimizado:
objetoCache.setCaducidad(
System.currentTimeMillis() + tpoVidaMilis);
// Comprobar si ha caducado
if (objetoCache.getCaducidad() > System.currentTimeMillis()) {
// ha caducado
...
}

Otro ejemplo sera el clculo de tiempo transcurrido entre dos momentos.

El uso del casting tiene impacto en el rendimiento. En algunos casos existen


algunas alternativas con mejor rendimiento.
Si es necesario realizar mltiples casting de un mismo objeto, es recomendable
crear un objeto temporal y hacer un nico casting:

Evitar:
if (myObj instanceof MyClass) {
return ((MyClass) myObj).meth1() + ((MyClass) myObj).meth1();
}

Es mejor:
if (myObj instanceof MyClass) {
MyClass temp = (MyClass) myObj;
return temp.meth1() + temp.meth1();
}

Las propiedades de los objetos de una clase que son comunes a todas las
instancias deben definirse a nivel de clase (static). En particular los datos constantes
deben definirse como constante Java (static final).
Ejemplo: La clase Pedido define objetos que tienen informacin de la tabla de base de
datos de pedidos. Si queremos que tengan un atributo con el nombre de la tabla debe
definirse a nivel de la clase y no de cada instancia de objeto, evitando el uso
innecesario de memoria.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 44 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Es mejor:
public class Pedido {

private static String nombreTabla;


public static String getNombreTabla();
}

que:
public class Pedido {
private String nombreTabla;
public String getNombreTabla();
}

Los mtodos que son independientes de una instancia concreta de una clase, es
decir son independientes de sus atributos, deben definirse en la clase. Esto evita la
creacin de objetos para llamar a estos mtodos.
Ejemplo:
Si el mtodo getNombreTabla() no fuese esttico, habra que utilizar la sentencia
(new Pedido()).getNombreTabla()

en vez de:
Pedido.getNombreTabla()

El manejo de excepciones es costoso. Es ms eficiente escribir cdigo proactivo


que verifica determinadas condiciones que eventualmente pueden producir
excepciones.

Ejemplo:
Es ms eficiente:
if (myNum !=

0 ) {

myDiv = 1/myNum;
}

que:
try {
myDiv = 1/myNum;
} catch (AritmeticException ax) {

Un caso particular es el uso del Casting especulativo, que produce excepciones con el
coste que esto implica.
try {
((SomeObj) o).someOperation();

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 45 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

} catch (ClassCastException ccx) {


try {
((SomeObj2

)o).SomeOperation2();

}
catch(ClassCastException ccx) {

}
}

y que se puede evitar:


if (o instanceof SomeObj) {
((SomeObj) o).someOperation();
} else if (o instanceof SomeObj2) {

((SomeObj2) o).someOperation2();
}

Esta recomendacin est limitada a estos usos inadecuados del casting. En general, el
uso de excepciones permite separar el tratamiento de errores de la lgica de aplicacin,
con lo que mejora la legibilidad y mantenibilidad del cdigo, por lo que no es
recomendable una posible mejora del rendimiento a cambio de un empeoramiento del
diseo.

Evitar llamadas a System.out.println y System.err.println, ya que son


costosas (son operaciones sncronas y lentas si como ocurre frecuentemente se
haya redirigida la escritura a disco). Frecuentemente son trazas de desarrollo
olvidadas, pero en otras ocasiones son trazas necesarias. En este caso existen
implementaciones eficientes para escritura de ficheros de log. J2SE versin 1.4. por
ejemplo incluye un componente Java Logging.

Utilizar el tipo int si es posible, en lugar de otros tipos. El acceso a int es mucho
ms rpido que el acceso a otros datos. En particular es mejor utilizar int que otro
tipo de datos como ndice en los bucles.

Al utilizar recursos definidos en JNDI como son pooles de conexiones a base de


datos, EJBHomes y recursos de JMS hay que tener en cuenta que la creacin del
contexto inicial de JNDI (InitialContext) y la bsqueda (lookup) son tareas
costosas. Es importante realizar estas operaciones una nica vez, guardar los
objetos obtenidos y reutilizarlos.

Error: Reference source not found el acceso sincronizado a variables compartidas


por varios threads es costoso, por lo que se recomienda evitar en la medida de lo
posible la utilizacin de variables de instancia, por ejemplo sustituyndolas por
variables locales en los mtodos del servlet.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 46 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Los procesos que son muy costosos no deben realizarse en online ya que si se
reciben varias peticiones al mismo tiempo pueden afectar al resto de peticiones en
curso e incluso, ante muchas solicitudes del proceso costoso, se puede colapsar el
servidor. Pueden plantearse mejor como procesos batch a ejecutar en momentos
menos crticos del servidor. En ocasiones el rendimiento de un proceso batch es mejor
porque se inicializan estructuras, se crean conexiones, etc. una sola vez y no una vez
por cada peticin.

7 POSIBLES ERRORES EN AVALON


7.1. Error: Cuando en AvalonBackoffice salta un error que
contiene el mensaje Unsupported major.minor version
50.0
Solucin: En el IDE Eclipse se cambia el workspace default JRE (lo que sea) por el

Alternate JRE actualizado.

7.2. Error: Cuando en AvalonBackoffice salta un error que


contiene
el
mensaje:
javax.servlet.ServletException:
Exception in JSP: /full_audit_user.jsp:6
3:
4:
5:
6:
7:
8:
9:

<%@ taglib uri="http://myfaces.apache.org/tobago/component" prefix="tc" %>


<%@ taglib uri="http://myfaces.apache.org/tobago/extension" prefix="tx" %>
<%@ taglib tagdir="/WEB-INF/tags/layout" prefix="layout" %>
<layout:overview>
<jsp:body>
<tc:box label="Monitorizacin de usuarios">
<f:facet name="toolBar">

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 47 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

Solucin: En AIX matar el proceso java del puerto 8888, hacer parar, arrancar el Tomcat,
e intentar entrar de nuevo al AvalonBackoffice. Tal como se explica en LOS COMANDOS EN
AIX

7.3. Error: Salta error en catalina.out:


com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '21' for key 'PRIMARY'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949)
at com.accenture.avalon.audittrail.procesoGuia.FullAudit.guardar(FullAudit.java:128)
at com.accenture.avalon.audittrail.procesoGuia.FullAudit.process(FullAudit.java:174)
at com.accenture.avalon.audittrail.procesoApp.ProcessRawData.process(ProcessRawData.java:21)
at com.accenture.avalon.audittrail.Lanzador.lanzar(Lanzador.java:62)
at com.accenture.avalon.persistencia.ProcesaMessage.procesa(ProcesaMessage.java:60)
at com.accenture.avalon.mdb.ConsumidorMensajes.processMessage(ConsumidorMensajes.java:91)
at com.accenture.avalon.mdb.ConsumidorMensajes.onMessage(ConsumidorMensajes.java:65)
at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:795)
at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:96)
at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:149)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:110)
at org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:25)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 48 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:570)

Solucin: No se puede machacar los ID_AUD. Se tiene que hacer trncate (borrar
tablas) adicionales, sobre todo en las tablas de auditora:
taud_cuso_auditada_entidad: tabla de casos de uso por entidad.

taud_cuso_auditadas: tabla de casos de uso auditadas

taud_full_audit_cuso_auditadas: tabla de casos de uso auditadas con ms


detalle

taud_full_audit: tabla que te muestra la cabecera y cuerpo del mensaje auditado

taud_parametro_entidad_auditad: tabla de campos auditados por entidad

tcontribuyente, tdiagnostico, texpediente, tingreso, toperaciones, tpersonales,


tpia, tresolucion, tsolicitudes, tusuario, tvisualizado: tablas de configuracin
Custom.

7.4. Error: No arranca el Tomcat con el comando startup


en AIX
Solucin: En esos casos se puede borrar los ficheros temporales ubicados en
/avalon/apache-tomcat-5.5.28/temp. En ocasiones es necesario borrar los registros
con la aplicacin CCleaner.

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 49 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

7.5. Error: En catalina.out se ve el error: cabecera2 not


found
Solucin: Si no se encuentra la vista 2 salta el error. Por lo que c ada vista nueva debe

tener su correspondiente vista 2, por ejemplo:


IMSERSOOrderResolucionView=IMSERSORevisionesResolucionesView=Copiado,Enviar
ACCAA,Expediente,IdCicloDeVida,Id,Tipo,SubTipo,EstadoResolucion,F.Resolucion,F.Efect
os,F.FinDeSuspencion,,F.RegistroCV,Dictamen,DictamenPrincipal,GradoyNivel,EstadoNotif
icacion,F.Emision,N.Registro,F.Registro,F.Entrega,Motivo,C.Autonoma,Provincia,Localidad,
BajaINE/Justicia,F.BajaINE/Justicia,Inactivo,,,,,,RowId
IMSERSOOrderResolucionView2=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,2
2,23,24,25,26

Esto es debido a que en Avalon hay un fichero SiebelResponseParser.java que si


no estn los campos en la cabecera los busca en cabecera2:
for (int j=0;j<al.size();j++){
String[] cabeceras=ParametrizaVistas.getResponseAlias(request);
String[] cabeceras2=ParametrizaVistas.getResponseAlias2(request);
if ((cabeceras!=null)&&(j<=cabeceras.length)&&(al.size()>=cabeceras.length)){
hm.put((new StringBuffer("R").append(k).append('_').append(cabeceras[j].trim())).toString(),al.get(j));
} else
if((cabeceras2[j]!=null)&&((al.size()<cabeceras.length)|(al.contains("ADMINISTRADOR046")))){
hm.put((new StringBuffer("R").append(k).append('_').append(cabeceras2[j].trim())).toString(), al.get(j));
}
else{
hm.put((new StringBuffer("R").append(k).append('_').append(j)).toString(), al.get(j));
}
}

7.6. Error: se queda pillado algn proceso


Por ejemplo: Cuando no sale nada al entrar a http://170.251.100.197:8888
entonces es preferible matar el proceso:
kill -9 pid
Para nuestro ejemplo anterior:

7.7. Error: No se puede borrar un fichero desde el cliente


filezilla
Solucin: Es ms conveniente borrarlo por comandos. Por ejemplo es muy comn
que las trazas de Tomcat que se encuentran en catalina.out lleguen a pesar
demasiado por lo que es preferible borrarlo. Este fichero suele estar en esta ruta:
/avalon/apache-tomcat-5.5.28/logs. Con lo cual primero entramos en esta ruta,

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 50 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

luego ejecutamos el comando ls para ver los ficheros dentro de ese directorio y
finalmente ejecutamos el comando rm -r:

rm r catalina .out

8 NOTAS IMPORTANTES
1) En AIX copia cuando seleccionas un segmento de comando, y pegas al hacer click
derecho.
2) Cuando usas el Google Chrome no se muestra las cabeceras de las ventanas de
AvalonBackoffice
3) En el informe pdf: ACCESO A DATOS SOCIOECONONIMOS
Hay que ver porque est consultando doble el PIA-Patrimonio-Interoperabilidad
Swecmd

InvokeMethod|GotoNextSet|GetViewLayout|BatchCanInvoke

Es porque esta pillando los mtodos


<string>SWECmd</string>
<string> InvokeMethod </string>
AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 51 de 52

06/01/2014

AVALON Solucin de Auditoria y Gestin de la


Seguridad

APUNTES AVALON

<string>SWECmd</string>
<string>GetViewLayout</string>
Solucin: quitar GetViewLayout. Sigue apareciendo doble porque es por el
SWEView
4) Se debe quitar todas las trazas innecesarias a la hora de subir el proyecto debido a
que podra ralentizar los procesos, ya se hizo desde el 29/10/10
5) De momento se ha hecho alias para ventanas de hasta dos tablas visibles, faltara
hacer para vistas de ms de dos tablas mostradas en Siebel.
6) Falta cambiar el campo de ID_ENTIDAD_AUDITADA
taud_cuso_datos_controldado_de

por

ID_CUSO

en

7) No siempre coincide que el campo de entrada corresponde con la salida de la tabla,

se tendra que mejorar el criterio de bsqueda para eso en la query se ha agregado


una condicin where tvisualizado.ID_AUD=tentidad.ID_AUD" , aunque se come
datos de salida porque no siempre coinciden las tablas de entidad con los
visualizados en la salida
8) Se ha aadido SWECmd BatchCanInvoke en AvalonBackoffice para Borrado fsico
de Resoluciones
9) El fichero vistas.properties que vale es el que est en la ruta: /avalon/apachetomcat-5.5.28
10)He puesto en AvalonBackoffice SWEMethod ExecuteQuery para que obtenga la
salida de las consultas
11)Como se va a quitar todas las trazas innecesarias se han guardado las libreras
avalon.jar e Ireport.jar en la carpeta D:\avalon e IReportJAR backup las cuales
pueden servir para analizar alguna incidencia ya que tiene un alto grado de trazas
12)Hay que investigar por qu los datos sensibles demoran como un da para
actualizarse
13)Tambin si tienes dos bridges abiertas una logeada y el otro no, el parseo NO coge
el usuario por lo que en el informe se muestra las estadsticas de un usuario
desconocido
14)Hay cosas que se guardan en caliente por ejemplo:
El *.jasper, *.properties, etc
-

Las que necesitan desplegar el Tomcat nuevamente son:


Las libreras *.jar, *.war, etc

AVALON Solucin de Auditoria y Gestin de la Seguridad

Pgina 52 de 52

06/01/2014

S-ar putea să vă placă și