2015年7月17日 星期五

Java 7七大新功能

原文出處:http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html
作者 : 壹咪阳光

Java 7已經完成的7大新功能:
      1
對集合類的語言支援;
      2
自動資源管理;
      3
改進的通用實例創建類型推斷;
      4
數字字面量下劃線支援;
      5 switch
中使用string
      6
二進位字面量;
      7
簡化可變參數方法調用。

      下面我們來仔細看一下這7大新功能:
      1
對集合類的語言支援
      Java
將包含對創建集合類的第一類語言支援。這意味著集合類的創建可以像RubyPerl那樣了。
     
原本需要這樣:
         List<String> list = new ArrayList<String>();
         list.add("item");
         String item = list.get(0);
  
         Set<String> set = new HashSet<String>();
         set.add("item");
         Map<String, Integer> map = new HashMap<String, Integer>();
         map.put("key", 1);
         int value = map.get("key");
      現在你可以這樣:
         List<String> list = ["item"];
         String item = list[0];
        
         Set<String> set = {"item"};
        
         Map<String, Integer> map = {"key" : 1};
         int value = map["key"];
      這些集合是不可變的。
  
      2
自動資源管理

      Java
中某些資源是需要手動關閉的,如InputStreamWritesSocketsSql classes等。這個新的語言特性允許try語句本身申請更多的資源,
  
這些資源作用於try代碼塊,並自動關閉。
     
這個:
         BufferedReader br = new BufferedReader(new FileReader(path));
         try {
         return br.readLine();
               } finally {
                   br.close();
         }
      變成了這個:
          try (BufferedReader br = new BufferedReader(new FileReader(path)) {
             return br.readLine();
          }
   
     
你可以定義關閉多個資源:
         try (
             InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest))
         {
         // code
         }
     
為了支持這個行為,所有可關閉的類將被修改為可以實現一個Closable(可關閉的)介面。
      3 增強的對通用實例創建(diamond)的類型推斷
     
類型推斷是一個特殊的煩惱,下面的代碼:
         Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
      通過類型推斷後變成:
         Map<String, List<String>> anagrams = new HashMap<>();
     
這個<>被叫做diamond(鑽石)運算符,這個運算符從引用的聲明中推斷類型。
  
      4
數字字面量下劃線支援

     
很長的數位可讀性不好,在Java 7中可以使用下劃線分隔長int以及long了,如:
         int one_million = 1_000_000;
  
運算時先去除下劃線,如:1_1 * 10 = 110120 – 1_0 = 110
      5 switch中使用string
     
以前你在switch中只能使用numberenum。現在你可以使用string了:
         String s = ...
         switch(s) {
         case "quux":
              processQuux(s);
     // fall-through
         case "foo":
   case "bar":
              processFooOrBar(s);
     break;
         case "baz":
        processBaz(s);
              // fall-through
   default:
              processDefault(s);
            break;
  }
 
      6
二進位字面量

     
由於繼承C語言,Java代碼在傳統上迫使程式師只能使用十進位,八進制或十六進位來表示數(numbers)
     
由於很少的域是以bit導向的,這種限制可能導致錯誤。你現在可以使用0b首碼創建二進位字面量:
         int binary = 0b1001_1001;
  
現在,你可以使用二進位字面量這種表示方式,並且使用非常簡短的代碼,可將二進位字元轉換為資料類型,如在byteshort
   byte aByte = (byte)0b001;   
   short aShort = (short)0b010;   
  
      7
簡化的可變參數調用

     
當程式師試圖使用一個不可具體化的可變參數並調用一個*varargs* (可變)方法時,編輯器會生成一個非安全操作的警告。
   JDK 7
將警告從call轉移到了方法聲明(methord declaration)的過程中。這樣API設計者就可以使用vararg,因為警告的數量大大減少了。

2015年7月11日 星期六

虛擬伺服器另一選擇 XenServer

下載 : http://xenserver.org/open-source-virtualization-download.html

企業開源 XenServer 基礎建置與管理

原文出處: OpenFoundry
作者:  顧武雄

作者簡介:顧武雄, Microsoft MVP、MCITP與MCTS認證專家、台灣微軟Technet、Tech Day、Webcast、MVA特約資深顧問講師。目前個人Linux著作有Linux企業現場應用系統、Linux私有雲社群網路現場實戰。

引言:如今在企業IT市場中,堪稱能夠與VMware以及Microsoft虛擬化平台技術並駕齊驅的,恐怕只有同樣是老牌子的Citrix XenServer了。因為它不僅兼具高效能、高穩定、高可用性以及最高安全設計之外,更令人讚嘆的是它還是一個Linux核心下的開放原始碼套件。在您準備為公司資訊作業環境,進行全面虛擬化的規劃與導入之前,強烈建議您不妨先參考一下本文的精闢介紹與實戰講解,並完成最新免費XenServer版本的下載與建置評估,再來決定誰是最後入主私有雲的虛擬化基礎平台。

簡介

