当前位置: 首页 > 知识库问答 >
问题:

在OSGi捆绑包激活期间打开文件

仲孙飞文
2023-03-14

我已经用声明性服务(DS)组件定义定义了一个OSGi包(cluster_implementation),指定了一个导出的服务、一个激活方法和一个停用方法。

在Activate方法的主体中,我需要访问一个文件,该文件不在文件系统中,但绑定在OSGi捆绑包中。在activate方法期间,使用java将文件内容检索为InputStream。lang.ClassLoader:getResourceAsStream

这基本上是可行的,但有一种情况是不可行的。在我的应用程序中,cluster_实现导出的服务可以被其他bundle通过服务注册表或声明性服务或spring-dm引用。组件的激活策略是延迟的,因此在第一次引用服务时激活。

现在,如果激活是因为声明性服务组件的引用而发生的,则文件内容读取良好,如果激活是因为sping-dm组件需要服务而发生的,那么资源的InputStreamNULL!现在我已经解决了这个问题,通过在组件属性中设置立即="true",使组件立即激活,但是我的请求是:

  • 是否允许在DS组件激活期间以流的形式获取资源的内容

我使用的OSGi框架是Equinox 3.6。


共有2个答案

邢昂然
2023-03-14

我猜您的activator和spring dm之间存在计时问题。SpringDM使用和extender监视具有Spring上下文的捆绑包并对其进行初始化。这可能与激活器并行运行。老实说,我本以为激活器会先运行,但事实似乎并非如此。

要解决这个问题,您可以确保文件是由首先访问该文件的那一方创建的,但要注意使其线程安全。

郜振国
2023-03-14

我想你肯定有另一个问题。任何已解析的捆绑包都可以访问资源,并且与DS完全无关。由于类已加载,因此可以从JAR加载代码。

这种行为似乎令人费解,可能是框架中的一个错误。我只能想象当你使用碎片的时候会出问题?但即使这样似乎也没有道理。如果您尝试了另一个框架,Felix具有非常好的诊断功能。

 类似资料:
  • 我对这个(OSGI)真的是新手,试图做简单的例子。我不能让懒惰的修辞奏效。我知道有一些解决这些问题的蓝图,但在开始之前,我认为学习一些基础知识是很好的。 好吧,我已经改变了我的代码,但仍然没有运气。 外部应用程序,install bundles,启动framework,然后只启动DataServiceClient Bundle。不能访问任何bundle类。 以下是DataServiceClient

  • 我有几个OSGi捆绑包,它们是在Eclipse中使用普通清单管理依赖项和Maven Tycho的外部构建构建构建的。 在Equinox上运行Eclipse内部的捆绑包工作正常。用第谷建造它们效果很好。 现在我想使用Tycho Surefire运行集成测试,为此我创建了一个简单的测试包,其中包含一些基本测试。测试中的bundle依赖于OSGi容器中的其他bundle和一些小的启动级别调整,以便正确运

  • 我正在开发一个应用程序,它利用Hibernate框架将OSGi转换为更具体的Equinox Server。因此,我生成了库包和客户端插件,我在其中利用前面提到的库包对业务逻辑和数据库之间的通信进行编程。在我的项目中,我有以下包结构: 在管理器包中,我有那些负责将客户端与数据库和映射进行通信的类,其中一个包含配置文件和Hibernate映射文件。然而,当我部署捆绑包时,引用运行良好,但是我得到一个异

  • 我正在开发超文本传输协议客户端应用程序作为一个OSGI捆绑项目,我已经使用apache maven创建项目文件夹结构使用下面的命令。 上面的命令创建了项目文件夹结构,因为我使用的是基于httpclient的应用程序。我在pom中添加了依赖项。xml如下所示。 我执行以下命令, 根项目上进行构建 它在本地maven存储库中创建了所需的jar文件。 问题从这里开始。我试图在ApacheServiceM

  • 问题内容: 我正在尝试在Eclipse中创建一个简单的插件。运行应用程序时,我在日志文件中看到此错误: org.osgi.framework.BundleException:捆绑包org.xy的激活器捆绑包org.xy的激活器无效。 您对此错误有任何想法吗? 问题答案: 检查你的 部分 如果未正确指定最终二进制结果中应包含的内容,它将无法正常工作。检查.class文件是否在MANIFEST.MF所

  • 我使用EclipseIndigo使用OSGiJava框架开发了一些包。有一个主捆绑包,它依赖于其他捆绑包,并且具有要运行的主程序。如果我尝试在Eclipse中运行所有捆绑包,一切都正常工作,但是如果我将每个捆绑包保存为一个JAR,并在命令行中启动OSGi框架,当我尝试启动主捆绑包时,会出现异常<code>NoClassDefFoundError。找不到的类是依赖项。包的其余部分处于活动状态,主包刚