We begin with the IDL definition of the interface to an
account
object.
// in module BankingDemo
interface account {
readonly attribute string name;
readonly attribute long balance;
void credit (in unsigned long amount);
exception refusal {string reason;};
void debit (in long amount)
raises (refusal);
};
The name of an account is recorded in its
name
attribute. The state of an account is recorded in its
balance
attribute. To keep things simple, we use CORBA
long
values to represent monetary amounts.
To prevent clients from directly altering the account's name or balance, these attributes are declared as
readonly
attributes. The operations
credit
and
debit
are provided to allow updates to an account's
balance
attribute.
The operation
credit
adds a non-negative amount to the current account balance.
Next comes an exception declaration:
exception refusal {string reason;};
This declares a named exception,
refusal
, that the debit operation uses to signal errors. The
refusal
exception is declared to contain a
reason
field that documents the reason for failure in the form of a
string
.
The operation
debit
subtracts a given amount from the current balance, provided doing so does not make the account balance negative. Qualifying
debit
by the phrase
raises (refusal)
declares that invoking this operation may raise the exception
refusal
. Although a CORBA operation may raise any CORBA system exception, its declaration must specify any additional user-defined CORBA exceptions that it might raise.
This completes the IDL declaration of the
account
interface.