使用 OSGI 拆分应用程序层是一种好方法吗?
Posted
技术标签:
【中文标题】使用 OSGI 拆分应用程序层是一种好方法吗?【英文标题】:Is it a good approach to split application layers with OSGI [closed] 【发布时间】:2012-06-23 15:16:17 【问题描述】:我有一个具有不同层的 Web 应用程序(即 ui->services->core)。如果我必须更新其中一层,我必须重新启动整个应用程序。所以我决定使用 OSGI 来分离这些层。然后我可以在不重新启动的情况下更新每一层。
这是一个好主意还是 osgi 不是正确的方法?
【问题讨论】:
【参考方案1】:好吧,我不能说它是否是 方法,但 OSGi 肯定是一个好方法。正如 kctang 在其回答中指出的那样,它的学习曲线相当陡峭。然而,它最终会付出代价。您严格的模块化方法允许您实现关注点分离,这是其他框架根本无法实现的。
关于您的具体案例,我最近阅读了OSGi in Depth 的一章,其中他们指出了 OSGi 中的层分离,特别关注云部署。总而言之,远程服务规范将帮助您将层分布到多台机器上,这可以成为企业应用程序的救星。 另一本有趣的书是Enterprise OSGi in Action,但目前只能通过 Manning Early Access Program 获得。
如果我必须批评的话,框架实现者对 JMX 的支持仍然缺失。并不是说您不能以其他方式(编程或非编程方式)管理您的更新,但这会很有用。无论如何,这只是说OSGi还有改进的空间。
【讨论】:
【参考方案2】:如果要避免在开发过程中重新启动整个应用程序,那么 OSGi 不应该是第一个考虑的选项。检查 JRebel/LiveRebel 之类的东西是否能满足您的需求。
虽然 OSGi 可以实现不需要重新启动其他包/层之类的事情 - 如果你做对了 - 恕我直言,它有一些学习曲线才能做到这一点。
进一步阅读:
http://zeroturnaround.com/blog/jrebel-vs-osgi-use-the-right-tool-for-the-right-job/ http://www.theserverside.com/discussions/thread.tss?thread_id=62523 When should I use a platform like OSGI and when it must be avoided?【讨论】:
需要指出的是,JRebel 不是免费软件。 我同意动态重新加载不是使用 OSGi 的主要原因。需要明确的是,使用 OSGi 有很多好处,但动态加载是其中最少的。使用它的主要原因是为了模块化,即你怎么知道你的应用程序是正确分层的?您如何执行该分层,如何隐藏不应直接访问它的层的功能等。但是正如@kctang 指出的那样,如果您不关心模块化,那么 JRebel 是一个很好的商业替代品。以上是关于使用 OSGI 拆分应用程序层是一种好方法吗?的主要内容,如果未能解决你的问题,请参考以下文章
在整个应用程序中使用此 NSManagedObjectContext 是一种好习惯吗