Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

IDL Java: Взаимодействующая Служба Именования (INS) Пример

Взаимодействующая Служба Именования (INS) является расширением службы CosNaming. Это обеспечивает следующие дополнительные функции:

Следующая схема показывает, как INS вписывается в ORBD:

ORBD



Ссылка на объект содержит по крайней мере три сведения: адрес, имя POA, который создал ссылку на объект, и Объектный ID.

Используя INS, можно обеспечить URL, чтобы получить доступ к объекту CORBA, который более читаем чем stringified Взаимодействующие Ссылки на объект (IOR). Следующие stringified форматы ссылки на объект позволяются:

API NamingContextExt

Интерфейс NamingContextExt, полученный из NamingContext, обеспечивает операции, требуемые использовать имена stringified и URL. Некоторые из API в NamingContextExt для того, чтобы преобразовать между CosNames, Именами Стринджифида, и URL упоминаются ниже. См., что COS Называет Спецификацию, Раздел 3.6.4, для получения дополнительной информации о них API.

Преобразования от URL до объектов обрабатываются org.omg.CORBA.ORB.string_to_object() как описано в CORBA 2.3 Спецификации, Раздел 13.6.6.

Следующие учебные руководства по IDL Java используют NamingContextExt:

Опции начальной загрузки для ШАРА

ШАР может быть сконфигурирован, чтобы возвратить дескриптор специализированной службы CORBA от resolve_initial_references(), используя любой ORBInitRef и/или ORBDefaultInitRef. Например,

Порядок разрешения, когда эти опции используются, следующие:

  1. Объекты зарегистрировались в register_initial_references
  2. -ORBInitRef
  3. -ORBDefaultInitRef
  4. Собственная Начальная загрузка (ШАРЫ Sun только)

Для получения дополнительной информации о INS, обратитесь к Спецификации Именования INS.


Пример INS: Публикация Ссылки, которая будет Получена доступ INS URL

Этот документ является общим обзором того, как создать полный 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( );
        }
    }
}
 

Создание и Выполнение Примера INS

Выполняя этот пример, мы рекомендуем, чтобы Вы использовали номер порта, больше чем или равный 1024. Это - то, потому что следует стать корнем, чтобы запустить процесс на порту под 1024 при использовании программного обеспечения Соляриса. Свойство ORBPersistentServerPort сервера было установлено в 1060 в этом примере.

Скомпилируйте Интерфейсное Определение

шагИзменитесь на каталог, который содержит файл Service.idl, и выполняет компилятор IDL к Java как показано ниже:

  idlj -fall  Service.idl

Следует использовать опцию -fall с компилятором idlj, чтобы генерировать и клиент и привязку серверной стороны. Для получения дополнительной информации по опциям idlj см. опции компилятора IDL к Java.

Файлы, сгенерированные компилятором idlj для Service.idl, с параметром командной строки -fall:

Скомпилируйте файлы Java

шаг Скомпилируйте файлы .java, включая тупики и скелеты, следующим образом:

   javac *.java 

Запустите Сервер INS

шагЗапустите сервер 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.


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами