问题标签 [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 投票
2 回答
2894 浏览

spring - 如何从 Struts1 Action 访问 Gemini Blueprint 应用程序上下文?

在一个好的 ol'war 项目中,您只需将 a 添加ContextLoaderListener到您的web.xml东西中就可以了 - 您可以使用

例如,从 Struts 1 类访问应用程序上下文Action,整个配置过程都有很好的文档记录。如果它们是由其他应用程序创建的,您可以从 JNDI 中查找 bean。

但是,如果我将这个好的 ol' Web Application aRchive 移植到 Web Application Bundle,并且想要使用 OSGi 服务引用而不是 JNDI,该怎么办?如果我想要 Spring 做的只是在我的 Web 应用程序中管理 bean,那么上述方法仍然有效。我可以实例化 bean 并通过上述实用程序方法获取它们,并且我已经成功设置 Gemini Blueprint(以前称为 Spring DM)来解析我的 OSGi 服务引用。

问题是 Gemini Blueprint 和 Spring Struts 并行运行并且似乎彼此不了解。上述实用程序方法返回的上下文不包含由 Gemini Blueprint 创建的 bean,例如从 OSGi 服务导入的 bean,如果我将 Blueprint 样式的 OSGi 服务引用添加到 Spring Struts 解析的 XML 配置中,则会可怕地死掉。

我需要做什么才能从 Struts 1 中访问 Gemini Blueprint 应用程序上下文Action

日志

从日志中挑选的一些行:

第一部分(不包括顶部的唯一行)告诉ContextLoaderListener启动 Spring ContextLoader 和 processes META-INF/spring/wfadmin-context.xml,因为它被配置为执行。

第二部分告诉 Gemini Blueprint 检测到这是一个 Blueprint 包并从配置启动它自己的上下文META-INF/spring/wfadmin-{,osgi-}context.xml。我们还看到该 beanwfEngine已从 OSGi 服务成功导入。

第三部分显示了se.sunstone.util.web.AbstractAction当它尝试访问wfEngineSpring Struts 应用程序上下文中的 bean 时我是如何死掉的。这是意料之中的,因为workflow-context.xml只包含testBeanInMetaInfSpringWorkflowContextXmlbean,但如果我包含

workflow-context.xml(具有合适的xmlns:osgi定义)中,Web 应用程序甚至无法启动:

我希望有一种方法可以告诉 Spring Strugs 插件与 Gemini Blueprint 共享其应用程序上下文。这可能吗?

为了完整起见,Spring-Blueprint 配置如下所示:

META-INF/spring/wfadmin-context.xml(两者都加载):

META-INF/spring/wfadmin-osgi-context.xml(由 Gemini 蓝图加载):

0 投票
1 回答
180 浏览

osgi - 用 karaf 更新核心时无法更新捆绑包

我遇到了一个大问题,我有几个捆绑。

作为

  • 捆绑核心
  • 捆绑
  • 捆绑插件核心

bundleui 需要 bundlecore,bundleaddoncore 需要 bundlecore

当我用 karaf 更新 bundlecore 时,我注意到 bundleui 和 bundleaddoncore 仍在使用旧版本?我必须重新启动卡拉夫?这是正常的吗?如果是这样,为依赖包充值的正确方法是什么?

0 投票
2 回答
1848 浏览

java - 在 JBoss Fuse Fabric 中注册 MBean (JMX) 的最简单方法是什么?

我为在 JBoss Fuse Fabric (v7.2.0.redhat-024) 中运行的服务编写了一个自定义MBean

  • 界面:com.mycompany.myservice.MyServiceManagerMBean
  • 实现类:com.mycompany.myservice.MyServiceManager

JBoss Fuse 注册或“发现”我的 MBean 的最简单方法是什么?

我尝试将以下内容添加到我的 blueprint.xml,但它似乎不起作用:

我使用部署我的服务的配置文件运行 JBoss Fuse Fabric,启动 JConsole 并连接到名为org.apache.karaf.man.Main的第一个本地进程(其中有 2 个)。

但是我找不到我的 MBean - 我希望com.mycompany.myservice在 MBean 选项卡上看到,但它不存在。

相反,我可以在这个树节点下看到我所有的数据源 jmx bean:

com.mycompany.anotherservice.datasources.

但是,数据源 MBean 是通过设置jmxEnabled=true来配置的,所以我对如何配置和公开自己的 MBean 并不明智。

有人可以告诉我我需要在这里做什么吗?

提前致谢。

0 投票
2 回答
1963 浏览

unit-testing - 如何在编写 pax-exam 测试时检索 blueprint.xml 中定义的 OSGi 服务实例?

我想知道是否有人尝试使用本机容器在 pax-exam 中测试通过 blueprint.xml 暴露的 bean/服务。

我有一个包含两个捆绑包的项目 - a) config - 接口类 b) config-impl - 包含实现并将 bean 公开为 blueprint.xml 中定义的服务。

