Java IDL: 「Hello World」의 예 - xrath.com 에서 번역됨

# Java IDL: 「Hello World」의 예

## POA 모델과일시서버

이 문서는, 인터페이스를 정의하는 IDL (Interface Definiton Language)와 Stub 및 스켈리턴을 생성하는 Java IDL 컴파일러를 사용해, 완전한 CORBA (Common Object Request Broker Architecture) 어플리케이션을 작성하는 방법에 대해, 고레벨의 개요를 설명한 것입니다. 개발 프로세스와 IDL 를 사용해 CORBA 어플리케이션을 작성하는 튜토리얼의 자세한 것은,「Java IDL 입문:「Hello World」의 튜토리얼을 참조해 주세요. 또, Java 프로그램 언어로 인터페이스를 정의해 CORBA 어플리케이션을 작성할 수도 있습니다. 이 개발 프로세스의 상세와 튜토리얼에 대해서는,Java RMI-IIOP 문서를 참조해 주세요.

Java SE 의 이번 릴리스로 `idlj` 컴파일러를 사용해 생성한 서버측 구현은 Portable Servant Inheritance Model 로, POA 모델이라고도 불립니다. POA (휴대용 객체 어댑터)에 대해서는「휴대용 객체 어댑터」로 설명합니다. 이 문서에서는 `idlj` 컴파일러의 디폴트의 동작을 사용해 작성한 샘플 어플리케이션을 취급해, POA 서버측 모델을 사용합니다.

CORBA 는 IDL 인터페이스를 구현하는 서버측 매핑 가운데, 적어도 다음의 2 종류를 지원하고 있습니다.

- 상속 모델

  상속 모델을 사용해, 컴파일러가 작성한 스켈리턴의 확장도 실시하는 구현 클래스를 사용해, IDL 인터페이스를 구현합니다.

  상속 모델에게는, 다음의 것이 포함되어 있습니다.

  - OMG 표준의 POA. `My.idl` 내에서 `My` 인터페이스가 정의되고 있는 경우는,`idlj` 컴파일러로 `MyPOA.java` 라고 하는 파일이 생성됩니다. My 에 구현을 제공할 필요가 있어, 그것은 `MyPOA` 를 상속하고 있을 필요가 있습니다. 이것은 스트림 베이스의 스켈리턴으로,`org.omg.PortableServer.Servant` 를 확장한 것이어, 모든 POA 서번트 구현의 base class가 되어 있습니다.

  - ImplBase. `My.idl` 내에서 `My` 인터페이스가 정의되고 있는 경우는,`_MyImplBase.java` 라고 하는 파일이 생성됩니다. `My` 에 대해서 그 구현을 제공해, 이 구현은 `_MyImplBase` 로부터 상속하지 않으면 안됩니다.

    주: ImplBase 는 POA 모델이 있으므로 추천 되지 않습니다만, 버젼 1.3 이전의 J2SE 로 기술된 서버와 호환성을 가지기 위해서(때문에) 제공되고 있습니다. 이것은 비표준 모델이므로, 이것을 사용해 새로운 서버를 작성하는 것은 추천하지 않습니다.

- 위양 모델

  위양 모델을 사용해, 다음의 2 개의 클래스를 사용해 IDL 인터페이스를 구현합니다.

  - IDL 로 생성된 Tie 클래스. 컴파일러로 생성된 스켈리턴으로부터 상속됩니다만, 호출은 모두 구현 클래스에 위양 됩니다.
  - IDL 가 생성한 오퍼레이션 인터페이스 (`HelloOperations` 등)를 구현하는 클래스에서, 그것은 IDL 함수를 정의합니다.

  위양 모델은,Tie 모델이나 Tie 위양 모델로서도 알려져 있습니다. 이 모델은 POA 또는 ImplBase 컴파일러로 작성된 스켈리턴의 어느 쪽인지를 상속하므로, 이 문서에서는 POA/Tie 또는 ImplBase/Tie 모델과 같이 기술됩니다.

