最近公司又在招人,头安排我对一些应聘者做电话面试,让我遇到了不少华而不实的家伙。这些家伙的简历上密密麻麻会写了很多项目经验,都说自己做过需求做过架构,有项目管理经验。但是细细问下去,你会很失望,有些人会把hibernate 一级缓存和二级缓存搞混,有些人声称自己从来没有用过hibernate的二级缓存,有些人简历上写了一大堆模块,实际上只做了其中一两个,还有些人号称精通J2EE,却不知ejb3是何物!而这些人也只是用struts + spring + hibernate做过一些开发,而且并不能深入理解spring和hibernate的工作细节。 我不相信对基础工具不熟悉的人能做个架构师。我也 ...
  • 09:42
  • 浏览 (59)
  • 评论 (0)
尽管seam文档和其它相关的资料中,都声称entityManager的抽象程度已经很高了,没有使用DAO模式的需要,但是从这次的项目实践来看,将 部分的数据访问放到DAO里是很有必要的。首先,使用DAO有易于做单测。如果不使用DAO,需要访问数据库的Action就注入一个 entityManager直接访问数据库,这样写起来方便,但是在单测这个action的时候,要么得做一个假的entityManager,要么得真 的创建一个entityManager并准备好数据。这些都比做一个假的DAO来得要复杂。其次,如果每个ACTION里都自己拼接sql来查询数据,这 些查询SQL将会分散到各个ACTI ...
  • 14:10
  • 浏览 (51)
  • 评论 (0)
几乎所有对seam进行介绍的文档中都会用大量的篇幅来说明会话(conversation),因为它是seam的发明,让seam与众不同的一个地方。但是要完全理解和运用conversation并不是容易呀。会话是一种用来存储程序上下文数据的容器,和session类似,只不过它的生存周期和session有很大的差别。 会话分成两类,临时会话和长会话。临时会话会开始于服务器端处理客户端的post请求,结束于下一个页面的生成。也就是说,它存在于post->redirect->get 这样一个小周期内。典型的例子是facesmessage组件。这是一个会话内的组件。我们在处理post请求时,写的mess ...
  • 15:23
  • 浏览 (70)
  • 评论 (0)
这两年REST(Representational State Transfer)随着ajax, web2.0, ROR逐渐火了,起来。不得不承认REST确实是一种在互联网环境下非常好的架构风格。REST中一个非常重要的约束,就是服务端无状态,将大部分的状态管理向客户端转移。而SEAM正好朝向REST的反面走去,而且是走得很彻底。SEAM是完全的服务器端有状态,所有的状态都在服务器端来管理。所以seam的文档里都会自称自己是一个stateful的框架。要说服务器端有状态,其实JEE的标准的web container基本上都是以服务器端有状态的方式来运行的, servlet的 session sc ...
  • 16:29
  • 浏览 (43)
  • 评论 (0)
用普通的java bean 做conversation scope内的组件会有这么大的性能问题,那么用ejb会怎么样呢?我今天特意做了一个测试,还是在那台开发机上,还是用那个 supplierSearchAction, 所做的变更,只是把SupplierSearchAction由普通的java bean变成了ejb。我在用ejb,普通conversation scope的java bean, 和page scope的 java bean分别测试了十次,最后的统计结果显示在conversation内ejb的性能还是要高于普通java bean的。conversation pojo 用时 5秒, ...
  • 15:46
  • 浏览 (41)
  • 评论 (0)
近半年的项目实践让我们注意到了seam2.0.2的conversation的性能问题。测试人员抱怨系统速度慢的时候,我们一开始以为是由于数据库查询导致的性能问题。但是经过各方面排查,我们发现一个不做数据库操作的简单页面,就算是按照前文《优化richfaces,给seam提速》操作后,同样会很慢。于是我们开始怀疑起 seam本身了。一个无意中的试验发现,我把一个以前放在conversation scope内的组件换成 page scope后,速度一下子提高了五六倍。今天通过对日志的分细,证实了我的感觉。 我写了一个timefilter,记下服务器从接到http request到生成后http ...
  • 15:34
  • 浏览 (70)
  • 评论 (0)
公司历时近半年的java项目终于于上周上线了。在项目经理到来之前,我们在技术选型上动摇了很久,struts, struts2 ,spring mvc, grails等都试用过一些,基本上选定了struts2。项目经理到位后,他最终选定了seam这个非常新的技术,于是这近半年来,我们可以算得上是尝试吃螃蟹的人了。无论过程怎么样,最终还是完成了任务,让程序成功上线了,这至少可以说明seam已经合格了。 影响一个项目的因素非常的多,单从技术的角度来说,seam给我们带来的好处还是要更多一些的。这些好处有些是jsf提供的,有一些则是seam的发明。JSF表单里的数据到对象的绑定,减少了手动从requ ...
  • 02:40
  • 浏览 (38)
  • 评论 (0)
Seam使用了richfaces做为jsf的组件库。richfaces的功能确实不错,但是性能上存在一些问题。一些简单的页面,用firefox打 开,YSlow插件都显示花掉了数秒时间。通过 firebug和YSlow插件,可以看到,打开页面的时候,浏览器会向发起很多请求,以下载javascript和css,而且这些文件的体积还不是很 少。减少请求次数,减小传输数据量,可以一定程序上改善客户端体验的性能。查阅richfaces的文档,终于找到了解决方法。 原来richfaces的默认方式是按需添下载js和css,更改它的一些参数,可以让它变成全部下载。方法是在web.xml里添加以下内容: ...
  • 07:31
  • 浏览 (86)
  • 评论 (1)
概述 为了优化jboss的性能,对jboss服务器做了如下改动。 设置jvm 参数 安装jboss-native 降低jboss输出日志的等级 起用了jboss内的tomcat对传输数据的压缩功能 使用ehcache做hibernate的二级缓存 下面就以上的各改动做详细说明,为了表述方便代表jboss的安装目录: 设置 jvm 参数 编辑/bin/run.conf,  在文件的底部找到对参数JAVA_OPTS进行设置的地方。这个参数会最后传到jvm里。其中 -Xms512m 代表jvm最少用 512m内存 -Xmx1024m 代表jvm最多使用 ...
  • 06:07
  • 浏览 (57)
  • 评论 (1)
一般的网络程序和服务器的交互是完全自由的,用户在浏览器上对页面操作可能会引发对任一URL的任何一种方法的请求,点一个普通的超链接,引发一个GET 操作,单击一个提交按钮,引发一个POST等等,这都是完全自由的。但是在JSF的世界里,浏览器与服务器之间有着一个固定模式的交互方式,这是JSF的 节奏。 让我们看看这个节奏:a.浏览用GET请求一个页面 -> b.JSF生成指定页面的组件树,产生html页面返回 -> c.用户对浏览器上页面控件操作,引发一次对当前页面的POST请求 -> d.JSF重建组件树,执行业务动作,返回一个 重定向 。 然后就是一直循环下去,简要的来看就是 get -> ...
  • 07:14
  • 浏览 (32)
  • 评论 (0)
Anatorian
搜索本博客
最近加入圈子
存档
最新评论