2010-03-11 2 views
3

L'extrait de code suivant tente de créer une connexion Tib DaemonManager à un rvd particulier, puis de demander les services de ce rvd.Pourquoi RvdProxy.getServices() peut-il renvoyer de manière incorrecte un tableau vide?

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()); 
     } 
    } 
} 

Cette affiche zéro, même si l'interface Web pour cette liste de DRV multiples services disponibles. Pourquoi cela est-il possible?

Le démon auquel je me connecte exécute la version 7.5.1 du logiciel, et le rvconfig.jar que j'utilise provient également de la version 7.5.1.

Y a-t-il une erreur lors de l'utilisation de DaemonManager de Tibco qui me déconcentre?

+0

Avez-vous des fichiers de licence RV valides? RV fonctionne correctement avec BusinessWorks sans licence installée, mais refuse de travailler avec les API Java/C/xxx –

+0

Oui, tous les fichiers de licence RV sont valides, merci pour la suggestion, mais – butterchicken

Répondre

4

J'utilisé Wireshark regarder le trafic d'être envoyé entre mon RvdProxy et la DRV lui-même, et il ressemble à un beaucoup de HTTP GET trafic. Par exemple:

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 [email protected]=. 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 

Effectivement, lors de l'inspection plus loin, il se trouve que les demandes sont faites par le proxy sont les pages Web servies par le démon lui-même - donc l'API proxy est juste un écran -scraper.

Mais pourquoi est-ce que je ne reçois aucun service s'ils apparaissent sur les pages Web qui sont en cours d'éraflure à l'écran?

Activer le débogage:

System.setProperty("com.tibco.tibrv.config.debug","classes-to-debug") 

Et vous trouvez que le modèle utilisé pour extraire les services de la page web ...

/services,GET~~~~~\ 
service_detail\\?(\\d+)>\\1</a>.*?size=2>(\\d+\\.\\d+\\.\\d+\\.\\d+)</td>.*?size=2> 
(\\d+)</td>.*?size=2>(\\d+)</td>~~~~~\ 

... ne rien correspondre ! Dans mon cas, c'est parce que mes réseaux de service sont pas de la forme (\\d+\\.\\d+\\.\\d+\\.\\d+) mais plutôt de la forme ;(\\d+\\.\\d+\\.\\d+\\.\\d+) - notez le point-virgule. Cette différence subtile est la source de tous mes problèmes!

Cela ressemble à un bogue dans le pot rvconfig - qui doit être élevé avec Tibco! :(

+2

C'est une bonne réponse. – Adamski

Questions connexes