成立于2000年的Nuxeo公司是一家开源的企业内容管理领域的专业公司。2006年,他们宣布正在进行从Python到Java的核心技术平台的迁移。四年之后,InfoQ再次采访了Nuxeo的CEO Eric Barroc,以了解这种技术转换的进展情况,以及他们新的技术栈和在ECM领域所处的地位。同时,我们也对动态和静态类型语言各自的优点进行了一些探讨。
ECM市场的发展遵循这样一个常见的模式:起初市场由专业的企业软件提供商如Documentum、Interwoven、Vignette和Stellent所主宰。随后,IBM带着FileNet,微软带着Sharepoint也进入了这个市场。随着这些大型的通用软件提供商进入这个市场,开源软件公司也逐渐成为令人瞩目的参与者。这些开源软件公司包括Nuxeo和Alfresco。按照Barroca的说法,在更普遍的意义上,ECM工具也逐渐成为了一种日用品软件:
大家每天都面临着这样一个问题:如何管理范围日益增加的电子化存储信息,如何识别可能泄露的信息,并避免法律纠纷。理所当然地,随着微软的Sharepoint把基本的内容管理特性和概念交付到主流商业用户的手中,使得ECM产品逐渐成为一种日常能见的技术。我们相信开源软件的成熟和增长,以及近来认可的工业标准都会促使用户将人力物力投入到这个领域中。
与此同时,业务也在寻求实现新系统,更新技术的机会。90年代构建的产品已经走近产品生命周期的终点。现在创建的内容,是移动、社交、开放和互操作的世界,这正是Nuxeo平台架构孜孜以求的目标。
Nuxeo的核心架构构建在Java EE之上,使用Java EE作为主要技术栈并通过OSGi提供的模块系统进行构建。Nuxeo构建了自己的运行库作为其使用的组件模型,例如,它允许在服务端和客户端之间交换调入或调出的EJB服务。
产品大量使用了Java EE的标准,包括:
数据存储抽象层使用JDBC、JPA和JSR-170
事务管理使用JTA (XA),连接池则使用JCA技术(若未提供应用服务器,则使用Apache Geronimo)
Web引擎和REST API使用JAX-RS
UI层使用JSF(与Seam和RichFaces配合使用)
Barroca告诉我们:“这些标准实施良好,虽然组件并非标准,但功能却更加强大,几乎能解决所有问题”。“Lucene、Hibernate、Eclipse以及许多不很知名的组件,使得应用系统的构建变得轻而易举。我们认为Python能很好地运用于许多应用场景,但对于我们的目标市场而言,它并不是合适的技术平台。
Nuxeo产品总共使用了大约100个库。除了Barroca在前面提到的外,关键的库还包括:以jBPM作为工作流引擎、OpenSocial和OAuth的内嵌控件和社交特性(Apache Shindig),以及Apache Chemistry提供的CMIS(内容管理互操作服务)。
系统的构建基于Maven和Hudson,并以JUnit作为单元测试框架。目前,产品支持JBoss、Tomcat和Jetty,而且平台的大部分内容也能够运行于纯粹的OSGi之上。要增添一个新的支持Nuxeo运行的应用服务器还是比较快的,几天就能完成相应的工作。
Java库所具有的深度和广度是转换到Java平台的一个主要动力,但Barroca还提到了其他原因。
市场:Java应用系统的市场非常庞大。所有的公司都知道Java技术,大多数公司也在使用Java应用系统。很多公司在IT系统中使用了Java技术。所有的系统集成商都具有广博的Java知识。
社区: 同样庞大。例如,Java Apache社区就非常了得。每年都有一些关于Java技术的大型会议(JavaOne、ApacheCon、Devoxx、Jazoon等等),以及成百上千的小型会议。
技术规范:在Java世界中,很多技术都有基于已发表的技术规范的实现与参考实现。这有助于规范的清晰化,代码的互操作性,同时也推动了规范的实现者去做到极致。
我们还受益于许多高水平的工具。这些工具包括虚拟机、调试工具、集成开发环境以及监控和性能定基等。
Barroca谈到了重新构建的平台架构与开源开发模型在ECM领域开辟了新的市场,使得Nuxeo占据了有利的位置。
新型的独立软件提供商(ISV)正在使用ECM 平台,将业务知识打包到软件中,以创建和销售这些内容应用。从建筑项目管理和生物科技与生命科学的临床试验管理,到州和地方政府控制指挥中心所使用的软件,这些应用跨越了不同行业和职能部门。
我们平台的灵活性和融合了开源技术的软件特性为开发内容应用的架构师和开发者提供了便利。这种开发模式使得新的构建内容应用方式变得简单,清晰,快速。
开源ECM也带动了内容管理市场发展出新的需求。之前,企业之所以没有部署ECM,是因为高昂的前期费用,或者缺乏对所构建和定制的应用系统的控制。现在,这些问题有了新的解决方案。
一个备选方案是在JVM上运行Jython编写的程序,因为Jython是用Java编写,以JVM作为目标运行平台的Python实现。但Nuxeo没有采用这个方案。
我们不惜时间,希望能够实实在在地利用在ECM解决方案积累的六年经验,按照我们的想法去从头构建一个完整的平台。这不仅是编程语言的转换,也是平台的转换。我们要创建一个完整的ECM平台,由开发者所设计,为开发者而设计,那些ECM厂商还停留在口头上的想法,我们却在技术上将他们变成了现实。在这个行当里,很多商业软件厂商的扩张策略是通过并购来构建自己的软件产品线。但他们只有一套软件,却没有一个技术平台。在过去的四年里,我们已经可以构建完整的技术平台,并通过它来创建内容应用。
考虑到Nuxeo系统的项目被重新设计和重写了,我们该如何比较两个系统之间的差异。
在性能方面,取决于你的度量值,新的系统在规模上至少提升了10到100倍。功能特性的数量增加了大约4倍。在开发者的兼容性和易用性方面,不仅保持了先前的优点,还提供了更多的工具和体验。新平台的整体表现比旧平台翻了一番,但离翻两番的提升还有些差距。
起初的转化工作花费了超过55个人年的工作——而Barroca之前粗略的估计是10-20个人年的开发代价。
如果算上其他贡献者和持续的开发,我们花费了150——200个人年。但是我不是很喜欢用人年来衡量软件开发,因为对于开发者而言,都没有谁有固定的人年值,更何况公司呢。我们有一个非常资深的开发团队。
那么,Nuxeo的老用户对于这个改变的反应如何呢?Barroa告诉我们:
从安装数量上看,约80%的客户可以接受这个改变。对于那些不愿采用新平台的机构,可由社区的力量来保证对旧平台的继续支持。这就是开源开发模式的迷人之处。一种技术能够存活依赖于用户和开发者群,我们把这看作一种“有未来”的优势。
既然Nuxeo同时使用了Python和Java,因此有必要谈谈这两种语言的优点。通常的主张是动态语言有着更快的编码速度,因为他们天生具有更强的表现力。静态语言则可以在测试阶段节省更多的时间,因为缺乏类型信息使得用动态语言编写的代码更难测试,而且动态语言也比静态语言运行速度慢,扩展时所需代价更大。Barroca告诉我们:
在研发Nuxeo的实践中,我们同时使用了动态类型语言和静态类型语言(Python和Java)来编写大规模的应用系统,其中有成千上万个类,数以百万计的代码行规模,我们可以肯定地说静态类型语言更适合编写此类应用系统。
使用静态类型语言编程,我们可以对编写的代码进行有效的静态分析,这会带来如下的好处:
集成开发环境可以提供正确的代码自动补全
集成开发环境可以知道所有类中所有方法和字段的用法,便于搜索和重构
更多的编译时检查
发现代码中存在的模式和缺陷的工具
根据代码使用的实际类型生成文档的工具
在绝大多数的情况下,动态类型语言的方法总是接受同一种类型的参数,所以除了少输入一下参数的类型外,动态语言不会带来任何好处。但静态类型语言使用显式类型,这不但没有任何阻碍,并且它本身也是好的文档。
另一种情形是,当需要真正的多态时,现代的静态语言提供了泛型,以此获得一部分(并非全部)动态类型语言的优势。
有些时候,例如Python、Javascript、Ruby和其他动态类型语言,体现出来的另一种优势是,可以在运行时修补一个对象实例,给它添加行为(在Python领域,这常被称作Monkey Patching)。这好像不错,但它对理解代码,代码静态分析,调试等来说就太糟了。它可能在修修补补时很方便,但从长期来看,并不是个好办法。
最后,动态类型语言也提供了反射工具来找出一个未知类型对象的属性和方法,但是Java从Java 5开始早就有这些特性了,所以动态类型语言在这方面也没有什么优势。
Barroca希望深入探索最近在Java EE 6和Java SE 7中发布或者即将要发布的技术。这些技术包括:模块系统、JSF 2、Bean验证、媒体组件和新的NIO库。他仍然相信Java对他们的产品而言是最好的技术。
我们也为我们所创造的技术而感到自豪,从运行时到我们在高层(包括UI)所创建的模块。它并没有被公开,因为我们完全将其看作是ECM的一部分。但平台中仍有一些好东西有助于改善Java应用程序。扩展系统、基于Seam/JSF的模块化UI、分布式汇编引擎和许多组件都是我们在创建模块化Java应用系统时,频繁用到的重要技术。在定制基于Nuxeo的应用系统时,不需要分离出UI来单独定制,你可以通过插件来完成。这是一个非常开放和可扩展的模型。
- 浏览: 287562 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- jsf (16)
- 技术 (1)
- seam (27)
- jpa/hibernate (6)
- seam-对话 (3)
- 复用组件 (1)
- java基础 (18)
- JBOSS (1)
- Facelets (3)
- EL表达式 (2)
- 正则表达式 (1)
- sogi (2)
- 工具 (2)
- 设计模式/重构 (2)
- 项目管理-maven (5)
- EJB (1)
- ClassLoader (2)
- eclipse (1)
- jQuery (0)
- seam2源码分析 (0)
- osgi (0)
- TEST (0)
- 日志记录 (1)
- 批处理工作流 (0)
- 业务需求 (0)
- 语言 (2)
- 架构 (2)
- svn (1)
- sql (1)
- 异常处理 (1)
- mybatis (2)
- http (2)
- 代码可读性 (3)
- 配置化 (0)
- 错误恢复 (0)
- 状态查询 (1)
- 误操作恢复 (0)
- 工作安排 (0)
- 自动化 (0)
- 解耦 (1)
- 交流 (1)
- spring (6)
- 代码质量 (2)
- 方案 (1)
- 分布式 (1)
- mvc (2)
最新评论
-
luchuanbaker:
经过测试,实际上,mybatis并没有此问题,我也碰到了这样的 ...
mybatis 异常不友好 举例 -
huang882088:
jboss的war发布到tomcat里报这个错误怎么办?
classloader常见问题总结 -
yourenyouyu2008:
大型,可持续扩展的系统适合使用静态语言。大型系统中的部分地方可 ...
Nuxeo公司探秘:从Python迁移到Java -
yourenyouyu2008:
既然Nuxeo同时使用了Pytho ...
Nuxeo公司探秘:从Python迁移到Java -
panshunchang:
还有一种可能,真的缺这个jar包,在tomcat lib目录下 ...
classloader常见问题总结
评论
2 楼
yourenyouyu2008
2013-07-21
大型,可持续扩展的系统适合使用静态语言。大型系统中的部分地方可以使用动态语言。
动态语言会受到规模和可维护性的限制。
动态语言会受到规模和可维护性的限制。
1 楼
yourenyouyu2008
2013-07-21
既然Nuxeo同时使用了Python和Java,因此有必要谈谈这两种语言的优点。通常的主张是动态语言有着更快的编码速度,因为他们天生具有更强的表现力。静态语言则可以在测试阶段节省更多的时间,因为缺乏类型信息使得用动态语言编写的代码更难测试,而且动态语言也比静态语言运行速度慢,扩展时所需代价更大。Barroca告诉我们:
在研发Nuxeo的实践中,我们同时使用了动态类型语言和静态类型语言(Python和Java)来编写大规模的应用系统,其中有成千上万个类,数以百万计的代码行规模,我们可以肯定地说静态类型语言更适合编写此类应用系统。
使用静态类型语言编程,我们可以对编写的代码进行有效的静态分析,这会带来如下的好处:
集成开发环境可以提供正确的代码自动补全
集成开发环境可以知道所有类中所有方法和字段的用法,便于搜索和重构
更多的编译时检查
发现代码中存在的模式和缺陷的工具
根据代码使用的实际类型生成文档的工具
在绝大多数的情况下,动态类型语言的方法总是接受同一种类型的参数,所以除了少输入一下参数的类型外,动态语言不会带来任何好处。但静态类型语言使用显式类型,这不但没有任何阻碍,并且它本身也是好的文档。
另一种情形是,当需要真正的多态时,现代的静态语言提供了泛型,以此获得一部分(并非全部)动态类型语言的优势。
有些时候,例如Python、Javascript、Ruby和其他动态类型语言,体现出来的另一种优势是,可以在运行时修补一个对象实例,给它添加行为(在Python领域,这常被称作Monkey Patching)。这好像不错,但它对理解代码,代码静态分析,调试等来说就太糟了。它可能在修修补补时很方便,但从长期来看,并不是个好办法。
在研发Nuxeo的实践中,我们同时使用了动态类型语言和静态类型语言(Python和Java)来编写大规模的应用系统,其中有成千上万个类,数以百万计的代码行规模,我们可以肯定地说静态类型语言更适合编写此类应用系统。
使用静态类型语言编程,我们可以对编写的代码进行有效的静态分析,这会带来如下的好处:
集成开发环境可以提供正确的代码自动补全
集成开发环境可以知道所有类中所有方法和字段的用法,便于搜索和重构
更多的编译时检查
发现代码中存在的模式和缺陷的工具
根据代码使用的实际类型生成文档的工具
在绝大多数的情况下,动态类型语言的方法总是接受同一种类型的参数,所以除了少输入一下参数的类型外,动态语言不会带来任何好处。但静态类型语言使用显式类型,这不但没有任何阻碍,并且它本身也是好的文档。
另一种情形是,当需要真正的多态时,现代的静态语言提供了泛型,以此获得一部分(并非全部)动态类型语言的优势。
有些时候,例如Python、Javascript、Ruby和其他动态类型语言,体现出来的另一种优势是,可以在运行时修补一个对象实例,给它添加行为(在Python领域,这常被称作Monkey Patching)。这好像不错,但它对理解代码,代码静态分析,调试等来说就太糟了。它可能在修修补补时很方便,但从长期来看,并不是个好办法。
发表评论
-
spring seam比较
2014-01-14 14:06 9601)获取框架中的bean spring通过静态方法中传递 ... -
spring mvc公用controller直接访问不同页面
2013-12-18 18:18 5101spring mvc 是传统的以controller为中心的 ... -
复杂数据库查询 还是简单查询+程序处理
2013-09-24 17:05 01)多个人要在一个对象上上传资源,显示对象上的资源要求最多 ... -
java语言优势
2013-07-21 13:13 9301)跨平台性是java语言的原始特性 2)大多数通用解决方 ... -
自定义组件问题
2013-03-01 10:14 01)ios:dataTable组件中不加buttonPane ... -
seam中内嵌的事务回滚拦截器RollbackInterceptor
2012-12-28 15:17 2122seam中有两种事务管理方 ... -
普通下载过程
2012-12-26 13:27 0简单的web下载过程类似如下: 1)ServletOutpu ... -
使用JTA的事务同步机制实现分布式事务j的功能avax.transaction.Synchronization
2012-12-05 18:43 0分布式事务强大功能,但也会带来性能和管理上的压力(这是听专家门 ... -
jsf动态页面
2012-09-17 12:25 1620所谓动态页面就是指页面上的字段是不固定的,比如常见的动态参数, ... -
seam中的test
2012-04-25 11:25 0seam中提供了一些非seam环境下的unit testing ... -
Hibernate的FlushMode 和seam对话中的FlushMode
2012-02-21 17:29 0hibernate提供了5种flushmode。 1) NE ... -
seam 中的注释分类
2012-02-14 11:08 0seam中注释主要分为2大类,seam组件对象构造阶段的注释和 ... -
seam2 热部署
2011-09-30 10:25 1204seam能很好地支持 页面(faceslet)、非ejb cl ... -
使用长对话的"manual" flush-mode ,多操作一次提交
2011-03-24 10:27 1547一次长对话访问中可以包括多个页面,每个页面只处理部分数据,但不 ... -
Action逻辑分离及顺序问题
2011-03-23 17:47 1773逻辑分离 <a4j:commandLink act ... -
验证器、转换器
2011-03-10 10:50 1535同一namespace下的tag不能定义到多个文件中,不支持模 ... -
seam 属性配置与installed="false"的冲突
2011-03-08 15:09 1125问题 在测试和运行环境使用不同的事务配置,默认不需要指定事务 ... -
最简单的richfaces tree使用方式
2010-10-30 12:54 2366richfaces tree提供的示例都是一次全部构造出树,对 ... -
转换器和验证器中使用表达式的限制
2010-06-27 17:14 1147限制 有个需求要对订单项中的数量进行库存验证 ,想到给验证器 ... -
在页面给 jsf inputHidden 赋值
2010-06-08 21:07 4123在jsf中使用hidden不像在传统jsp中使用那样直接,无法 ...
相关推荐
Nuxeo驱动器 Nuxeo的桌面同步客户端 这是一个正在进行的开发项目...可以从“主页” >“ Nuxeo驱动器”选项卡或从下载桌面客户端。 始终可以在这些静态URL上找到最新的官方发行版: 配置和用法 常规用法 启动Nuxeo Driv
关于新元素Nuxeo Elements帮助开发人员使用使用Nuxeo构建自定义元素和Web应用程序。 它建立在顶部。依存关系要安装项目的依赖项: npm installnpm run bootstrap注意:此版本的Nuxeo Elements要求节点版本> = 10.23....
nuxeo-路线图 Nuxeo 路线图的 Javascript 单页可视化工具,查询 Jira 以显示内容。 该网站位于: : 本地安装(无 apache) 如果您安装了以下程序,以下说明适用于任何操作系统: 混帐 Python 1. 使用 git签出...
doc.nuxeo.com 发展 要求 确保您的“隐私和安全性”设置允许从任何地方下载应用程序 。 使用ssh -T git@github.com测试访问权限-请参见以获取帮助。 —最新的活动LTS:请参阅(例如v8.11.3) nvm install会得到...
nuxeo-core-binarymanager-s3-5.4.2.jar
Nuxeo CLI是一个命令行界面,用于帮助围绕Nuxeo生态系统的开发人员。 它提供项目自举,捆绑热重装,... 概述 Nuxeo CLI包括一些用于处理Nuxeo项目的命令 bootstrap:Bootstrap Nuxeo项目,捆绑软件或几个组件 ...
集成 Nuxeo 和 Drupal 这个项目的目标是解释 Nuxeo 如何与 Drupal 7 集成。这个想法是在像文章这样的节点中创建一个新字段来选择和显示 Nuxeo 内容。 这也可以看作是在 Drupal 7 中设置自定义字段所需要的。 安装和...
Nuxeo 8.x技术文档中的《Nuxeo Platform 8.x Technical Documentation.pdf》详细阐述了这些内容,涵盖了从基础概念到高级特性的全方位教程,包括示例代码、配置示例和最佳实践,是开发者进行Nuxeo集成开发的宝贵资源...
此外,Nuxeo还提供了多种语言的客户端SDK,如Python、JavaScript、JavaFX等,使得开发者可以根据项目需求选择合适的开发工具。 Nuxeo API文档通常包含以下几个关键部分: 1. **入门指南**:介绍如何设置开发环境,...
【描述】提到这个项目已经迁移到了"gitbub/nuxeo-sandbox/nuxeo-datademo",这表明它是Nuxeo社区的一个沙箱项目,用于实验和测试新功能。"不再使用此存储库"的提示意味着原始的GitHub仓库已被弃用,用户应该转到新的...
/src/test/java/TestGoogleProvider.java 如果您没有密钥或谷歌帐户,您可以在创建一个 假设您的系统上安装了 (3.2.1),下载整个存储库后,执行以下命令: mvn install 部署 将 jar 文件放在 nxserver/bundles 中 ...
Nuxeo Web UI 关于 Nuxeo Web UI是Nuxeo平台的标准基础Web应用程序。 它是高度可定制和可扩展的,是通过并利用我们的自定义元素库开发的。 安装依赖项 npm install 注意:此版本的Nuxeo Web UI要求节点版本> = ...
所述库被移到了的的文件夹库,将其转化成monorepo。 此存储库上的工作仅应在维护分支上进行。 执照 (C)Nuxeo Corp.( )版权所有 此文件夹中包含的所有图像,图标,字体和视频均受Nuxeo版权保护,并保留所有...
:police_car_light: 移至 :... Nuxeo平台和产品将强大的应用程序开发环境与基于SaaS的工具和模块化体系结构相结合,为Verizon,Electronic Arts,Sharp,FICO,US Navy和Boeing等一些最知名的品牌提供了清晰的商业价值
nuxeo-scim服务器关于该Nuxeo插件在Nuxeo ... 注:因为所有的测试都依赖于ScimCore提供神器ScimProxy ,它可能是有意义的所有Nuxeo的实现切换到这个lib和下降的依赖ScimSDK 。建造mvn clean install地位快速状态
Nuxeo是一个强大的开源内容管理平台,专为各种企业及档案机构设计,提供高效的内容管理和档案管理解决方案。在深入探讨Nuxeo8.x用户管理文档之前,先了解一下Nuxeo的核心功能和架构。 Nuxeo平台的核心是其文档管理...
这个是org.nuxeo.common的jar包,还有很多有用工具,我还喜欢里面的FileUtils,感觉比apache提供的强大许多啊。 此jar包的详细版本和更高版本的下载方式请参看 http://blog.lifangeye.info/?p=400
请转到包含更多功能的 :选择您要使用的工具(ImageMagick、GraphicsMagick、ExifTool),从该工具处理的任何文件类型中获取元数据(例如获取幻灯片的数量) .pptx 演示文稿),并写入元数据。关于 - 要求nuxeo-...
Nuxeo.io docker 镜像:Kibana 由门卫保护 该存储库保存了 Kibana 的Kibana ,该文件由doorman保护,该文件在中使用 图片信息 基础镜像:dockerfile/nodejs Kibana 版本:4.0.2 门卫版:主人 Docker 镜像环境变量 ...
Nuxeo的Ansible Playbook套装目录该存储库包含Ansible Playbook软件包,用于部署Nuxeo内容服务平台容器本身及其依赖的后备服务容器。 有关详细信息,请参见文档和文档页面。 被推送到DockerHub中的组织中。 要激活...