【问题标题】:Move a seam application to OSGI将接缝应用程序移动到 OSGI
【发布时间】:2013-02-14 08:23:48
【问题描述】:

我有一些使用 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. 根据您的经验,什么是一个好的起点?

感谢您的帮助

【问题讨论】:

  • 好的,让我们再试一次..我的问题要么太愚蠢,要么太模糊,也许两者都有:)..我不想有分步指南,我想想知道你们中的一些人是否曾经尝试过我正在尝试做的事情,或者不幸的是我是第一个疯狂的人..我找到了一些关于 eclipse equinox 的文档,但我仍然不知道我应该如何开始。 .理论上我应该简单地将我的应用程序在OSGI服务中提供的每个功能分开,保持实现和接口分开(?)..关于我的xhtml页面,也许我应该用servlet桥或类似的东西来对待它们(?)
  • 但是如何将所有内容放在一起并使用 AS JBoss 7 进行部署?有什么提示吗?我是在尝试做一些不可能或无用的事情吗?谢谢大家

标签: jboss osgi seam


【解决方案1】:

接近

可能从一个玩具应用程序作为一个尖峰、一个 WAB (OSGi WAR) 和单个服务包开始。

一定要采用迭代方法。据我所知,JBoss 支持 OSGi 服务和 Java EE 的混合,通过 JBoss 模块/msc,这将允许您尝试 OSGi 并逐步迁移。

我想你会发现有些事情非常简单,有些事情却非常困难,所以在熟悉的同时选择简单的战斗。最后,您可能会坚持使用混合方法。

构建

您的构建工具是什么?主要像 Maven 或 Ant,在这种情况下,请查看 maven-bundle-pluginbnd。您需要确保 OSGi 元数据存在于每个包中(Bundle-SymbolicName、Import-Package、Export-Package 等)。如果您使用 Maven,请参阅 this answer

将单体应用程序划分为模块可能很棘手,但作为一般规则,当您迁移一个合理大小的模块时,您应该为 API 和实现提供单独的捆绑包(无论如何这都是很好的设计,但对运行时也有影响) .

互操作

您可以使用来自注入的BundleContext 的低级框架API 获取OSGi 服务、访问捆绑包等,这将为您提供进入OSGi 的低级编程挂钩。它应该很简单:

@Resource
BundleContext context;

除非您的 Java EE 代码被打包为 JBoss 模块,否则我认为如果不求助于 JNDI 之类的东西,您很难以其他方式调用(例如 OSGi 服务查找 Java EE 服务)。

您应该能够安装 webconsole 并查看在 OSGi 中注册了哪些 Java EE 位,并类似地检查 JNDI 以查看 Java EE 的可用 OSGi。

迁移服务

虽然 OSGi 很有趣,但使用原始框架 API 会产生相当多的样板代码,而且您不太可能需要强大的功能或想要耦合。您可以在 OSGi 之上使用许多依赖注入框架;例如 blueprint(类似 Spring)、Peaberry(Guice)和声明式服务。

我有偏见,但声明式服务与 OSGi µservice 模型有很强的亲和力,并且实现是轻量级的。

CDI

我对 Seam/CDI 了解不多,但 Pax CDI 可能会有所帮助(尽管 JBoss 可能已经涵盖了这一点)。

网络

您是否计划拥有一个高度模块化的 UI,并热部署各种组件?如果不是,那么最好将 UI 打包为 WAB。 WAB 是一个瘦 WAR(即它导入而不是嵌入大多数依赖项)。即使您追求的是高度模块化、动态的前端,我也肯定会在第一遍就这样做。

JPA

一个警告 - JPA 实现在 OSGi 环境中通常不能很好地发挥作用,您可能想看看 Apache Aries 或 Eclipse Gemini。另一种选择可能是将 JPA 内容留在 Java EE 空间中,并将 Java EE DAO/存储库作为 OSGi 服务访问。同样,尽管您可能会遇到一些类加载问题。

可能有用的例子https://docs.jboss.org/author/display/JBOSGI/Provided+Examples

【讨论】:

  • 如果您正在使用 Spring,或者有使用 Spring 的经验,那么 Blueprint 将比 Declarative Services 更熟悉。
  • 首先非常感谢您的回复,但不幸的是我仍然有点困惑..总结一下您的建议是:我认为 WAB,JPA 和 PojoSR 的 Gemini/Aries其他一切?是的,也许混合方法可能是更好的方法(至少现在是这样)。我会尝试一下,谢谢
  • 感谢您的提示..他们非常受欢迎 ;) 我会试一试..btw,我想继续使用 Seam 2.3 作为框架,并拥有类似 OSGI 层的东西在下面运行(也许我应该说:s)..所以这不是真正的迁移,它更像是一种适应..我从 JPA 的东西开始尝试使用 Eclipse Gemini(但它似乎没有'不支持休眠)我会让你知道它是怎么回事,谢谢你的帮助
  • @Danilo - 适应而不是 100% 迁移肯定不会那么痛苦。您甚至可以将 JPA 的东西留在 EE 端,并从 OSGi 端调用 DAO 等。
猜你喜欢
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2017-02-10
  • 2017-09-09
相关资源
最近更新 更多