问题标签 [dosgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
695 浏览

osgi - Karaf 中的分布式 OSGI - 消费者服务未启动

我刚开始使用 Zookeeper 在 Karaff 的 DOSGi。我在 Karaf 的一个实例中提供了服务,而在另一个实例中提供了消费者。服务端运作良好。发布后,我可以在安装了 Zookeeper 服务器的 Karaf 控制台中使用 log:display 命令查看它,并且我也可以通过浏览器访问 wsdl。问题出在消费者方面。当服务启动时,它应该写一条消息(参考下面的代码),但它永远不会发生。消费者代码:

和component.xml:

显现:

我尝试强制消费者捆绑(启动捆绑),它给了我这个错误:

启动捆绑包 137 时出错:无法解析 OSGI_Bundle-Consumer [137](R 137.1):缺少要求 [OSGI_Bundle-Consumer [137](R 137.1)] osgi.wiring.package; (osgi.wiring.package=org.osgi.proyecto.dev.sensor) 未解决的要求:[[OSGI_Bundle-Consumer [137](R 137.1)] osgi.wiring.package; (osgi.wiring.package=org.osgi.proyecto.dev.sensor)]

似乎存在依赖错误。解决了在消费者实例中安装传感器包(已安装状态)的问题。如何避免在两个 Karaf 实例中安装相同的传感器包?

0 投票
3 回答
415 浏览

java - 分布式 OSGi - 使用服务

我必须编写一个可以远程访问的服务。我正在使用 cxf-dosgi-ri-singlebundle-distribution-1.4.0 。因此,我使用以下属性创建了 API,然后是实现:

如果我部署捆绑包(在部署 api 和 d-osgi jar 之后),我可以在浏览器中看到 WSDL,甚至可以从远程计算机上看到。“ http://192.168.0.3:9090/preview?wsdl ” 像这样。

但随之而来的是消费者。客户端 jar 中有 OSGI-INF/remote-service/remote-services.xml:

我可以部署包(在部署 d-osgi 包和 API 之后),但我总是得到空引用。教程总是使用这样的代码

但我使用的是 Liferay 7,我不能使用它(没有 ServiceTracker 的构造函数 - 我只能从 Registry 实例中获取 ServiceTracker 实例)

OSGi 容器是 Felix。

我在某处读过它,如果我可以访问上面看到的 WSDL 描述,假设我的 API 中有一个方法 hello(),然后是一个“ http://192.168.0.3:9090/preview/hello " call 应该可以工作......但它没有。我什至不知道,如何调试这个。(没有远程的东西,在本地,在同一个容器中,方法调用正在工作)

任何帮助都会很好!谢谢!

0 投票
1 回答
977 浏览

web-services - dosgi:没有找到资源类的资源方法 - javax.ws.rs 注释被忽略?

我在下面显示的异常中运行。我尝试使用带有 dosgi 的注释发布 webservie。但是看起来注释将被忽略。

当我使用restProps.put ("service.exported.configs", "org.apache.cxf.ws ");

在我没有 javax.ws.rs 注释的 Activator.java 类中,它工作正常,我可以请求 wsdl (localhost:9090/provalet?wsdl)。

以下是一些相关主题,但这些答案都没有帮助我:

在 TomEE+ 上使用 JAX-RS 时“无资源方法” -> 被视为“公共”范围

CXF DOSGi 忽略注释 http://cxf.547215.n5.nabble.com/CXF-DOSGi-is-ignoring-JAX-RS-annotations-td4495048.html -> 我没有名为“org.apache.servicemix.规格.jsr311-api-1.1"

我还开发了这个例子http://maksim.sorokin.dk/it/2011/09/18/maven-apache-felix-cxf-dosgi-an-example-of-dosgi-service/ -> 但同样的例外

我和我一起工作

  • 项目清单
  • 阿帕奇菲利克斯 5.4.0
  • 分布式 OSGi 分发软件 Single-Bundle Distribution (1.2.0)
  • JAVA 1.8

我的捆绑包是:

Activator.java(我的包 provalet (1.0.0.SNAPSHOT) 中的 OSGi 激活器):

ProvaletService.java:

OSGI-INF/远程服务/远程服务.xml:

这是我的 pom.xml 负责生成捆绑包的部分

这是一个例外:

假设:我什至认为这是依赖关系的问题,看起来 javax.ws.rs 注释将被忽略。也许我对捆绑版本也有错误。

有人知道更多关于这个问题的信息以及我如何解决这个问题吗?如果您需要更多信息,请告诉我。

亲切的问候拉尔斯

0 投票
1 回答
182 浏览

osgi - 捆绑包安装在两个 Karaf 实例上

我想在两个Karaf实例之间进行“通信”,我决定使用Karaf Cellar来做到这一点。

我现在有两个包,每个包都安装在一个 Karaf 容器上。它们由hazelcast.xml 中提供的地址和端口标识。

我的问题是当我重新启动两个 Karaf 容器时,我有安装在 Karaf (A) 上的捆绑包,这些捆绑包安装在 Karaf (B) 上,反之亦然。

现在我在两个Karaf 容器上都安装了相同的包。

有没有办法阻止这种行为?

0 投票
1 回答
1179 浏览

osgi - 无法加载实现由 http://www.w3.org/2001/XMLSchema 指定的模式语言的 SchemaFactory

当尝试在 CXF DOSGi 中使用 Aegis 数据绑定公开服务时,我在 Java 8 中收到此错误。在 Java 7 中它工作正常。

原因:java.lang.IllegalArgumentException:没有实现由指定的模式语言的 SchemaFactory:http: //www.w3.org/2001/XMLSchema可以在 javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java: 215) 在 org.apache.cxf.aegis.type.XMLTypeCreator.(XMLTypeCreator.java:122)

在此处查看完整的堆栈跟踪

我认为原因是代码没有看到 impl 类com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory

任何想法如何解决这一问题?

顺便提一句。通过在 Java 8 中运行 CXF-DOSGi 构建可以观察到异常。

0 投票
1 回答
228 浏览

java - 使用 DOSGi 服务时的 Cellar Hazelcast 序列化异常

我使用以下三个捆绑包制作了一个应用程序

  • myservice-api
    • 包含模型类来传输数据de.myservice.api.model.MyObject
    • de.myservice.api.services.MyService包含具有功能的服务接口void save(MyObject o)
  • myservice-impl
    • 包含实现MyService并通过 DOSGi 提供
  • frontend只是一些MyService通过蓝图引用实现并调用save函数的代码

我使用 Apache Cellar 功能创建了一个集群,其中两个 Karaf 服务器位于不同的机器上。捆绑包像这样部署并显示状态Active

  • machine001.company.int
    • myservice-api
    • frontend
  • machine002.company.int
    • myservice-api
    • myservice-impl

使用cluster:list-nodes的时候显示集群已经搭建好了,使用cluster:service-list我可以看到我的服务是由machine002提供的:

OSGi 链接和东西有效,但是当frontend尝试使用该save功能时,我在服务提供实例上得到以下异常machine002

myservice-api捆绑包部署在两台机器上,因此该类应该可用 - 我还必须配置其他东西,以便 hazelcast 知道从哪里获取类以进行反序列化吗?

0 投票
1 回答
620 浏览

json - Apache CXF DSOGI 与 Karaf 上的 JSON

我正在尝试使用 Apache CXF DOSGI 在 Karaf 4.0.8 中创建一个 RESTful Web 服务。正在调用该服务,但我收到此错误:没有为类找到消息正文编写器....

欢迎任何建议。谢谢!!!

零件:

实体:

……

0 投票
1 回答
105 浏览

dosgi - Karaf + @Context UriInfo 上的 Apache CXF DSOGI

我正在尝试使用 Apache CXF DOSGI 在 Karaf 4.0.8 中创建一个 RESTful Web 服务。我正在尝试添加@Context我的实现。怎么做?

UriInfo没有正确注射。

0 投票
1 回答
524 浏览

osgi - 在 karaf、cxf 和 dosgi 中使用 hibernate 进行 Bean 验证

我在 Karaf 中使用 cxf dosgi 公开了 jax-rs 服务。我正在尝试使用休眠提供程序添加 bean 验证。

  1. 我安装了休眠验证器功能
  2. 我安装了 cxf-bean-validation 和 cxf-bean-validation-core 功能,尽管我不确定它们是否都需要。
  3. 我添加了以下意图来启用休眠提供程序:

    }

但我在底部得到了例外。我添加了包含缺失类的包(包装):

这仍然不能解决问题。

我正在使用 karaf 4.0.8

如果您有任何想法,请分享!谢谢!!

0 投票
1 回答
528 浏览

osgi - 使用 Apache Karaf Cellar 的分布式 OSGi 示例 - 客户端捆绑包无法激活,因为找不到分布式服务

我正在使用 Apache Karaf 4.1.1 和 Karaf Cellar。我写了两个包。第一个包提供 ITrackerManager 类型的服务。第二个包有一个引用 ITrackerManager 的组件。我的最终目标是见证第二个包中的组件成功获得对在不同节点上运行的第一个包中的 ITrackerManager 服务的引用。这都是我探索分布式 OSGi 的一部分。

当我安装第二个捆绑包时实际发生的是它已安装但由于缺少服务引用而无法激活。我一定是错误地进行了测试。关于如何展示我的最终目标的任何想法;节点 B 上捆绑包中的组件成功使用节点 A 上的服务?


到目前为止,这是我运行测试的方式。

节点 A

节点 B

到目前为止,一切都很好。我在我的电脑上运行两个 karaf 实例。两个实例互相看到。现在我只想将第一个包安装到节点 A 上。为此,我将捆绑包安装到集群中,然后专门将其从节点 B 中删除。

节点 A

看起来还是不错的。我的捆绑包在集群中,在节点 A(和节点 B)上是本地的,并且该服务被集群识别并且在节点 A 和节点 B 上都可用。现在从节点 B 中删除捆绑包。

节点 B

出色的。第一个捆绑包已从节点 B 中删除,但仍显示为在集群中。两个节点都同意我的服务现在仅在节点 A 上可用(因为捆绑包已从节点 B 中删除)。现在我将仅在节点 B 上加载我的第二个包。这是我遇到问题的地方。我不使用 cluster:bundle-install 命令加载第二个包,因为我不希望它在节点 A 上结束。所以我使用普通的 bundle:install 命令安装我的第二个包。这会导致关于不满足参考的错误。

节点 B

就这样。我仅在 NodeB 上安装了第二个捆绑包,期望它能够成功使用仅驻留在 Node A 上的所需服务。不幸的是,这并没有发生。相反,我收到错误消息,指出有未解决的要求。它似乎表现得好像 DOSGI 不可用。如果我在同一个节点上安装两个包,则第二个包会激活而不会出现任何错误。您可能有任何见解将不胜感激。