Amazon Ads

2013年8月10日 星期六

[小技巧]改變Eclipse行數的顏色

日前拜歐下載一個喜歡的Eclipse主題回來,卻發現他「行數」的顯示的地方太淺,看得有點吃力。


這時可以到「Preference」中自己去修改,可以直接在行數的地方按「右鍵」,再點按「Preference...」,如下:


會開啟如下的對話窗,再點按「Text Editor」:

這時會開啟「Text Editors」的對話窗。

在上列的對話窗中的下方區塊中,選到「Line number foreground」,再點按「Color」旁的顏色按鈕,就會出現下面的「色彩」對話窗給你自己定義,很方便吧!

在Eclipse中其實有很多地方的顯示,你可以調整成你喜歡的「Style」,換個自己喜歡的顏色,就像人換穿自己喜歡的方服一樣,寫程式的時候,心情也許會好一點,哈!

註:拜歐的版本為:

依Eclipse的版本不同,設定方式可能有稍微不同。

2013年8月8日 星期四

[分享] Oracle Certified Expert, Java Platform, Enterprise Edition 6 Enterprise JavaBeans Developer (OCEEJBD6,1Z0-895)的EJB認證準備

拜歐實在不知道這個認證的縮寫,應該是OCEEJBD吧!它的考試代號為:1Z0-895,要考這項的話,考試券其實就跟考之前SCJP、SCWCD的一樣。

在Oracle的官網,有相關的說明

一樣在Coderanch的認證討論區中,有介紹的專區

另外就是有賣相關教材(模擬考題)的EPractize Labs,還有,國外論壇考過的人都比較建議這一套Enthuware

考試準備參考資料:

  1. EJB 3.1 Specification document,可以從這裡下載。(天啊!六百多頁)
  2. OReilly出版的Enterprise JavaBeans 3.1
  3. Frits WalravenIvan Krizsan提供的筆記(這兩位真是佛心來的) 
  4. Coding練習
以下是一些考過的人經驗分享:


參考來源:
http://www.coderanch.com/t/614320/sr/certification/Passed-OCE-EJBD

2013年8月1日 星期四

[分享]Java包Exception

假設:
package idv.jk.exception;

public class ExceptionWrapper {
    public static void main(String[] args){
        try {
            new ExceptionWrapper().div(1, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
    public int div(int a, int b) throws Exception{
        return a/b;
    }
}
當這段程式執行後,因為1/0的關係,一定會造成Exception
java.lang.ArithmeticException: / by zero
     at idv.jk.exception.ExceptionWrapper.div(ExceptionWrapper.java:14)
     at idv.jk.exception.ExceptionWrapper.main(ExceptionWrapper.java:6)

若循著error stack去找,通常可以很快找到是那行程式出錯。

但這時你又會想,靠!使用者是傳了那個白癡參數進來!
一定會想在第一時間拿起電話,打給使用你API的人說,你不可以這樣用(一邊心裡os:傻蛋),但這年代是講證據的,你總要有一份證據,才能說一段話。但通常你的語氣是:「不好意思,造成了你的困擾,可以請問一下你傳的參數是?」

所以在這樣的需求下,你應該介入去控制你的Exception若被丟出來時,你要讓你的Exception盡量去提供你要知道的事,讓他可以幫助你在第一時間去解決你的問題。

上面的除法method我就會改成:

    public int div(int a, int b) throws Exception{
        try {
            return a/b;
        } catch (Exception e) {
            throw new Exception("a: " + a + ", b:" + b, e);
        }
    }

加入一些客製化的內容在Exception中,再次執行程式後,
java.lang.Exception: a: 1, b:0
     at idv.jk.exception.ExceptionWrapper.div(ExceptionWrapper.java:16)
     at idv.jk.exception.ExceptionWrapper.main(ExceptionWrapper.java:6)
Caused by: java.lang.ArithmeticException: / by zero
     at idv.jk.exception.ExceptionWrapper.div(ExceptionWrapper.java:14)
     ... 1 more

那個e的參數,就還是一個會顯示在Cause這一段訊息裡,但最上面那一行可以看到使用者傳入的參數。

所以你可以第一時間拿起電話,打給那個使用的豬頭,說:「那個參數不能傳0啦!(傻呆)」,不過若對方資歷比你老,應該會回你一句:「你不會做防呆啊!」

咦!若在new Exception中沒有傳入e這個參數會變成如何呢?程式都貼在上面了,自己試試吧!

所以,如何丟出一個Exception,也是一種藝術地!

2013年7月31日 星期三

[分享]cannot Deploy...Servlet web service endpoint '' failure

今天在練習WS,要部署到Glassfish時,Server丟出了下列的錯誤:
 
cannot Deploy JAX-WS_WebServiceProvider
deploy is failing=Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: Servlet web service endpoint '' failure. Please see server.log for more details.

拜歐用了紅色部份當關鍵字去Google找,得到的答案有在Webmethod中使用了type為interface的當做參數,但這不符合我的情況。

後來再仔細檢查一次後,發現有一個Class做了WebService的annotation,但沒有任何method,如:

package idv.jk;

import javax.jws.WebService;

@WebService()
public class Calculator {

}

把@WebService的annotation拿掉後,就好了。

2013年7月24日 星期三

【分享】使用Eclipse的TCP/IP monitor監控網路傳輸

使用TCP/IP monitor來監控網路傳輸,其實類似把Eclipse當做一個代理伺服器,送出一個request出去,會先由TCP/IP monitor接收,再送往目的地;同樣地,目的伺服器回傳一個response回來,也是會由TCP/IP monitor接收後,再回傳本地客戶端。

首先要開啟Eclipse的TCP/IP monitor,如下圖:


再找到「Debug」下的「TCP/IP Monitor」:


當TCP/IP MonitorTCP/IP的View出現時,點按右上方的小小三角形,再點選「Properties」,再點按「Add...」:


就會跑出New Monitor的小對話窗出來:



在上面的對窗裡的設置如下:

  1. 「Local monitoring port」是指你的機器要當用來監控的話,是要送到你機器的那個port,這裡的設定不能和你機器上執行的伺服器使用的port重覆
  2. 「Host name」是指你要監控的伺服器的host name,如現在咱要監控咱機器上的Tomcat(它的port設為8888),就在這裡設為localhost
  3. 「Port」是指你要監控的伺服器的port,如上例本機Tomcat的8888
  4. 「Type」就是你要監控的傳輸內容類型

詳細說明可以參考這裡

設定完成後,可以看到你新增的Monitor,原始「Status」為「Stopped」,使用前記得點按右邊的「Start」鈕,讓他的狀態變成「Started」,若你local的port正被你機器上其他運作中的伺服器使用的話,他會報錯。


這裡要注意的是,因為這裡的「Local monitoring port」是設「6688」,所以呼叫伺服器的port,要改成「6688」,這樣送出的request才會先被TCP/IP Monitor接收到,如:


當送出上列的request後,切換到TCP/IP Monitor的View,就可以看到一堆訊息被記錄下來。


這個功能在開發Web Service等網路應用程式,可以提供不少有用的資訊。