标签: dosgi

分布式OSGi - 管理所有容器中的捆绑包的正确方法是什么?

我们正在考虑在我们的企业环境中使用分布式OSGi.
我们将进行以下设置:

  • 许多主机上的10到100个OSGi容器提供各种服务.
  • 其中许多服务由多个容器提供.
  • 其中一些服务可能要求在所有容器中保持一致(部署的版本相同).

跨所有容器管理bundle的生命周期(安装,启动,更新,停止,卸载)的正确方法是什么?

几个要求:

  • 由于可能有这么多容器,所有容器应该一起处理; 即,当我即将更新捆绑包时,单个命令应该更新该捆绑包已经存在的所有容器.
  • 命令必须是可重复的:首先在测试系统上执行命令,然后在测试完成后在生产系统上重复完全相同的命令.

我很欣赏有关上述问题的任何建议.

最好的问候,马顿

java distributed osgi provisioning dosgi

7
推荐指数
2
解决办法
4173
查看次数

使用CXF DOSGI从RESTful服务返回JSON

我有一个简单的服务,用JAX-RS注释注释并包含@Produces("application/json")注释.我在注册服务时设置了以下属性(我正在使用DS,但这不重要):

service.exported.interfaces -> *
service.exported.configs    -> org.apache.cxf.rs
org.apache.cxf.rs.address   -> myURI
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,我可以点击URL,但我的浏览器返回:

No message body writer has been found for response class MyClass.
Run Code Online (Sandbox Code Playgroud)

我的OSGi控制台显示:

Jan 11, 2012 2:29:48 PM org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage
WARNING: No message body writer has been found for response class MyClass.
Run Code Online (Sandbox Code Playgroud)

我阅读了文档并想到可能需要注册JSON提供程序.在May Activator中我添加了:

bundleContext.registerService(new String[] { "javax.ws.rs.ext.MessageBodyReader",
    "javax.ws.rs.ext.MessageBodyWriter" },
    new org.apache.cxf.jaxrs.provider.JSONProvider(), null);
Run Code Online (Sandbox Code Playgroud)

但这没有任何区别.

如何修复"没有为响应类MyClass找到消息正文编写器".错误信息?

cxf jax-rs dosgi

6
推荐指数
1
解决办法
4331
查看次数

分布式基础架构中的OSGi

我们正在开发基于OSGi的基础设施来处理基于流的数据流.具体的处理任务由各个OSGi组件执行.我们现在需要在不同的机器上分发这些组件的可能性,这意味着我们需要OSGi组件/容器之间的某种通信机制.

在我的研究中,我遇到了不同的潜在解决方案:R-OSGi,用于分布式OSGi的Apache CXF,Eclipse通信框架.

ECF似乎特别有趣,因为它支持不同的传输格式,并为服务发现等内容提供支持.

我的核心问题:

  • 在Felix中设置ECF基础设施是否有详细的教程/演练?(根据我的研究,我发现最近添加了Felix支持)
  • 除了上面列出的三个我可能错过的解决方案之外还有其他方案吗?
  • 是否有理由采用Apache CXF而不是ECF?

distributed osgi dosgi

5
推荐指数
1
解决办法
457
查看次数

卡拉夫酒窖投掷异常与蓝图路线部署

我按照http://blog.nanthrax.net/2011/11/apache-karaf-cellar-and-dosgi/上的Karaf Cellar示例进行了操作.

我创建了3个OSGi包,即服务(Bundle1),服务实现(Bundle2)和客户端(Bundle3).我有2个karaf容器在不同的机器上运行,其中(Bundle1)和(Bundle2)部署在一个karaf实例上,(Bundle1)和(Bundle3)部署在其他karaf实例上.如示例中给出的那样,每件事情都很好.我从Karaf container2中删除了客户端包,并希望通过蓝图中描述的camel路由调用该服务.

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
    <reference id="myService" interface="org.service.cellar.EchoService"     timeout="20000" availability="optional" />
    <camelContext id="camel" trace="false"
        xmlns="http://camel.apache.org/schema/blueprint">
        <route id="client">
            <from uri="timer://foo?fixedRate=true&amp;period=10000" />
            <bean ref="myService" method="process" />
            <log message=" Invoking Service : ${body}" />
        </route>
    </camelContext>
</blueprint>
Run Code Online (Sandbox Code Playgroud)

一旦我在karaf container2中部署了上述蓝图,我就在karaf容器中看到以下异常1.我无法找出此错误的来源.任何有关此问题的评论表示赞赏.

谢谢.

2012-10-15 13:24:40,477 | ERROR | pool-11-thread-7 | EventDispatchTask                | 78 - org.apache.karaf.cellar.core - 2.2.4 | Error while dispatching task
java.lang.NullPointerException
        at org.apache.karaf.cellar.dosgi.RemoteServiceCallHandler.handle(RemoteServiceCallHandler.java:74)[83:org.apache.karaf.cellar.dosgi:2.2.4]
        at org.apache.karaf.cellar.dosgi.RemoteServiceCallHandler.handle(RemoteServiceCallHandler.java:34)[83:org.apache.karaf.cellar.dosgi:2.2.4]
        at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_35]
        at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_35]
        at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:50)[7:org.apache.aries.proxy:0.3.1] …

osgi dosgi apache-karaf

5
推荐指数
0
解决办法
444
查看次数

CXF DOSGi 忽略注释

我正在使用JAX-RS 示例。此示例包含两个 RESTful Web 服务,一个带有注释,另一个没有。

我使用 maven 构建它并将其与 CXF DOSGi 单包分发一起部署到 Felix 中。没有注释的一个工作正常,但是另一个有注释的似乎完全被忽略了。我在日志中收到以下消息:

WARNING: No resource methods have been found for resource class org.apache.cxf.dosgi.samples.greeter.rest.GreeterService
Jun 15, 2011 10:34:17 PM org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean checkResources
SEVERE: No resource classes found
Exception in thread "pool-1-thread-1" org.apache.cxf.service.factory.ServiceConstructionException
        at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:122)
        at org.apache.cxf.dosgi.dsw.handlers.JaxRSPojoConfigurationTypeHandler.createServer(JaxRSPojoConfigurationTypeHandler.java:135)
        at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminCore.exportService(RemoteServiceAdminCore.java:244)
        at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance$1.run(RemoteServiceAdminInstance.java:78)
        at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance$1.run(RemoteServiceAdminInstance.java:71)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance.exportService(RemoteServiceAdminInstance.java:71)
        at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance.exportService(RemoteServiceAdminInstance.java:40)
        at org.apache.cxf.dosgi.topologymanager.TopologyManager$2.run(TopologyManager.java:254)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: javax.ws.rs.WebApplicationException
        at org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean.checkResources(AbstractJAXRSFactoryBean.java:238)
        at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:85)
        ... 11 …
Run Code Online (Sandbox Code Playgroud)

java cxf jax-rs dosgi

2
推荐指数
1
解决办法
1865
查看次数

标签 统计

dosgi ×5

osgi ×3

cxf ×2

distributed ×2

java ×2

jax-rs ×2

apache-karaf ×1

provisioning ×1