¿Por qué RvdProxy.getServices() podría devolver incorrectamente una matriz vacía?
Pregunta
El siguiente fragmento de código intenta crear un Tib DaemonManager
conectarse a un rvd en particular y luego consultar los servicios de ese rvd.
public static void main(String[] args) throws RuntimeException {
DaemonManager daemonManager = new DaemonManager("http://foo.com:7580");
if(daemonManager.getDaemonType() == DaemonManager.RVD) {
DaemonProxy daemonProxy = daemonManager.getDaemonProxy();
final RvdProxy rvdProxy = (RvdProxy) daemonProxy;
Service[] services = rvdProxy.getServices();
System.out.println(services.length); //prints 0
for (Service service : services) {
System.out.println(service.getNetwork());
}
}
}
Esto imprime cero, a pesar de la interfaz web para este rvd enumera múltiple servicios disponibles. ¿Por qué podría suceder esto?
El demonio al que me estoy conectando ejecuta la versión 7.5.1 del software y el rvconfig.jar
que estoy usando también es de la v 7.5.1.
¿Hay algún problema al utilizar DaemonManager de Tibco que me hace despegarme?
Solución
solía Wireshark para ver el tráfico que se envía entre mis RvdProxy
y el propio RVD, y parece un lote de HTTP GET
tráfico.Por ejemplo:
0000 00 1e 0b a4 d1 7c 00 12 d9 7c 8a bf 08 00 45 00 .....|.. .|....E.
0010 03 87 a4 58 40 00 3d 06 66 90 0a 09 14 15 0a 0a ...X@.=. f.......
0020 07 61 1d 9c bf 09 fe 1e d6 82 6e 77 b9 52 80 18 .a...... ..nw.R..
0030 00 1b 05 43 00 00 01 01 08 0a ac 1c 6f 67 07 b2 ...C.... ....og..
0040 86 1f 72 3d 23 30 30 38 30 38 30 3e 3c 66 6f 6e ..r=#008 080><fon
0050 74 20 66 61 63 65 3d 48 65 6c 76 65 74 69 63 61 t face=H elvetica
0060 2c 41 72 69 61 6c 20 73 69 7a 65 3d 32 20 63 6f ,Arial s ize=2 co
0070 6c 6f 72 3d 23 46 46 46 46 46 46 3e 3c 62 3e 43 lor=#FFF FFF><b>C
Efectivamente, tras una inspección más detallada, resulta que las solicitudes realizadas por el apoderado son para el páginas web servidas por el propio Daemon - entonces la API de proxy es solo una raspador de pantalla.
Pero, ¿por qué no recibo servicios si aparecen en las páginas web que se están eliminando de la pantalla?
Activar la depuración:
System.setProperty("com.tibco.tibrv.config.debug","classes-to-debug")
Y descubre que el patrón que se utiliza para extraer los servicios de la página web...
/services,GET~~~~~\
service_detail\\?(\\d+)>\\1</a>.*?size=2>(\\d+\\.\\d+\\.\\d+\\.\\d+)</td>.*?size=2>
(\\d+)</td>.*?size=2>(\\d+)</td>~~~~~\
...¡no coincide con nada!En mi caso es porque mis redes de servicio son no de la forma (\\d+\\.\\d+\\.\\d+\\.\\d+)
sino más bien de la forma ;(\\d+\\.\\d+\\.\\d+\\.\\d+)
- tenga en cuenta el punto y coma inicial.¡Esta sutil diferencia es la fuente de todos mis problemas!
Esto parece un error en el rvconfig
jar - ¡que hay que criar con Tibco!:(