이 튜토리얼에서는, 서버측 구현의 POA 상속 모델을 취급합니다. 다른 서버측 구현을 사용하는 튜토리얼은, 다음의 문서를 참조해 주세요.

- Java IDL:POA/Tie 서버측 모델을 사용한 「Hello World」의 예

  Tie 모델은 위양 모델입니다. 서버측 바인딩을 처음으로 생성하는 경우는 `idlj` 를 사용합니다. 2 번째는 `-fallTie` 옵션을 사용해 `idlj` 컴파일러를 실행해, Tie 모델의 서버측 바인딩을 생성합니다. `Hello` 인터페이스에는,`HelloPOATie.java` 라고 하는 파일이 생성됩니다. `HelloPOATie` 의 생성자 은 `delegate` 와 `poa`, 또는 그 어느쪽이든을 인수로서 취합니다. `delegate` 와 `poa`, 또는 그 어딘가에 구현을 제공할 필요가 있습니다. 다만, 이 delegate 는,`HelloOperations` 인터페이스 이외에, 다른 클래스로부터 상속할 필요는 없습니다. 상세한 것에 대하여는,「IDL 와 Java 언어의 매핑」을 참조해 주세요.

  다른 구현으로부터 상속해야 하는 경우, 표준의 상속 모델은 아니고 Tie 모델을 사용하는 일이 있습니다. Java 의 경우는, 인터페이스의 상속의 개수에 제한은 없습니다만, 클래스의 상속에 사용할 수 있는 슬롯은 1 개 뿐입니다. 상속 모델을 사용했을 경우는, 그 슬롯이 점유 됩니다. Tie 모델을 사용했을 경우는, 그 슬롯이 사용되지 않고, 사용자가 독자적인 목적으로 사용할 수가 있습니다. 다만, 간접 참조의 레벨이 1 개 도입된다고 하는 결점이 있습니다. 즉, 메소드를 호출할 때 여분의 메소드 호출이 발생합니다.

- Java IDL:ImplBase 서버측 모델을 사용한 「Hellow World」의 예

  ImplBase 서버측의 모델은, POA 모델과 같이 상속 모델입니다. idlj 컴파일러에 `-oldImplBase` 플래그를 지정해 사용하는 것으로써, J2SE 1.4 보다 전의 버젼의 Java IDL 와 호환성이 있는 서버측 바인딩을 생성합니다. `Hello.idl` 로 정의된 인터페이스 `Hello` 가 있으면, 파일 `_HelloImplBase.java` 가 생성됩니다. `Hello` 에 대해서 구현을 제공할 필요가 있어, 게다가 이 구현은 `_HelloImplBase` 로부터 상속되고 있을 필요가 있습니다.

  `-oldImplBase` 플래그를 사용하는 것은 일반적이지는 않습니다. 이러한 API 는 추천 되고 있지 않습니다. 이 플래그를 사용하는 것은, J2SE 1.3 이전에 쓰여진 기존의 서버와의 호환성을 취하는 경우만입니다. 그 경우, 기존의 MAKEFILE 를 변경해 `idlj` 컴파일러에 `-oldImplBase` 플래그를 추가할 필요가 있습니다. 플래그를 추가하지 않는 경우, POA 베이스의 서버측 매핑이 생성됩니다.

이 문서에서는, 다음의 내용에 대해 설명합니다.

- 이 어플리케이션의코드예
- 단순한 「Hello World」프로그램의 IDL
- 객체를 작성하는서버 디폴트의 서버측 구현 (POA)을 사용하는 네임 서비스와 함께 객체를 발행하는 지속 서버
- 기존의 객체명의 객체 참조를 네이밍 서비스로부터 찾아, 그 객체를 호출하는어플리케이션 클라이언트
- 컴파일 방법과 실행 방법에 대한설명 례

