開發者都知道開發Java 有多難。新的Java EE 5.0將使你的開發過程變得容易一些。Java EE 5.0具有Web 服務支持、注釋和增強的CMP性能。
要開發一個簡單的J2EE應用程序,程序員必須要寫大量的樣本文件代碼(如JavaBeans企業版)和設定無數個配置文件(XML中的描述文件)。所以要成為一個J2EE開發者,程序員必須熟悉EJB和XML。對於初學者來說,這些將令他們望而生畏。
目前的J2EE說明書(1.4)非常長,是用較老的JDK 1.2版本寫的,這使J2EE更加復雜難懂。新的JDK版本提供了豐富的、簡單好用的性能,比如J2SE 5.0的一般性能和注釋支持。
即將推出的Java EE 5.0的一個主要目的就是,既保持J2EE強大的功能,又可以使一般的開發任務變得容易一些。為了達到這個目的,Java EE 5.0將提供更好的默認性態和設置,允許大多數容器無需使用部署描述符就可以得到需要的東西。為此,Java EE 5.0做了很多注釋。開發者不需要知道執行的細節(由容器完成執行任務)。這些新性能都使企業的Java應用程序更小、更快。
本文揭示了J2EE開發者期待已久的Java EE 5.0的新性能。首先讓我們來簡單地看一下注釋。
[作者提示:由於 J2EE 的最新版本是Java EE 5.0,因此下文中Java EE指新版本,J2EE 指老版本]
Java 注釋
注釋是一種修飾符,在你可以使用其它修飾符(比如public, static, 或 final)的任何地方都可以使用注釋。按規定,注釋優先於其它修飾符。它包括一個@)符號,@後接注釋類型和被括號括起來的元素值對。這些值必須是編譯時間常量。也就是說 Java本身就提高了注釋信息的詳細列表。注釋並不直接影響程序的語義,但它影響工具和庫處理程序的方式,從而對運行的程序的語義產生影響。注釋可從源文件、class文件中閱讀,也會在運行時得到反映。將定義從執行中分離出來並提供一種可以內省約束的方式,這使得執行過程更加靈活。
大多數Java開發者已經很熟悉注釋了,比如所有的JavaDoc標簽和瞬時標簽都是注釋的例子。
EJB入口的注入
在目前的J2EE體系下,為了揭示任何一個業務方法,必須為home接口和遠端接口提供EJB包裝。但在Java EE 5.0中,你可以使用EJB注釋為程序組件的任意字段或方法進行注釋。注釋本身就是EJB session bean的參考。基准可以是EJB session bean的本地或遠端home接口,也可以是EJB3 bean的業務接口。
舉例來說,下面的代碼使用注釋將一個PurchaSEOrder歸到EJB中:
@EJB private PurchaSEOrder po;
@EJB(
ame = "ejb/myEnterpriseApp",
beanName = "po1",
eanInterface ="PurchaSEOrder.class",
description =" The Purchase Order for my enterprise application"
)
rivate PurchaSEOrder po;
Enterprise Bean將用JNDI查找這個名稱Java:comp/env/ejb/po。由於並不清楚目標名稱在哪裡,容器比較解決目標。
是不是很酷呀!現在,通過向現有的業務方法注入EJB注釋,然後將它們部署到適用於Java EE 5.0 的容器中,這樣你馬上就可以把現有的程序加入到ava EE程序中!
為了避免當部署描述符和注釋一起時會出現沖突,容積會優先使用部署描述符而忽略注釋。這個性能可以使現在的J2EE程序移植到("as-is")Java EE 5.0適用的容器。
增強部署描述符:注入環境條目
和部署描述符中的標簽一起,Java EE 5.0提供了一個新的標簽,可以使程序組件代碼能夠訪問業務字段。另外一個方法也可以達到這樣的效果,即使用@Resource注釋標簽,可謂殊途同歸。
舉例來說,下面的代碼,使用注釋將一個訂購單中的商品數量限制為10:
// can be configured from the deployer
@Resource int numberOfItems;
ublic void validatePO(PurchaSEOrder po) throws NumberOfItemsException
{
if(po.getItemCount() > numberOfItems)
throw new NumberOfItemsException("My PO cannot have more than 10 items");
}
使用部署描述符也可以達到同樣的目的:
Number of Items in my PO
numberOfItems
Java.lang.Integer
10
Looking up this value:
Context initContext = new InitialContext();
Context myEnv = (Context) initContext.lookup("Java:comp/env");
Integer NumOfItems = (Integer) myEnv.lookup("numberOfItems");
當使用注釋或標簽向代碼中注入環境條目時,容積就有了查找這些值的職責。
新CMP標簽
Java EE 5.0提供了許多容器管理持久性(CMP)的新標簽。開發者只需指定表格的名稱和列的名稱,其它的由容器完成。在下面的例子中,@Table指定帳目類數據將儲存在ACCOUNT表格中:
@Entity
@Table(name = "ACCOUNT")
ublic class Account implements Java.io.Serializable {
@Id
public String getUserId() { return userId; }
@Embedded
public ContactDetails getContactDetails() { return info; }
@Column(name="FIRSTNAME")
public String getGivenName(){ return givenName; }
}
開發者可以使用@Column標簽,從而使表格中列的名稱更加合理。
Java EE服務器中的Web服務
Java EE 5.0的主要目標是提供一個易學、好開發的Web服務模型。它提供的Web服務基礎設施可以使開發者能夠建立強大的、可持續的、高度共用的集成應用程序。Java EE 5.0推出Web Services Metadata,這使一個易學的在Java EE平台的源代碼水平描述Web服務的句法。可以使用工具處理這種句法。下面例子中的代碼執行了一項Web服務:
@WebService(name="MyPOIntf", targetNamespace = "urn:MyPurchaSEOrderService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
ublic interface MyPOIntf extends Remote {
@WebMethod
@WebResult(name="result")
public String submitPODetails(String poXMLString)
throws RemoteException;
}
首先,用WebService注釋定義一個終端接口,然後就可以通過通過執行這個接口而執行各種功能。
對很多經驗豐富的Java開發者,Web服務也依然很神秘。Java EE 5.0將使他們能夠輕松地開發並將現有的企業業務程序部署到Web服務程序中。再過半年到一年Java EE 5.0就會上市,我相信屆時IT市場上將湧現出大批Java EE Web服務開發者。