간단 한 CORBA 응용 구축
7189 단어 jdk응용 서버네트워크 응용네트워크 프로 토 콜sun
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 나 썬 홈 페이지 에서 더 자세 한 정 보 를 살 펴 볼 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
2022년 3월 21일 TIL1. JVM & JDK JVM JRE 자바 실행 환경의 약자로 자바 프로그램을 실행하기 위한 도구들이 들어있으며 JVM이 이 안에 포함된다 JDK JRE + 개발툴 javac는 컴파일 명령어 HelloWorld.cl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.