我希望测试类中的@Inject 类似于@ https://ops4j1.jira.com/wiki/display/PAXEXAM3/Getting+Started+with+OSGi+Tests中提到的方法应该自动设置@Inject 中的实例值' ed 变量,但它似乎没有工作。

发送到 pax-exam 的选项粘贴在下面。是否有更多的包要加载,以便 pax-exam 开始识别 blueprint.xml 并启动服务?

0 投票
1 回答
2703 浏览

osgi - 使用蓝图在 OSGi 引用侦听器中注入事务

我有一个 OSGi 包,它有一个参考侦听器类,用于跟踪其他 OSGi 包注册的服务。我已经使用蓝图配置了参考侦听器,并在 Felix 中部署了所有必要的 Aries 捆绑包:

一切都适用于这个配置,并且 MyServiceMonitor 类的绑定和取消绑定方法在服务来来去去时被调用。作为下一步,我希望绑定方法也可以在数据库中写入一些数据,因此我尝试在 MyServiceMonitor 中注入一个实体管理器并通过更改 bean 标记来创建事务,如下所示:

当我启动捆绑包时,这种为绑定方法创建事务的尝试会导致以下异常。当我删除 tx:transaction 标记时,捆绑启动没有问题,而我已经能够在具有相同蓝图配置的其他(非引用侦听器)bean 中使用实体管理器和事务。

作为 OSGi 的新手,我无法弄清楚这是否是预期的行为,如果是的话,在参考侦听器中执行数据库操作的正确方法是什么。对此有何见解?

0 投票
1 回答
1191 浏览

jpa - ServiceMix / 蓝图 / JPA 集成

我花了一周时间尝试将 JPA / ServiceMix 4.5.1 / camel-jpa 2.10.4 / Blueprint 集成在一起。我目前正在使用 OpenJPA,但与它无关。servicemix 使用的aries jpa 版本是0.3.0。

我无法通过的堆栈跟踪是:

我尝试了几种变体。这是我当前的配置:

持久性.xml:

骆驼上下文.xml

实体 Bean(用 groovy 编写)

我尝试了多种不同的 DataSource 实现,包括 BasicDataSource、org.springframework.jdbc.datasource.SimpleDriverDataSource 和 com.mysql.jdbc.jdbc2.optional.MysqlDataSource。所有这些都会导致 IllegalArgumentException。

我还尝试放弃使用 JNDI,而是直接在 persistence.xml 中定义数据源。这会导致 OpenJPA 包中出现 ClassNotFoundException,因为它没有导入 mysql 驱动程序。我更愿意在我的 camel-context.xml 中定义它,并且不希望重新捆绑 OpenJPA jar。

0 投票
2 回答
834 浏览

jetty - 具有一个 Jetty 端点的多个 JAXRS Bean

任何人都可以帮助我使用 Apache FUSE ESB 配置两个具有相同基本 URI 的 JAX-RS 服务吗?我正在使用带有 karaf 容器、Apache Camel 和 CXF (JAX-RS) 的 JBoss FUSE 6.0 版本。配置是使用蓝图完成的。当我只配置一个 JAX-RS 服务时,一切正常。

我正在尝试使用基本 URI 提供两个 JAX-RS Bean http://localhost:9001/rs。第一个 bean ashttp://localhost:9001/rs/rest1和第二个bean http://locahost:9001/rs/rest2

我已经用码头端点定义了两个骆驼上下文。我想我需要两个只使用一个配置的实例,但无法弄清楚如何做到这一点。

这是我的骆驼上下文:

