技术点滴

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/index.php?blogid=6781&m=20040414 存档链接: https://web.archive.org/web/20050116152153id_/http://www.blogbus.com:80/blogbus/blog/index.php?blogid=6781&m=20040414


技术点滴 几年的软件研发做下来,接触的技术,零零碎碎加起来,居然手指不够数了。不少东西,是帮工程部门解决完就扔一旁。弃之可惜,何不借这网络一角,留下一点记忆?遂有此Blog。 首页 一路走来 (43) 翻译文章 (4) Spring Framework (6) Rich Internet Applications (16) 对软件开发的思考 (6) blog on blog (7) GMail碎碎念 (5) Java Basic (4) 2004-04-14 21:24 看到一篇Tapestry+Spring+Hibernate整合工作小结 写完上一则blog,又跑去Spring中文论坛用“tapestry”做关键字搜索了一下,没想到居然找到一个相当不错的帖子: Tapestry+Spring+Hibernate整合工作小结 http://xglw.51.net/5team/springframework/viewtopic.php?t=379&highlight=tapestry 尤其是“3、困扰我们的问题”,都是经验之谈,要好好偷师一番才行:) 问题1:要不要使用DTO? 我的答案:用,因为我们这个项目里会有多种不同的前台,要用单独的一种Domain Model来和Web层交换数据是不现实的。 问题2:Entity like domain model or rich domain model? 我的答案:前者。另外再做一层实现Domain Logic。 问题3:Model driven or Data driven? 我的答案:这个得我的同事来回答了。不过我个人倾向于Model driven,基于前年某个项目的经验而以:) 问题4:Hibernate Session生命周期如何管理? 我的答案:也是交给同事:) 问题5:Use case logic 和domain logic 如何区分? 我的答案:对Domain Model的操作是Domain Logic,也就是前边提到的“再做一层”,这一层里只提供一些基本操作,Use case logic调用domain logic对Domain Model进行操作。 问题6:Service粒度如何确定? 我的答案:还没想清楚,等我做完设计再说。 问题7:权限如何设定?如何检查? 我的答案:同六,这个也是我这阵子在思考的。 嗯,答完回头一看,很多答案根本相反嘛…… linrun @ 21:24 | 阅读全文 | 评论(0) | 引用Trackback(0) | 编辑 2004-04-14 14:40 将Tapestry整合到Spring里去 在Spring最新的文档里,有关于如何将Tapestry整合到Spring里去的说明,见这里 http://www.springframework.org/docs/reference/view.html#view-tapestry 。Spring中文论坛应该会翻译出来,我就不做重复的工作,只摘要说明一下。 先看看Tapestry。下图说明了Tapestry是怎么样获取到service的。 在文档里,基于Tapestry和Spring的应用被划分成五层,我们只关注前边两层:User Interface Layer和Service Layer。这种划分对于单独使用Tapestry的应用也是成立的,从上图可以看出,那是对Service Layer的操作。当进行整合之后,User Interface Layer仍然是由Tapestry提供,而Service Layer则由Spring接手来提供。 Service实际上就是Bean,Tapestry原本一套取得Service的机制:getEngine()->getService()。现在,我们用Spring将这些Serviec,也就是Bean管理起来,那么,要解决的问题就只有一个,如何让Tapestry获得由Spring管理起来的的Service? 在Application Context里我们定义了需要被调用的Bean(见文档),我们给它个名字就userService。那么,在Tapestry的page里,就需要载入这个context,然后取得beanA。 一个最简单的方法是利用Spring的static工具WebApplicationContext在Tapestry page对应的Java class definition里直接载入Application Context,并取得userService。 WebApplicationContext appContext = WebApplicationContextUtils.getApplicationContext( getRequestCycle().getRequestContext().getServlet().getServletContext()); UserService userService = appContext.getBean("userService"); 不过这种用法和我们用Spring的原意有点违背――这不符合DI模式。应该在page里才决定我们调哪个Service。 所以,推荐的做法如下。 第一步,让Tapestry page能够获得ApplicationContext,但这次不直接由Tapestry page来做,因为在我们需要访问ApplicationContext的时候,Tapestry page很难拿到ServletContext,所以我们将其放到Enging里去做。代码如下: package com.whatever.web.xportal; ... import ... ... public class MyEngine extends org.apache.tapestry.engine.BaseEngine { public static final String APPLICATION_CONTEXT_KEY = "appContext"; protected void setupForRequest(RequestContext context) { super.setupForRequest(context); // insert ApplicationContext in global, if not there Map global = (Map) getGlobal(); ApplicationContext ac = (ApplicationContext) global.get(APPLICATION_CONTEXT_KEY); if (ac == null) { ac = WebApplicationContextUtils.getWebApplicationContext( context.getServlet().getServletContext() ); global.put(APPLICATION_CONTEXT_KEY, ac); } } 这样就把ApplicationContext放到了global里去,然后我们指定MyEngine是后边应用里实际使用的的Engine: (写着写着又像翻译了……不爽-_-) 第二步,在Tapestry page里取得Bean,代码如下: global.appContext.getBean("userService") 第三步,在page对应的Java class definition增加一个abstract访问者,也就是一个abstract getter 方法。代码如下: public abstract UserService getUserService(); 当Tapestry实际载入页面的时候,会对类文件执行runtime code方法以增加定义了的properties,并将上边的abstract getter 方法与新建的fields挂钩起来。(瀑布汗^^|||) ok,这就完成了。详细的example请看文档。 简单总结一下。Tapestry与Spring的整合实际上是把原本由Tapestry自己负责的Service Layer,也就是对Service/Bean的调用,交给Spring负责。实际的切入点,则在于上图所示的Engine处。 linrun @ 14:40 | 阅读全文 | 评论(0) | 引用Trackback(0) | 编辑 日历 2004 年 4 月 Sun Mon Tue Wen Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 最近更新 我还活着 tomcat mysql 连接池 配置 中文 Commons Logging + Log4j快速入门 最近Blogbus很不稳定 London Bloggers 新分类Java basic 换模板了 fy GMail tips Google Logo For The Athens 2004 Olympic Games 淘到一个“拼接式自我资产分析图” 最新评论 谢谢你 : 很想有一个gmail,. 好想 : 我也很想有一个gm. 丁一一 : 朋友,我也用了vm. 碧城仙 : 呵呵,我现在的SE. 林润 : 前阵子一直在忙,. 碧城仙 : 都快有两个月没见. H翎 : 我也活着 . P.H. : 这就是人的虚荣。. Legend-X : 原来换了个地方讨. Legend-X : 这种问题见仁见智. 存档 2004/01/18/-2004/04/29 2004/04/30/-2004/06/08 2004/06/09/-2004/07/01 2004/07/02/-2004/08/04 逝者如斯 反向链接 访问统计 DVD Movies 我的链接 独角兽的天空 寸心知 del.icio.us