|
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 упоминаются ниже. См., что , Раздел 3.6.4, для получения дополнительной информации о них API.
Эта работа принимает 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 class есть метод 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.