UDDI định nghĩa một tập các lƣợt đồ XML để mô tả các kiểu dữ liệu.Các kiểu dữ liệu đƣợc UDDI tổ chức và mối liên hệ giữa chúng đƣợc thể hiện trong sơ đồ sau:
62
Hình 3.9-Sơ đồ các cấu trúc dữ liệu trong UDDI BusinessEntity
Là một cấu trúc mô tả các thông tin cơ bản về doanh nghiệp. Các thông tin này bao gồm: thông tin liên lạc, thông tin phân loại (category), định danh,mô tả, và các mối liên hệ với các thực thể kinh doanh khác. Mỗi thể hiện của cấu trúc businessEntity biểu diễn thông tin về một tổ chức hay công ty publish các webservice. businessEntity chứa các businessService thể hiện các service mà tổ chức đó cung cấp. Sơ đồ cấu trúc businessEntity nhƣ sau:
63
Mô tả :
uddi:DiscoveryURLs: Là danh sách các URL. Thƣờng các URL này dùng để tìm kiếm các thông tin thêm về tổ chức, công ty đƣợc diễn tả.
uddi:name: description, uddi:contacts là các thông tin về tổ chức, công ty. uddi:businessServices: danh sách các business service đƣợc cung cấp bởi
businessEntity.
uddi:identifierBag: để xác định duy nhất business entity bên cạnh businessKey.
uddi:categoryBag: là danh sách các category, mỗi category diễn tả một lĩnh vực kinh doanh của businessEntity.
dsig:Signature: chữ ký điện tử của business entity.
uddi:bindingTemplate: là danh sách các diễn tả kĩ thuật mà webservice cung cấp.
businessEntity còn chứa một thuộc tính là businesKey để xác định duy nhất businessEntity trong UDDI.
Publisher Assertion
Là một cơ cấu dùng để thiết lập mối quan hệ giữa hai cấu trúc BusinessEntity. Mối quan hệ này không thể đƣợc nhìn thấy công khai tr khi có sự chứng thực giữa hai doanh nghiệp với hai tài liệu Publisher Assertion riêng biệt. Một doanh nghiệp chỉ có thể thiết lập với một doanh nghiệp khác khi có sự chứng thực t phía đối tác, mối quan hệ này chỉ có thể đƣợc public khi phía doanh nghiệp đối tác cũng có mối quan hệ ngƣợc lại và có một tài liệu Publisher Assertion riêng biệt. Ví dụ Doanh nghiệp A thiết lập mối quan hệ với doanh nghiệp B (fromKey=A toKey=B) và mối quan hệ này sẽ đƣợc public khi doanh nghiệp B cũng thiết lập mối quan hệ với doanh nghiệp A(fromKey = B, toKey = A).
BusinessService
Một BusinessEntity có thể chứa một hoặc nhiều cấu trúc businessService.Cấu trúc businessService tƣợng trƣng cho một service, diễn tả các thông tin về mặt business của service. Mỗi businessService là con về mặt logic của một businessEntity. Các
64
thông tin về mặt kĩ thuật của service đƣợc diễn tả trong các bindingTemplate. Sơ đồ cấu trúc businessService nhƣ sau:
Hình 3.11-Sơ đồ cấu trúc ServirceBus [ 30 ] Mô tả:
uddi:name, uddi:description: tên và các chú thích cho businessService. uddi:categoryBag: một danh sách các category cho service. Mỗi category
diễn tả một lĩnh vực kinh doanh mà service có thể thuộc về.
bindingTemplate: là danh sách các diễn tả kĩ thuật mà web service cung cấp. businessService còn có 2 thuộc tính là businessKey xác định businessEntity mà service thuộc về và serviceKey xác định duy nhất service.
Về mặt kĩ thuật, mỗi element wsdl:service trong tài liệu WSDL sẽ đƣợc thể hiện là một businessService trong UDDI.
Cấu trúc bindingTemplate
BindingTemplate là cấu trúc biểu diễn các thông tin kĩ thuật về service. Mỗi bindingTemplate diễn tả một thể hiện của service với một địa chỉ URL để truy cập đến service nó diễn tả. bindingTemplate cũng diễn tả loại service mà nó diễn tả bằng cách tham chiếu đến một tModel. Sơ đồ cấu trúc bindingTemplate nhƣ sau:
65
Hình 3.12- Sơ đồ cấu trúc bindingTemplate [ 30 ]. Mô tả :
uddi:description:thông tin mô tả các Template
uddi:accessPoint: là địa chỉ URL thích hợp để invoke service đƣợc diễn tả. uddi:tModelInstanceDetails: danh sách các cấu trúc tModelInstanceInfo.
Mỗi tModelInstanceInfo chứa một tModelKey tƣơng ứng với tModel mà bindingTemplate tham chiếu tới.
uddi:categoryBag: gồm một danh sách các category. Mỗi category diễn tả môt lĩnh vực mà bindingTemplate có thể thuộc về.
Cấu trúc tModel:
Mục tiêu của cấu trúc tModel là biểu diễn các thông tin dùng cho ngƣời và máy tính biết đƣợc làm cách nào để giao tiếp với service khi họ không biết nhiều về service đó. Các thông tin đó bao gồm: cách thức hoạt động, cách thức giao tiếp hay các chuẩn mà service tuân theo. Có hai mục đích sử dụng tModel là:
Xác định sự thích hợp của webservice với nhu cầu ngƣời dùng
Cung cấp hệ thống các tham chiếu. hệ thống này có thể đƣợc sử dụng để lƣu các thông tin liên quan hay thông tin mở rộng về webservice.
66
Về mặt kĩ thuật, tModel có thể đƣợc sử dụng để mô tả interface (PortType), operation hay binding. Hay có thể đƣợc dùng để định nghĩa hệ thống category cho các tModel khác tham chiếu đến.Sơ đồ cấu trúc của tModel nhƣ sau:
Hình 3.13- Sơ đồ cấu trúc tModel Mô tả:
uddi:name, uddi:description: tên và chú thích của một tModel uddi:overviewDoc: diễn tả các thông tin tổng quan về một tModel. uddi:identifierBag: danh sách các identifier xác định tModel.
categoryBag: bao gồm danh sách các category để tham chiếu bởi tModel.
3.3.3 Giải pháp lưu trữ dữ liệu cho UDDI
Nhƣ đã nhận xét ở phần trƣớc, cấu trúc tModel trong UDDI là một cấu trúc khá linh động và ta có thể lƣu các dữ liệu ngữ nghĩa cho service ở đây. Trong hình 3.14 bênh dƣới, mỗi thành phần: portType, operation, binding trong tài liệu WSDL đƣợc biểu diễn trong UDDI là một entry kiểu tModel. Mỗi Operation thuộc về một PortType, vì thế trong categoryBag có một keyedReference tham chiếu đến tModel biểu diễn PortType, keyedReference đó có name = “PortType” và value=‟ID của
67
tModel PortType”. Mỗi binding tham chiếu đến portType để chỉ mối quan hệ: binding tƣơng ứng với PortType trong tài liệu WSDL.
Hình 3.14- Sơ đồ ánh xạ các thành phần WSDL vào tModel
Các concept đƣợc chú thích cho Operation và Input, Output của nó đƣợc lƣu trong categoryBag của tModel tƣơng ứng với Operation đó bởi keyedReference có keyName là: Func. Concept, Input, Output. Các concept chú thích cho PortType đƣợc lƣu trong categoryBag của tModel tƣơng ứng với PortType đó bởi keyedReference có keyName là “PortType Category”.
3.4 Kết luận
Nội dung của chƣơng này đã đƣa ra các giải pháp cho việc thực thi, lƣu trữ và tìm kiếm các web servirce. Với các kiến thức đã tìm hiểu đƣợc về Apache ODE và UDDI là nền tản và cơ sở lý thuyết cho việc xây dựng và thử nghiệm ứng dụng BPELFX Designer.
68
Chư ng 4 TÌM HIỂU VỀ CÔNG NGHỆ JAVAFX
Nội dung: ở chương này chúng tôi c ng sẽ giới thiệu sơ lư t về công nghệ Javafx, một giải pháp mà chúng tôi đã chọn đ xây dựng ng dụng của mình.
4.1 Khái niệm về JavaFx
Javafx đƣợc coi là sự kế tục của Java Applet cho phép xây dựng các ứng dụng RIA nhƣng có thêm rất nhiều tính năng mạnh mẽ đặc biệt về đồ họa và đa phƣơng tiện. So với các công nghệ RIA khác, JavaFX có điểm mạnh là tƣơng thích hoàn toàn với Java Runtime và có đƣợc ƣu thế về khả năng thực thi và tính phổ biến của Sun's JRE hiện đã đƣợc cài đặt trên hàng tỉ thiết bị trên toàn thế giới.
JavaFX Script, phần ngôn ngữ của JavaFX, bắt đầu t một dự án của Chris Oliver tại Sun với tên gọi F3 (Form Follows Function). Sun Microsystems lần đầu công bố JavaFX tại JavaOne (hội nghị thƣờng niên các nhà phát triển Java) năm 2007, năm 2008 bản SDK đầu tiên đƣợc giới thiệu (JavaFX 1.0). Đến thời điểm hiện tại JavaFX đã phát triển đến phiên bản 1.3.1, với rất nhiều cải tiến. Các ứng dụng JavaFX có thể chạy trên nhiều nền tảng: t Desktop, Web Browser đến Mobile, TV và các thiết bị khác có cài JVM với cùng một mô hình phát triển và triển khai.
4.2 JavaFX platform
Dựa trên nền tảng của Java, JavaFx làm đơn giản hóa việc xây dựng những ứng dụng với mục tiêu có thể đƣợc triển khai trên một lớp rất rộng các thiết b ị t di động đến máy tính, TV. ng dụng JavaFx đƣợc viết bằng JavaFx Script, một ngôn ngữ mới rất dễ sử dụng. Thành phần cốt lõi của nền tảng JavaFx là JavaFx runtime library, cho phép xây dựng các ứng dụng với giao diện đồ họa , tạo hoạt cảnh (animation) , play video, đọc RSS….. Một thế mạnh của JavaFX chính là chạy trên nền Java, giúp cho ứng dụng JavaFX có thể sửdụng tính năng bảo mật cũng nhƣ khả năng triển khai rộng rãi của Java và hơn thế nữa, khả năng truy sử dụngcác API của Java, bên cạnh những API cung cấp bởi chính JavaFX runtime
69
Hình 4.1-Nền tảng của JavaFx Một số đặt điểm nổi bật của JavaFx:
Common profile: JavaFX dựa trên ý tƣởng “Common profile”, một cách tiếp cận cho phép lập trình viênsử dụng cùng một mô hình phát triển và phần lớn mã nguồn chung cho cùng một ứng dụng trên nhiều nền tảng. Để tối ƣu ứng dụng cho t ng loại thiết bị, sẽ có thêm các API chuyên biệt.
Drag-to-Install: đối với ngƣời dùng cuối, “Drag-to-Install” cho phép “kéo” các JavaFX widget và “thả” nó vào desktop. ng dụng sẽ không mất đi trạng thái và ngữ cảnh khi tắt trình duyệt. Và ngƣời dùng có thể chạy lại bằng cách click vào shortcut trên desktop. Triết lý này gọi là out-of-the-box. Sun khuyến khích lập trình viên hỗ trợ “Drag-to-Install” nhƣ một cách phân phối ứng dụng tới ngƣời dùng, cho phép bỏ qua vai trò của trình duyệt.
Tích hợp các thành phần đồ họa đƣợc tạo ra t các ứng dụng bên thứ 3
(third-party tools). JavaFX đi kèm một tập các plug-in cho Adobe Photoshop và Illustrator cho phép tạo ra hoặc chuyển đổi các thành phần đồ họa có sẵn thành các thành phần đồ họa của JavaFX Script.
Hoàn toàn tƣơng thích với Web: JavaFX bên trong applet có thể tƣơng tác với trang web và ngƣợc lại các đoạn mã JavaScript cũng có thể tƣơng tác với mã JavaFX Script. JavaScript thậm chó có thể gọi các hàm JavaFX Script, truy cập đến các biến, pass data, và can thiệp sâu vào cấu trúc của JavaFX Script scene graph.
70
4.3 Javafx script
JavaFX Script là một ngôn ngữ khai báo với việc hỗ trợ hƣớng đối tƣợng. Nếu bạn đã làm quen với các ngôn ngữ khác nhƣ Java, JavaScript, Groovy, Adobe ActionScript hoặc JRuby, thì JavaFX Script trông có vẻ rất quen thuộc, tuy nhiên, cũng sẽ có những khác biệt. Ngoài các hỗ trợ của Scripting truyền thống, nó còn hỗ trợ khả năng dóng gói và tái sử dụng bằng hƣớng đối tƣợng. Điều này cho phép các lập trình viên sử dụng JavaFX để làm ra và bảo trì các ứng dụng rất linh hoạt. Một đặc điểm khác đó là JavaFX Script hoàn toàn tƣơng thích với Java[ 33 ].
JavaFX Script thì đƣợc chia vào hai mức chính, Script và Class. Tại mức Script, các biến và hàm có thể đƣợc định nghĩa, điều này có thể đƣợc chia sẽ với các Class khác đƣợc định nghĩa bên trong Script, hoặc nếu chúng có quyền rộng hơn chúng có thể chia sẽ với các Classes và Scripts khác. Thêm vào đó, các biểu thức rỗng “loose expressions” có thể đƣợc tạo ra. Chúng là những biểu thức đƣợc khai báo bên ngoài định nghĩa lớp. Khi một Script đƣợc thực thi, tất cả các biểu thức trống này cũng đƣợc thực thi. Ví dụ về một script JavaFx cách tính giai th a của 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public var result:Number;
function run(args : String[]) : java.lang.Object { var num = if(sizeof args > 0) {
java.lang.Integer.valueOf(args[0]); } else { 10; }; result = num; var a = result - 1; while(a > 0) { result *= a; a--; } println("{num}! = {result}"); } Bảng 4.1-Ví dụ về JavaFx script
71
4.4 JavaFX runtime
ng dụng JavaFX chạy trên nền JavaFX runtime. Hiện tại có ba phiên bản của JavaFX runtime: phiên bản JavaFX Desktop cho môi trƣờng desktop, chạy trên nền Java SE; phiên bản JavaFX Mobile cho thiết bị di động, chạy trên nền Java ME; và một phiên bản thứ ba là JavaFX TV đƣợc thiết kế cho các TV set-top box, chạy trên nền JavaTV(Hình 4.2)
Hình 4.2-Các phiên bản runtime của JavaFx
JavaFX runtime che đi nền tảng Java nằm bên dƣới. Lần đầu tiên trong lịch sử phát triển của Java,khả năng thực sự triển khai ứng dụng trên nhiều nền tảng mà không cần bất kỳ một thay đổi nào. Nói cách khác, với phần lớn API của JavaFX, ta có thể viết một ứng dụng chạy trên cả desktop, trình duyệt (applet), điện thoại di động (MIDlet), TV. Lập trình viên không cần hiểu quá chi tiết về applet, MIDlet (điều mà Java ME chƣa làm đƣợc), hay Xlet.
Để làm đƣợc điều này, JavaFX API đƣợc nhóm thành các profile. Hiện tại, JavaFX bao gồm hai profile:
72
Common profile, bao gồm những API có khả năng làm việc giống nhau trên mọi thiết bị, trong này có cả các thành phần GUI. ng dụng JavaFX chỉ sử dụng các tính năng của common profile có thể đƣợc triển khai trên mọi thiết bị hỗ trợ JavaFX
Desktop profile, chứa những phần mở rộng chỉ có trên nền Java SE. Một trong những tính năng nổi bật là reflection, một phần của Java SE nhƣng không xuất hiện trong Java ME.
4.5 JavaFx API
JavaFX runtime đƣợc chia làm hai phần: profile-independent (độc lập nền) và profile-dependent (phụ thuộc nền). Một vài trong profile-independent runtime đƣợc trình biên dịch và runtime library gọi trực tiếp, nhƣng phần lớn trong số đó là các public API mà lập trình viên có thể gọi.
APIs (application program interfaces) là một phần của common profile có trong mọi phiên bản của runtime library. Các đoạn mã gọi các API này có thể thực thi không giống nhau trên ba phiên bản của runtime, nhƣng bản thân các API hoàn toàn tƣơng đƣơng nhau về chức năng. Dƣới đây là các gói quan trọng nhất trong JavaFX API:
Tên gói Mô tả
javafx.application Cung cấp và hổ trợ các JFC Swing component, và một số phƣơng thức khác. Nó chứa các lớp nhƣ : Applet, Application, Frame, Window, Dialog
javafx.animation Chức các lớp sử dụng trong các hiệu ứng động javafx.ext.swing Layout, Component, Container,Button, CheckBox,
MenuItem, ComboBox, GridPanel, Icon,
Label,ScrollableComponent, List, ListItem,Menu, RadioButton, RadioButtonMenuItem,ScrollPane, SequentialCluster, Slider, SwingApplication,
SwingWindow,wingDialog, TextField, SwingFrame, ToggleGroup
73 nhập xuất dữ liệu.
javafx.scene Cung cấp lớp cơ sở: scene, là một node đồ họa đƣợc dùng để hiện thị các đối tƣợng lên màn hình
javafx.scene.image Cung cấp các lớp xử lý ảnh javafx.scene.paint Cung cấp các lớp đồ họa
javafx.scene.transform Cung cấp các lớp sử dụng trong việc biến đổi hình dạng của của đối tƣợng đồ họa. Gói này cung cấp các
phƣơng thức nhƣ:rotating, scaling, shearing… javafx.scene.layout Sử dụng cho tầng GUI của ứng dụng
javafx.scene.geometry Cung cấp các phƣơng thức sử dụng để vẽ các đối tƣơng hình học
javafx.scene.text Cung cấp các phƣơng thức và các lớp có liên quan đến ký tự
javafx.scene.media Cung cấp các đối tƣợng media
javafx.scene.effect Cung cấp các lớp và các phƣơng thức dùng để tạo ra hiệu ứng cho đối tƣợng
javafx.scene.effect.light Cung cấp hiệu ứng ánh sang cho các đối tƣợng 2D, 3D javafx.util Cung cấp một số phƣơn thức khác
Bảng 4.2-Các API trong javaFx
4.6 Công cụ phát triển
JavaFX SDK bao gồm các công cụ cho phép dịch và tạo ra các ứng dụng JavaFX: Trình biên dịch command-line (javafxc) dựa trên Java compiler với cùng
tham số nhƣ javac. Ngoài ra có các thùy chọn cho phép dịch với profile cho desktop, mobile hoặc TV
Ant task cho phép dịch file mã nguồn JavaFX thông qua Ant build file. Application launcher cho phép chạy ứng dụng JavaFX (lệnh javafx). Một tiện ích command-line gọi là javafxpackager cho phép build một ứng
dụng hoàn chỉnh và đóng gói cho cả môi trƣờng desktop, mobile, hoặc TV. Một tiện ích command-line gọi là javafxdoc tƣơng tự nhƣ javadoc.
74
JavaFX Platform Tools bao gồm một tập các công cụ lập trình, thiết kế đồ họa, media converter và môi trƣờng chạy. Sun cung cấp bộ công cụ JavaFX dƣới dạng các gói (bundle) khác nhau tùy thuộc vào yêu cầu của nhà phát triển:
Hình 4.3-Một số gói công cụ phát triển JavaFx
Developer Bundle:
NetBeans IDE for JavaFX
JavaFX hoàn toàn đƣợc tích hợp với NetBeans IDE, một môi trƣờng phát triển mạnh mẽ và trực quan giúp dễ dàng để xây dựng, chạy thử và debug.
NetBeans editor cung cấp một giao diện kéo thả và hỗ trợ auto complete giúp nhanh chóng tạo ra các câu lệnh, các đối tƣợng đồ họa, hiệu ứng và hoạt cảnh (animation).
JavaFX Plug‐in for NetBeans
JavaFX plug‐in sẽ cài đặt các tính năng hỗ trợ JavaFX vào NetBeans, trong