2012-01-25 2 views
1

CORBA는 여러 객체가 다른 프로그래밍 언어로 구현되고 다른 컴퓨팅 노드에서도 실행될 수 있음을 알고 있습니다. 그러나 두 개의 서로 다른 언어로 작성된 두 개의 서로 다른 ORB가 필요합니까?CORBA 응용 프로그램을 ORB와 동일한 언어로 구현해야합니까?

예 : 노드 A는 Java 응용 프로그램 J1을 실행하고 노드 B는 C++ 응용 프로그램 C1을 실행합니다. 노드 A의 경우 "Java ORB"를, 노드 B의 경우 "C++ ORB"를 얻어야합니까? 아니면 모든/일부 ORB가 IDL 매핑이있는 언어로 작성된 응용 프로그램과 상호 작용할 수 있습니까?

누구나 나를 명시 적으로 언급하는 출처에 링크 할 수 있다면 나는 그것을 고백하고 싶습니다. 가장 가까운 것은 "the way a programmer manipulates a struct or union, makes a remote call using a proxy or implements an interface with a servant class is exactly the same across all C++ CORBA products, is exactly the same across all Java CORBA products, and so on"입니다. 이것은 내가 두 개의 ORB가 필요하다고 생각하게하지만, 충분히 명확하지는 않습니다. 기본적으로 "ORB가 C++로 작성 되었기 때문에 응용 프로그램 프로그래머도 C++을 사용하도록 제한되어 있습니다"라고 말할 수 있는지 알고 싶습니다.

감사합니다.

+0

구체적인 예를 들어 좀 더 자세히 설명하겠습니다. "ACE ORB (TAO)는 CORBA V3.0과 호환되는 C++ ORB입니다."[http://www.theaceorb.com /) TAO를 사용한다면 C++로 응용 프로그램을 작성해야한다는 것을 의미합니까? – Vidar

+0

예, 그것이 의미하는 바입니다. 그러나 표준 프로토콜 IIOP (다른 프로토콜들)을 통해 다른 프로그래밍 언어로 다른 ORB와 원격으로 통신 할 수 있습니다. –

+0

도와 주셔서 감사합니다. API가 응용 프로그램이 구현 된 언어로 API를 제공해야하는 ORB가 필요하다고 합의 된 것처럼 보입니다. ORB는 프로그래밍 언어로 API를 제공하기도하지만 멈추는 것이 전혀 없습니다. 핵심 라이브러리와 다른 언어로 된 API를 연결하는 것. * 또한 Python에서 C++을 호출하거나 Java에서 C를 호출하는 등 응용 프로그램 언어의 언어 내장 기능을 활용할 수 있습니다. – Vidar

답변

2

ORB가 구현되는 언어는 중요하지 않지만 어떤 언어 바인딩이 제공되는지는 중요합니다. 언어 L의 경우 언어 L에 대한 바인딩을 제공하는 구를 필요로합니다. 종종 orbs는 자신이 작성된 언어에 대한 바인딩을 제공하지만 다른 언어에 대한 바인딩을 제공 할 수도 있습니다.

3

아니요. CORBA의 요점은 구성 요소를 완전히 분리한다는 것입니다.

분명히, 응용 프로그램은 그들이 인터페이스 할 수있는 클라이언트 라이브러리를 사용해야합니다. ORB는 하나의 언어에 대해서만 바인딩을 제공 할 수 있습니다.이 경우 다른 바인딩을 찾아야합니다 (예 : Python을 사용하는 경우 원하는 경우 C++ 라이브러리로 작업 할 수 있음).

실제로 기술을 사용해보십시오.

+0

어쨌든, 여전히 Java 프로그램은 Java에서 구현 된 ORB의 "보기"를 가져야합니다. 맞습니까? –

+0

@DiegoSevilla : 무슨 뜻인지 모르겠다. 모든 프로그램에는 corba 시스템을 사용하기 위해 적절한 corba 클라이언트 라이브러리가 있어야합니다. – Marcin

+0

당신과 @DiegoSevilla는 동의하지 않는 것 같습니다. 원래 질문에 추가 한 주석이 대답을 변경합니까, 아니면 "C++ ORB"가 Java에서 클라이언트 라이브러리/API도 제공 할 수 있다고 말하고 있습니까? – Vidar

0

CORBA 응용 프로그램을 구현할 때 사용할 수있는 몇 가지 접근 방법이 있지만이를 종합하면 ORB 인프라는 응용 프로그램 구현과 동일한 언어 여야합니다.

자바와 C++ 모두는 IDL 컴파일러는 스텁해골 네트워크와 프로그램 사이의 접착제 역할을를 생성합니다. 일반적으로 IDL 컴파일러 생성 클래스 (스켈레톤)에서 상속받은 CORBA 객체의 구현을 제공합니다. 스켈레톤은 어떤 식 으로든 클라이언트 에서 요청을 받고을 구현 한 다음 구현을 호출합니다. 동일한 문제가 클라이언트 측에서 역으로 발생합니다.

그런 다음 스켈레톤과 스텁은 모두 클라이언트와 서버가 다른 시스템에있는 경우 ORB를 통해 원격으로 서버를 호출하고 응답에 응답하기 위해 메커니즘을 사용합니다. 이 "마술"은 ORB에 의해 구현되며 스텁과 스켈레톤이 작업을 완료하는 데 사용할 라이브러리, 함수 세트 등의 형태로 프로그램에 있어야합니다.

따라서 모든 프로그램에는 다른 시스템의 다른 CORBA 클라이언트 및 서버와 상호 작용할 수있는 ORB 표현이 있어야합니다.

그러나 논리 관점에서 볼 때 ORB는 클라이언트와 서버 모두에 실제로 원활하게 연결되므로 C++ 응용 프로그램에 C++로 작성된 ORB 구현이 있고 Java 구현이있는 경우에도 표준 프로토콜 (GIOP, IIOP)의 마법을 통해 Java로 작성된 ORB를 가지고 있으면 문제없이 서로 통신 할 수 있습니다.

+0

나는 나의 이해를 확인하기 위해 핵심 포인트를 다시 한번 말하고 싶다. 클라이언트 프로그램은 ORB를 자신과 같은 언어로 표현 된 API로 본다. 그리고 ORB는 자체적으로 구현되는 언어로 API 만 제공합니다. – Vidar

+0

올바른 것이므로 동일한 주소 공간에서 "ORB"(ORB API 및 기능의 구현)가 필요합니다. 따라서 언어)를 사용합니다. –

+1

글쎄, orb는 하나의 언어로 구현 될 수 있으며 몇 가지 다른 것들을위한 바인딩을 제공합니다. –

관련 문제