`
Anatorian
  • 浏览: 61375 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
最近公司又在招人,头安排我对一些应聘者做电话面试,让我遇到了不少华而不实的家伙。这些家伙的简历上密密麻麻会写了很多项目经验,都说自己做过需求做过架构,有项目管理经验。但是细细问下去,你会很失望,有些人会把hibernate 一级缓存和二级缓存搞混,有些人声称自己从来没有用过hibernate的二级缓存,有些人简历上写了一大堆模块,实际上只做了其中一两个,还有些人号称精通J2EE,却不知ejb3是何物!而这些人也只是用struts + spring + hibernate做过一些开发,而且并不能深入理解spring和hibernate的工作细节。 我不相信对基础工具不熟悉的人能做个架构师。我也不 ...
尽管seam文档和其它相关的资料中,都声称entityManager的抽象程度已经很高了,没有使用DAO模式的需要,但是从这次的项目实践来看,将 部分的数据访问放到DAO里是很有必要的。首先,使用DAO有易于做单测。如果不使用DAO,需要访问数据库的Action就注入一个 entityManager直接访问数据库,这样写起来方便,但是在单测这个action的时候,要么得做一个假的entityManager,要么得真 的创建一个entityManager并准备好数据。这些都比做一个假的DAO来得要复杂。其次,如果每个ACTION里都自己拼接sql来查询数据,这 些查询SQL将会分散到各个ACTIO ...
几乎所有对seam进行介绍的文档中都会用大量的篇幅来说明会话(conversation),因为它是seam的发明,让seam与众不同的一个地方。但是要完全理解和运用conversation并不是容易呀。会话是一种用来存储程序上下文数据的容器,和session类 ...
这两年REST(Representational State Transfer)随着ajax, web2.0, ROR逐渐火了,起来。不得不承认REST确实是一种在互联网环境下非常好的架构风格。REST中一个非常重要的约束,就是服务端无状态,将大部分的状态管理向客户端转移。而SEAM正好 ...
用普通的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秒, c ...
近半年的项目实践让我们注意到了seam2.0.2的conversation的性能问题。测试人员抱怨系统速度慢的时候,我们一开始以为是由于数据库查询导致的性能问题。但是经过各方面排查,我们发现一个不做数据库操作的简单页面,就算是按照前文《优化richfaces,给seam提速》操作后,同样会很慢。于是我们开始怀疑起 seam本身了。一个无意中的试验发现,我把一个以前放在conversation scope内的组件换成 page scope后,速度一下子提高了五六倍。今天通过对日志的分细,证实了我的感觉。 我写了一个timefilter,记下服务器从接到http request到生成后http r ...
公司历时近半年的java项目终于于上周上线了。在项目经理到来之前,我们在技术选型上动摇了很久,struts, struts2 ,spring mvc, grails等都试用过一些,基本上选定了struts2。项目经理到位后,他最终选定了seam这个非常新的技术,于是这近半年来,我们可以算得上是尝试吃螃蟹的人了。无论过程怎么样,最终还是完成了任务,让程序成功上线了,这至少可以说明seam已经合格了。 影响一个项目的因素非常的多,单从技术的角度来说,seam给我们带来的好处还是要更多一些的。这些好处有些是jsf提供的,有一些则是seam的发明。JSF表单里的数据到对象的绑定,减少了手动从reque ...
Seam使用了richfaces做为jsf的组件库。richfaces的功能确实不错,但是性能上存在一些问题。一些简单的页面,用firefox打 开,YSlow插件都显示花掉了数秒时间。通过 firebug和YSlow插件,可以看到,打开页面的时候,浏览器会向发起很多请求,以下载javascript和css,而且这些文件的体积还不是很 少。减少请求次数,减小传输数据量,可以一定程序上改善客户端体验的性能。查阅richfaces的文档,终于找到了解决方法。 原来richfaces的默认方式是按需添下载js和css,更改它的一些参数,可以让它变成全部下载。方法是在web.xml里添加以下内容: ...
概述 为了优化jboss的性能,对jboss服务器做了如下改动。 设置jvm 参数 安装jboss-native 降低jboss输出日志的等级 起用了jboss内的tomcat对传输数据的压缩功能 使用ehcache做hibernate的二级缓存 下面就以上的各改动做详细说明,为了表述方便<jboss>代表jboss的安装目录: 设置 jvm 参数 编辑<jboss>/bin/run.conf,  在文件的底部找到对参数JAVA_OPTS进行设置的地方。这个参数会最后传到jvm里。其中 -Xms512m 代表jvm最少用 512 ...
一般的网络程序和服务器的交互是完全自由的,用户在浏览器上对页面操作可能会引发对任一URL的任何一种方法的请求,点一个普通的超链接,引发一个GET 操作,单击一个提交按钮,引发一个POST等等,这都是完全自由的。但是在JSF的世界里,浏览器与服务器之间有着一个固定模式的交互方式,这是JSF的 节奏。 让我们看看这个节奏:a.浏览用GET请求一个页面 -> b.JSF生成指定页面的组件树,产生html页面返回 -> c.用户对浏览器上页面控件操作,引发一次对当前页面的POST请求 -> d.JSF重建组件树,执行业务动作,返回一个 重定向 。 然后就是一直循环下去,简要的来看就是 ...
Jboss seam使用的前端展示层技术是JSF,而且目前只支持JSF,不支持struts, struts2, spring mvc等很多其它的web框架。看来jboss seam的设计者是很看重 JSF的。用了几个月的seam之后,我对JSF的认识终于有一些切身的体会(以前虽看过一些资料,但是没有实际应用过)。我以前一直是用像spring mvc这样很传统的MVC框架的,从这些框架转到JSF上面确实让人很是不适应。 从表面上看来JSF也像是个MVC框架,有展示用的页面,有可以抽出来的处理逻辑单元,有负责调度的导航规则,就像是MVC里的view model 和controller一样。但是这两种 ...
在不分层的系统里,我们可以将所有的代码都写到一个地方,比如struts的Action类。在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要做数据访问。比如说: public String addUser() { if(user == null) { return FAIL_NO_USER; }   Result result = null; if(Role.ADMIN.equals(user.getRole())) { result = doSomethingForAdmin(user) ; } else { ...
SQL 中的大小写规则在语句的不同部分是不同的,而且还取决于所引用的东西以及运行的操作系统。下面给出相应的说明: ■ SQL 关键字和函数名。关键字与函数名是不区分大小写的。可按任意的大小写字符给出。 ■ 数据库与表名。MySQL 中数据库和表名对应于服务器主机上的基本文件系统中的目录和文件。因此,数据库与表名是否区分大小写取决于主机上的操作系统处理文件名的方式。运行在 UNIX 上的服务器处理数据库名和表名是区分大小写的,因为UNIX 的文件名是区分大小写的。而Windows 文件名是不区分大小写的,所以运行在Windows上的服务器处理数据库名和表名也是不区分大小写的。如果在UNIX ...
昨晚上网,无意中看到说firefox 3.0 beta 1 网上已经有下载的了,于是我就在网找了一下,果然有,点这里可以下载。安装上后,为了不和现在用的firefox2相冲突,在快捷方式里firefox.exe 命令后加上了 -p 以便启动时选用新的配置文件不会覆盖以前的。安装上后,试用一会,感觉很不错,到目前为此还没有出现过崩溃现象,所打开的网站也都能正常浏览,没有发现兼容问题。 那firefox有哪些改进呢?从用户能直接看到的来看由以下几个方面: 1,点击地址栏开头的小按钮可以看到安全信息 2,位置标签夹里有好多好东东 3,地址栏后面有一个星按钮,按一下加标签,再按一下可以直接选择 ...
为了实现向struts2的Action中注入ejb3,我写了一个Annotation用来定义要注入哪个ejb3,又写了一个struts2的interceptor用来实施注入。Annotation代码如下: @Retention(value=RetentionPolicy.RUNTIME) @Target(value={ElementType.METHOD}) @Inherited public @interface JndiLookup { String jndi(); Class type(); } Interceptor代码如下: public class JndiLo ...
Global site tag (gtag.js) - Google Analytics