开拓J2EE应用应遵循的几点原则
副标题#e#
J2EE,作为开拓mission-critical的企业级应用的一整套类型的整合平台,类型多、内容广,从而给开拓J2EE应用带来了许多“贫苦”。好比,为实现内容的RDBMS存储,我们大概的要领有JDBC、Entity Beans、JDO、O/R Mapping东西(TopLink、Hibernate)、XML-DBMS、JAXB等要领(个中一些要领不是J2EE类型所包括的)。因此,为实现J2EE各层(至少有暗示层、节制层、贸易逻辑层等3层)以及层与层之间的耦合,J2EE系统架构师需要思量的问题会许多。加上,J2EE自己的快速成长,给架构、开拓具有家产强度的J2EE应用带来一些困难。
同时,软件开拓技能从来就没有“银弹”,所以J2EE技能也不是万能的。可是,假如我们在团结详细贸易需求的基本上,公道的应用好J2EE技能,其功效可想而知。本文试图从本人以往的项目履历入手,来探讨开拓J2EE应用时应该遵循的几点准则,但愿起到抛砖引玉的浸染。本文团结JBoss 3.2.1下的J2EE应用开拓为例展开阐述。
1.团结贸易需求选择公道的架构
假如离开贸易需求,而单独的接头技能自己的优势是不足的。各项技能都有发生的特定配景,个中许多都是来自家产需求而触动的。一般而言,企业信息系统(EIS)都要求本身不变、安详、靠得住、高效、便于维护。同时,各个企业信息系统都有本身奇特的要求,大概有些时候需要思量与原有遗留系统的集成,所以相识各个企业信息系统详细的贸易需求对付整个系统的架构显得很要害。
好比,假如待开拓的J2EE应用系统中利用到的数据大部门来自于外在数据源;而这些数据大概是通过JDBC直接从外在数据源导入到待开拓的J2EE系统的Database中。对付这种景象,假如在开拓进程中,仅仅利用JDBC来操纵数据库,对付小强度(并发会见用户少、数据流量少)的景象,显然是较量符合的;但假如,并发会见用户较多、数据流量大,对Database层利用较为频繁的景象,则显得有些力有未逮。因此,对付这种需求,我们可以思量回收Entity Beans with Caches.打个例如,在JBoss 3.2.1中对付Entity Beans的Cache计策有多种,这时可以思量利用,,即“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 Interfaces、CMR、Read-Only、Session Fa?ade模式给Entity Beans注入了活力。虽然,并发用户多、数据流量很大时才会浮现出利用Entity Beans的优势。个中,有一点很要害:要注重Entity Beans技能的机能调优,各个应用处事器都有本身的一套机能调优方案。对付JBoss 3.2.1,设置文件standardjboss.xml提供了Entity Beans技能调优的进口。好比,Bean Lock计策的公道利用对付Entity Beans的调优就显得很重要。这样使得,我们可以越发存眷于系统的贸易逻辑,而不可是底层的Database(EJB调优处于EJB Container中,因此我们处在J2EE机能的高端,而不是底端,即Database层。同时,Database层的调优使得J2EE系统的数据库移植性大打折扣。)。
简而言之,要团结各个系统的特定需求和状况给出详细的技能架构方案,而不能孑立的阐述技能自己的优劣。
2.Framework的公道选用
设计模式在J2EE应用系统中饰演着重要的脚色。因此,有一个问题摆在各人眼前,是本身来实现详细的设计模式,照旧借助于Third-party Framework.假如贵公司不大,可能说公司不想在J2EE基本应用Framework投入许多精神,选用现有的较为成熟的、不变、与现有J2EE Specification兼容的技能框架会较量明智。
一般而言,Framework自己,可能说J2EE平台自己都是实现并优化了详细的设计模式、法则,好比业务署理、Service Locator(包罗Web Tier和EJB Tier各自的处事定位器,起到统一打点有限资源、Cache相关资源的浸染,便于系统移植)、Front Controller、DAO等等。现有的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相关技能的完美应用。
#p#分页标题#e#
Log4j: 我想对付习惯回收“System.out.println(”“);”的读者而言,Log4j是各人的福音。尽量Java 2 Standard Edition也具备java.util.logging包来担保日志的输出,但Log4j的简朴、高效、机动已经成了许多项目标选择。日志,在某种水平上可以检验系统的不变性、正确性,所以回收可设置的Log4j(今朝,Log4j已经思量到了与java.util.logging包的兼容性)是不会错的。好比,JBoss 3.2.1自己就是借助于Log4j来打点日志的。
realMethods: 大概有些读者还不知道这一款杀手锏。那好,这里就扼要作一先容。realMethods是一开拓J2EE应用的Framework,她差异于Struts(主要在于实现Model 2,J2EE应用前端);realMethods对付J2EE应用的各个层面都有详尽、高效的支持。同时,realMethods以前照旧商用软件,此刻已经成为了Open Source的产物,因此此刻可以参看其全部源代码。
BC4J: Oracle公司推出的用于Java的贸易组件。其内容和外在的特点和优势,不问可知。
虽然,雷同的Framework许多许多。作为开拓J2EE应用的团队而言,我们需要对各类Framework加以筛选,选择适合项目需求、团队、公司成长偏向的框架。
一般环境下,待开拓的方针产物不宜回收过多的Framework.其一,J2EE各个技能成长很快,过多的Framework使得系统的后续进级、维护倒霉;其二,可以警惕个中的好的一面,好比研究realMethods实现的相应的设计模式,并改革她以适合我们的项目需求;其三,Framework自己会有变换,假如选用过多,会给开拓团队加重承担,从而倒霉于项目打点。有选择的利用现有的成熟Framework能晋升各人的开拓效率、开拓程度。
#p#副标题#e#
3,开拓模式的选择
开拓J2EE应用要求方针开拓人员可以或许把握个中的各类技能。可是,现实环境不是这样。作为一个团队,每小我私家都有本身差异的技术优势、乐趣以及悟性。同时,J2EE自己需要浮现社会分工。一般环境下,我们的开拓团队不会有Specification所要求的各个开拓脚色。现实往往只有3种(也大概是两种):美工、JSP措施员、EJB措施员。面临这种分工,团队更要注重相同、交换,注重代码的一致性。
一般环境下,团队要只管回收版本节制东西打点代码、只管做到天天都有一个完整的运行版本。颠末一段时间,团队城市适应这种开拓模式。个中,版本节制东西必然要利用,便于代码的打点、节制和备份。这个中会牵扯到许多层面。好比,开拓东西的选择要思量到版本节制东西的利用、建模东西的公道利用有助于团队有效的相同和交换。
基于现有的开拓模式,小我私家认为这样3套方案不错。第一,回收Together作为建模东西、回收JBuilder作为IDE东西、回收VSS(可能CVS)作为版本节制东西、回收JBoss作为开拓J2EE应用开拓阶段的处事器。第二,回收WebSphere Studio整套东西。第三,回收Eclipse(可能JCreator)、Ant、XDoclets作为开拓东西。
虽然,手工完成J2EE应用的编写、编译、打包、陈设、测试更能使开拓者领略各个开拓阶段的详细细节。但本人认为,只要开拓者有这种存眷详细细节的立场,选用成果强大的建模、开拓东西是明智的。开拓东西不能提高开拓人员的开拓技术,可是她可以或许引导开拓人员正确的开拓偏向。好比,JBuidler 9 Enterprise提供的EJB精灵具有的“Struts + EJB + Session Fa?ade + Value Object”等成果泛起了业界遍及应用的J2EE构架方法。
4,注重各个阶段的测试事情
测试事情往往是许多项目司理忽视,不肯意去耗费时间、用度的内容,因为那样会增加项目标本钱。可是,他们忽视了,项目标完成质量往往对项目标本钱有很大的干系。好比,假如软件质量很差,并没有经验测试阶段,其后期陈设、运行所带来的用度会远远高出前期的用度。
测试是分阶段的。单位测试,好比借助于JUnit,来担保成果正确等内容。集成测试,来担保系统没有内存泄漏等内容。个中,Optimizeite Suite Enterprise对付完成Profiler、Code Coverage、Thread Debugger等内容很有辅佐。我记得,我写的一个Swing桌面应用存在内容泄漏,可是想了许多步伐都没有办理问题。厥后,回收Profiler得到了谜底。因此,此刻开拓应用,我们许多时候都回收Optimizeite Suite Enterprise作为测试东西。尤其是,在做集成测试进程中,查抄系统的内存泄漏、机能很有辅佐。
#p#分页标题#e#
测试是分范例的。压力测试、机能测试。就今朝对支持J2EE应用的测试而言,并没有很好的测试东西。可是,一般环境下,借助于Rational Robot也可以或许取得不错的结果。
虽然,乐成开拓J2EE应用的因素有许多。好比,Entity Beans的乐成应用很洪流平上与底层Database的设计有干系(假如表布局设计设计的不公道,将导致Entity Beans机能的急剧下降);如何最大化挖掘、晋升团队各个成员的J2EE技术。等等这些,设计面很广。