微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 最合适的OSGi平台?

我们目前正在开发一种新软件,我们认为Osgi模块化非常有用,因为软件本身可以很好地分解为模块化结构,以避免将来代码混乱,并能够轻松添加功能并挂钩现有的.

我一直在玩两个(可能是最受欢迎的)Osgi平台,Eclipse Equinox(带有gemini Blueprint)和Apache Felix(带Aries).基本上我现在正在做出决定,我们应该使用哪一个.

我们对Spring有很多经验,所以我们希望继续使用它,以及注释(例如@Autowired用于在SAME包中自动装配bean,@ ServiceReference用于跨包的自动装配),一些特定的Spring插件(例如Data JPA) ),Hibernate作为JPA提供者(到目前为止,我们只有Hibernate作为JPA实现的经验,它具有我们需要的所有功能,因此我们希望避免必须切换到其他东西),JMS消息传递(使用ActiveMQ客户端)和少数其他特性.
稍后,我们还希望能够实现我们自己的安全管理器(以控制对某些捆绑包的访问,基于例如他们的数字签名,其中嵌入了权限的证书)

到目前为止,我已经能够制作两个测试包(一个使用来自另一个的服务)并将它们视为Equinox上的Spring Beans与gemini BP.但是,我在注释方面遇到了一些问题(我并不喜欢在XML中使用布线bean,特别是在架构不那么复杂的情况下 – 大多数都是Singletons).

我也尝试过Aries(但是没有成功在那里启用Spring;可能还没有花足够的时间在那上面:)).

您为此类用例推荐了哪个Osgi平台?

最佳答案
这个可能不是最好的答案,但我认为如果我分享我的经验对你有用.几年前我的情况完全一样.我对Spring,JPA(Hibernate和EclipseLink)很有经验.我发现Osgi模块化很有用,所以我们开始基于Osgi的项目.

正如我以前使用Spring一样,很明显使用Blueprint(我们最终使用的是Apache Aries,因为它比gemini Blueprint更稳定).我们这样做了两年.但是,我们遇到了很多问题,所以我开始根据规范实现一个新的Blueprint容器.我多次听说Osgi DS比较好,但之前我曾经是Spring的粉丝,这些教程并没有让我改变主意.我觉得ConfigAdmin会非常好用,但是使用Blueprint它不可能写出漂亮的代码(我知道有cm命名空间,但它对我们来说效果不好).

在EclipseCon,我和Peter Kriens交谈,他说服我在一个项目上试用DS.我这样做了,现在我对使用蓝图的时间感到非常难过(我不是故意伤害你,白羊座的人:)).声明性服务与ConfigurationAdmin一起设计用于Osgi模块化世界.我很确定我很了解你目前的感受,但如果我真的建议你不要犯同样的错误.尝试使用DS组件创建两个捆绑包,从Felix-configadmin获取配置并感受功能.

从JPA开始,我们使用了第一个EclipseLink.因为太麻烦了,我们切换到了Hibernate.我写了一个适配器以便能够使用它(在GitHub上可用).据我所知,Hibernate现在在这主题上有更多的支持,我从未尝试过.最后,我们决定离开JPA.我们正在将我们的基础设施从JPA替换为Liquibase QueryDSL.这些组件或多或少已准备好在https://github.com/everit-org,我们需要处理文档.如果您有兴趣,为什么我们从JPA切换,请阅读此博客文章中的评论http://blog.osgi.org/2013/12/attributes-attributes-and-attributes.html

我的答案简短:

>如果您因为历史原因(这是一个错误,但我可以理解)而不想使用声明式服务,请使用Apache Aries或gemini BP(您会发现更好).由于Apache Aries是为Osgi创建的,因此为Aries编写的所有命名空间处理程序都可以正常工作. Aries不支持为Spring编写的命名空间处理程序,因为Aries有自己的API.但是,ActiveMQ和其他项目具有Aries命名空间处理程序实现.再一次,我建议考虑使用DS而不是用Java编写代码.如果设计小模块,部署时间不会成为问题.另一方面,您将在配置和稳定性部分获得许多好处.
>带有Hibernate的JPA可以在Osgi中使用.可以在此处找到一个示例:https://github.com/everit-org/osgi-hibernate.如果您使用谷歌,可以获得更多最新示例.我建议你应该看看JPA的工作原理,但它不是Osgi友好的.
>关于引擎:如果您使用Felix,您可以确保您的代码可以在其他容器上运行,如Equinox或Knopflerfish.另外两个具有特殊功能,如果您使用,您可能会遇到以后无法移植代码的问题.我个人使用Equinox,但它有历史原因.

原文地址:https://www.jb51.cc/spring/431743.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