InfoSphere Data Architect của IBM (IDA) là một môi trường phát triển toàn diện để mô hình hóa
và tích hợp dữ liệu. IDA cho phép người dùng khám phá, mô hình hóa, hiển thị trực quan và liên
kết các tài sản dữ liệu đa dạng và phân tán. IDA là một quy trình quản lý dữ liệu theo đề xuất của
IBM và được tích hợp chặt chẽ với các sản phẩm Optim®, Rational và InfoSphere được xây
dựng bằng Eclipse. IDA hỗ trợ mô hình hóa dữ liệu logic, vật lý, bảng chú giải, lưu trữ, tên miền
và tích hợp. Khi càng có nhiều khách hàng doanh nghiệp sử dụng IDA, thì càng có thêm nhu cầu
muốn mở rộng IDA để đáp ứng các yêu cầu mô hình hóa và tích hợp dữ liệu duy nhất của họ.
15 trang |
Chia sẻ: lylyngoc | Lượt xem: 1457 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Mở rộng InfoSphere Data Architect của IBM để đáp ứng các yêu cầu mô hình hóa và tích hợp dữ liệu cụ thể của bạn, Phần 1: Sửa đổi các mô hình của IDA và tùy chỉnh các đặc tính, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Mở rộng InfoSphere Data Architect của IBM để đáp ứng các
yêu cầu mô hình hóa và tích hợp dữ liệu cụ thể của bạn,
Phần 1: Sửa đổi các mô hình của IDA và tùy chỉnh các đặc
tính
InfoSphere Data Architect của IBM (IDA) là một môi trường phát triển toàn diện để mô hình hóa
và tích hợp dữ liệu. IDA cho phép người dùng khám phá, mô hình hóa, hiển thị trực quan và liên
kết các tài sản dữ liệu đa dạng và phân tán. IDA là một quy trình quản lý dữ liệu theo đề xuất của
IBM và được tích hợp chặt chẽ với các sản phẩm Optim®, Rational và InfoSphere được xây
dựng bằng Eclipse. IDA hỗ trợ mô hình hóa dữ liệu logic, vật lý, bảng chú giải, lưu trữ, tên miền
và tích hợp. Khi càng có nhiều khách hàng doanh nghiệp sử dụng IDA, thì càng có thêm nhu cầu
muốn mở rộng IDA để đáp ứng các yêu cầu mô hình hóa và tích hợp dữ liệu duy nhất của họ.
Như đã đề cập trước đó, IDA dựa trên Eclipse và do đó có thể mở rộng rất nhiều bằng thiết kế
của nó. Trong loạt bài này, hãy tìm hiểu thêm về các điểm mở rộng, các API và các nhà máy sẵn
có với IDA mà bạn có thể sử dụng để mở rộng IDA. Xem cách mở rộng IDA để:
Duyệt qua và sửa đổi các mô hình IDA bằng lập trình (Phần 1).
Thêm các đặc tính mới và hiển thị chúng trong khung nhìn Properties (Phần 1).
Tạo các báo cáo mô hình tùy chỉnh (Phần 2)
Thêm các quy tắc xác nhận hợp lệ mô hình (Phần 2)
Bài này giả định bạn có kinh nghiệm phát triển trình cắm thêm Eclipse và có kiến thức cơ bản về
các dự án EMF và BIRT trên Eclipse. Mã mẫu được cung cấp trong bài này được thử nghiệm
trên phiên bản 7.5.1 và 7.5.2 của IDA và trên phiên bản 3.4.1 và 3.4.2 của Eclipse.
Duyệt qua và sửa đổi mô hình dữ liệu logic và mô hình dữ liệu vật lý của IDA bằng lập trình
Thay đổi tên sản phẩm
Ngày 16 tháng 12 năm 2008, IBM đã công bố rằng Phiên bản 7.5.1, Rational Data Architect
(Kiến trúc sư dữ liệu Rational) được đổi tên thành InfoSphere Data Architect nhằm đề cao vai trò
của nó trong các công cụ của Nền tảng InfoSphere (InfoSphere Foundation).
Nếu bạn cần mở rộng IDA, có khả năng là bạn sẽ cần hiểu cấu trúc mô hình của nó để duyệt qua
và sửa đổi các đối tượng mô hình của nó. Phần này cho bạn thấy cách làm điều này bằng cách sử
dụng một mô hình vật lý và các đối tượng của nó. Một cách tiếp cận tương tự cũng có thể được
sử dụng cho các mô hình logic.
Mô hình SQL như là các siêu mô hình của các mô hình IDA
Mô hình SQL, là một phần của Dự án cơ sở mô hình của Eclipse (Eclipse Model Base Project),
cung cấp nền tảng cho Dự án các công cụ dữ liệu (DTP - Data Tools Platform). Được xây dựng
trên Khung mô hình hóa của Eclipse (EMF - Eclipse Modeling Framework), mô hình SQL sử
dụng các hướng dẫn thực hành công nghiệp phần mềm tốt nhất ví dụ như phát triển theo hướng
mô hình với UML, tuân thủ các tiêu chuẩn mới nhất của SQL và hỗ trợ tiêu chuẩn JDBC và các
tiêu chuẩn kết nối khác. (Xem phần Tài nguyên để biết thêm thông tin về DTP và EMF). IDA sử
dụng và mở rộng mô hình SQL như là siêu mô hình cho các mô hình dữ liệu vật lý của nó.
Duyệt qua một mô hình bằng lập trình
Bắt đầu bằng cách tạo một mô hình dữ liệu vật lý với một cơ sở dữ liệu SAMPLE, tạo một lược
đồ SAMP và tạo một số bảng và cột. Sau đó, hãy tìm hiểu cách viết mã Java™ để duyệt qua cơ
sở dữ liệu SAMPLE và liệt kê tất cả các đối tượng lược đồ, bảng và cột của nó.
Làm theo các bước sau để tạo một mô hình dữ liệu SAMPLE:
1. Khởi động IDA và mở Data Perspective (Phối cảnh dữ liệu) nếu nó vẫn chưa mở.
2. Tạo một dự án thiết kế dữ liệu bằng cách sử dụng File > New > Data Design Project
(Dự án thiết kế dữ liệu) và gõ vào tên Dự án là Data Design (Thiết kế dữ liệu).
3. Nhấn chuột phải vào Derby Sample Connection (Kết nối mẫu Derby) trong Data Source
Explorer (Trình thám hiểm Nguồn dữ liệu) và chọn Connect (Kết nối).
4. Gõ vào bất kỳ tên người dùng nào và nhấn OK trong hộp thoại kết nối.
5. Mở rộng Derby Sample Connection và lược đồ SAMP.
6. Chọn nhiều bảng trong lược đồ SAMP như trong Hình 1.
7. Kéo các bảng từ Data Source Explorer và thả chúng vào trong dự án Data Design.
Bạn sẽ thấy mô hình vật lý SAMPLE được tạo ra trong Data Project Explorer.
Hình 1. Mô hình vật lý SAMPLE
Bây giờ bạn đã tạo ra mô hình vật lý SAMPLE. Vì Mô hình SQL của DTP là cơ sở của các siêu
mô hình của IDA, nên điều quan trọng là xem xét mô hình SQL để hiểu được cấu trúc của các
mô hình vật lý IDA. Hình 2 cho thấy cấu trúc của mô hình SQL ở mức lược đồ.
Hình 2. Sơ đồ của lược đồ mô hình SQL
Từ hình này, bạn có thể thấy rằng các cơ sở dữ liệu và các lược đồ có nguồn gốc từ đối tượng
SQL và do đó chúng đều có các đặc tính, ví dụ như tên, mô tả và nhãn. Trên thực tế hầu như tất
cả các đối tượng được mô tả trong mô hình SQL đều được bắt nguồn từ đối tượng SQL và chúng
tự động có các đặc tính tên, mô tả và nhãn. Một đối tượng cơ sở dữ liệu có đặc tính riêng của
mình, ví dụ như nhà cung cấp và phiên bản, là các chuỗi ký tự. Một đối tượng cơ sở dữ liệu có
thể có từ không đến nhiều (0 .. n) lược đồ và một lược đồ có thể có không đến nhiều (0 .. n)
bảng, nhiều chỉ mục, nhiều kiểu người dùng được định nghĩa, nhiều thường trình và v.v.. Bạn có
thể lấy tất cả các bảng và các chỉ mục cho một lược đồ bằng cách gọi schema.getTables(),
schema.getIndices() và getUserDefinedTypes(), tương ứng. Mã mẫu để đọc từ một lược đồ và
lấy các bảng của nó được hiển thị trong Liệt kê 1.
Liệt kê 1. Mã mẫu để duyệt qua một cơ sở dữ liệu và lược đồ và để lấy các đặc tính của
chúng
private void TraverseDatabase(Database db) {
System.out.println("Database: " +
db.getName());
System.out.println("-- Vendor: " +
db.getVendor());
System.out.println("-- Version: "+
db.getVersion());
// get schemas
Iterator schemaItor =
db.getSchemas().iterator();
while(schemaItor.hasNext()) {
Schema aSchema =
(Schema)schemaItor.next();
TraverseSchema(aSchema);
}
}
private void TraverseSchema(Schema schema) {
System.out.println("Schema: " +
schema.getName());
// get tables
Iterator tablesItor =
schema.getTables().iterator();
while(tablesItor.hasNext()) {
Table aTable =
(Table)tablesItor.next();
TraverseTable(aTable);
}
}
Hình 3 trình bày các đối tượng của bảng SQL Model (Mô hình SQL), ở đây Table (Bảng) là một
lớp trừu tượng và có thể có một bảng với nhiều cột. Một khung nhìn là một DerivedTable có các
đặc tính bổ sung, ví dụ như biểu thức truy vấn và kiểu kiểm tra. Một bảng bền vững hoặc bảng
tạm thời có nguồn gốc từ BaseTable.
Hình 3. Sơ đồ bảng của mô hình SQL
Cấu trúc cột của SQL Model được thể hiện trong Hình 4. Một cột có nguồn gốc từ
TypedElement và nó có các đặc tính, ví dụ như nullable và defaultValue. Theo tùy chọn một cột
có thể có một identitySpecifier hoặc generateExpression, nhưng không có cả hai.
Hình 4. Sơ đồ cột của mô hình SQL
Liệt kê 2 hiển thị mã mẫu để lấy các cột từ một bảng và đọc các đặc tính của chúng.
Liệt kê 2. Mã mẫu để lấy các cột từ một bảng và đọc các đặc tính của chúng
private void TraverseTable(Table table) {
System.out.println("Table: " +
table.getName());
// get columns
Iterator columnsItor =
table.getColumns().iterator();
while(columnsItor.hasNext()) {
Column aColumn =
(Column)columnsItor.next();
TraverseColumn(aColumn);
}
}
private void TraverseColumn(Column col) {
System.out.println(" Column: " +
col.getName());
// get column properties
DataType dataType = col.getDataType();
System.out.println(" -- Data type: "
+ dataType.getName());
boolean isNullable = col.isNullable();
System.out.println(" -- Is nullable:
" + Boolean.toString(isNullable));
String defaultValue =
col.getDefaultValue();
System.out.println(" -- Default
value: " + defaultValue);
}
Sửa đổi các đối tượng mô hình bằng lập trình
Bây giờ bạn biết cách duyệt qua mô hình, bạn có thể viết mã để sửa đổi mô hình. Ví dụ, để thêm
một cột SSN cho bảng EMPLOYEE, hãy thay phương thức TraverseTable() và gọi phương thức
AddSSNColumn(), như trong Liệt kê 3.
Liệt kê 3. Mã mẫu thêm một cột số SSN vào bảng
private void AddSSNColumn(Table table) {
// get database from table
Database db = table.getSchema().getDatabase();
// get the database specific model element factory
DatabaseDefinition dbDef =
DataToolsPlugin.getDefault()
.getDatabaseDefinitionRegistry().getDefinition(
db.getVendor(),
db.getVersion());
DataModelElementFactory factory =
dbDef.getDataModelElementFactory();
Column col = (Column)
factory.create(SQLTablesPackage.eINSTANCE
.getColumn());
col.setName("SSN");
CharacterStringDataType cType =
(CharacterStringDataType) dbDef
.getPredefinedDataType("CHARACTER");
cType.setLength(9);
col.setDataType(cType);
EStructuralFeature feature =
table.eClass().getEStructuralFeature(
SQLTablesPackage.TABLE__COLUMNS);
// using IDA CommandFactory to create a add command
ICommand cmd =
CommandFactory.INSTANCE.createAddCommand(
"Add SSN column", table, feature, col);
// execute the command using IDA command manager
DataToolsPlugin.getDefault().getCommandManager().execute(cmd);
}
Trong phương thức AddSSColumn, mã lấy định nghĩa cơ sở dữ liệu đã đăng ký bằng cách
chuyển các chuỗi ký tự nhà cung cấp và phiên bản cơ sở dữ liệu. Sau đó, mã này sử dụng định
nghĩa cơ sở dữ liệu đã đăng ký được tạo ra trong mã mẫu để lấy nhà máy của phần tử mô hình cơ
sở dữ liệu cụ thể. Cuối cùng, phương thức này tạo một cột bằng cách sử dụng nhà máy của phần
tử mô hình. Nó sử dụng CommandFactory của IDA để tạo ra một lệnh. Phương thức
createAddCommand thêm một đối tượng giá trị vào đối tượng chủ sở hữu bằng cách sử dụng
tính năng đã quy định. Tham khảo API của phương thức createAddCommand là:
public IDataToolsCommand createAddCommand(String label, EObject owner,
EStructuralFeature feature, Object value)
Lệnh trả về mở rộng lớp AbstractTransactionalCommand của EMF. Lớp này có thể được thực
hiện lại hoặc không thực hiện. Khi bạn thực hiện phương thức AddSSNColumn, một cột SSN
được thêm vào bảng EMPLOYEE, như trong Hình 5.
Hình 5. Một cột SSN được thêm vào bảng EMPLOYEE
Về đầu trang
Thêm các đặc tính của khách hàng và hiển thị chúng trong khung nhìn Properties
Khung nhìn Properties (Các đặc tính) là một trong nhiều khung nhìn mà bàn làm việc của
Eclipse cung cấp (xem phần Tài nguyên để biết thêm thông tin về khung nhìn Properties của
Eclipse). Khung nhìn Properties cho phép bạn hiển thị hoặc chỉnh sửa các đặc tính của một đối
tượng được chọn. Eclipse cung cấp các phần mở rộng để định nghĩa một giao diện người dùng
tùy chỉnh cho khung nhìn Properties. Khi sử dụng các phần mở rộng Eclipse, bạn có thể tạo ra
khung nhìn các đặc tính có gắn thẻ, như trong Hình 6.
Hình 6. Thẻ General trong khung nhìn Properties
IDA mở rộng khung nhìn Properties có gắn thẻ để hiển thị dữ liệu của các đối tượng mô hình.
Như trong Hình 6, khi bạn chọn một bảng EMPLOYEE trong mô hình dữ liệu vật lý SAMPLE
từ Data Source Explorer, bạn sẽ thấy các thẻ General (Chung), Columns (Các cột), Relationships
(Các mối quan hệ), Documentation (Tài liệu) và Annotation (Chú thích) được hiển thị. Trong
mỗi thẻ, bạn tìm thấy một hoặc nhiều phần. Ví dụ, trong thẻ General, hãy lưu ý các phần Name
(tên), Label (Nhãn) và Schema (Lược đồ), trong thẻ Columns, lưu ý các phần để liệt kê Name,
Primary Key (Khóa chính), Domain (Miền), Data Type (Kiểu dữ liệu) và các đặc tính khác. Hình
7 cho thấy các phần khác nhau này.
Hình 7. Thẻ Columns trong khung nhìn Properties
IDA cung cấp nhiều thẻ và nhiều phần đặc tính dựng sẵn trong các đối tượng vật lý, logic, bảng
chú giải và mô hình khác. Khi bạn chỉnh sửa các đặc tính này, các thay đổi vẫn được lưu giữ lâu
bền trong mô hình.
Tùy chỉnh các thẻ và các phần các đặc tính
Vì có nhiều loại khách hàng sử dụng IDA, nên điều phổ biến là các khách hàng có các yêu cầu
riêng của mình về các đặc tính gắn liền với một số kiểu các đối tượng nhất định. Ví dụ, một công
ty có thể yêu cầu Số An Sinh Xã Hội của nhân viên (SSN) được đánh dấu là riêng tư để tuân thủ
chính sách bí mật dữ liệu riêng tư. Công ty có thể yêu cầu tiền lương và tiền thưởng của nhân
viên được đánh dấu là dữ liệu nhạy cảm để có thể chỉ có một số nhân viên xem được. Bạn có thể
tạo ra các thẻ và các phần riêng của mình để thực hiện việc này dễ dàng. Trong các phần sau, hãy
tìm hiểu cách thêm một thẻ và các phần mới cho các đối tượng cột, như trong Hình 8.
Hình 8. Thẻ riêng tư có tùy chỉnh với dữ liệu riêng tư và các phần phương thức mặt nạ cho
các cột
Ba điểm mở rộng được sử dụng để đóng góp vào khung nhìn các đặc tính có gắn thẻ. Mỗi khung
nhìn các đặc tính có gắn thẻ gồm có một trình đóng góp đặc tính, để đóng góp một hoặc nhiều
thẻ đặc tính. Mỗi thẻ đặc tính gồm một hoặc nhiều phần. Một phần là một tiện ích giao diện
người dùng đồ họa (GUI) hoặc một hỗn hợp có chứa một nhóm các tiện ích ánh xạ tới một hoặc
nhiều đặc tính.
Trình cung cấp đặc tính
Điểm mở rộng org.eclipse.ui.views.properties.tabbed.PropertyContributor được dùng để định
nghĩa mã định danh (ID) duy nhất của Trình cung cấp cho các thẻ và các phần của bạn. Mã định
danh này thường phù hợp với ID duy nhất của phần bàn làm việc, góp phần vào khung nhìn các
đặc tính có gắn thẻ. Một phần bàn làm việc xác định một Trình cung cấp đặc tính riêng lẻ bằng
cách thực hiện các giao diện ITabbedPropertySheetPageContributor.
Như Liệt kê 4 cho thấy, điểm mở rộng này được sử dụng để định nghĩa
com.ibm.datatools.properties như là ID của Trình cung cấp của các thẻ và các phần đặc tính của
IDA, được chia sẻ bởi Data Project Explorer của IDA, Data Source Explorer và Diagrams (Các
sơ đồ). Ngoài ra còn có một trình ánh xạ (mapper) kiểu, một nhà cung cấp nhãn và các thể loại
đặc tính được định nghĩa với điểm mở rộng này. Người dùng IDA không cần làm bất cứ điều gì
với điểm mở rộng này nếu họ sử dụng Data Project Explorer, Data Source Explorer và Diagrams
của IDA.
Liệt kê 4. Trình cung cấp đặc tính IDA
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
<propertyContributor
contributorId="com.ibm.datatools.properties"
labelProvider="com.ibm.datatools.core.ui.properties.PropertyLabelProvider"
typeMapper="com.ibm.datatools.core.ui.properties.PropertyTypeMapper">
Các thẻ đặc tính
Điểm mở rộng org.eclipse.ui.views.properties.tabbed.PropertyTabs mô tả các thẻ cho một Trình
cung cấp. Mỗi thẻ thuộc về một Trình cung cấp như được xác định bằng mã định danh duy nhất
của Trình cung cấp của nó. Điểm mở rộng PropertyTabs có thể định nghĩa một hoặc nhiều thẻ
thông qua thuộc tính PropertyTab. Một thuộc tính PropertyTab định nghĩa các thuộc tính sau:
id— ID duy nhất cho thẻ đó.
label— Nhãn được hiển thị trên thẻ đó.
category— Thể loại từ điểm mở rộng PropertyContributor được dùng cho các thẻ nhóm.
afterTab— ID của thẻ mà thẻ này được đặt sau nó.
image— Ảnh tùy chọn để hiển thị trên thẻ đó.
indented— Giá trị logíc (Boon) để cho biết các thẻ có chỗ thụt lề không.
Mã plugin.xml trong Liệt kê 5 thêm một thẻ Privacy bằng cách sử dụng điểm mở rộng trong
Hình 8.
Liệt kê 5. Sử dụng điểm mở rộng PropertyTabs để thêm một thẻ Privacy
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
<propertyTabs
contributorId="com.ibm.datatools.properties">
<propertyTab
label="Privacy"
category="Extended"
id="com.ibm.custome.PrivacyPropertiesTab">
Các phần đặc tính
Điểm mở rộng org.eclipse.ui.views.properties.tabbed.PropertySections mô tả các phần dành cho
một Trình cung cấp. Mỗi phần thuộc về một cấu hình như được xác định bằng mã định danh duy
nhất của Trình cung cấp của nó. Điểm mở rộng PropertySections có thể định nghĩa một hoặc
nhiều phần thông qua thuộc tính PropertySection. Mỗi phần thuộc về một thẻ, khi được xác định
bằng mã định danh duy nhất của thẻ của nó.
Các thuộc tính có thể được định nghĩa bằng cách sử dụng điểm mở rộng này là:
id— ID duy nhất cho thẻ đó.
tab— ID của thẻ trong đó phần này được hiển thị.
class— ID của phần mà phần này được đặt sau nó.
afterSection— Lớp thực hiện một bộ lọc phần.
filter— Một giá trị chỉ thị số đếm lựa chọn phải được đáp ứng để chạy phần này.
enablesFor— Lớp hoặc giao diện được chọn sẽ cho phép hiển thị phần này trong thẻ.
type— Lớp hoặc giao diện được chọn sẽ cho phép hiển thị phần này trong thẻ.
Mã plugin.xml trong Liệt kê 6 thêm một phần đặc tính vào thẻ Privacy.
Liệt kê 6. Mã mẫu để thêm một phần đặc tính
<extension
point="org.eclipse.ui.views.properties.tabbed.propertySections">
<propertySection
tab="com.ibm.custome.PrivacyPropertiesTab"
class="com.ibm.datratools.extendProperties.column.SamplePropertySection"
id="com.ibm.custome.PrivacyPropertiesTab">
<input
type="org.eclipse.datatools.modelbase.sql.tables.Column"/>
Lớp thực hiện phần đặc tính
Theo định nghĩa trong Liệt kê 6, SamplePropertySection là lớp thực hiện phần đặc tính. Lớp này
sẽ mở rộng từ lớp org.eclipse.ui.views.properties.tabbed.AbstractPropertySection. Như trong
Liệt kê 7, các chức năng cơ bản của lớp thực hiện gồm:
Tạo tiện ích GUI để hiển thị các đặc tính riêng tư, bao gồm cả một hộp kiểm riêng tư và
một nút điều khiển văn bản mặt nạ (phương thức createControls).
Đọc giá trị đặc tính từ mô hình và hiển thị nó (các phương thức setInput và refresh).
Lưu giá trị đặc tính khi người dùng thay đổi (phương thức onCheckboxSelected và
onLeaveText).
Lưu giữ lâu bền các đặc tính trong mô hình như EAnnotations (phương thức
getMaskingProperty và setMaskingProperty).
Với mã mẫu thực hiện phần đặc tính, Liệt kê 7 cung cấp mẫu mã hoàn chỉnh trong một tệp phụ
(sidefile).