전자 문서 Docflow 작업을 위한 기술입니다. 글로벌 시스템 내의 글로벌 DocFlow



보고서에는 다음이 포함되어야 합니다.

    잘 작동하는 프로그램으로 해결된 문제에 대한 설명입니다.

    모든 프로그램 기능의 인터페이스에 대한 설명이 포함된 디버깅된 프로그램의 사용자 매뉴얼입니다.

    필요한 설명이 포함된 프로그램 목록.

  1. 보안 질문

          CORBA란 무엇입니까?

          무슨 일이야? IDL? 그것은 무엇을 위한 것입니까?

          클라이언트와 서버는 어떻게 상호 작용합니까?코르바?

          그들 사이에 데이터가 어떻게 전송됩니까?

          네임서버란 무엇입니까?

          시작 방법 코르바섬기는 사람?

  1. 문학

    켄 아놀드, 제임스 고슬링, 데이비드 홈즈.Java™ 프로그래밍 언어.

    공식 홈페이지자바http:// 자바. . com/ (교과서와 함께 러시아어 섹션이 있습니다).

    Java™ 2 SDK, Standard Edition 설명서 - http://java.sun.com/products/jdk/1.5/index.html.

    제임스 고슬링, 빌 조이, 가이 스틸.언어 사양자바 ( 자바 언어 사양 http :// www . 자바소프트 . com / 문서 / 서적 / jls /). 러시아어로 번역 –http:// www. 유니- 볼로그다. 교류. / 자바/ jls/ 색인. HTML

    공식 프로젝트 웹사이트http:// www. . 조직/.

  1. 부록 1. 코르바

기술 코르바 (흔한물체요구브로커건축학)은 컨소시엄에서 제안하는 분산 애플리케이션 작성 표준입니다.어머나 (열려 있는관리그룹). 예를 들어 CORBA 객체를 생성하면 많은 양의 계산이 필요한 문제를 해결하는 데 필요한 시간을 크게 줄일 수 있습니다. 이는 CORBA 객체를 다른 시스템에 배치함으로써 가능합니다. 각 원격 개체는 특정 하위 작업을 해결하여 클라이언트의 불필요한 작업을 덜어줍니다.

CORBA의 핵심은 객체 요청 브로커(Object Request Broker)입니다. ORB는 분산 네트워크 환경에서 개체의 상호 작용을 관리합니다. IIOP(Internet Inter-ORB Protocol)는 ORB 간의 상호 작용을 위한 특수 프로토콜입니다.

클라이언트 주소 공간의 기능 특별한 물건, 스텁이라고 합니다. 클라이언트로부터 요청을 받은 후 요청 매개변수를 특수 형식으로 압축하여 서버나 스켈레톤으로 전송합니다.

스켈레톤은 서버 주소 공간에서 작동하는 개체입니다. 클라이언트로부터 요청을 받으면 압축을 풀어 서버로 보냅니다. 스켈레톤은 또한 서버의 응답을 변환하여 클라이언트(스텁)에 전달합니다.

Java 기술을 사용하여 CORBA 애플리케이션을 작성하려면 JDK1.5 패키지와 idlj 컴파일러(…\ jdk 1.5.0\ 큰 상자\ idlj. exe). JDK는 CORBA 객체 작업을 위한 클래스 세트를 제공하고 idlj는 IDL 언어를 Java에 매핑합니다.

6 .1 간단한 CORBA 애플리케이션 생성

      1. 인터페이스 작성

창조 코르바응용 프로그램 자바인터페이스 설명 언어(인터페이스정의언어, IDL).

만들어 보자파일안녕하세요.idl

모듈 HelloApp

인터페이스 안녕하세요

문자열 sayHello();

단방향 무효 종료();

이 인터페이스는 두 가지 방법만 설명합니다.일시 휴업그리고 안녕하세요 . 또한 이러한 메서드가 무엇을 하는지는 중요하지 않습니다. 가장 중요한 것은 해당 메서드가 존재하는지 확인하고 해당 메서드에 어떤 입력 및 출력 매개변수가 있는지 확인하는 것입니다.

다음으로 컴파일러를 실행해야 합니다.IDL- 에게- 자바idlj:

idlj – 떨어지다안녕하세요. 유휴

현재 디렉터리에 새 폴더가 나타났습니다.안녕하세요 , 여기에는 6개의 Java 파일이 포함되어 있습니다. 그들 각각은 고유한 목적을 가지고 있습니다.

    안녕하세요POA. 자바자바– 서버 뼈대에 불과한 추상 클래스(해골) 및 서버 기능을 제공합니다.

    _ 안녕하세요스텁. 자바– 구현하는 클래스스텁( 그루터기) 고객. 제공클라이언트 기능.

    안녕하세요헬퍼. 자바그리고 안녕하세요홀더. 자바– 도우미 기능을 제공하는 클래스코르바사물.

    안녕하세요운영. 자바– 인터페이스에 대한 설명이 포함된 클래스안녕하세요언어로 자바.

    안녕하세요. 자바– 클래스 – 상속인안녕하세요운영, 지원 인터페이스조직. 어머나. 코르바. 물체.

      1. 서버 생성

이제 우리의 임무는 인터페이스를 구현하는 클래스를 작성하는 것입니다.안녕하세요 . 우리의 경우에는안녕하세요Impl . 클래스의 후손이라는 점에 유의하세요.안녕하세요POA . 안에 안녕하세요Impl 선언된 메서드안녕하세요 . 유휴 .

작업을 단순화하기 위해 파일에서 메서드 선언을 가져올 수 있습니다. 안녕하세요운영 . 자바 , 생성됨 jdlj .

사적인 ORB 오브;

orb = orb_val;

공개 문자열 sayHello() (

return "\n안녕하세요!!\n";

공공 무효 종료() (

orb.shutdown(false);

다음 단계는 실제 제품을 만드는 것입니다.응용 프로그램의 서버 부분. 이건 수업이겠지HelloServer.

방법은 단 하나뿐입니다. 표준 기능 기본.

우리가 가장 먼저 하는 일은 ORB를 생성하는 것입니다. 그런 다음 원격 개체 클래스의 인스턴스를 만듭니다(안녕하세요Impl) ORB에 등록합니다. 다음으로 전화해 특별 서비스이름(NameService)을 지정하고 클라이언트가 찾을 수 있도록 원격 개체의 이름을 등록합니다.

이 단계를 자세히 살펴보겠습니다.

1. ORB 생성 및 초기화. 정적 메서드를 호출하여 생성됨초기화 ORB 클래스

2. 원격 객체 클래스의 인스턴스를 생성하고 이를 ORB에 등록

helloImpl.setORB(orb);

3. 명명 컨텍스트 가져오기 (네이밍컨텍스트)

org.omg.CORBA. 객체 objRef =

첫 번째 줄에서는 이름 서비스(NameService)에 대한 개체 참조를 얻습니다. 그러나 실제로 이것은 일반적인 CORBA 객체이며 이를 명명 컨텍스트(NamingContext)로 사용하려면 다음 메서드를 호출해야 합니다.좁은수업 NamingContextHelper , 이 CORBA 객체를 지정하는 것 같습니다.

4. 원격 개체의 이름을 등록합니다(안녕하세요Impl)

문자열 이름 = "안녕하세요";

NCRef. 리바인드 (, href);

클라이언트가 원격 개체를 찾을 수 있도록 이름이 등록됩니다. 이 목적은 다음 기능에 의해 제공됩니다.리바인드 (이름구성요소엔씨, 물체객체) 인터페이스 명명 컨텍스트.

5. 클라이언트의 요청을 기다리는 중

구. 달리다();

이제 서버를 사용할 준비가 되었습니다.

// HelloServer.java

HelloApp.* 가져오기;

org.omg를 가져옵니다. 코스네이밍.*;

import org.omg.CORBA.*;

org.omg를 가져옵니다. PortableServer.*;

org.omg를 가져옵니다. PortableServer.POA;

java.util을 가져옵니다. 속성;

HelloImpl 클래스는 HelloPOA를 확장합니다(

개인 ORB 오브;

공공 무효 setORB(ORB orb_val) (

orb = orb_val;

// sayHello() 메소드 구현

공개 문자열 sayHello() (

return "\n안녕하세요!!\n";

// shutdown() 메소드 구현

공공 무효 종료() (

orb.shutdown(false);

공개 클래스 HelloServer(

공개 정적 무효 메인(문자열 인수)(

노력하다 (

ORB 오브 = ORB.init(args, null);

// rootpoa에 대한 참조를 얻고 POAManager를 활성화합니다.

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

rootpoa.the_POAManager().activate();

// 서번트를 생성하고 ORB에 등록합니다.

HelloImpl helloImpl = new HelloImpl();

helloImpl.setORB(orb);

// 서번트로부터 객체 참조를 얻습니다.

org.omg.CORBA. 객체 참조 = rootpoa.servant_to_reference(helloImpl);

안녕하세요 href = HelloHelper.narrow(ref);

// NameService는 이름 서비스를 호출합니다.

orb.resolve_initial_references("NameService");

// Interoperable의 일부인 NamingContextExt를 사용합니다.

// INS(네이밍 서비스) 사양입니다.

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// 이름 지정에서 객체 참조를 바인딩합니다.

문자열 이름 = "안녕하세요";

NameComponent 경로 = ncRef.to_name(이름);

ncRef.rebind(경로, href);

System.out.println("HelloServer 준비 및 대기 중...");

// 클라이언트의 호출을 기다립니다.

orb.run();

잡기 (예외 e) (

System.err.println("오류:" + e);

System.out.println("HelloServer 종료 중...");

      1. 클라이언트 생성

클라이언트를 위한 코드 작성으로 넘어가겠습니다.

클라이언트 애플리케이션 작성을 위한 기본 단계

    ORB 생성 및 초기화

    이름 서비스 컨텍스트 가져오기(명명 컨텍스트)

    원격 개체 찾기

    sayHello 메소드를 호출합니다.

    종료 메소드를 호출합니다.

보시다시피 처음 두 지점은 서버 응용 프로그램을 만드는 단계와 일치하므로 고려하지 않겠습니다.

세 번째 요점도 구현하기가 매우 간단합니다. 객체가 생성됩니다이름구성요소. 메소드가 호출됩니다.해결하다 (이름구성요소), 이름으로 원격 개체를 검색합니다(표준코르바물체). 방법 사용좁은 (조직. 어머나. 코르바. 물체객체) 수업 안녕하세요헬퍼(생성idlj컴파일러) 인터페이스에 대한 객체 참조를 얻습니다.안녕하세요.

문자열 이름 = "안녕하세요";

이제 메소드를 호출할 수 있습니다.안녕하세요:

방법일시 휴업서버를 종료합니다.

helloImpl.shutdown();

//testClient.java

HelloApp.* 가져오기;

org.omg를 가져옵니다. 코스네이밍.*;

org.omg를 가져옵니다. 코스네이밍. NamingContextPackage.*;

import org.omg.CORBA.*;

공개 클래스 HelloClient

{

정적 안녕하세요 helloImpl;

공개 정적 무효 메인(문자열 인수)

{

노력하다 (

// ORB 생성 및 초기화

ORB 오브 = ORB.init(args, null);

// 루트 명명 컨텍스트를 가져옵니다.

org.omg.CORBA. 객체 objRef =

orb.resolve_initial_references("NameService");

// NamingContext 대신 NamingContextExt를 사용합니다. 이것은

// 상호 운용 가능한 명명 서비스의 일부입니다.

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// 이름 지정에서 객체 참조를 해결합니다.

문자열 이름 = "안녕하세요";

helloImpl = HelloHelper.narrow(ncRef.resolve_str(이름));

System.out.println("서버 객체에 대한 핸들을 얻었습니다:" + helloImpl);

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

helloImpl.shutdown();

) 잡기 (예외 e) (

System.out.println("오류:" + e);

e.printStackTrace(System.out);

}

}

}

      1. 편집 그리고 시작하다 애플리케이션

파일HelloServer. 자바 그리고 안녕하세요클라이언트. 자바, 안녕하세요. 유휴및 폴더헬로앱, 생성됨idkj. exe하나의 폴더에 저장해야 합니다.

클라이언트와 서버를 컴파일하려면 다음을 수행해야 합니다. 명령줄다이얼

javac *.java HelloApp/*.java

javac. exe다음 위치에 있습니다...\jdk1.5.0\ 큰 상자.

수요일실행을 허용하지 않습니다코르바응용 프로그램. 시작하려면

1. 서비스 시작구체물체 요구 브로커 악마 (…\ jdk1.5.0\ 큰 상자\ 구체. exe). 이는 이름 지정 서비스에 대한 참조를 얻을 수 있도록 수행됩니다.

시작 구체ORB초기 포트 1050

매개변수 -ORB초기 포트– 네임서버가 동작할 포트 번호.

2. 시작하다 서버

네임서버.

3. 시작하다 고객

이름 서버가 실행 중인 포트를 지정합니다. 매개변수 – ORBInitialHost는 실행되는 호스트를 지정합니다.네임서버.

간편한 컴파일 및 실행을 위해 다음을 만들 수 있습니다.박쥐파일:

idlj – 가을 Hello.idl

javac *.java HelloApp/*.java

java HelloServer 시작 – ORBInitialPort 1050 – ORBInitialHost localhost

자바 HelloClient – ​​​​ORBInitialPort 1050 – ORBInitialHost localhost


6.2 IDL 언어

언어어머나 IDL (인터페이스 정의 언어– 인터페이스 설명 언어)는 개체 인터페이스를 설명하기 위한 기술 독립적인 구문입니다. 소프트웨어 아키텍처를 설명할 때,어머나 IDL정보 시스템의 다른 구성 요소와 관련된 동작을 결정하는 객체의 경계를 정의하기 위한 보편적인 표기법으로 훌륭하게 사용됩니다.어머나 IDL인터페이스를 설명할 수 있습니다. 다양한 방법그리고 속성. 언어는 또한 인터페이스 상속을 지원합니다. 재사용확장 또는 사양의 가능성이 있는 개체.

IDL순전히 선언적 언어입니다. 즉, 구현이 포함되어 있지 않습니다.IDL사양은 프로그래머가 직접 사용할 수 있는 헤더 파일과 특수 서버 프로토타입으로 컴파일(표시)될 수 있습니다. 즉IDL매핑이 존재하는 모든 언어로 특정 메소드를 작성하고 실행할 수 있습니다.IDL. 이러한 언어에는 다음이 포함됩니다.기음, 기음++, 스몰톡, 파스칼, 자바, 에이다.

사용하여IDL입력 및 출력 매개 변수에 대한 설명과 함께 구성 요소의 속성, 상속하는 상위 클래스, 발생한 예외, 마지막으로 인터페이스를 정의하는 메서드를 설명할 수 있습니다.

구조코르바 IDL파일은 다음과 같습니다:

기준 치수(

;

;

;

인터페이스 [: ] (

;

;

;

;

()

.

.

()

.

.

}

인터페이스 [: ]

.

.

}

언어 구문IDL꽤 방대해서 교육 매뉴얼에 설명하는 것이 불가능합니다.

인터페이스를 구현하려면 메일 서버보완할 수 있다안녕하세요. 유휴

모듈 HelloApp

{

구조체 TMessage

{

문자열 대상;

문자열 보낸 사람;

문자열 메시지;

};

typedef 시퀀스 TMessages;

인터페이스 안녕하세요

{

TMessages GetMessages(문자열 이름, 짧은 개수);

단방향 void Send(문자열 Client, 문자열 Name, 문자열 Message);

문자열 sayHello();

단방향 무효 종료();

};

};

typedef 시퀀스 TMessage; 발표 유형 동적 정렬 메시지TMessage.

데이터 부록에 제시된 이론적 자료를 숙지하세요. 방법론적 지침그리고 프로그램 예시. 과제의 텍스트를 읽어보세요 실험실 작업, 랩 할당 요구 사항을 충족하는 구성 요소 배치 및 기능을 제안하고 프로그램을 작성합니다.

2. 연구실 배정

이메일 클라이언트와 서버를 개발합니다. 클라이언트는 서버에서 메시지를 보내고 받을 수 있는 창 응용 프로그램입니다. 서버의 클라이언트 식별, 메시지 전송 프로토콜은 학생의 재량에 달려 있습니다.

서버는 콘솔 애플리케이션일 수 있습니다. 메시지를 저장할 수 있습니다. 텍스트 파일. 서버를 멀티스레드로 만드는 것이 좋습니다.

클라이언트와 서버 간에 상호 작용하려면 CORBA 기술을 사용하십시오.

추가적으로, Java가 아닌 서버나 클라이언트를 구현하는 것이 제안되었습니다.

3. 보고서 내용

보고서에는 다음이 포함되어야 합니다.

1. 잘 작동하는 프로그램으로 해결된 문제에 대한 설명입니다.

2. 모든 프로그램 기능의 인터페이스에 대한 설명이 포함된 디버깅된 프로그램의 사용자 매뉴얼.

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 설명서 - http://java.sun.com/products/jdk/1.5/index.html.

4. 제임스 고슬링, 빌 조이, 가이 스틸. Java 언어 사양 – 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(Common Object Request Broker Architecture) 기술은 OMG(Open Management Group) 컨소시엄에서 제안한 분산 애플리케이션 작성 표준입니다. 예를 들어 CORBA 객체를 생성하면 많은 양의 계산이 필요한 문제를 해결하는 데 필요한 시간을 크게 줄일 수 있습니다. 이는 CORBA 객체를 다른 시스템에 배치함으로써 가능합니다. 각 원격 개체는 특정 하위 작업을 해결하여 클라이언트의 불필요한 작업을 덜어줍니다.

CORBA의 핵심은 객체 요청 브로커(Object Request Broker)입니다. ORB는 분산 네트워크 환경에서 개체의 상호 작용을 관리합니다. IIOP(Internet Inter-ORB Protocol)는 ORB 간의 상호 작용을 위한 특수 프로토콜입니다.

스텁이라는 특수 개체가 클라이언트의 주소 공간에서 작동합니다. 클라이언트로부터 요청을 받은 후 요청 매개변수를 특수 형식으로 압축하여 서버나 스켈레톤으로 전송합니다.

스켈레톤은 서버 주소 공간에서 작동하는 개체입니다. 클라이언트로부터 요청을 받으면 압축을 풀어 서버로 보냅니다. 스켈레톤은 또한 서버의 응답을 변환하여 클라이언트(스텁)에 전달합니다.

Java 기술을 사용하여 CORBA 애플리케이션을 작성하려면 JDK1.5 패키지와 idlj 컴파일러(...\jdk1.5.0\bin\idlj.exe)라는 두 가지가 필요합니다. JDK는 CORBA 객체 작업을 위한 클래스 세트를 제공하고 idlj는 IDL 언어를 Java에 매핑합니다.

6.1 간단한 CORBA 애플리케이션 생성

6.1.1 인터페이스 작성

Java에서 CORBA 애플리케이션 작성은 IDL(인터페이스 정의 언어)을 사용하여 원격 객체에 대한 인터페이스를 작성하는 것부터 시작됩니다.

hello.idl 파일을 생성해보자

모듈 HelloApp(인터페이스 Hello(string sayHello();oneway void shutdown();););

이 인터페이스는 종료 및 종료라는 두 가지 방법만 설명합니다. 안녕하세요. 또한 이러한 메서드가 무엇을 하는지는 중요하지 않습니다. 가장 중요한 것은 해당 메서드가 존재하는지 확인하고 해당 메서드에 어떤 입력 및 출력 매개변수가 있는지 확인하는 것입니다.

idlj – 가을 Hello.idl

현재 디렉터리에 새 폴더가 나타났습니다. 안녕하세요 , 여기에는 6개의 Java 파일이 포함되어 있습니다. 그들 각각은 고유한 목적을 가지고 있습니다.

· HelloPOA.java java는 서버 뼈대(skeleton)에 지나지 않으며 서버 기능을 제공하는 추상 클래스입니다.

· _HelloStub.java – 클라이언트 스텁을 구현하는 클래스입니다. 클라이언트 기능을 제공합니다.

· HelloHelper.java 및 HelloHolder.java는 CORBA 객체에 대한 도우미 기능을 제공하는 클래스입니다.

· HelloOperations.java – Java의 hello 인터페이스에 대한 설명이 포함된 클래스입니다.

· Hello.java – HelloOperations의 후속 클래스로 org.omg.CORBA 인터페이스를 지원합니다. 물체.

6.1.2 서버 생성

이제 우리의 임무는 인터페이스를 구현하는 클래스를 작성하는 것입니다. 안녕하세요. 우리의 경우에는 안녕하세요Impl. 클래스의 상속자라는 점에 유의하세요. 안녕하세요POA. 안에 안녕하세요Impl선언된 메서드 안녕하세요 . 유휴 .

작업을 단순화하기 위해 파일에서 메서드 선언을 가져올 수 있습니다. 안녕하세요운영 . 자바 , 생성됨 jdlj .

HelloImpl 클래스는 HelloPOA를 확장합니다(비공개 ORB orb; public void setORB (ORB orb_val) (orb = orb_val;) // sayHello() 구현 methodpublic String sayHello() (return "\nHello world!!\n";) // 종료 구현 () methodpublic void shutdown() (orb.shutdown(false);))

다음 단계는 애플리케이션의 실제 서버 측을 생성하는 것입니다. 이는 HelloServer 클래스가 됩니다.

표준 main 함수라는 단 하나의 메소드만 갖습니다.

우리가 가장 먼저 하는 일은 ORB를 생성하는 것입니다. 그런 다음 원격 객체 클래스(HelloImpl)의 인스턴스를 생성하고 이를 ORB에 등록합니다. 다음으로 특수 이름 서비스(NameService)를 호출하고 클라이언트가 찾을 수 있도록 원격 개체의 이름을 등록합니다.

이 단계를 자세히 살펴보겠습니다.

1. ORB 생성 및 초기화. 정적 메서드를 호출하여 생성됨 초기화 ORB 클래스

2. 원격 객체 클래스의 인스턴스를 생성하고 이를 ORB에 등록

helloImpl.setORB(orb);

3. 명명 컨텍스트 가져오기(NamingContext)

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

첫 번째 줄에서는 이름 서비스(NameService)에 대한 개체 참조를 얻습니다. 그러나 실제로 이것은 일반적인 CORBA 객체이며 이를 명명 컨텍스트(NamingContext)로 사용하려면 다음 메서드를 호출해야 합니다. 좁은수업 NamingContextHelper, 이 CORBA 객체를 지정하는 것 같습니다.

4. 원격 객체 이름 등록(HelloImpl)

문자열 이름 = "안녕하세요";

ncRef.rebind(경로, href);

클라이언트가 원격 개체를 찾을 수 있도록 이름이 등록됩니다. NamingContext 인터페이스의 리바인드(NameComponent nc, Object obj) 기능이 이 목적을 수행합니다.

5. 클라이언트의 요청을 기다리는 중

이제 서버를 사용할 준비가 되었습니다.

// HelloServer.javaimport HelloApp.*;import org.omg. CosNaming.*;import org.omg. 코스네이밍. NamingContextPackage.*;import org.omg.CORBA.*;import org.omg. PortableServer.*;import org.omg. PortableServer.POA;java.util을 가져옵니다. Properties;class HelloImpl은 HelloPOA를 확장합니다 (private ORB orb;public void setORB (ORB orb_val) (orb = orb_val;) // sayHello() 메소드 구현public String sayHello() (return "\nHello world!!\n";) // shutdown() 메소드 구현public void shutdown() (orb.shutdown(false);))

공개 클래스 HelloServer(

공개 정적 무효 메인(문자열 인수)(

// ORB 생성 및 초기화

ORB 오브 = ORB.init(args, null);

// rootpoa에 대한 참조를 얻고 POAManager를 활성화합니다.

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

rootpoa.the_POAManager().activate();

// 서번트를 생성하고 ORB에 등록합니다.

HelloImpl helloImpl = new HelloImpl();

helloImpl.setORB(orb);

// 서번트로부터 객체 참조를 얻습니다.

org.omg.CORBA. 객체 참조 = rootpoa.servant_to_reference(helloImpl);

안녕하세요 href = HelloHelper.narrow(ref);

// 루트 명명 컨텍스트를 가져옵니다.

// NameService는 이름 서비스를 호출합니다.

org.omg.CORBA. 객체 objRef =

orb.resolve_initial_references("NameService");

// Interoperable의 일부인 NamingContextExt를 사용합니다.

// INS(네이밍 서비스) 사양입니다.

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// 이름 지정에서 객체 참조를 바인딩합니다.

문자열 이름 = "안녕하세요";

NameComponent 경로 = ncRef.to_name(이름);

ncRef.rebind(경로, href);

System.out.println("HelloServer 준비 및 대기 중...");

// 클라이언트의 호출을 기다립니다.

잡기 (예외 e) (

System.err.println("오류:" + e);

e.printStackTrace(System.out);

System.out.println("HelloServer 종료 중...");

6.1.3 클라이언트 생성

클라이언트를 위한 코드 작성으로 넘어가겠습니다.

클라이언트 애플리케이션 작성을 위한 기본 단계

1. ORB 생성 및 초기화

2. 네이밍 서비스 컨텍스트 획득(NamingContext)

3. 원격 개체 찾기

4. sayHello 메소드를 호출합니다.

5. 종료 메소드를 호출합니다.

보시다시피 처음 두 지점은 서버 응용 프로그램을 만드는 단계와 일치하므로 고려하지 않겠습니다.

세 번째 요점도 구현하기가 매우 간단합니다. NameComponent 개체가 생성됩니다. 이름으로 원격 개체(표준 CORBA 개체)를 찾는 해결(NameComponent 경로) 메서드가 호출됩니다. helloHelper 클래스(idlj 컴파일러에 의해 생성됨)의 좁은 메소드(org.omg.CORBA.Object obj)를 사용하여 hello 인터페이스에 대한 객체 참조를 얻습니다.

문자열 이름 = "안녕하세요";

helloImpl = HelloHelper.narrow(ncRef.resolve_str(이름));

편집자의 선택
쿠스쿠스를 곁들인 양고기 요리법 많은 사람들이 "쿠스쿠스"라는 단어를 들어봤지만 그것이 무엇인지 상상하는 사람은 많지 않습니다....

사진이 포함된 레시피는 아래를 참고하세요. 간단하고 준비하기 쉬운 요리인 맛있는 스튜 요리법을 알려 드리겠습니다.

칼로리 함량: 지정되지 않음 조리 시간: 지정되지 않음 우리 모두는 어린 시절의 맛을 좋아합니다. 어린 시절의 맛이 우리를 "아름답고 먼 곳"으로 데려가기 때문입니다....

통조림 옥수수는 정말 놀라운 맛을 가지고 있습니다. 그것의 도움으로 옥수수를 곁들인 배추 샐러드 요리법을 얻을 수 있습니다...
우리의 꿈은 때때로 특이한 인상을 남기고 그것이 무엇을 의미하는지에 대한 의문이 생깁니다. 해결해야 한다는 사실 때문에...
혹시 꿈에서 도움을 요청하셨나요? 마음 속으로는 자신의 능력이 의심스럽고 현명한 조언과 지원이 필요합니다. 또 왜 꿈을 꾸지...
커피 찌꺼기에 대한 운세는 인기가 많으며 컵 바닥에 운명의 표시와 치명적인 상징이 표시되어 흥미를 자아냅니다. 이런 예측으로...
나이가 어리다. 슬로우 쿠커에 당면을 곁들인 죽 요리를 준비하는 몇 가지 요리법을 설명하겠습니다. 먼저 살펴 보겠습니다.
와인은 모든 행사에서뿐만 아니라 더 강한 것을 원할 때도 마시는 음료입니다. 하지만 테이블 와인은...