任何J2EE 开发者都知道开发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服务开发者。