ServiceBus JAVA SDK advanced reloading errors, ServiceLoader (pas sous-type)


J'ai un environnement OSGi exécutant des bundles, l'un d'eux utilise l'API de bus de service (Azure Java SDK v 0.4.4) et il y a quelques erreurs après avoir rechargé mon environnement OSGi. Le flux de travail est le suivant:

  • Initialiser la JVM et le framework OSGi
  • Les paquets sont chargés et démarrés
  • Service Bus bundle crée une configuration à l'aide de "ServiceBusConfiguration.configureWithWrapAuthentication (v,w,x,y,z) " appel et tout fonctionne bien

  • J' redémarrez par programme le framework OSGi, puis tous les bundles sont chargés et redémarrés

  • Service Bus bundle tente de créer une configuration à l'aide de "ServiceBusConfiguration.configureWithWrapAuthentication(v,w,x,y,z)", mais cette fois j'obtiens l'erreur suivante:

Exception in thread "Thread-7" java.util.ServiceConfigurationError: com.microsoft.windowsazure.services.core.Builder$Exports: Provider com.microsoft.windowsazure.services.blob.Exports not a subtype at java.util.ServiceLoader.fail(ServiceLoader.java:231) at java.util.ServiceLoader.access$300(ServiceLoader.java:181) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:369) at java.util.ServiceLoader$1.next(ServiceLoader.java:445) at com.microsoft.windowsazure.services.core.DefaultBuilder.create(DefaultBuilder.java:43) at com.microsoft.windowsazure.services.core.Configuration.<init>(Configuration.java:52) at com.microsoft.windowsazure.services.core.Configuration.load(Configuration.java:78) at com.microsoft.windowsazure.services.core.Configuration.getInstance(Configuration.java:63) at com.microsoft.windowsazure.services.serviceBus.ServiceBusConfiguration.configureWithWrapAuthentication(ServiceBusConfiguration.java:88)

Après un certain débogage, je vois que cela pourrait être un problème avec le ServiceLoader, plus exactement quand il vérifie si le com.microsoft.windowsazure.services.blob.Exports est une sous-classe ou implémente {[2] } qui est également vérifié après lors de la première exécution.

Donc, à mon avis, il doit y avoir quelque chose qui empêche le bon rechargement des Services, mais je n'ai pas été en mesure de comprendre ce qui se passe exactement.

J'espère que l'un d'entre vous a une idée à ce sujet!

Author: PizergSensing, 2013-10-08

1 answers

ServiceLoader fait partie des bibliothèques de classe JRE et il unware du chargement de classe OSGi. Lorsque vous redémarrez un framework OSGi, tous les bundles obtiennent de nouveaux chargeurs de classes et donc les classes chargées à partir de bundles sont des objets de classe différents qu'auparavant. Si l'instance ServiceLoader survit au redémarrage du framework, elle fera toujours référence à l'objet de classe d'origine.

 3
Author: BJ Hargrave, 2013-10-08 19:55:00