Ejemplo: listado de módulos de un servidor de aplicaciones
Este ejemplo lista todos los módulos de todas las aplicaciones empresariales que están instaladas en el servidor servidor1 de un nodo denominado nodo1.
Un asterisco (*) significa que el módulo está instalado en server1 y node1 y otros nodos o servidores. Un signo más (+) significa que el módulo está instalado únicamente en server1 y node1.
1 #-----------------------------------------------------------------------------------------------
2 # establecer variables para mantener el nombre de nodo y el nombre de servidor
3 #----------------------------------------------------------------------------------
4 set serverName server1
5 set nodeName node1
6 #----------------------------------------------------------------------------------
7 # establecer dos listas globales para mantener los módulos
8 #----------------------------------------------------------------------------------
9 set ejbList {}
10 set webList {}
11
12 #------------------------------------------------------------------------------------------------
13 # obtiene todos los objetos de despliegue y los asigna a la variables deployments
14 #------------------------------------------------------------------------------------------------
15 set deployments [$AdminConfig getid /Deployment:/]
16
17 #------------------------------------------------------------------------------------------------
18 # líneas 22-148. Se itera en todos los objetos de despliegue para obtener los módulos
19 # y realizar el filtrado para listar la aplicación que tenga al menos un módulo instalado
20 # en el servidor server1 en el nodo myNode
21 #------------------------------------------------------------------------------------------------
22 foreach deployment $deployments {
23
24 # -------------------------------------------------------------------------------------------
25 # restablecer las listas que mantienen módulos para cada aplicación
26 #--------------------------------------------------------------------------------------------
27 set webList {}
28 set ejbList {}
29
30 #------------------------------------------
31 # obtener el nombre de la aplicación
32 #------------------------------------------
33 set appName [lindex [split $deployment (] 0]
34
35 #------------------------------------------
36 # obtener deployedObjects
37 #------------------------------------------
38 set depObject [$AdminConfig showAttribute $deployment deployedObject]
39
40 #--------------------------------------------
41 # obtener todos los módulos de la aplicación
42 #---------------------------------------------
43 set modules [lindex [$AdminConfig showAttribute $depObject modules] 0]
44
45 #--------------------------------------------------------------------------------------------
46 # inicializar listas para guardar todos los módulos en la lista correspondiente a la
que pertenecen
47 #--------------------------------------------------------------------------------------------
48 set modServerMatch {}
49 set modServerMoreMatch {}
50 set modServerNotMatch {}
51
52 #----------------------------------------------------------------------------------------
53 # líneas 55-112. Se itera en todos los módulos para obtener targetMappings
54 #----------------------------------------------------------------------------------------
55 foreach module $modules {
56 #------------------------------------------------------------------------------------
57 # configurar un distintivo para realizar el filtrado y obtener módulos para
server1 en node1
58 #------------------------------------------------------------------------------------
59 set sameNodeSameServer "false"
60 set diffNodeSameServer "false"
61 set sameNodeDiffServer "false"
62 set diffNodeDiffServer "false"
63
64 #--------------------------------------------
65 # obtener targetMappings
66 #--------------------------------------------
67 set targetMaps [lindex [$AdminConfig showAttribute $module targetMappings] 0]
68
69 #------------------------------------------------------------------------------------
70 # líneas 72-111 Se itera en todas las targetMappings para obtener el destino
71 #------------------------------------------------------------------------------------
72 foreach targetMap $targetMaps {
73 #------------------------------
74 # obtener el destino
75 #------------------------------
76 set target [$AdminConfig showAttribute $targetMap target]
77
78 #--------------------------------------------------
79 # realizar el filtrado para omitir ClusteredTargets
80 #--------------------------------------------------
81 set targetName [lindex [split $target #] 1]
82 if {[regexp "ClusteredTarget" $targetName] != 1} {
83 set sName [$AdminConfig showAttribute $target name]
84 set nName [$AdminConfig showAttribute $target nodeName]
85
86 #----------------------------------------------
87 # realizar la coincidencia de nombres de servidor
88 #----------------------------------------------
89 if {$sName == $serverName} {
90 if {$nName == $nodeName} {
91 set sameNodeSameServer "true"
92 } else {
93 set diffNodeSameServer "true"
94 }
95 } else {
96 #---------------------------------------
97 # realizar la coincidencia de nombres de nodo
98 #---------------------------------------
99 if {$nName == $nodeName} {
100 set sameNodeDiffServer "true"
101 } else {
102 set diffNodeDiffServer "true"
103 }
104 }
105
106 if {$sameNodeSameServer == "true"} {
107 if {$sameNodeDiffServer == "true" || $diffNodeDiffServer == "true" ||
$diffNodeSameServer == "true"} {
108 break
109 }
110 }
111 }
112 }
113
114 #---------------------------------------------
115 # colocar en la lista correspondiente
116 #---------------------------------------------
117 if {$sameNodeSameServer == "true"} {
118 if {$diffNodeDiffServer == "true" || $diffNodeSameServer == "true" || $sameNodeDiffServer == "true"} {
119 set modServerMoreMatch [linsert $modServerMoreMatch end [$AdminConfig showAttribute $module uri]]
120 } else {
121 set modServerMatch [linsert $modServerMatch end [$AdminConfig showAttribute $module uri]]
122 }
123 } else {
124 set modServerNotMatch [linsert $modServerNotMatch end [$AdminConfig showAttribute $module uri]]
125 }
126 }
127
128
129 #----------------------------------------------------------------
130 # imprimir la salida con alguna notación como marca
131 #----------------------------------------------------------------
132 if {$modServerMatch != {} || $modServerMoreMatch != {}} {
133 puts stdout "\tApplication name: $appName"
134 }
135
136 #---------------------------------------------------------
137 # realizar la agrupación para el módulo correspondiente e imprimir
138 #---------------------------------------------------------
139 if {$modServerMatch != {}} {
140 filterAndPrint $modServerMatch "+"
141 }
142 if {$modServerMoreMatch != {}} {
143 filterAndPrint $modServerMoreMatch "*"
144 }
145 if {($modServerMatch != {} || $modServerMoreMatch != {}) "" $modServerNotMatch != {}} {
146 filterAndPrint $modServerNotMatch ""
147 }
148}
149
150
151 proc filterAndPrint {lists flag} {
152 global webList
153 global ejbList
154 set webExists "false"
155 set ejbExists "false"
156
157 #-------------------------------------------------------------------------------------
158 # Si ya existe la lista, destacar para que no imprima el título más de una vez
159 # y restablecer la lista
160 #-------------------------------------------------------------------------------------
161 if {$webList != {}} {
162 set webExists "true"
163 set webList {}
164 }
165 if {$ejbList != {}} {
166 set ejbExists "true"
167 set ejbList {}
168 }
169
170 #------------------------------------------------------------------
171 # realizar el filtrado de los módulos Web y los módulos de ejb
172 #------------------------------------------------------------------
173 foreach list $lists {
174 set temp [lindex [split $list .] 1]
175 if {$temp == "war"} {
176 set webList [linsert $webList end $list]
177 } elseif {$temp == "jar"} {
178 set ejbList [linsert $ejbList end $list]
179 }
180 }
181
182 #---------------------------------------
183 # clasificar la lista antes de imprimir
184 #---------------------------------------
185 set webList [lsort -dictionary $webList]
186 set ejbList [lsort -dictionary $ejbList]
187
188 #----------------------------------------------------------------
189 # imprimir todos los módulos Web instalados en server1
190 #----------------------------------------------------------------
191 if {$webList != {}} {
192 if {$webExists == "false"} {
193 puts stdout "\t\tWeb Modules:"
194 }
195 foreach web $webList {
196 puts stdout "\t\t\t$web $flag"
197 }
198 }
199
200 #--------------------------------------------------------------
201 # imprimir todos los módulos de ejb instalados en server1
202 #--------------------------------------------------------------
203 if {$ejbList != {}} {
204 if {$ejbExists == "false"} {
205 puts stdout "\t\tEJB Modules:"
206 }
207 foreach ejb $ejbList {
208 puts stdout "\t\t\t$ejb $flag"
209 }
210 }
211}
Salida de ejemplo para el servidor server1 en el nodo node1:
Nombre de aplicación: TEST1
Módulos de EJB:
deplmtest.jar +
Módulos Web:
mtcomps.war *
Nombre de aplicación: TEST2
Módulos Web:
mtcomps.war +
Módulos de EJB:
deplmtest.jar +
Nombre de aplicación: TEST3
Módulos Web:
mtcomps.war *
Módulos de EJB:
deplmtest.jar *
Nombre de aplicación: TEST4
Módulos de EJB:
deplmtest.jar *
Módulos Web:
mtcomps.war