将seam应用程序移动到OSGI

时间:2013-02-28 08:13:03

标签: jboss osgi seam

我使用Seam Framework 2.3 + jBoss AS 7 + Hybernate开发了一些Web应用程序。

由于我一直在研究OSGI,我想知道是否有可能将我的应用程序转移到osgi世界以模块化所有内容;我已经阅读了很多博客和这些有趣的讨论(how-to-modularize-an-enterprise-application-with-osgi-and-ee6how-to-modularize-a-jsf-facelets-spring-application-with-osgi)但老实说我还是不知道应该从哪里开始,因为我之前从未使用过OSGI

据你所知

  1. 是否可以(并且有用)做这些事情?
  2. 根据您的经验,什么是一个很好的起点?
  3. 感谢您的帮助

1 个答案:

答案 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