2012-03-08 22 views
5

Triển khai JAX-WS đi kèm với JDK6 có thể được sử dụng để cung cấp máy chủ dịch vụ web mà không có bất kỳ thư viện bổ sung nào. JVM sẽ bắt đầu với một máy chủ WS trên một cổng được chỉ định.JDK6: khi nào sử dụng triển khai JAX-WS đi kèm với Project Metro

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/

Câu hỏi tôi có là như thế nào này khác với Metro dự án? Nếu mục tiêu cuối cùng là để lưu trữ các dịch vụ web bên trong tomcat, thì tôi vẫn có thể sử dụng chức năng đi kèm và sau đó chỉ chuyển hướng đến máy chủ ws đi kèm này hay tốt hơn để triển khai servlet metro?

Trả lời

1

Theo như tôi biết JAX-WS chỉ là mẫu phải được triển khai bằng cách thực hiện JDK6 hoặc Metro.

Metro chỉ là triển khai chuẩn được vận chuyển với Máy chủ ứng dụng Glassfish. See here.

Do đó không nên có bất kỳ sự khác biệt nào.

+0

Điều đó có nghĩa là sự khác biệt duy nhất là cách các dịch vụ web được triển khai: máy chủ tích hợp độc lập trong JDK6 và sau đó chuyển hướng từ tomcat vs servlet đi kèm với dự án metro. Tôi không thấy bất kỳ hạn chế nào khi sử dụng máy chủ độc lập, có ở đó không? –

+0

