ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

РСализация ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра Π½Π° основС CORBA

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строчкС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΡƒΡŽ ссылку Π½Π° ΡΠ»ΡƒΠΆΠ±Ρƒ ΠΈΠΌΠ΅Π½ (NameService). Но Ρ„актичСски это ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΄Π»Ρ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ контСкст ΠΈΠΌΠ΅Π½ (NamingContext), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ narrow класса NamingContextHelper, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ CORBA ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Java, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

РСализация ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра Π½Π° основС CORBA (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚ «Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ управлСния»

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ систСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ»

" РСализация ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ CORBA"

Москва, 2004 Π³.

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹

1. ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ CORBA.

2. ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΡΠ·Ρ‹ΠΊΠΎΠΌ IDL ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ интСрфСйсов.

3. ΠžΡΠ²ΠΎΠΈΡ‚ΡŒ классы Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ org.omg.

4. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

1. Π—Π°Π΄Π°Π½ΠΈΠ΅ для домашнСй ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ

ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚СорСтичСским ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ, прСдставлСнным Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ мСтодичСским указаниям ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Скстом задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΡƒΡŽ трСбованиям задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

2. Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€. ΠšΠ»ΠΈΠ΅Π½Ρ‚ — ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ с ΡΠ΅Ρ€Π²Π΅Ρ€Π° сообщСния. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний — Π½Π° ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΠ΅ студСнтов.

Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π₯Ρ€Π°Π½ΠΈΡ‚ΡŒ сообщСния ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ‚Скстовом Ρ„Π°ΠΉΠ»Π΅. РСкомСндуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сСрвСр ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ.

Для взаимодСйствия ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ CORBA.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ дополнСния прСдлагаСтся сСрвСр ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½Π° Java.

3. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

ΠžΡ‚Ρ‡Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΡƒ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, содСрТащСС описаниС интСрфСйсов всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ коммСнтариями.

4. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ CORBA?

2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ IDL? Для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

3. Как осущСствляСтся взаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π° Π² CORBA?

4. Как ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ?

5. Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ сСрвСр ΠΈΠΌΠ΅Π½?

6. Как запускаСтся CORBA_сСрвСр?

5. Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

1. КСн ΠΡ€Π½ΠΎΠ»ΡŒΠ΄, ДТСймс Гослинг, Дэвид Π₯олмс. Π―Π·Ρ‹ΠΊ программирования Java™.

2. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт Java — http://java.sun.com/ (Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» Π½Π° Ρ€ΡƒΡΡΠΊΠΎΠΌ языкС с ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠΌ).

3. Java™ 2 SDK, Standard Edition Documentation — http://java.sun.com/products/jdk/1.5/index.html.

4. ДТСймс Гослинг, Π‘ΠΈΠ»Π» Π”ΠΆΠΎΠΉ, Π“Π°ΠΉ Π‘Ρ‚ΠΈΠ». БпСцификация языка Java (The Java Language Specification — http://www.javasoft.com/docs/books/jls/). ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° Ρ€ΡƒΡΡΠΊΠΈΠΉ язык — http://www.uni-vologda.ac.ru/java/jls/index.html

5. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Eclipse — http://www.eclipse.org/.

6. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. CORBA

ВСхнология CORBA (Common Object Request Broker Architecture) — это стандарт написания распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ консорциумом OMG (Open Management Group). Боздавая CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сущСствСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… выполнСния большого объСма вычислСний. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Ρƒ, Ρ‚Π΅ΠΌ самым Ρ€Π°Π·Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ лишнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠžΡΠ½ΠΎΠ²Ρƒ CORBA составляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ запросов (Object Request Broker). ORB управляСт взаимодСйствиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сСтСвой срСдС. IIOP (Internet Inter-ORB Protocol) — это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ORB.

Π’ Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠΌ пространствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π·Π°Π³Π»ΡƒΡˆΠΊΠΎΠΉ (stub). ΠŸΠΎΡƒΡ‡ΠΈΠ² запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΎΠ½ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ сСрвСру, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ скСлСту.

Π‘ΠΊΠ΅Π»Π΅Ρ‚ (skeleton) — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠΌ пространствС сСрвСра. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΎΠ½ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сСрвСру. Π’Π°ΠΊΠΆΠ΅ скСлСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ сСрвСра ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ (Π·Π°Π³Π»ΡƒΡˆΠΊΠ΅).

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ CORBA ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Java, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ — это установлСнный ΠΏΠ°ΠΊΠ΅Ρ‚ JDK1.5 ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ idlj (…jdk1.5.0binidlj.exe). JDK прСдоставляСт Π½Π°Π±ΠΎΡ€ классов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с CORBA ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π° idlj ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ языка IDL Π² Java.

6.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ CORBA-прилоТСния

6.1.1 НаписаниС интСрфСйса

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ CORBA прилоТСния Π½Π° Java начинаСтся с Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ интСрфСйса для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ язык описания интСрфСйсов (Interface Definition Language, IDL).

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» hello. idl

module HelloApp

{

interface Hello

{

string sayHello ();

oneway void shutdown ();

};

};

Π”Π°Π½Π½Ρ‹ΠΉ интСрфСйс описываСт лишь Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° shutdown ΠΈ sayHello. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, Π½Π°ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅ Ρƒ Π½ΠΈΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π”Π°Π»Π΅Π΅ слСдуСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ компилятор IDL-to-Java idlj:

idlj — fall Hello. idl

Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ появилась новая ΠΏΠ°ΠΏΠΊΠ° HelloApp, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΡˆΠ΅ΡΡ‚ΡŒ java_Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ своС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Β· HelloPOA. java java — абстрактный класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой Π½ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ скСлСт сСрвСра (skeleton) ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСра.

Β· _HelloStub.java — класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ (stub) ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Β· HelloHelper. java ΠΈ HelloHolder. java — классы, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для CORBA ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Β· HelloOperations. java — класс, содСрТащий описаниС интСрфСйса hello Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Java.

Β· Hello. java — класс — наслСдник HelloOperations, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ интСрфСйс org.omg.CORBA. Object.

6.1.2 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСрвСра

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наша Π·Π°Π΄Π°Ρ‡Π° — Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс hello. Π’ Π½Π°ΡˆΠ΅ΠΌ случаС это Π±ΡƒΠ΄Π΅Ρ‚ HelloImpl. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся наслСдником класса HelloPOA. Π’ HelloImpl Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Hello.idl.

Для упрощСния Π·Π°Π΄Π°Ρ‡ΠΈ объявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° HelloOperations.java, сгСнСрированного jdlj.

class HelloImpl extends HelloPOA {

private ORB orb;

public void setORB (ORB orb_val) {

orb = orb_val;

}

// implement sayHello () method

public String sayHello () {

return «nHello world!! n»;

}

// implement shutdown () method

public void shutdown () {

orb.shutdown (false);

}

}

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π±ΡƒΠ΄Π΅Ρ‚ созданиС собствСнно сСрвСрной части прилоТСния. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ класс HelloServer.

Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ всСго ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ — стандартная функция main.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ, создаСм ORB. Π—Π°Ρ‚Π΅ΠΌ создаСм экзСмпляр класса ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (HelloImpl) ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² ORB. Π”Π°Π»ΡŒΡˆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ слуТбу ΠΈΠΌΠ΅Π½ (NameService) ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π² Π½Π΅ΠΉ имя ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ смог Π΅Π³ΠΎ Π½Π°ΠΉΡ‚ΠΈ.

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ эти этапы.

1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ORB. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° init класса ORB

ORB orb = ORB. init (args, null);

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра класса ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚рация Π΅Π³ΠΎ Π² ORB

HelloImpl helloImpl = new HelloImpl ();

helloImpl.setORB (orb);

3. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΈΠΌΠ΅Π½ (NamingContext)

org.omg.CORBA. Object objRef = orb. resolve_initial_references («NameService»);

NamingContextExt ncRef = NamingContextExtHelper. narrow (objRef);

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строчкС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΡƒΡŽ ссылку Π½Π° ΡΠ»ΡƒΠΆΠ±Ρƒ ΠΈΠΌΠ΅Π½ (NameService). Но Ρ„актичСски это ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΄Π»Ρ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ контСкст ΠΈΠΌΠ΅Π½ (NamingContext), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ narrow класса NamingContextHelper, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

4. РСгистрация ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (HelloImpl)

String name = «Hello»;

NameComponent path[] = ncRef. to_name (name);

ncRef.rebind (path, href);

РСгистрация ΠΈΠΌΠ΅Π½ΠΈ производится для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ смог Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎΠΉ Ρ†Π΅Π»ΠΈ слуТит функция rebind (NameComponent[] nc, Object obj) интСрфСйса NamingContext.

5. ОТиданиС запросов ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

orb.run ();

Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅.

// HelloServer.java

import HelloApp.*;

import org.omg. CosNaming.*;

import org.omg. CosNaming. NamingContextPackage.*;

import org.omg.CORBA.*;

import org.omg. PortableServer.*;

import org.omg. PortableServer. POA;

import java.util. Properties;

class HelloImpl extends HelloPOA {

private ORB orb;

public void setORB (ORB orb_val) {

orb = orb_val;

}

// implement sayHello () method

public String sayHello () {

return «nHello world!! n»;

}

// implement shutdown () method

public void shutdown () {

orb.shutdown (false);

}

}

public class HelloServer {

public static void main (String args[]) {

try {

// create and initialize the ORB

ORB orb = ORB. init (args, null);

// get reference to rootpoa & activate the POAManager

POA rootpoa = POAHelper. narrow (orb.resolve_initial_references («RootPOA»));

rootpoa.the_POAManager ().activate ();

// create servant and register it with the ORB

HelloImpl helloImpl = new HelloImpl ();

helloImpl.setORB (orb);

// get object reference from the servant

org.omg.CORBA. Object ref = rootpoa. servant_to_reference (helloImpl);

Hello href = HelloHelper. narrow (ref);

// get the root naming context

// NameService invokes the name service

org.omg.CORBA. Object objRef =

orb.resolve_initial_references («NameService»);

// Use NamingContextExt which is part of the Interoperable

// Naming Service (INS) specification.

NamingContextExt ncRef = NamingContextExtHelper. narrow (objRef);

// bind the Object Reference in Naming

String name = «Hello»;

NameComponent path[] = ncRef. to_name (name);

ncRef.rebind (path, href);

System.out.println («HelloServer ready and waiting…»);

// wait for invocations from clients

orb.run ();

}

catch (Exception e) {

System.err.println («ERROR:» + e);

e.printStackTrace (System.out);

}

System.out.println («HelloServer Exiting…»);

}

}

6.1.3 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги написания клиСнтского прилоТСния

1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ORB

2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста слуТбы ΠΈΠΌΠ΅Π½ (NamingContext)

3. НахоТдСниС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

4. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sayHello.

5. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° shutdown.

Как Π²ΠΈΠ΄Π½ΠΎ, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΏΡƒΠ½ΠΊΡ‚Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΡΡ‚Π°ΠΏΠ°ΠΌΠΈ создания сСрвСрного прилоТСния, поэтому Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡƒΠ½ΠΊΡ‚ рСализуСтся Ρ‚ΠΎΠΆΠ΅ достаточно просто. БоздаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ NameComponent. ВызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ resolve (NameComponent[] path), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отыскиваСт ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (стандартный CORBA_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚). ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° narrow (org.omg.CORBA. Object obj) класса helloHelper (сгСнСрированного idlj компилятором) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ ссылку Π½Π° ΠΈΠ½Ρ‚СрфСйс hello.

String name = «Hello»;

helloImpl = HelloHelper. narrow (ncRef.resolve_str (name));

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ sayHello:

System.out.println (helloImpl.sayHello ());

ΠœΠ΅Ρ‚ΠΎΠ΄ shutdown Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра.

helloImpl.shutdown ();

//testClient.java

import HelloApp.*;

import org.omg. CosNaming.*;

import org.omg. CosNaming. NamingContextPackage.*;

import org.omg.CORBA.*;

public class HelloClient

{

static Hello helloImpl;

public static void main (String args[])

{

try {

// create and initialize the ORB

ORB orb = ORB. init (args, null);

// get the root naming context

org.omg.CORBA. Object objRef =

orb.resolve_initial_references («NameService»);

// Use NamingContextExt instead of NamingContext. This is

// part of the Interoperable naming Service.

NamingContextExt ncRef = NamingContextExtHelper. narrow (objRef);

// resolve the Object Reference in Naming

String name = «Hello»;

helloImpl = HelloHelper. narrow (ncRef.resolve_str (name));

System.out.println («Obtained a handle on server object:» + helloImpl);

System.out.println (helloImpl.sayHello ());

helloImpl.shutdown ();

} catch (Exception e) {

System.out.println («ERROR:» + e);

e.printStackTrace (System.out);

}

}

}

6.1.4 ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ Π·Π°ΠΏΡƒΡΠΊ прилоТСния

Π€Π°ΠΉΠ»Ρ‹ HelloServer. java and HelloClient. java, Hello. idl ΠΈ ΠΏΠ°ΠΏΠΊΠ° HelloApp, созданная idkj. exe Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅.

Для компиляции ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π° Π½Π°Π΄ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π½Π°Π±Ρ€Π°Ρ‚ΡŒ

javac *.java HelloApp/*.java

javac.exe находится Π²… jdk1.5.0bin.

Π‘Ρ€Π΅Π΄Π° Eclipse Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ CORBA_прилоТСния. Для запуска

1. Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слуТбу orbd — Object Request Broker Daemon (…jdk1.5.0binorbd.exe). Π­Ρ‚ΠΎ дСлаСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΡΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° ΡΠ»ΡƒΠΆΠ±Ρƒ ΠΈΠΌΠ΅Π½.

start orbd — ORBInitialPort 1050

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ORBInitialPort — Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сСрвСр ΠΈΠΌΠ΅Π½.

2. Запуск сСрвСра

start java HelloServer — ORBInitialPort 1050 — ORBInitialHost localhost

УказываСтся ΠΏΠΎΡ€Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр ΠΈΠΌΠ΅Π½. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ORBInitialHost ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ хост, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр ΠΈΠΌΠ΅Π½.

3. Запуск ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

java HelloClient — ORBInitialPort 1050 — ORBInitialHost localhost

УказываСтся ΠΏΠΎΡ€Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр ΠΈΠΌΠ΅Π½. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ORBInitialHost ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ хост, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр ΠΈΠΌΠ΅Π½.

Для удобства компиляции ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ bat_Ρ„Π°ΠΉΠ»:

idlj — fall Hello. idl

javac *.java HelloApp/*.java

start java HelloServer — ORBInitialPort 1050 — ORBInitialHost localhost

java HelloClient — ORBInitialPort 1050 — ORBInitialHost localhost

6.2 Π―Π·Ρ‹ΠΊ IDL

Π―Π·Ρ‹ΠΊ OMG IDL (Interface Definition Language — Π―Π·Ρ‹ΠΊ Описания Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠΎΠ²) прСдставляСт собой тСхнологичСски нСзависимый синтаксис для описания интСрфСйсов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈ описании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€, OMG IDL прСкрасно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для опрСдСлСния Π³Ρ€Π°Π½ΠΈΡ† ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. OMG IDL позволяСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ интСрфСйсы, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π―Π·Ρ‹ΠΊ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ наслСдованиС интСрфСйсов, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

IDL являСтся чисто Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ языком, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. IDL_спСцификации ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ (ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹) Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ сСрвСров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно программистом. Π’ΠΎ Π΅ΡΡ‚ΡŒ IDL_ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ написаны, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Π½Π° Π»ΡŽΠ±ΠΎΠΌ языкС, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сущСствуСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· IDL. К Ρ‚Π°ΠΊΠΈΠΌ языкам относятся C, C++, SmallTalk, Pascal, Java, Ada.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ IDL ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΎΠ½Π° наслСдуСт, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ интСрфСйс, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ с ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° CORBA IDL Ρ„Π°ΠΉΠ»Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

module {

;

;

;

interface [:] {

;

;

;

;

[]()

[raises exception] [context]

.

.

[]()

[raises exception] [context]

.

.

}

interface [:]

.

.

}

Бинтаксис языка IDL довольно ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΉ ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚авляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΌΠ΅Ρ‚одичСском пособии.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Hello. idl

module HelloApp

{

struct TMessage

{

string To;

string From;

string Message;

};

typedef sequence TMessages;

interface Hello

{

TMessages GetMessages (in string Name, out short count);

oneway void Send (in string Client, in string Name, in string Message);

string sayHello ();

oneway void shutdown ();

};

};

typedef sequence TMessages; - объявлСниС Ρ‚ΠΈΠΏΠ° динамичСский массив сообщСний TMessage.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