技术开发 频道

了解 Java EE 5

  继承:标注——单个表、联合表和按类表

  JPA 规范定义了对映射继承的三种类型的支持;其中只有一种在当前规范中是强制的:

  单个表:对象树映射到一个表。

  联合表:(可选)将子类映射到与父类映射到的表具有外键关系的表。

  按类表:(可选)每个具体的子类映射到一个表,并且包含超类属性的列。

  下面是一个使用单表策略映射超类和子类的示例:

  清单 33

1 @Entity
2
3   @Table(name="CUST")
4
5   @Inheritance(strategy=SINGLE_TABLE,
6
7   discriminatorType=STRING,
8
9   discriminatorValue="CUST")
10
11   public class Customer { ... }
12
13   @Entity
14
15   @Inheritance(discriminatorValue="VCUST")
16
17   public class ValuedCustomer extends Customer { ... }
18
19

  下面是一个使用联合表策略的示例:

  清单 34

1 @Entity
2
3   @Table(name="CUST")
4
5   @Inheritance(strategy=JOINED,
6
7   discriminatorType=STRING,
8
9   discriminatorValue="CUST")
10
11   public class Customer { ... }
12
13   @Entity
14
15   @Table(name="VCUST")
16
17   @Inheritance(discriminatorValue="VCUST")
18
19   @PrimaryKeyJoinColumn(name="CUST_ID")
20
21   public class ValuedCustomer extends Customer { ... }
22
23

  JAX-WS

  Java EE 5 还为 Web 服务引入了一个新的编程模型:JAX-WS。在了解不同之处之前,您需要知道从 JAX-RPC 到 JAX-WS 哪些内容没有发生变化:

  JAX-WS 仍然支持 SOAP 1.1 over HTTP 1.1,因此互操作性将不会受到影响。仍然可以在网上传递相同的消息。

  JAX-WS 仍然支持 WSDL 1.1,因此您所学到的有关该规范的知识仍然有用。新的 WSDL 2.0 规范已经接近完成,但在 JAX-WS 2.0 相关工作结束时其工作仍在进行中。

  系列文章 Web 服务提示与技巧:JAX-RPC 与 JAX-WS 的比较包含关于 JAX-WS 的详细信息,下面大致列出了从 JAX-RPC 1.1 到 JAX-WS 2.0 都发生了哪些更改:

  SOAP 1.2:JAX-RPC 和 JAX-WS 都支持 SOAP 1.1。JAX-WS 还支持 SOAP 1.2。

  XML/HTTP:WSDL 1.1 规范在 HTTP 绑定中定义,这意味着利用此规范可以在不使用 SOAP 的情况下通过 HTTP 发送 XML 消息。JAX-RPC 忽略了 HTTP 绑定。而 JAX-WS 添加了对其的支持。

  WS-I Basic Profile:JAX-RPC 支持 WS-I Basic Profile (BP) V1.0。JAX-WS 支持 BP 1.1。(WS-I 即 Web 服务互操作性组织。)

  新的 Java 功能:JAX-RPC 映射到 Java 1.4。JAX-WS 映射到 Java 5.0。JAX-WS 依赖于 Java 5.0 中的很多新功能。(Java EE 5 是 J2EE 1.4 的后续版本,添加了对 JAX-WS 的支持,但仍然支持 JAX-RPC,这可能会对 Web 服务新手造成混淆。)

  数据映射模型:JAX-RPC 具有自己的映射模型,此模型大约涵盖了所有模式类型中的 90%。那些没有包括的模式被映射到 javax.xml.soap.SOAPElement(JAX-WS 数据映射模型是 JAXB,该模型映射所有 XML 模式)。

  接口映射模型:JAX-WS 的基本接口映射模型与 JAX-RPC 的区别并不大,不过 JAX-WS 模型使用新的 Java 5.0 功能,并引入了异步功能。

  动态编程模型:JAX-WS 的动态客户端模式与 JAX-RPC 模式差别很大。根据业界的需要进行了许多更改,其中包括面向消息的功能和动态异步功能。JAX-WS 还添加了动态服务器模型,而 JAX-RPC 则没有此模型。

  消息传输优化机制 (MTOM):JAX-WS 通过 JAXB 添加了对新附件规范 MTOM 的支持,因此应该能够实现附件互操作性。

  处理程序模型:从 JAX-RPC 到 JAX-WS 的过程中,处理程序模型发生了很大的变化。JAX-RPC 处理程序依赖于 SAAJ 1.2,而 JAX-WS 处理程序则依赖于新的 SAAJ 1.3 规范。

  JAX-WS 还可以与 EJB 3.0 一起使用来简化编程模型。例如,下面的代码显示了将 EJB 3.0 POJO 转换为 Web 服务的简单方法:

  清单 35

1 @WebService public interface StockQuote {
2
3   public float getQuote(String sym);
4
5   }
6
7   @Stateless public class QuoteBean implements StockQuote {
8
9   public float getQuote(String sym) { ... }
10
11   }
12
13

  还添加了其他标注以便支持 Web 服务中更高级的功能。JAX-B 提供了 POJO(清单 36)和 XML 模式(清单 37)之间的标准映射,下面给出了它的一个示例:

  清单 36

1 @XmlType
2
3   public class Trade {
4
5   @XmlElement(name="tickerSymbol")
6
7   public String symbol;
8
9   @XmlAttribute
10
11   int getQuantity() {...}
12
13   void setQuantity() {...}
14
15   }
16
17

  清单 37

 

1 <xs:complexType name="trade">
2     <xs:sequence>
3     <xs:element
4         name="tickerSymbol"
5         type="xs:string"/>
6     </xs:sequence>
7     <xs:attribute name="quantity"
8         type="xs:int"/>
9 </xs:complexType>
0
相关文章