Mô hình hoá triển khai trong Rational Software Architect phiên bản 7.5: Phần 1: Giải phẫu một mô hình cấu trúc liên kết

Phiên bản 7.5 của IBM® Rational® Software Architect (Kiến trúc sư phần mềm Rational của IBM) chứa một nền kiến trúc triển khai mạnh, để thiết kế và hiểu các hệ thống công nghệ thông tin và các mối quan hệ phức tạp của chúng một cách trực quan. Nền tảng này được xây dựng trên một mô hình định kiểu mạnh (strongly-typed), có thể mở rộng được, cung cấp một khung làm việc để mô tả bất kỳ hệ thống công nghệ thông tin nào. Loạt bài này mổ xẻ mô hình cấu trúc liên kết, trái tim của đặc tính này. Mô hình cấu trúc liên kết này mô tả các khái niệm trừu tượng logic (hoặc định nghĩa cụ thể) của các phần tử cơ bản (building blocks) của bất kỳ hệ thống công nghệ thông tin nào. Chúng cũng cho phép bạn thể hiện các dạng quan hệ khác nhau giữa các phần tử hệ thống đó. Các khái niệm cơ sở của mô hình cấu trúc liên kết (gồm các nguyên tắc cơ sở của cấu trúc liên kết, các đơn vị, yêu cầu, và các khả năng, cùng với các mối quan hệ như sự phụ thuộc (dependancy), hosting (chủ cung cấp máy và dịch vụ web), và các bộ phận) được thảo luận trong phần này của loạt bài. Nó cũng cung cấp một ví dụ về cách mô hình có thể được sử dụng để mô tả một hệ thống công nghệ thông tin, tích hợp thông tin về một lĩnh vực riêng theo các kiểu định nghĩa trước trong mô hình.

Narinder Makin, Kiến trúc sư phần mềm, IBM Rational SOA tools, IBM

Narinder Makin là một kiến trúc sư phần mềm tại Phòng thí nghiệm Khu Tam giác Nghiên cứu IBM tại Durham, tiểu bang Bắc Carolina. Ông làm việc trong lĩnh vực công cụ Triển khai dùng cho nhóm Rational Software Architect. Ông đã làm việc về một loạt các công cụ Triển khai và Phát triển Điều khiển Mô hình trong hơn 12 năm qua. Ông đã có một số bằng sáng chế và các bài báo đã xuất bản. Ông có bằng đại học về ngành Khoa học và Kỹ thuật Máy tính của K.N.I.T, Ấn Độ, và cũng có bằng Thạc sĩ về Khoa học Máy tính của Đại học Bridgeport, Connecticut.



06 11 2009

Giới thiệu

Phiên bản 7.5 của Ấn bản tiêu chuẩn Rational® Software Architect của IBM® và Phiên bản phần mềm 7.5 của Rational® Software Architect cho WebSphere của IBM® (gọi tắt là Rational Software Architect V7.5) chứa một nền tảng kiến trúc triển khai mạnh, để mô hình hóa các hệ thống công nghệ thông tin và các mối quan hệ phức tạp của chúng một cách trực quan. Nó được xây dựng trên một mô hình cấu trúc liên kết có thể mở rộng được, bền vững, gọi là một mô hình cấu trúc liên kết. Đặc điểm này nhằm vào nhu cầu sau đây.

Bạn có lẽ hay được yêu cầu thể hiện việc thiết kế các hệ thống thông tin của bạn để đảm bảo truyền thông qua các ranh giới phòng ban (ví dụ, giữa việc phát triển và các hoạt động). Các phương thức thông thường của việc chuyển giao các thông tin như vậy bao gồm các ghi chú, thư điện tử, các bảng tính, chiếu hình (slides), hoặc các sơ đồ Microsoft®. Luôn luôn có một nhu cầu về một phương thức hình thức để truyền đạt thiết kế này, và một hệ thống để xác nhận truyền thông đó. Sự vắng mặt của một giải pháp như vậy dẫn đến sự đa dạng của các vấn đề về cấu hình xuất hiện qua vòng đời của ứng dụng, với các triển khai chưa được kiểm tra được thực hiện trong các môi trường mục tiêu. Lỗ hổng này thậm chí còn tồi tệ hơn khi một giải pháp di chuyển giữa các giai đoạn khác nhau của vòng đời ứng dụng, như việc phát triển, sắp xếp tổ chức, kiểm thử, hoặc các hoạt động. Kết quả là bạn có thể phải kiến trúc lại hệ thống, hoặc có lẽ là gần như không thể sao chép việc cài đặt hệ thống thành công. Các mẫu hoặc thực hành xây dựng hoặc triển khai các hệ thống như vậy thường được tư liệu bằng văn tự, mà không có cách nào để nhận ra hoặc áp đặt chúng.

Tiêu biểu là các hệ thống thông tin như vậy đòi hỏi các mối quan hệ khác nhau phải được thể hiện giữa các bộ phận trong hệ thống. Việc này được thực hiện bằng cách đặt tên các mối quan hệ này, mà nó biến đổi giữa các nhóm khác nhau trong một tổ chức công nghệ thông tin, hoặc qua các tổ chức. Ai cũng hiểu rằng, không ít thì nhiều, có một số ngữ nghĩa chung đằng sau các mối quan hệ này, nhưng chúng thiếu phương tiện diễn đạt thông thường này. Mô hình cấu trúc liên kết không những cung cấp phương tiện để thể hiện các mối quan hệ này trong một ngôn ngữ chung, mà còn phân loại cụ thể hơn các mối quan hệ này dựa trên ngữ nghĩa của chúng (như sự phụ thuộc, hosting, hoặc bộ phận). Việc này cho phép bạn định nghĩa các mối quan hệ theo kiểu điều khiển được, mà bạn có thể đọc được, nhưng cái đó cũng có thể giải thích được bằng các công cụ phần mềm, để tạo ra các cấu trúc liên kết được xác thực và cách giải quyết.

Các phần sau đây thảo luận về các khái niệm cơ sở của mô hình cấu trúc liên kết, cùng với các đặc trưng về cách áp dụng một kiến thức lĩnh vực vào các kiểu trong mô hình.

Các khái niệm mô hình cấu trúc liên kết

Bạn có thể sử dụng một mô hình cấu trúc liên kết để mô tả một hệ thống công nghệ thông tin, hoặc các bộ phận của một hệ thống công nghệ thông tin. Nó cung cấp một ngôn ngữ chung để thể hiện hệ thống. Nó cũng cho bạn khả năng đóng góp các kiểu mới (hoặc các cá thể của các kiểu mới) ứng với lĩnh vực trong một hoặc nhiều mô hình cấu trúc liên kết. Mỗi cá thể này trong mô hình cấu trúc liên kết được ghép lỏng với các tính năng, và có thể xác định các yêu cầu của chúng. Các khái niệm cơ sở sau đây của mô hình cấu trúc liên kết được đề cập trong bài này:

Một mô hình cấu trúc liên kết là thùng chứa của tất cả các đơn vị và mối quan hệ của chúng, mà các đơn vị liên kết lỏng với các yêu cầu và các khả năng. Các phần sau đây gồm mô tả và cách sử dụng chi tiết của các kiểu này, theo mô hình cấu trúc liên kết mẫu mà bạn xây dựng trong suốt bài này. Một sự trình bày cơ sở của các kiểu này thể hiện trong Hình 1.

Hình 1. Mô hình UML cấu trúc liên kết cơ sở
Mô hình UML cấu trúc liên kết cơ sở

Cấu trúc liên kết

