Spec-Zone .ru
спецификации, руководства, описания, API
|
Взаимодействующая Служба Именования (INS) является расширением службы CosNaming. Это обеспечивает следующие дополнительные функции:
Следующая схема показывает, как INS вписывается в ORBD:
Ссылка на объект содержит по крайней мере три сведения: адрес, имя POA, который создал ссылку на объект, и Объектный ID.
Используя INS, можно обеспечить URL, чтобы получить доступ к объекту CORBA, который более читаем чем stringified Взаимодействующие Ссылки на объект (IOR). Следующие stringified форматы ссылки на объект позволяются:
IOR является ссылкой на объект, которая понимается под ШАРАМИ, которые могут взаимодействовать, используя определенные с помощью OMG протоколы Общий Протокол Межшара (GIOP) и интернет-Протокол Межшара (IIOP). Клиент может получить ссылку на объект, используя orb.object_to_string(objRef), как показано в Просмотре примера Пространства имен, или в результате вызова на другой ссылке на объект.
corbaloc и форматы corbaname позволяют Вам обеспечить URL для доступа объекты CORBA. Используйте формат corbaloc для того, чтобы решить к определенному CORBAservice, не проходя через службу именования. Используйте формат corbaname, чтобы разрешить имя stringified от определенного контекста именования.
Формат corbaloc: используется, чтобы определить местоположение служб CORBA, полезен для клиентских программ CORBA, и обычно используется, чтобы разрешить ссылку, используя GIOP сообщение Request или LocateRequest. Например, ссылка на объект corbaloc: могла бы быть похожей на это:
corbaloc:iiop:1.2@example.com:2050/TraderService
Это шоу в качестве примера, как получить ссылку на объект для TraderService от узла example.com на порту 2050.
ОТМЕТЬТЕ: 1.2 в примере, который URL отсылает к версии 1.2 GIOP для IOR, который соответствует тому corbaloc URL. GIOP 1.2 является значением по умолчанию для Java Sun ШАР CORBA. Это показывают в этом примере, чтобы демонстрировать, как можно включить различную версию.
Формат corbaname: предоставляет механизм клиенту, чтобы загрузиться непосредственно, и обычно используется, чтобы разрешить имя stringified от корневого контекста именования. Например, ссылка на объект corbaname: могла бы быть похожей на это:
corbaname::example.com:2050#Personal/schedule
где example.com является узлом, 2050 является портом. Частью ссылки до знака "диез" (corbaname::example.com:2050) является URL, который возвращает корневой контекст именования. Этот пример обеспечивает URL, чтобы использовать для: a) определяют местоположение Службы Именования, и, b) разрешают имя Personal/schedule от Службы Именования.
Интерфейс NamingContextExt, полученный из NamingContext, обеспечивает операции, требуемые использовать имена stringified и URL. Некоторые из API в NamingContextExt для того, чтобы преобразовать между CosNames, Именами Стринджифида, и URL упоминаются ниже. См., что
Эта работа принимает Name и возвращает имя stringified. Если Name недопустим, исключение InvalidName повышается.
Эта работа принимает имя stringified и возвращает Name. Если имя stringified синтаксически уродливо или нарушает предел реализации, исключение InvalidName повышается.
Это - работа удобства, которая выполняет решение тем же самым способом как NamingContext.resolve(). Это принимает имя stringified как параметр вместо Name.
Эта работа берет corbaloc URL <адрес> и <key_string> компонент такой как
для первого параметра, и stringified называют для второго. Это тогда выполняет любые Escape, необходимые на параметрах, и возвращает полностью сформированную строку URL. Исключение повышается, если или адрес corbaloc и основной параметр или параметр имени уродливы.
Законно для stringified_name быть пустым. Если адрес пуст, исключение InvalidAddress повышается.
Преобразования от URL до объектов обрабатываются org.omg.CORBA.ORB.string_to_object() как описано в CORBA 2.3 Спецификации, Раздел 13.6.6.
Следующие учебные руководства по IDL Java используют NamingContextExt:
ШАР может быть сконфигурирован, чтобы возвратить дескриптор специализированной службы CORBA от resolve_initial_references(), используя любой ORBInitRef и/или ORBDefaultInitRef. Например,
-ORBInitRef TraderService=corbaloc::example.com:2050/TraderService
-ORBDefaultInitRef corbaloc:iiop:1.2:example.com:2050
Порядок разрешения, когда эти опции используются, следующие:
Для получения дополнительной информации о INS, обратитесь к
Этот документ является общим обзором того, как создать полный CORBA (Общая Архитектура Посредника запросов к объектам) приложение, используя Взаимодействующую Службу Именования (INS).
Этот пример использует следующие файлы:
Каждый шаг в учебном руководстве обозначается этим символом.
Service.idl
)Первый шаг к создаванию приложения CORBA должен определить все Ваши объекты и их интерфейсы, используя Язык определения интерфейсов OMG (IDL).
Следующий код пишется в IDL OMG, и описывает объект CORBA, работа ping() которого проверяет с помощью ping-запросов INS Service.
Создайте файл Service.idl и добавьте следующий код:
Service.idl
// A very simple interface to explain this example interface Service { void ping(); };
INSServer.java
)У класса INSServer есть метод main() сервера, который:
Создайте файл INSServer.java и добавьте следующий код:
INSServer.java
// INSServer.java // Copyright and License import java.util.Properties; import org.omg.CORBA.Object; import org.omg.CORBA.ORB; import org.omg.CORBA.Policy; import org.omg.PortableServer.POA; import org.omg.PortableServer.*; import org.omg.PortableServer.Servant; public class INSServer { public static void main( String args[] ) { try { Properties properties = System.getProperties( ); // STEP 1: Set ORBPeristentServerPort property // Set the proprietary property to open up a port to listen to // INS requests. // Note: This property is subject to change in future releases properties.put( "com.sun.CORBA.POA.ORBPersistentServerPort", Integer.toString(1060) ); // STEP 2: Instantiate the ORB, By passing in the // ORBPersistentServerPort property set in the previous step ORB orb = ORB.init( args, properties ); // STEP 3: Instantiate the Service Object that needs to be published // and associate it with RootPOA. ServiceImpl servant = new ServiceImpl( ); POA rootPOA = POAHelper.narrow( orb.resolve_initial_references( "RootPOA" )); rootPOA.the_POAManager().activate(); rootPOA.activate_object( servant ); // STEP 4: Publish the INS Service using // orb.register_initial_reference( <ObjectKey>, <ObjectReference> // NOTE: Sun private internal API, not part of CORBA 2.3.1. // May move as our compliance with OMG standards evolves. ((com.sun.corba.se.internal.Interceptors.PIORB) orb). register_initial_reference( "PingService", rootPOA.servant_to_reference(servant) ); System.out.println( "INS Server is Ready..." ); // STEP 5: We are ready to receive requests orb.run( ); } catch ( Exception e ) { System.err.println( "Error in setup : " + e ); } } }
ServiceImpl.java
)Реализация в качестве примера, ServiceImpl, является реализацией интерфейса IDL Service.
Создайте файл ServiceImpl.java и добавьте следующий код:
ServiceImpl.java
// ServiceImpl.java // Copyright and License // Implementation of Service interface public class ServiceImpl extends ServicePOA { public void ping( ) { System.out.println( "PingService.ping called..." ); } }
INSClient.java
)Клиент приложения в качестве примера, который следует:
Создайте файл INSClient.java и добавьте следующий код:
INSClient.java
// INSClient.java // Copyright and License import org.omg.CORBA.ORB; public class INSClient { public static void main( String args[] ) { try { // STEP 1: Instantiate the ORB ORB orb = ORB.init( args, null ); // STEP 2: Resolve PingService using orb.resolve_initial_references() // In this example we have used -ORBInitRef argument to locate the // PingService. User can also choose to pass the corbaloc: url to // orb.string_to_object to resolve the published PingService // reference. org.omg.CORBA.Object object = orb.resolve_initial_references( "PingService" ); // STEP 3: Narrow the reference and we are ready to invoke method // on PingService. Service insService = ServiceHelper.narrow( object ); insService.ping( ); System.out.println( "The server has been pinged" ); } catch ( Exception e ) { System.err.println( "Exception in INSClient " + e ); e.printStackTrace( ); } } }
Выполняя этот пример, мы рекомендуем, чтобы Вы использовали номер порта, больше чем или равный 1024. Это - то, потому что следует стать корнем, чтобы запустить процесс на порту под 1024 при использовании программного обеспечения Соляриса. Свойство ORBPersistentServerPort сервера было установлено в 1060 в этом примере.
Изменитесь на каталог, который содержит файл Service.idl, и выполняет компилятор IDL к Java как показано ниже:
idlj -fall Service.idl
Следует использовать опцию -fall с компилятором idlj, чтобы генерировать и клиент и привязку серверной стороны. Для получения дополнительной информации по опциям idlj см. опции компилятора IDL к Java.
Файлы, сгенерированные компилятором idlj для Service.idl, с параметром командной строки -fall:
Скомпилируйте файлы .java, включая тупики и скелеты, следующим образом:
javac *.java
Запустите сервер INS:
java -classpath . INSServer
Если Сервер INS будет работать правильно, то следующее сообщение выведет на экран:
INS Server is Ready...
Откройте другое окно терминала или оболочку DOS и выполните клиентское приложение:
java -classpath . INSClient -ORBInitRef PingService=corbaloc:iiop:1.2@localhost:1060/PingService
Когда клиент будет выполнен с опцией -ORBInitRef, она будет в состоянии определить местоположение PingService. Следующее сообщение выводит на экран в клиентском окне:
The server has been pinged
И следующее сообщение выводит на экран в окне сервера:
PingService.ping called...
Когда Вы закончили это учебное руководство, убедиться, что завершили работу или уничтожили сервер INS. Чтобы сделать это от командной строки DOS, выберите окно, которое выполняет сервер, и введите Ctrl+C, чтобы завершить работу этого. Чтобы сделать это от оболочки Unix, откройте оболочку, которая выполняла клиент, и введите pkill INSServer.