如何在多个osgi包之间共享资源

时间:2016-01-07 10:59:35

标签: java osgi bundle osgi-bundle

我有两个osgi捆绑。

捆绑A(消费者捆绑包)

Consumer.java

myService = new MyImpl((InputStream)  Client.class.getClassLoader().getResourceAsStream(DEF_FILE));

DEF_FILE 位于src / main / resources

捆绑B(服务包)

包含服务和实现类。

MyImpl.java

public MyImpl(InputStream inputStream)
{
     try
     {
         readFunction(inputStream);
         LOG.info(" ReadFunction in " + inputStream);
     }
     catch (Exception e)
     {
         LOG.error("Could not define Readfunction in " + inputStream, e);
     }
}

主要目的是读取另一个bundle中一个bundle中声明的资源文件。我可以使用maven-resource-pluginassembly plugin,但我也需要在pom中添加依赖包,由于循环依赖性问题,我不喜欢这种包。有没有其他方法可以有效地从一个包到另一个包中读取文件?

  

注意:我可能有很多用于服务的消费者包。

2 个答案:

答案 0 :(得分:3)

对于OSGi应用程序,共享静态资源听起来非常低。根据我的经验,您只想在捆绑包之间共享服务。然后,这些服务可以表示存储在这些静态资源中的域对象。使用扩展程序模式,您可以将捆绑中的资源转换为服务。您可能需要查看extender pattern以查看其工作原理。

在Web环境中,这些资源可以是Web资源,在这种情况下,您可以从特殊的servlet(例如OSGi enRoute web server servlet)提供服务。这使得添加共享功能变得更加容易。

OSGi非常善于创建这些抽象,可以在您的产品发展时节省大量时间。显然,您还可以使用完全有效的用例来使用流。

答案 1 :(得分:2)

Bundle界面有getResourcegetResources方法。有关详细信息,请参阅链接的JavaDoc。