Cấu trúc liên kết là phần tử trên cùng của bất kỳ mô hình cấu trúc liên kết nào. Nó đảm bảo trình bày mô hình cấu trúc liên kết với tất cả các nội dung của cấu trúc liên kết, gồm các đơn vị và các mối quan hệ của chúng. Một cấu trúc liên kết diễn đạt một hệ thống công nghệ thông tin có thể đơn giản như mô tả một thành phần của hệ thống. Nó cũng có thể đủ phức tạp để xác định nhiều thành phần đến mức thứ n của chúng, cùng với các mối quan hệ của chúng. Không gian tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết, như trong Liệt kê 1. Cấu trúc liên kết được xác định duy nhất theo tên và không gian tên của nó. Bạn cũng có thể xác định một tên hiển thị mà có thể dùng cho các công cụ trực quan, cùng với một mô tả.

Liệt kê 1. Không gian tên cốt lõi trong core.xsd
<?xml version="1.0" encoding="UTF-8"?>

<core:topology 

xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/"

description="This is a sample topology describing the anatomy of the topology model"

displayName="Sample Topology" 

name="SampleTopology" 

namespace="developerworks.deploy">

<!-- all other containments of the topology go here -->

</core:topology>

Phạm vi của cấu trúc liên kết không hạn chế ở mô tả một hệ thống công nghệ thông tin đầy đủ, hoặc thậm chí bộ phận chính của nó. Tuỳ thuộc vào nhu cầu của bạn, có thể phân tích hoặc thu bớt nội dung của môi trường của bạn thành một hoặc nhiều cấu trúc liên kết mà có thể tham chiếu nhau. Trong trường hợp này, các cấu trúc liên kết như là phương thức sử dụng lại, và có thể được soạn ra để tạo các cấu trúc liên kết lớn hơn.

Hơn nữa, bạn cũng có thể ghi nhãn cấu trúc liên kết bằng cách sử dụng thuộc tính decoratorSemantic để mô tả ý định của nó trong mô hình hóa. Các nhãn phổ biến như analysis, infrastructuredeployment đã được định nghĩa trước trong IBM® Rational® Software Architect để sử dụng. Trong thí dụ ở Liệt kê 2, cấu trúc liên kết được dán nhãn com.ibm.ccl.soa.deploy.core.dds, được giải thích bởi Rational Software Architect khi được ghi nhãn để phân tích (analysis).

Liệt kê 2. Thuộc tính decoratorSemantic
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/"
description="This is a sample topology describing the anatomy of the topology model"
displayName="Sample Topology" 
name="SampleTopology" 
namespace="developerworks.deploy"

decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads">

<!-- all other containments of the topology go here -->
</core:topology>

Đơn vị

Đơn vị nói chung, một đơn vị thể hiện cho một bộ phận biệt lập của một hệ thống công nghệ thông tin mà định nghĩa một tập các yêu cầu. Các yêu cầu này sẽ được đáp ứng trong khi triển khai, và chúng mô tả một tập các tính năng mà hệ thống cung cấp. Nó được nêu trong không gian tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Nó được xác định duy nhất theo tên của nó trong phạm vi của một cấu trúc liên kết. Bạn cũng có thể xác định một tên hiển thị mà có thể tiêu thụ được bởi các công cụ trực quan, cùng với một mô tả như trong Liệt kê 3.

Liệt kê 3. Kiểu đơn vị
<core:unit 

displayName="SampleUnit" 

name="sampleUnit"

description="This is a sample unit">

</core:unit>

Cấu hình

Trong khi triển khai, có một vài bộ phận chỉ là các cấu hình. Mô hình này cho phép bạn thiết lập một thuộc tính configurationUnit trên đơn vị để xác định rằng nó là một cấu hình, như trong Liệt kê 4. Chẳng hạn, một máy chủ có thể được coi là một đơn vị không cấu hình (non-configuration), trong khi một nguồn dữ liệu mà được thiết lập cấu hình trên máy chủ đó có thể được xem như đơn vị cấu hình.

Liệt kê 4. Các cấu hình
<core:unit 
displayName="SampleConfigurationUnit" 
name="sampleConfigurationUnit" 
description="This is a sample configuration unit" 

configurationUnit="true">

</core:unit>

Khái niệm

Cũng có những lúc bạn không hiểu biết được đầy đủ định nghĩa của đơn vị lúc phân tích. Như vậy mô hình cấu trúc liên kết, thể hiện trạng thái phân tích của hệ thống công nghệ thông tin hoặc bộ phận của nó, có lẽ không thể diễn đạt được toàn bộ các tính năng hoặc yêu cầu (hay thậm chí các bộ phận) của đơn vị đó. Đối với mục đích thể hiện đơn vị đã định, một thuộc tính khái niệm (conceptual) tuỳ chọn với giá trị giả (false) mặc định hiện hành trên một đơn vị, như trong Liệt kê 5. Điều này cũng có thể được cho là một khe rãnh (slot) trong cấu trúc liên kết, cần được lựa chọn tại thời điểm sau đó.

Liệt kê 5. Thuộc tính khái niệm
<core:unit 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" 
description="This is a sample conceptual unit" 

conceptual="true">

</core:unit>

Khuôn mẫu (Stereotype)

Bạn có thể phân loại tiếp một đơn vị bằng cách sử dụng các khuôn mẫu như một từ khóa phụ đối với đơn vị, như trong Liệt kê 6. Sau đó bạn có thể sử dụng các từ khoá này vì nhiều lý do để liên kết hành vi, dựa trên mô tả về chúng. Các khuôn mẫu này cũng cung cấp một phương tiện tương hỗ giữa các khuôn mẫu do mô tả khác nêu ra, được xác định trên các thành phần trong Ngôn ngữ Mô hình hoá Thống nhất (UML).

Liệt kê 6. Các từ khoá khuôn mẫu
<core:unit 
displayName="ServiceComponentUnit"
name="serviceComponentUnit" 
description="This is a stereotyped service component unit">

<core:stereotype 

keyword="service" 

profile="serviceProfile"/>
  
</core:unit>

Cài đặt

Theo tùy chọn, một đơn vị cũng có thể xác định trạng thái cài đặt của nó cho các mục đích triển khai như unknown (chưa biết), installed (được cài đặt) hoặc not_installed (không được cài đặt). Trạng thái cài đặt được phân tích tiếp để xác định trạng thái cài đặt ban đầu hoặc trạng thái cài đặt mục tiêu của đơn vị với các giá trị mặc định của cái unknown. Sự kết hợp của trạng thái cài đặt ban đầu và mục tiêu trên đơn vị cung cấp thêm thông tin về các khía cạnh triển khai của đơn vị cho bộ phận công bố mô hình cấu trúc liên kết. Một kịch bản trong đó trạng thái cài đặt ban đầu có thể là installed trong khi trạng thái cài đặt mục tiêu là not_installed đảm bảo giải thích để gỡ bỏ cài đặt đơn vị khi mô hình cấu trúc liên kết được công bố. Bạn cũng có thể xác định một thuộc tính publishIntent (dự định công bố), như trong Liệt kê 7, với một giá trị unknown, publish (công bố), hoặc do_not_publish (không công bố) (mặc định là publish). Việc này đưa ra một gợi ý bổ sung cho bộ phận công bố về liệu có bỏ qua đơn vị trong khi công bố không. Việc này cũng cho phép bộ phận công bố gia tăng hoặc tách biệt mô hình cấu trúc liên kết trong các giai đoạn khác nhau của phát triển và triển khai.

Liệt kê 7. Trạng thái cài đặt và ý định công bố
<core:unit 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" 
description="This is a sample conceptual unit" 
conceptual="true"

initInstallState="installed" 

goalInstallState="not_installed"

publishIntent="do_not_publish">

</core:unit>

Bố cục

