JSF结合Richfaces使用时的一种数据库分页方式
摘要: 在JSF和Richfaces的官方示例里面没发现正经的数据库分页示例,于是自己轮了一个,还算比较满意,分享出来。
struts等框架,视图(jsp、freemarker等)直接获取action中准备好的数据结果集合,请求下一页数据的时候,同样后台action处理请求,把action中的数据集合用新的这一页数据替换掉,然后渲染页面,从而实现分页。每次请求action的处理过程可以拿到页号等信息,所以在action调用service的时候就可以使用这些信息,调用相应的方法做分页数据查询。
JSF结合Richfaces做这个事情和Struts等框架有有很大的区别。
阅读全文
Hazelcast作为hibernate缓存和业务缓存
摘要: 做去皮儿网(http://www.qupier.com),内容管理是一个系统,前端网站是一个系统,这两个系统之间独立部署,但是缓存要能够互通。例如后台修改了某个消息类型的说明,在前段网站上要能够展现出来(使用了hibernate的查询缓存)。其他的一些场景也许要缓存,例如网站的shiro权限信息缓存,不过这个不需要和后端系统互通。但是既然开搞,也不好意思再挂着ehcache。于是一并升级。
前面一篇日志各种碰壁后,终于找到了理论上能够实现功能的两个产品:gemfire和hazelcast。于是,开始尝试。
阅读全文
找集中式缓存做hibernate second level cache和业务缓存,失败
摘要: 依然,先发广告:去皮儿网(http://www.qupier.com),每月26日通知你是否中签。已经推出广州的摇号结果通知了。
之前做业务系统,缓存用的是ehcache,集群的时候用multicast广播通知。随着节点的增多,希望把整个缓存切换到集中式缓存上来。折腾了两天,各种碰壁。
阅读全文
基于Spring实现seam形式的事件机制
摘要: 照例先做广告:去皮儿网(http://www.qupier.com),每月26日通知你是否中签。很快要退出广州的摇号结果通知了。
Seam的Events用的很舒服,spring提供的事件机制太罗嗦,所以起了念头,着这思路移植一下。最终效果如下:
//发布事件
Events.instance().fire(eventName,arg1,arg2.);
//发布异步事件
Events.instance().fireAsynchronous(eventName,arg1,arg2.);
//在事务中,发布当事务成功commit时触发的事件
Events.instance().fireOnTransactionSuccess(eventName,arg1,arg2.);
//在事务中,发布当事务完成(commit/rollback)时触发的事件
Events.instance().fireOnTransactionCompletion(eventName,arg1,arg2
阅读全文
建立功能级别的组件
摘要: 先做个广告,去皮儿网,可以每月26日通知你是否摇号中签。http://www.qupier.com
一直以来,组件一直都建立在技术的层面上。由于业务的复杂多变,似乎没有人想着把业务部分也做成可重用的组件。
我们团队在过去的两年里面在这个方面做了一些常识,写出来供网友参考、拍砖。
阅读全文
走在组件化的路上(七)——JSF的优势之使用View作用域的Action
摘要: 在以往的应用开发过程中,后端的业务组件(Action/Service/Dao),可以被设置为几种作用域:request、session、application。我们不可能把与每次请求关系很强的一些信息(例如某个列表页面要列出来的数据集合)简单的放到session里面去,这就导致了每次请求之间的大部分数据是不可能共享的。使用JSF,我们实现了一种叫做view的作用域,在不同的请求之间共享信息。
阅读全文
走在组件化的路上(六)——JSF的优势之自定义组件与模块化
摘要: JSF的很多文档上面说,要建立一个自定义组件,需要定义继承自UIComponentBase之类的类,然后写decode/encode方法等等,一大套内容,很复杂。幸好我们有其他的办法。其实定义一个组件在大多数情况下是不用去写这样的代码的。本节的内容是一个选择true/false两个值得下拉框组件。定义一个这样的组件需要做如下工作:
阅读全文
走在组件化的路上(五)——JSF的优势之从url到页面r
摘要: 我看到的若干mvc框架在展现一个包含动态数据内容的页面的时候,都是这样做的:请求/xx.do,到达某个action,执行配置好或者根据url映射到的某个方法,初始化数据,放到某个context里面(例如Request,或者struts用的ognl的context),然后根据配置或者规则,forward到某页面,然后展现。
这样做的好处是强制性的分离了展现和逻辑,缺点是多了若干配置,不自然。
JSF的路子和asp/php是一样的,你请求/a.xhtml,那么,ok,加载/a.xhtml文件。例如a.xhtml主体内容如下:
阅读全文
走在组件化的路上(四)——JSF的优势之了解前端状态
摘要: 先补充一下上一篇留下的尾巴:最早看JSF的书的时候,使用jsp作为页面,#{xx}这样的标记不能直接写在页面里,必须套在一个标记里面(和struts2里面的ognl一样郁闷)。后来才知道,这是jsp的问题,不是JSF的问题。现在大家都是用facelets作JSF的展现,JSF2.0更是把这个标准化为首选。于是直接在页面上写#{someAction.doSth('Hello')},完全OK,页面加载的时候会触发调用该方法。
然后我们再来看后端知道前端有什么的例子:
阅读全文
走在组件化的路上(三)——JSF的优势之忘记http
摘要: 现在开始说JSF的优势。一个一个的说,最后整理的时候再分主次吧,现在先就针对上面的几个问题来说。
1.URL到action method
阅读全文
走在组件化的路上(二)——JSF能够解决什么问题
摘要: 首先,看看在使用struts等框架做开发的时候,遇到的一些问题.
阅读全文
走在组件化的路上(一)——缘起
摘要: 09年4月我从A公司离职,被同事拉到一个创业团队做网页游戏,他们当时使用的技术体系是基于Seam的。而我则是SSH的忠实用户,此前一直跟随江南白衣、appfuse的路线,大大小小也做了一些项目,也自己攒了一堆轮子。花了1年多的时间在一个基于元数据的基础框架上面,那时候我基本上掌握了maven的简单使用,于是自己做的一些基础性的东西也都是使用maven来做依赖管理、版本发布。
阅读全文
JSF请求处理过程(二) 请求处理过程总览(FacesServlet#service)
摘要: 这总览,很明显是看FacesServlet的service方法。在FacesServlet的初始化过程中,构造出了全局的FacesContextFactory对象和LifeCycle对象。可以把FacesContextFactory看做是一个“请求包装工厂”,于是很明显,每当一个请求到达FacesServlet的时候,第一步便是拿着请求,到包装工厂里面包装一下,而包装的结果就是一个FacesContext。
阅读全文
Eclipse环境下的web应用配置
摘要: 用Eclipse开发web应用的人大概有两拨,一边是直接用Eclipse JEE版本做开发的,另外一边是用MyEclipse这个庞然大物的。二者各有优缺点,我觉得使用MyEclipse的大集成试的开发对于初学者来说可能可以省去很多基础的事情,便于入门。而对于高于入门水平的伙子们来说,我想基本的Eclipse才是更好的选择。一方面MyEclipse的Add XXX Capabilities不管3721加入全部库文件的做法对项目是一种污染,另外一方面隐藏的东西多了不利于个人对具体实现的学习。
阅读全文
关于拦截器
摘要: 在水木回一个大牛的帖子讨论拦截器,也发到这里。
所谓拦截,是新媳妇回娘家,路遇强盗。重要的是她能不能回家已经取决与强盗而不是自己。
阅读全文
关于模型的独立性
摘要: 文字写完以后,突然想起来很久以前在JavaEye上看的关于贫血模型、富血模型、充血模型的讨论。最后的结论大概与持久化无关的业务逻辑应该放在模型中实现,而与持久化有关的逻辑要放到Service中实现。看这几多文字,其实也就是说这么个意思,不过多说一些。闲话休提,正文开始。
在大结构上系统描述为上面的图形。关键元素是领域模型、领域服务、基础服务。能够精准的反应业务的模型,和围绕模型的有效的服务,是软件团队在某一行业领域生产成果价值的两个很重要的体现。领域服务作为系统的核心逻辑之一,一方面,承担着完成所有与技术环境相关的业务逻辑的实现,另外一方面,作为领域模型和技术环境的缓冲,保证了领域模型的普适、独立。
阅读全文
工厂模式ABC
摘要: 这段文字最初是回复水木上一个mm的问题,问为什么要用工厂,整理之后,发到这里来。
工厂模式是创建模式,封装对象的创建过程。对象的创建最简单的方式是new出来,但是有一些情况下用new来创建对象会导致代码难以维护。
阅读全文
切换Maven版本时候出现的问题
摘要: 切换Maven版本时候出现错误的解决
阅读全文
Struts请求处理过程简要描述
摘要: 翻了一下Struts2的代码,理出了一个基本执行流程,应改可以对struts的结构有个了解了,另外,也可以由此找到一些扩展点。
阅读全文
Ext.XTemplate使用入门
摘要: Ext.XTemplate是Ext中关于页面模板的一个组件。用来将数据和模板组合出最终的html。所谓数据指的是javascript的对象。EMP在loadEntityToPage中使用了这个组件。
阅读全文
当JsonPlugin遇到CGLib
摘要: JsonPlugin在分析类结构并序列化时,对于CGLig动态生成的类也是按照一般类来看待的。这就导致了两个问题:一个是去序列化了生成的子类中的本不应该序列化的属性,另外一个是由于CGLIB导致的Annotation丢失而引起的本不应该发生的序列化逻辑。简单的修改了一下JSONPlugin的代码,来避免上述的两个问题。
阅读全文
在基于Spring及Hibernate应用程序中使用ETags降低带宽占用和服务器压力
摘要: Gavin Terrill 发表于2007.7.11 上午 8:45
讨论区:Java 主题:Web框架、集群及缓存
导言
REST方式的应用程序构架在近日所产生的巨大影响突出了Web应用程序的优雅设计的重要性。现在人们开始理解“WWW架构”内在的可测量性及弹性,并且已经开始探索使用其范例的更好的方式。在本文中,我们将讨论一个Web应用开发工具——“简陋的、卑下的”ETags,以及如何在基于SpringFramework的动态Web应用程序中集成这个工具,来提高应用的性能及可测性。
我们将要使用的基于Spring的应用程序是基于“petclinic”(宠物门诊?)的一个应用。在您下载的程序包中,包含了如何加入必要的配置和源代码让你亲自体验该程序的介绍。
阅读全文
关于Atlassian的两个软件 JIRA 和 Confluence
摘要: Atlassian Confluence(简称Confluence)是一个专业的wiki程序。它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享。
Confluence使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息,文档协作,集体讨论。目前,Confluence被用于广泛地用于项目团队,开发团队,市场销售团队。
阅读全文
长标题显示字数处理
摘要: 很多情况下,我们需要控制长标题的显示字数。在客户端用JavaScript控制显示最大字数后,由于js把任何字符都当作1个长度来处理,由此导致全角和半角字符显示的实际长度不同。
例如我们设置某个文章列表页面所有的文章标题最长显示10个字符。那么如下的题目:
这篇文章是测试标题长度显示的文章
I love my country.I love all of you.
处理后,将分别显示为:
这篇文章是测试标题长
I love my (注意最后还有一个空格)
假设我们是按照中文的宽度来确定10个字符这个标准的,那么当标题是英文等半角字符时,显然太短了。反过来,如果我们按照英文等半角字符来确定显示字符数量标准,那么如果题目是中文的时候,又很容易出现自动换行等我们不希望出现的结果。
本文尝试以一种笨拙的办法处理这个问题。即使用js检查字符串中的每一个字符,如果发现有两个(注意不一定相连)的半角字符,那么就将显示长度标准加1。
阅读全文
提高Hibernate 3 启动速度(翻译)
摘要: 原文地址:http://www.hibernate.org/300.html
在Tomcat5.5.x环境下,调用Configuration().addCacheableFile来载入配置,建立Hibernate SessionFactory,成功地提高了载入速度。
推荐你只是在开发阶段采用这样的方式载入,最后的产品发布阶段你仍需使用经典的Hibernate.cfg.xml文件,通过Tomcat的ServletContextListener API在应用程序部署的时候建立Hibernate SessionFactory,而不是在程序第一次调用Hiberante的时候。
阅读全文
一些链接(二)——关于缓存
摘要: Spring框架的声明式缓存服务
Spring框架提供了声明式的缓存服务,看样子似乎不错:
原文地址:http://dev2dev.bea.com/pub/a/2006/05/declarative-caching.html
中文译文:http://www.crackj2ee.com/Article/ShowArticle.asp?ArticleID=661
阅读全文
DWR学习记录
摘要: 一、概念
DWR(Direct Web Remoting),中文翻译成“直接Web远程控制”。我认为就是将AJAX作了一次封装,并提供与服务器端Java组件进行交互的一个组件。在其官方网站(http://getahead.ltd.uk/dwr)上说得很清楚,“DWR is Easy Ajax for Java”。DWR允许客户端的javascript与服务器端的Java进行交互,并根据其交互结果,控制网页的表现。
阅读全文
J2SE5.0新特性——out.printf
摘要: JDK5.0 沿用了C语言库函数中的printf方法,例如,如下:
System.out.printf("%8.2f",x);
阅读全文
J2SE5.0新特性——for each循环
摘要: 这个语法是5.0新增的,据说是从C#里面借鉴过来的。
阅读全文
J2SE5.0新特性——静态导入(解决我的Config问题)
摘要: 昨天买了Core Java2 第七版的上卷。开始阅读就看到了许多J2SE的新特性,呵呵,很是激动人心。我会发一系列的文章来介绍。首先这一篇讲静态导入,解决我上面的Config问题。
本文分三个部分:
1,讲述我上面遇到的Config问题的大概和目前的解决方法
2,讲述用了静态导入后的解决方法
3,对静态导入的介绍,简单实例。
阅读全文
项目总结(一个数据采集网站)——Spring
摘要: 谈到构架,总是会想起前面看到banq写的一篇文章,叫做重与轻的永恒话题。是讨论使用EJB等重量级框架和Spring,Jdon之类的轻量级框架采用POJO实现业务。俺是小人物,没学过EJB,而对Spring倒是有一点了解。所以这次就用Spring了。
阅读全文
项目总结(一个数据采集网站)——工作
摘要: 从5.1开始,整整写了6天程序到5.6,期间没洗过澡,基本上没出过校园,很少出宿舍。同学从家乡来玩住我宿舍我只去天安门接了一趟,去西站送了一趟。6天,简直是非人的生活。
于是昨天终于把自己该做的部分也就是主体部分全部完成了。剩下的一点街面上的修改雨点来做。
阅读全文