Kelola ketergantungan proses dan layanan dalam lingkungan SOA
Latar Belakang Tahukah Anda pada layanan apa saja proses BPEL bergantung? Jika versi proses BPEL yang berbeda digunakan, ketergantungan antara keduanya dapat dengan cepat menjadi lebih kompleks. Kompleksitas manajemen ketergantungan meningkat jika kita memperhitungkan layanan Enterprise Service Bus (ESB) yang dipanggil oleh proses BPEL. Kompleksitas membuat penerapan dan pengujian memakan waktu, sulit, dan rawan kesalahan.
Seringkali kita akhirnya menggunakan alat pemodelan Microsoft Visio untuk membuat diagram dependensi secara manual dan berusaha memperbarui dependensi setelah setiap perubahan dalam proses. Hal ini merupakan hambatan besar terhadap ketangkasan infrastruktur arsitektur berorientasi layanan (SOA), yang dirancang untuk memungkinkan perubahan tangkas pada proses bisnis.
Dalam catatan teknis ini, Anda akan mempelajari cara meningkatkan proses pembangunan dengan sukses dan menerapkan pembuatan grafik ketergantungan proses secara otomatis.
Tantangan kami adalah mengimplementasikan proyek demonstrasi Oracle SOA Suite untuk pelanggan yang berisi banyak proses BPEL dan mereferensikan banyak sub-proses BPEL dan layanan ESB. Kami akhirnya menggunakan selusin proses BPEL dan layanan ESB (yang didefinisikan sebagai layanan publik dan dibagikan di registri layanan) serta proses kepemilikan BPEL dan layanan ESB lainnya.
Pertama, kami memutuskan untuk membuat penerapan berbasis Ant untuk semua layanan proyek, menerapkan proses BPEL (termasuk kasus pengujian yang menjalankannya) ke lingkungan yang berbeda (pengujian, integrasi, produksi), dan juga menerapkan layanan ESB ke lingkungan ini berbasis Semut. Download gratis e-book komputer
Persyaratan Setelah menyelesaikan rilis proyek pertama, kami memiliki beberapa persyaratan:
,
Ketika proses BPEL atau layanan ESB berubah, kami tidak ingin menerapkan semua layanan proyek. Oleh karena itu, kita perlu beralih dari penerapan yang berpusat pada proyek ke pendekatan yang berpusat pada layanan publik.
Saat menerapkan proses BPEL, semua subproses dependen (kepemilikan) dan layanan ESB juga diterapkan secara otomatis.
Untuk mencegah penimpaan versi proses tertentu, terapkan versi proses tersebut hanya jika versi tersebut belum diterapkan di server. Penimpaan akan menyebabkan semua informasi aliran instans hilang.
Grafik visual dari semua ketergantungan proses dan layanan harus dibuat secara otomatis selama penerapan tanpa perlu menyimpan informasi ini secara terpisah. Visualisasinya akan terlihat seperti ini.
Pertanyaan Terbuka Menanggapi persyaratan baru ini, kami mengajukan pertanyaan berikut dan memberikan jawaban berikut:
Pertanyaan: Di mana informasi dari dependensi proses dan layanan disimpan? Perlu menambahkan lebih banyak informasi untuk membuat grafik ketergantungan yang lengkap?
Jawaban: Semua layanan yang dipanggil oleh proses BPEL disimpan dalam file bpel.xml yang ditandai dengan partnerLinkBinding. Proses BPEL dan informasi versi juga dikodekan ke dalam URL. Misalnya: Download gratis e-book komputer
<nama properti="wsdlRuntimeLocation">
${domain_url}/CustomerAccount_BES/1.3/CustomerAccount_BES?wsdl
</properti>
Versi proses BPEL saat ini yang akan diterapkan dapat ditemukan di file build.properties. Untuk pemeliharaan versi proses BPEL, kita hanya perlu mengubah properti rev di file build.properties.
Untuk membedakan antara proses BPEL publik dan privat, tautan mitra klien dalam file bpel.xml menyediakan atribut baru "type" dengan nilai "public" atau "private", seperti yang ditunjukkan di sini:
<partnerLinkBinding nama="klien">
<property name="wsdlLocation">CustomerAccount_BES.wsdl</property>
<nama properti="type">publik</properti>
</pengikatan Tautan Mitra>
Pertanyaan: Apakah ada alat atau kerangka kerja yang dapat menghasilkan grafik ketergantungan secara dinamis?
Jawaban: Ya, Graphviz ( www.graphviz.org ), alat sumber terbuka, dapat menghasilkan grafik dari file masukan dalam format teks.
Pertanyaan: Apa saja pilihan untuk mereferensikan proses BPEL lainnya?
Jawaban: Pilihannya adalah:
Referensi versi default Referensi versi tertentu Referensi kunci layanan UDDI (dengan atau tanpa informasi versi yang dikodekan)
Pertanyaan: Bagaimana semua persyaratan penerapan baru ini dapat diterapkan?
Jawaban: Persyaratan penerapan baru ini paling baik dicapai dengan menggunakan tugas Ant khusus.
Setelah pertanyaan memulai terjawab dengan memuaskan, mari kita mulai dengan membuat tugas Ant khusus. File bpel.xml diurai dalam tugas Ant. Untuk semua tag partnerLinkBindings yang ditemukan, penguraian file bpel.xml yang sesuai akan dimulai secara rekursif. Selain penguraian, nilai properti versi saat ini ("ref") diekstraksi dari file build.properties dari setiap proyek BPEL yang ditemukan. Salah satu tantangan penguraian rekursif adalah melewatkan ketergantungan siklik.
Atribut "type" baru dan penguraian rekursif di file bpel.xml mengimplementasikan semua kebutuhan penerapan kami dengan mempertimbangkan layanan.
Lebih baik lagi, kami menggunakan Graphviz untuk memecahkan masalah pembuatan grafik ketergantungan secara otomatis. Untuk mencapai hal ini, kami akan menggabungkan semua dependensi yang diperoleh dari penguraian bpel.xml rekursif ke dalam satu file XML seperti yang ditunjukkan di bawah ini. Download gratis e-book komputer
<?xml versi="1.0" pengkodean="UTF-8"?>
<Koper BPEL>
<BPELProcess id="Resource_BAS_SetForAccount" src=" http://www.Oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_SetForAccount.bpel ">
<partnerLinkBinding>
<partnerLinkBinding nama="klien">
<property name="wsdlLocation">Resource_BAS_SetForAccount.wsdl</property>
<nama properti="type">publik</properti>
<nama properti="versi">1.2</properti>
</pengikatan Tautan Mitra>
<partnerLinkBinding nama="RemoveFromAccount">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<nama properti="versi">1.5</properti>
</pengikatan Tautan Mitra>
...
</partnerLinkBinding>
</BPELProses>
<BPELProcess id="Resource_BAS_RemoveFromAccount" src=" http://www.Oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_RemoveFromAccount.bpel ">
<partnerLinkBinding>
<partnerLinkBinding nama="klien">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<nama properti="type">publik</properti>
<nama properti="versi">1.5</properti>
</pengikatan Tautan Mitra>
<partnerLinkBinding name="Periksa Ketersediaan">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<nama properti="versi">1.1</properti>
</pengikatan Tautan Mitra>
...
</partnerLinkBinding>
</BPELProses>
<BPELProcess id="Resource_BES_CheckAvailability" src=" http://www.Oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BES_CheckAvailability.bpel ">
<partnerLinkBinding>
<partnerLinkBinding nama="klien">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<nama properti="type">publik</properti>
<nama properti="versi">1.1</properti>
</pengikatan Tautan Mitra>
...
</partnerLinkBinding>
</BPELProses>
...
</BPELKoper>
Gunakan XSLT untuk mengonversi file XML yang digabungkan menjadi format target (.dot), yang dapat digunakan sebagai input ke generator Graphviz untuk menghasilkan gambar PNG, seperti yang ditunjukkan di bawah ini:
struktur digraf {
simpul [bentuk=catatan,fontname="Arial",fontsize="10"];
tepi [namafont="Arial",ukuranfont="8"];
rankdir=LR;
labelhanya=l;
"Resource_BAS_SetForAccount_1_2" [bentuk=catatan,label="{Resource_BAS_SetForAccount}|{1.2|publik}",
fillcolor=kuninghijau,style=terisi];
"Resource_BAS_RemoveFromAccount_1_5" [shape=record,label="{Resource_BAS_RemoveFromAccount}|{1.5|publik}",
fillcolor=kuninghijau,style=terisi];
"Resource_BES_CheckAvailability_1_1" [bentuk=catatan,label="{Resource_BES_CheckAvailability}|{1.1|publik}",
fillcolor=kuninghijau,style=terisi];
"Resource_BAS_SetForAccount_1_2" -> "Resource_BAS_RemoveFromAccount_1_5" [hiasi=true,label=""];
"Resource_BAS_RemoveFromAccount_1_5" -> "Resource_BES_CheckAvailability_1_1" [hiasi=true,label=""];
}
Grafik ketergantungan yang dihasilkan oleh file DOT di atas terlihat seperti ini:
Nama layanan, versi, dan jenis ditampilkan di dalam kotak. Warna kotak menunjukkan jenis layanan. Dalam diagram ini kita memiliki tiga layanan publik (hijau). Diagram di awal artikel ini juga menunjukkan layanan ESB (putih) dan layanan BPEL (oranye).
Setelah menghasilkan diagram ideal untuk setiap proses BPEL publik, kita perlu menerapkan penerapan otomatis dari proses terkait. Untuk penerapan yang berpusat pada layanan ini, kami menggunakan daftar proses yang kami buat sebelumnya. Target penerapan standar dipanggil untuk setiap proses dalam daftar. Untuk mencegah penimpaan versi proses yang ada di server, target penerapan hanya dipanggil jika tidak ada versi proses saat ini di server.
Anda dapat menentukan apakah versi proses tertentu tersedia dengan membuka koneksi HTTP ke URL WSDL proses dan kemudian memeriksa kode status yang dikembalikan (status HTTP 200 ? Disebarkan, status HTTP 404 ? Belum disebarkan). Download gratis e-book komputer
Output dari tugas Ant khusus kami (berisi penguraian rekursif), pembuatan gambar PNG, dan penerapan yang berpusat pada layanan terlihat seperti ini:
...
[mkdir] Dir yang dibuat: /MyProject/Resource_BAS_SetForAccount/doc
[bpeltask] ** MULAI DeployWithDependencesTask **
[bpeltask] Resource_BAS_SetForAccount-1.2
[bpeltask] ** PARAMETER **
[bpeltask] nama file dot: doc/bpel-recursiv-all.dot
[bpeltask] dotfilenamepublic: doc/bpel-recursiv-public.dot
[bpeltask] deploytarget: terapkan
penerapan [bpeltask]: benar
[bpeltask] menimpa: salah
[bpeltask] stoponalreadydeployed: salah
[bpeltask] ** MENGHAPUS SECARA REKURSIV SEMUA FILE bpel.xml **
[bpeltask] [Resource_BAS_SetForAccount-1.2]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5, Resource_BES_CheckAvailability-1.1]
[bpeltask] ** FILE bpel.xml PUSAT PENULISAN **
[bpeltask] ** TRANSFORMASI FILE DOT **
[bpeltask] ** PENYERAPAN LAYANAN **
[bpeltask] ================== ==========
[bpeltask] LAYANAN SUDAH DIPLOYED (HTTP/1.1 200 OK) 'Resource_BES_CheckAvailability' dalam versi '1.1' http://localhost:8888/orabpel/default/Resource_BES_CheckAvailability/1.1/ Resource_BES_CheckAvailability?wsdl
[bpeltask] ================== ==========
[bpeltask] ================== ==========
[bpeltask] LAYANAN SUDAH DIPLOYED (HTTP/1.1 200 OK) 'Resource_BAS_RemoveFromAccount' dalam versi '1.5' http://localhost:8888/orabpel/default/Resource_BAS_RemoveFromAccount/1.5/ Resource_BAS_RemoveFromAccount?wsdl
[bpeltask] ================== ==========
[bpeltask] ================== ==========
[bpeltask] LAYANAN BELUM DIPLOYED (HTTP/1.1 404 Tidak Ditemukan) http://localhost:8888/orabpel/default/Resource_BAS_SetForAccount/1.2/ Resource_BAS_SetForAccount?wsdl
[bpeltask] MEMULAI PENYERAPAN LAYANAN Resource_BAS_SetForAccount di versi 1.2
[bpeltask] ================== ==========
...
Kesimpulan Penerapan yang berpusat pada layanan yang secara otomatis menghasilkan grafik ketergantungan memenuhi semua kebutuhan kami akan transparansi infrastruktur SOA. Karena penerapannya sepenuhnya didasarkan pada Ant, kami juga dapat menggunakannya untuk pekerjaan Luntbuild nightly dan produksi (lingkungan build berkelanjutan).
Untuk mendukung tata kelola SOA pelanggan kami, kami akan memaparkan proses publik kami dan dokumentasinya, bersama dengan grafik ketergantungan yang dihasilkan, di wiki pelanggan, seperti yang ditunjukkan di sini:
Halaman wiki dihasilkan secara dinamis ketika pencarian di registri layanan mengambil versi layanan publik yang saat ini terdaftar. Gambar-gambar di halaman wiki menyediakan link ke repositori sumber (Subversion), yang berisi gambar ukuran sebenarnya dari dokumentasi dan versi terdaftar dari layanan publik kami. Klik pada thumbnail untuk mengambil file terkait dari Subversion melalui WebDAV