问题标签 [blueprint-osgi]

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 回答
928 浏览

osgi - 如何从服务中取消注册 OSGI/蓝图服务?

在我的应用程序中,我有一个 Service ChatProtocolClient。实现是一个 tcp 客户端,它在蓝图“init-method”中连接到远程服务器,并在“destroy-method”中断开连接。

我还有另一个包,它使用这个 ChatProtocolClient 的连接来读取和发布来自频道 ChatChannel 的消息。目前,我有一个 xml 文件,它创建了 ChatProtocolClient 的 bean,并创建了一个 bean ChatChannel,其中注入了对创建的 ChatProtocolClient 服务的引用。

但是如何处理与服务器的断开连接?我想告诉蓝图框架我的 ChatProtocolClient 实例现在无法使用,它应该取消注册该实例。

然后,Blueprint 最好自动调用所有依赖 bean(Blueprint 在其中注入此服务引用的 bean)上的销毁方法,并初始化一个新的 ChatProtocolClient bean 和所有因依赖失败而被销毁的 bean。

如何才能做到这一点?

0 投票
3 回答
6314 浏览

cxf - 如何使用蓝图配置 CXF JAX-WS 服务器

我想将一个简单的 CXF Jax-Ws 服务器部署到 ServiceMix。它只是一个同时具有服务接口和 impl 类的 OSGI 包。我需要将它部署到不同的 ServiceMix 服务器(版本 4.4.1),所以我需要更改每个服务器的 URL 地址。我想在 Karaf .cfg 文件中进行特定于服务器的配置,其余的在蓝图中进行。这不需要骆驼。我应该在蓝图中做什么?我找不到具体的文档。

0 投票
1 回答
1300 浏览

java - 如何从 Pax Web 部署的 Web 包访问(蓝图)OSGi 服务?

我目前正在使用 Pax Web 部署 OSGi Web 应用程序包。从这个 Web 包中,我需要访问一组 OSGi 服务。在系统的其余部分,我使用蓝图来创建和使用服务。这很棒,因为它提供了代理、阻尼等。

从 Pax Web 部署的 Web 应用程序包中,访问这些 OSGi 服务的最佳方式是什么?

我的想法是

1)通过osgi-bundlecontext属性从ServletContext中获取BundleContext,然后使用OSGi ServiceTracker类。

2) 在 Web 包中创建一个蓝图上下文文件,其中包含对我需要的服务的引用。Blueprint 上下文由 Blueprint 扩展程序在 OSGi 服务注册表中注册,我可以从中检索它,然后按 id 查找 bean。

3) 使用 Springs ContextLoaderListener 之类的东西在 web.xml 文件中创建蓝图上下文。

选项 1 很好,但意味着我必须跟踪服务并且无法获得蓝图的任何好处。

选项 2 也可以正常工作,只是遇到时间问题。实际上,现在有两个服务正在部署应用程序 - 使用 web.xml 文件部署的 Pax Web 扩展器和部署蓝图上下文文件的(在我的例子中是 Gemini)蓝图扩展器。在启动时,这些扩展程序会同时部署,并且当 Pax Web 扩展程序实例化任何 servlet 上下文侦听器时,无法保证应用程序上下文在 OSGi 服务注册表中可用。这意味着不能从上下文侦听器代码调用 OSGi 服务。

选项 3 - 不太确定是否可以这样做。看起来 Spring DM 曾经使用过这种方法?

我觉得我一定遗漏了一些东西 - 有没有一种简单的方法可以从 Pax Web 部署的 Web 包中使用蓝图?

0 投票
1 回答
542 浏览

osgi - 如何以编程方式使用蓝图?

是否可以不使用 XML(以声明方式)而是在运行时连接蓝图服务?我想要的是一个类似于创建BeanDefinition的界面

不知何故,这应该从一个单独的包中调用,该包将启动/停止来自其他包的服务

0 投票
1 回答
91 浏览

osgi - OSGI 中的多个服务注册表

我可以在 OSGI 容器中使用多个服务注册表吗?我想以类似交易的方式在它们之间切换

0 投票
2 回答
5284 浏览

jpa - 未注入 OSGI 服务 JPA PersistenceContext

我有一个核心库,它有一个接口,我想在 Fuse ESB(Apache ServiceMix 和 Karaf)中将其公开为 OSGI 服务。目标是允许其他捆绑包使用它。该服务使用 JPA (OpenJPA) 和 Spring。下面是界面:

