`
snoopy7713
  • 浏览: 1152629 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

技术选型

阅读更多

技术选型

2.1. 基础架构

  1. IOC Container: Spring , Guice

    我们需要IOC Container的依赖注入作为胶水,把其他工具包粘在一起。还需要它的AOP,进行事务配置,权限管理。

    这么多人都在使用Spring ,实际使用中可以获得巨大的便利,如果选择了其他平台就要面临在关键时刻自己造轮子的窘境。使用Spring 的实际经验更长,方便与其他组件整合。

    Guice是由Google出品的,又使用了JDK5中的注解功能,问题是以后是否能得到很好的支持。

  2. MVC: struts2, struts, JSF, RESTful Framework, SpringMVC

    struts2比struts好用,在了解了OGNL的用法后,还是比较方便的。

    struts毕竟还是老掉牙了。

    JSF好复杂,没有IDE的支持基本没法用,看不清方向。

    RESTfull Framework感觉太草率,有前途吗。

    springmvc现在默认不包含在spring包中了,它的功能太简陋,有些新功能华而不实。

  3. ORM: Hibernate , JPA, iBatis, JDBC

    作为ORM方案,使用hibernate3 对JPA的支持,使用annotation简化配置。

    Hibernate 用起来比较熟,支持多数据库,简化了数据库的操作,目前把所有调优的希望都放在二级缓存上了。

    JPA对于规范不太了解。

    iBatis据称是对JDBC的最简封装,但是与hibernate有太多的区别。

    JDBC根本没进行封装,用起来风险太高。使用封装的框架更容易统一开发。

  4. View: JSP-2.0, Freemarker, Velocity

    严重偏向Freemarker,易用性,扩展性,自定义宏,还可以用在不支持JSP-2.0的服务器上,而且还可以与struts2配合。可是Freemarker并没有合适IDE配合,而且能够熟练使用的程序员也不多。

    JSP-2.0功能明显不足,限制太多,不容易扩展,必须和taglib配合才能对付实际中的工作,taglib又太难写。

    Velocity功能不如Freemarker。

  5. Security: Spring Security , jsecurity, struts menu

    Spring Security作为acegi的升级版本,更易用了,与spring 整合在一起,控制权限。

    jsecurity作为apache孵化器里的项目,有人对它进行了强烈推荐。

    是否还考虑基于struts menu写一套自定义的菜单?

  6. Ajax Widgets: ExtJS , Dojo, YUI, JQuery-UI

    ExtJS 轻便,好用,漂亮,功能强大。只是协议有问题。

    Dojo笨重,难看,都不知道怎么用。

    YUI是ExtJS 的原型,但是封装没有ExtJS 好。

    JQuery-UI还很青涩。

    如果不使用上述这类统一组件库,还可以选择jsCalendar这个日期选择组件,FckEditor和Tiny_mce都是富文本编辑器。据说专 业人士喜欢用FckEditor,喜欢漂亮的都喜欢用Tiny_mce。JavaScriptTemplate可以批量生成HTML。和DWR结合实现上 传进度条等功能。

  7. JS Function Lib: Prototypejs, JQuery, Mootools

    Prototypejs最老。对应的扩展主要有Script.Aculo.us。

    JQuery有强力的查询能力。对应的扩展容易找到。

    Mootools被fin强烈推荐,说OO封装做得很好,但感觉扩展组件不丰富。

  8. JSON: DWR , json-lib

    使用dwrcommmons-fileupload 制作上传文件的进度条。

    考虑使用dwr-2 的服务器推,制作在线聊天。

    与服务器之间交互采用json格式传递数据,目前采用的json-lib 在处理循环引用的时候需要特别设置,否则在处理hibernate 双向关联的时候100%出错。

2.2. 扩展架构

在基础架构上进行的扩展,实现特定功能的工具:

  1. WebService: CXF , XFire, Axis-2

    Axis-2 总感觉很笨重,而且不容易和Spring 结合。

    XFire已经停止开发,后来与Celtix合并为apache中的新项目CXF

    CXF 是由Objectweb Celtix和Codehaus XFire合并成立的。与Axis1 ~2 比较,更易于整合到Spring 中。而且据说支持JAX-WS。不过不知道JAX-WS是干啥的。

  2. 工作流: Jbpm-3 , Jbpm-4 , Osworkflow

    Jbpm-3 是开源中比较火的框架了。但是spring-module-jbpm31封装的有问题,单元测试会报异常。

    Jbpm-4 太新,还是alpha版,而且改动太大了。

    Osworkflow ,号称最灵活的工作流引擎,据说所有实现都要自己写代码。

    两者都支持Hibernate

  3. 规则引擎: drools

    据说是很轻量级的,拥有平民语法的规则引擎。

  4. Search Engine: Hibernate-search , Compass , Lucence

    Compass 同另外一个Hibernate-search 都是基于Lucence ,对数据库的全文搜索引擎。

    Compass 开发的时间更长一些。Hibernate-search 出现的时间还比较短,会用的人少,不知道前途如何。如果两者都不符合,还要考虑自己直接操作Lucence

    之前使用过Compass ,在单元测试的时候会出现内存溢出的问题。

  5. 报表: JasperReport , BIRT, 自定义

    JasperReport 负责文本报表,JFreeChat 图形报表。

    虽然没使用过JasperReport,但已经听到过太多其他人对它的怨言了。

    BIRT没有想像中那样好用,依赖那些eclipse中的包,显得太大了。

    因为东西方习惯差异,自定义属于自己的一套报表应该可以解决国内很多问题。首选答案竟然是手写PDF和JFreeChat 结合生成图表。

  6. JMS: ActiveMQ , Jencks, Lingo

    ActiveMQ 是很多人推荐使用的JMS框架。

    Jencks是一个JCA平台,可以提供J2EE里的资源容器。

    Lingo据说可以把JMS封装成POJO。

  7. 定时调度: Quartz , java.util.Timer

    据说Quartz 是唯一免费的解决方式。这个组件放到web.xml里,可能造成内存泄露。robbin认为这种定时任务不应该和项目绑定在一起,而是应该建立一个单独的任务服务器。

    如果是简单功能,也可以用JDK自带的Timer。

  8. Cluster Cache: Open Terracotta

    被许多公司使用,据说是很强大的分布集群策略。

  9. JMX: Spring封装,MX4j

    Java管理扩展,给人的感觉像是RMI一类的远程调用。

  10. OSGI: equinox, felix

    有点儿反感equinox的笨重,而且equinox是否能和eclipse分离呢?能否独立使用呢?能否能嵌入自己的项目呢?

    felix是apache的项目,而且有maven插件,但是看了源代码之后,感觉太不成熟了。

  11. 动态语言: bsh, groovy, jruby, jython, rhino

    bsh最简单,而且都是java语法,功能也不多。

    rhino只是解析js,也没什么特别功能。

    groovy被期许了很大的希望,受到多方支持,有为数不少的组件,值得考虑一下。

    jruby和jython的话,语法和java相差太大了,基本等于再学一门语言。

2.3. 开发环境

  1. JDK: 5.0, 1.4, 6.0

    5.0的那些特性还是很好用的,而且可以使用Retrotranslator 把5.0编译的class转换成可以在1.4下运行的class。

    推荐使用JRockit-27.2,据说可以解决sun jdk的perm gen内存不足问题。

    6.0有点儿新了,怕出问题。

  2. Servlet Container: Tomcat-5.5 , Weblogic-9/10, Jboss, Geromino, Tomcat-6.0 , Glassfish, Jetty , Resin

    一般人还是用Tomcat-5.5,据说Tomcat-6.0支持OSGI了而且运行方式跟之前都不同了。

    Jetty 还是用在集成测试中。

    之后的迭代里,应该兼容Weblogic, Jboss, Geromino, Glassfish。

  3. 数据库: Hsqldb, Mysql, H2database, Derby, Oracle, SQLServer

    采用hsqldb 作为嵌入式数据库,可与工程绑定发布,用户下载体验版后不需要额外安装数据库,减少了配置出错的机会。

    考虑H2database和Derby,似乎H2功能更强力,Derby出身名门但是不支持commit是个问题。

    Mysql是必须要支持的,因为是免费中使用特别广的。

    SQLServer也是国内很多地方使用的中型数据库。

    Oracle有很多人迷信,的确也是非常常用的大型数据库。

    Hibernate本身支持多数据库,包括Mysql, SQLServer, Oracle等,未来替换成企业数据库也不是问题。

2.4. 测试工具

  1. 单元测试: JUnit-3 , JUnit-4 , TestNG

    JUnit-3 。经典单元测试工具,应用很广,基本所有工具都支持。

    JUnit-4 有点儿新,新功能不太清楚。

    TestNG据说很厉害,但不太熟悉。

    js的单元测试工具 jsunit 不知如何应用。

  2. Mock: EasyMock , JMock, Spring-test

    EasyMock 是老牌了,不需要继承特定的超类。

    JMock需要继承特定超类,属于新框架。

    Spring-test 里提供了很多对付servlet里接口的测试类。它还提供了许多常用的测试基类,可以缓存xml配置并支持事务。

  3. 测试覆盖率: Cobertura , Clover

    Cobertura 发展至今,界面和功能已经接近Clover 了,开源并且没有古怪的协议约束,Maven2 上的配置也比Clover 更简便。

  4. Web集成测试: Selenium

    Selenium 是一款被众口称赞的集成测试工具,使用Firefox的插件录制测试,然后可以翻译成多种平台语言进行自动化测试。

    同类产品还有httpunitjwebunit 。DBUnit可以帮助维护数据库中测试数据的完整,但是无法处理表间双向外键的情况。

    可以使用Maven2 插件进行测试,但是问题是一直没有发布1.0,一直只能使用1.0-SNAPSHOT。

  5. WebService测试: SOAPUI

    据说是唯一的WebService测试工具。

  6. 压力测试: JMeter

    JMeter 听过但是没用过。

2.5. 项目管理

  1. UML: Enterprise Architecture, Rose 2003, Visio, StarUML

    EA不是免费的。

    Rose是名门。

    Visio是画图挺方便。

    StarUML是免费开源方案。

  2. 项目部署工具: Maven2 , Ant

    Ant更灵活,但是对于大规模项目,自己写build.xml再配置所有的插件和各种流程太麻烦了。而且要借助ivy才好管理依赖。

    Maven2 拥有规范的目录结构和流程体系,拥有更易用的插件,还可以统一管理jar依赖,它支持多种插件,进行自动打包,测试,代码分析,生成报表。。问题是从外网下载依赖的时候受网速影响太大,一旦遇到外网缺失的依赖更是无可奈何,必须搭建内部repo。Maven2 的一个问题,在于不知道如何把这么巨大的一个xml文件拆分成多个可以复用的模块。所以也只好采用这种parent的继承关系对所有的依赖和插件进行管理。

  3. 持续集成: CruiseControl, Hudson

    cc是老牌劲旅,但是界面也太难看了。

    Hudson是日本人写的,界面漂亮,所有配置都可以直接通过界面配置。

  4. 代码规范: Jalopy , checkstyle

    Jalopy 用来美化代码,sf.net上的开源项目已经好多年没有更新了,最新的jalopy已经变成了收费的商业项目。不过我们使用几年前的免费项目就足够了。

    Checkstyle 的规范与Jalopy 的美化规范调节一致,就可以放心编写代码了。

  5. 代码检测: PMD, Findbugs, JavaNCSS, Taglist, Jdepend

    PMD, CPD 帮助我们检测无用的代码和重复的代码。

    Findbugs 检测代码中的缺陷。

    JavaNCSS计算有效代码行数。

    Taglist统计代码中的特定标记。

    Jdepend用于统计包之间的依赖性。

  6. 版本控制,缺陷跟踪和WIKI: SVN, JIRA, Confluence

    Subversion作为版本控制工具,JIRA作为缺陷管理,Confluence提供资源库平台。

  7. 数据库版本控制: DBDeploy

    DBDeploy 让数据库脚本也可以实现版本控制。咱们基于dbdeploy扩展的dbside,可以提供db:migrate, db:rollback, db:view等功能。

    使用Hibernate-tools从数据库反向生成领域模型。

  8. Web服务器控制: Cargo

    据说可以统一控制各种Web服务器,比如Tomcat, Jboss, Weblogic

2.6. 杂项

  1. JDK-5.0

  2. 公共Utils工具类。

  3. 日志。

  4. 缓存。

  5. JavaMail。

  6. UTF-8与国际化。

  7. 异常处理。

分享到:
评论

相关推荐

    Java 常用技术选型.docx

    Java技术选型是软件开发中的关键决策,它直接影响项目的稳定性和效率。在Java领域,有众多优秀的框架和技术可供选择,本篇文章将详细讨论一些常用的技术选型及其应用场景。 首先,后端服务框架方面,Dubbo是一款高...

    软件技术选型报告摘要.pdf

    软件技术选型报告摘要.pdf 本报告是软件技术选型报告的摘要,主要内容包括业务和系统的对齐、商务谈判要点、项目第三阶段总体工作计划、ERPERP软件商招标、衡量软件供应商的标准、质量和范围、成本、时间等方面的...

    技术选型方案(开发语言选型)针对java.doc

    在软件开发过程中,技术选型是一项至关重要的决策,它直接影响项目的效率、可维护性和扩展性。本文将深入探讨为何选择Java作为开发语言,并分析其在技术选型中的优势。 Java是一种广泛使用的高级编程语言,由Sun ...

    移动应用开发技术选型策略.pdf

    "移动应用开发技术选型策略" 移动应用开发技术选型策略是企业移动应用开发技术选择的重要组成部分。当前,移动应用的类型和开发模式多样化,企业在选择移动应用和开发技术时面临着很多的挑战。本文对移动应用的分类...

    张辉清-小团队构建大网站之技术选型.pdf

    在构建大型网站的过程中,技术选型对于小团队来说至关重要,因为它直接影响着项目的成功与否和团队的发展潜力。张辉清在《小团队构建大网站之技术选型》中深入探讨了如何进行有效且适应性强的技术选型,以支持团队在...

    技术选型方案(中间件选型)针对Nginx.doc

    **技术选型方案:Nginx 中间件详解** 在当今的互联网环境中,选择合适的中间件对于构建高效、稳定、可扩展的系统至关重要。Nginx作为一款高性能的Web服务器和反向代理服务器,因其出色的性能特性而备受青睐。本文将...

    深度学习技术选型白皮书(2018 年)

    深度学习技术选型白皮书(2018年)是针对当时深度学习领域的一份重要参考资料,旨在为开发者、研究人员以及企业决策者提供全面的深度学习技术对比和选择建议。这份白皮书可能涵盖了以下几个关键知识点: 1. **深度...

    深度学习技术选型白皮书.pdf

    深度学习技术选型白皮书(2018年)由Delphi标签标注,是中国人工智能产业发展联盟的研究成果,于2018年10月发布。白皮书的目的是为企业在应用深度学习技术时提供技术选型参考,并为开源框架及产品的选型评测提供依据...

    技术选型-技术委员会必要的思考-沈剑.pdf

    在沈剑的《技术选型-技术委员会必要的思考》中,他深入探讨了技术委员会的核心职责、职级评审、开源与自研、以及技术落地等方面的问题。 首先,技术委员会的核心职责主要集中在组织人才管理和技术战略两个方面。在...

    企业存储资源池整合及技术选型方案.pptx

    企业存储资源池整合及技术选型方案 本文将对企业存储资源池整合及技术选型方案进行详细的解读和分析,从存储资源池的目标、架构、技术选型、难点及挑战等方面进行详细的探讨。 一、存储资源池的目标 企业存储资源...

    技术选型-DorisDB Vs ClickHouse Vs GreenPlum.pdf

    在进行OLAP(在线分析处理)技术选型时,常常需要对比不同的数据库系统以寻找最适合自己需求的解决方案。本文主要探讨了DorisDB、ClickHouse与GreenPlum三款OLAP数据库,并分析了各自的特点和性能表现。 首先,...

    互联网公司如何正确的做技术选型.pptx

    互联网公司如何正确的做技术选型.pptx

    大数据 OLAP 技术选型.pdf

    大数据 OLAP 技术选型

    05_知其然而知其所以然:如何进行消息队列的技术选型?.zip

    标题中的“05_知其然而知其所以然:如何进行消息队列的技术选型?”表明这是一篇关于深入理解消息队列(Message Queue, MQ)技术选型的文章,旨在帮助读者不仅理解如何使用MQ,还要理解为什么要选择特定的MQ方案。在...

    技术选型方案(数据库选型)针对oracle.doc

    技术选型方案(数据库选型)针对oracle(使用Oracle数据库,有最高认证级别的ISO标准认证,性能极高,保持着开放平台下TPC-D和TPC-C世界记录,有极强的可伸缩性和并行性。)

    云平台技术选型之十:API网关

    云平台技术选型之十:API网关的知识点讲解 API网关(Application Programming Interface Gateway)是微服务架构中用于简化客户端与微服务之间交互的重要组件。在微服务架构中,服务被细分成多个独立部署的服务单元...

    【202007】AIIA发布业界权威AI芯片目录集:AI芯片技术选型目录_97页.pdf

    【202007】AIIA发布业界权威AI芯片目录集:AI芯片技术选型目录_97页.pdf

    10-技术选型.md

    在进行大厂前端项目设计时,技术选型是至关重要的一步。它不仅决定了项目的开发效率、稳定性和维护成本,同时也反映了开发团队的技术能力和对业务需求的理解。技术选型应该基于项目需求、团队技能、社区支持和项目...

    开源技术选型手册--为技术人员提供参考

    本迷你书是《开源技术选型手册》 的精选版,包括Web框架篇、动态语言篇、Ajax开发篇、版本控制篇、项目管理篇(AOP)、面向方面编程篇和面向服务架构篇(SOA)等,作者均为 InfoQ中文站编辑。《开源技术选型手册》由...

Global site tag (gtag.js) - Google Analytics