miércoles, febrero 02, 2011

Sobre la decompilación o la reingeniería


De estos requerimientos que nadie quiere hacer y una vez hecho ya no se ocupan, la cosa va mas o menos asi:

Hay varios appserver, cada uno con sus app, cada app contiene un jar (modelo.jar) que se ocupa, entre otras cosas, para saber
si la app se encuentra en produccion, desarrollo o pruebas. Muy listo el truco, la app se da cuenta mediante el hostname de la
maquina donde esta alojada la app. Erroneamente se pensaría que el modelo.jar es el mismo para todas las app, pero no, hay 260
y tantos jars diferentes y de los cuales yo no tenía ni idea de como funcionaban.

solucion:
Agarra todos los jar decompilar la clase que hace referencia al hostna, compilarla con el nuevo hostname y actualizar el jar...
Y para esto nuestro buen amigo sed viene al rescate.

1 #!/bin/ksh -
2 #===============================================================================
3 #
4 # FILE: reemplazar_ambiente.sh
5 #
6 # USAGE: ./reemplazar_ambiente.sh
7 #
8 # DESCRIPTION:
9 #
10 # OPTIONS: ---
11 # REQUIREMENTS: ---
12 # BUGS: ---
13 # NOTES: ---
14 # AUTHOR: Miguel Angel Huerta Gonzalez
15 # COMPANY:
16 # CREATED: 26/01/2011 12:35:06 p.m. Hora estándar central (México)
17 # REVISION: ---
18 #===============================================================================
19
20 set -o nounset # Treat unset variables as an error
21
22 JDEC=/home/user/jode-1.1.2-pre1.jar
23
24 #A_REEMPLAZAR="/app-2709/webapps/WEB-INF/lib/modelo.jar \
25 #/app-2709/webapps1/WEB-INF/lib/modelo.jar \
26 #/app-2709/webapps3/WEB-INF/lib/modelo.jar \
27 #/app-2709/webapps4/WEB-INF/lib/modelo.jar"
28
29 for MODELO in $A_REEMPLAZAR ; do
30 echo "=======================$WEBAPP============================="
31 ls -l $MODELO
32 cp $MODELO .
33 WEBAPP=$(echo $MODELO | awk -F/ '{printf "%s/%s\n", $6,$7}')
34 mkdir -p respaldo/$WEBAPP
35 cp $MODELO respaldo/$WEBAPP
36 AMBIENTE=$(jar tf modelo.jar | grep Ambiente)
37 echo $AMBIENTE
38 mkdir -p $(dirname $AMBIENTE)
39 java -cp $JDEC jode.decompiler.Main -c modelo.jar com.app.modelo.apConfig.Ambiente > Ambiente.java
40 FILE=$(dirname $AMBIENTE)
41 sed '
42 /apphostname.*PRODUCCION/ i\
43 ambientes.put("apphostnamenew".toUpperCase(), PRODUCCION);
44 ' Ambiente.java > Ambiente2.java
45 mv Ambiente2.java Ambiente.java
46 javac -classpath modelo.jar Ambiente.java
47 mv Ambiente.class $(dirname $AMBIENTE)/
48 jar uf modelo.jar $AMBIENTE
49 mkdir -p output/$WEBAPP
50 #cp modelo.jar output/$WEBAPP
51 cp modelo.jar $MODELO
52 echo "=======================$WEBAPP============================="
53 done
54
Publicar un comentario