摘要: 文章《Wicket1.3中Class热加载--使用篇》的姐妹篇。
介绍Wicket1.3中如何实现类的热加载功能,从而在修改类(包括添加或者删除Field,Method)时,无须重新启动服务器,即可生效。
阅读全文
摘要: 介绍如何使用Wicket1.3的类热加载功能,从而在修改类(包括添加或者删除Field,Method)时,无须重新启动服务器,即可生效。从而提高Wicket开发效率。
阅读全文
Aquarius Orm Studio发布正式0.1版本,可以通过下面地址访问
http://orm.aquatool.org/nl/zh/CN/index.html
下面是它的基本功能介绍
- 数据库正向建模(支持数据表,存储过程,视图),并生成相关DDL
- 数据库反向工程,支持从数据库导入数据表,存储过程,视图等数据库元素
- 支持多数据平台,包括Oracle,DB2,MySql,MsSql(支持2005),Sybase,PostgreSql等
- 生成测试数据,可以根据数据库模型生成测试数据,方便进行单元测试。
- 生成相应ORM代码及配置文件,支持Hibernate3,OJB,IBatis及OpenJPA
- 支持多国语言,包括中文(简体,台湾繁体,香港繁体),英文,日文(谢谢Judy.Chang的日文翻译)
- 支持生成Html格式的文档,用来方便管理和归类
- 支持使用Velocity模板生成多种类型的文件
它支持Eclipse3.2,Eclipse3.3,Eclipse3.4
在网站可以下相应的All-In-One版本(包含WTP),也可以下载相应的RCP版本或者是相应插件安装包
还可以通过
http://orm.aquatool.org/nl/download/update 在级升级
源代码正在申请Google的代码库,将于近期放出。
开源协议我还在考虑中,但个人使用肯定是永远免费。
如果有问题,可以发站内消息或者直接发Email到wl_95421@yahoo.com.cn与我联系
下载地址
(重要提示:如果安装不成功,尝试将feature文件夹删掉)
文件比较大,大概有近20M,使用Zip压缩。
现在发布的是Beta版,SourceForge上面的空间正在申请。
发布的版本,支持Eclipse3.2和Eclipse3.3,需要GEF插件,可以在1.4及1.5下运行(我只测试了Sun JDK1.4和JDK1.5的三个版本,并不保证所有的JDK都能运行)。
RCP版本正整理中,国庆前发布。
如果有问题,请留言
以下是工具的介绍
Aquarius ORM Studio介绍
从事软件开发多年,感觉数据库在整个软件开发过程中扮演一个不可或缺的角色。一旦一个业务项目进入立项阶段,需要支持哪些数据库平台,如何使用该种数据库平台都将成为架构师需要考虑的内容,对于一般的开发人员,则可能根据需要建立各种数据表,还可能需要通过反向工程来了解现有数据库的架构,随着ORM工具的流行,程序员还需要将数据表映射到类上,并保证两者间的同步,过去几年从事相应工作的经验告诉我,这既不是一个轻松的事情,更不是一件令人感觉愉快的事情。同时市场上有大量优秀的数据库工具,从建模到分析,还有ORM,但可惜的是,大部分优秀的工具都不是免费的,就像最有名的PowerDesigner,其价格令我咋舌。象 PowerDesigner这么强大的工具,我只能用到其中一部分功能,却要付出所有的价格,而且功能却没有满足的我的需要。
所以我萌生了根据自己的需求来开发一个数据库 工具的想法,并在接下来的两年中付诸实施。这个工具我称为Aquarius Orm Studio,Aquarius是水瓶座,我的星座,ORM是指这个工具的一个重要功能,Studio是个流行词。
这个工具可以完成以下功能:
数据库正向建模(支持数据表,存储过程,视图),并生成相关DDL
数据库反向工程,支持从数据库导入数据表,存储过程,视图等数据库元素
支持多数据平台,包括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql等
生成测试数据,可以根据数据库模型生成测试数据,方便进行单元测试。
生成相应ORM代码及配置文件,支持Hibernate3,OJB,IBatis及OpenJPA
支持多国语言,包括中文(简体,台湾繁体,香港繁体),英文,日文(谢谢Judy.Chang的日文翻译)
我的主要工作是做Eclipse插件开发
在开发中,遇到一些问题,比较麻烦,象转换文件编码,或者替换文件内容(Eclipse的虽然支持正则式,但只能替换成单行字符串,不爽)
所以自己开发一个小插件,放出来,方便大家,支持以下功能:
1、将指定的多个文件,进行编码转换,如GBK->UTF-8(因为我做插件开发的时候,默认是GBK,现在要发布源码,国外的开发人员,就有问题,所以做了这个插件)
2、对指定的多个文件,进行替换,支持多行文本和正则式
3、将指定的多个文件,恢复到最近一个版本。
下载地址
另外做个预告:
本周内将发布我的一个Eclipse数据库插件(约100K行代码),支持以下功能:
1、数据库正向建模(支持数据表,存储过程,视图),并生成相关DDL
2、数据库反向工程,支持从数据库导入数据表,存储过程,视图等数据库元素
3、多数据平台,包括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql等
4、生成测试数据,可以根据数据库模型生成测试数据,方便进行单元测试。
5、生成相应ORM代码及配置文件,支持Hibernate3,OJB,IBatis及OpenJPA
以下是为IBatis生成的XML:
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<sql id="selectUserWhere">
<dynamic prepend="where">
..这里省略部分内容
</isPropertyAvailable>
<isPropertyAvailable prepend="or" property="user_Or_NotNull_State"><![CDATA[STATE_C is not null]]>
</isPropertyAvailable>
</dynamic>
</sql>
<delete id="deleteUser" parameterClass="String"><![CDATA[
Delete From demo.user_t
Where USER_ID=#userId#
]]>
</delete>
<select id="getUserRolesByUser" parameterClass="String" resultMap="userRoleResult"><![CDATA[
Select USER_ID, ROLE_ID from demo.user_role_t
Where USER_ID=#userId#
]]>
</select>
<select id="doCountUser" parameterClass="java.util.Map" resultClass="int"><![CDATA[
Select count(*) From demo.user_t
$Where$ $condition$]]>
</select>
<update id="updateUser" parameterClass="user"><![CDATA[
Update demo.user_t SET USER_ID=#userId# , USER_NAME=#userName# , PASSWORD=#password# , VALID_FROM=#validFrom# , VALID_TO=#validTo# , TITLE=#title# , DESCRIPTION=#description# , DOMAIN_C=#domain# , GROUP_C=#group# , ORDER_C=#order# , STATE_C=#state# Where USER_ID=#userId#
]]>
</update>
<insert id="insertUser" parameterClass="user"><![CDATA[
Insert Into demo.user_t(USER_ID , USER_NAME , PASSWORD , VALID_FROM , VALID_TO , TITLE , DESCRIPTION , DOMAIN_C , GROUP_C , ORDER_C , STATE_C)
Values(#userId# , #userName# , #password# , #validFrom# , #validTo# , #title# , #description# , #domain# , #group# , #order# , #state#)
]]>
</insert>
<select id="doSelectUser" parameterClass="java.util.Map" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
$Where$ $condition$]]>
</select>
<select id="selectUser" parameterClass="java.util.Map" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
]]>
<include refid="selectUserWhere"/>
</select>
<select id="selectUserByID" parameterClass="String" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
Where USER_ID=#userId#
]]>
</select>
<select id="doDeleteUser" parameterClass="java.util.Map"><![CDATA[
Delete From demo.user_t
$Where$ $condition$]]>
</select>
<delete id="deleteUserByID" parameterClass="String"><![CDATA[
Delete From demo.user_t
]]>
<include refid="selectUserWhere"/>
</delete>
</sqlMap>
这里是《Wicket开发指南》一书的代码
已经整理完了
代码与书上基本一致,主要区别在于Page继承自AbstractExamplePage而非WebPage。而且在每个Html页面上多了一个mainNavigation,以提供View Source功能。,方便查看源代码。
这些源代码不再需要额外的付出,任何人都可以下载,当作《Wicket开发指南》一书全文下载不方便的一些补偿吧。
下面是下载地址:
http://gocom.primeton.com/modules/newbb/titleflat_5087_41.htm
最近完成了一本关于Wicket的书
感于自己得益于许多开源软件,以及许多的免费书籍,所以这本书也免费开放。
该书266页,约18万字。
现在全部发布在网上,大家可以免费浏览。
我很喜欢Wicket这个框架,也希望有越来越多的开发人员使用这个框架。
我把前两节放在下面作为介绍。
因为书的内容比较多,而且GoCom答应提供空间和论坛,所以我也不好在这里直接上传,请谅解,而且GoCom也答应提供PDF版本下载,我也会在元旦前后更新此书,然后免费提供给所有人员。
你可以在http://gocom.primeton.com/这个地址查看该书(谢谢普元的GoCom提供的空间和论坛)
(感觉有点做广告的嫌疑)
你也可以在这个论坛上提出问题,我会尽快回复
http://gocom.primeton.com/modules/newbb/viewforum41.htm
One World,One Dream。
Wicket前生后世篇
Wicket是什么?简单点说,它就是一个基于Java的Web开发框架,与Struts,WebWork,Tapestry相类似。其特点在于对Html和代码进行了有效的分离(有利于程序员和美工的合作),基于规则的配置(减少了XML等配置文件的使用),学习曲线较低(开发方式与C/S相似),更加易于调试(错误类型比较少容易,而且容易定位)。如果你不对微软并不反感,可以把它看作Java平台上的ASP.NET。
Wicket现在是Sourceforge上一个非常活跃的项目,开发源码基于Apache协议(也是最宽松,对商业最友好的的源码协议),项目位于http://wicket.sourceforge.net,另外它还有一个独立的域名网站http://www.wicketframework.org/。最新的消息则是,Wicket已经成为Apache孵化器中一个项目,可以通过http://incubator.apache.org/projects/wicket.html来访问。但SourceForge上的网站仍然可以访问。
Wicket出现时,著名的J2EE网站TSS(即http://www.TheServerSide.com,以后简称TSS),对该项目也进行了讨论,有一段旷日持久的论战(地址:http://www.theserverside.com/news/thread.tss?thread_id=28162:),论战主力当然就是Wicket的主要作者Jonathan Locke和Tapestry的作者Howard Lewis Ship ,争论的内容十分广泛,从URL的格式到系统结构,从扩展性到界面开发,如果有时间的话,我尽量将其中部分内容翻译过来,还是很精彩的。(TSS上很多的讨论都非常精彩,如果英文好的话,建议经常上去看看,国外的牛人就是多啊。有时候我也觉得很奇怪,这些人都不用睡觉的吗,看他们的帖子,完全覆盖了24小时,感觉他们的老板真是宽容啊)。
Wicket的作者中有几个是原Sun公司Swing小组的开发人员(现在可能大部分已经不是了),因此Wicket的框架中带有浓厚的C/S色彩。而他们的开发计划中,还包括了Swing,Flash平台的支持,也就是说使用Wicket不仅可以可以输出Html,而且可以支持Swing和Flash,不过和朋友经过讨论后,觉得这个计划看起来有一点不切实际,毕竟Html,Swing,Flash之间的差别还是很大,恐怕想要无缝移植,还是有点难度的。单是一个JavaScript,恐怕就够头痛了。
Wicket带有强烈C/S结构的UI色彩,这一点有助于美工和程序人员的分工,与Delphi的开发方式非常类似(Delphi使用.frm文件保存UI控件的定义,而用.pas文件存储代码,从而对控件进行操作)。Wicket则是使用Html描述UI,并将具有特殊标记的Html元素定义为UI控件,在java文件中则直接使用代码操作这些UI控件,控制其输出及行为,样式等。这一点和Tapestry,以及.NET平台上的ASP.NET极为相似,也怪不得与Tapestry的作者争论了这么久,毕竟两者的用户群有很多的重复。其实从结构上看来,无论是Tapestry,ASP.Net,Wicket估计都借鉴了Applet平台上的WebObjects,还有Delphi。(不要忘了,Delphi的创建者Anders Hejlsberg就是.net框架的架构师,所以C#和Asp.net怎么看都带着Delphi的影子。
Wicket目前最新的版本是1.2.2版,已经支持了AJAX,但感觉这个框架的发展时间毕竟还是短了一点,尽管设计思想很不错,但还是有许多问题存在的,包括控件的数量,BUG较多等,希望2006年它可以尽快的成熟起来。
关于重新发明轮子的争论
谈到Wicket,恐怕第一个感觉就是在Java的Web开发中又多了一个轮子,这一点国内外的程序员好象都是一样。
有一个国外的Blog专门写了一篇关于轮子的文章,说明了重复发明轮子的必要性。我个人对于这种轮子是持一种欢迎的态度,因为没有人会去写一段功能完全一样的东东,总是要修正了原有轮子的不足,这样就不能简单当作一种重复。
即使是功能重复,就不需要轮子了吗?JSP能完成Struts到所有功能,而Tapestry能做到的,Struts也全部可以做到,但Struts,Tapestry就不需要了吗?Struts的MVC结构比JSP更加优秀,在很大程度上减轻了开发人员开发量,而Tapestry基于组件的开发方式,则是开创了一种新的Web开发方式,对于多语言的支持也有了新的方式。以往开发多语言页面时,往往使用properties保存字符串资源,但是页面通常都没有什么变化。而Tapestry可以通过不同的Html为不同的国家指定不同的页面。
Wicket吸收了Tapestry的一部分内容,但我最喜欢的就是,它是基于规则的,而并非XML配置的方式,这不仅有利于程序员学习,对系统的维护及开发规范都很有效,毕竟XML的编写并不见得就比写一段程序来得更容易。(这里插一句题外话,我觉得XML文件用来表示数据和资源,而不是行为,更不是业务,所以对于XML我只用来存放多语言资源或者用来做数据交换。象Spring这种大量使用XML方式,我并不欣赏,Spring也意识到了这一点,在2.0版本中努力的简化Xml的配置,但是并不尽如人意)。如果使用简单的规则来配置或者管理一个系统,用户就会很容易的查找到自己需要的内容。而通过配置文件,不管这样的一个配置文件的结构如何好,也需要在其中查找自己需要的内容,开发效率肯定要低一些。
因此对于这种有创新性的轮子,多几个,或许Java世界可以跑得更快一些。
去年就听说不少Web框架的开发人员要联合起来开一个Web框架,在Yahoo上还有一个讨论组,上去看了一下。但是这个事件对我的第一感觉就是晕,第二感觉就是特别的晕,虽然目前Java世界的Web框架一通混战,但这样一个联盟,所给出的东西很可能是第二个EJB。