jjzjj

java - OSGI 包和组件之间有什么区别?

开始使用osgi,我想知道包和组件之间的概念差异是什么。以及何时使用其中的哪一个。欢迎任何指点。编辑:组件和包提供不同的接口(interface),因此它们可能不可互换ComponentContextBundleContext 最佳答案 Acomponent是:系统的积极参与者了解并适应环境环境=其他组件提供的服务环境=资源、设备……可以向其他组件提供服务并使用来自其他组件的服务有生命周期简而言之:组件提供服务捆绑管理生命周期一个bundle只能有一个激活器(需要BundleContext),并且可以有任意数量的激活组件。这意味着您

java - OSGi 片段何时附加到主机?

我有一个带有持久性服务(使用hibernate)的OSGi包和一个包含配置(xml文件)的片段。在bundle的激活器中,我使用以下方法加载配置:@Overridepublicvoidstart(BundleContextctx){URLurl=ctx.getBundle().getResource("hibernate.cfg.xml");SessionFactorysessionFactory=newAnnotationConfiguration().configure(url).buildSessionFactory();}但有时,URL为空。当我试图列出所有可用的URL时(使用

java - osgi 应用程序中的非 osgi 库使用

是否可以将非osgi库与OSGi应用程序一起使用?例如,我正在开发一个基于语义的搜索引擎,我正在为其使用第三方自然语言处理库(http://wiki.opencog.org/w/RelEx_Dependency_Relationship_Extractor)。是否可以将这样一个不支持OSGi的库作为几个jar文件与我的OSGi应用程序连接? 最佳答案 正如之前的答案中所写,如果您想在bundle中使用其他库,您有两种选择:将库jar嵌入到将要使用的包中,从库中创建有效的OSGi包。第一种方法更简单,因为您只需要将库jar(及其所有依

java - 使用 osgi 开发应用程序

我正在用Java开发基于语义的搜索应用程序。为了使应用程序模块化,我想到了使用osgi架构。但是由于我是osgi的新手,所以我不知道使用它的优缺点。任何人都可以解释使用osgi的优点/缺点以及使用osgi将使哪种应用程序受益/应用程序将通过这样做获得什么?谢谢!! 最佳答案 简而言之,OSGi是用于构建模块化应用程序的标准。它增加了新的模块化级别-bundle(又名组件,模块)。每个包都包含类和接口(interface),并且必须明确说明最重要的内容:它使用了哪些其他组件或Java包,以及它希望公开哪些包以供其他组件使用。从技术角度

java - 可以在沙箱中运行的 Mini-OSGi(如 AppEngine 或 WebStart)?

我非常喜欢OSGi实现的模块化bundle的概念。我也喜欢“托管部署”服务,例如GoogleAppEngine(用于Web应用程序)或JavaWebStart(用于客户端软件)。这两个想法在概念上似乎可以很好地互补。但是,OSGi标准包含一些功能,使得Felix或Equinox等实现无法在AppEngine或Webstart等沙盒虚拟机之上运行。在这些环境中,无法直接访问文件系统,例如,这排除了用于存储持久包状态和native库的OSGi包缓存。现在,我对使用native库或拥有持久包状态没有太大兴趣。是否有一些框架实现了OSGi的核心包和服务概念(理想情况下以兼容的方式,以便OSGi

java - OSGi 部署管理服务的状态

OSGi应用程序由称为束的模块组成。问题在于,任何大小合理的应用程序都会有大量的包(很容易达到数百个,只需查看EclipseIDE的插件目录),因此在管理或部署应用程序时,您需要比单个包更粗的粒度。OSGi服务纲要规范包含一个部署管理服务,它将部署包定义为bundle和其他工件(例如配置)的集合,它们可以作为一个单元进行部署、升级、卸载等。不幸的是,我找不到太多关于DeploymentAdmin实现、工具或用户的信息。此服务的状态如何?是否有人对部署管理有任何经验、意见或建议?此外,我认为Springdm-server具有应用程序范围的bundle(PAR文件)集合的概念,而Eclip

java - OSGi 应用程序如何在 Java 9 上运行?

我试图了解OSGi应用程序如何在Java9中工作,假设OSGi包不是JPMS模块(据我所知,仍然没有解决方案,OSGi包可以同时作为JPMS模块用于生产)。我有几个问题:我对所有OSGi应用程序都是一个未命名模块的理解是否正确?如果#1是,那么Bundle.update()是如何工作的?包是否重新加载到未命名的模块?如果我理解错了,请解释主要原则。 最佳答案 JavaSE9保证所有遵循标准JavaSE库的应用程序和库的持续兼容性。OSGi仅使用已发布的JavaSEAPI,因此将继续在Java9上保持不变。它目前不与JPMS模块交互,

java - 在 Tomcat 中使用来自 Java Web 应用程序的 OSGi 包

我正在尝试从JavaWeb应用程序调用OSGi包的方法。两者都应该在Tomcat7上运行。我已经编写了一个从OSGi包中调用方法的普通Java应用程序,如本网站所述:http://drupal.osgibook.org/node/37.为了获取Equinox环境的上下文,我从应用程序启动它并从内部安装bundle。此外,上下文用于检索正在运行的包的服务引用并获取其服务。EquinoxRunner类的runEquinox方法:importorg.osgi.framework.Bundle;importorg.osgi.framework.BundleContext;publicBundl

java - 高效的 OSGi 开发工作流程

我开发的产品由许多作为功能运行在karaf之上的包组成。通常我们的开发人员一次处理一个包。我们正常的开发过程是这样的:编码、编译、复制包到部署文件夹、测试。我们还发现,hotdeploy只是拒绝覆盖某些作为功能安装的bundle,而无需重新启动服务器或功能卸载/重新安装,因此有时周期会更长。我的问题是:社区中是否有人有更好的方法?我们做事的方式可行,但我觉得它非常缓慢且效率低下,我敢打赌有人想出了更好的办法!编辑:我意识到我的问题很不清楚……我们在Karaf下使用Equinox。我们还使用Eclipse和Maven,尽管我不知道使用Maven是否相关。 最佳

java - 按属性搜索 OSGI 服务

如何通过属性区分实现相同接口(interface)的已发布OSGI服务? 最佳答案 假设您要根据属性的某些值检索已注册的服务,您需要使用过滤器(基于LDAP语法)。例如:intmyport=5000;Stringfilter="&(objectClass="+MyInterface.class.getName()+")(port="+myport+")";ServiceReference[]serviceReferences=bundleContext.getServiceReferences(null,filter);您要在其中查