SQL Builder
SQLBuilder支持Velocity来渲染定义在XML中的SQL. 为什么要用模板好处有二:
1.相比只能用+号换行而且老被Eclipse自动格式化的Java 字符串,XML中可以自由的缩进与换行。 2.可以用Velocity来自由动态的拼装SQL, 这个好处更无需多言了。 为什么不选用Freemarker做模板引擎,原因同样有二:
1. 因为SQL定义在spring的applicationContext-*.xml中,freemarker的变量定义与Spring的 placeholder一样,会引起冲突. 2. Velocity最近居然比Freemarker活跃. 详见Showcase的UserJdbcDao及其测试用例。
1. H2
1.1 选型
H2嵌入式模式是功能测试的首选。测试要求数据库运行要非常快速,而且为免测试间数据的耦合,要能在每个测试间很快速的重建数据,H2刚好满足这个需求。
H2的主要对手是Derby,对比显示H2比Derby更快,而且有着非常好用的Web管理界面(在Web界面里写SQL时居然有表名列名的动态提 示....)
1.2 in Springside 3
在/tools/h2目录里带了启动H2的命令(借助于maven管理的Jar包)。
另外,H2完全兼容hsqldb的语法,一般依赖数据库的开源项目都附带有hsqldb语法的初始化脚本。 SpringSide3中在使用嵌入式H2提供快速功能测试。url为jdbc:h2:mem:mini- service;DB_CLOSE_DELAY=-1 同时运行期的数据库也使用了H2的Server模式,url为jdbc:h2:tcp://localhost/~/mini-service。
2. MySQL 与 Oracle
开发实际项目时,需要将H2更换为实际数据库,Hibernate支持大部分的数据库,其中 Java程序员选用MySQL和Oracle的最多。 更换MySQL与Oracle 主要修改几个地方,SpringSide已在两个mini-example中带了示范配置,取消相应的注释符号即可。
1.pom.xml
注意因为版权问题,Oracle的Driver不在maven官网的仓库上,需要自行发布到团队的私服或拷贝到本机的maven仓库目录。
2.src/main/resource/applicationt.properties
用于连接池与hibernate的配置。
3. bin/build.xml
用于导出导入数据到数据库。
4. bin/hibernate/hibernate.cfg.xml
如果需要用hibernate-tools生成代码则修改此文件,否则可忽略。
5.修改entity的ID生成策略。
注意Oracle中一般会为每个主要的表创建一个Sequence,所以继承于IdEntity的子类需要重载getId()方法指定Sequence 名。 当然也可以只修改IdEntity基类,所有entity共用一个sequence。
Overview
数据库连接池可以使用应用服务器自带的实现,也可以使用开源的连接词如DBCP,可怜Tomcat/JBoss/Jetty貌似用的都是它。 使用ApplicationServer级别的连接池, 在ApplicationServer内的几个webapp间共享连接池以节约总的连接数,也可以为每个webapp独立分配以保证关键应用的供应。
DBCP好还是 Hibernate CP30 好,个人没有太深的感觉。因为Tomcat 还有 Spring的示例都是用DBCP的,那就DBCP吧。
配置参数
DBCP的性能配置主要是4个参数 #连接池启动时的初始值. dbcp.initialSize=10 #连接池的最大值. dbcp.maxActive=50
#最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止。 dbcp.maxIdle=20
#最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请。 dbcp.minIdle=5
一般这几个参数应该放在applicationContext.properties里方便部署时快速修改。
?
Web: MVC - Struts2, View - JSP2、Taglib、UrlRewrite, Javascript - JQuery、Dojo Base, CSS - YUI CSS Framework
1. 资料
江南白衣博物馆--Struts2笔记 ? 京山游侠--SpringSide 3 中的 Struts 2 ? 2.选型
Struts的招牌与用户群 + Webwork的较优雅架构 + Convention Plugin实现零配置文件,Struts2已经成为传统MVC里的最安全选择。 当然,GWT,Flex等是另一个潮流了。
3. in SpringSide 3.0
3.1 Convention Plugin实现零配置文件
Convention Plugin是2.1.6最新坐正的零配置Plugin,取代了原来的CodeBehind等插件,详细见详见Struts2笔记。 及其官方文档,Alfa.Shi翻译了中文版。
SpringSide 在struts.xml中重新定义扫描了根package名为web, 即会扫描xxx.xxx.web下所有的子Package。
3.2 CRUDAction的Prepareable与ModelDrivenen接口(涉及CRUD时的可选接口)
CRUD的Action全部使用Prepareable与ModelDriven接口,两个接口都是CRUD界面必备,详见Struts2笔记。 而非CRUD的action是否使用这两个接口就看具体情况了。