AWS Struktur Blu Age dari aplikasi yang dimodernisasi - AWS Modernisasi Mainframe

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

AWS Struktur Blu Age dari aplikasi yang dimodernisasi

Dokumen ini memberikan rincian tentang struktur aplikasi modern (menggunakan alat refactoring Modernisasi AWS Mainframe), sehingga pengembang dapat menyelesaikan berbagai tugas, seperti:

  • menavigasi ke aplikasi dengan lancar.

  • mengembangkan program kustom yang dapat dipanggil dari aplikasi modern.

  • dengan aman memfaktorkan ulang aplikasi modern.

Kami berasumsi bahwa Anda sudah memiliki pengetahuan dasar tentang hal-hal berikut:

Organisasi artefak

AWS Aplikasi modern Blu Age dikemas sebagai aplikasi web java (.war), yang dapat Anda gunakan di server. JEE Biasanya, server adalah instance Tomcat yang menyematkan AWS Blu Age Runtime, yang saat ini dibangun di atas kerangka kerja Springboot dan Angular (untuk bagian UI).

Perang mengumpulkan beberapa artefak komponen (.jar). Setiap jar adalah hasil kompilasi (menggunakan alat maven) dari proyek java khusus yang elemennya merupakan hasil dari proses modernisasi.

Contoh artefak aplikasi modern.

Organisasi dasar bergantung pada struktur berikut:

  • Proyek entitas: berisi model bisnis dan elemen konteks. Nama proyek umumnya diakhiri dengan “-entity”. Biasanya, untuk COBOL program warisan tertentu, ini sesuai dengan modernisasi bagian I/O (kumpulan data) dan pembagian data. Anda dapat memiliki lebih dari satu proyek entitas.

  • Proyek layanan: berisi elemen modernisasi logika bisnis warisan. Biasanya, pembagian prosedur suatu COBOL program. Anda dapat memiliki lebih dari satu proyek layanan.

  • Proyek utilitas: berisi alat dan utilitas umum bersama, yang digunakan oleh proyek lain.

  • Proyek web: berisi modernisasi elemen terkait UI bila berlaku. Tidak digunakan untuk proyek modernisasi batch saja. Elemen UI ini bisa berasal dari CICS BMS peta, IMS MFS komponen, dan sumber UI mainframe lainnya. Anda dapat memiliki lebih dari satu proyek Web.

Isi proyek entitas

catatan

Deskripsi berikut hanya berlaku untuk COBOL dan output modernisasi PL/I. RPGoutput modernisasi didasarkan pada tata letak yang berbeda.

Sebelum refactoring, organisasi paket dalam proyek entitas terkait dengan program modern. Anda dapat mencapai ini dalam beberapa cara yang berbeda. Cara yang lebih disukai adalah dengan menggunakan kotak alat Refactoring, yang beroperasi sebelum Anda memicu mekanisme pembuatan kode. Ini adalah operasi lanjutan, yang dijelaskan dalam BluAge pelatihan. Untuk informasi lebih lanjut, lihat lokakarya Refactoring. Pendekatan ini memungkinkan Anda untuk mempertahankan kemampuan untuk membuat ulang kode java nanti, untuk mendapatkan keuntungan dari perbaikan lebih lanjut di masa depan, misalnya). Cara lain adalah dengan melakukan refactoring java biasa, langsung pada kode sumber yang dihasilkan, menggunakan pendekatan refactoring java apa pun yang mungkin ingin Anda terapkan - dengan risiko Anda sendiri.

Contoh paket entitas program CBACT 04C.

Kelas terkait program

