The bank fasl file defines three abstract servant classes
BankingDemo:account-servant
,
BankingDemo:checkingAccount-servant
, and
BankingDemo:bank-servant
corresponding to the IDL interfaces
account
,
checkingAccount
, and
bank
. The class
BankingDemo:checkingAccount-servant
is defined to inherit from
BankingDemo:account-servant
, matching the inheritance relationship in the IDL.
Note that each class inherits from the abstract class
PortableServer:ServantBase
, allowing instances of the class to be registered with a POA.
In our implementation of the bank server, these servant classes are implemented by the subclasses
The
bank-implementation
class implements
BankingDemo:bank-servant
by representing a bank as a connection to a database:
(defclass bank-implementation (BankingDemo:Bank-servant)
((connection :initarg :connection)
(poa :initarg :poa)
(account-impls :initform nil)))
We have included the
poa
slot to record the POA in which the bank servant is active, so that servants representing accounts at the bank can be registered in the same POA. A slot
op:name
corresponding to the attribute name defined in the IDL is inherited from the
Bank-servant
, as are definitions of accessor functions for this slot.
The
account-implementation
class implements
BankingDemo:account-servant
:
(defclass account-implementation (BankingDemo:Account-servant)
((bank :initarg :bank)))
An instance of this class represents an account. The
bank
slot provides a connection to the database that holds the account's record. Slots
op:name
and
op:balance
, corresponding to attributes defined in the IDL, are inherited from
account-servant
. The
name
slot identifies the record in the database.
Finally, the
checkingAccount-implementation
class implements
BankingDemo:checkingAccount-servant
simply by inheriting from
account-implementation
:
(defclass checkingaccount-implementation (Bankingdemo:Checkingaccount-servant account-implementation)
())
A slot
op:limit
, corresponding to the attribute limit defined in the IDL, is inherited from
checkingaccount-servant
.