Tag: osgi

OSGi:将参数传递给特定的包

我有一个带有自定义Main类的自定义jar,它启动OSGi Framework并安装/启动bundle。 这个主jar还包括一个属性文件。 目标:我有一个捆绑A应该以某种方式获取主jar的属性文件的属性。 我的第一次尝试是在bundle A中定义一个组件(使用Apache Felix SCR / Declarative Services)并在其activate-method中检索属性。 到目前为止,这是有效的,我得到@ Property-annotation中指定的默认值。 但是,我现在如何将属性文件的属性传递给此组件? 传递给OSGi应用程序的参数提到使用Config Admin,但是如何在Main类中使用它? Config Admin位于捆绑包中,而不在主jar中,并且捆绑包未按任何特定顺序安装 Main类对它安装的bundle一无所知,更不用说特定的service.pid了。 更新: 我现在正在尝试@vizier建议的方法(它不使用Config Admin,因此没有提到的问题): 在主jar中定义服务接口(系统包) 提供一个实现,它读取属性文件(属性文件在同一个jar中) 导出包含此服务接口的包X. bundle A然后可以导入包X,例如使用Declarative Services引用服务 但在我的捆绑中我得到了: org.osgi.framework.BundleException: Unresolved constraint in bundle [14]: Unable to resolve 14.0: missing requirement [14.0] osgi.wiring.package; (&(osgi.wiring.package=)(version>=0.1.0)(!(version>=1.0.0))) at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826) at org.apache.felix.framework.Felix.startBundle(Felix.java:1868) at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191) at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295) at java.lang.Thread.run(Thread.java:722) 即使在Manifest文件中将一些自定义包添加到Export-Package,系统是否仅导出osgi包? […]

使用声明性服务在OSGi + Pax-Web中使用GWT的问题