和班级:

以下是缩写META-INF/spring/beans.xml

META-INF/persistence.xml(也缩写):

在非 OSGi 环境中,一切正常。它使用 felix maven-bundle-plugin,所以为了创建 OSGi 服务,我添加了以下内容OSGI-INF/blueprint/osgi-context.xml

捆绑包部署成功并注册了服务。问题是当PatientService从另一个包中引用时,实体管理器还没有被注入,因此NullPointerExceptionfind(Integer id)方法中抛出了一个。以下是消费者的片段META-INF/spring/consumer-context.xml

为了清楚起见,PatientService被注入到消费者包中,但实体管理器没有被注入到提供者包中。此外,由于在启动原始服务时出现以下日志输出,因此持久性单元似乎不是问题:

为了了解发生了什么,我在PatientServiceJpaImpl类的构造函数中记录了对象内存引用和堆栈跟踪。构造函数被调用了两次(创建了两个不同的对象):

  1. 第一个输出似乎源自 osgi 容器,从 开始,org.apache.felix或多或少以org.apache.aries.blueprint.

  2. 第二个输出似乎起源于 spring 框架,从 开始,org.springframework.osgi或多或少以org.springframework.beans.BeanUtils.

当调用消费者服务时,它的引用是对蓝图实例化对象的引用,该对象没有注入的实体管理器。同样从日志中,持久化单元在对象的蓝图实例化之后被实例化PatientServiceJpaImpl

我已经搜索并修补了这个问题很长一段时间,但我已经没有想法了。具有讽刺意味的是,它实际上在某一时刻有效,但我做了很多改变才能让它发挥作用,以至于它是一个我无法成功退出的老鼠窝。

为什么蓝图托管对象中没有注入持久化上下文?任何想法将不胜感激。谢谢。

0 投票
2 回答
6328 浏览

spring - 结合 OSGi 蓝图和 spring 配置

关于 Spring 配置和 OSGi 蓝图(例如 Gemini 蓝图)的组合是否有任何好的/最佳实践?您使用哪些 XML 文件?您将它们放在您的 OSGi 包中的什么位置(META-INF/spring, OSGi-INF)?这些实践中的哪一个允许您将捆绑包与蓝图的非双子座实现结合使用?

背景:我们正在从 Spring/Spring DM 切换到 Spring/Blueprint。我知道蓝图定义了一个<bean>元素。然而,我们偶尔会遇到蓝图规范有限的 bean 定义能力并不能满足我们所有需求的情况。因此,在我们的包中使用 Spring 配置和通过 OSGi 服务连接包的蓝图似乎是一个不错的选择。

0 投票
2 回答
261 浏览

java - 如何在 servicemix 中使用多个 jar 版本

我正在使用apache-servicemix-4.4.1 -fuse-03-06 我有两个版本的相同 jarModel-1.0.jarModel-2.0.jar. 两者都有相同的类和不同的方法。在我的部署文件夹中,我有两个蓝图项目blueprint-one.jarblueprint-two.jar. blueprint-one.jar用途Model-1.0.jarblueprint-two.jar用途Model-2.0.jar

但是当在部署文件夹中部署两个 jar 时,我得到NoSuchMethod exception.

谁可以帮我这个事?

0 投票
1 回答
1318 浏览

jakarta-ee - 如何使用 Blueprint 将 OSGi 服务注入 EJB

我知道可以使用ServiceTracker将 OSGi 服务注入 EJB。

但是,我应该如何使用OSGi Blueprint XML 配置向标准 EJB 注入服务,以便在其他地方使用 EJB 时可以使用服务?还是真的不可能,因为 EJB 在它们自己的层中工作?

我一直在尝试使用 Aries Blueprint 和 Gemini Blueprint 以及 JBoss AS7 来做到这一点,但没有运气。

作为示例bean:

0 投票
1 回答
40644 浏览

java - java.lang.ClassCastException: [B 不能转换为 java.lang.String

我用字段 LoginId 和 Password 编写了一个实体类。

我正在加密密码并使用 AES_ENCRYPT 将其存储在数据库中。

我只想检索已解密的密码。所以,我在 OPen JPA 2.0 中使用 AES_DECRYPT 使用 NAtiveQueryis。

我写的查询是:

但我得到以下异常:

我什至试过这个:

即使在这里,我也会遇到与以下相同的异常:

你能告诉我查询和处理请求的错误是什么吗?