text:
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:
- Cấu trúc liên kết (Topology) là một kiểu mà là thùng chứa cấp cao nhất của mô hình cấu trúc liên kết.
- Đơn vị (Unit) là một kiểu mà thể hiện cho đơn vị triển khai.
- Khả năng (Capability) là một kiểu mà mô tả một khả năng trong môi trường mục tiêu.
- Yêu cầu (Requirement) là một kiểu mà mô tả nhu cầu trong môi trường mục tiêu.
- Tạo tác (Artifact) là một kiểu mô tả một tài nguyên có thể triển khai hoặc một đối tượng.
- Các liên kết quan hệ
- Liên kết phụ thuộc (Dependency Link) là một kiểu liên kết gắn nhu cầu chức năng với khả năng mà thoả mãn nó.
- Liên kết hosting (Hosting Link) là một kiểu liên kết gắn nhu cầu hosting với khả năng hosting thoả mãn nó.
- Liên kết bộ phận (Member Link) là một kiểu liên kết thể hiện việc gắn nhu cầu chứa đựng với khả năng chứa đựng đáp ứng.
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ở
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,
infrastructure và
deployment đã đượ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
dependency và
hosting. 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ư
serverNamev.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.4riêng.
- Khả năng hosting ServletContainer với một containerVersion
2.3riê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
linkType là
any (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,
hosting và
member. 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,
Hosting và
Member. 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ề
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ệ
- Tải về phiên bản thử nghiệm của phần mềm Rational của IBM.
- Tải về phần mềm IBM Rational Software Architect dùng cho WebSphere Software 7.5.
- Tải về Các phiên bản đánh giá sản phẩm khác của IBM và hãy bắt tay vào các công cụ phát triển ứng dụng và các sản phẩm phần giữa từ DB2®, Lotus®, Rational®, Tivoli®, và WebSphere®.
Thảo luận
- Xem qua các blog developerWorks và tham gia vào cộng đồng developerWorks.
- Gia nhập diễn đàn Rational Software Architect trên developerWorks.
Bình luận
-
Vùng dữ liệu trên developerWorks
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
-
Vùng mã nguồn mở trên developerWorks
Xem các bài viết về HTML, CSS, JavaScript,...
-
Điện toán đám mây
Tìm hiểu về điện toán đám mây

markdown:
## 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:
[Cấu trúc liên kết (Topology)](#Topology)là một kiểu mà là thùng chứa cấp cao nhất của mô hình cấu trúc liên kết. [Đơn vị (Unit)](#Unit)là một kiểu mà thể hiện cho đơn vị triển khai. [Khả năng (Capability)](#Capability)là một kiểu mà mô tả một khả năng trong môi trường mục tiêu. [Yêu cầu (Requirement)](#Requirement)là một kiểu mà mô tả nhu cầu trong môi trường mục tiêu. [Tạo tác (Artifact)](#Arifact)là một kiểu mô tả một tài nguyên có thể triển khai hoặc một đối tượng. [Các liên kết quan hệ](#Relationships) [Liên kết phụ thuộc (Dependency Link)](#DependencyRelationships)là một kiểu liên kết gắn nhu cầu chức năng với khả năng mà thoả mãn nó. [Liên kết hosting (Hosting Link)](#HostingRelationships)là một kiểu liên kết gắn nhu cầu hosting với khả năng hosting thoả mãn nó. [Liên kết bộ phận (Member Link)](#MemberRelationships)là một kiểu liên kết thể hiện việc gắn nhu cầu chứa đựng với khả năng chứa đựng đáp ứng.
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ở](figure1.gif)
## 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,
infrastructure và
deployment đã đượ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
dependency và
hosting. 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ư
serverNamev.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.4riêng.
- Khả năng hosting ServletContainer với một containerVersion
2.3riê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
linkType là
any (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,
hosting và
member. 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,
Hosting và
Member. 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](#download) 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ên||Kích thước|
|Sample Topology Project used in this article|
## 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](http://www.ibm.com/developerworks/rational/library/08/0926_diu/index.html?S_TACT=105AGY75)).
- 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](http://www.ibm.com/developerworks/rational/library/08/0926_arnold/index.html?S_TACT=105AGY75)).
- Thăm
[Rational software area trên developerWorks](http://www.ibm.com/developerworks/rational?S_TACT=105AGY75)để 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](https://www.ibm.com/developerworks/newsletter/?S_TACT=105AGY75), 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](https://www.ibm.com/developerworks/newsletter/?S_TACT=105AGY75). 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](http://www.ibm.com/developerworks/rational/rationaledge/?S_TACT=105AGY75)để 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ệ](http://www.ibm.com/developerworks/apps/SendTo?bookstore=safari&S_TACT=105AGY75)để 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ệ
- Tải về
[phiên bản thử nghiệm của phần mềm Rational của IBM](http://www.ibm.com/developerworks/downloads/?S_TACT=105AGY75).
- Tải về
[phần mềm IBM Rational Software Architect dùng cho WebSphere Software 7.5](http://www.ibm.com/developerworks/downloads/r/rswa/learn.html?S_TACT=105AGY75).
- Tải về
[Các phiên bản đánh giá sản phẩm khác của IBM](http://www.ibm.com/developerworks/downloads/?S_TACT=105AGY75)và hãy bắt tay vào các công cụ phát triển ứng dụng và các sản phẩm phần giữa từ DB2®, Lotus®, Rational®, Tivoli®, và WebSphere®.
### Thảo luận
- Xem qua
[các blog developerWorks](http://www.ibm.com/developerworks/blogs/?S_TACT=105AGY75)và tham gia vào [cộng đồng developerWorks](http://www.ibm.com/developerworks/community?S_TACT=105AGY75).
- Gia nhập
[diễn đàn Rational Software Architect](http://www.ibm.com/developerworks/forums/forum.jspa?forumID=430&S_TACT=105AGY75)trên developerWorks.
## Bình luận
[Vùng dữ liệu trên developerWorks](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp)
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
[Vùng mã nguồn mở trên developerWorks](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp)
Xem các bài viết về HTML, CSS, JavaScript,...
[Điện toán đám mây](http://www.ibm.com/developerworks/vn/views/cloud/libraryview.jsp)
Tìm hiểu về điện toán đám mây