Setiap program modern terkait dengan dua paket, paket business.context dan business.model.

  • base package.program.business.context

    Sub-paket business.context berisi dua kelas, kelas konfigurasi dan kelas konteks.

    • Satu kelas konfigurasi untuk program, yang berisi rincian konfigurasi spesifik untuk program yang diberikan, seperti set karakter yang akan digunakan untuk mewakili elemen data berbasis karakter, nilai byte default untuk elemen struktur data padding dan sebagainya. Nama kelas diakhiri dengan “Konfigurasi”. Hal ini ditandai dengan @org.springframework.context.annotation.Configuration anotasi dan berisi metode tunggal yang harus mengembalikan Configuration objek setup dengan benar.

      Konfigurasi sampel di Jawa.
    • Satu kelas konteks, yang berfungsi sebagai jembatan antara kelas layanan program (lihat di bawah) dan struktur data (Record) dan kumpulan data (File) dari sub-paket model (lihat di bawah). Nama kelas diakhiri dengan “Context” dan merupakan subclass dari RuntimeContext kelas.

      Contoh kelas konteks (tampilan sebagian)
  • base package.program.business.model

    Sub-paket model berisi semua struktur data yang dapat digunakan oleh program yang diberikan. Misalnya, setiap struktur COBOL data tingkat 01 sesuai dengan kelas dalam sub-paket model (struktur data tingkat yang lebih rendah adalah properti dari struktur tingkat 01 yang mereka miliki). Untuk informasi lebih lanjut tentang bagaimana kita memodernisasi 01 struktur data, lihat. Apa penyederhanaan data di AWS Blu Age

    Entitas rekaman sampel (tampilan sebagian)

Semua kelas memperluas RecordEntity kelas, yang mewakili akses ke representasi catatan bisnis. Beberapa catatan memiliki tujuan khusus, karena mereka terikat pada aFile. Pengikatan antara a Record dan a File dibuat dalam FileHandler metode * yang sesuai yang ditemukan di kelas konteks saat membuat objek file. Misalnya, daftar berikut menunjukkan bagaimana TransactfileFile File terikat ke transactFile Record (dari sub-paket model).

Contoh catatan ke file binding.

Isi proyek layanan

Setiap proyek layanan dilengkapi dengan aplikasi Springboot khusus, yang digunakan sebagai tulang punggung arsitektur. Hal ini diwujudkan melalui kelas bernamaSpringBootLauncher, terletak di paket dasar dari layanan sumber java:

SpringBoot Aplikasi proyek layanan.

Kelas ini terutama bertanggung jawab untuk:

  • membuat perekat antara kelas program dan sumber daya yang dikelola (sumber data/manajer transaksi/pemetaan kumpulan data/dll...).

  • menyediakan ConfigurableApplicationContext untuk program.

  • menemukan semua kelas yang ditandai sebagai komponen pegas (@Component).

  • memastikan program terdaftar dengan benar di ProgramRegistry - lihat metode inisialisasi yang bertanggung jawab atas pendaftaran ini.

Pendaftaran program.

Artefak terkait program

Tanpa refactoring sebelumnya, output modernisasi logika bisnis diatur pada dua atau tiga paket per basis program warisan:

Contoh paket program.

Kasus yang paling lengkap akan memiliki tiga paket:

  • base package.program.service: berisi antarmuka bernama Program Process, yang memiliki metode bisnis untuk menangani logika bisnis, melestarikan aliran kontrol eksekusi warisan.

  • base package.program.service.impl: berisi kelas bernama ProgramProcessImpl, yang merupakan implementasi dari antarmuka Proses yang dijelaskan sebelumnya. Di sinilah pernyataan warisan “diterjemahkan” ke pernyataan java, mengandalkan kerangka AWS Blu Age:

    Contoh CICS pernyataan modern (,) SEND MAP RECEIVE MAP
  • base package.program.statemachine: paket ini mungkin tidak selalu ada. Ini diperlukan ketika modernisasi aliran kontrol lama harus menggunakan pendekatan mesin negara (yaitu menggunakan StateMachine kerangka Spring) untuk menutupi aliran eksekusi lama dengan benar.

    Dalam hal ini, sub-paket statemachine berisi dua kelas:

    • ProgramProcedureDivisionStateMachineController: kelas yang memperluas kelas yang mengimplementasikan antarmuka StateMachineController (mendefinisikan operasi yang diperlukan untuk mengontrol eksekusi mesin status) dan StateMachineRunner (mendefinisikan operasi yang diperlukan untuk menjalankan mesin status) antarmuka, yang digunakan untuk menggerakkan mekanisme mesin status Spring; misalnya, SimpleStateMachineController seperti dalam kasus sampel.

      Contoh pengontrol mesin status.

      Pengontrol mesin negara mendefinisikan kemungkinan status yang berbeda dan transisi di antara mereka, yang mereproduksi aliran kontrol eksekusi lama untuk program yang diberikan.

      Saat membangun mesin status, pengontrol mengacu pada metode yang didefinisikan dalam kelas layanan terkait yang terletak di paket mesin negara dan dijelaskan di bawah ini:

      subConfigurer.state(States._0000_MAIN, buildAction(() -> {stateProcess._0000Main(lctx, ctrl);}), null); subConfigurer.state(States.ABEND_ROUTINE, buildAction(() -> {stateProcess.abendRoutine(lctx, ctrl);}), null);
    • ProgramProcedureDivisionStateMachineService: kelas layanan ini mewakili beberapa logika bisnis yang diperlukan untuk terikat dengan mesin status yang dibuat oleh pengontrol mesin negara, seperti yang dijelaskan sebelumnya.

      Kode dalam metode kelas ini menggunakan Peristiwa yang didefinisikan dalam pengontrol mesin negara:

      Layanan statemachine menggunakan peristiwa pengontrol statemachine.
      Layanan statemachine menggunakan peristiwa pengontrol statemachine.

      Layanan statemachine juga melakukan panggilan ke implementasi layanan proses yang dijelaskan sebelumnya:

      .statemachine service membuat panggilan ke implementasi proses

Selain itu, paket bernama base package.program memainkan peran penting, karena mengumpulkan satu kelas per program, yang akan berfungsi sebagai titik masuk program (rincian lebih lanjut tentang ini nanti). Setiap kelas mengimplementasikan Program antarmuka, penanda untuk titik masuk program.

Titik masuk program

Artefak lainnya

  • BMSMAPssahabat

    Selain artefak terkait program, proyek layanan dapat berisi artefak lain untuk berbagai keperluan. Dalam kasus modernisasi aplikasi CICS online, proses modernisasi menghasilkan file json dan dimasukkan ke dalam folder peta folder /src/main/resources:

    BMSMAPsfile json di folder sumber daya.

    Runtime Blu Age menggunakan file json tersebut untuk mengikat catatan yang digunakan oleh SEND MAP pernyataan dengan bidang layar.

  • Skrip Groovy

    Jika aplikasi lama memiliki skrip, itu telah dimodernisasi sebagai JCL skrip asyik, disimpan di folder /src/main/resources/scripts (lebih lanjut tentang lokasi spesifik itu nanti):

    skrip asyik (modernisasi) JCL

    Skrip tersebut digunakan untuk meluncurkan pekerjaan batch (beban kerja pemrosesan data khusus, non-interaktif, dan intensif CPU).

  • SQLberkas

    Jika aplikasi lama menggunakan SQL kueri, SQL kueri modern yang sesuai telah dikumpulkan dalam file properti khusus, dengan program pola penamaan .sql, di mana program adalah nama program menggunakan kueri tersebut.

    SQLfile di folder sumber daya

    Isi dari file sql tersebut adalah kumpulan entri (key=query), di mana setiap kueri dikaitkan dengan kunci unik, yang digunakan program modern untuk menjalankan kueri yang diberikan:

    Contoh file sql yang digunakan program modern.

    Misalnya, program COSGN 00C mengeksekusi kueri dengan kunci "COSGN00C_1" (entri pertama dalam file sql):

    contoh penggunaan kueri berdasarkan program

Isi proyek utilitas

Proyek utilitas, yang namanya diakhiri dengan “-tools”, berisi seperangkat utilitas teknis, yang mungkin digunakan oleh semua proyek lainnya.

Isi proyek utilitas

Konten proyek web

Proyek web hanya hadir saat memodernisasi elemen UI lama. Elemen UI modern yang digunakan untuk membangun front-end aplikasi modern didasarkan pada Angular. Contoh aplikasi yang digunakan untuk menunjukkan artefak modernisasi adalah CICS aplikasiCOBOL/, berjalan pada mainframe. CICSSistem menggunakan MAPs untuk mewakili layar UI. Elemen modern yang sesuai adalah, untuk setiap peta, file html disertai dengan file TypeScript:

Contoh CICS peta dimodernisasi ke Angular

Proyek web hanya menangani aspek ujung depan aplikasi Proyek layanan, yang bergantung pada proyek utilitas dan entitas, menyediakan layanan backend. Hubungan antara front end dan backend dibuat melalui aplikasi web bernama Gapwalk-Application, yang merupakan bagian dari distribusi runtime Blu Age standar. AWS

Menjalankan dan memanggil program

Pada sistem warisan, program dikompilasi sebagai executable yang berdiri sendiri yang dapat menyebut diri mereka melalui CALL mekanisme, seperti COBOL CALL pernyataan, melewati argumen saat diperlukan. Aplikasi modern menawarkan kemampuan yang sama tetapi menggunakan pendekatan yang berbeda, karena sifat artefak yang terlibat berbeda dari yang lama.

Di sisi modern, titik masuk program adalah kelas khusus yang mengimplementasikan Program antarmuka, adalah komponen Spring (@Component) dan terletak di proyek layanan, dalam paket bernama. base package.program

Pendaftaran program

Setiap kali server Tomcat yang menghosting aplikasi modern dimulai, aplikasi layanan Springboot juga dimulai, yang memicu pendaftaran program. Registri khusus bernama ProgramRegistry diisi dengan entri program, setiap program terdaftar menggunakan pengenalnya, satu entri per pengidentifikasi program yang dikenal, yang berarti bahwa jika suatu program dikenal oleh beberapa pengidentifikasi yang berbeda, registri berisi entri sebanyak yang ada pengidentifikasi.

Pendaftaran untuk program tertentu bergantung pada koleksi pengidentifikasi yang dikembalikan oleh metode getProgramIdentifiers ():

program sampel (tampilan sebagian)

