간단 한 CORBA 응용 구축

간단 한 CORBA 응용 구축
        JAVA 는 CORBA (Common Object Request Broker Architecture, 범용 대상 요청 에이전트 구조) 에 대한 지원 을 제공 했다.CORBA 는 분포 식 대상 시스템 의 표준 으로 OMG (Ojbect Management Group, 대상 관리 팀) 에서 제정한다.CORBA 는 분포 식 시스템 의 서로 다른 측면 을 설명 하 는 몇 가지 규범 을 포함 하고 있다. 예 를 들 어 IIOP (Internet Inter - Ob Protocol, Internet 대상 요청 프 록 시 간 프로 토 콜) 네트워크 프로 토 콜 규범 은 고객 과 서버 가 어떻게 통신 하 는 지 정의 한다.COSNaming 규범 은 어떻게 명명 하 는 지 정의 합 니 다.그리고 OMG IDL 은 그들 과 교류 할 수 있 는 프 록 시 방식 을 만 들 수 있 도록 대상 인 터 페 이 스 를 정의 했다.CORBA 는 분포 식 시스템 에서 정의 해 야 할 일부분 을 덮어 쓰 는 규범 도 많다.CORBA 는 플랫폼 과 언어 가 독립 된 것 으로 그 어떠한 언어 에 도 의존 하지 않 고 그 어떠한 운영 체제 에 도 의존 하지 않 는 다 는 것 을 의미한다.
         다음은 IDL 기술 과 JAVA 의 이 기술 에 대한 지원 을 개략 적 으로 소개 합 니 다.IDL 기술 개요 IDL 은 Interface Definition Language (인터페이스 정의 언어) 의 줄 임 말로 OMG 가 정의 하 는 표준 언어 로 모든 CORBA 대상 의 인 터 페 이 스 를 정의 하 는 데 사용 된다.IDL 인 터 페 이 스 는 작업, 이상, 속성 을 설명 합 니 다.모든 조작 에는 하나의 용법 설명 이 있다.용법 설명 은 조작의 명칭, 파라미터, 결과 와 이상 을 정의 했다.OMG IDL 은 조작의 실현 을 포함 하지 않 습 니 다.반면 이름 에서 보 듯 이 인 터 페 이 스 를 정의 하 는 언어 일 뿐이다.IDL 의 전체 문법 과 의 미 는 OMG 규범 의 제3 장 에서 토론 할 수 있 습 니 다. OMG 사이트 에서 찾 을 수 있 습 니 다. 주 소 는 다음 과 같 습 니 다. http://www.omg.org/technology/documents/idl2x_spec_catalog.htm자바 (TM) 로 작 성 된 API 는 표준 과 CORBA 의 상호작용 과 연결 성 을 제공 합 니 다.
       JAVA IDL 의 문법 과 사용 아래 에서 우 리 는 가장 간단 한 IDL 파일 을 어떻게 쓰 는 지 배 웁 니 다. 파일 이름 은 hello. idl 입 니 다.코드 는 다음 과 같 습 니 다:
module cn{ interface Hello{ string say(); }; };
끝 부분의생략 할 수 없다.module 는 자바 의 가방 을 정의 하 는 것 과 비슷 합 니 다. 이 가방 의 이름 은 cn 입 니 다. 가방 이름 에는 포함 되 지 않 습 니 다.
인터페이스 이름 은 Hello 입 니 다.인 터 페 이 스 는 문자열 을 되 돌려 주 는 방법 을 포함 하고 있다.IDL 의 문자열 형식 은 string 입 니 다.기본 데이터 형식 에 있어 CORBA 는 언어 정의 가 더 짧 은 것 을 선택 합 니 다. 이것 은 IDL 이 언어 간 응용 을 실현 하기 위해 어 쩔 수 없 이 사용 해 야 하 는 절충 입 니 다.4. 다섯 줄 대괄호 뒤의 것;생략 할 수 없다.다음 작업 은 이 idl 파일 을 대응 하 는 자바 파일 로 컴 파일 하 는 것 입 니 다. 이것 은 JDK 가 자체 적 으로 가지 고 있 는 idlj 도 구 를 통 해 이 루어 진 것 입 니 다. 이 도 구 는 자바 c 와 한 디 렉 터 리 에 있 습 니 다.명령 형식 은 다음 과 같 습 니 다.
 Idlj hello. idl 우 리 는 - td 매개 변 수 를 사용 하여 자바 파일 을 만 드 는 경 로 를 지정 할 수 있 습 니 다. 나의 자바 파일 이 있 는 경 로 는 현재 프로젝트 의 src 에 있 습 니 다.서버 쪽 파일 만 생 성 하 는 등 파일 생 성 범 위 를 지정 할 수 있 습 니 다. - fserver 명령 행 매개 변 수 를 사용 합 니 다. 클 라 이언 트 파일 만 생 성 할 경우 - fserver 매개 변 수 를 사용 하여 - fall 매개 변 수 를 모두 생 성 합 니 다.기본 값 모두 생 성.src 디 렉 터 리 에서 우 리 는 새로운 디 렉 터 리 cn 을 생 성 한 것 을 발견 할 수 있 습 니 다. 아래 에는 6 개의 자바 소스 파일 이 포함 되 어 있 습 니 다. 다음 과 같이 나 누 어 설명 합 니 다.
        HelloPOA POA 는 Portable Object Adapter (가 벼 운 대상 어댑터) 를 말한다.이 추상 류 는 흐름 을 바탕 으로 하 는 서버 엔 드 골조 로 서버 엔 드 의 기본 적 인 CORBA 기능 을 제공 합 니 다.HelloSutb 클 라 이언 트 의 존 근 류 는 클 라 이언 트 에 CORBA 기능 을 제공 합 니 다.Hello 는 자바 버 전의 Hello 인터페이스 로 표준 CORBA 대상 기능 을 제공 합 니 다.HelloHelper 는 CORBA 흐름 에 대상 을 쓰 거나 읽 는 보조 클래스 입 니 다.Hello Holder 는 final 클래스 로 Public 의 Hello 인 스 턴 스 변 수 를 가지 고 있 습 니 다.이것 은 CORBA 입 출력 흐름 의 인 자 를 조작 하 는 데 사 용 됩 니 다.Hello Operations 클래스 야 말로 우리 가 예상 한 인터페이스 입 니 다. 우리 가 정의 한 그 방법 만 포함 하고 CORBA 의 어떤 것 도 포함 하지 않 습 니 다.이러한 종류의 더 자세 한 정 보 는 썬 이 발표 한 자바 독 스 문 서 를 참조 할 수 있 으 며, 그 안에 더 자세 한 설명 이 있 고, 더 많은 예 가 있다.다음은 서버 측의 실현 을 제공 합 니 다. 이 실현 클래스 의 계승 은 HelloPOA 입 니 다.
 
 
package cn.zxm.corba.hello.server; 
import cn.HelloPOA; 
public class HelloImpl extends HelloPOA {
   public String say() { 
System.out.println("      ——" + new java.util.Date()); return "Hello World!"; }
 }
//    ,         ,         : 
package cn.zxm.corba.hello.server;
import java.util.Properties; 
import org.omg.CORBA.ORB; 
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA; 
import org.omg.PortableServer.POAHelper;
import cn.Hello; import cn.HelloHelper; 

