问题标签 [spring-dm]
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.
osgi - 在 Karaf 的 Application Container 或 Application Container Bundle 中使用 Embedded Felix,OSGi 是一个完整的 IoC 容器吗?
想象一下,您想在 Java 中拥有一个高度模块化的 Web 应用程序。组件也已经在使用 Spring 框架。一些组件仅涵盖纯逻辑,而其他一些组件还带有一些 HTML 演示 GUI。该应用程序与 Portlet 不兼容,但我们需要动态菜单来提升已安装模块的列表以及指向页面或 REST API 的链接。由于它是 Java,因此建议使用 OSGI,但我对 OSGI 的最新功能(过去几年引入)感到非常困惑,我有几个问题:
现在 OSGI 不仅是模块管理系统,也是 IoC 容器!它几乎包含许多 Spring IoC 特性的等效注释。那么我们如何在 OSGI 中使用启用 Spring 的模块呢?我们能否在新设计中取消 Spring 并完全依赖 OSGI?或者对于模块内的依赖注入,我们可以使用 Spring,对于模块上的依赖注入,我们可以使用 OSGI?
对于现实生活中的大型应用程序,我们有两种选择:在应用程序容器(例如 Tomcat)中使用嵌入式 Felix 或在 KARAF 中使用应用程序容器的 OSGI 捆绑包(Jetty 或 Tomcat)。哪种方法更好?哪一个更具可扩展性?
spring - Spring DM(动态模块)、OSGI 和 Greenpages 应用程序
“Greenpages 应用程序”是 Eclipse Virgo 站点中提供的示例 Web 应用程序,它提供了一起使用 OSGI 和 Spring DM 的示例,并且可以部署在 Virgo 容器中。请参阅:http: //www.eclipse.org/virgo/samples/。我能够毫无错误地运行该应用程序。但是一旦我尝试实现org.springframework.osgi.context.event.OsgiBundleApplicationContextListener接口,一切都出错了,我开始收到这个错误:
java.lang.IllegalArgumentException:尚未设置必需的属性“bundleContext”
OsgiBundleApplicationContextListener 接口提供了一种监听 BundleContext 事件的方法。请参阅:http ://docs.spring.io/osgi/docs/current/api/org/springframework/osgi/context/event/OsgiBundleApplicationContextListener.html
我的代码:
公共类 ApplicationContextObserver 实现 OsgiBundleApplicationContextListener { 私有瞬态 int countRefreshed = 0; 私人瞬态int countClosed = 0;
}
和声明的bean:
更糟糕的是,有时这个错误根本不会出现,但是当我在容器中部署另一个包时,不会调用监听器。
出了什么问题(如果可能,您可以附加一个使用 Virgo Container、SpringDM 和此侦听器的运行示例)?
osgi - 询问 OSGi/Spring-DM 框架以获取 Bundle 的依赖项
我在 Karaf (4.0.1) 实例中使用 Spring-DM,并尝试启动几个启用 Spring-DM 的捆绑包(我不是其作者)。
这些包有几个依赖项/服务依赖项,它们将由 Spring-DM 注入,我目前正在完成所有依赖项,但是这项任务既费力又耗时。
我目前使用几个选项来确定依赖关系:
- 检查包的“META/Spring”文件夹并检查其中的 XML 文件。
- 安装包并检查 Karaf 日志中的包失败消息。
这种方法对我来说不是很有效,我想知道是否有一种方法可以询问 OSGi 框架(在本例中为 Karaf)或 Spring-DM 本身,并查询特定捆绑包正在等待实现什么。
我可以编写一个 Karaf 命令行命令来允许我这样做,但我不知道如何去询问 Spring-DM 或 Karaf 以获取信息。
有什么建议么?
spring - 从 Spring 单体应用程序迁移到 OSGI
在过去的 10 年里,我们一直在使用 Spring 作为依赖注入来构建两套应用程序。我们还使用 spring-batch 和 spring-amqp。我们现在正在寻求迁移到 OSGI,以便可以将我们的单体应用程序分成多个包,从而使我们更加敏捷。这两个套件是 Web 应用程序,并部署为两个单独的 war 文件。我们希望使用 Apache Karaf 作为我们的 OSGI 运行时。
Spring-DM 已经死了,看来我们将不得不转换一切以使用蓝图进行依赖注入。
我的问题是我们如何逐步做到这一点?一次转换所有这些几乎是不可能的。只要我们负责在捆绑激活器中向服务注册表公开我们想要的任何服务,似乎一个捆绑包仍然应该能够使用 Spring DI 并拥有它自己的应用程序上下文,但我不确定是否存在是某种我们会失去的魔法,比如事务管理。
对此的任何指导将不胜感激。
apache-camel - apache aries blueprint中如何实现bean继承
目前我们正在将我们的应用程序从 Spring-DM 迁移到 Aries Blueprint。需要一种使用bean继承的方法。我读到蓝图中不支持父属性。
java - 从 Spring-DM 切换到蓝图:无法加载 JDBC 驱动程序类 'com.mysql.jdbc.Driver'
我们有一个应用程序,并且从 Apache 的 Servicemix 4.5.3 升级到了 Servicemix 6.1.0。我们还从 Apache Commons dbcp 升级到 dbcp2 和 pool2。升级后我注意到的一件事是捆绑包的启动和关闭非常非常慢。所以我用谷歌浏览了一下,发现 Spring-DM 已经被弃用,将被 Blueprint 取代。因此,我将所有捆绑包的 Spring-DM 配置替换为 Blueprint,现在它们的启动和关闭速度要快得多。
但是,我在此操作后看到了一些不同的行为。例如,我们制作了 Camel Routebuilders,并且在 configure() 方法中,我们从数据库中获取了一些配置。在其他情况下,我们有一个带有 setDataSource(..) 方法的 bean,我们通过蓝图将数据库连接注入其中,在将该连接存储在支持 fielkd 中之后,我们调用数据库进行一些额外的(缓存的)初始化.
在这方面,我们现在在 Blueprint 中遇到了异常,而在 Spring-DM 中我们从未遇到过这些。找不到 MySql Drive 类。setDataSource(..) 方法获得一个代理类,而后备服务尚未初始化。调用此代理类会导致异常,并且捆绑启动失败。如果您稍后手动重新启动捆绑包,那么它可以正常工作;可能是因为依赖关系已经解决了。
好的,介绍很长。这就是我们在代码中所做的。
在 deploy 文件夹中,我们有一个名为 jndi.xml 的文件,这是其内容的片段:
然后我们有一个 maven 编译的包,在 OSGI-INF.blueprint 文件夹(资源)中初始化 blueprint.xml,带有这个片段:
这是我们在 ServiceMix 日志文件中看到的异常:
发生此问题时,我目睹了两种情况:
- 当 SomeClass 中的方法“setDataSource”调用数据库时;
- 当 SomeClass 中的方法“setDataSource”仅在私有支持字段中注册数据源值,但 SomeClass 是 (Camel) RouteBuilder 并且从 configure() 方法访问 DB 时;
我在上面的情况 1 中设置了一个断点,并且收到的值是非空的。这个非空值可能是用于参考动态的代理类,在阻尼过程中使用。
看起来是我们的包,它在线程 A 中运行,接收到 Jdbc 驱动程序的代理,并调用数据库,而 Jdbc 初始化在线程 B 中完成,而 threab B 尚未准备好,所以你'在没有支持服务的情况下调用某些东西。阻尼过程应该阻止对数据库的捆绑调用,直到服务准备好,所以我可能在那个区域做错了什么。
上面的问题发生在几个捆绑包中,并且在不同的系统上表现不同。因此,如果您认为已将其固定在一个中,那么它会通过另一个重新出现。不幸的是,这一切都非常不可预测。
我们已经尝试过的是:
- 捆绑蓝图对数据库连接有一个“<reference”,我使用了一个引用侦听器——有时有效,有时无效;
- 在 pom.xml 中的“import-packages”中添加了一个依赖项,在 pool2 的 maven-bundle-plugin 部分下,巧合地发现了这个,我已经看到了很好的结果,但它不能始终如一地工作;
- 尽可能在任何地方使用惰性初始化,这 100% 有效,但不能应用于 Camel Routebuilder 的 configure() 方法(我不知道何时调用);
- 在启动过程的早期使用捆绑优先级来初始化 jndi.xml。由于我们有自动安装,我什至很早就安装了 jndi.xml,并且在 ServiceMix 中的任何其他内容之前安装。有点帮助。
我没有尝试的事情是: - 将数据库存储的配置移动到本地文件 - 对于这个版本不可行,对于未来的一个选项;- 恢复为 Spring-DM。慢总比麻烦好。然而,这对我来说也是实验性的,我已经看到它(慢)在我的机器上工作,也许它在其他机器上也有同样的问题。我也在 ServiceMix 论坛上发布了这个问题(还没有得到答案),他们“强烈”建议不要恢复到 Spring-DM
我真的不明白为什么捆绑包不等到 JDBC 驱动程序完全初始化。
jbossfuse - jboss-fuse-6.2 以后是否支持 SPRING-DM?
我们正在使用 jboss fuse6.1.0.redhat-379
并计划升级到6.2.1.redhat-621166
. 但到目前为止,我们已经使用spring-dm
了所有的捆绑包。我对 jboss fuse esb 用户的问题是,从 6.2 开始,蓝图的使用是否是强制性的,或者spring-dm
还会在一段时间内得到支持。虽然我完全理解 blueprint 是 osgi 的标准和推荐,但如果 6.2 不支持 spring-dm,我可能不得不延迟升级一段时间。欢迎所有好的想法/建议。
感谢任何快速帮助。
spring - 带有 Spring DSL + OSGi 的 Karaf 上的 Apache Camel
我是 OSGI 世界的新手。
版本: Karaf:4.1.0 Camel:2.18.2 Spring:4.3.5_RELEASE_1(Apache Service Mix Bundles)
我花了很多时间(甚至几天)用 osgi 容器搜索/理解骆驼弹簧。对于像我这样的初学者来说,我没有找到一篇适用于某些设置或 github..etc 的好文章。
我们的骆驼弹簧应用程序运行良好。现在我们要迁移到像 Karaf 这样的 OSGI 环境。我们正在做一些迁移到 OSGI 的工作,我们遇到了一些严重的问题,我们能够解决其中的几个问题,但最终会遇到以下问题:
我不知道在哪里放置camel-spring xml上下文和路由文件(以前在具有NON-OSGi的类路径中)。所以它没有加载上下文获取文件未找到。
如果我把它放在下面,我知道它可能是错误的方式
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"file:app-camel-spring.xml" }); 异常:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无法找到 XML 模式命名空间的 Spring NamespaceHandler [ http://camel.apache.org/schema/spring] 违规资源:URL [file:app-骆驼-spring.xml]
即使使用 Spring DM 也不起作用
谢谢,
Update-1 1. 在论坛要求我查看 GEMINI Blueprint(GB) 之后,我现在正在与 GB 核对。但是我仍然遇到与 JAXB 错误相同的错误。
我现在正在使用:菲利克斯:
捆绑清单:
spring - 从 Spring-DM 和 Spring 3 迁移到 Karaf 上的 Blueprint 和 Spring 4
我有使用 Spring 3.2.18 用 Java 7 编写的遗留应用程序,它与 Spring-DM 一起在 Karaf 2.4.4 上运行。我计划转向更新版本的 Spring、Java 和 Karaf。
我知道 spring-dm 不受支持,我应该转移到 Blueprint,但我不确定我是否可以像 spring-dm 那样在 Spring 上下文中加载 OSGI bean。Karaf 2.4.4 支持吗?
我不想过多地更改源代码,并且仍然@Autowired
按照我现在使用的方式使用。
作为第一步,我计划用蓝图替换 spring-dm,下一步是将 Spring 3 升级到 Spring 4。这是有效的方法吗?
java - Spring PropertiesFactoryBean 通配符扩展不起作用
我正在尝试使用 PropertiesFactoryBean 加载以.prop
某个目录结尾的所有文件。
当将此作为 Junit 测试运行时,一切工作正常并org.springframework.core.io.support.PropertiesLoaderSupport#loadProperties
获取所有文件的列表(通配符扩展)FileSystemResource
并加载它们。
但是,当在 OSGI 环境(Karaf)中运行时,路径设置为无效,当然PropertiesLoaderSupport#loadProperties
会变得单一。OsgiBundleResource
/etc/app/*.prop