当前位置: 首页 > 工具软件 > Nuxeo ECM > 使用案例 >

nuxeo_赶上Nuxeo:从Python切换到Java

戈宏义
2023-12-01

nuxeo

Nuxeo成立于2000年,是一家开源企业内容管理(ECM)专业公司。 在2006年,他们宣布将核心技术平台从Python更改为Java。 在InfoQ上度过了四年的时光,与Nuxeo首席执行官Eric Barroca取得了联系,以了解这种转换是如何进行的,并探索了他们的新技术堆栈以及在ECM行业中的地位。 我们还花了一些时间讨论动态和静态类型语言的相对优点。

ECM市场遵循一种熟悉的模式。 最初它由Documentum,Interwoven,Vignette和Stellent等专业专有厂商主导。 市场确立之后,大型的通用软件供应商(包括FileNet的IBM,Sharepoint的Microsoft等)进入了市场。 包括Nuxeo和Alfresco在内的开源公司也已成为重要参与者。 根据Barroca的说法,更笼统地说,ECM工具正逐渐成为一种商品:

认识到有一天可能会受到法律披露,每个人都面临着管理越来越多样化的电子存储信息的挑战。 因此,毫不奇怪,随着Microsoft Sharepoint将基本的内容管理功能和概念交到了主流业务用户的手中,ECM已成为商品化的技术领域。 我们相信,开放源代码的成熟和发展以及最近批准的行业标准也正在推动改变客户将其时间和财务资源投入的方式。

同时,企业正在寻求实施新系统并更新其技术。 1990年代制造的产品现在已经达到其有用产品生命周期的自然终点。 现在,内容是在移动,社交,开放和可互操作的世界中创建的,这是Nuxeo平台经过设计可满足的世界。

该核心体系结构是使用Java EE作为主要技术堆栈构建的,而OSGi提供了模块系统。 Nuxeo已将其自己的运行时构建为组件模型,该组件模型例如用于允许服务和客户端切换进出EJB的使用。

该产品充分利用了Java EE标准,其中包括:

Barroca告诉我们:“这些标准可以通过非标准化的标准很好地完成,但是可以解决几乎所有问题的强大组件。” “ Lucene,Hibernate,Eclipse和许多其他鲜为人知的组件使今天的应用程序构建变得更加容易。我们确实认为Python在许多用例中都很有用;对于我们的愿景和市场来说,这不是一个合适的平台定位。”

Nuxeo产品总共使用约100个库。 以及Barroca所引用的其他主要关键字包括: jBPM作为流程引擎, OpenSocialOAuth用于小部件包含和社交功能( Apache Shindig ),以及Apache Chemistry用于CMIS。

该构建系统基于MavenHudson ,并以JUnit作为单元测试框架。 该产品目前支持JBossTomcatJetty ,尽管大多数平台也可以在裸OSGi上运行。 根据Nuxeo的说法,添加对新应用程序服务器的支持大约需要几天时间,这是一项相对较快的工作。

Java库的范围和深度是切换到Java的主要驱动力之一,但Barroca还提供了其他一些原因

市场 :Java应用程序的市场巨大。 所有公司都知道Java。 大多数已经在运行Java应用程序。 许多公司的IT都需要Java。 所有系统集成商都具有广泛的Java知识。
社区 :又是巨大的。 例如,Java Apache社区非常庞大。 围绕Java的大型年度大会(JavaOne,ApacheCon,Devoxx,Jazoon等)以及数百个小型的年度大会。
规范 :Java世界中的许多技术都是基于已发布的规范,这些规范具有许多实现和参考实现。 这将促进规范的规范,可互操作的代码,并推动实现者尽力而为。

我们还从可用的高级工具中受益。 从VM本身,到调试工具,IDE,监控,性能基准等。

Barroca认为,经过重新架构的平台和开放源代码开发模型正在ECM领域内开拓新市场,而Nuxeo可以充分利用这一优势

一类新的ISV正在使用ECM平台方法将业务知识打包到软件中,以创建和销售这些内容应用程序。 这些示例涵盖了多个行业和职能,从用于生物技术和生命科学的建设项目管理和临床试验管理,到州和地方政府的控制和指挥中心的软件。

我们平台的灵活性和功能范围与软件的开放源代码相结合,简化了内容应用程序设计师和开发人员的生活。 开发模型提供了一种构建内容应用程序的新方式-一种更轻松,更干净,更快的方式。

开源ECM也正在推动内容管理市场中全新的需求来源。 以前由于高昂的前期成本或无法控制其应用程序构建和自定义而未部署ECM的组织现在有了新的选择。

允许Nuxeo使用JVM平台的另一种方法是使用Jython ,它是用Java编写的针对JVM的Python实现。 但是Nuxeo没有考虑到这一点

