參考資料:
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. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註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)