Stan

Spring Roo 使用心得

最近開始看了一些Spring Roo 1.1, 也試著使用在新的project裡. 用了之後覺得他的確建構web app的好幫手. 當然也有人不喜歡Roo, 不過某些他不喜歡的原因, 在1.1版的Roo已經不存在了.

我喜歡他的原因在於,

  1. 建立了良好的程式範本. 從後端的Entity, 到前端的Jspx. Roo都幫我們建立清晰的結構可讓programmer遵循.
  2. AspectJ 的大量使用. 剛開始接觸 AOP的人,可能都會需要一段時間的適應. 一但上手, 最會覺得AOP方便好用. Roo大量使用AOP在 Entity和Controller上. 另外值得一提的是 Roo在Entity的 AOP 同時讓 GWT的 RequestFactorye功能顯得更直覺.
  3. 快速開發. 這一點, 我想是所有人對Roo的第一印象.
  4. 技術整合. Roo將一些新的技術/觀念整合放在一起, 如 Spring 3, JSR 303(Bean Validation), REST…等. 以下是我比較有在用的, 詳細的清單可到官方網站上看
  • JPA
  • Tiles
  • AspectJ
  • Dojo
  • GWT
  • Hibernate
  • JSR 303 Bean Valiation
  • REST
  • Spring Security
  • Maven

24 十二月, 2010 Posted by | Java | 發表留言

rails 小技巧 : 動態產生 javascript file

假設我們的javascript叫做 dynamic.js

一般來說我們會把該檔案 放到 rails的 /public/javascripts 目錄裡面, 然後在layout裡面加入

<%= javascript_include_tag ‘dynamic’%>

不過萬一我們希望 dynamic.js 的內容是動態的, 可以用下面的方法達成,

  • 首先一樣將 下面的程式加到 你的layout裡

<%= javascript_include_tag ‘dynamic’, :cache => false %>

  • 然後做一個 叫 javascripts 的controller, 裡面只有一個action叫做 dynamic
  • 製作一個 view叫做 dynamic.js.erb 或是 dynamic.js.rjs (看你要用 erb 或 rjs 來產生javascript的內容)
  • 最後一步就是你要在 routes.rb 裡面加上下面這一行, 讓rails找到正確的 controller, action, 和format

map.connect ‘:controller/:action.:format’

如此一來 http://……/javascripts/dynamic.js 就會動態的產生javascript檔案了

29 四月, 2008 Posted by | Ruby and Rails | , , | 發表留言

LiveValidation Rails Plugin

在本周 railsenvy 的podcast裡 介紹了一個 rails plugin, 叫做 Live validation Rails plugin

使用了這個plugin後, 它會幫我在client端產生一些javascript,

這些javascript會依照我們在 ActiveRecord上面的validation, 在client端先做一次檢查.

super DRY. cool.

24 四月, 2008 Posted by | Ruby and Rails | , , , , | 發表留言

Ruby的Symbol

Ruby的Symbol是什麼?

我剛學Ruby時 一直不是很清楚, 相信對很多Ruby的初學者也有相同的問題.

很多大師也對Ruby Symbol下了不同的定義,

然而對我來說, Ruby Symbol是代表一個字串的符號, 並且有下面兩個特性

1. 不可變動性 (所代表的字串內容不可更改)
2. 唯一性 (系統中代表同一個字串的symbol 是同一個instance)

在Ruby中, Symbol也是一個class, 但是它並不是String的subclass.

Symbol class不提供 Symbol.new 讓我們使用,

如果要產生Symbol的instance要使這個方式

>x = :abc

=>:abc

上面程式告訴Ruby, 我要產生一個Symbol的instance, 他所代表的字串是"abc"

>x.class
=>Symbol

我們可以看出來, x的class是Symbol而不是String

>y = :abc
=>:abc
>x.object_id
=>243938
>y.object_id
=>243938

