Mô hình lập trình SOA để triển khai thực hiện các dịch vụ Web, Phần 2: Đơn giản hóa việc truy cập dữ liệu bằng cách sử dụng các đối tượng dữ liệu dịch vụ (Service Data Objects)

Tận dụng các đối tượng dữ liệu dịch vụ (SDO) để làm đơn giản hóa việc truy cập và biểu diễn dữ liệu trong phần mềm hướng dịch vụ của bạn. Các SDO thay thế các mô hình truy cập dữ liệu đa dạng bằng sự trừu tượng hóa thống nhất để tạo ra, lấy ra, cập nhật và xóa dữ liệu nghiệp vụ mà các triển khai thực hiện dịch vụ sẽ sử dụng. Đây là bài viết thứ hai trong loạt bài viết của chúng tôi về mô hình lập trình dành cho Kiến trúc Hướng-Dịch vụ (SOA) của IBM® (SOA).

Stephen Brodsky, Kỹ thuật viên cao cấp, IBM

Tiến sĩ Stephen A. Brodsky là một Thành viên Ban lãnh đạo kỹ thuật cao cấp tại Phòng thí nghiệm Thung lũng Silicon của IBM. Ông đã lãnh đạo hoặc đóng góp cho nhiều kiến trúc, nhiều sản phẩm và nhiều tiêu chuẩn phần mềm, bao gồm các Đối tượng Dữ liệu Dịch vụ (SDO), Thiết kế chi tiết SOA của Hội đồng Kiến trúc SWG IBM, máy chủ WebSphere và máy chủ Rational và các sản phẩm Studio, các khung công tác mô hình hóa Eclipse (EMF), UML, MOF và XMI (XML Metadata Interchange - Trao đổi siêu dữ liệu XML). Ông cũng là đồng tác giả một cuốn sách về XMI. Ông đã nắm giữ một tá bằng sáng chế về công nghệ đối tượng và là thành viên của một số nhóm công tác AB SWG.



06 11 2009

Các Đối tượng Dữ liệu Dịch vụ

Các Đối tượng Dữ liệu Dịch vụ (SDO) thay thế các mô hình truy cập dữ liệu đa dạng bằng sự trừu tượng hóa thống nhất để tạo ra, lấy ra, cập nhật và xóa dữ liệu nghiệp vụ mà việc triển khai thực hiện dịch vụ sẽ sử dụng. Các SDO (xem Các Đối tượng Dữ liệu Dịch vụ 2.0 và Lập trình Dữ liệu thế hệ tiếp theo: Các Đối tượng Dữ liệu Dịch vụ trong phần Tài nguyên) là một khái niệm cơ bản trong Kiến trúc Hướng Dịch vụ của IBM (SOA). Các SDO giúp cho các nhà phát triển có năng suất hơn nhờ giải phóng họ khỏi các chi tiết kỹ thuật về cách làm thế nào để truy cập các nguồn dữ liệu tầng sau cụ thể, để họ có thể tập trung chủ yếu vào logic nghiệp vụ (xem Việc tích hợp dữ liệu quan hệ vào các ứng dụng Web, lập trình dữ liệu thế hệ tiếp theo trong môi trường Java™ và sử dụng các Đối tượng Dữ liệu Dịch vụ với công nghệ tích hợp thông tin Doanh nghiệp trong phần Tài nguyên). SDO là một đặc tả kỹ thuật chung với công ty BEA Systems, Inc và được sử dụng rộng rãi trong dòng sản phẩm IBM, bao gồm cả máy chủ Ứng dụng WebSphere® và các công cụ Rational® Studio. Kết nối cơ sở dữ liệu Java (Java™ DataBase Connectivity), thường được gọi là JDBC, là một giao diện Java để thi hành các câu lệnh của Ngôn ngữ Truy vấn có Cấu trúc (Structured Query Langauge-SQL). Hiện nay, các mô hình lập trình cho JDBC, các dịch vụ tuân theo Ngôn ngữ Mô tả Các dịch vụ Web (WSDL), các JavaBeans doanh nghiệp (EJB), và v.v trong triển khai thực hiện dịch vụ viết bằng Java là tương tự như nhau, nhưng các khác biệt là rất phiền phức.