이 예를 작성하려면 , 샘플 어플리케이션을 개발하는 장소로서 `hello/` 라는 이름의 디렉토리를 작성해, 각 파일을 이 디렉토리내에 작성합니다. 또는,코드예를 다운로드해, 샘플 어플리케이션의 디렉토리에 해동합니다.

## 인터페이스 정의 (`Hello.idl`)

CORBA 어플리케이션 작성의 제일 단계는, OMG 의 인터페이스 정의 언어 (IDL)를 사용해, 객체와 인터페이스를 모두 기술하는 것입니다. IDL 에는 C++ 를 닮은 구문이 있어, 이것을 사용해 모듈, 인터페이스, 데이터 구조등을 정의할 수가 있습니다. IDL 는 다양한 프로그램 언어에 매핑 할 수 있습니다. IDL 를 Java 에 매핑 하는 방법은「IDL 와 Java 언어의 매핑의 개요」로 설명하고 있습니다.

다음의 코드는 OMG IDL 로 기술된 것으로, CORBA 객체의 `sayHello()` 오퍼레이션이 캐릭터 라인 (string)을 반환 `shutdown()` 메소드가 ORB 를 지 그런데 있습니다. OMG IDL 의 구문과 시멘틱스의 자세한 것은, OMG 의 Web 사이트에서 CORBA Specification 의 제 3 장을 참조해 주세요.

Hello.idl

    module HelloApp
    {
      interface Hello
      {
      string sayHello();
      oneway void shutdown();
      };
    };

주: OMG IDL 로 코드를 기술하는 경우, 모듈명에 인터페이스명을 사용하지 말아 주세요. 모듈명에 인스턴스명을 사용하면(자), 다른 벤더의 툴을 사용한 컴파일 실행시에, 결과의 무결성이 유지되지 않게 되는 위험이 있습니다. 그 결과, 코드의 이식성이 손상됩니다. 예를 들어, 같은 이름을 포함한 코드를 Sun Microsystems 의 IDL-to-Java 컴파일러를 사용해 컴파일 하면(자), 1 개의 결과를 얻을 수 있습니다. 같은 코드를 다른 벤더의 IDL-to-Java 컴파일러를 사용해 컴파일 하면(자), 다른 결과가 되는 경우가 있습니다.

어플리케이션을 완성 지난에는, 서버 (`HelloServer.java`)와 클라이언트 (`HelloClient.java`)를 구현합니다.

## 서버의 구현 (`HelloServer.java`)

여기서 소개하는 서버는, 서번트와 서버의 2 개의 클래스로 구성됩니다 . 서번트인 `HelloImpl` 는, IDL 인터페이스 `Hello` 의 구현입니다. 즉,`Hello` 의 각 인스턴스는, `HelloImpl` 의 인스턴스에 의해 구현됩니다. 이 서번트는 `HelloPOA` 의 서브 클래스에서, 예제 IDL 로부터 `idlj` 컴파일러에 의해 생성됩니다. 서번트에게는, IDL 의 오퍼레이션 마다 1 개의 메소드가 포함됩니다. 이 예에서는 `sayHello()` 메소드와 `shutdown()` 메소드가 포함됩니다. 서번트 메소드는, Java 의 일반적으로의 메소드와 다르지 않습니다. ORB 관련 처리를 실시하는 코드는 인수나 결과의 정렬화등을 실시해, 스켈리턴으로 제공됩니다.

`HelloServer` 클래스에는 서버의 `main()` 메소드가 포함됩니다. 이 `main()` 메소드에서는, 다음의 처리를 실시합니다.

- ORB 의 인스턴스를 생성해 초기화한다
- 루트 POA 의 참조를 취득해,`POAManager` 를 기동한다
- 서번트의 인스턴스 (1 개의 CORBA `Hello` 객체의 구현)(을)를 생성해, 그것을 ORB 에게 전한다
- 네이밍 문맥의 CORBA 객체 참조를 취득해, 새로운 CORBA 객체를 등록한다
- 루트의 네이밍 문맥을 취득한다
- 새로운 객체를 「Hello」라고 하는 이름으로 네이밍 문맥에 등록한다
- 클라이언트로부터 새로운 객체가 불려 가는 것을 기다린다

