CORBA 에는 다음의 2 종류의 예외가 있습니다. OMG 로 완전하게 규정된 표준 시스템 예외와 어플리케이션 프로그래머가 정의하는 사용자 예외의 2 개입니다. CORBA 의 예외는 Java 의 예외 객체와는 다소 다릅니다만, 그 차이의 대부분은 IDL 로부터 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 개가 있습니다.
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 의 마이너 코드 예외에는, 다음과 같은 것이 있습니다.
java.net.SocketException 가 원인으로 생기는 일이 있어, 일반적으로은 BindException,ConnectException, 또는 NoRouteToHostException 의 머지않아인가입니다.
다음과 같은 점을 확인할 필요가 있습니다.
-ORBInitialHost 및 -ORBInitialPort 의 값이 올바르게 설정되어 있을까. 어떻게 설정하면(자) 좋은가 모르는 경우는,「네임 서비스의 기동과 정지」를 참조해 주세요.
Unable to create the listener thread on the specific port. Either the post is taken or there was an error creating the daemon thread」를 의미합니다. 이것은 일반적으로, 네임 서비스를 실행하려고 한 포트가 다른 프로세스에 의해 사용중인 것을 나타내고 있습니다. Solaris 상에서 실행하고 있는 경우에는, 이 포트로 다른 프로세스가 실행중인가 어떤가를 조사하기 위해서(때문에), 단말 prompt로 다음의 커멘드를 실행합니다.
netstat | grep port_number
corba.INSSubcontract.getINSReference 입니다.
wchar 나 wstring 의 어느쪽이든을 송신하려고 한 것을 의미합니다. 이것은, 스펙으로 허가되고 있지 않습니다.
org.omg.CORBA.Object 로부터 파생한 객체를 정렬화하려고 했지만, 그 특정의 인스턴스가 ORB 에 접속되어 있지 않은 것을 의미합니다. POA 를 사용하는 경우는, 우선 객체를 POA 에 등록할 필요가 있습니다. 객체를 POA 에 등록하는 방법의 상세한 것에 대하여는,POA 의 문서 또는튜토리얼을 참조해 주세요.
write_string 나 write_octet_array 등의 write 메소드에 대해서 Java 의 null 를 건네주었을 때에 발생합니다. Java 메소드의 결과로서 Java 의 null 를 돌려줄 수 없습니다.
Unable to determine local hostname using InetAddress.getLocalHost(). getHostName()」를 의미합니다.
ORB 는,InetAddress.getLocalHost(). getHostName() 를 사용해, 참조의 검색이나 바인드를 위해서(때문에) 네임 서비스에의 참조를 작성합니다. 또, 서버측에서 InetAddress.getLocalHost(). getHostName() 를 사용해, 닷 단락 10 진수와 포트의 편성은 아니고, 서버의 이름과 포트를 포함한 원격 객체 참조 (즉 IOR)를 작성합니다.
getHostName 의 호출을 회피하려면 , 다음과 같은 프로퍼티을 설정합니다 (설정 방법법에 대해서는,「네임 서비스의 기동과 정지」를 참조).
com.sun.CORBA.ORBServerHost 에 서버의 DNS 명 또는 닷 단락 10 진수 주소를 설정
com.sun.CORBA.ORBInitialHost 에, 네임서버-의 DNS 명 또는 닷 단락 10 진수 주소를 설정
주: 이러한 프로퍼티은 독자적인 것으로, 삭제 또는 변경되는 일이 있습니다.
상기의 설명으로는 불충분한 경우, 또는 상기 이외의 Sun 마이너 코드에 조우했을 경우에는,http://forum.java.sun.com 의 개발자 포럼에 메세지를 투고해 주세요.
마이너 코드의 의미에 대해 정보를 요구하는 경우에는, 다음의 정보를 지 편하다 차이.
| 홈 |