Java Architect

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(2)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜

2008年6月19日 #

关于SAAS平台的一点想法

最近研究了几个ERP,CRM的产品 象Sales force, Compeire, sugarCRM,觉得SAAS平台无非需要提供以下可以高度定制的功能。

  1.  GUI
    • CSS
    • resources
    • menu/link
    • message i18n
    • form
    • GUI EventListener
  2. Business Object
    • business logic or call back
    • email
    • report charts
    • job scheduler
    • business rule
    • work flow
    • access control
    • asynchronous request.
  3. Database
 
我觉得这里面最难的应属GUI的高度可定制化。本人正在想用GWT来做一个基于上面想法的SASS平台,届时软件可真正实现快速按需打造。欢迎JAVA界的同仁多提宝贵建议。






posted @ 2008-06-19 05:54 zrq 阅读(1055) | 评论 (0)编辑 收藏

2007年9月8日 #

sql statement

  Select obj
 
from CommDeductionType obj
  
where 1=1
    #
if($obj)
     
and obj.deductionTypeCode = #{obj.deductionTypeCode}
    #
end

posted @ 2007-09-08 02:50 zrq 阅读(141) | 评论 (0)编辑 收藏

2007年7月27日 #

Open laszlo


Datapointers are not bound to views like datapaths are, but they do have a place in the view hierarchy—that is, they "know about" parents and children.
 1 
 2 <datapointer xpath="myData:/" ondata="processData()">
 3     <method name="processData">
 4       this.selectChild(2); 
 5       do {
 6         if (this.xpathQuery( '@show' ) == 'south park') {
 7             Debug.write(this.xpathQuery('firstName/text()'));
 8         }
 9       } while (this.selectNext()); 
10     </method>
11   </datapointer>
12 
13 

Create data set at runtime

LzDataset: var dset = new LzDataset(null, {name: 'mydset'})

$path{} limitations
A limitation of the $path{} constraint is that the expression it contains is evaluated only at the initialization time, that is, an expression such as $path{'mynode[' + i + ']/@attr'} will behave like a $once{} constraint.Custome

Customize the data binding
1 <view name="swatch" width="200" height="30" 
2   datapath="colors:/value[1]/text()">
3     <method name="applyData" args="v">
4       setBGColor(eval(v))
5       display.setText(v)
6     </method>
7   </view>

$path{}


datapath.setdatapointer

<canvas height="150">
<dataset name="phonebook" src="resources/phonebook.xml"/>
<simplelayout axis="x" spacing="20"/>

<view name="contacts" height="150" width="100">
<view bgcolor="0xe0e0e0" datapath="phonebook:/contacts/contact"
onmouseover="setBGColor(0xc0c0c0)" onmouseout="setBGColor(0xe0e0e0)"
onclick="details.datapath.setPointer(this.datapath.p)">
<simplelayout axis="x" spacing="5"/>
<text datapath="@firstName" resize="true"/>
<text datapath="@lastName" resize="true"/>
</view>
<simplelayout spacing="5"/>
</view>

<view id="details" width="150" height="150" bgcolor="0xe0e0e0" fgcolor="blue">
<datapath/>
<text datapath="@firstName"/>
<text datapath="@lastName"/>
<text datapath="@phone"/>
<text datapath="@email"/>
<simplelayout spacing="5"/>
</view>
</canvas>



posted @ 2007-07-27 03:18 zrq 阅读(182) | 评论 (0)编辑 收藏

2006年8月13日 #

DAO終結者

動態組裝SQL是實際應用中的一個常見問題,我發現在很多論壇中的解決方案都不干淨,下面是我在很多項目中使用的方案,簡洁有效.

基本概念如下:

1. 使用模板技術,如Velocity,FreeMarker;
2. 在SQL中不要使用?,使用自己的place holder ,such as #{variableName};

象下面的SQL語句
select firstName
      ,lastName
from users u
where  u.userId= #{userId}

#if($companyId)
  and u.companyId=#{companyId}
#end

處理過程如下:

1.將所有變量放進一個MAP中;
2.用VELOCITY進行MERGE,將得到以下的SQL,假定companyId 不為空;
  select firstName
      ,lastName
from users u
where  u.userId= #{userId}
  and u.companyId=#{companyId}
3.再將上面的SQL進一步處理,根據SQL語句中的placeHolder順序和MAP中的變量,生成一個變量的LIST,同時將變量的placeHolder轉換成?;
4.將變量LIST的數值依次注入到preparedStatement中;

  Tips: 這里還可生成一個完全可執行的 SQL 語句輸出到 LOG , 以便進行除錯;
5.執行SQL, reflection技術將ResultSet轉換成voList;

 

將上面的過程封裝成一個 Class , 只需將 sqlName,parameterMap,voClass 傳入便可返回一個 voList 或數組 . 此舉將大大減化 DAO 的代碼 , 根據我的經驗 , 代碼最起碼減少 70%, 更為重要的是查詢非常容易維護 , 極大地減少了出錯的概率 ,SQL 語句清晰易懂 , 不再是醜陋的 criteria, 也不再是將一個個的分散的 SQL 片斷 , 我們的程序員將會有更多的時間來寫 SQL, 而不是做其它讓人厭煩的工作 , 排錯也變得异常簡單 , 唯一可能出錯的地方只能在 SQL , 只要將 LOG 輸出的完整可執行 SQL 放在 database client 中執行一下 , 問題在哪兒 , 一目了然 .

我相信此方法 比起 iBatis, Spring jdbcTemplate,Hibernate Criteria 要容易使用得多 . 其實 Hibernate HQL, 也可以用此方法來動態生成 HQL.
 

posted @ 2006-08-13 09:35 zrq 阅读(248) | 评论 (0)编辑 收藏

仅列出标题