Các SDO định nghĩa một cách duy nhất và thống nhất để truy cập và thao tác dữ liệu từ các nguồn dữ liệu đa dạng bao gồm cả các cơ sở dữ liệu quan hệ, các nguồn dữ liệu dùng Ngôn ngữ đánh dấu mở rộng (Extensible Markup Language-XML), các dịch vụ web và các hệ thống thông tin doanh nghiệp (EIS). Chúng dựa trên khái niệm đồ thị dữ liệu. Một đồ thị dữ liệu là một tập hợp các đối tượng có cấu trúc cây có thể cắt rời khỏi các nguồn dữ liệu. Các SDO được sử dụng khắp nơi trong kiến trúc ứng dụng.

Lĩnh vực của kiến trúc ứng dụngCác SDO được sử dụng như thế nào
SOA
  • Các SDO là đầu vào và đầu ra của các dịch vụ.
Truy cập dữ liệu
  • Các SDO truy cập các nguồn dữ liệu quan hệ, XML, EJB, Đối tượng dữ liệu Java (JDO) và nguồn dữ liệu Hibernate.
  • Các SDO là Các đối tượng Chuyển giao Dữ liệu (DTO) - cũng được gọi là Các đối tượng Giá trị (Value Objects).
Các dịch vụ web
  • Các SDO biểu diễn tài liệu XML trên đường nối.
Thông báo
  • Các SDO biểu diễn các thông báo.
XMLSử dụng SDO khi:
  • Một ứng dụng có thể xử lý XML.
  • Truy cập các tệp tin, các tài liệu, các tài nguyên và các thông báo dùng XML.
Các đầu nối/Các tiếp hợp (EIS, CICS).
  • Các SDO biểu diễn các bản ghi dữ liệu.
EJB
  • Các SDO là DTO (còn được gọi là Value Objects).
  • Các mẫu thiết kế dùng Java 2 Phiên bản Doanh nghiệp (Java 2 Enterprise Edition-J2EE).
ADO.NET
  • ADO DataSet là một tập con của đồ thị dữ liệu SDO.
Kênh Dịch vụ Doanh nghiệp (ESB)
  • Các SDO là đầu vào và đầu ra của các dịch vụ.
Mô hình lập trình xuyên ngôn ngữ (Cross-language)
  • Một ứng dụng trọn vẹn có thể bao trùm qua các tầng và các ngôn ngữ.
  • Cùng một mô hình lập trình chung cho nhiều kỹ năng ngôn ngữ.
Kiến trúc dựa theo mô hình (MDA)
  • Mô hình SDO (Kiểu và Thuộc tính) được định nghĩa bằng các lớp và các thành phần trong Ngôn ngữ Mô hình hóa thống nhất (Unified Modelling Language-UML).
  • Ứng dụng SDO tuân theo các sơ đồ UML: sơ đồ tuần tự, sơ đồ luồng xử lý, sơ đồ trạng thái và sơ đồ cộng tác.
Java
  • Các SDO là “các đối tượng thuần Java” (POJOs) thông minh với các giao diện POJO.

Trong một SOA, một ứng dụng không kết nối trực tiếp tới một nguồn dữ liệu. Thay vào đó, nó truy cập một dịch vụ trung gian được gọi là dịch vụ truy cập dữ liệu (DAS) và nhận được hồi đáp là một đồ thị dữ liệu. DAS là một dịch vụ xử lý các chi tiết kỹ thuật đối với một loại nguồn dữ liệu cụ thể. Nó biến đổi dữ liệu thành một đồ thị SDO cho ứng dụng khách. Ứng dụng khách tương tác với đồ thị dữ liệu để nhận lấy dữ liệu và trao đổi dữ liệu. Để áp dụng một cập nhật cho nguồn dữ liệu ban đầu, ứng dụng gửi một đồ thị đã cập nhật trả lại cho DAS đó, và đến lượt nó, DAS sẽ tương tác với nguồn dữ liệu. Nhìn chung, môi trường chạy (runtime) cung cấp các triển khai thực hiện các DAS và các công cụ phát triển ứng dụng cung cấp hỗ trợ cho các đồ thị dữ liệu.

