參考資料:
1、how to execute mongo admin command from java
2、Sharding Commands
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification.
- Bertrand Meyer
Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems.
- Charles Connell
註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2013年11月26日 星期二
2013年11月22日 星期五
使用 Jersey + Multi-part 接受檔案上傳(二):實作即時上傳
依照上篇文章(使用 Jersey + Multi-part 接受檔案上傳)的方法做 Multi-part 的上傳時
依據 Jersey 的實作方法,實際上會先在伺服器上把使用者上傳的檔案全部接收、暫存到暫存的資料夾內,然後才會進入使用者定義的 Multi-part 的介面,並獲得代表檔案內容的 FormDataMultiPart。
也就是說實際上如果檔案是要存到伺服器上,伺服器對這樣一個檔案上傳的動作,會花費兩次的磁碟 I/O 時間來接收和儲存這個檔案。
依據 Jersey 的實作方法,實際上會先在伺服器上把使用者上傳的檔案全部接收、暫存到暫存的資料夾內,然後才會進入使用者定義的 Multi-part 的介面,並獲得代表檔案內容的 FormDataMultiPart。
也就是說實際上如果檔案是要存到伺服器上,伺服器對這樣一個檔案上傳的動作,會花費兩次的磁碟 I/O 時間來接收和儲存這個檔案。
2013年11月21日 星期四
WADL:描述網站的 REST 介面的文件
WADL 是 Jersey 會自動產生出來的文件,可以從文件中看到每個 REST 介面使用的 method、接受的資料類型、介面的操作網址等等。
網址是 http://<host_name>/<project_name>/<prefix>/application.wadl
其中 HOST_NAME 是網站的網域名稱、PROJECT_NAME 是專案名稱、PREFIX 是在 web.xml 裡面定義的 REST 介面的入口。
參考資料:
1、Chapter 15. WADL Support
網址是 http://<host_name>/<project_name>/<prefix>/application.wadl
其中 HOST_NAME 是網站的網域名稱、PROJECT_NAME 是專案名稱、PREFIX 是在 web.xml 裡面定義的 REST 介面的入口。
參考資料:
1、Chapter 15. WADL Support
2013年11月14日 星期四
攔截 JVM 關閉的事件
某些程式碼想要在 JVM 關閉時處理,比如說釋放某些外部資源等等的
可以利用 Runtime 類別的 addShutdownHook() 方法,把要在 JVM 關閉時執行的程式碼加進去。
根據 Java 7 的官方文件顯示,會觸發 shutdown hook 的事件有以下兩種:
只要是任意一種事件被觸發,shutdown hook 上被註冊過的執行緒就會全部一起被觸發 start()
需要注意的是,全部一起被觸發指的當然還是一個一個觸發,但 JVM 不保證觸發的順序
另外也不會等一個執行緒執行完畢才繼續觸發下一個,而是一口氣觸發所有的執行緒,讓它們一起開始執行。
使用方法就單純產生一個 Thread 物件,然後呼叫 Runtime.addShutdownHook(java.lang.Thread) 就好了。
參考資料:
1、Runtime.html#addShutdownHook(java.lang.Thread)
可以利用 Runtime 類別的 addShutdownHook() 方法,把要在 JVM 關閉時執行的程式碼加進去。
根據 Java 7 的官方文件顯示,會觸發 shutdown hook 的事件有以下兩種:
1. The program exits normally, when the last non-daemon thread exits or when the exit (equivalently, System.exit) method is invoked, or
2. The virtual machine is terminated in response to a user interrupt, such as typing ^C, or a system-wide event, such as user logoff or system shutdown.
只要是任意一種事件被觸發,shutdown hook 上被註冊過的執行緒就會全部一起被觸發 start()
需要注意的是,全部一起被觸發指的當然還是一個一個觸發,但 JVM 不保證觸發的順序
另外也不會等一個執行緒執行完畢才繼續觸發下一個,而是一口氣觸發所有的執行緒,讓它們一起開始執行。
使用方法就單純產生一個 Thread 物件,然後呼叫 Runtime.addShutdownHook(java.lang.Thread) 就好了。
參考資料:
1、Runtime.html#addShutdownHook(java.lang.Thread)
2013年11月12日 星期二
2013年11月5日 星期二
觀察 GC 的狀況
-verbose:gc -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC
參考資料:
1、Re: Problem with mongo 2.2.0 and java connection
參考資料:
1、Re: Problem with mongo 2.2.0 and java connection
訂閱:
文章 (Atom)