Documente Academic
Documente Profesional
Documente Cultură
APUNTES AVALON
CONTROL DE VERSIONES
DOCUMENTO :
Ubicacin:
Ver. Fecha
01
02
21/10/2010
Descripcin
Creacin del documento inicial de diseo.
Revisin final
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.
un
error que
contiene
el
Pgina 2 de 52
06/01/2014
APUNTES AVALON
Pgina 3 de 52
06/01/2014
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.
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
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
APUNTES AVALON
10
11
12
13
14
15
14
16
15
17
Alvaro
Cerra
do
Fran
Fran
Fran
Fran
Fran
Fran
lvaro
Fran
Alvaro
lvaro
Pgina 5 de 52
06/01/2014
APUNTES AVALON
Se pincha en Run
Pgina 6 de 52
06/01/2014
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
Pgina 7 de 52
06/01/2014
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:
Pgina 8 de 52
06/01/2014
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
UserName: root
Password: Sotil01
Default Schema: avalon
Pgina 9 de 52
06/01/2014
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)
Pgina 10 de 52
06/01/2014
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
Pgina 11 de 52
06/01/2014
APUNTES AVALON
Pgina 12 de 52
06/01/2014
APUNTES AVALON
Pgina 13 de 52
06/01/2014
APUNTES AVALON
Pgina 14 de 52
06/01/2014
APUNTES AVALON
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
Pgina 15 de 52
06/01/2014
APUNTES AVALON
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
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
Pgina 16 de 52
06/01/2014
APUNTES AVALON
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
Pgina 17 de 52
06/01/2014
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:
com.accenture.avalon.webfilter.Config
com.accenture.avalon.webfilter.Config
Pgina 18 de 52
06/01/2014
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:
com.accenture.avalon.webfilter.Config
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
[ActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
[ActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
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>
Pgina 19 de 52
06/01/2014
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>
Pgina 20 de 52
06/01/2014
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
[ActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
[ActiveMQ
Session
Task]
INFO
com.accenture.avalon.webfilter.QueueLogManagerActiveMQ
Pgina 21 de 52
06/01/2014
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 "
exit 1
fi
Pgina 22 de 52
06/01/2014
APUNTES AVALON
Pgina 23 de 52
06/01/2014
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
Pgina 24 de 52
06/01/2014
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
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.
Pgina 25 de 52
06/01/2014
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
Pgina 26 de 52
06/01/2014
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
La explicacin es la siguiente:
Pgina 27 de 52
06/01/2014
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
Pgina 28 de 52
06/01/2014
APUNTES AVALON
En IJRBean
pool = new DbConnectionBroker(
"com.mysql.jdbc.Driver",
"jdbc:mysql://172.18.40.15:3306/avalon",
"root",
"Sotil01",
Pgina 29 de 52
06/01/2014
APUNTES AVALON
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";
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:
Pgina 30 de 52
06/01/2014
APUNTES AVALON
int fila2=Integer.parseInt(fila1);
// fila de la tabla
int fila= (fila2)/10;
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);
Pgina 31 de 52
06/01/2014
APUNTES AVALON
}
if(id2.equalsIgnoreCase("TipoIdentificacion")){
hm.put("Identif.", par1);
}
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";
Pgina 32 de 52
06/01/2014
APUNTES AVALON
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";
Pgina 33 de 52
06/01/2014
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.
Pgina 34 de 52
06/01/2014
APUNTES AVALON
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
Pgina 35 de 52
06/01/2014
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.
Pgina 36 de 52
06/01/2014
APUNTES AVALON
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:
Pgina 37 de 52
06/01/2014
APUNTES AVALON
public
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();
Pgina 38 de 52
06/01/2014
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();
Pgina 39 de 52
06/01/2014
APUNTES AVALON
Pgina 40 de 52
06/01/2014
APUNTES AVALON
Optimizado:
int size = myList.size();
for (int i = 0; i < size; i++) {
System.out.println(myList.get(i).toString());
}
Pgina 41 de 52
06/01/2014
APUNTES AVALON
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;
}
Pgina 42 de 52
06/01/2014
APUNTES AVALON
En lugar de:
FileReader fR = new FileReader(pathFichero);
while (!finFichero) {
fR.readLine();
}
Pgina 43 de 52
06/01/2014
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
...
}
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.
Pgina 44 de 52
06/01/2014
APUNTES AVALON
Es mejor:
public class Pedido {
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()
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();
Pgina 45 de 52
06/01/2014
APUNTES AVALON
)o).SomeOperation2();
}
catch(ClassCastException ccx) {
}
}
((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.
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.
Pgina 46 de 52
06/01/2014
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.
Pgina 47 de 52
06/01/2014
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
Pgina 48 de 52
06/01/2014
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.
Pgina 49 de 52
06/01/2014
APUNTES AVALON
Pgina 50 de 52
06/01/2014
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
Pgina 51 de 52
06/01/2014
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
Pgina 52 de 52
06/01/2014