两个 Bean 都作为服务引用注入,当我评论其中一条路由时,一切正常。

任何建议如何在骆驼中配置它?

干杯,奥利弗

0 投票
1 回答
1189 浏览

blueprint-osgi - osgi-blueprint 静态方法调用

有没有办法可以从蓝图中调用静态方法。根据 aries 蓝图文档,我可以使用静态函数来创建对象,但我找不到是否可以为提供静态函数以执行某些功能的类执行此操作。

谢谢拉利特

0 投票
1 回答
347 浏览

jboss - 加载捆绑包时,如何让 JBoss AS 7.2 注册我的 OSGi 服务?

我创建了一个小型示例项目,以使用 Spring(即蓝图)实现 OSGi 的参考实现,并且我可以安装、解析和启动所有包,但包启动时我的服务未注册。

我已经在 github 上提供了整个项目,因此您可以查看源代码 - 构建的 jars 输出在artifacts文件夹中,但您也可以通过运行自己构建项目gradle assemble

据我了解蓝图规范,特别是本指南,如果配置文件位于正确的位置,则无需激活器类来注册服务 - 在我的 jar 中,我在下面有以下内容OSGI-INF/blueprint/sillyservice.xml

部署此捆绑包时,JBoss 将捆绑包报告为 ACTIVE。

然后,当我部署客户端捆绑包时,有一个激活器类运行以下代码段以列出所有已注册的服务:

列出了一堆由 JBoss 内部的 OSGi 框架注册的服务,但没有列出我的SillyService.

我需要做什么才能完成这项工作?

0 投票
1 回答
1246 浏览

jdbc - 在 Camel Route 中未重用 DBCP 空闲连接

我很确定空闲连接没有被重新使用,或者我正在泄漏连接。我有一条从文件使用者开始的简单路线。文件使用者使用文本文件。拿起文件后,我检查了一张表格以确保这不是重复文件。

然后我将消息正文从文件转换为字符串。然后,我将文件拆分并根据记录的类型通过一条路线运行各个部分。这些路由中的每一个最终都会将此记录插入到运行在 MySQL 上的服务器上的临时表中。

以下是路线的简化版本。

因此,这条路由上的每条消息最终都会命中一个 bean,该 bean 会将其插入数据库。所以我将 DBCP 添加到依赖项中,然后在我的 osgi xml 蓝图中声明它,如下所示:

我还声明我的 bean 将执行如下处理:

现在,当文件拆分完成后,我想确保记录匹配。基本上该文件有帐户记录和一些辅助信息。所以我在拆分完成时检查路由,然后一旦文件完全在临时表中,我会在 MySQL 中运行一些额外的健全性检查。

第二条路线看起来像这样:

所以在我的测试中,一切都很顺利,我可以 像这样有效地导入文件。当我在文件夹中放置超过 5 个文件时,我的问题就开始了。基本上我观察 MySQL 将连接池增加到最大大小,然后不重新使用连接。

所以我们打了 16 个并发连接,他们在加载了几个文件后进入睡眠状态,然后在 4、5、6 文件的某个地方突然出现以下错误:

或者它出现在日志中

MySQL 的最大连接数已达到 512。我尝试了各种池大小、线程选项等。

有趣的是,我所有的 JDBC 代码都遵循这种结构。它并不复杂的 SQL 只是插入语句....

}

我如何追查为什么我的连接没有被重用?或者,如果我正在泄漏连接,我该如何追踪?

更新:

我将文件使用者设置为在每次轮询时使用 1 个文件,轮询之间有第二个延迟。我可以看到它在每次路由启动时创建一个新的连接池,然后不重用以前创建的池。似乎对于我排队的每个文件,都会创建一个新的连接池。不完全是我想要的。这个对吗。

我已经包含了如下所示的屏幕截图:

在此处输入图像描述

更新 2:

这不是在 spring DM 下运行,而是在 OSGI 蓝图下运行。我非常确信数据源不止一次被实例化。

更新 3:

好吧,所以数据源不会多次实例化。空闲连接根本不被使用。我确实发现了一些有趣的东西,所以我怀疑这可能与我在此处的链接中看到的更多信息有关: //fusesource.com/forums/thread.jspa?threadID=4659 &tstart=15

从这个问题的观点来看,我几乎被困在那里。