Một cấu trúc liên kết có thể được định nghĩa để chứa chỉ một đơn vị, hoặc nó có thể chứa nhiều hơn, tuỳ thuộc vào ý định của cấu trúc liên kết. Bạn có thể định nghĩa một tập các cấu trúc liên kết, để tạo nên danh mục các đơn vị có mặt trong hệ thống công nghệ thông tin. Các cấu trúc liên kết này hoạt động như các phần tử cơ bản dùng lại cho các cấu trúc liên kết khác sẽ được xây dựng, và có thể chứa một số tối thiểu các đơn vị biệt lập. Một cấu trúc liên kết cũng có thể được định nghĩa để thể hiện hệ thống công nghệ thông tin đầy đủ: cấu trúc liên kết đó có thể chứa một số lớn các đơn vị thể hiện từng bộ phận trong hệ thống công nghệ thông tin đó, như trong Liệt kê 8.

Liệt kê 8. Mã hoá với một số đơn vị
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 
description="This is a sample topology describing the 
anatomy of the topology model"
displayName="Sample Topology" 
name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy"

<core:unit 

description="This is a sample unit" 

displayName="SampleUnit" 

name="sampleUnit"/>


<core:unit 

description="This is a sample configuration unit" 

displayName="SampleConfigurationUnit" 

name="sampleConfigurationUnit" 

configurationUnit="true"/> 


<core:unit 

description="This is a sample conceptual unit"

displayName="SampleConceptualUnit" 

name="sampleConceptualUnit"

conceptual="true" 

goalInstallState="not_installed"

initInstallState="installed" 

publishIntent="do_not_publish"/>


<core:unit 

description="This is a stereotyped service component unit" 

displayName="ServiceComponentUnit" 

name="serviceComponentUnit">

<core:stereotype 

keyword="service"

profile="serviceProfile"/>

</core:unit>


</core:topology>

Sử dụng lĩnh vực

Các đơn vị điển hình chuyên về một lĩnh vực, và một cấu trúc liên kết có thể chứa các đơn vị từ một hoặc nhiều lĩnh vực này. Ví dụ, một lĩnh vực Java™ 2 Platform, Bản Doanh nghiệp (J2EE) có thể định nghĩa một kiểu máy chủ dịch vụ J2EE (j2eeServer) và một kiểu thành phần ứng dụng J2EE (component.ear) như một phần mở rộng của một kiểu đơn vị cốt lõi. Trong cấu trúc liên kết hiển thị trong Liệt kê 9, các kiểu đơn vị cốt lõi và các kiểu đơn vị từ một lĩnh vực J2EE được sử dụng cùng với nhau. Cũng lưu ý rằng trạng thái cài đặt của đơn vị máy chủ được xác định để vẫn là không đổi đối với trạng thái cài đặt ban đầu và đích. Mặt khác, trạng thái cài đặt trên thành phần ứng dụng J2EE xác định rằng đơn vị chưa được cài đặt và cần được cài đặt. Lưu ý rằng để sử dụng các kiểu này từ miền J2EE, một tham khảo vùng tên được thêm vào tệp cấu trúc liên kết như xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/".

Liệt kê 9. Các đơn vị từ các lĩnh vực khác nhau
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 

xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/"

description="This is a sample topology describing the anatomy of the topology model" 
displayName="Sample Topology" name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit" name="sampleConfigurationUnit" 
configurationUnit="true"/>
<core:unit description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" name="sampleConceptualUnit" 
conceptual="true" goalInstallState="not_installed" 
initInstallState="installed" publishIntent="do_not_publish"/>
<core:unit description="This is a stereotyped service component unit" 
displayName="ServiceComponentUnit" name="serviceComponentUnit">
<core:stereotype keyword="service" profile="serviceProfile"/>
</core:unit>

<j2ee:unit.j2eeServerUnit 

description="This is a J2eeServer unit "
 
displayName="J2EE Server Unit " 

name="j2eeServerUnit" 

conceptual="true" 

goalInstallState="installed" 

initInstallState="installed"/>


<j2ee:component.ear 

description="This is an EAR Component " 

displayName="EAR Component " 

name="earComponent" 

configurationUnit="false" 

goalInstallState="installed" 

initInstallState="not_installed"/>


</core:topology>

Khả năng

Khả năng thể hiện khả năng mà một đơn vị có thể cung cấp cho các đơn vị khác, và nó mang nội dung cấu hình của đơn vị. Kiểu khả năng được biết từ không gian tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Khả năng được chứa trong đơn vị và được xác định duy nhất bởi tên của nó trong phạm vi của một đơn vị. Bạn cũng có thể xác định một tên hiển thị, có thể dùng cho công cụ trực quan đi cùng với một mô tả. Thuộc tính linkType của khả năng định nghĩa kiểu của các liên kết, khả năng có thể được sử dụng, như trong Liệt kê 10.

Liệt kê 10. Khả năng
<core:capability 

displayName="SampleCapability" 

name="sampleCapability" 

description="This is a sample capability" 

linkType="any"/>

Hai tập các khả năng rộng hơn mà thường được xác định trong một mô hình cấu trúc liên kết rơi vào khả năng dependencyhosting. Khả năng hosting xác định khả năng cho một đơn vị làm chủ cung cấp máy và dịch vụ web hoặc cung cấp các dịch vụ phần giữa (ví dụ, máy chủ ứng dụng) cho một hoặc nhiều đơn vị khác. Khả năng dependency xác định khả năng cho một đơn vị (ví dụ, nguồn dữ liệu) để thực hiện công việc cho các đơn vị ngang hàng của nó, mà có thể cùng được hoặc được cung cấp máy và dịch vụ web trên các đơn vị khác nhau. Mô hình không xác định bất kỳ kiểu hình thức nào đối với hai loại khả năng trên đây, mà thay thế bằng sử dụng thuộc tính linkType để được xác định hosting hoặc dependency. Tiêu biểu là các khả năng dependency có linkType như là dependency, trong khi các khả năng hosting lại định nghĩa linkType như là any (bất kỳ cái nào) để thể hiện ngay cả việc chúng là máy chủ dịch vụ, và cái cái khác có thể phụ thuộc gián tiếp vào cấu hình của chúng.

Khả năng hosting có thể được định nghĩa như trong Liệt kê 11.

Liệt kê 11. Khả năng hosting
<core:capability 

displayName="SampleHostingCapability" 

name="sampleHostingCapability" 

description="This is a sample hosting capability" 

linkType="hosting"/>

Một khả năng dependancy có thể được định nghĩa như trong Liệt kê 12.

Liệt kê 12. Khả năng dependancy
<core:capability 

displayName="SampleDependencyCapability" 

name="sampleDependencyCapability" 

description="This is a sample dependency capability" 

linkType="dependency"/>

Các khả năng được liên kết với một đơn vị trong mô hình cấu trúc liên kết để thể hiện các khả năng của đơn vị, nhưng lược đồ cho mô hình cấu trúc liên kết không áp đặt bất kỳ liên kết chặt chẽ nào giữa đơn vị và kiểu khả năng. Những khả năng này được ghép lỏng lẻo với nhau trong các mô hình cấu trúc liên kết, đảm bảo tính linh hoạt tối đa giữa đơn vị và kiểu khả năng sẵn có. Ví dụ, có thể cùng một kiểu khả năng có thể được liên kết với một hoặc nhiều kiểu đơn vị trên cơ sở không được dự tính trước (ad hoc basis).

Một khả năng phụ thuộc có thể được liên kết đến một đơn vị cấu hình như trong Liệt kê 13.

Liệt kê 13. Liên kết một khả năng với một đơn vị cấu hình
<core:unit 

displayName="SampleConfigurationUnit" 

name="sampleConfigurationUnit" 

description="This is a sample configuration unit" 

configurationUnit="true">


<core:capability 

displayName="SampleDependencyCapability" 

name="sampleDependencyCapability"
 
description="This is a sample dependency capability" 

linkType="dependency"/>


</core:unit>

Cùng một khả năng dependancy được thêm vào trên đây cũng có thể được liên kết đến một SampleUnit (đơn vị mẫu), như trong Liệt kê 14.

Liệt kê 14. Liên kết khả năng với một SampleUnit
<core:unit 

displayName="SampleUnit" 

name="sampleUnit"

description="This is a sample  unit">


<core:capability 

displayName="SampleDependencyCapability"

name="sampleDependencyCapability" 

description="This is a sample dependency capability"
 
linkType="dependency"/>
 
 
</core:unit>

Sử dụng lĩnh vực

Việc chuyên môn hoá các kiểu khả năng bởi các lĩnh vực cung cấp khả năng phụ. Tiêu biểu là một khả năng cũng được định nghĩa cho mỗi kiểu đơn vị, chẳng hạn như để chứa các thuộc tính dựa trên nội dung cấu hình của các đơn vị trong lĩnh vực đó. Điều này tạo điều kiện thuận lợi cho việc xác thực các phụ thuộc đơn vị cho các thuộc tính đặc biệt của đơn vị. Chẳng hạn như một lĩnh vực J2EE có thể cung cấp cho:

  • Kiểu đơn vị J2eeServer cùng với một J2eeContainer (thùng chứa J2ee) mà cho phép bạn xác định một thuộc tính containerVersion (phiên bản thùng chứa).
  • Kiểu khả năng ServletContainer mà cho phép bạn xác định một thuộc tính containerVersion.
  • Khả năng J2eeDatasource mà cho phép bạn xác định một thuộc tính jndiName.
  • Khả năng J2eeServer mà có thể mang các thuộc tính cấu hình như serverName v.v.

Sau đó bạn có thể tạo một mô hình cấu trúc liên kết mà định nghĩa một cá thể của đơn vị J2eeServer mà chứa các thứ sau đây, như trong Liệt kê 15:

  • Khả năng hosting J2eeContainer với một containerVersion 1.4 riêng.
  • Khả năng hosting ServletContainer với một containerVersion 2.3 riêng.
  • Khả năng phụ thuộc J2eeDatsource mà có một jndiName thiết đặt ở jndi/datasource1.
  • Khả năng J2eeServer mà có thể chứa các thuộc tính cấu hình của J2eeServer.

Lưu ý rằng để sử dụng các kiểu từ lĩnh vực J2EE, một tham chiếu không gian tên được thêm vào tệp cấu trúc liên kết như xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/".

Liệt kê 15. Mô hình cấu trúc liên kết
<?xml version="1.0" encoding="UTF-8"?>
<core:topology
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 
xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/" 
description="This is a sample topology describing the anatomy of the topology model"
displayName="Sample Topology" 
name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit 
description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit"
name="sampleConfigurationUnit" 
configurationUnit="true"/>
<core:unit 
description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" 
conceptual="true" 
goalInstallState="not_installed" 
initInstallState="installed" 
publishIntent="do_not_publish"/>
<core:unit 
description="This is a stereotyped service component unit" 
displayName="ServiceComponentUnit" 
name="serviceComponentUnit">
<core:stereotype keyword="service" 
profile="serviceProfile"/>
</core:unit>
<j2ee:unit.j2eeServerUnit 
description="This is a J2eeServer unit " 
displayName="J2EE Server Unit " 
name="j2eeServerUnit" 
conceptual="true" 
goalInstallState="installed" 
initInstallState="installed">


<j2ee:capability.j2eeServer 

description="This is a J2EE server capability" 

displayName="J2EE Server Capability" 

name="j2eeServer" 

linkType="any"/>


<j2ee:capability.j2eeContainer 

description="This is a J2EE container capability" 

displayName="J2EE Container Capability" 

name="j2eeContainer" 

linkType="hosting" 

containerVersion="1.4"/>


<j2ee:capability.servletContainer 

description="This is a J2EE servlet container capability" 

displayName="J2EE Servlet Container Capability" 

name="j2eeServletContainer" 

linkType="hosting" 

containerVersion="2.3"/>


<j2ee:capability.j2eeDatasource 

description="This is a J2EE datasource dependency capability" 

displayName="J2eeDatasourceCapability" 

name="j2eeDatasourceCapability" 

linkType="dependency" 

jndiName="jndi/datasource1"/>


</j2ee:unit.j2eeServerUnit>
<j2ee:component.ear 
description="This is an EAR Component " 
displayName="EAR Component " 
name="earComponent" 
configurationUnit="false" 
goalInstallState="installed" 
initInstallState="not_installed"/>
</core:topology>

Yêu cầu

Yêu cầu thể hiện nhu cầu mà một đơn vị có thể có trong môi trường mục tiêu. Kiểu yêu cầu có trong lĩnh vực tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Yêu cầu được chứa trong đơn vị và được xác định duy nhất bởi tên của nó trong phạm vi của một đơn vị, như trong Liệt kê 16.

Liệt kê 16. Yêu cầu
<core:requirement  name="r0"/>

Theo tùy chọn, một linkType (kiểu liên kết) với một giá trị mặc định của dependency được định nghĩa trong yêu cầu để xác định kiểu của các liên kết quan hệ, có thể dùng để đáp ứng yêu cầu. Thuộc tính dmoType trong yêu cầu được sử dụng để xác định một ràng buộc tuỳ ý đối với đơn vị mục tiêu hoặc kiểu khả năng mà có thể được sử dụng để hoàn thành yêu cầu. Bạn cũng có thể xác định một tên hiển thị dùng cho các công cụ trực quan, cùng với một mô tả. Ngoài ra, một cách sử dụng của yêu cầu cũng có thể được thiết lập như là required (được yêu cầu), optional (tuỳ ý) hoặc prohibited (cấm) qua thuộc tính use (sử dụng) (giá trị mặc định là required).

Bạn có thể xác định một yêu cầu phụ thuộc tuỳ ý mà có thể được thoả mãn bởi một khả năng nguồn dữ liệu J2EE bằng cách sử dụng một liên kết quan hệ phụ thuộc, như trong Liệt kê 18. Giá trị thuộc tính dmoType về các yêu cầu phụ thuộc xác định ràng buộc đối với một kiểu khả năng.

Liệt kê 18. Xác định một yêu cầu phụ thuộc tuỳ ý
<core:requirement  

displayName="Datasource Dependency Requirement" 

name="r0" 

description="This is a sample dependency requirement" 

linkType="dependency" 

dmoType="j2ee:J2EEDatasource" 

use="optional" />

Bạn cũng có thể xác định một yêu cầu hosting được đòi hỏi, có thể thoả mãn bằng khả năng thùng chứa J2EE Enterprise Java™Beans (EJB) bằng cách sử dụng một mối quan hệ hosting, như trong Liệt kê 19. Giá trị thuộc tính dmoType đối với các yêu cầu hosting, xác định ràng buộc đối với một kiểu khả năng.

Liệt kê 19. Xác định một yêu cầu hosting
<core:requirement  

displayName="EJB Container Hosting Requirement" 

name="r1" 

description="This is a sample hosting requirement" 

linkType="hosting" 

dmoType="j2ee:J2eeContainer"/>

Ngoài ra, bạn có thể xác định một yêu cầu bộ phận về đơn vị, cho phép các bộ phận thông qua liên kết quan hệ bộ phận, như trong Liệt kê 20. Cũng lưu ý rằng trong trường hợp này, dmoType bị ràng buộc với một kiểu đơn vị chứ không phải là một kiểu khả năng (như trong các trường hợp trước).

Liệt kê 20. Xác định một yêu cầu bộ phận
<core:requirement  

displayName="Unit Member Requirement"
 
name="r2" 

description="This is a sample member requirement 
showing that member of type Unit are allowed where
this requirement is defined " 

linkType="member" 

dmoType="core:Unit"/>

Bạn cũng có thể xác định linkTypeany (bất kỳ), nhưng hiếm khi được dùng cho các khả năng mà có thể cùng một lúc là dependency, hostingmember. Bạn cũng có thể định nghĩa một thuộc tính extends (mở rộng) để xác định đường dẫn liên quan đến yêu cầu cơ sở để tạo ra một phần mở rộng. Tuy nhiên, điều này một lần nữa là một khái niệm hiếm thấy, được sử dụng trong việc xác định các lĩnh vực.

Sử dụng lĩnh vực

Tương tự như khả năng, các yêu cầu được liên kết với một đơn vị trong mô hình cấu trúc liên kết để thể hiện các nhu cầu của đơn vị. Tuy nhiên, lược đồ đối với mô hình cấu trúc liên kết không áp đặt bất kỳ liên kết chặt chẽ nào giữa đơn vị và các kiểu yêu cầu. Những yêu cầu này được ghép lỏng lẻo với nhau trong các mô hình cấu trúc liên kết để đảm bảo tính linh hoạt tối đa giữa đơn vị và các kiểu yêu cầu sẵn có. Ví dụ, cùng yêu cầu kiểu có thể là liên kết với một hoặc nhiều đơn vị kiểu.

Chẳng hạn như, một cấu trúc liên kết có thể được định nghĩa đến mức nó chứa một cá thể của một thành phần ứng dụng J2EE, được xác định trong lĩnh vực J2EE mà có các thứ sau đây, như trong Liệt kê 21:

  • Yêu cầu hosting về khả năng J2eeContainer.
  • Yêu cầu phụ thuộc vào một khả năng J2eeDatasource.
  • Yêu cầu bộ phận để chứa (các) Thành phần EJB J2EE
Liệt kê 21. Cấu trúc liên kết với ứng dụng J2EE
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 
xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/" 
description="This is a sample topology describing the anatomy 
of the topology model" displayName="Sample Topology" 
name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit" 
name="sampleConfigurationUnit" 
configurationUnit="true"/>
<core:unit description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" conceptual="true" 
goalInstallState="not_installed" 
initInstallState="installed" 
publishIntent="do_not_publish"/>
<core:unit description="This is a stereotyped service 
component unit" displayName="ServiceComponentUnit" 
name="serviceComponentUnit">
<core:stereotype keyword="service" 
profile="serviceProfile"/>
</core:unit>
<j2ee:unit.j2eeServerUnit 
description="This is a J2eeServer unit " 
displayName="J2EE Server Unit " name="j2eeServerUnit" 
conceptual="true" goalInstallState="installed" 
initInstallState="installed">
<j2ee:capability.j2eeServer 
description="This is a J2EE server capability" 
displayName="J2EE Server Capability" 
name="j2eeServer" linkType="any"/>
<j2ee:capability.j2eeContainer 
description="This is a J2EE container capability" 
displayName="J2EE Container Capability" 
name="j2eeContainer" linkType="hosting" 
containerVersion="1.4"/>
<j2ee:capability.servletContainer 
description="This is a J2EE servlet container capability" 
displayName="J2EE Servlet Container Capability" 
name="j2eeServletContainer" linkType="hosting" 
containerVersion="2.3"/>
</j2ee:unit.j2eeServerUnit>
<j2ee:component.ear 
description="This is an EAR Component " 
displayName="EAR Component " name="earComponent" 
configurationUnit="false" goalInstallState="installed" 
initInstallState="not_installed">


<core:requirement 

description="This is a datasource dependency requirement" 

displayName="Datasource Dependency Requirement" 

name="r0" 

dmoType="j2ee:J2EEDatasource" 

linkType="dependency" 

use="optional"/>


<core:requirement 

description="This is a J2EE container hosting requirement" 

displayName="J2EE Container Hosting Requirement" 

name="r1" 

dmoType="j2ee:J2EEContainer" 

linkType="hosting"/>


<core:requirement 

description="This is a EJB component member 
requirement showing that member of type EjbComponent unit are allowed " 

displayName="EJB Component Member Requirement" 

name="r2" 

dmoType="j2ee:EjbModule" 

linkType="member"/>


</j2ee:component.ear>
</core:topology>

Tạo tác

Tạo tác thể hiện đối tượng có thể triển khai, có thể mang một đơn vị. Kiểu tạo tác có trong lĩnh vực tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Đơn vị có thể chứa (các) tạo tác khi các cá thể tạo tác được xác định duy nhất bởi tên của nó trong phạm vi một đơn vị, như trong Liệt kê 22. Kiểu tạo tác được định nghĩa như một kiểu tóm tắt trong lược đồ cấu trúc liên kết. Các phần mở rộng của kiểu này thường được định nghĩa để xác định kiểu nội dung mà một tạo tác có thể có. Một kiểu tạo tác phổ biến là một FileArtifact thể hiện cho một tài nguyên tệp, được định nghĩa trong lược đồ cấu trúc liên kết.

Liệt kê 22. Kiểu tạo tác
<core:artifact.file 

displayName="Sample File Jar " 

name="a1">

<core:fileURI>samplefile.jar</core:fileURI>

</core:artifact.file>

Sử dụng lĩnh vực

Chẳng hạn như, bạn có thể liên kết một thành phần ứng dụng J2EE được xác định trong một mô hình cấu trúc liên kết với một tài nguyên lưu trữ doanh nghiệp (enterprise archive resource) (EAR), như thể hiện trong cấu trúc liên kết ở Liệt kê 23. Tài nguyên này trình bày toàn bộ nội dung có thể triển khai, liên kết với thành phần mà bộ phận công bố có thể triển khai khi thành phần đó được cài đặt trên máy chủ.

Liệt kê 23. Liên kết một thành phần ứng dụng J2EE với một tệp EAR
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 
xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/" 
description="This is a sample topology describing the anatomy of 
the topology model" displayName="Sample Topology" 
name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit" 
name="sampleConfigurationUnit" 
configurationUnit="true"/>
<core:unit description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" 
conceptual="true" goalInstallState="not_installed" 
initInstallState="installed" 
publishIntent="do_not_publish"/>
<core:unit 
description="This is a stereotyped service component unit" 
displayName="ServiceComponentUnit" 
name="serviceComponentUnit">
<core:stereotype keyword="service" 
profile="serviceProfile"/>
</core:unit>
<j2ee:unit.j2eeServerUnit 
description="This is a J2eeServer unit " 
displayName="J2EE Server Unit " 
name="j2eeServerUnit" 
conceptual="true" 
goalInstallState="installed" 
initInstallState="installed">
<j2ee:capability.j2eeServer 
description="This is a J2EE server capability" 
displayName="J2EE Server Capability" 
name="j2eeServer" 
linkType="any"/>
<j2ee:capability.j2eeContainer 
description="This is a J2EE container capability" 
displayName="J2EE Container Capability" 
name="j2eeContainer" 
linkType="hosting" 
containerVersion="1.4"/>
<j2ee:capability.servletContainer 
description="This is a J2EE servlet container capability" 
displayName="J2EE Servlet Container Capability" 
name="j2eeServletContainer" 
linkType="hosting" 
containerVersion="2.3"/>
</j2ee:unit.j2eeServerUnit>
<j2ee:component.ear 
description="This is an EAR Component " 
displayName="EAR Component " 
name="earComponent" 
configurationUnit="false" 
goalInstallState="installed" 
initInstallState="not_installed">


<core:artifact.file 

displayName="EAR Component1 EAR " 

name="a1">

<core:fileURI>j2eeEarComponent1.ear</core:fileURI>

</core:artifact.file>