이 예에서는, 일시 객체 서버의 예를 나타냅니다. 지속 객체 서버를 사용하는 「Hello World」프로그램의 예에 대해서는,「예 2:지속성을 갖춘 Hello World」를 참조해 주세요. CORBA 서버의 상세한 것에 대하여는,「서버의 개발」을 참조해 주세요.

코드의 자세한 것은, 튜토리얼의「Java IDL 입문 :Hello World 서버의 개발」을 참조해 주세요.

HelloServer.java

    // HelloServer.java
    // Copyright and License
    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 ...");

      }
    }

## 클라이언트 어플리케이션의 구현 (`HelloClient.java`)

이 어플리케이션 클라이언트에서는, 다음의 처리를 실시합니다.

- ORB 를 생성해 초기화한다
- 루트 네이밍 문맥에의 참조를 취득한다
- 네이밍 문맥으로부터 「Hello」를 찾아, 그 CORBA 객체에의 참조를 받는다
- 객체의 `sayHello()` 및 `shutdown()` 오퍼레이션을 호출해, 결과를 출력한다

코드의 자세한 것은, 튜토리얼의「Java IDL 입문:클라이언트 어플리케이션의 개발」을 참조해 주세요.

HelloClient.java

    // Copyright and License

    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);
    	  }
        }

    }

## 「Hello World」의 구축 방법과 실행 방법

「Hello World」프로그램은 단순합니다만, 이 프로그램을 통해,「정적 호출」을 사용하는 CORBA 프로그램의 개발에 필요한 작업 모든 것을 배워, 경험할 수가 있습니다. 정적 호출의 경우, 호출용으로 클라이언트 Stub를 사용해, 불려 가는 서비스용으로 서버 스켈리턴을 사용합니다. 컴파일시에 객체의 인터페이스를 알 수 있는 경우는, 정적 호출을 사용합니다. 컴파일시에 인터페이스가 불명한 경우는,동적 호출을 사용할 필요가 있습니다.

이 예에서는 네임 서비스가 필요합니다. 네임 서비스란, 객체 참조에 이름을 바인드 해 CORBA 객체에 명명할 수가 있는 CORBA 서비스입니다. 「네임 바인딩」은 네임 서비스에 포함되어 클라이언트는 이름을 주어 목적의 객체 참조를 취득할 수 있습니다. 이번 릴리스 된 Java SE 에 동고 되고 있는 2 개의 네임 서비스 가운데, 1 개는, demon 프로세스인 `orbd` 로, bootstrap 서비스, 일시 네임 서비스, 지속 네임 서비스, 및 서버 매니저가 포함되어 있습니다. 이제(벌써) 1 개(살)은, 일시 네임 서비스인 `tnameserv` 로, 하위 호환성을 유지하기 위해서 준비되어 있습니다. 이 예에서는 `orbd` 를 사용합니다.

이 예를 실행하기에 즈음해, Solaris 소프트웨어의 사용시는, 포트 1024 미만으로 프로세스를 개시하는 경우, root 사용자가 될 필요가 있습니다. 이 때문에, 1024 이상의 포트를 사용하는 것을 추천합니다. 이 예에서는,`-ORBInitialPort` 옵션을 사용해 디폴트의 포트 번호를 오버라이드(override) 합니다. 다음의 설명에서는, Java IDL Object Request Broker Daemon (`orbd`)용으로 포트 1050 을 사용할 수 있는 것을 전제로 하고 있습니다. 필요하면 다른 포트로 변경해 주세요. Windows 로 이 예를 실행하는 경우는, 경로명에 backslash (\)를 사용합니다.

개발 머신으로 이 클라이언트서버 어플리케이션을 실행하려면 , 다음과 같이 합니다.

