Hey,buddy:What's up?

Happy&Optimistic&Effective

BlogJava 首页 新随笔 联系 聚合 管理
  14 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks
注:目前J2EE的开发工作网络上讨论的热火朝天,各种新技术层出不穷,当然了我们这些新手看的也是一头雾水,感觉的j2ee涉及到的技术太广,各种framework令人眼花缭乱,今天看了这篇介绍性文章,感觉不错,和大家分享一下文章的主要观点。(其中提到的一些技术或规范可能比较老了,主要是学习一下作者的观点)

 1.结合商业需求选择合理的架构
一般而言,企业信息系统(EIS)都要求自己稳定、安全、可靠、高效、便于维护。同时,各个企业信息系统都有自己独特的要求,可能有些时候需要考虑与原有遗留系统的集成,所以了解各个企业信息系统具体的商业需求对于整个系统的架构显得很关键。

  比如,如果待开发的J2EE应用系统中使用到的数据大部分来自于外在数据源;而这些数据可能是通过JDBC直接从外在数据源导入到待开发的J2EE系统的Database中。对于这种情形,如果在开发过程中,仅仅使用JDBC来操作数据库,对于小强度(并发访问用户少、数据流量少)的情形,显然是比较合适的;但如果,并发访问用户较多、数据流量大,对Database层使用较为频繁的情形,则显得有些力不从心。因此,对于这种需求,我们可以考虑采用Entity Beans with Caches。打个比方,在JBoss 3.2.1中对于Entity BeansCache策略有多种,这时可以考虑使用,,即“Standard CMP 2.x EntityBean”,方式并采用“D”类型的commit-option来保证Entity Beans的内容与数据源的同步,并使得系统的性能得到大大改善(同直接使用JDBC相比)。其中,可以将一些Entity Beans设置为read-only,以改善性能。当然,在这里也可以采用其他一些O/R Mapping技术,比如TopLink

  再比如,考虑这样一种情形:如果待开发的企业信息系统使用到的数据都是由系统本身生成和操作的,则建议采用:CMP Entity Beans技术。Entity Beans给大家的印象很坏,这可能与EJB 1.1给大家留下的坏映象有关吧。但是,EJB 2.0(或者说2.1)得到了很大的改善,Local InterfacesCMRRead-OnlySession Fa?ade模式给Entity Beans注入了活力。当然,并发用户多、数据流量很大时才会体现出使用Entity Beans的优势。其中,有一点很关键:要注重Entity Beans技术的性能调优,各个应用服务器都有自己的一套性能调优方案。对于JBoss 3.2.1,配置文件standardjboss.xml提供了Entity Beans技术调优的入口。比如,Bean Lock策略的合理使用对于Entity Beans的调优就显得很重要。这样使得,我们可以更加关注于系统的商业逻辑,而不只是底层的DatabaseEJB调优处于EJB Container中,因此我们处在J2EE性能的高端,而不是底端,即Database层。同时,Database层的调优使得J2EE系统的数据库移植性大打折扣。)。

  简而言之,要结合各个系统的特定需求和状况给出具体的技术架构方案,而不能孤单的论述技术本身的好坏。

2.Framework的合理选用
设计模式在J2EE应用系统中扮演着重要的角色。因此,有一个问题摆在大家面前,是自己来实现具体的设计模式,还是借助于Third-party Framework。如果贵公司不大,或者说公司不想在J2EE基础应用Framework投入很多精力,选用现有的较为成熟的、稳定、与现有J2EE Specification兼容的技术框架会比较明智。

  一般而言,Framework本身,或者说J2EE平台本身都是实现并优化了具体的设计模式、规则,比如业务代理、Service Locator(包括Web TierEJB Tier各自的服务定位器,起到统一管理有限资源、Cache相关资源的作用,便于系统移植)、Front ControllerDAO等等。现有的J2EE Framework比较丰富。比如:
  Struts: 对于实现了Model 2类型的Framework,对于现在以及将来(随着JSF规范、技术的成熟),选用她是一种明智之举。目前,Struts已经发展到1.1版本。其内在的MVC主线、对后端数据操作方式没有限定、集合了Apache Jakarta项目组的优秀相关项目的精华,可谓是开发J2EE应用的佳品。同时,对于具有.NET Web Forms功能的下一代J2EE平台技术JSF而言,Struts本身可考虑到与JSF的兼容和集成性。比如,通过JSP呈现表示层、Servlet呈现控制层、EJB呈现数据存储层。各层之间,可以通过值对象、HTTP相关对象来通讯,实现J2EE相关技术的完美应用。
   一般情况下,待开发的目标产品不宜采用过多的Framework。其一,J2EE各个技术发展很快,过多的Framework使得系统的后续升级、维护不利;其二,可以借鉴其中的好的一面,比如研究realMethods实现的相应的设计模式,并改造她以适合我们的项目需求;其三,Framework本身会有变动,如果选用过多,会给开发团队加重负担,从而不利于项目管理。有选择的使用现有的成熟Framework能提升大家的开发效率、开发水平。
3,开发模式的选择

  开发J2EE应用要求目标开发人员能够掌握其中的各种技术。但是,现实情况不是这样。作为一个团队,每个人都有自己不同的技能优势、兴趣以及悟性。同时,J2EE本身需要体现社会分工。一般情况下,我们的开发团队不会有Specification所要求的各个开发角色。现实往往只有3种(也可能是两种):美工、JSP程序员、EJB程序员。面对这种分工,团队更要注重沟通、交流,注重代码的一致性。

  一般情况下,团队要尽量采用版本控制工具管理代码、尽量做到每天都有一个完整的运行版本。经过一段时间,团队都会适应这种开发模式。其中,版本控制工具一定要使用,便于代码的管理、控制和备份。这其中会牵扯到很多层面。比如,开发工具的选择要考虑到版本控制工具的使用、建模工具的合理使用有助于团队有效的沟通和交流。

4,注重各个阶段的测试工作

测试是分阶段的。单元测试,比如借助于JUnit,来保证功能正确等内容。集成测试,来保证系统没有内存泄漏等内容。其中,Optimizeite Suite Enterprise对于完成ProfilerCode CoverageThread Debugger等内容很有帮助。我记得,我写的一个Swing桌面应用存在内容泄漏,但是想了很多办法都没有解决问题。后来,采用Profiler获得了答案。因此,现在开发应用,我们很多时候都采用Optimizeite Suite Enterprise作为测试工具。尤其是,在做集成测试过程中,检查系统的内存泄漏、性能很有帮助。

  测试是分类型的。压力测试、性能测试。就目前对支持J2EE应用的测试而言,并没有很好的测试工具。但是,一般情况下,借助于Rational Robot也能够取得不错的效果。

  当然,成功开发J2EE应用的因素有很多。比如,Entity Beans的成功应用很大程度上与底层Database的设计有关系(如果表结构设计设计的不合理,将导致Entity Beans性能的急剧下降);如何最大化挖掘、提升团队各个成员的J2EE技能。等等这些,设计面很广。
posted on 2005-10-21 19:43 Kun Tao's Blog 阅读(238) 评论(0)  编辑  收藏 所属分类: J2EE

只有注册用户登录后才能发表评论。


网站导航: