java - ServiceBus JAVA SDK高级重新加载错误,ServiceLoader(不是子类型)

标签 java azure jvm osgi serviceloader

我有一个运行一些 bundle 的 OSGi 环境,其中一个使用服务总线 API(Azure Java SDK v 0.4.4),并且在重新加载 OSGi 环境后出现一些错误。工作流程是这样的:

  • 初始化 JVM 和 OSGi 框架
  • bundle 已加载并启动
  • 服务总线 bundle 使用“ServiceBusConfiguration.configureWithWrapAuthentication(v,w,x,y,z)”调用创建配置,一切顺利运行

  • 我以编程方式重新启动 OSGi 框架,然后加载所有包并再次启动

  • 服务总线 bundle 尝试使用“ServiceBusConfiguration.configureWithWrapAuthentication(v,w,x,y,z)”创建配置,但这次我收到以下错误:

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)

经过一些调试后,我发现这可能是 ServiceLoader 的问题,更确切地说,当它检查 com.microsoft.windowsazure.services.blob.Exports 时是子类或实现 com.microsoft.windowsazure.services.core.Builder$Exports在第一次运行期间也会对其进行检查。

所以在我看来,一定有什么东西阻止了服务的正确重新加载,但我无法弄清楚到底发生了什么。

希望大家对此有所了解!

最佳答案

ServiceLoader 是 JRE 类库的一部分,它不知道 OSGi 类加载。当您重新启动 OSGi 框架时,所有 bundle 都会获得新的类加载器,因此从 bundle 加载的类是与以前不同的类对象。如果 ServiceLoader 实例在框架重新启动后仍然存在,它仍然会引用原始类对象。

关于java - ServiceBus JAVA SDK高级重新加载错误,ServiceLoader(不是子类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249008/

相关文章:

java - ObjectOptimisticLockingFailureException 和 RollbackException

java - Eclipse 正在创建两个类文件

azure - 更新 Azure DocumentDB 中文档的一部分

sql - 如何将存储在 Azure Blob 存储中的图像文件插入 Azure SQL 表中

java - 从 C++ 代码运行 JVM 并设置类路径

android - cordova 虚拟机初始化期间发生错误

java - Android (libGDX) 使用 PHP 服务器端脚本与 mySQL 进行 http 连接

java - java线程结束后继续运行

azure - 如何在 Microsoft Azure CDN 上设置多个存储帐户和一个自定义域

java - Java 代理是否在单独的线程中运行?