1. `Hello.idl` 파일이 놓여져 있는 디렉토리로 이동합니다.

2. IDL 파일로부터 IDL-to-Java 컴파일러 `idlj` 를 실행해, Stub와 스켈리턴을 작성합니다. 이 순서는, java/bin 디렉토리의 패스를, 사용하는 패스에 포함하고 있는 것을 전제로 하고 있습니다.

         idlj -fall  Hello.idl

   `idlj` 컴파일러의 `-fall` 옵션을 사용해, 클라이언트와 서버측의 바인딩의 양쪽 모두를 생성할 필요가 있습니다. 이 커멘드행으로 디폴트의 서버측 바인딩이 생성됩니다. 이것은 POA 상속 서버측 모델인 것을 전제로 하고 있습니다. `idlj` 옵션의 상세한 것에 대하여는,「IDL-to-Java 컴파일러의 옵션」을 참조해 주세요.

   `idlj` 컴파일러에서는 다수의 파일이 생성됩니다. 실제로 생성되는 파일의 수는, IDL 파일의 컴파일시에 선택된 옵션에 따라서 다릅니다. 생성된 파일에는 표준의 기능이 있으므로, 프로그램을 배치해 실행할 때까지는 무시해도 괜찮습니다. `Hello.idl` 의 `idlj` 컴파일러로, 커멘드행의 `-fall` 옵션을 사용해 생성되는 파일은 다음과 같습니다.

   - `HelloPOA.java`

     이 추상 클래스는, 스트림 베이스의서버 스켈리턴으로, 서버용으로 기본적인 CORBA 기능을 제공합니다. 이것은 `org.omg.PortableServer.Serva nt` 를 상속해,`InvokeHandler` 인터페이스와 `HelloOperations` 인터페이스를 구현합니다. 서버 클래스 `HelloImpl` 는 `HelloPOA` 를 상속합니다.

   - `_HelloStub.java`

     이 클래스는「클라이언트 Stub」로, 클라이언트용으로 기본적인 CORBA 기능을 제공합니다. 이것은 `org.omg.CORBA.portable.ObjectImpl` 를 상속해,`Hello.java` 인터페이스를 구현합니다.

   - `Hello.java`

     이 인터페이스에는 작성한 IDL 인터페이스의 Java 판이 포함됩니다. Hello.java 인터페이스는 표준적인 CORBA 객체 기능을 주는 `org.omg.CORBA.Object` 인터페이스를 상속합니다. 또 `HelloOperations` 인터페이스 및 `org.omg.CORBA.portable.IDLEntity` 도 상속합니다.

   - `HelloHelper.java`

     이 클래스는 보조 기능, 특히 CORBA 객체 참조를 적절한 형태에 캐스트 하는 `narrow()` 메소드를 제공합니다. Helper 클래스는 CORBA 스트림에의 데이터형의 입출력과`Any` 의 데이터형의 삽입과 추출을 취급합니다. Holder 클래스는, Helper 클래스의 메소드에 입출력을 위양 합니다.

   - `HelloHolder.java`

     이 final 클래스에는,`Hello` 형의 퍼블릭 인스턴스 멤버가 들어옵니다. IDL 형의 파라미터가 `out` 또는 `inout` 이면 Holder 클래스가 사용됩니다. 여기에서는,`org.omg.CORBA.portable.OutputStream` 및 `org.omg.CORBA.portable.InputStream` 인수에 대한 오퍼레이션이 규정됩니다. 이러한 인수는 CORBA 에는 존재합니다만, Java 의 시멘틱스에는 간단하게 매핑 할 수 없습니다. Holder 클래스는 Helper 클래스의 메소드에 입출력을 위양 합니다. Holder 클래스는 `org.omg.CORBA.portable.Streamable` 를 구현합니다.

   - `HelloOperations.java`

     이 인터페이스에는 `sayHello()` 메소드 및 `shutdown()` 메소드가 포함됩니다. IDL-to-Java 매핑은, IDL 인터페이스로 정의된 오퍼레이션을 모두 이 파일에 짜넣어, Stub와 스켈리턴으로 공유합니다.

3. `HelloApp` 디렉토리에 있는 Stub와 스켈리턴도 포함해`. java` 파일을 컴파일 합니다. 이 순서는, java/bin 디렉토리가 실행 패스에 포함되어 있는 것을 전제로 하고 있습니다.

          javac *. java HelloApp/*.java

4. `orbd` 를 기동합니다.

   UNIX 커멘드 쉘로 `orbd` 를 기동하려면 , 다음과 같이 입력합니다.

         orbd -ORBInitialPort 1050&

   Windows 의 MS-DOS system prompt에서는, 다음과 같이 입력합니다.

         start orbd -ORBInitialPort 1050

   `1050` 은 네임서버-를 실행하는 포트입니다. `-ORBInitialPort` 는 필요한 커멘드행의 인수입니다. Solaris 소프트웨어의 사용시는, 1024 보다 작은 포트로 프로세스를 개시하는 경우는, root 사용자가 될 필요가 있습니다. 이 때문에, 1024 이상의 포트를 사용하는 것을 추천합니다.

   이 프로그램을 2 대의 머신으로 실행하는 경우의 예는,「2 대의 머신으로 실행하는 Hello World 프로그램」을 참조해 주세요.

5. Hello 서버를 기동합니다.

   UNIX 커멘드 쉘로 Hello 서버를 기동하려면 , 다음과 같이 입력합니다.

         java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost&

   Windows 의 MS-DOS system prompt에서는, 다음과 같이 입력합니다.

         start java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost

   서버가 기동하면(자),`HelloServer ready and waiting...` (이)라고 표시됩니다.

   이 예의 `-ORBInitialHost localhost` 는 생략 할 수가 있습니다. 네임서버-가 Hello 서버로서 동일 호스트상에서 동작하고 있기 때문입니다. 네임서버-가 다른 호스트로 동작하고 있는 경우는, IDL 네임서버-가 동작하고 있는 호스트를 `-ORBInitialHost` nameserverhost 로 지정합니다.

   전회의 순서와 같게 네임서버- (`orbd`)의 포트를 지정합니다. 예를 들어 `-ORBInitialPort 1050` 과 같이 됩니다.

6. 클라이언트 어플리케이션을 실행합니다.

         java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

   클라이언트가 실행되면(자), 예를 들어 다음과 같은 응답이 단말에 표시됩니다. `Obtained a handle on server object: IOR: (binary code) Hello World! HelloServer exiting...`

   이 예의 `-ORBInitialHost localhost` 는 생략 할 수가 있습니다. 네임서버-가 Hello 클라이언트로서 동일 호스트상에서 동작하고 있기 때문입니다. 네임서버-가 다른 호스트로 동작하고 있는 경우는, IDL 네임서버-가 동작하고 있는 호스트를 `-ORBInitialHost` nameserverhost 로 지정합니다.

   전회의 순서와 같게 네임서버- (`orbd`)의 포트를 지정합니다. 예를 들어 `-ORBInitialPort 1050` 과 같이 됩니다.

이 튜토리얼을 종료하면(자), 네임서버- (`orbd`) 지 하든가 종료해 주세요. DOS prompt에서는, 서버를 실행하고 있는 윈도우를 선택해 `Ctrl+C` 라고 입력하면(자) 정지합니다. UNIX 쉘에서는, 프로세스를 검출해 종료 (kill)합니다. 서버를 명시적으로 정지할 때까지는, 호출 대기 상태가 계속됩니다.

「2 대의 머신으로 실행하는 Hello World 프로그램」 에서는, 클라이언트와 서버라고 하는 2 대의 머신으로 간단한 어플리케이션을 분산시키는 방법의 일례를 나타냅니다.

홈

Copyright © 1995-2004 Sun Microsystems, Inc. All Rights Reserved.