Không, không được triển khai nhưng được gọi. Hoặc là từ việc thực hiện JDK hoặc Metro. Cả hai đều là các triển khai chuẩn và có thể làm việc tốt. Tìm kiếm nhanh trên google cho thấy rằng Metro sử dụng API "mới hơn và nâng cao" trên đầu trang của các JDK. Xem [tại đây] (http://metro.java.net/nonav/1.2/docs/ReleaseNotes.html#Running_on_top_of_JDK_6). Chúc mừng – SimonSez

16

Vâng, Điều đầu tiên bạn phải biết về Metro, là nó là một dự án ô cho nhiều dự án liên quan đến WS khác nhau. JAX-WS, JAXB, WSIT, JAX-WS-Commons, v.v.

Mỗi thành phần này có hai phần, API (thông số kỹ thuật) và phần triển khai được gọi là triển khai tham chiếu (RI). Các thông số kỹ thuật được định nghĩa trong 'javax.xml.ws', 'javax.xml.bind' vv và RI đi trong các gói 'com.sun.xxx'.

Bây giờ một nơi nào đó xung quanh JDK 6, cập nhật 4, mặt trời/oracle bắt đầu bundling các API + RIs trong JDK nó tự, và tiếp tục cập nhật các bản cập nhật cho JDK.

Tính đến JDK trước 6 update31, JDK chứa verisions sau jaxws và JAXB API, và RI

JDK6 U31 - JAXB API @ 2.1 & RI @ 2.1.10, jaxws API @ 2.1 và RI @ 2.1.6

Bây giờ, nếu bạn truy cập các trang http://jaxb.java.nethttp://jax-ws.java.net và xem bản phát hành cuối cùng dưới 2.1.x, bạn sẽ thấy rằng JAXB RI là 2.1.13 và JAXWS RI là 2.1.7, tức là Sự triển khai RI của 2.1 các spces được đóng gói với bản cập nhật JDK 6 mới nhất là một vài phiên bản đằng sau các bản phát hành được phát hành dưới Metro. Vì vậy, để sử dụng các lọ 2.1 mới nhất, chỉ cần sao chép các lọ API + RI vào đường dẫn lớp của bạn, như được mô tả ở đây http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html#Running_on_top_of_JDK_6.

Để làm cho vấn đề thêm rắc rối, Metro dự án ô có số phiên bản riêng của nó, đó là tính đến ngày hôm nay, 1.5, 2.0, 2.0.1, 2.1, 2.1.1, 2.2

Metro 1,5 là người cuối cùng xây dựng kèm theo 2.1 spces và RIs mới nhất cho các thông số kỹ thuật đó, nghĩa là Metro 1.5 chứa JAXWS và JAXB APIs @ 2.1 và JAXWS RI @ 2.1.7 và JAXB RI @ 2.1.13.

Metro 2.0 trở đi, bao gồm API JAXB và JAXWS phiên bản 2.2 và RI mới nhất kể từ dữ liệu phát hành. ví dụ: bản phát hành METRO mới nhất 2.2 gói JAXB RI 2.2.5 và JAXWS RI 2.2.6.

Nhưng có một sự bắt, gói JDK 6 v2.1 cho JAXWS và JAXB (API + RI), và nếu bạn chỉ sử dụng JAXWS, JAXB v2.2 lọ trong classpath của bạn, nó sẽ không hoạt động.Bạn sẽ phải sử dụng cơ chế jar được xác nhận, như được mô tả ở đây http://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html#Running_on_top_of_JDK_6.

Vì vậy, đối với bất kỳ bản phát hành Metro 2.0 trở lên nào, bạn sẽ cần phải sao chép tệp jax-ws-api.jar và jaxb-api.jar dưới $ JAVA_HOME/jre/lib/xác nhận hoặc sử dụng -Djava. endorsed.dirs thuộc tính hệ thống.

Và một số thú vị hơn, Metro không chỉ là một dự án ô có chứa các dự án jax-ws, jaxb (trong số những thứ khác), nhưng nó cũng làm cho một uber jar ra khỏi các dự án này.

Vì vậy, ví dụ, webservices-api.jar tàu điện ngầm chứa jaxws-api.jar, jaxb-api.jar (RI) + API từ các dự án những đứa trẻ khác như WSIT, jaxws-commons, vv

Và webservices -rt.jar chứa jaxws-rt.jar, jaxb-rt.jar, + lọ RT của dự án những đứa trẻ khác như WSIT, jaxws-commons, vv

Vì vậy, để tổng hợp -

Nếu bạn muốn để phát triển WS của bạn dựa trên các thông số JAXWS/JAXB v2.1, chỉ cần sử dụng JDK 6 (bất kỳ cập nhật nào qua u04). Nếu bạn muốn hoàn toàn chắc chắn sử dụng các phiên bản API + RIs mới nhất của 2.1 thông số kỹ thuật, chỉ cần sử dụng các bản phát hành 2.1.x cuối cùng từ jaxws và jaxb. tức là sử dụng jax-ws 2.1.7 và jaxb 2.1.13, trong classpath của bạn, [Hoặc bạn có thể sử dụng webservices-api.jar của Metro 1.5 và webservices-rt.jar khi chúng bó jaxws/jaxb/wsit /. .

Nếu bạn muốn phát triển WS của mình dựa trên thông số JAXWS/JAXB v2.2 mới nhất, bạn sẽ phải sử dụng jax-ws v2.2.6 và jaxb ver 2.2.5 jars [Hoặc cách khác là sử dụng Metro 2.2 's webservices-api.jar và webservices-rt.jar khi chúng gộp jaxws/jaxb/wsit ..] Nhưng bạn sẽ phải sử dụng cơ chế jar được xác nhận như mô tả ở trên, để ghi đè lên jdk bao gồm jaxws/jaxb v2.1 lọ.

Đề xuất của tôi - Nếu v2.1 là OK với bạn, hãy sử dụng các bình Metro 1.5 (webservices-api, webservices-rt). Nếu bạn cần v2.2, hãy sử dụng các lọ Metro 2.2 (webservices-api, webservices-rt) và đảm bảo đặt webservices-api.jar trong thư mục xác nhận.

Bạn sẽ cần lọ điện tử (webservices- [api, rt] .jar) nếu bạn định sử dụng các công cụ như fastinfosets, Mtom, v.v., khi JDK đóng gói lọ hoặc cho vấn đề đó chỉ là jaxws-ri. jar và jaxb-ri.jar sẽ không cung cấp cho bạn những tính năng đó.

Hy vọng thư khá dài này hữu ích trong việc xóa một số thứ.

+0

nơi nào người ta tìm thấy phiên bản JAXB được đóng gói với một JDK nhất định? – Edmondo1984

Các vấn đề liên quan