解惑

解己之惑,解人之惑

2005年7月 (第2页共2页)

为什么java世界没有真正的快速开发平台

为什么java世界没有像微软的visual studio那样的快速开发平台,其中一个原因固然是因为微软封装了很多东西,提供了强大的集成工具并且要求你按照微软的设计思路来设计系统,但是java世界具备visual studio中的任何一种组件,所缺少的只是没有人或者厂商将他们集成起来,而之所以没有人去做,一个很大的原因恐怕是java里面每种组件我们都有太多的选择,web框架有struts,spring,webwork2以及其它的,ORM也有EJB,JDO以及hibernate,ibatis,obj供选择,IDE有JBuilder,Eclipse,IDEA,JDeveloper以及Netbeans,另外的其它的组件也是多得不可胜数,但是我们现在已经可以看到快速开发平台推出的希望了,首先是IDE的统一,Borland,BEA都放弃了开发自己的IDE转向Eclipse,而Eclipse3.1的功能和性能表现也足以吸引很多原来使用其它IDE的用户,而SUN的Netbeans一向不为大家所认可(SUN开发的大部分开发工具好像都是这个下场),因此有了IDE的统一,其它的组件基本上都可以围绕她来进行,加上Eclipse插件开发非常的方便,因此这更加促进了对它的扩展,而现在的情况也确实是向这个方向迅猛发展的。有了这个基础,我就来谈谈我对未来的这个快速开发平台的期望了(对于新开发的系统):

  1. 项目管理:可以使用maven或者ant,对于小一些的项目可以使用ant,对于项目管理的内容很多的可以考虑采用maven。
  2. 版本管理:基本上可以选定cvs。
  3. IDE:不用说,就是Eclipse了。
  4. 系统架构:以Spring为核心的架构应该是比较好的选择。
  5. 表现层:struts或者freemarker,这个可能选择性太多,除了struts外好像还没有哪一个有那么广泛的用户基础。
  6. ORM:Hibernate应该是现在的不二之选了。
  7. 辅助工具:xdoclet,可以根据项目的需要进行部分的内容的生成,减少很多手工的工作,也许应该有更多的缺省的扩展。
  8. 单元测试:Junit或者TestNG之类的,虽然有很多人说junit已经不那么好用了,但是对于一般的项目应该还是够用的。
  9. 。。。

其实还有很多其它的组件没有谈到,包括页面测试,报表,缓存等等,但是我这次想说的其实不是这些,我的核心其实是里面最不起眼的xdoclet,因为它其实可以作为所有这些组件的一个黏结剂,核心其实就是代码生成,我理想中的情况如下:

  1. 开发人员最初编写的就是一个POJO的属性列表,而这个属性列表的内容可能来自系统的设计文档或者其它的建模文档。
  2. 根据POJO的属性列表生成对应的POJO类
  3. 修改POJO,增加需要的hibernate或者其它的例如页面生成,spring配置需要的信息。
  4. 生成系统的完整骨架,包括spring配置文件,hibernate映射文件,JSP页面
  5. 修改生成的内容,对于细节的地方进行修改

依然很复杂,那么我们不妨再简单一些,编写POJO属性列表的时候增加hibernate配置信息,页面配置信息以及spring配置信息,一步到位生成全部的基础代码,或者是写一个这样的文件,点击右键,点击Generate target page…,在出现的对话框里面选择需要生成或者更新(覆盖)的对象,可以是hbm文件或者是页面文件或者是spring配置。
可能很多人觉得我是白痴,开发一个系统哪里这么简单,但是这样的一个系统已经为我们生成了系统的骨架,完成了很多烦琐的我们大部分人都不愿意做的枯燥工作,为什么不那样做呢?不管别人如何看,我会自己试验这样的系统的可行性的,也许是一个值得做的方向。
当然,一个复杂的系统的快速开发还远远不止这些,特别是系统要求是中型以上的系统,业务逻辑比较复杂,要求国际化,要求页面美观,易于修改定制等等,但是并非不可能,我们可以根据以前积累的经验定制一套这样的系统,例如ant+eclipse+spring+hibernate+freemarker+xdoclet+css,在系统组件的选择确定的情况下,我们甚至可以抛弃xdoclet使用自己完成的生成工具更好更灵活的的生成我们需要的内容。

