在我的项目中,我尝试使用Maven/Tycho导出EclipseRCP应用程序。在“SNAPSHOT”发布配置中,所有插件(以及产品本身)都使用以下版本模式:OSGI:x.y.z.qualifierMVN:x.y.z-SNAPSHOT交付将使用以下模式OSGI:x.y.z.vyyyyMMddHHmmMVN:x.y.z-vyyyyMMddHHmm如您所见,“-”和“.”之间只有区别对于RCP插件,我必须通过使用以下Maven插件来禁用tycho执行的版本验证检查org.eclipse.tychotycho-packaging-plugin0.22.0false到目前为止,一切都很好。当涉
我刚刚开始使用EclipseRCP应用程序,它基本上只是提供的“helloworld”示例之一。当应用程序启动时,我想查看我的命令行参数并根据它们启动一些服务。我可以在IApplication.start中获取命令行参数:publicObjectstart(IApplicationContextcontext){String[]argv=(String[])context.getArguments().get(IApplicationContext.APPLICATION_ARGS)));}但是我如何获得BundleContext,以便我可以注册服务?它似乎不在IApplication
当我尝试从Jersey客户端创建WebTarget时出现以下异常。我的代码Clientclient=ClientBuilder.newClient();WebTargetbaseTarget=client.target("http://127.0.0.1:9000");异常堆栈跟踪java.lang.IllegalStateException:Nogeneratorwasprovidedandthereisnodefaultgeneratorregisteredatorg.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internal
恐怕这是一个非常尴尬的问题。我在Eclipse中有一个程序:packageds;publicclassDiServer{publicstaticvoidmain(String[]args){intfoo=0;intbar=0;/*bla*/}}简单吧?这在Eclipse中运行时完全正常。我想从命令行运行它。我复制了bin文件夹,里面有ds文件夹,ds里面有DiServer.class,还有.classpath我已将它们放入单独的文件夹C:\MyDocuments\DiTest,打开命令提示符,转到C:\MyDocuments\DiTest\ds\并输入javaDiServer我得到的错
我目前正在考虑“如何设计OSGi组件,以便使用jUnit和Mockito等框架轻松为其编写测试”。由于OSGi加强了DIP(依赖倒置原则)并且注入(inject)器方法(例如setter)通常存在,因此模拟bundle间依赖性非常容易。但是bundle内部依赖性呢?例如看thiscase.现在我想把它带入OSGi上下文中...我们想在OSGi平台中提供任何类型的网络协议(protocol)作为声明性服务,并想编写单元测试来测试直接与套接字对象。如果我们将套接字创建重构为一个单独但仍然捆绑的内部POJO(普通旧Java对象)类,我们应该如何将它注入(inject)协议(protocol)
开始使用osgi,我想知道包和组件之间的概念差异是什么。以及何时使用其中的哪一个。欢迎任何指点。编辑:组件和包提供不同的接口(interface),因此它们可能不可互换ComponentContextBundleContext 最佳答案 Acomponent是:系统的积极参与者了解并适应环境环境=其他组件提供的服务环境=资源、设备……可以向其他组件提供服务并使用来自其他组件的服务有生命周期简而言之:组件提供服务捆绑管理生命周期一个bundle只能有一个激活器(需要BundleContext),并且可以有任意数量的激活组件。这意味着您
我有一个带有持久性服务(使用hibernate)的OSGi包和一个包含配置(xml文件)的片段。在bundle的激活器中,我使用以下方法加载配置:@Overridepublicvoidstart(BundleContextctx){URLurl=ctx.getBundle().getResource("hibernate.cfg.xml");SessionFactorysessionFactory=newAnnotationConfiguration().configure(url).buildSessionFactory();}但有时,URL为空。当我试图列出所有可用的URL时(使用
是否可以将非osgi库与OSGi应用程序一起使用?例如,我正在开发一个基于语义的搜索引擎,我正在为其使用第三方自然语言处理库(http://wiki.opencog.org/w/RelEx_Dependency_Relationship_Extractor)。是否可以将这样一个不支持OSGi的库作为几个jar文件与我的OSGi应用程序连接? 最佳答案 正如之前的答案中所写,如果您想在bundle中使用其他库,您有两种选择:将库jar嵌入到将要使用的包中,从库中创建有效的OSGi包。第一种方法更简单,因为您只需要将库jar(及其所有依
我正在用Java开发基于语义的搜索应用程序。为了使应用程序模块化,我想到了使用osgi架构。但是由于我是osgi的新手,所以我不知道使用它的优缺点。任何人都可以解释使用osgi的优点/缺点以及使用osgi将使哪种应用程序受益/应用程序将通过这样做获得什么?谢谢!! 最佳答案 简而言之,OSGi是用于构建模块化应用程序的标准。它增加了新的模块化级别-bundle(又名组件,模块)。每个包都包含类和接口(interface),并且必须明确说明最重要的内容:它使用了哪些其他组件或Java包,以及它希望公开哪些包以供其他组件使用。从技术角度
我非常喜欢OSGi实现的模块化bundle的概念。我也喜欢“托管部署”服务,例如GoogleAppEngine(用于Web应用程序)或JavaWebStart(用于客户端软件)。这两个想法在概念上似乎可以很好地互补。但是,OSGi标准包含一些功能,使得Felix或Equinox等实现无法在AppEngine或Webstart等沙盒虚拟机之上运行。在这些环境中,无法直接访问文件系统,例如,这排除了用于存储持久包状态和native库的OSGi包缓存。现在,我对使用native库或拥有持久包状态没有太大兴趣。是否有一些框架实现了OSGi的核心包和服务概念(理想情况下以兼容的方式,以便OSGi