SDO vòng tránh qua các khuấy động công nghệ -- đó là việc viết lại các ứng dụng để theo kịp với sự thay đổi công nghệ (xem Wikipedia trong phần Tài nguyên) -- bằng cách gói gọn các chi tiết truy cập dữ liệu để bảo vệ các ứng dụng nghiệp vụ trước các thay đổi công nghệ. Ví dụ, hãy xem xét một ứng dụng Web Java được thiết kế để đọc các mô tả sản phẩm từ một cơ sở dữ liệu và hiển thị chúng dưới dạng các trang Web. Để truy cập các mô tả sản phẩm trong cơ sở dữ liệu, các ứng dụng phải sử dụng JDBC khá nhiều. Giả sử rằng sau này hình trạng (topology) ứng dụng thay đổi, đặt một dịch vụ web giữa ứng dụng và cơ sở dữ liệu. Bây giờ ứng dụng không còn có thể sử dụng JDBC để truy cập dữ liệu và cần chỉnh lại đáng kể để thay thế một giao diện lập trình ứng dụng (API) dịch vụ web, ví dụ như Mô hình Đối tượng Tài liệu (Document Object Model-DOM) hay các API của Java bằng lời gọi Thủ tục Từ xa dựa vào XML (JAX-RPC). SDO tránh được vấn đề này; một ứng dụng được viết với SDO không cần phải thay đổi.

Ngoài ra, SDO cung cấp một API siêu dữ liệu cho phép các ứng dụng, các công cụ và các khung công tác rà soát kỹ bên trong (introspect) mô hình dữ liệu theo một cách thống nhất, bất kể nguồn gốc của nó. DAS dịch siêu dữ liệu mặt sau sang định dạng SDO tiêu chuẩn.

Các kiểu SDO có thể được định nghĩa bằng các giao diện Java, lược đồ XML, các bảng và cột cơ sở dữ liệu quan hệ, các EJB, các bản ghi COBOL, các thông báo hoặc UML (xem Danh mục về các đặc tả kỹ thuật siêu dữ liệu và mô hình hóa của OMG trong phần Tài nguyên); Người triển khai thực hiện có thể chọn một kiểu hệ thống ưa thích. Các kiểu dữ liệu Java đơn giản và các kiểu dữ liệu XML là các kiểu dữ liệu SDO hợp lệ, tiết kiệm được một bước nếu thực hiện bằng Java. Các SDO hỗ trợ cả hai mô hình truy cập dữ liệu động và tĩnh, có thể sử dụng cùng với nhau. Chúng ta sẽ xem xét các điều này chi tiết hơn:

  • Mô hình động (mặc định) cho phép các lập trình viên lấy giá trị và gán giá trị các phần tử dữ liệu trong đồ thị dữ liệu thông qua tên của chúng (kiểu String). Điều này đặc biệt có lợi khi kiểu SDO còn chưa được biết đến trong lúc biên dịch, hoặc khi các thuộc tính mới có thể được thêm vào sau khi chương trình đã được triển khai. Các trình khách hay các dịch vụ truy vấn SDO để tìm hiểu cấu trúc của nó và sau đó đọc và cập nhật bất cứ phần tử nào thông qua tên. Ví dụ, ta có thể viết một hàm truy cập SDO tổng quát và sau đó điền vào bằng các siêu dữ liệu đặc thù cho phần tử để truy cập vào từng SDO riêng biệt. SDO cũng sử dụng một tập con của các biểu thức Ngôn ngữ Đường dẫn XML (XPath) để cho phép nhanh chóng đi qua nhiều DataObjects, ví dụ như customer[1]/address/zip để truy cập nhanh chóng vào mã bưu điện của một DataObejct của customer.
  • Mô hình tĩnh sử dụng các giao diện Java có định kiểu và có đặt tên. Mỗi phần tử dữ liệu có phương thức "getter" và "setter" riêng biệt của mình. Một công cụ tạo ra các giao diện tĩnh từ các kiểu và các thuộc tính của SDO.

SDO là rất quan trọng cho việc biểu diễn dữ liệu, ngay cả khi không có nguồn dữ liệu cổ điển nào trong khung cảnh ứng dụng. Các ví dụ về loại hình sử dụng này bao gồm các thông báo XML được trao đổi giữa các dịch vụ web, các thông báo của Dịch vụ thông báo Java (Java Message Service-JMS), các tệp tin XML và nhiều thứ khác nữa.


Các ví dụ

Các ví dụ dưới đây -- định nghĩa một đối tượng dữ liệu để chứa dữ liệu khách hàng -- minh họa việc định nghĩa các SDO và sử dụng chúng là dễ dàng như thế nào khi sử dụng hoặc Java hoặc XML. Ví dụ 1 (bằng XML) là cơ sở cho kiểu SDO.

