CORBA bertemu dengan Java

Kita semua telah mengakses laman web yang membolehkan kita berinteraksi dengan skrip pelayan melalui penggunaan borang HTML dan Common Gateway Interface (CGI). Laman web sering menggunakan teknik ini untuk meminta seseorang memasukkan nama pengguna dan kata laluan untuk log masuk ke laman web. Pemboleh ubah Nama Pengguna dan Kata Laluan diteruskan ke skrip pelayan yang mengesahkan bahawa pengguna tertentu benar-benar dapat mengakses bahagian laman web tertentu. Proses ini dilakukan melalui HTTP, yang (seperti yang mungkin anda ketahui atau tidak) adalah tanpa statusprotokol. Setiap kali halaman baru dimuat, anda secara efektif terputus dari pelayan dan tidak mengetahui siapa anda dan apa yang sedang anda lakukan. Oleh itu, walaupun setelah masuk ke laman web tersebut, setiap halaman yang diakses dari saat itu mesti meneruskan nama pengguna dan kata laluan kembali ke pelayan untuk mengesahkan hak pengguna untuk mengakses halaman tersebut. Dengan kata lain, aplikasi klien anda (penyemak imbas Web) dan aplikasi pelayan (pelayan Web) tidak mempunyai konsep pemboleh ubah tempatan, panggilan kaedah tempatan, atau objek.

Hanya setelah perjuangan masyarakat pembangunan perisian selama puluhan tahun untuk merangkumi kod ketika objek nampaknya berjaya, kita mendapati diri kita mundur ke masa ke dalam kaedah pengkomputeran "batch" tanpa status.

Walau bagaimanapun, tidak semuanya buruk. Web telah memberikan kita kelebihan revolusioner berdasarkan protokol terbuka dan kebebasan platform berdasarkan standard. Walaupun puluhan ribu laman web menggunakan HTTP dan CGI untuk mengambil maklumat pengguna, menjalankan skrip di pelayan, dan mungkin mengembalikan maklumat tambahan kepada pengguna, laman web ini tidak dapat dianggap sebagai "aplikasi" yang sebenarnya dalam pengertian tradisional kata . Selain itu, semua kod untuk laman web ini harus ditulis dari awal kerana teknologi baru yang digunakan (HTTP dan CGI). Untuk menyusun semula aplikasi perisian yang ada ke Web, atau untuk membangun aplikasi baru yang benar-benar hebat menggunakan Internet / intranet sebagai tulang belakang komunikasi, teknologi harus digunakan yang memiliki atribut "Holy Grail" berikut:

  • Sokongan untuk kod warisan yang ada di C, C ++, dan COBOL (antara bahasa lain)
  • Sokongan Java untuk membolehkan aplikasi bergerak, bebas platform, berorientasikan objek dibina
  • Vendor-netralitas, agar aplikasi dapat dikekalkan dan dapat berkembang dari masa ke masa
  • Skalabiliti untuk menangani sebilangan besar pengguna
  • Sokongan platform yang luas untuk mengelakkan platform "lock-in"
  • Paradigma pembangunan berorientasikan objek (kerana banyak kelebihan yang terdapat dalam OOP)
  • Keselamatan dari hujung ke hujung
  • Sokongan industri yang luas

Masukkan CORBA.

Melalui artikel ini, anda akan melihat bahawa hanya satu teknologi, CORBA, yang benar-benar memenuhi senarai keinginan kami (dan kemudian beberapa). Di samping itu, anda akan melihat bahawa kerana Java dan CORBA adalah teknologi yang sangat saling melengkapi, anda dapat memulakan pengembangan CORBA di Jawa dengan cepat dan efektif dari segi kos.

Pengenalan ringkas kepada CORBA

CORBA adalah spesifikasi yang menentukan bagaimana objek yang diedarkan dapat saling beroperasi. Sehingga meletupnya populariti World Wide Web, dan khususnya, bahasa pengaturcaraan Java, CORBA pada dasarnya merupakan penyelesaian objek terdistribusi kelas atas yang digunakan terutamanya oleh pemaju C ++.

Spesifikasi CORBA sebenar dikendalikan oleh Object Management Group (OMG), sebuah konsortium terbuka lebih dari 700 syarikat (termasuk majikan saya) yang bekerjasama untuk menentukan standard terbuka untuk pengkomputeran objek. Objek CORBA dapat ditulis dalam bahasa pengaturcaraan apa pun yang disokong oleh pengeluar perisian CORBA seperti C, C ++, Java, Ada, atau Smalltalk. Objek-objek ini juga boleh wujud di platform mana pun yang disokong oleh pengeluar perisian CORBA seperti Solaris, Windows 95 / NT, OpenVMS, Digital Unix, HP-UX, dan AIX, antara lain. Ini bererti bahawa kita dapat menjalankan aplikasi Java di bawah Windows 95 yang memuat secara dinamis dan menggunakan objek C ++ yang tersimpan di Internet di pelayan Web Unix.

Kebebasan bahasa dimungkinkan melalui pembinaan antara muka ke objek menggunakan Interface Description Language (IDL). IDL membolehkan semua objek CORBA digambarkan dengan cara yang sama; satu-satunya syarat adalah "jambatan" antara bahasa ibunda (C / C ++, COBOL, Java) dan IDL. Objek CORBA berkomunikasi antara satu sama lain menggunakan Objek Permintaan Broker (ORB) sebagai perantara, dan dapat berkomunikasi melalui banyak protokol rangkaian yang popular (seperti TCP / IP atau IPX / SPX). ORB dari pelbagai vendor berkomunikasi melalui TCP / IP menggunakan Internet Inter-Orb Protocol (IIOP), yang merupakan sebahagian daripada standard CORBA 2.0 (versi terbaru).