我正在迁移在OSGi(Equinox)和Pax-web上运行的现有GWT应用程序,以使用Declarative Services而不是程序化Service Tracker。 我在Equinox中使用Pax-Web。 PAX-WEB War扩展器没有加载基于WAR的GWT应用程序,但是你不能在这种操作方法中使用声明式服务。 我成功地重构所有servlet退出战争并转换它们变成声明OSGi服务( 这样我就可以摆脱servlet中所有混乱的ServiceTracker代码和特定的OSGi依赖关系。 我进一步复制了所有其他web.xmlfunction,以使用[1]上的信息注册filter,提供静态内容和欢迎页面 此时,它通常应该可以工作,但我遇到了PAX-WEB的问题以及GWT尝试加载其资源的方式: 在加载序列化描述符时,GWT从本地上下文加载序列化策略文件。 在我的情况下,它试图解决这样的资源:/ctx/ctx/62394587E47773FB1594FF.gwt.rpc这个资源是由GWT编译器创建并划归:/战/ CTX / CTX /资源… 之前,使用标准的WAB映射( Webapp-Context: /ctx, Webapp-Root: /war )GWT将正确查找其资源。 现在我正在使用程序化资源映射: DefaultResourceMapping resourceMapping = new DefaultResourceMapping(); resourceMapping.setAlias( “/ctx” ); resourceMapping.setPath( “/war” ); GWT无法加载资源并产生以下错误: 2012-06-20 12:46:36.283:INFO:/:AbcProxy: ERROR: The serialization policy file ‘/ctx/ctx/600000000000000773FB1594FF.gwt.rpc’ was not found; did you forget to include it in this deployment? […]

配置Equinox以修改“本地捆绑缓存”的管理

关于上一个问题, 如何让OSGi通过Config Admin重用您的配置 ,我仍然试图在Equinox框架中解决这个问题。 Pavol Juhos写道: Equinox Config Admin(org.eclipse.equinox.cm)将配置数据存储在Framework提供的持久存储区域中。 而且恰好是Equinox默认的“本地捆绑缓存”目录。 所以我读了这个主题,发现Equinox有几个运行时选项 (其中包括osgi.configuration.area)。 我想要的是更改配置,以便不会下载或清理本地捆绑缓存,因此下次我将运行Framework时,将使用最后输入的配置(对于任何捆绑)。

OSGi中的事务回滚

我有一个OSGi包,我在其中声明了一个服务并用蓝图注入一个事务: 在这个服务中,我有两个方法,每个方法都在数据库中写入数据,如下所示: public void createParent() throws MyException { Parent parent = new Parent(); … // Set parent fields em.persist(parent); createChild(); // Checks that could throw MyException } public void createChild() throws MyException { Child child = new Child(); … // Set child fields em.persist(child); // Checks that could throw MyException } 我的问题如下: 如果我在em.persist(parent);之间的createParent方法中抛出运行时exceptionem.persist(parent); 和createChild(); 事务回滚(正如我所料)并且父级不会保留在数据库中。 […]

如何从命令行停止OSGI应用程序

我有一个运行的osgi(equinox容器)应用程序。 它将通过bash脚本启动。 见felix gogo shell java -jar … _osgi.jar -console 1234 & 这一切都很好,我也可以阻止它 telnet localhost 1234 stop 0 但我正在寻找的是如何将其嵌入到bash脚本中以停止osgi应用程序。 我已经试过了 echo stop 0 | telnet localhost 1234 但这不起作用。 因此,如果有人知道如何将其放入bash脚本中,请告诉我。

如何让OSGi(配置管理员)持久/重用您的配置?

我是OSGi的新手。 我的目标是使用config admin创建一个结构,因此您可以输入一个配置,该配置将在重新启动服务器后重复使用。 虽然我已经阅读了api并尝试了一些示例,但我认为默认情况下会包含此function。 我的问题是:这是否可行,如果是的话:我有什么考虑才能获得这项function? PS。 我正在使用Equinox 欢呼克里斯

Eclipse插件捆绑在启动状态

我使用Eclipse创建了一个新的插件项目,为我创建了一个默认的Activator 。 在调试(作为Eclipse Application运行)时,我注意到没有调用此激活器的start()和stop()方法。 在关于在Eclipse中看不到捆绑包时该怎么做的指南之后我偶然发现了以下结果。 使用ss命令,我可以看到我的包已列出。 我的包的状态是’ 开始 ‘ 捆绑包正在启动过程中。 当start方法处于活动状态时,bundle处于STARTING状态。 当bundle的BundleActivator.start(BundleContext)被调用时,bundle必须处于这种状态。 如果BundleActivator.start方法完成无exception,则bundle已成功启动并且必须移至ACTIVE状态。 在start方法的第一行放置的断点不会被命中。 System.out.println也不会出现在控制台中。 什么可能导致start方法没有被调用,因此状态陷入STARTING ?

如何在Eclipse Juno中打开OSGi控制台

#eclipse -console 上面的命令在不同的窗口中打开OSGi控制台和eclipse IDE。 是否有任何选项可以在eclipse的控制台视图中引入OSGi控制台?

如何通过OSGi(karaf)API和自定义trustManager注册webservice

我正在研究通过以下调用注册WS的软件: initiatingBundle.getBundleContext() .registerService( interfaces, serviceObject, this.convertMapToDictionary( initiatingBundle.getBundleContext(), serviceAttributes ) ); 这是OSGi API的帮助 : org.osgi.framework.BundleContext ServiceRegistration registerService(java.lang.String[] clazzes, java.lang.Object service, java.util.Dictionary properties) 是否有任何方法(使用properties属性的示例)来创建具有自定义TrustManager的Web服务,如下所示? TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted( X509Certificate[] x509Certificates, String s ) throws CertificateException { System.out.println( “=== interception point at checkClientTrusted ===” ); System.out.println( x509Certificates[0].getSubjectDN().getName() ); System.out.println( “================================================” ); throw […]

从OSGi Bundle调用本机方法时出现UnsatisfiedLinkError

我使用eclipse File–>New–>Other–>Plug-in Project创建了一个OSGi插件(Bundle) File–>New–>Other–>Plug-in Project称为插件1.我想在此插件中使用本机.so库。 我在我的插件项目的根目录中添加了libtest_app_wrap1.so 。 我的项目结构如下所示 这是清单文件 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JniTest Bundle-SymbolicName: JniTest Bundle-Version: 1.0.0.qualifier Bundle-Activator: jnitest.Activator Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.osgi.framework;version=”1.3.0″ Bundle-NativeCode: libtest_app_wrap1.so; osname=linux; processor=amd64 这是我的Activator类的代码 package jnitest; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public Activator() { System.loadLibrary(“test_app_wrap1”); System.out.println(“Library Loaded Successfully…….”); } /* * (non-Javadoc) * * […]