2013年1月15日 星期二

Java 日期 Parse. DateFormat.setLenient

一般使用 Java 從字串轉成日期,通常會使用 SimpleDataFormat 做轉換。

例如:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DataSample {
 
   public static void main(String[] args) {
      SimpleDateFormat sdf = new SimpleDateFormat();
      sdf.applyPattern("MM/dd/yyyy") ;
      try {
         Date d = sdf.parse("01/17/2013") ;
         System.out.println(d) ;
      } catch (ParseException e) {
        e.printStackTrace();
      }
   }
}

會得到
Thu Jan 17 00:00:00 CST 2013

這是再自然不過了。
但是如果你不小心給錯格式,那會怎樣? 例如 MM/dd/yyyy 給成了 yyyy/MM/dd , 你猜會怎樣?

答案會 beyond imagination 。直覺應該會出錯,但不會,而且會有一個日期跑出來!!!

Tue Sep 01 00:00:00 CST 184

哪怎麼辦?
在 DateFormat 有一個 method , 可以解決此問題。 setLenient
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DataSample {
 
   public static void main(String[] args) {
      SimpleDateFormat sdf = new SimpleDateFormat();
      sdf.applyPattern("MM/dd/yyyy") ;
      sdf.setLenient(false);
      try {
         Date d = sdf.parse("2013/01/17") ;
         System.out.println(d) ;
      } catch (ParseException e) {
         e.printStackTrace();
      }
   }
}

會得到
java.text.ParseException: Unparseable date: "2013/01/17"
 at java.text.DateFormat.parse(DateFormat.java:357)
 at DataSample.main(DataSample.java:13)


2013年1月12日 星期六

Portal

什麼是 Portal。

簡單的說就是集合各類的網站的入口網站,行話叫做 web application(called "portlets") 的集合。
最著名的就是 igoogle , 或是 windows 8 都是這樣的概念。


進入 Portal 後,就可以透過這樣的介面,進入到不同的網站去,通常都是我們感興趣的內容。
而且這些內容會隨著時間而更新,所以不完全是被動的網頁。


每個獨立的網站,活在 Portal 下的,就稱為 Porlet。
而這些各自的 Porlet 內容,又會因為個人又有差異。例如天氣,Mail 等各自獨立的資訊都不同。
而為了達到傳遞各自不同的資訊,所以一些資訊的控制,如登入就顯得重要了。


為了達到這麼複雜的功能,需透過特別的 Portal Sever 來做控制,而每個個別的內容,又需要Porlet Container 來轉成特定的內容。Portal Server有幾個著名的例如 Liferay 分為 Community 和 Enterprise 版本。Jboss 的 GateIn


在 Java 的標準裡,是有定義 Portal 的。JSR 168 定義 Portal 1.0 , JSR 268 定義 Portal 2.0


題外話:
iGoogle 一度是我的首頁,今天再去看的時候突然發現此好用的功能要 sunset 了,猜想因為要推銷自家的 Chrome, 才出此下策吧。



2013年1月2日 星期三

Grails 2.2









Grails 又升級了!
最近的升版都很快,才剛適應 2.1 , 2.2 又來了。

根據官網的說法,升級重點如下
http://grails.org/doc/2.2.x/guide/introduction.html#whatsNew22

1.Namespace support


Bean names for Service artifacts provided by a plugin are now prefixed with the plugin name

grails 有一個很討厭的東西,就是 groovy 的 class name 不能重複,即使 package name 不一樣也不行。不然 runtime 時常常會給你驚喜!!
因此 Grails 決定如果名稱衝突的話,將會加上 plugin name 成為預設的 Serivce or Bean name,  讓 DI 找到對的 class。

Domain Class 的 Bean name 有了 plugin name , 將會影響建 DB 的 table name。當然也是可以設定的。

2.Forked Tomcat Execution


Grails 2.2 supports forked JVM execution of the Tomcat container in development mode.

嗯,我想最大的好處就是減少 memory 使用量,跟減少 Jar 檔衝突的可能。

3.SQL Projections In Criteria Queries

 

4.Groovy 2

最大的進展就是從 Groovy 1.8 跳到 Groovy 2 。除了對JDK 7  的 Support 外(Project coin),一些 enhancement 都有針對 Groovy 太動態,而產生無法管教的問題做一些修正。
像是static type checking @TypeChecked ,  或是 Static compilation @CompileStatic