<core:requirement 
description="This is a datasource dependency requirement" 
displayName="Datasource Dependency Requirement" 
name="r0" dmoType="j2ee:J2EEDatasource" 
linkType="dependency" use="optional"/>
<core:requirement 
description="This is a J2EE container hosting requirement" 
displayName="J2EE Container Hosting Requirement" 
name="r1" dmoType="j2ee:J2EEContainer" 
linkType="hosting"/>
<core:requirement 
description="This is a EJB component member requirement showing that 
member of type EjbComponent unit are allowed " 
displayName="EJB Component Member Requirement" 
name="r2" dmoType="j2ee:EjbModule" 
linkType="member"/>
</j2ee:component.ear>
</core:topology>

Các liên kết quan hệ

Diễn đạt một hệ thống công nghệ thông tin điển hình đòi hỏi các mối quan hệ được thể hiện giữa các bộ phận khác nhau của một hệ thống. Các mối quan hệ này áp đặt một số ngữ nghĩa trên hệ thống, hỗ trợ thêm khi xác thực hoặc hiểu biết hệ thống. Mô hình cấu trúc liên kết cung cấp phương tiện phân loại tiếp các mối quan hệ, dựa trên ngữ nghĩa điều khiển các mối quan hệ này. Nó đặt tên các mối quan hệ này khi có một yêu cầu kế thừa bị áp đặt theo ngữ nghĩa của chúng. Có một số kiểu quan hệ khác nhau mà có thể được thể hiện trên các đơn vị chứa trong một cấu trúc liên kết, và các quan hệ này được trình bày như là các kiểu liên kết. Tập ban đầu của các kiểu liên kết như vậy bao gồm Liên kết Dependency, HostingMember. Mỗi liên kết này giữ nguồn và mục tiêu của liên kết đang tham gia vào quan hệ đó.

Liên kết phụ thuộc

Một kiểu DependencyLink (Liên kết phụ thuộc) được dùng để liên kết một yêu cầu với một kiểu liên kết dependency (hoặc any) cho một khả năng, mà cho thấy yêu cầu đó được thực hiện bởi khả năng mục tiêu. Nó cũng cung cấp phương tiện để áp đặt sự tuân thủ của yêu cầu nguồn so với khả năng mục tiêu. Kiểu DependencyLink có trong không gian tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Yêu cầu được xác định trên cá thể của đơn vị là thùng chứa đối với liên kết phụ thuộc. Một cá thể DependencyLink mà được xác định trong mô hình cấu trúc liên kết được xác định duy nhất bởi tên của nó trong phạm vi của một yêu cầu, như trong Liệt kê 24.

Liệt kê 24. Liên kết phụ thuộc (Dependency Link)
<core:requirement 
name="r1">


<core:link.dependency 

name="link1" 

source="/Unit1/r1" 

target="/Unit2/c1"/>


</core:requirement>

Sử dụng lĩnh vực liên kết phụ thuộc

Thí dụ một thể hiện của thành phần ứng dụng J2EE được xác định trong lĩnh vực J2EE có thể có một yêu cầu phụ thuộc vào khả năng J2eeDatasource, được cung cấp bởi J2eeDatasourceUnit (Đơn vị Nguồn dữ liệu J2ee) trong cấu trúc liên kết. Một liên kết phụ thuộc do đó có thể được tạo ra giữa thành phần và đơn vị nguồn dữ liệu, cho phép giữ yêu cầu nguồn và khả năng mục tiêu, như trong Liệt kê 25.

Liệt kê 25. Tạo một liên kết phụ thuộc
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 
xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/" 
description="This is a sample topology describing the anatomy of 
the topology model" displayName="Sample Topology" 
name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit" 
name="sampleConfigurationUnit" configurationUnit="true"/>
<core:unit description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" name="sampleConceptualUnit" 
conceptual="true" goalInstallState="not_installed" 
initInstallState="installed" publishIntent="do_not_publish"/>
<core:unit description="This is a stereotyped service component unit" 
displayName="ServiceComponentUnit" name="serviceComponentUnit">
<core:stereotype keyword="service" profile="serviceProfile"/>
</core:unit>
<j2ee:unit.j2eeServerUnit description="This is a J2eeServer unit " 
displayName="J2EE Server Unit " 

name="j2eeServerUnit" 

conceptual="true" goalInstallState="installed" 
initInstallState="installed">
<j2ee:capability.j2eeServer 
description="This is a J2EE server capability" 
displayName="J2EE Server Capability" name="j2eeServer" 
linkType="any"/>
<j2ee:capability.j2eeContainer 
description="This is a J2EE container capability" 
displayName="J2EE Container Capability" name="j2eeContainer" 
linkType="hosting" containerVersion="1.4"/>
<j2ee:capability.servletContainer 
description="This is a J2EE servlet container capability" 
displayName="J2EE Servlet Container Capability" 
name="j2eeServletContainer" linkType="hosting" 
containerVersion="2.3"/>
<j2ee:capability.j2eeDatasource 
description="This is a J2EE datasource dependency capability" 
displayName="J2eeDatasourceCapability" 

name="j2eeDatasourceCapability" 

linkType="dependency" 
jndiName="jndi/datasource1"/>
</j2ee:unit.j2eeServerUnit>
<j2ee:component.ear description="This is an EAR Component " 
displayName="EAR Component " 

name="earComponent" 

configurationUnit="false" goalInstallState="installed" 
initInstallState="not_installed">
<core:artifact.file displayName="EAR Component1 EAR " 
name="a1">
<core:fileURI>j2eeEarComponent1.ear</core:fileURI>
</core:artifact.file>
<core:requirement 
description="This is a datasource dependency requirement" 
displayName="Datasource Dependency Requirement" 

name="r0" 

dmoType="j2ee:J2EEDatasource" linkType="dependency" 
use="optional">

<core:link.dependency 

name="r0Toj2eeDatasourceCapability" 

source="/earComponent/r0" 

target="/j2eeServerUnit/j2eeDatasourceCapability"/>

</core:requirement>
<core:requirement 
description="This is a J2EE container hosting requirement" 
displayName="J2EE Container Hosting Requirement" name="r1" 
dmoType="j2ee:J2EEContainer" linkType="hosting"/>
<core:requirement 
description="This is a EJB component member requirement showing that member of 
type EjbComponent unit are allowed " 
displayName="EJB Component Member Requirement" 
name="r2" dmoType="j2ee:EjbModule" linkType="member"/>
</j2ee:component.ear>
</core:topology>

Liên kết hosting

Kiểu HostingLink (Liên kết hosting) chỉ ra rằng một đơn vị là chủ cung cấp máy và dịch vụ, dựa trên sự đáp ứng của các yêu cầu hosting với các khả năng hosting về đơn vị chủ mục tiêu. Về cơ bản nó giữ mối quan hệ giữa một đơn vị chủ nguồn, với một khả năng hosting, và đơn vị chủ đích, là chủ với một kiểu hosting requirement được xác định trên nó. Kiểu HostingLink khả năng có trong không gian tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Cá thể đơn vị (chủ) mà làm chủ đơn vị được cung cấp (hostee) khác là thùng chứa của liên kết hosting. Một cá thể HostingLink được xác định trong mô hình cấu trúc liên kết được xác định duy nhất theo tên trong phạm vi một đơn vị, như trong Liệt kê 26.

Liệt kê 26. Chú thích (caption)
<core:unit 
displayName="HostUnit" 
name="hostUnit">  


<core:link.hosting 

name="link1" 

source="/hostUnit" 

target="/hosteeUnit"/>


</core:unit>

Sử dụng Lĩnh vực Liên kết Hosting

Ví dụ một cấu trúc liên kết có thể được định nghĩa để nó chứa:

  • Một cá thể của một đơn vị J2eeServer cung cấp J2eeContainer và khả năng ServletContainer.
  • Một cá thể của một đơn vị HttpServer cung cấp khả năng ServletContainer.