Pada masa ini, ORB pihak ketiga tersedia untuk bahasa pengaturcaraan yang lebih popular (termasuk C ++, Smalltalk, Java, dan Ada95). Apabila bahasa lain semakin popular, vendor CORBA pasti akan mengeluarkan ORB untuk bahasa tersebut juga.

OMG pada mulanya mendefinisikan Objek Pengurusan Senibina (OMA) pada tahun 1990 untuk menerangkan bagaimana aplikasi dapat beroperasi. Sebagai sebahagian daripada matlamat ini, satu standard perlu ditetapkan untuk mengartikulasikan bagaimana potongan, atau objek, dalam aplikasi dapat saling beroperasi - sehingga lahirnya CORBA. OMA menentukan empat bahagian utama yang dapat membuat pemasangan CORBA:

  1. The Objek Permintaan Broker bertindak sebagai bas perisian untuk objek untuk bergaul.
  2. Perkhidmatan CORBAS menentukan perkhidmatan peringkat sistem yang ditambahkan ke ORB, seperti Keselamatan, Penamaan, dan Transaksi.
  3. CORBAFacilities menentukan perkhidmatan peringkat aplikasi, seperti dokumen kompaun dan kemudahan menegak lain.
  4. Objek Perniagaan menerangkan objek dan aplikasi dunia nyata, seperti Pesawat Udara atau BankAccount.

Hands on: Pembangunan CORBA di Jawa

Untuk membina applet Java yang diedarkan yang mengakses objek pelayan menggunakan CORBA, kami akan menggunakan ORB komersial yang popular dan akan menggunakan IDL untuk menentukan antara muka ke objek kami. The

Sumber

bahagian di akhir artikel ini memberikan maklumat hubungan untuk beberapa vendor CORBA yang popular. Sebagai contoh applet yang akan kami bina, saya telah memilih untuk menggunakan Visigenic VisiBroker untuk Java. ORB ini telah dilesenkan oleh beberapa syarikat yang berbeza, termasuk Oracle, Netscape, dan Novell, dan disertakan dengan Netscape Navigator 4.0.

Catatan: Anda boleh menjalankan applet ini di penyemak imbas selain Netscape Navigator 4.0. Applet akan dimulakan sedikit lebih perlahan kerana beberapa fail kelas Java tambahan mesti dimuat turun ke klien.

Kami akan membina applet Java sederhana yang membuat objek pelayan menggunakan CORBA. Demi kesederhanaan, objek pelayan ini juga akan ditulis di Java. Objek pelayan akan menyimpan pelbagai maklumat mengenai pelbagai vendor CORBA ORB dan produk mereka. Applet klien akan memberi contoh objek dan menyoal array untuk mengemas kini skrin. Contoh yang lebih lengkap (dan saya ingin anda pertimbangkan) adalah menyimpan maklumat ORB dalam pangkalan data hubungan dan menggunakan JDBC (atau beberapa kaedah lain untuk mengakses pangkalan data) di pelayan untuk mengambil maklumat yang diminta. Pendekatan ini akan mewujudkan aplikasi tiga peringkat yang benar menggunakan CORBA.

Sebelum memulakan pembinaan aplikasi, kami akan memeriksa dengan lebih terperinci ORB dan IDL yang digunakan untuk menentukan antara muka ke objek.

Broker Permintaan Objek secara terperinci

Bahagian yang paling penting dalam Objektif Pengurusan Seni Bina adalah ORB. ORB adalah satu-satunya bahagian CORBA yang mesti ada untuk membina aplikasi yang mematuhi CORBA. Banyak ORB menghantar tanpa perkhidmatan CORBAS atau CORBAFacilities, dan anda mesti membuat (atau membeli) Objek Perniagaan sendiri. Namun, tanpa ORB, aplikasi CORBA tidak dapat berfungsi.

Fungsi CORBA ORB yang paling ketara adalah untuk menjawab permintaan dari aplikasi anda atau dari ORB lain. Semasa kitaran hidup aplikasi CORBA yang anda jalankan, ORB anda mungkin diminta untuk melakukan banyak perkara yang berbeza, termasuk:

  • Cari dan buat objek pada mesin jauh
  • Parameter Marshal dari satu bahasa pengaturcaraan (seperti C ++) ke bahasa lain (seperti Java)
  • Tangani keselamatan melintasi sempadan tempatan mesin anda
  • Dapatkan dan terbitkan metadata pada objek pada sistem tempatan untuk ORB lain
  • Memohon kaedah pada objek jauh menggunakan kaedah kaedah statik yang dijelaskan oleh rintisan yang dimuat turun
  • Memohon kaedah pada objek jauh menggunakan kaedah kaedah dinamik
  • Mulakan objek secara automatik yang tidak aktif dan sedang berjalan
  • Arahkan kaedah panggilan balik ke objek tempatan yang sesuai yang dikendalikannya

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.

Sekiranya anda belum mengumpulkannya, lapan kelas Java yang dibuat oleh pengkompil IDL telah memberi kami kerangka kerja (dalam bentuk kelas penolong, rintisan, kerangka, dan antara muka) untuk membina CORBA pelanggan / pelayan kami sendiri aplikasi di Jawa.

Membina aplikasi pelayan