public class HelloServer { 
public void run(String[] args) throws Exception { 
//          (ORB),     
Properties props = new Properties(); 
//     ,      900 
props.put("org.omg.CORBA.ORBInitialPort", "1050");
 //       
props.put("org.omg.CORBA.ORBInitialHost", "192.168.1.100");
 //   ORB ORB orb = ORB.init(args, props);
 // get reference to rootpoa & activate the POAManager 
//     POA  ,   POA    
POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); 
poa.the_POAManager().activate();
 //     HelloImpl   
HelloImpl hello = new HelloImpl(); 
//  servant         
org.omg.CORBA.Object ref = poa.servant_to_reference(hello); Hello href = HelloHelper.narrow(ref); 
//         
org.omg.CORBA.Object objref = orb.resolve_initial_references("NameService"); 
//   NamingContextExt   INS(Interoperable Naming Service,      )    
 NamingContextExt ncRef = NamingContextExtHelper.narrow(objref); 
//        ,          
String name = "Hello"; NameComponent[] nc = ncRef.to_name(name); ncRef.rebind(nc, href);
 System.out.println("HelloServer ready and waiting......");
 //  ORB 
   orb.run(); 
} public static void main(String[] args) {
HelloServer server = new HelloServer(); 
try { 
        server.run(args); 
      }catch(Exception e) {
  e.printStackTrace(); 
     } 
  }  
} 
//              ,    : 
package cn.zxm.corba.hello.client;
import java.util.Properties; 
import org.omg.CORBA.ORB; 
import org.omg.CosNaming.NamingContextExt; 
import org.omg.CosNaming.NamingContextExtHelper; 
import cn.Hello; import cn.HelloHelper; 
public class HelloClient { public void run(String[] args) throws Exception { 
Properties props = new Properties(); 
//     ORB,    ,   Server    
props .put("org.omg.CORBA.ORBInitialPort", "1050"); 
props.put("org.omg.CORBA.ORBInitialHost", "192.168.1.100"); ORB orb = ORB.init(args, props); 
//          org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); 
//  NamingContextExt  NamingContext. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
 //                 
String name = "Hello"; Hello hello = HelloHelper.narrow(ncRef.resolve_str(name)); 
//       System.out.println(hello.say());
 }
 public static void main(String[] args) {
 HelloClient client = new HelloClient(); try {
 client.run(args); 
} catch (Exception e) { 
e.printStackTrace();
    }
  } 
}

 
 
        자바 기반 의 완전한 CORBA 응용 이 완성 되 었 습 니 다. 지금 우 리 는 이러한 종 류 를 컴 파일 했 습 니 다.
 컴 파일 이 완료 되면 Obd 를 시작 해 야 합 니 다. 이것 은 rmiregistry 와 유사 한 도구 로 가장 간단 한 이름 서 비 스 를 제공 합 니 다.
시작 명령 은 다음 과 같 습 니 다:
start orbd -port 1050 -ORBInitialPort 1049
 -ORBInitialHost localhost 라 는 명령 은 CORBA 가 사용 하 는 서버 가 이 컴퓨터 이 고 초기 화 포트 는 1049 이 며 사용 하 는 바 인 딩 포트 는 1050 입 니 다. 그리고 HelloServer 를 실행 합 니 다. 명령 은 start 자바 cn. zxm. corba. hello. server. HelloServer 서버 가Hello Stub 는 Obd 에 연결 되 어 있 습 니 다. 저희 가 사용 하 는 바 인 딩 이름 은 Hello 입 니 다.
        그 다음 에 클 라 이언 트 를 실행 합 니 다. 명령 은 자바 cn. zxm. corba. hello. client. Hello Client 의 운행 효 과 는 그림 1: 그림 1 CORBA 클 라 이언 트 의 운행 효 과 는 위의 예 를 통 해 우 리 는 CORBA 에 대해 초보적인 인상 을 가지 게 되 었 습 니 다.CORBA 자 체 는 매우 복잡 하 다. 독자 들 이 볼 수 있 듯 이 위의 연결 과 호출 은 모두 번 거 롭 고 이해 하기 어렵다.
       전체적으로 RMI 보다 훨씬 복잡 하기 때문에 우 리 는 RMI 의 간이 성 을 빌려 CORBA 를 실현 할 수 있다.분포 식 애플 리 케 이 션 에 관심 이 있 는 친 구 는 OMG 나 썬 홈 페이지 에서 더 자세 한 정 보 를 살 펴 볼 수 있다.

좋은 웹페이지 즐겨찾기