我们想花时间实际使用我们六年的经验来构建ECM解决方案,以从零开始实现我们的愿景来设计和构建完整的平台。 这不仅是语言上的举措,还是平台上的举措。 我们想要创建一个完整的ECM平台,由开发人员为开发人员设计,以实现所有供应商都在谈论ECM的愿景,但实际上没有一家在技术上实现。 当您尝试通过收购来构建软件时(这是我们这个领域许多专有供应商的增长策略),您没有平台,却有软件套件。 在过去的四年中,我们已经能够构建一个完整的技术平台来创建内容应用程序。

鉴于该项目是对原始Nuxeo系统的重新设计/重写,我们围绕这两个系统的比较方式进行了一些探索。

在性能方面,我想说的是,根据您采用的指标,我们的规模可以扩大10到100倍。 就功能而言,它大约是我们拥有的范围的4倍。 就开发人员的兼容性和易用性而言,大致相同,但具有更多的工具和经验。 我们已经能够将旧平台上的功能增加一倍,甚至两倍。

对于拥有55名员工的公司来说,最初的转换工作花费了一年多的时间– Barroca估计大约需要10-20个人年的开发人员精力。 从那里

..如果我们将贡献和持续发展包括在内的话,我们大约在150-200个人年。 但是我真的不喜欢用人年来衡量软件开发,因为在开发人员(更不用说公司)中,“开发人年”没有固定的价值。 而且我们有一支非常认真的开发团队。

我也对Nuxeo的现有客户如何应对这一变化感兴趣。 巴罗卡告诉我们

更改后,大约80%的安装基础都可以。 对于那些不想搬家的组织,社区的力量向前迈进,以确保获得持续的支持。 这就是开源开发模型的美-当有一群坚定的用户和开发人员时,该技术可以生存,我们认为这是“面向未来”的优势。

由于Nuxeo广泛使用了Python和Java,因此我们讨论了这两种语言的相对优点。 通常,动态语言的拥护者认为,由于语言固有地更具表达力,因此它们的编码速度更快。 静态语言的提倡者反驳说,在测试中浪费了开发时间,在这种情况下,类型信息的缺乏使测试变得更加困难,并且由于动态语言通常比静态类型的语言要慢,因此扩展规模往往更昂贵。 巴罗卡告诉我们:

在Nuxeo,我们已经实践了动态和静态类型的语言(Python和Java)来编写具有数千个类和成千上万行代码的大规模应用程序,我们可以毫无疑问地说静态类型的语言更适合于这样的应用。

使用静态类型的语言,您可以对代码执行高效的静态分析,从而为您提供:

  • 具有适当自动补全功能的IDE
  • 一个知道所有类中给定方法或字段的所有用法的IDE,从而极大地改善了搜索和重构
  • 许多编译时检查
  • 在代码中查找模式和错误的工具
  • 根据代码中使用的实际类型提取文档的工具

在大多数情况下,使用动态类型语言时,您的方法实际上总是接收相同类型的参数,因此,动态性除了带给您较少类型的参数类型外,实际上并没有给您带来任何好处-而是将类型显式地使用静态类型语言很少有障碍,而且总是很好的文档。

如果不是这种情况,并且您具有真正的多态性,那么现代的静态类型语言将为您提供泛型,以获取动态类型语言的某些(并非全部)好处。

有时在动态类型化语言(如Python,JavaScript,Ruby和其他语言)中看到的另一个优点是,您可以在运行时进行修补
对象(甚至是类)的实例以向其添加行为(在Python中,这通常称为“猴子修补”)。 这看起来不错,
但是对于代码的理解,静态分析,调试等而言,这太可怕了。尽管对黑客很有帮助,但从长远来看,这并不是一个好主意。

Barroca期待探索Java EE 6和Java SE 7中最近发布和即将发布的一些技术,包括模块系统,JSF 2,Bean验证,媒体组件和新的NIO库。 他仍然坚信Java是其产品的最佳技术。

从运行时到高度模块化(包括UI)的高级层,我们也为我们创造的技术感到自豪。 它并不是很暴露,因为我们已经完全定位为ECM播放器,但是平台中有一些宝石可以使许多Java应用程序受益。 扩展系统,基于Seam / JSF的模块化UI,分发组装引擎以及许多其他组件都是严肃的技术,在创建模块化Java应用程序时非常有用。 使用基于Nuxeo的应用程序进行自定义时,您无需派生UI对其进行自定义,而是使用插件对其进行了贡献。 这是一个非常开放和可扩展的模型。

翻译自: https://www.infoq.com/articles/nuxeo_python_to_java/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

nuxeo

 类似资料: