CORBA bertemu dengan Java

Kita semua telah mengakses situs Web yang memungkinkan kita berinteraksi dengan skrip server melalui penggunaan formulir HTML dan Common Gateway Interface (CGI). Situs sering menggunakan teknik ini untuk meminta seseorang memasukkan nama pengguna dan kata sandi untuk masuk ke situs. Variabel Username dan Password diteruskan ke skrip server yang memverifikasi bahwa pengguna tertentu memang dapat mengakses bagian tertentu dari sebuah situs. Proses ini dilakukan melalui HTTP, yang (mungkin atau mungkin tidak Anda ketahui) adalah status tanpa kewarganegaraanprotokol. Setiap kali halaman baru dimuat, Anda secara efektif terputus dari server dan tidak memiliki pengetahuan tentang siapa Anda dan apa yang sedang Anda lakukan. Jadi, bahkan setelah masuk ke situs semacam itu, setiap halaman yang diakses sejak saat itu harus meneruskan kembali nama pengguna dan kata sandi ke server untuk memverifikasi hak pengguna untuk mengakses halaman. Dengan kata lain, aplikasi klien Anda (browser Web) dan aplikasi server (server Web) tidak memiliki konsep variabel lokal, panggilan metode lokal, atau objek.

Tepat setelah perjuangan komunitas pengembangan perangkat lunak selama puluhan tahun untuk merangkum kode sebagai objek yang tampaknya akhirnya berhasil, kami menemukan diri kami jatuh ke belakang dalam waktu ke mode komputasi "batch" tanpa kewarganegaraan.

Namun, tidak semuanya buruk. Web telah memberi kami keuntungan revolusioner dari protokol terbuka berbasis standar dan kemandirian platform. Sementara puluhan ribu situs menggunakan HTTP dan CGI untuk mengambil informasi pengguna, menjalankan skrip di server, dan mungkin mengembalikan informasi tambahan kepada pengguna, situs ini tidak dapat dianggap sebagai "aplikasi" yang sebenarnya, dalam arti kata tradisional. . Selain itu, semua kode untuk situs ini harus ditulis dari awal karena teknologi baru yang digunakan (HTTP dan CGI). Untuk meretrofit aplikasi perangkat lunak yang ada ke Web, atau untuk membangun aplikasi baru yang benar-benar kuat menggunakan Internet / intranet sebagai tulang punggung komunikasi, teknologi harus digunakan yang memiliki atribut "Holy Grail" berikut:

  • Dukungan untuk kode lama yang saat ini ada di C, C ++, dan COBOL (di antara bahasa lain)
  • Dukungan Java untuk memungkinkan aplikasi seluler, platform-independen, berorientasi objek yang akan dibangun
  • Netralitas vendor, sehingga aplikasi dapat dipertahankan dan berkembang seiring waktu
  • Skalabilitas untuk menangani pengguna dalam jumlah besar
  • Dukungan platform yang luas untuk menghindari platform "terkunci"
  • Paradigma pembangunan berorientasi objek (karena banyak keuntungan yang melekat dalam OOP)
  • Keamanan ujung-ke-ujung
  • Dukungan industri yang luas

Masukkan CORBA.

Melalui artikel ini, Anda akan melihat bahwa hanya satu teknologi, CORBA, yang benar-benar memenuhi daftar keinginan kami (dan kemudian beberapa). Selain itu, Anda akan melihat bahwa karena Java dan CORBA merupakan teknologi yang saling melengkapi, Anda dapat memulai pengembangan CORBA di Java dengan cepat dan hemat biaya.

Pengantar singkat tentang CORBA

CORBA adalah spesifikasi yang mendefinisikan bagaimana objek terdistribusi dapat beroperasi. Sampai ledakan popularitas World Wide Web, dan khususnya, bahasa pemrograman Java, CORBA pada dasarnya adalah solusi objek terdistribusi kelas atas yang terutama digunakan oleh pengembang C ++.

Spesifikasi CORBA sebenarnya dikendalikan oleh Object Management Group (OMG), sebuah konsorsium terbuka yang terdiri lebih dari 700 perusahaan (termasuk perusahaan saya) yang bekerja sama untuk menentukan standar terbuka untuk komputasi objek. Objek CORBA dapat ditulis dalam bahasa pemrograman apa pun yang didukung oleh produsen perangkat lunak CORBA seperti C, C ++, Java, Ada, atau Smalltalk. Objek ini juga dapat ada di platform apa pun yang didukung oleh produsen perangkat lunak CORBA seperti Solaris, Windows 95 / NT, OpenVMS, Digital Unix, HP-UX, dan AIX, antara lain. Ini berarti bahwa kita dapat memiliki aplikasi Java yang berjalan di bawah Windows 95 yang secara dinamis memuat dan menggunakan objek C ++ yang disimpan di Internet pada server Web Unix.

Kemandirian bahasa dimungkinkan melalui konstruksi antarmuka ke objek menggunakan Interface Description Language (IDL). IDL memungkinkan semua objek CORBA dideskripsikan dengan cara yang sama; satu-satunya persyaratan adalah "jembatan" antara bahasa asli (C / C ++, COBOL, Java) dan IDL. Objek CORBA berkomunikasi satu sama lain menggunakan Object Request Broker (ORB) sebagai perantara, dan dapat berkomunikasi melalui banyak protokol jaringan populer (seperti TCP / IP atau IPX / SPX). ORB dari vendor yang berbeda berkomunikasi melalui TCP / IP menggunakan Internet Inter-Orb Protocol (IIOP), yang merupakan bagian dari standar CORBA 2.0 (versi terbaru).

Saat ini, ORB pihak ketiga tersedia untuk bahasa pemrograman yang lebih populer (termasuk C ++, Smalltalk, Java, dan Ada95). Saat bahasa lain semakin populer, vendor CORBA tidak diragukan lagi akan merilis ORB untuk bahasa tersebut juga.

OMG awalnya mendefinisikan Arsitektur Manajemen Objek (OMA) pada tahun 1990 untuk menggambarkan bagaimana aplikasi dapat beroperasi. Sebagai bagian dari tujuan ini, standar perlu ditetapkan untuk mengartikulasikan bagaimana potongan, atau objek, dalam aplikasi dapat saling beroperasi - sehingga lahirlah CORBA. OMA mendefinisikan empat bagian utama yang dapat membentuk instalasi CORBA:

  1. The Object Request Broker bertindak sebagai bus perangkat lunak untuk objek untuk Gaul.
  2. CORBAServices menentukan layanan tingkat sistem yang ditambahkan ke ORB, seperti Keamanan, Penamaan, dan Transaksi.
  3. CORBAFacilities mendefinisikan layanan tingkat aplikasi, seperti dokumen gabungan dan fasilitas vertikal lainnya.
  4. Objek Bisnis menggambarkan objek dan aplikasi dunia nyata, seperti Pesawat atau Akun Bank.

Hands on: pengembangan CORBA di Java

Untuk membangun applet Java terdistribusi yang mengakses objek server menggunakan CORBA, kami akan menggunakan ORB komersial populer dan akan menggunakan IDL untuk menentukan antarmuka ke objek kami. Itu

Sumber daya

bagian di akhir artikel ini memberikan informasi kontak untuk beberapa vendor CORBA populer. Untuk contoh applet yang akan kita buat, saya telah memilih untuk menggunakan Visigenic VisiBroker untuk Java. ORB ini telah dilisensikan oleh beberapa perusahaan berbeda, termasuk Oracle, Netscape, dan Novell, dan disertakan dengan Netscape Navigator 4.0.

Catatan: Anda dapat menjalankan applet ini di browser selain Netscape Navigator 4.0. Applet akan mulai sedikit lebih lambat karena beberapa file kelas Java tambahan harus diunduh ke klien.

Kami akan membangun applet Java sederhana yang membuat instance objek server menggunakan CORBA. Demi kesederhanaan, objek server ini juga akan ditulis dalam Java. Objek server akan menyimpan berbagai informasi tentang berbagai vendor CORBA ORB dan produk mereka. Applet klien akan membuat instance objek dan meminta array untuk memperbarui layar. Contoh yang lebih lengkap (dan saya mendorong Anda untuk mempertimbangkan) akan menyimpan informasi ORB dalam database relasional dan menggunakan JDBC (atau cara lain dari akses database) di server untuk mengambil informasi yang diminta. Pendekatan ini akan membuat aplikasi tiga tingkat yang sebenarnya menggunakan CORBA.

Sebelum memulai pembangunan aplikasi, kita akan memeriksa lebih detail ORB dan IDL yang digunakan untuk mendefinisikan antarmuka ke objek.

Broker Permintaan Objek secara detail

Bagian terpenting dari Arsitektur Manajemen Objek adalah ORB. ORB adalah satu-satunya bagian dari CORBA yang harus ada untuk membangun aplikasi yang sesuai dengan CORBA. Banyak ORB dikirimkan tanpa CORBAServices atau CORBAFacilities, dan Anda harus membuat (atau membeli) Business Objects sendiri. Namun, tanpa ORB, aplikasi CORBA tidak dapat berfungsi.

Fungsi yang paling terlihat dari ORB CORBA adalah untuk menanggapi permintaan dari aplikasi Anda atau dari ORB lain. Selama siklus hidup aplikasi CORBA Anda yang sedang berjalan, ORB Anda mungkin diminta untuk melakukan banyak hal berbeda, termasuk:

  • Cari dan buat instance objek di mesin jarak jauh
  • Parameter Marshal dari satu bahasa pemrograman (seperti C ++) ke bahasa lain (seperti Java)
  • Tangani keamanan di seluruh batas lokal mesin Anda
  • Ambil dan publikasikan metadata pada objek di sistem lokal untuk ORB lain
  • Panggil metode pada objek jarak jauh menggunakan pemanggilan metode statis yang dijelaskan oleh rintisan yang diunduh
  • Panggil metode pada objek jarak jauh menggunakan pemanggilan metode dinamis
  • Otomatis memulai objek yang saat ini tidak aktif dan berjalan
  • Rutekan metode callback ke objek lokal yang sesuai yang dikelolanya

The great thing about the ORB is that nearly all of the implementation details for all of these duties are hidden from the software developer. Simply providing the appropriate "hooks" in your code to initialize the ORB and register your application with the ORB opens your application up to a vast galaxy of distributed objects.

Describing objects using IDL

In order for CORBA to maintain its vendor-neutral and language-neutral position, there must be some intermediary between C++ CORBA server code, for example, and a Java CORBA client. This intermediary, as you know, is the IDL. Related methods and properties supported by an underlying object are grouped together into a single interface using IDL. Once the IDL interface is complete, it can be compiled into the language of your choice in the form of both stub and skeleton code. IDL compilers are included with all ORBs. For instance, a Java/IDL compiler is included with the Visigenic VisiBroker for Java ORB, while a C++/IDL compiler is included with the Visigenic VisiBroker for C++ ORB.

Note that it is much easier to work with IDL than a standard object-oriented programming language because IDL cannot be used to specify actual implementation of classes or the methods within them. Instead, IDL is used only to describe the interface to the underlying objects.

After reading this section you will be familiar enough with the language to understand the examples presented later in the article. For a more thorough presentation on IDL, visit the OMG Web site. (See the Resources section below.)

Just as properties and methods are grouped together into related classes in Java, these items are contained within modules in IDL. There can be one or more interfaces defined within each IDL module. Listing 1 shows a simple IDL module named TheModule that contains a basic interface named TheInterface. This interface contains a single variable (TheVariable, of course) defined to be an integer value.

Listing 1: The simplest IDL module possible

Module TheModule { interface TheInterface { long TheVariable; }; }; 

If you compile this IDL module using an IDL-to-Java compiler (such as Visigenic's idl2java), you will get the Java interface shown in Listing 2.

Listing 2: The Java equivalent of TheModule

package TheModule; public interface TheInterface { public int TheVariable; } 

The ORBQuery applet

Now that you have a basic understanding of an ORB and IDL, we are ready to construct our ORBQuery applet. The client applet will consist of a standard Java GUI and will instantiate a remote CORBA object. Once this object has been instantiated, its methods can be called to determine information about a specific CORBA ORB. On the server side, we need to define five methods in order to retrieve the following information about a particular ORB: Name, Vendor, Operating System, Languages, and URL. Therefore, we must construct an IDL interface that defines five methods to retrieve this information. This interface,

ORBInfo

, is defined in Listing 3.

Listing 3: The ORBInfo IDL interface

module ORBQuery { interface ORBInfo { string GetName(in long index); string GetVendor(in long index); string GetOS(in long index); string GetLanguages(in long index); string GetURL(in long index); }; }; 

The VisiBroker installation includes an IDL compiler, idl2java, that you can use to generate the necessary Java code required to implement this interface. Once you've installed the package, simply execute the following command to generate the code:

idl2java ORBInfo.idl

This operation will create a subdirectory named ORBQuery (corresponding to the ORBQuery Java package). Within this directory, there are eight files: ORBInfo.java, ORBInfoHolder.java, ORBInfoHelper.java, _st_ORBInfo.java, _sk_ORBInfo.java, ORBInfoOperations.java, _tie_ORBInfo.java, and _example_ORBInfo.java. As you might have guessed, the ORBInfo.java file contains the Java version of the ORBInfo interface declaration, but what do the other Java classes do?

The ORBInfoHolder.java file contains a holder class used when passing parameters, while the ORBInfoHelper class defines various utility functions. The _st_ORBInfo class defines the client stub, while the _sk_ORBInfo class defines the server skeleton class. The ORBInfoOperations and _tie_ORBInfo classes are used to implement a tie mechanism, a VisiBroker feature designed to allow the implementation class to inherit from a class other than the skeleton class. We will not use these classes directly within this example. Finally, _example_ORBInfo contains a sample server object that can be extended to build the server application.

Jika Anda belum menggabungkannya, delapan kelas Java yang dibuat oleh kompilator IDL telah memberi kita kerangka kerja (dalam bentuk kelas pembantu, rintisan, kerangka, dan antarmuka) untuk membangun klien / server CORBA kita sendiri aplikasi di Jawa.

Membangun aplikasi server