隐藏Apache的服务器配置信息

>ServerTokens ProductOnly 和 ServerSignature Off 微调 Apache 的返回信息

http://windtear.net/archives/2005/05/30/000676.html

apache 的 httpd.conf 有两个配置可以控制是否显示服务器信息给用户
ServerTokens
ServerSignature

默认条件下会把apache版本 系统 模块都显示出来 (HTTP 返回头)
还有如果列举目录的话 会显示域名信息(文件列表正文)
(http://httpd.apache.org/docs/mod/core.html表明ServerSignature已经默认Off了)
如果不想要就可以调这两个参数

ServerTokens
ServerSignature

ServerSignature On|Off|EMail
ServerTokens Minimal|ProductOnly|OS|Full

ServerTokens Prod[uctOnly]
    Server sends (e.g.): Server: Apache
ServerTokens Min[imal]
    Server sends (e.g.): Server: Apache/1.3.0
ServerTokens OS
    Server sends (e.g.): Server: Apache/1.3.0 (Unix)
ServerTokens Full (or not specified)
    Server sends (e.g.): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2

 

监控服务器的状态防止停止服务

虽然搞了这么多年的java,但是还没有真正的接触过大负载情况,而服务器在大负载的情况下很可能由于不堪重负而倒下,如果应用的质量不高,系统资源使用太高服务器可能也会崩溃,这个时候权益之计就是监控服务器的状态了,而且一般情况下也比较现实,想让服务器7X24的工作一点问题没有是不太可能的,因此写一个简单的脚本监控服务器的关键的进程是否死掉、服务器返回的内容是否正确,服务器的内存使用是否正常都是可行的,而且可以把这几项综合起来,在某种情况发生时进行相应的处理,这样服务器能够正常工作的情况就比较多了,以后我会将这方面的经验都写出来,并且最终的监控脚本也会贴出来,现在还在实践阶段,效果还不是很理想,例如还不能防止DOS攻击等等。

打印Linux服务器当前使用的内存总量的命令

echo `date '+%y-%m-%d %H:%M:%S'` "Current total used memory:" `free -omt|grep Total|awk '{print $3}'`"M"

根据Bean生成页面?

Hibernate有一个很好的工具就是根据Bean中的扩展的javadoc生成相应的hbm配置文件,当然这个实际的转换工作是由xdoclet完成的,那么我们可以再多加一些扩展,根据bean的配置信息生成目标的jsp页面。
我原来所在的公司做过一个工具,我们负责的一个项目由于数据库的表太多,而业务不是很复杂,主要是单据太多,系统的设计者就根据这个特点做了一个工具,一个单据会对应一个或者多个表,这几个表之间一般是主从表,或者主从从表,这个工具就是配置单据需要哪些表,表的主键是什么,主表和从表的外键是什么,表的哪些字段是出现在列表页面的,那些是出现在编辑页面的,字段类型是什么,是否为空等等,然后另外有程序会根据这个配置信息生成最终的JSP页面(包括数据有效性检查的js),而如果页面有什么额外的JS检查系统不支持的可以修改plugin式js文件,而单据的主要的增、删、改、查工作是系统的公共的功能,如果单据有特殊的要求,那么也是通过增加plugin式的类来完成,这个也是可以配置的。总的而言,系统的设计是成功的,我们可以借鉴这个思想,采用spring+hibernate+xdoclet来做一个类似的框架,应该会有比较好的效果,那个设计是以数据驱动的,而这个新的系统就是模型驱动的了。有时间我会再研究一下具体的可行性,应该是一个比较不错的设计。

更新的文章

© 2024 解惑

本主题由Anders Noren提供向上 ↑