Wicket1.3中Class熱加載--揭秘篇
摘要: 文章《Wicket1.3中Class熱加載--使用篇》的姐妹篇。介紹Wicket1.3中如何實(shí)現(xiàn)類的熱加載功能,從而在修改類(包括添加或者刪除Field,Method)時(shí),無(wú)須重新啟動(dòng)服務(wù)器,即可生效。 閱讀全文
posted @ 2008-11-24 11:44 豬兒笨笨 閱讀(1729) | 評(píng)論 (3) | 編輯 收藏
主要是個(gè)人的一些思考和技術(shù)文章,還有許多翻譯的文檔
posted @ 2008-11-24 11:44 豬兒笨笨 閱讀(1729) | 評(píng)論 (3) | 編輯 收藏
posted @ 2008-11-22 22:27 豬兒笨笨 閱讀(1985) | 評(píng)論 (2) | 編輯 收藏
Aquarius Orm Studio發(fā)布正式0.1版本,可以通過(guò)下面地址訪問(wèn)
http://orm.aquatool.org/nl/zh/CN/index.html
下面是它的基本功能介紹
posted @ 2008-07-04 16:20 豬兒笨笨 閱讀(2370) | 評(píng)論 (4) | 編輯 收藏
根據(jù)大家的意見(jiàn),對(duì)工具進(jìn)行了一些修正,添加了以下幾個(gè)主要的功能
我自己已經(jīng)申請(qǐng)了一個(gè)域名,主機(jī)在國(guó)外,并逐步將自己的開(kāi)源產(chǎn)品及相應(yīng)的書(shū)放到上面,SVN的建立還在研究中。
大家可以通過(guò)http://orm.aquatool.org/nl/zh/CN/來(lái)訪問(wèn)這個(gè)地址,上面有在線文檔,不需要下載軟件即可了解軟件。
有興趣的朋友,可以通過(guò)下載RCP版本來(lái)試用,晚一點(diǎn)我會(huì)建立論壇及MailList,希望大家可以提供更多的意見(jiàn)。
posted @ 2007-11-02 16:17 豬兒笨笨 閱讀(1308) | 評(píng)論 (4) | 編輯 收藏
文件比較大,大概有近20M,使用Zip壓縮。
現(xiàn)在發(fā)布的是Beta版,SourceForge上面的空間正在申請(qǐng)。
發(fā)布的版本,支持Eclipse3.2和Eclipse3.3,需要GEF插件,可以在1.4及1.5下運(yùn)行(我只測(cè)試了Sun JDK1.4和JDK1.5的三個(gè)版本,并不保證所有的JDK都能運(yùn)行)。
RCP版本正整理中,國(guó)慶前發(fā)布。
如果有問(wèn)題,請(qǐng)留言
以下是工具的介紹
Aquarius ORM Studio介紹
從事軟件開(kāi)發(fā)多年,感覺(jué)數(shù)據(jù)庫(kù)在整個(gè)軟件開(kāi)發(fā)過(guò)程中扮演一個(gè)不可或缺的角色。一旦一個(gè)業(yè)務(wù)項(xiàng)目進(jìn)入立項(xiàng)階段,需要支持哪些數(shù)據(jù)庫(kù)平臺(tái),如何使用該種數(shù)據(jù)庫(kù)平臺(tái)都將成為架構(gòu)師需要考慮的內(nèi)容,對(duì)于一般的開(kāi)發(fā)人員,則可能根據(jù)需要建立各種數(shù)據(jù)表,還可能需要通過(guò)反向工程來(lái)了解現(xiàn)有數(shù)據(jù)庫(kù)的架構(gòu),隨著ORM工具的流行,程序員還需要將數(shù)據(jù)表映射到類上,并保證兩者間的同步,過(guò)去幾年從事相應(yīng)工作的經(jīng)驗(yàn)告訴我,這既不是一個(gè)輕松的事情,更不是一件令人感覺(jué)愉快的事情。同時(shí)市場(chǎng)上有大量?jī)?yōu)秀的數(shù)據(jù)庫(kù)工具,從建模到分析,還有ORM,但可惜的是,大部分優(yōu)秀的工具都不是免費(fèi)的,就像最有名的PowerDesigner,其價(jià)格令我咋舌。象 PowerDesigner這么強(qiáng)大的工具,我只能用到其中一部分功能,卻要付出所有的價(jià)格,而且功能卻沒(méi)有滿足的我的需要。
所以我萌生了根據(jù)自己的需求來(lái)開(kāi)發(fā)一個(gè)數(shù)據(jù)庫(kù) 工具的想法,并在接下來(lái)的兩年中付諸實(shí)施。這個(gè)工具我稱為Aquarius Orm Studio,Aquarius是水瓶座,我的星座,ORM是指這個(gè)工具的一個(gè)重要功能,Studio是個(gè)流行詞。
這個(gè)工具可以完成以下功能:
數(shù)據(jù)庫(kù)正向建模(支持?jǐn)?shù)據(jù)表,存儲(chǔ)過(guò)程,視圖),并生成相關(guān)DDL
數(shù)據(jù)庫(kù)反向工程,支持從數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)表,存儲(chǔ)過(guò)程,視圖等數(shù)據(jù)庫(kù)元素
支持多數(shù)據(jù)平臺(tái),包括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql等
生成測(cè)試數(shù)據(jù),可以根據(jù)數(shù)據(jù)庫(kù)模型生成測(cè)試數(shù)據(jù),方便進(jìn)行單元測(cè)試。
生成相應(yīng)ORM代碼及配置文件,支持Hibernate3,OJB,IBatis及OpenJPA
支持多國(guó)語(yǔ)言,包括中文(簡(jiǎn)體,臺(tái)灣繁體,香港繁體),英文,日文(謝謝Judy.Chang的日文翻譯)
posted @ 2007-09-07 11:30 豬兒笨笨 閱讀(6116) | 評(píng)論 (42) | 編輯 收藏
我的主要工作是做Eclipse插件開(kāi)發(fā)
在開(kāi)發(fā)中,遇到一些問(wèn)題,比較麻煩,象轉(zhuǎn)換文件編碼,或者替換文件內(nèi)容(Eclipse的雖然支持正則式,但只能替換成單行字符串,不爽)
所以自己開(kāi)發(fā)一個(gè)小插件,放出來(lái),方便大家,支持以下功能:
1、將指定的多個(gè)文件,進(jìn)行編碼轉(zhuǎn)換,如GBK->UTF-8(因?yàn)槲易霾寮_(kāi)發(fā)的時(shí)候,默認(rèn)是GBK,現(xiàn)在要發(fā)布源碼,國(guó)外的開(kāi)發(fā)人員,就有問(wèn)題,所以做了這個(gè)插件)
2、對(duì)指定的多個(gè)文件,進(jìn)行替換,支持多行文本和正則式
3、將指定的多個(gè)文件,恢復(fù)到最近一個(gè)版本。
下載地址
另外做個(gè)預(yù)告:
本周內(nèi)將發(fā)布我的一個(gè)Eclipse數(shù)據(jù)庫(kù)插件(約100K行代碼),支持以下功能:
1、數(shù)據(jù)庫(kù)正向建模(支持?jǐn)?shù)據(jù)表,存儲(chǔ)過(guò)程,視圖),并生成相關(guān)DDL
2、數(shù)據(jù)庫(kù)反向工程,支持從數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)表,存儲(chǔ)過(guò)程,視圖等數(shù)據(jù)庫(kù)元素
3、多數(shù)據(jù)平臺(tái),包括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql等
4、生成測(cè)試數(shù)據(jù),可以根據(jù)數(shù)據(jù)庫(kù)模型生成測(cè)試數(shù)據(jù),方便進(jìn)行單元測(cè)試。
5、生成相應(yīng)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">
..這里省略部分內(nèi)容
</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>
posted @ 2007-09-07 00:19 豬兒笨笨 閱讀(1475) | 評(píng)論 (8) | 編輯 收藏