Ví dụ 1. Định nghĩa kiểu SDO bằng XML
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
                xmlns:tns="http://www.myvalue.com"
		targetNamespace="http://www.myvalue.com">
	<element name="customer" type="Customer"/>
	<complexType name="Customer">
		<sequence>
			<element name="customerID" type="string"/>
			<element name="firstName" type="string"/>
			<element name="lastName" type="string"/>
			<element name="stockSymbol" type="string"/>
			<element name="stockQuantity" type="int"/>
		</sequence>
	</complexType>
</schema>

Các giao diện Java trong Ví dụ 2, được sinh ra từ XML ở trên, minh hoạ việc sử dụng các giao diện tĩnh.

Ví dụ 2. Định nghĩa kiểu SDO bằng Java
public interface Customer {
	String getCustomerID();
	void setCustomerID(String customerID);
	String getFirstName();
	void setFirstName(String firstName);
	String getLastName();
	void setLastName(String lastName);	
        String getStockSymbol();
	void setStockSymbol(String stockSymbol);
	int getStockQuantity();
	void setStockQuantity(int stockQuantity);
}

Sau khi kiểu SDO đã được định nghĩa, bạn có thể khởi tạo nó (cấp phát vùng lưu trữ cho các đối tượng dữ liệu) bằng cách chuyển định nghĩa kiểu tới nhà máy (factory) dữ liệu SDO. Nhà máy chỉ đơn giản là một thành phần của môi trường chạy (runtime) mà chức năng của nó là để khởi tạo các đối tượng dữ liệu SDO từ các định nghĩa kiểu SDO.

Ví dụ 3Ví dụ 4 chỉ rõ cách làm thế nào để tạo ra một SDO bằng cách chuyển tới nhà máy dữ liệu vùng tên lược đồ XML và tên kiểu phức hợp (được định nghĩa trong Ví dụ 1) hoặc chuyển lớp giao diện Java (được định nghĩa trong Ví dụ 2) như là các đối số, một cách tương ứng.

Ví dụ 3. Tạo ra SDO với đối số là tên kiểu phức hợp và vùng tên lược đồ XML
DataObject customer = DataFactory.INSTANCE.create("http://www.myvalue.com", "Customer");
Ví dụ 4. Tạo ra SDO khi sử dụng SDO DataFactory với đối số là tên lớp giao diện Java
Customer customer = (Customer) DataFactory.INSTANCE.create(Customer.class);

Sau khi SDO đã được khởi tạo, có thể truy cập nó để triển khai thực hiện dịch vụ. Các đoạn mã mẫu trong Ví dụ 5 và Ví dụ 6 cho thấy cách truy cập động và tĩnh vào SDO Customer, một cách tương ứng.

Ví dụ 5. Sự truy cập động vào SDO
DataObject customer = ... ;
customer.setString("customerID", customerID);
...
customer.setInt("stockQuantity", 100);
String customerID = customer.getString("customerID");
...
int stockQuantity = customer.getInt("stockQuantity");
Ví dụ 6. Sự truy cập tĩnh vào SDO
Customer customer = ... ;
customer.setCustomerID(customerID);
...
customer.setStockQuantity(100);
String customerID = customer.getCustomerID();
...
int stockQuantity = customer.getStockQuantity();

Tiếp theo chúng tôi minh họa tính đơn giản của mô hình lập trình mà các SDO khuyến khích bằng các ví dụ về việc truy cập tới một dịch vụ tệp tin XML và tới một cơ sở dữ liệu quan hệ. Hãy lưu ý là các ứng dụng này giống nhau như thế nào, mặc dù có các sự khác nhau về công nghệ. Nhà phát triển ứng dụng có thể tập trung vào logic nghiệp vụ và để cho dịch vụ xử lý các chi tiết thực hiện về cách cập nhật một kho lưu trữ dữ liệu bền vững.

Ví dụ 7. Một dịch vụ tệp tin XML

Ví dụ đơn giản này nạp dữ liệu từ một tập tin XML vào một đồ thị dữ liệu SDO, in ra và cập nhật dữ liệu, sau đó ghi lưu nó trở lại vào một tệp tin. (Mục tiêu nghiệp vụ là thay đổi "Adam" thành "Kevin").