前一陣子筆者到一家汽車零件公司協助他們IT部門導入協同作業平台,赫然發現此公司大部分的重要伺服器應用系統,皆是部署在以Citrix XenServer為主的虛擬化平台之上,其中的Guest OS也包括了數種版本的Windows Server以及Linux系列的作業系統。
我好奇的問負責的IT人員,為何會選擇使用開源的XenServer,來做為企業私有雲的基礎平台,而不是選用像是VMware的vSphere或是Microsoft 的Hyper-v呢,他只回答:「穩定、簡單、好用」。究竟Citrix開源的XenServer虛擬化平台解決方案,有哪一些吸引人的架構設計,讓如今許多的企業IT單位,仍舊選擇使用它,來建構這錯綜複雜的雲端運算環境呢?
XenServer是知名Citrix公司所推出的一款伺服器虛擬化平台,打從2013年6月左右,便加入了開放原始碼的行列,其核心基礎為Xen Project Hypervisor,這項裸機虛擬化技術提供了可運行在Intel與AMD x86硬體平台上的虛擬機器,有效徹底發揮接近於原生應用系統效能的作業程序,讓廣泛的Linux與Windows作業系統,能夠相容於它的虛擬作業環境並擁有如同在實體電腦主機的效能表現。
在如今私有雲端基礎虛擬化平台上的大量虛擬機器部署需求下,XenServer對於每一部系統的運行,在虛擬化硬體資源的配置支援上,首先在邏輯處理器支援部分就高達了160個,每一個Guest OS可以配置最多32個虛擬處理器(vCPU),當然實際的配額量還得依照作業系統的版本支援來決定。網路部分則是支援了最多16個網路卡的連線,每一個虛擬機器可以配置最多7個網路介面,虛擬磁碟部分可以建立至多16個(包括虛擬DVD-ROM裝置)。而針對每一個Guest OS的記憶體支援則是最多192GB,
Citrix XenServer除了有開放原始碼的授權版本,可以供所有類型的使用者免費下載使用,也有提供須付費的授權版本,就功能特色層面來看,兩者的主要差異就在於免費的版本無法透過XenCenter管理介面,來進行自動化的安全修正程式更新、套件更新、臭蟲修復更新以及維護版本的更新。簡單來說,盡管免費版本的XenCenter,也可以透過XenCenter來進行多主機的集中控管,但卻無法進行補強套件的更新管理。
請注意!XenServer 6.5的架構設計是基於Xen Project Hypervisor v4.4。而最新版本的Xen Project Hypervisor v4.6,則預計在2015年9月左右發行。有關這方面的相關資訊,您可以從http://www.xenproject.org/官方網站得知。
XenServer與Xen Project Hypervisor有何差異?
雖然Citrix XenServer是基於Xen Project Hypervisor核心技術所發展出來的解決方案,但兩者在功能與管理的能力仍然有很大的差別,這包括了XenServer提供了Windows桌面專用的VM圖形管理工具、控制網域(dom0)、建立多樣化的虛擬機器範本功能、支援廣泛的儲存裝置整合功能、進階高效能的Tapdisk3儲存技術、支援透過Open Virtual Switch來建立軟體定義網路(SDN)、vGPU功能、以資源集區管理機制簡化從主機、儲存設備到網路資源的配置管理、提供企業等級的服務支援。

XenServer主機系統需求

XenServer必須建置在以Intel或AMD為基礎的x86之64位元主機上,並且最多可以使用到1TB的實體記憶體、16個網路介面卡以及160個邏輯處理器,其中邏輯處理器最大數量的支援程度,則是根據不同的CPU型號來決定,這部分詳細資訊可以參考XenServer HCL的網頁。至於其它硬體規格的要求,可以參照以下說明。
  • 處理器(CPU):請採用64bit的x86 CPU,至少1.5GHZ以上。2GHZ以上的多核心處理器則是建議配備。
  • 記憶體(RAM):2GB為最小記憶體要求,建議安裝4GB以上的記憶體,以供更多的虛擬機器分配使用。
  • 磁碟空間(Disk Space):可使用連接於本機中的各類儲存裝置,包括了PATA、SATA、SCSI等等,其容量16GB為最小要求,60GB以上的可用空間則是建議。至於其它透過像是SAN或HBA卡所連接的儲存設備,也同樣是支援的。
  • 網路卡(NIC):至少使用100Mbit/s以上的網路卡,採用多個Gigabit網路卡則是建議的。值得注意的是高速網路連線,將有助於往後進行實體轉虛擬化(P2V)、各類資料的匯入與匯出之傳輸、虛擬機器的線上移轉(Live Migration)等運行效能之提升。
在接下來有關XenServer的安裝設定講解,將以6.2的版本來作為示範。緊接著則會講解如何將它升級成最新的6.5版本,以及完成最新補強更新套件的下載與安裝。

Java 不同編碼字串, 其字串長度大小計算

以 Java 開發專案, 在 DAO 寫入資料庫時, 常遇到JAVA 字串與資料庫編碼不一致, 有時會產生字串過長,導致無法寫入資料庫的情況. 這時就要在入庫前, 先驗證 JAVA 編碼字串是否超出資料庫欄位長度 JAVA 依 不同編碼, 其長度是不一樣的 如: ...