上面我們看出 Symbol的唯一性, x和y是同一個object. (因為x和y的object_id是一樣的)

瞭解了Symbol是什麼後, 重要的問題來了?
Symbol有什麼用? 也就是說Ruby為什麼要有Symbol?

嗯……有兩個原因第一是節省記憶體空間(space), 第二是增加執行時的效率(performance)

如果你是Java的programmer,應該知道, Java的String內容是不能改變的, 然而Ruby的String卻完全不是這麼一回事,

>m = “abc"
=>"abc"
>n = “abc"
=>"abc"
>m.object_id
=>23225030
>n.object_id
=>23222010
>m[0] = “A"
=>"A"
>m
=>"Abc"

看出來了嗎? m和n都是字串"abc", 但是的卻是不同的instance (object_id不一樣), 而且字串的內容是可以修改的.

但是……….字串是程式中常常用到的, Ruby中的 每一個"abc", 其實都是 String.new(“abc"),
如果我們程式中有太多的"abc", 那麼, Ruby就會create一堆的 String instance…., 所以如果我們可以在程式裡多用:abc 來取代"abc", 那麼就可以節省掉一些記憶體的空間. symbol最普遍應用的就是就屬hashmap的key值了.

Symbol第二個好處就是增加執行時的performance,

Symbol在ruby內部除了代表一個字串外, 其實也代表了一個數字

如果ruby執行到 m.do_something, 在Ruby的內部, 會在m中找一個名稱叫做 do_something, 如果Ruby用字串比對的方式在m中去找名稱叫 “do_something"的method, 那麼performance將會很低(因為字串的比對是很花時間的), 所以Ruby會將 “do_something"轉成 :do_something, 由於:do_something也代表了某個數字(假設代表的數字是34), 因為Ruby只要在m中尋找 34這一個method, 這樣比用字串比對去找"do_something"要快得多了….

所以在Ruby當中 m.do_something 事實上是呼叫 m.send(:do_something)

23 四月, 2008 Posted by | Ruby and Rails | , , | 發表留言

Lingo, 讓JMS來做RPC

這一篇是一年多前在另一個blog中寫的
========================
Java programmer講到RPC(Romote Procedure Call), 多半會想到 RMI,
用RMI, 可以讓我們很容易的呼叫遠端的 mothod.

但是, RMI 有一些缺點, 其中每一個method都要 throw RemoteException, 不過最近我都用Spring framework, 他已經讓我們處理掉了這個麻煩…

另外一個RMI的缺點, 也就市本篇文章的重點, 就是method的呼叫者與被呼叫者的關係太緊密了,
也就是說, client必須指定我所要呼叫的server是在網路的哪一個位址…

JMS,則提供了一個方式,讓client (producer)送出message, 但不指定誰來收這一個message,
這種 loosely coupling 的方式, 讓我們的程式更有彈性, 但是用JMS來做RPC還是有一些麻煩的地方

* procedure送出的是message而不是 呼叫method
* 基本上 JMS是 asynchronous, 也就是說 proceudre送出message後, message還沒被處理, procedure就繼續執行下去.這與我們一般RMI 的用法不一樣.

然而Lingo 幫我們解決了這兩個問題, 透過Lingo, 我們可以讓client直接呼叫server的method (而不是發送message, 在server這端 也不用去接受message), 但是並不指定是哪一個server幫我們處理這一個method call. 這對multiple server和load-balance很有幫助.

Lingo的範例, 可以看下面這個網址, 相當簡單明瞭

http://lingo.codehaus.org/Example

附帶一提的是, lingo不但可以用 synchronous呼叫method, 另外也可以用synchronous呼叫method.

好用吧…..

23 四月, 2008 Posted by | Java | , , , , | 發表留言

開幕囉

一個喜歡寫程式的工程師, 在這邊跟大家交交朋友囉

23 四月, 2008 Posted by | Uncategorized | 發表留言