예외


CORBA 에는 다음의 2 종류의 예외가 있습니다. OMG 로 완전하게 규정된 표준 시스템 예외와 어플리케이션 프로그래머가 정의하는 사용자 예외의 2 개입니다. CORBA 의 예외는 Java 의 예외 객체와는 다소 다릅니다만, 그 차이의 대부분은 IDL 로부터 Java 에의 매핑시에 해결됩니다.

여기에서는, 이하의 항목에 대해 설명합니다.

CORBA 의 예외와 Java 의 예외의 차이

IDL 로 예외를 지정할 때는, 키워드 raises 를 사용합니다. 이것은, Java 로 throws 를 지정하는 것과 같습니다. IDL 로 이 예외 키워드를 사용하는 경우는, 사용자 정의 예외를 작성하게 됩니다. 표준 시스템 예외에서는, 이러한 지정을 할 필요는 없고, 또, 이러한 지정을 할 수 없습니다.

시스템 예외

CORBA 에서는, 일련의 표준 시스템 예외가 정의되고 있습니다. 표준 시스템 예외는, 다음과 같은 시스템 관련의 에러 상태의 발생을 지모아 두어 일반적으로 ORB 라이브러리에 의해 생성됩니다.

시스템 예외는, 불려 간 모든 IDL 오퍼레이션에 대해서 throw 될 가능성이 있습니다. 인터페이스의 설계자는, 인터페이스내의 오퍼레이션으로 시스템 예외를 throw 할 수 있는 것 같은 스펙으로 할 필요는 없습니다. 이 처리는 자동으로 행해집니다.

오퍼레이션의 구현이 얼마나 단순했다고 해도 , 다른 프로세스 (대부분이 다른 머신상의 프로세스)인 클라이언트로부터 오퍼레이션 호출을 하는 것으로, 모든 에러가 발생할 가능성이 있기 (위해)때문에, 이 스펙은 타당하다라고 말할 수 있습니다.

따라서, CORBA 클라이언트에서는, CORBA 의 시스템 예외를 항상 캐치 하도록(듯이) 해야 합니다. 또, CORBA 의 시스템 예외는 java.lang.RuntimeException 의 하위 클래스가 되기 (위해)때문에, 캐치 해야 할 시스템 예외의 통지를 Java 컴파일러에 맡길 수 없습니다.

시스템 예외의 구조

CORBA 의 시스템 예외는, 모두 다음과 같은 같은 구조를 하고 있습니다.

exception <SystemExceptionName> { // descriptive of error
    unsigned long minor ;          // more detail about error
    CompletionStatus completed ;   // yes, no, maybe
}
 

시스템 예외는,java.lang.RuntimeException 로부터 org.omg.CORBA.SystemException 까지의 클래스의 subtype입니다.

java.lang.Exception
 |
 +--java.lang.RuntimeException
     |
     +--org.omg.CORBA.SystemException
         |
         +--BAD_PARAM
         |
         +--//etc.  
 

마이너 코드

CORBA 의 모든 시스템 예외에는, 예외 발생의 원인이 된 에러에 관한 부가적 정보를 제공하는 마이너 코드 필드가 설치되고 있습니다. 마이너 코드의 의미는 OMG 에서는 규정되지 않고, 각 ORB 벤더가, 그 구현 마다 적절한 마이너 코드를 규정하게 되어 있습니다. Java  ORB 에 의해 규정되고 있는 마이너 코드의 의미에 대해서는,「마이너 코드의 의미」를 참조해 주세요.

완료 상태

CORBA 의 모든 시스템 예외에는, 예외를 throw 한 오퍼레이션 상태를 나타내는 완료 상태 필드가 있습니다. 완료 상태 코드에는, 다음의 3 개가 있습니다.

COMPLETED_YES
객체의 구현은, 예외가 일어나기 전에 처리를 완료했다
COMPLETED_NO
객체의 구현은, 예외가 일어나기 전에 불려 가지 않았다
COMPLETED_MAYBE
호출 상태가 불명

사용자 예외

CORBA 의 사용자 예외는,java.lang.Exception 으로부터 org.omg.CORBA.UserException 까지의 클래스의 subtype입니다.

java.lang.Exception
 |
 +--org.omg.CORBA.UserException
      |
      +-- Stocks.BadSymbol
      |
      +--//etc.  

각 사용자 정의 예외는, 생성된 Java 예외 클래스의 IDL 의 결과 중(안)에서 규정합니다. 사용자 정의 예외는, 모두 프로그래머가 정의해, 구현합니다.

마이너 코드의 의미

모든 시스템 예외에는, CORBA 벤더가 예외 발생의 원인에 관한 부가적 정보를 제공할 수 있도록(듯이),minor 라고 하는 필드가 설치되고 있습니다. OMG 의 표준 마이너 코드 예외 (OMGVMCID)의 리스트에 대해서는, OMG 의 문서 (http://www.omg.org/docs/omg/03-01-04.txt )를 참조해 주세요.

자주(잘) 조우하는 Sun 의 마이너 코드 예외에는, 다음과 같은 것이 있습니다.

상기의 설명으로는 불충분한 경우, 또는 상기 이외의 Sun 마이너 코드에 조우했을 경우에는,http://forum.java.sun.com 의 개발자 포럼에 메세지를 투고해 주세요.

마이너 코드의 의미에 대해 정보를 요구하는 경우에는, 다음의 정보를 지 편하다 차이.



Copyright © 1996-2004 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn.View, CA. 94043-1100 USA., All rights reserved.