Một cá thể của một J2EE thành phần ứng dụng J2EE được xác định trong lĩnh vực J2EE cũng có thể được xác định trong cấu trúc liên kết, chẳng hạn như nó chứa

  • Yêu cầu hosting trên một kiểu khả năng J2eeContainer, được cung cấp bởi J2eeServerUnit trong cấu trúc liên kết.
  • Yêu cầu hosting trên một kiểu khả năng ServletContainer, được cung cấp bởi J2eeServerUnit trong cấu trúc liên kết.

Trong trường hợp trên, một liên kết hosting như vậy có thể được tạo ra giữa thành phần ứng dụng J2EE (hostee) và đơn vị J2eeServer (host). Tuy nhiên, một liên kết hosting hợp lệ không thể được tạo giữa thành phần ứng dụng J2EE và đơn vị HttpServer, vì tất cả các yêu cầu hosting không thể đáp ứng được bởi các khả năng được xác định trên đơn vị HttpServer trong cấu trúc liên kết, như trong Liệt kê 27.

Liệt kê 27. Liên kết hosting hợp lệ
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/"
 
xmlns:http="http://www.ibm.com/ccl/soa/deploy/http/1.0.0/"

xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/" 
description="This is a sample topology describing the anatomy of the 
topology model" 
displayName="Sample Topology" name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit" 
name="sampleConfigurationUnit" 
configurationUnit="true"/>
<core:unit description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" conceptual="true" 
goalInstallState="not_installed" 
initInstallState="installed" publishIntent="do_not_publish"/>
<core:unit 
description="This is a stereotyped service component unit" 
displayName="ServiceComponentUnit" name="serviceComponentUnit">
<core:stereotype keyword="service" profile="serviceProfile"/>
</core:unit>
<j2ee:unit.j2eeServerUnit 
description="This is a J2eeServer unit " 
displayName="J2EE Server Unit " 

name="j2eeServerUnit" 

conceptual="true" goalInstallState="installed" 
initInstallState="installed">
<j2ee:capability.j2eeServer 
description="This is a J2EE server capability" 
displayName="J2EE Server Capability" 
name="j2eeServer" linkType="any"/>
<j2ee:capability.j2eeContainer 
description="This is a J2EE container capability" 
displayName="J2EE Container Capability" 

name="j2eeContainer" 

linkType="hosting" 
containerVersion="1.4"/>
<j2ee:capability.servletContainer 
description="This is a J2EE servlet container capability" 
displayName="J2EE Servlet Container Capability" 

name="j2eeServletContainer" 

linkType="hosting" 
containerVersion="2.3"/>
<j2ee:capability.j2eeDatasource 
description="This is a J2EE datasource dependency capability" 
displayName="J2eeDatasourceCapability" 
name="j2eeDatasourceCapability" linkType="dependency" 
jndiName="jndi/datasource1"/>


<core:link.hosting 

name="j2eeServerUnitHostsearComponent" 

source="/j2eeServerUnit" 

target="/earComponent"/>


</j2ee:unit.j2eeServerUnit>
<j2ee:component.ear description="This is an EAR Component " 
displayName="EAR Component " 

name="earComponent" 

configurationUnit="false" goalInstallState="installed" 
initInstallState="not_installed">
<core:artifact.file displayName="EAR Component1 EAR " 
name="a1">
<core:fileURI>j2eeEarComponent1.ear</core:fileURI>
</core:artifact.file>
<core:requirement 
description="This is a datasource dependency requirement" 
displayName="Datasource Dependency Requirement" 
name="r0" 
dmoType="j2ee:J2EEDatasource" linkType="dependency" 
use="optional">
<core:link.dependency name="r0Toj2eeDatasourceCapability" 
source="/earComponent/r0" target="/j2eeServerUnit/j2eeDatasourceCapability"/>
</core:requirement>
<core:requirement 
description="This is a J2EE container hosting requirement" 
displayName="J2EE Container Hosting Requirement" name="r1" 

dmoType="j2ee:J2EEContainer" 

linkType="hosting"/>

<core:requirement 
description="This is a EJB component member requirement showing that member of 
type EjbComponent unit are allowed " 
displayName="EJB Component Member Requirement" 
name="r2" dmoType="j2ee:EjbModule" 
linkType="member"/>
</j2ee:component.ear>


<http:unit.httpServerUnit 

displayName="Http Server" 

name="httpServerUnit" 

conceptual="false">

<http:capability.httpServer 

displayName="Http Server Capability " 

name="Http Server Capability" 

linkType="any"/>

<j2ee:capability.servletContainer 
 
displayName="Servlet Container Capability" 

name="servletContainer" 

linkType="any" 

containerVersion="2.3"/>

</http:unit.httpServerUnit>


</core:topology>

Liên kết bộ phận

Một kiểu MemberLink thể hiện mối quan hệ bao hàm, định nghĩa sự liên kết giữa hai đơn vị, nơi mà mục tiêu của liên kết là bộ phận và nguồn là thùng chứa. Về cơ bản nó giữ quan hệ giữa một đơn vị thùng chứa nguồn (mà có một kiểu bộ phận requirement đối với một kiểu đối tượng riêng) và đơn vị bộ phận mục tiêu của kiểu đối tượng đó. Kiểu MemberLink có trong không gian tên http://www.ibm.com/ccl/soa/deploy/core/1.0.0/ đã định nghĩa trong lược đồ cấu trúc liên kết. Cá thể MemberLink đơn vị giữ yêu cầu về bộ phận cho các đơn vị bộ phận khác là thùng chứa của bộ phận liên kết. Một cá thể MemberLink được xác định trong mô hình cấu trúc liên kết được xác định duy nhất theo tên trong phạm vi một đơn vị, như trong Liệt kê 28.

Liệt kê 28. Cá thể MemberLink
<core:unit 
displayName="ContainerUnit" 
name="containerUnit">
<core:requirement 
displayName="Membership Requirement " 
name="membershipRequirement" 
dmoType="core:Unit" 
linkType="member"/>

<core:link.member 

name="link1" 

source="/ContainerUnit" 

target="/MemberUnit1"/>

</core:unit>

Sử dụng lĩnh vực Liên kết Bộ phận

Chẳng hạn như, một thành phần mô-đun Enterprise JavaBean liên kết với liên kết bộ phận đối với thành phần ứng dụng J2EE, để mô tả mô-đun đó như một bộ phận của ứng dụng, như trong Liệt kê 29.

Một mô hình cấu trúc liên kết có thể được định nghĩa như cái nó mang:

  • Thành phần ứng dụng J2EE, định nghĩa yêu cầu bộ phận trên một kiểu thành phần mô-đun EJB.
  • Thành phần EJB.

Trong trường hợp trước, một liên kết bộ phận có thể được tạo ra, để nguồn liên kết là thành phần ứng dụng J2EE, và đích liên kết là một thành phần EJB.