Định nghĩa tệp tin XML sẽ được đọc là một đối tượng dữ liệu customers gốc tương ứng với phần tử XML gốc và một thuộc tính customer đa trị. Customers có chứa một đối tượng dữ liệu cho từng phần tử customer trong tệp tin XML. Mỗi customer có hai thuộc tính: SNfirstName.
<customers xmlns="http://customers.com">
	<customer SN="1" firstName="Adam" />
	<customer SN="2" firstName="Baker" />
</customers>
Đọc dữ liệu tệp tin.
DataObject root = xmlService.load(InputStream);
Lướt qua danh sách các đối tượng dữ liệu customer và in tên (first name) của mỗi đối tượng.
Iterator i = root.getList("customer").iterator();
while (i.hasNext()) {
	DataObject cust = (DataObject) i.next();
	String name = cust.getString("firstName");
	System.out.println(name);
}
Đặt thuộc tính firstName của đối tượng dữ liệu customer đầu tiên là Kevin. Phần mềm trung gian (middleware) cập nhật bản tóm tắt thay đổi (không được hiển thị ở đây) để chỉ ra dữ liệu nào đã được thay đổi.
DataObject customer1 = root.getDataObject("customer[1]");
customer1.setString("firstName", "Kevin");  // or

root.setString("customer[1]/firstName", "Kevin");
Ghi các đối tượng dữ liệu vào tập tin.
xmlService.save(OutputStream, root);
Kết quả là một tài liệu XML được cập nhật.
<customers xmlns="http://customers.com">
  <customer SN="1" firstName="Kevin" />
  <customer SN="2" firstName="Baker" />
</customers>

Ví dụ 8. Truy cập vào một cơ sở dữ liệu quan hệ

Mặc dù có thể thực hiện ánh xạ dữ liệu quan hệ thành các SDO phức tạp hơn, ví dụ này chỉ sử dụng một ánh xạ rất đơn giản: mỗi bảng cơ sở dữ liệu là một kiểu SDO, mỗi hàng trong bảng là đối tượng dữ liệu SDO và mỗi cột là một thuộc tính SDO. Logic ứng dụng vẫn như cũ: đọc từ cơ sở dữ liệu bằng cách thi hành một truy vấn định nghĩa sẵn, in và cập nhật dữ liệu (đổi "Adam" thành "Kevin") và ghi lưu các thay đổi vào cơ sở dữ liệu. Truy vấn cơ sở dữ liệu trả về hai hàng từ bảng CUSTOMER:

CUSTOMER ID (int, primary key)CUSTOMER FIRSTNAME (String)CUSTOMER LASTNAME (String)
1AdamSmith
2BakerStreet

Việc triển khai thực hiện SDO được cho dưới đây cùng với các giải thích.

rdbService truy vấn để có được dữ liệu từ cơ sở dữ liệu.
DataObject root = rdbService.get();
Cùng một dữ liệu có thể có được biểu diễn tương đương trong XML.
<customers>
  <CUSTOMER ID="1" FIRSTNAME="Adam" LASTNAME="Smith"/>
  <CUSTOMER ID="2" FIRSTNAME="Baker" LASTNAME="Street"/>
</customers>
In tên (first name) của từng khách hàng.
Iterator i = root.getList("CUSTOMER").iterator();
while (i.hasNext()) {
	DataObject cust = (DataObject) i.next();
	String name = cust.getString("FIRSTNAME");
	System.out.println(name);
}
Đặt FIRSTNAME của đối tượng dữ liệu đầu tiên là Kevin. Phần mềm trung gian (middleware) cập nhật bản tóm tắt thay đổi (không được hiển thị ở đây) để chỉ ra sự thay đổi.
DataObject customer1 = root.getDataObject("CUSTOMER[1]");
customer1.setString("FIRSTNAME", "Kevin"); // or

root.setString("CUSTOMER[1]/FIRSTNAME", "Kevin");
Viết dữ liệu được cập nhật vào cơ sở dữ liệu.
rdbService.update(root);

Bây giờ cơ sở dữ liệu có chứa:

CUSTOMER ID (int, primary key)CUSTOMER FIRSTNAME (String)CUSTOMER LASTNAME (String)
1KevinSmith
2BakerStreet

Lưu ý rằng hàng 1 đã được cập nhật.

