我使用Seam Framework 2.3 + jBoss AS 7 + Hybernate开发了一些Web应用程序。
由于我一直在研究OSGI,我想知道是否有可能将我的应用程序转移到osgi世界以模块化所有内容;我已经阅读了很多博客和这些有趣的讨论(how-to-modularize-an-enterprise-application-with-osgi-and-ee6和how-to-modularize-a-jsf-facelets-spring-application-with-osgi)但老实说我还是不知道应该从哪里开始,因为我之前从未使用过OSGI
据你所知
感谢您的帮助
答案 0 :(得分:2)
<强>方法强>
可能以玩具应用程序作为尖峰,WAB(OSGi WAR)和单一服务包开始。
绝对采取迭代的方法。据我所知,JBoss通过JBoss modules / msc支持混合OSGi服务和Java EE内容,这将允许您尝试OSGi并逐步迁移。
我认为你会发现有些东西非常容易,而其他东西非常难,所以当你熟悉的时候选择简单的战斗。最后,你可能会采用混合方式。
<强>构建强>
你的构建工具是什么?通常像Maven或Ant,在这种情况下看看maven-bundle-plugin 或分别为bnd。您需要确保每个捆绑包中都存在OSGi元数据(Bundle-SymbolicName,Import-Package,Export-Package等)。如果您使用的是Maven,请参阅this answer。
将单个应用程序划分为模块可能会很棘手,但作为一般规则,当您迁移合理大小的模块时,您应该为API和实现提供单独的包(无论如何这都是好的设计,但对运行时也有影响)
<强>互操作强>
您可以使用注入的BundleContext
中的低级框架API获取OSGi服务,访问包等,这将为您提供OSGi中的低级程序化挂钩。它应该简单:
@Resource
BundleContext context;
除非您的Java EE代码打包为JBoss模块,否则我不认为您可以轻松地调用其他方式(例如,OSGi服务查找Java EE服务),而不需要使用JNDI之类的东西。
您应该能够安装webconsole并查看在OSGi中注册了哪些Java EE位,并类似地检查JNDI以查看可用于Java EE的OSGi。
迁移服务
虽然OSGi非常有趣,但使用原始框架API会产生相当多的样板代码,并且您不太可能需要电源或需要耦合。您可以在OSGi之上使用许多依赖注入框架;蓝图(类似Spring),Peaberry(Guice)和声明服务。
我有偏见但声明式服务与OSGiμ服务模型有很强的亲和力,而且实现很轻。
<强> CDI 强>
我对Seam / CDI知之甚少,但Pax CDI可能会有所帮助(尽管JBoss可能已经介绍了这一点)。
网络强>
您是否计划通过热部署各种组件来实现高度模块化的UI?如果没有那么可能最好将UI打包为WAB。 WAB是一个瘦的WAR(即它导入而不是嵌入大多数依赖项)。即使你是一个高度模块化的,动态的前端,我肯定会在第一次通过时这样做。
<强> JPA 强>
警告 - JPA实现通常在OSGi环境中不能很好地运行,您可能需要查看Apache Aries或Eclipse Gemini。另一个选择可能是将JPA内容保留在Java EE空间中,并将Java EE DAO / Repositories作为OSGi服务进行访问。尽管您可能会遇到一些类加载问题。
可能有用的例子https://docs.jboss.org/author/display/JBOSGI/Provided+Examples