Exceptions
Description of exception handling in version 0.90.
Version 0.80 handles exceptions very different! See demos and
old description.
The CORBA standard defines two different kinds of exceptions:
User Exceptions and
System Exceptions.
User Exceptions
Throwing (sending) an user exception
If writing a server in VB user exceptions will be thrown by the
following code. The execute method of the skeleton code test
if a user exception is set and send them over the wire to the client.
Dim oMyEx As c_MyFileNotFoundException
Set oMyEx = New c_MyFileNotFoundException
oMyEx.fileName = "xy"
Call VBOrb.raiseUserEx(oMyEx)
Catching (receiving) an user exception
The invokeReq method of class cOrbObjRef receive the user exception
and put them in a normal exception.
Here is the code which can be used by the client to handle user exceptions.
On Error GoTo ErrHandler
Call remoteObject.method()
...
Exit Function
ExHandler:
Dim oEx As VBOrb.cOrbException
Set oEx = VBOrb.getException()
Select Case TypeName(oEx)
Case "c_MyFileNotFoundException"
Dim oMyEx as c_MyFileNotFoundException
Set oMyEx = oEx
'Do something with oMyEx...
Case Else
' Unexpected user exception
End Select
Exit Function
ErrHandler:
If VBOrb.ErrIsUserEx() Then Resume ExHandler
Call VBOrb.ErrReraise("openDBConnection")
End Function
System Exceptions
System exceptions are standard exception types, which are defined by the CORBA specification
and are used by the Object Request Broker (ORB) and object adapters (OA). Standard exceptions
may be returned as a result of any operation invocation, regardless of the interface on which
the requested operation was attempted. There are two aspects to the mapping of System Exceptions.
One aspect is generating an appropriate Err.Number for the operation to return. The other aspect
is conveying System Exception information via the standard Error Object.
The Err.Description of a System Exception looks like:
CORBA System Exception: [<exception repository id>] minor code [<minor code>][<completion status>]
where the <exception repository id> and <minor code> are those of the CORBA system exception.
<completion status> is YES, NO, or MAYBE based upon the value of the system exception's CORBA
completion status.
Throwing (sending) system exceptions
An example of throwing a system exceptions is shown by the following code.
Call VBOrb.raiseBADPARAM(1, VBOrb.CompletedNO)
Catching (receiving) system exceptions
The invokeReq method of class cOrbObjRef receive the system exception
and put them into the error object.
Here is the code which can be used by the client to handle system exceptions.
On Error GoTo ErrHandler
Call remoteObject.method()
...
Exit Function
ErrHandler:
If VBOrb.ErrIsSystemEx() Then
'Do something with Err.Description
End If
End Function