Liệt kê 29. Thành phần EJB liên kết với thành phần J2EE
<?xml version="1.0" encoding="UTF-8"?>
<core:topology 
xmlns:core="http://www.ibm.com/ccl/soa/deploy/core/1.0.0/" 
xmlns:http="http://www.ibm.com/ccl/soa/deploy/http/1.0.0/" 
xmlns:j2ee="http://www.ibm.com/ccl/soa/deploy/j2ee/1.0.0/" 
description="This is a sample topology describing the anatomy of 
the topology model" displayName="Sample Topology" 
name="SampleTopology" 
decoratorSemantic="com.ibm.ccl.soa.deploy.analysis.ads" 
namespace="developerworks.deploy">
<core:unit description="This is a sample unit" 
displayName="SampleUnit" name="sampleUnit"/>
<core:unit 
description="This is a sample configuration unit" 
displayName="SampleConfigurationUnit" 
name="sampleConfigurationUnit" 
configurationUnit="true"/>
<core:unit 
description="This is a sample conceptual unit" 
displayName="SampleConceptualUnit" 
name="sampleConceptualUnit" 
conceptual="true" 
goalInstallState="not_installed" 
initInstallState="installed" 
publishIntent="do_not_publish"/>
<core:unit 
description="This is a stereotyped service component unit" 
displayName="ServiceComponentUnit" 
name="serviceComponentUnit">
<core:stereotype keyword="service" 
profile="serviceProfile"/>
</core:unit>
<j2ee:unit.j2eeServerUnit 
description="This is a J2eeServer unit " 
displayName="J2EE Server Unit " 
name="j2eeServerUnit" conceptual="true" 
goalInstallState="installed" 
initInstallState="installed">
<j2ee:capability.j2eeServer 
description="This is a J2EE server capability" 
displayName="J2EE Server Capability" 
name="j2eeServer" linkType="any"/>
<j2ee:capability.j2eeContainer 
description="This is a J2EE container capability" 
displayName="J2EE Container Capability" 
name="j2eeContainer" 
linkType="hosting" containerVersion="1.4"/>
<j2ee:capability.servletContainer 
description="This is a J2EE servlet container capability" 
displayName="J2EE Servlet Container Capability" 
name="j2eeServletContainer" linkType="hosting" 
containerVersion="2.3"/>
<j2ee:capability.j2eeDatasource 
description="This is a J2EE datasource dependency capability" 
displayName="J2eeDatasourceCapability" 
name="j2eeDatasourceCapability" 
linkType="dependency" jndiName="jndi/datasource1"/>
<core:link.hosting name="j2eeServerUnitHostsearComponent" 
source="/j2eeServerUnit" 
target="/earComponent"/>
</j2ee:unit.j2eeServerUnit>
<j2ee:component.ear 
description="This is an EAR Component " 
displayName="EAR Component " 

name="earComponent" 

configurationUnit="false" 
goalInstallState="installed" 
initInstallState="not_installed">
<core:artifact.file 
displayName="EAR Component1 EAR " name="a1">
<core:fileURI>j2eeEarComponent1.ear</core:fileURI>
</core:artifact.file>
<core:requirement 
description="This is a datasource dependency requirement" 
displayName="Datasource Dependency Requirement" 
name="r0" dmoType="j2ee:J2EEDatasource" 
linkType="dependency" use="optional">
<core:link.dependency name="r0Toj2eeDatasourceCapability" 
source="/earComponent/r0" 
target="/j2eeServerUnit/j2eeDatasourceCapability"/>
</core:requirement>
<core:requirement 
description="This is a J2EE container hosting requirement" 
displayName="J2EE Container Hosting Requirement" 
name="r1" 
dmoType="j2ee:J2EEContainer" 
linkType="hosting"/>
<core:requirement description="This is a EJB component member 
requirement showing that member of type EjbComponent unit are allowed " 
displayName="EJB Component Member Requirement" name="r2" 
dmoType="j2ee:EjbModule" linkType="member"/>


<core:link.member 

name="earComponentContainsejbComponent" 

source="/earComponent" 

target="/ejbComponent"/>


</j2ee:component.ear>
<http:unit.httpServerUnit displayName="Http Server" 
name="httpServerUnit" conceptual="false">
<http:capability.httpServer displayName="Http Server Capability " 
name="Http Server Capability" linkType="any"/>
<j2ee:capability.servletContainer 
displayName="Servlet Container Capability" 
name="servletContainer" linkType="any" 
containerVersion="2.3"/>
</http:unit.httpServerUnit>


<j2ee:component.ejb 

displayName="EJB Component" 

name="ejbComponent" 

conceptual="false" 

initInstallState="not_installed" 

publishIntent="

publish">

<j2ee:capability.ejbModule 

displayName="EJB Component" 

name="ejbComponentCapability" 

linkType="dependency" 

id="EJBComponent" 

version="1.0"/>

</j2ee:component.ejb>


</core:topology>

Những điều bạn đã tìm hiểu được

Trong phần này của loạt bài, bạn đã tìm hiểu về khái niệm cơ sở của mô hình cấu trúc liên kết dùng cho kiến trúc triển khai trong bộ Rational Software Architect V7.5. Bạn đã xây dựng một sample cấu trúc liên kết mẫu cho phép minh họa các khía cạnh khác nhau của một mô hình cấu trúc liên kết, gồm cấu trúc liên kết, đơn vị, yêu cầu, khả năng, và một số mối quan hệ mà có thể thể hiện giữa chúng. Bạn cũng đã phân tích được các quyết định thiết kế mà bạn sẽ xem xét khi diễn đạt các kiểu và các mối quan hệ của lĩnh vực của chúng trong một mô hình cấu trúc liên kết. Hãy đợi phần tiếp theo của loạt bài này, nó tập trung vào một số khái niệm tiên tiến của kiểu cấu trúc liên kết:

  • Trừu tượng của cấu trúc liên kết, việc đóng gói và tái sử dụng.
  • Mối quan hệ liên kết thực hiện.
  • Ngữ nghĩa ràng buộc và cách sử dụng.
  • Ngữ nghĩa Các Liên kết Ràng buộc Chuyên môn hoá (ví dụ hosting bị trì hoãn, truyền thông, khả năng hosting, sự sắp xếp, phản sắp xếp (anticollocation) và cách sử dụng.
  • Bổ sung thuộc tính tuỳ biến.
  • Sử dụng các biến trong cấu trúc liên kết.

Tải về

Mô tảTênKích thước
Sample Topology Project used in this articleSampleTopology.zip3KB

Tài nguyên

Học tập

  • Hiểu biết hơn nữa về cách mà chức năng mới của thành phần Bộ tạo mẫu UML (UML Modeler) phổ biến với cả bộ phần mềm IBM Rational Software Architect Bản Tiêu chuẩn 7.5 và IBM Rational Software Architect dùng cho WebSphere Software Bản 7.5 bằng cách đọc bài “Sử dụng các đặc tính mới của Bộ tạo mẫu UML trong bộ phần mềm IBM Rational Software Architect Bản 7.5” (Using the new features of UML Modeler in IBM Rational Software Architect Version 7.5).
  • Hiểu biết hơn nữa về chức năng mới của Rational Software Architect dùng cho WebSphere Software phiên bản 7.5 bằng cách đọc bài “Tổng quan về Rational Software Architect dùng cho WebSphere Software phiên bản 7.5” (Overview of Rational Software Architect for WebSphere Software Version 7.5).
  • Thăm Rational software area trên developerWorks để có các tài nguyên kỹ thuật và các thực hành tốt nhất về các sản phẩm của nền tảng Rational Software Delivery Platform.
  • Đăng ký vào tin tức IBM developerWorks, cập nhật hàng tuần về những cái tốt nhất của các hướng dẫn, bài viết, tải về của developerWorks, các hoạt động cộng đồng, các buổi phát thanh trên mạng và các sự kiện.
  • Đăng ký vào bản tin developerWorks Rational. Theo kịp với nội dung developerWorks Rational. Cứ hai tuần, bạn sẽ nhận được các cập nhật về các tài nguyên kỹ thuật mới nhất và thực hành tốt nhất đối với bộ Rational Software Delivery Platform.
  • Đăng ký vào bản tin Rational Edge để có các bài về các khái niệm đằng sau việc phát triển phần mềm hiệu quả.
  • Duyệt nhà sách công nghệ để có các sách về chủ đề này và các chủ đề kỹ thuật khác.

Lấy sản phẩm và công nghệ

Thảo luậ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=Rational
ArticleID=444900
ArticleTitle=Mô hình hoá triển khai trong Rational Software Architect phiên bản 7.5: Phần 1: Giải phẫu một mô hình cấu trúc liên kết
publish-date=11062009