Dalam contoh ini, program terdaftar sekali, dengan nama 'CBACT04C' (lihat isi programIdentifiers koleksi). Log tomcat menunjukkan setiap pendaftaran program. Pendaftaran program hanya bergantung pada pengidentifikasi program yang dideklarasikan dan bukan nama kelas program itu sendiri (meskipun biasanya pengidentifikasi program dan nama kelas program diselaraskan.

Mekanisme pendaftaran yang sama berlaku untuk program utilitas yang dibawa oleh berbagai aplikasi web utilitas AWS Blu Age, yang merupakan bagian dari distribusi runtime AWS Blu Age. Misalnya, webapp Gapwalk-Utility-Pgm menyediakan ekuivalen fungsional dari utilitas sistem z/OS (,IDCAMS,, ICEGENERSORT, dan sebagainya) dan dapat dipanggil oleh program atau skrip modern. Semua program utilitas yang tersedia yang terdaftar di startup Tomcat dicatat di log Tomcat.

Pendaftaran skrip dan daemon

Proses pendaftaran serupa, pada waktu startup Tomcat, terjadi untuk skrip groovy yang terletak di hierarki folder /src/main/resources/scripts. Hirarki folder skrip dilalui, dan semua skrip asyik yang ditemukan (kecuali skrip khusus functions.groovy reserved) terdaftar diScriptRegistry, menggunakan nama pendeknya (bagian dari nama file skrip yang terletak sebelum karakter titik pertama) sebagai kunci untuk pengambilan.

catatan
  • Jika beberapa skrip memiliki nama file yang akan menghasilkan kunci pendaftaran yang sama, hanya yang terbaru yang terdaftar, menimpa pendaftaran yang sebelumnya ditemui untuk kunci yang diberikan.

  • Mempertimbangkan catatan di atas, perhatikan saat menggunakan sub-folder karena mekanisme pendaftaran meratakan hierarki dan dapat menyebabkan penimpaan yang tidak terduga. Hirarki tidak dihitung dalam proses pendaftaran: biasanya /scripts/a/myscript.groovy dan /scripts/b/myscript.groovy akan menyebabkan /scripts/b/myscript.groovy menimpa /scripts/a/myscripts.groovy.

Skrip groovy di folder /src/main/resources/daemons ditangani sedikit berbeda. Mereka masih terdaftar sebagai skrip biasa, tetapi di samping itu, mereka diluncurkan sekali, langsung pada waktu startup Tomcat, secara asinkron.

Setelah skrip terdaftar di, REST panggilan dapat meluncurkannyaScriptRegistry, menggunakan titik akhir khusus yang diekspos oleh Aplikasi Gapwalk. Untuk informasi lebih lanjut, lihat dokumentasi yang sesuai.

Program memanggil program

Setiap program dapat memanggil program lain sebagai subprogram, meneruskan parameter ke sana. Program menggunakan implementasi ExecutionController antarmuka untuk melakukannya (sebagian besar waktu, ini akan menjadi ExecutionControllerImpl contoh), bersama dengan API mekanisme fasih bernama CallBuilder untuk membangun argumen panggilan program.

Semua metode program mengambil argumen a RuntimeContext dan a ExecutionController as method, sehingga selalu ExecutionController tersedia untuk memanggil program lain.

Lihat, misalnya, diagram berikut, yang menunjukkan bagaimana program CBST 03A memanggil program CBST 03B sebagai sub-program, meneruskan parameter ke dalamnya:

Contoh panggilan.sub-program
  • Argumen pertama ExecutionController.callSubProgram adalah pengidentifikasi program untuk memanggil (yaitu, salah satu pengidentifikasi yang digunakan untuk pendaftaran program - lihat paragraf di atas).

  • Argumen kedua, yang merupakan hasil dari build on theCallBuilder, adalah array dariRecord, sesuai dengan data yang diteruskan dari pemanggil ke callee.

  • Argumen ketiga dan terakhir adalah RuntimeContext contoh penelepon.

Ketiga argumen adalah wajib dan tidak bisa null, tetapi argumen kedua dapat berupa array kosong.

Callee akan dapat menangani parameter yang dilewatkan hanya jika awalnya dirancang untuk melakukannya. Untuk COBOL program warisan, itu berarti memiliki LINKAGE bagian dan USING klausa untuk pembagian prosedur untuk menggunakan elemen-elemen tersebutLINKAGE.

Misalnya, lihat CBSTM03B yang sesuai. CBLCOBOLberkas sumber:

Contoh tautan dalam file sumber COBOL

Jadi program CBSTM 03B mengambil satu Record sebagai parameter (array ukuran 1). Inilah yang CallBuilder sedang dibangun, menggunakan byReference () dan getArguments () metode rantai.

APIKelas CallBuilder fasih memiliki beberapa metode yang tersedia untuk mengisi array argumen untuk diteruskan ke callee:

  • asPointer(RecordAdaptable): tambahkan argumen jenis pointer, dengan referensi. Pointer mewakili alamat struktur data target.

  • byReference(RecordAdaptable): tambahkan argumen dengan referensi. Penelepon akan melihat modifikasi yang dilakukan callee.

  • byReference(RecordAdaptable): varian varargs dari metode sebelumnya.

  • byValue(Object): tambahkan argumen, diubah menjadiRecord, berdasarkan nilai. Penelepon tidak akan melihat modifikasi yang dilakukan callee.

  • byValue(RecordAdaptable): sama dengan metode sebelumnya, tetapi argumennya langsung tersedia sebagaiRecordAdaptable.

  • byValueWithBounds (Object, int, int): tambahkan argumen, diubah menjadi aRecord, mengekstrak bagian array byte yang ditentukan oleh batas yang diberikan, berdasarkan nilai.

Akhirnya, getArguments metode ini akan mengumpulkan semua argumen yang ditambahkan dan mengembalikannya sebagai arrayRecord.

catatan

Ini adalah tanggung jawab pemanggil untuk memastikan array argumen memiliki ukuran yang diperlukan, bahwa item dipesan dengan benar dan kompatibel, dalam hal tata letak memori dengan tata letak yang diharapkan untuk elemen tautan.

Skrip memanggil program

Memanggil program terdaftar dari skrip groovy memerlukan penggunaan instance kelas yang mengimplementasikan antarmuka. MainProgramRunner Biasanya, mendapatkan instance seperti itu dicapai melalui ApplicationContext penggunaan Spring:

. MainProgramRunner : mendapatkan sebuah instance

Setelah MainProgramRunner antarmuka tersedia, gunakan runProgram metode untuk memanggil program dan meneruskan pengenal program target sebagai parameter:

MainProgramRunner : menjalankan program

Dalam contoh sebelumnya, panggilan langkah pekerjaan IDCAMS (program utilitas penanganan file), menyediakan pemetaan antara definisi kumpulan data aktual dan pengidentifikasi logisnya.

Saat berhadapan dengan kumpulan data, program lama sebagian besar menggunakan nama logis untuk mengidentifikasi kumpulan data. Ketika program dipanggil dari skrip, skrip harus memetakan nama logis dengan kumpulan data fisik yang sebenarnya. Kumpulan data ini bisa berada di sistem file, dalam penyimpanan Blusam atau bahkan ditentukan oleh aliran inline, penggabungan beberapa kumpulan data, atau pembuatan file. GDG

Gunakan withFileConfiguration metode ini untuk membangun peta logis ke fisik kumpulan data dan membuatnya tersedia untuk program yang disebut.

Tulis program Anda sendiri

Menulis program Anda sendiri untuk skrip atau program modern lainnya untuk dipanggil adalah tugas umum. Biasanya, pada proyek modernisasi, Anda menulis program Anda sendiri ketika program warisan yang dapat dieksekusi ditulis dalam bahasa yang tidak didukung oleh proses modernisasi, atau sumber telah hilang (ya, itu bisa terjadi), atau program adalah utilitas yang sumbernya tidak tersedia.

Dalam hal ini, Anda mungkin harus menulis program yang hilang, di java, sendiri (dengan asumsi Anda memiliki pengetahuan yang cukup tentang perilaku yang diharapkan program, tata letak memori argumen program jika ada, dan sebagainya.) Program java Anda harus mematuhi mekanisme program yang dijelaskan dalam dokumen ini, sehingga program dan skrip lain dapat menjalankannya.

Untuk memastikan program ini dapat digunakan, Anda harus menyelesaikan dua langkah wajib:

  • Tulis kelas yang mengimplementasikan Program antarmuka dengan benar, sehingga dapat didaftarkan dan dipanggil.

  • Pastikan program Anda terdaftar dengan benar, sehingga terlihat dari program/skrip lain.

Menulis implementasi program

Gunakan Anda IDE untuk membuat kelas java baru yang mengimplementasikan Program antarmuka:

Membuat kelas Program java baru

Gambar berikut menunjukkan EclipseIDE, yang menangani pembuatan semua metode wajib untuk diimplementasikan:

Membuat kelas Program java baru - sumber pengeditan

Integrasi musim semi

Pertama, kelas harus dinyatakan sebagai komponen Spring. Anotasi kelas dengan anotasi@Component:

Menggunakan anotasi spring @Component

Selanjutnya, terapkan metode yang diperlukan dengan benar. Dalam konteks sampel ini, kami menambahkan MyUtilityProgram ke paket yang sudah berisi semua program modern. Penempatan itu memungkinkan program untuk menggunakan aplikasi Springboot yang ada untuk menyediakan yang diperlukan ConfigurableApplicationContext untuk implementasi metode: getSpringApplication

Menerapkan getSpringApplication metode.

Anda dapat memilih lokasi yang berbeda untuk program Anda sendiri. Misalnya, Anda dapat menemukan program yang diberikan dalam proyek layanan khusus lainnya. Pastikan proyek layanan yang diberikan memiliki aplikasi Springboot sendiri, yang memungkinkan untuk mengambil ApplicationContext (yang seharusnya a). ConfigurableApplicationContext

Memberikan identitas pada program

Agar dapat dipanggil oleh program dan skrip lain, program harus diberikan setidaknya satu pengenal, yang tidak boleh bertabrakan dengan program terdaftar lain yang ada di dalam sistem. Pilihan pengenal mungkin didorong oleh kebutuhan untuk mencakup penggantian program lama yang ada; dalam hal ini, Anda harus menggunakan pengenal yang diharapkan, seperti yang terpenuhi dalam CALL kejadian yang ditemukan di seluruh program lama. Sebagian besar pengidentifikasi program memiliki panjang 8 karakter dalam sistem warisan.

Membuat seperangkat pengidentifikasi yang tidak dapat dimodifikasi dalam program adalah salah satu cara untuk melakukan ini. Contoh berikut menunjukkan memilih "MYUTILPG" sebagai pengidentifikasi tunggal:

Contoh pengenal program

Kaitkan program dengan konteks

Program ini membutuhkan RuntimeContext contoh pendamping. Untuk program modern, AWS Blu Age secara otomatis menghasilkan konteks pendamping, menggunakan struktur data yang merupakan bagian dari program warisan.

Jika Anda menulis program Anda sendiri, Anda harus menulis konteks pendamping juga.

Mengacu padaKelas terkait program, Anda dapat melihat bahwa suatu program membutuhkan setidaknya dua kelas pendamping:

  • kelas konfigurasi.

  • kelas konteks yang menggunakan konfigurasi.

Jika program utilitas menggunakan struktur data tambahan, itu harus ditulis juga dan digunakan oleh konteksnya.

Kelas-kelas tersebut harus berada dalam paket yang merupakan bagian dari hierarki paket yang akan dipindai saat startup aplikasi, untuk memastikan komponen konteks dan konfigurasi akan ditangani oleh framework Spring.

Mari kita tulis konfigurasi dan konteks minimal, dalam base package.myutilityprogram.business.context paket, yang baru dibuat di proyek entitas:

Konfigurasi dan konteks khusus baru untuk program utilitas baru

Berikut adalah konten konfigurasi. Ini menggunakan build konfigurasi yang mirip dengan program -- modern -- lainnya di dekatnya. Anda mungkin harus menyesuaikan ini untuk kebutuhan spesifik Anda.

Konfigurasi program baru

Catatan:

  • Konvensi penamaan umum adalah ProgramNameKonfigurasi.

  • Itu harus menggunakan anotasi @org .springFramework.Context.Annotation.Configuration dan @Lazy.

  • Nama kacang biasanya mengikuti ProgramNameContextConfiguration konvensi, tetapi ini tidak wajib. Pastikan untuk menghindari tabrakan nama kacang di seluruh proyek.

  • Metode tunggal untuk mengimplementasikan harus mengembalikan Configuration objek. Gunakan ConfigurationBuilder fasih API untuk membantu Anda membangunnya.

Dan konteks terkait:

Konteks program baru dalam file Java.

Catatan

  • Kelas konteks harus memperluas implementasi Context antarmuka yang ada (baik RuntimeContext atauJicsRuntimeContext, yang ditingkatkan RuntimeContext dengan item JICS spesifik).

  • Konvensi penamaan umum adalah ProgramNameKonteks.

  • Anda harus mendeklarasikannya sebagai komponen Prototipe, dan menggunakan anotasi @Lazy.

  • Konstruktor mengacu pada konfigurasi terkait, menggunakan anotasi @Qualifier untuk menargetkan kelas konfigurasi yang tepat.

  • Jika program utilitas menggunakan beberapa struktur data tambahan, mereka harus:

    • ditulis dan ditambahkan ke base package.business.model paket.

    • direferensikan dalam konteksnya. Lihatlah kelas konteks lain yang ada untuk melihat bagaimana mereferensikan kelas strcutures data dan mengadaptasi metode konteks (konstruktor/bersih/reset) sesuai kebutuhan.

Sekarang konteks khusus tersedia, biarkan program baru menggunakannya:

Program baru menggunakan konteks yang baru dibuat.

Catatan:

  • getContext Metode ini harus diimplementasikan secara ketat seperti yang ditunjukkan, menggunakan delegasi ke getOrCreate metode ProgramContextStore kelas dan Spring kabel otomatis. BeanFactory Sebuah program identifier tunggal digunakan untuk menyimpan konteks program dalamProgramContextStore; identifier ini direferensikan sebagai 'program utama identifier'.

  • Konfigurasi pendamping dan kelas konteks harus direferensikan menggunakan anotasi @Import pegas.

Menerapkan logika bisnis

Ketika kerangka program selesai, terapkan logika bisnis untuk program utilitas baru.

Lakukan ini dalam run metode program. Metode ini akan dijalankan kapan saja program dipanggil, baik oleh program lain atau oleh skrip.

Selamat coding!

Menangani pendaftaran program

Akhirnya, pastikan program baru terdaftar dengan benar diProgramRegistry. Jika Anda menambahkan program baru ke paket yang sudah berisi program lain, tidak ada lagi yang harus dilakukan. Program baru diambil dan didaftarkan dengan semua program tetangganya saat startup aplikasi.

Jika Anda memilih lokasi lain untuk program ini, Anda harus memastikan program terdaftar dengan benar di startup Tomcat. Untuk beberapa inspirasi tentang cara melakukannya, lihat metode inisialisasi SpringbootLauncher kelas yang dihasilkan dalam proyek layanan (lihatIsi proyek layanan).

Periksa log startup Tomcat. Setiap pendaftaran program dicatat. Jika program Anda berhasil didaftarkan, Anda akan menemukan entri log yang cocok.

Ketika Anda yakin bahwa program Anda terdaftar dengan benar, Anda dapat mulai mengulangi pengkodean logika bisnis.

Pemetaan nama yang sepenuhnya memenuhi syarat

Bagian ini berisi daftar AWS Blu Age dan pemetaan nama pihak ketiga yang sepenuhnya memenuhi syarat untuk digunakan dalam aplikasi modern Anda.

AWS Pemetaan nama Blu Age sepenuhnya memenuhi syarat

Nama pendek Nama yang sepenuhnya memenuhi syarat

CallBuilder

com.netfective.bluage.gapwalk.runtime.statements.CallBuilder

Configuration

com.netfective.bluage.gapwalk.datasimplifier.configuration.Configuration

ConfigurationBuilder

com.netfective.bluage.gapwalk.datasimplifier.configuration.ConfigurationBuilder

ExecutionController

com.netfective.bluage.gapwalk.rt.call.ExecutionController

ExecutionControllerImpl

com.netfective.bluage.gapwalk.rt.call.internal.ExecutionControllerImpl

File

com.netfective.bluage.gapwalk.rt.io.File

MainProgramRunner

com.netfective.bluage.gapwalk.rt.call.MainProgramRunner

Program

com.netfective.bluage.gapwalk.rt.provider.Program

ProgramContextStore

com.netfective.bluage.gapwalk.rt.context.ProgramContextStore

ProgramRegistry

com.netfective.bluage.gapwalk.rt.provider.ProgramRegistry

Record

com.netfective.bluage.gapwalk.datasimplifier.data.Record

RecordEntity

com.netfective.bluage.gapwalk.datasimplifier.entity.RecordEntity

RuntimeContext

com.netfective.bluage.gapwalk.rt.context.RuntimeContext

SimpleStateMachineController

com.netfective.bluage.gapwalk.rt.statemachine.SimpleStateMachineController

StateMachineController

com.netfective.bluage.gapwalk.rt.statemachine.StateMachineController

StateMachineRunner

com.netfective.bluage.gapwalk.rt.statemachine.StateMachineRunner

Pemetaan nama pihak ketiga yang sepenuhnya memenuhi syarat

Nama pendek Nama yang sepenuhnya memenuhi syarat

@Autowired

org.springframework.beans.factory.annotation.Autowired

@Bean

org.springframework.context.annotation.Bean

BeanFactory

org.springframework.beans.factory.BeanFactory

@Component

org.springframework.stereotype.Component

ConfigurableApplicationContext

org.springframework.context.ConfigurableApplicationContext

@Import

org.springframework.context.annotation.Import

@Lazy

org.springframework.context.annotation.Lazy