Điều gì xảy ra nếu một ứng dụng khác đã truy cập cơ sở dữ liệu và đã thay đổi các giá trị sau khi ví dụ ứng dụng của chúng ta đã nhận được đồ thị dữ liệu của nó? Khi viết vào, dịch vụ truy cập dữ liệu kiểm tra bản tóm tắt thay đổi để xác định xem sẽ áp dụng việc cập nhật tới nguồn dữ liệu như thế nào. Cơ sở dữ liệu có thể sử dụng việc kiểm soát tương tranh lạc quan để bảo đảm rằng cơ sở dữ liệu cuối cùng có chứa giá trị "Adam" trước thay đổi này (trái lại, một ứng dụng khác có thể đã thay đổi dữ liệu trước đó, có thể yêu cầu một số sửa lỗi nào đó trong ứng dụng). Một số dịch vụ triển khai thực hiện các dạng tương tranh lạc quan cao cấp hơn; lược sử thay đổi sẽ cung cấp các giá trị gốc cần thiết cho các thuật toán đó.

Khi sử dụng các EJB, các SDO đóng vai trò của mẫu thiết kế J2EE của DTO (còn được gọi là đối tượng giá trị -Value Object). Thông thường, việc truy cập vào từng thuộc tính của một EJB thực thể (Entity EJB) là rất tốn kém, do đó, việc chuyển giao một số đối tượng SDO vào một đồ thị dữ liệu có hiệu quả hơn. Một EJB phiên (Session EJB) có thể có các phương thức để sản xuất và tiêu thụ một đồ thị của các SDO với việc truy cập trực tiếp hiệu quả hơn tới các EJB thực thể. Các EJB thực thể Customer bao gói luôn việc truy cập cơ sở dữ liệu để tìm các bản ghi Customer. Một EJB phiên cung cấp các phương thức truy cập để tạo ra và trả về một đồ thị của các SDO Customer từ các EJB thực thể Customer.

Ví dụ 9. Giao diện của bean phiên để trả về các SDO và cập nhật các EJB thực thể từ các SDO
public interface CustomerSession {
	Customer getCustomerByID(String customerID);
	Customers getCustomersByLastName(String lastName);
	void updateCustomers(Customers customers);
}

Customers là Đối tượng Dữ liệu gốc của SDO có chứa một số khách hàng (customer). Danh sách (List) của Customers chứa các Đối tượng Dữ liệu Customer. ChangeSummary được sử dụng để ghi lại tất cả các thay đổi được thực hiện đối với các đối tượng Customer, bao gồm bất kì mọi thêm, bớt hay cập nhật. Phương thức updateCustomers() cập nhật các EJB thực thể Customer với những thay đổi và có thể xử lý theo bó các thay đổi đối với các nguồn dữ liệu trong một giao dịch.

Ví dụ 10. Một định nghĩa kiểu SDO của Customers trong Java
public interface Customers {
	List<Customer> getCustomers();
	ChangeSummary getChanges();
}

Tóm tắt

Các SDO cho phép truy cập thống nhất vào dữ liệu ứng dụng và áp dụng một mô hình lập trình chung cho tất cả các nguồn dữ liệu, cho dù dữ liệu được lưu giữ ở bất cứ đâu và bằng bất cứ cách nào. Các SDO sử dụng tính đơn giản của XML mà không cần đưa thêm vào sự phức tạp của lược đồ XML hay các vấn đề về hiệu năng khi tuần tự hóa. Khi sử dụng các SDO và SOA cùng với nhau, các nhiệm vụ lập trình hệ thống được tách ra khỏi logic nghiệp vụ và được bao gói kín trong các dịch vụ có thể tái sử dụng lại, thay cho các kĩ năng mà mọi lập trình viên đều cần phải biết để có thể bắt đầu. Chúng làm đơn giản hóa việc lập trình ứng dụng nghiệp vụ mà không bị lôi kéo vào các chi tiết công nghệ hoặc các chi tiết thực hiện, bảo vệ tránh khỏi các khuấy động công nghệ. Với các SDO, các ứng dụng nghiệp vụ là chính những gì mà chúng mang tên: các ứng dụng nghiệp vụ.

Tài nguyên

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=SOA và dịch vụ Web
ArticleID=444972
ArticleTitle=Mô hình lập trình SOA để triển khai thực hiện các dịch vụ Web, Phần 2: Đơn giản hóa việc truy cập dữ liệu bằng cách sử dụng các đối tượng dữ liệu dịch vụ (Service Data Objects)
publish-date=11062009