Professional Documents
Culture Documents
10uc Designk Solution RPT PDF
10uc Designk Solution RPT PDF
10uc Designk Solution RPT PDF
Version 2003
Mastering OOAD with UML Issue: v2003
Payroll System Use-Case Design Solution Issue Date: February 2003
10uc_designk_solution_rpt.doc
Revision History
Date Issue Description Author
09/01/2000 V2000 Generate for beta Shawn Siemers
10/02/2000 V2000 Final release Shawn Siemers
01/14/2003 V2003 Final Release Alex Kutsick
Table of Contents
1. Exercise: Use-Case Design, Part 1 5
1.1 Use-Case Realization - Run Payroll 5
1.1.1 Run Payroll (with ss interface) 5
1.1.2 Run Payroll (with Security) 8
1.1.3 Run Payroll (with Distribution) 10
1.1.4 Run Payroll (with OODBMS Persistency) 13
1.1.5 Run Payroll (with everything) 16
1.2 Use-Case Realization - Maintain Timecard 19
1.2.1 Maintain Timecard (with ss interface) 19
1.2.2 Maintain Timecard (with Security) 21
1.2.3 Maintain Timecard (with Distribution) 24
1.2.4 Maintain Timecard (with OODBMS Persistence) 27
1.2.5 Maintain Timecard (with everything) 30
1.3 Use-Case Realization - Login 37
1.3.1 Login 37
1.3.2 Login (with Security) 39
1.4 ObjectStore Support 42
1. // start( )
For direct-deposit a
1.1.6. // get bank info( ) transaction is
created to send the
payment information
1.1.7. deposit(Paycheck, BankInformation)
1.1.7.1. // send transaction( )
: SystemClockInterface
:
1. // start( ) IPrintService
1.1.5. print(Paycheck, String)
1.1. // run payroll( ) 1.1.5.1. // print( )
: PayrollController
: System Clock 1.1. 1. // is payday ?( )
1.1.2. // get pay amount( )
1.1.4. // get pay amount( )
1.1.6. // get bank info( ) : Printer
1.1. 3. // creat e with amount (float)
:
Pay check
: IBankSystem
: Employee
: Bank System
<<Interface>>
<<boundary>>
<<control>> direct deposits checks via IBankSystem
SystemClockInterface 0..1 (from External System Interfaces)
PayrollController
1 1 0..1
// start() 0..1 + deposit()
0..1
0..1
0..*
<<entity>>
+paycheckPrinter
Employee
name 0..1 <<Interface>>
employee id : int IPrintService
bank info : BankInformation (from External System Interfaces)
social security number
address + print()
phone number
email
payment method
// is payday?() +generatedPaychecks
// get pay amount() 1
// get payment method() 0..*
<<entity>>
// get bank info() : BankInformation
1 0..* Paycheck
// calculatePay()
// add(theTimecard : Timecard) amount
// get Employee ID() : int 0..* <<entity>>
// getTimecard(forPayPeriod : Date) : Timecard // create with amount(forAmount : float) : Paycheck
Tiadd(thePaycheck
// d : Paycheck) hours worked
pay period
+ // getHourlyRate() + // getAnnualSalary()
<<entity>>
CommissionedEmployee <<entity>>
commissionRate PurchaseOrder
1 0..*
+ // getPurchaseOrders() // get PO info()
+ // getCommissionRate()
1. // start( )
: SystemClockInterface
:
IPrintService
: System Clock
1.1.5. print(Paycheck, String)
1.1. / / run payroll( ) 1.1.5.1. // print( )
: Pay rollController
1.1.1. // is payday?( )
1.1. 2. // get pay amount ( )
1.1. 4. // get pay amount ( )
1.1. 6. // get bank info( ) : Printer
1.1.3. // create with amount(float)
:
Paycheck
: IBankSystem
: Employee
: :
PurchaseOrder Timecard
: Bank System
<<Interface>>
<<boundary>>
<<control>> direct deposits checks via IBankSystem
SystemClockInterface 0..1 (from External System Interfaces)
PayrollController
1 1 0..1
// start() 0..1 + deposit()
0..1
0..1
0..*
<<entity>>
+paycheckPrinter
Employee
name <<Interface>>
0..1
employee id : int IPrintService
bank info : BankInformation (from External System Interfaces)
social security number
address + print()
phone number
email
payment method
// is payday?() +generatedPaychecks
// get pay amount() 1
// get payment method() 0..*
<<entity>>
// get bank info() : BankInformation
1 0..* Paycheck
// calculatePay()
// add(theTimecard : Timecard) amount
// get Employee ID() : int 0..* <<entity>>
// getTimecard(forPayPeriod : Date) : Timecard Timecard // create with amount(forAmount : float) : Paycheck
// add(thePaycheck : Paycheck) hours worked
pay period
+ // getHourlyRate() + // getAnnualSalary()
<<entity>>
CommissionedEmployee <<entity>>
commissionRate PurchaseOrder
1 0..*
+ // getPurchaseOrders() // get PO info()
+ // getCommissionRate()
: Naming.
1.2.2.3. // calculatePay( )
:
1.1. lookup(String) 1.2.1. // is payday?( )
1.2. 2. // get pay amount ( ) 1.2.2.1. // get timecard info( )Timecard
1.2. // run payroll( ) 1.2.4. // get payment method( )
1.2. 6. // get bank info( )
: SystemClockInterface : IPayrollController : Employee
:
PurchaseOrder
1.2.5. print(Paycheck, String)
: IBankSystem
:
Paycheck
:
IPrintService
1.2.7.1. // send transaction( )
: Bank System
: Printer
<<Interface>>
+ lookup() IPayrollController
(from Payroll) UnicastRemoteObject
PayrollController is (from Server)
distributed
Remote + // run payroll()
(from java.rmi)
# UnicastRemoteObject()
+ clone() Serializable
+ exportObject()
(from java.io)
<<Interface>>
<<boundary>> <<control>>
direct deposits checks via IBankSystem
SystemClockInterface PayrollController 0..1 (from External System Interfaces)
0..1
// start() // run payroll() 0..1 + deposit()
0..* 0..1
0..1
<<entity>>
+paycheckPrinter
Employee
name 0..1 <<Interface>>
employee id : int IPrintService
(from External System Interfaces)
bank info : BankInformation
social security number
address + print()
phone number
email
payment method
// is payday?()
// get pay amount()
// get payment method() 1 +generatedPaychecks
// get bank info() : BankInformation
// calculatePay() 0..*
// add(theTimecard : Timecard) <<entity>>
0..*
// get Employee ID() : int Paycheck
1 amount
// getTimecard(forPayPeriod : Date) : Timecard
// add(thePaycheck : Paycheck)
// create with amount(forAmount : float) : Paycheck
0..*
<<entity>>
Timecard
hours worked
<<entity>> <<entity>> pay period
HourlyEmployee SalariedEmployee
hourlyRate annualSalary // get timecard info()
// update timecard()
+ // getHourlyRate() + // getAnnualSalary() // new()
// save()
<<entity>>
CommissionedEmployee <<entity>>
commissionRate PurchaseOrder
1 0..*
+ // getPurchaseOrders() // get PO info()
+ // getCommissionRate()
1.1.3.3. // calculatePay( )
Create a new
1.1.4. // create with amount (calculatedPay )
paycheck for the
employee 1.1.5. // add(Paycheck)
containing the
calculated pay.
:
Timecard
1.1.2. // is payday?( ) 1.1.3.3. // calculatePay( )
1.1.3. // get pay amount( )
1.1.5. // add(P aycheck) 1.1. 3.1. // get t imecard info( )
1.1.7. // get payment method( )
1. // start( ) 1.1. // run payroll( ) 1.1.9. // get bank info( )
: SystemClockInterface : PayrollController : Employee
: Printer
<<control>>
PayrollController
<<boundary>>
0..1
SystemClockInterface 1
1 1 0..1 0..1
0..1 direct deposits checks via
// start()
1
PayrollDBManager
(from ObjectStore Support) <<Interface>>
+paycheckPrinter 0..1 IBankSystem
(from External System Interfaces)
+ save()
+ getTimecard() 0..1 <<Interface>>
+ getEmployee() IPrintService + deposit()
(from External System Interfaces)
0..* + print()
<<entity>>
Employee
name
employee id : int
bank info : BankInformation +generatedPaychecks
social security number
address 0..*
phone number <<entity>>
email Paycheck
payment method
amount
1 0..*
// is payday?()
// create with amount(forAmount : float) : Paycheck
// get pay amount()
// get payment method() 1
// get bank info() : BankInformation
// calculatePay() <<entity>>
0..*
// add(theTimecard : Timecard) Timecard
// get Employee ID() : int hours worked
// getTimecard(forPayPeriod : Date) : Timecard pay period
// add(thePaycheck : Paycheck)
// get timecard info()
// update timecard()
// new()
// save()
<<entity>> <<entity>>
HourlyEmployee SalariedEmployee
hourlyRate annualSalary
+ // getHourlyRate() + // getAnnualSalary()
<<entity>>
CommissionedEmployee <<entity>>
commissionRate PurchaseOrder
1 0..*
+ // getPurchaseOrders() // get PO info()
+ // getCommissionRate()
1.2.3.3. // calculatePay( )
Create a new
paycheck for the 1.2.4. // create with amount (calculatedPay)
employee
containing the 1.2.5. // add(Paycheck)
calculated pay.
For mail or
1.2.6. save(Paycheck, Employee) pick-up
a paycheck is
Sequence Diagram: printed
OODBMS Support / 1.2.7. // get payment method( )
PayrollDBManager -
Save Paycheck 1.2.8. print(Paycheck, String)
1.2.8.1. // print( )
For direct-deposit a
1.2.9. // get bank info( ) transaction is
created to send the
payment information
1.2.10. deposit(Paycheck, BankInformation)
1.2.10.1. // send transaction( )
1.2.1. getEmployee(string)
1.2.6. save(Paycheck, Employee)
: IBankSystem
:
IPrintService
: Bank System
1.2.8.1. // print( )
: Printer
(from java.rmi)
<<boundary>>
SystemClockInterface <<control>>
PayrollController 0..1 direct deposits checks via
<<Interface>>
// start() IBankSystem
1 0..1 0..1 (from External System Interfaces)
0..1 0..1
+ deposit()
PayrollDBManager1
(from ObjectStore Support)
0..* + print()
<<entity>>
Employee
name
employee id : int
bank info : BankInformation +generatedPaychecks
social security number
address 0..*
phone number <<entity>>
email Paycheck
payment method
amount
1 0..*
// is payday?()
// get pay amount() // create with amount(forAmount : float) : Paycheck
// get payment method() 1
// get bank info() : BankInformation
// calculatePay() <<entity>>
// add(theTimecard : Timecard) 0..* Timecard
// get Employee ID() : int hours worked
// getTimecard(forPayPeriod : Date) : Timecard pay period
// add(thePaycheck : Paycheck)
// get timecard info() Serializable
// update timecard() (from java.io)
// new()
// save()
<<entity>> <<entity>>
HourlyEmployee SalariedEmployee
hourlyRate annualSalary
+ // getHourlyRate() + // getAnnualSalary()
<<entity>>
CommissionedEmployee <<entity>>
commissionRate PurchaseOrder
0..*
+ // getPurchaseOrders() 1 // get PO info()
+ // getCommissionRate()
: : : Timecard : Employee :
: Employee : Project
TimecardForm TimecardController IProjectManagement Database
Management
1. // maintain timecard( ) Get Timec ard for
current pay period.
1.1. // get current timecard( )
1.1. 1. // getTimecard(Date)
: :
TimecardForm IProjectManagementDatabase
1. // maintain timecard( )
2. // enter hours for charge numbers( )
3. // save timecard( )
1.1. // get current timecard( ) 1.3.1.1. // get charge numbers( )
1.3. // get charge codes( ) 1.3. 1. get ChargeNumbers(St ring)
2.1. / / updat e t imecard( )
3.1. // save timecard( )
1.1.1. // getTimecard(Date)
: Employee
// display timecard()
// open(forUser : ISecureUser)
// enter hours for charge numbers()
// display charge codes()
// save timecard()
1
1
<<control>>
TimecardController
<<Interface>>
// get current timecard() +chargeNumSource IProjectManagementDatabase
(from External System Interfaces)
// get charge codes()
// update timecard() 0..* 0..1
0..1 + getChargeNumbers()
// setSession()
// create()
<<entity>> // save timecard()
Timecard +currentTimecard
hours worked 0..1
pay period 0..1
// add(theTimecard : Timecard)
// get Employee ID() : int
// getTimecard(forPayPeriod : Date) : Timecard
1. // maintain timecard( )
1.1. // open(ISecureUser)
1.1.1. // create( )
The secure user session for the
employee established at Login must
be propagated to all forms and 1.1.2. // setSession(ISecureUser)
A current timecard
does not exist
1.1.3. // get current timecard( )
2. // get Timecard(Date) A new Timecard is created
and added to the Employee
3. // new( )
4. // add(Timecard)
5. new( )
The employee is
given " open" 6. makeReadable( )
permis sions for
his/ her timecard
7. makeWriteable( )
8. makeDeleteable( )
9. setAccess(Timecard, TimecardAccess)
:
TimecardForm
9. setAccess(Timecard, TimecardAccess)
1.1.5.1. getChargeNumbers(String)
5. new( )
: 6. makeReadable( )
IProjectManagementDatabase 7. makeW riteable( )
8. mak eDelet eable( ) EmployeeSession :
ISecureUser
TimecardAccess :
SecurityAccess
: Project Management
Database
<<boundary>>
TimecardForm
(from Employee Activities)
MainEmployeeForm
(from Employee Activities)
- // display timecard()
1 0..1 + // open()
+ // maintain timecard()
+ // enter hours for charge numbers()
+ // display charge codes()
+ // save timecard()
1
1
<<control>>
TimecardController
<<entity>>
(from Employee Activities)
Employee
(from Payroll Artifacts)
+ // get current timecard()
- name
+ // get charge codes()
+ // update timecard() 0..1 1 - employee id : int
+ // setSession() 0..1 + // add(theTimecard : Timecard)
+ // create()
+ // save timecard() 1
0..*
0..*
+chargeNumSource +currentTimecard
<<entity>>
<<Interface>> 0..1
Timecard
IProjectManagementDatabase <<Interface>>
(from Payroll Artifacts)
(from External System Interfaces) ISecureUser 0..1
- hours worked
(from Secure Interfaces)
- pay period
+ getChargeNumbers()
SecurityAccess + setAccess()
+ // get timecard info()
+ getAccess()
(from Secure Interfaces) + // update timecard()
+ getUserId()
+ // new() : Timecard
+ new()
+ isReadable() + // save()
+ isWriteable()
+ isDeleteable()
+ makeReadable() Timecard
+ makeWriteable() needs to be
<<Interface>>
+ makeDeleteable() secure
ISecureData
+ new()
(from Secure Interfaces)
3. // save timecard( )
3.1. // save timecard( )
3.1.1. // save( )
1.1. lookup(String)
:
: Naming.
TimecardForm
1. // open()
2. // enter hours for charge numbers( )
3. // save timecard( ) 1.2. // get current timecard( )
1.4. // get charge codes( )
2.1. // update timecard( )
3.1. // save timecard( )
1.2.1. // getTimecard(Date)
: Employee :
: Employee
ITimecardController
: :
IProjectManagementDatabase Timecard
: Project Management
Database
Distributed Naming.
<<boundary>> (from java.rmi)
class client TimecardForm
(from Employee Activities)
+ lookup()
- // display timecard()
+ // open()
+ // enter hours for charge numbers()
+ // display charge codes()
<<Interface>>
+ // save timecard()
1 ITimecardController
1 (from Employee Activities)
+ // save timecard()
<<control>>
TimecardController <<entity>>
(from Employee Activities) Employee
(from Payroll Artifacts)
0..*
0..1
+chargeNumSource
+currentTimecard 0..*
<<entity>>
0..1
Timecard
0..1
<<Interface>> (from Payroll Artifacts)
IProjectManagementDatabase - hours worked
(from External System Interfaces) - pay period
UnicastRemoteObject
(from Server)
+ getChargeNumbers() + // get timecard info()
+ // update timecard()
# UnicastRemoteObject() + // new()
+ clone() + // save()
+ exportObject()
Timecard must be
passed between
distributed objects
Serializable
(from java.io)
: : : : Timecard :
: Employee : Project
TimecardForm TimecardController PayrollDBManager IProjectManagementDatabase
Management
1. // open()
1.1. // create( )
Ret rieve the current
Timecard for the E mployee
1.2. // get current timecard( )
Sequence Diagram: ObjectStore
Support / PayrollDBManager -
1.2.1. getTimecard(Employee, Date) Get Timecard
Sequence Diagram:
Object Store S upport /
PayrollDBManager - S ave
: Employee
2.1. 1. // update timecard( )
1.4.1. getChargeNumbers(String)
: :
IProjectManagementDatabase Timecard
: Project Management
Database
+currentTimecard
0..*
0..1 0..*
<<control>>
TimecardController
(from Employee Activities)
1
<<boundary>>
TimecardForm
(from Employee Activities)
- // display timecard()
+ // open()
+ // enter hours for charge numbers()
+ // display charge codes()
+ // save timecard()
1.4. 3. // add(Timecard)
1.4.4. new( )
1.4.5. makeReadable( )
The employee is
given "open" 1.4.6. makeWriteable( )
permissions for
1.4.7. makeDeleteable( )
his/her timecard
Sequence Diagram:
ObjectStore Support /
PayrollDBManager - Save
1.4.2. // new( )
1.4.7. makeDeleteable( )
1.1. lookup(String)
:
: Naming.
TimecardForm
1. // open(ISecureUser)
1.2. // create( )
1.3. // setSession(ISecureUser)
1.4. // get current timecard( )
: Employee
TimecardAccess :
SecurityAccess
:
TimecardForm
1.1. getChargeNumbers(String)
: : PayrollDBManager
IProjectManagementDatabase
: Project Management
Database
: Naming.
: 1.1. lookup(String)
:
TimecardForm IProjectManagementDatabase
1. // open(ISecureUser)
2. // enter hours for charge numbers( ) 1.6.1.1. // get charge numbers( )
3. // save timecard( )
1.2. // create( ) 1.6.1. getChargeNumbers(String)
1.3. // setSession(ISecureUser)
1.4. // get current timecard( )
1.6. // get charge codes( )
2.1. / / updat e t imecard( )
3.1. // save timecard( )
1.4.1. getTimecard(Employee, Date)
: PayrollDBManager
3.1.1. save(Timecard, Employee)
: Employee : Project Management
Database
: :
Timecard ITimecardController 1.4.4. new( )
1.4.5. makeReadable( )
1.4.2. // new( ) 1.4.6. makeWriteable( )
2.1.1. // update timecard( ) 1.4. 7. mak eDeleteable( )
TimecardAccess :
1.4.3. // add(Timecard)
SecurityAccess
EmployeeSession :
ISecureUser
: Employ ee
1.3.1 Login
Login - Basic Flow
: LoginForm
: Any User
: LoginForm
: Any Us er
Login - VOPC
LoginForm
(from GUI Framework)
+ open()
+ enterUserName()
+ validateUserIDPassword(
+ enterPassword()
+ logInUser()
+ setupSecurityContext()
+ getUserContext()
1. start( )
1.1. open( )
2. enterUserName( )
3. enterPassword( )
4. logInUser( )
[ login successfull ]
4.2. setupS ecurityContext( )
4.2.1. new(UserID)
The MainEmployeeForm
1.2. setupSecurityContext( ) ret ains the E mployee's
s ession for later
process ing by the user.
1.2. 1. getUserContext( )
1.3. close( )
1.4. displayAvailOperations( )
: MainEmployeeForm
1.1. open( )
1.2.1. getUserContext( )
1.3. close( )
4.1. validateUserIDPassword( )
4.2. setupSecurityContext( )
: Employee
LoginFor
(from GUI Framework)
MainApplicationFor
(from GUI Framework) + open()
+
+ start() +
+ 1 0..1 +
+ +
+
1 +
0..1
MainEmployeeFor
(from Employee Activities) 0..1 0..1
<<Interface>
+ // maintain ISecureUse
(from Secure Interfaces)
+
+
+
+ new()
[REPEAT56]
Any PayrollDB Client : PayrollDBManager : Transaction Passed In : : Map Ret rieved from
Employee Database : Employee
1.6. commit()
If the Employee already has a Timecard for
that pay period, the existing Timecard is
updated with the given Timecard.
1. getTimecard(Employee, Date)
1.1. begin( ) Ret rieve latest
version of the
Employ ee from the
1.2. // get Employee ID( ) database
1.3. get(EmployeeID)
1.4. // getTimecard(Date)
2. commit(RETAIN_HOLLOW)
Retrieve the Timecard with the
specified pay period
Specify the
RETAIN_HOLLOW option
on the commit(), so that the
reference to the retrieved
Timecard can be used
outside of the transaction.
1.2. get(string)
1.3. commit(RETAIN_HOLLOW)
Specify the
RETAIN_HOLLOW option
on the commit(), so that the
reference to the retrieved
Student can be used
outside of the transaction.
PayrollDBManager - Initialize
1. initialize( )
2. create( ) The EmployeeMap is the entry
point into the Database. It is a
"special" data structure. Any
3. join( ) changes to this data structure that
occur within the context of a
transaction will be applied to the
associated ObjectStore Payroll
1.3. creat e( ) Database.
1.4. begin( )
Pass in the
name of the 1.5. new( )
Map, as well
as the Map
itself (the Map 1.6. createRoot("EmployeeMap", EmployeeMap) Creat e t he EmployeeMap
is an Object). that will serve as the
database root .
1.7. commit ()
Once the session has been c reated and joined, t he PayrollDBManager must open and create the new
database.
To create the database, the Pay rollDBManager creates a new transact ion and creates the "root " of the
database with the "createRoot()" operation. In our example, the root will be the EmployeeMap data
structure. It will c ontain instances of the Employee clas s and all “reachable” classes (including
Timecards and Purchase Orders). Remember, the root is t he entry point into the Payroll Database. It is
a "spec ial" data structure. Any changes to t his data struc ture that occur within the context of a
t ransaction will be applied to the associated Payroll ObjectSt ore Database.
PayrollDBManager - Shutdown
1. shutdown( )
2. close( )
3. terminate( )
1.5. / / add(Paycheck)
Main
PayrollDBManager
+ initialize()
Operations to access + shutdown()
Timecard and Purchase + newTimecard(forEmployee : Employee) : Timecard
Order were added for ObjectStore
+ delete(theTimecard : Timecard, forEmployee : Employee)
easier design root class
+ update(theTimecard : Timecard, forEmployee : Employee)
incorporation. The + save(theTimecard : Timecard, forEmployee : Employee)
PayrollDBManager + getTimecard(forEmployee : Employee, forWeekEnding : Date) : Timecard <<entity>> <<entity>>
manages the details of + newEmployee() : Employee Employee Timecard
loading the appropriate (f ro m Payro ll Art ifacts) (from Payroll Artifacts)
+ delete(theEmployee : Employee) 1 0..*
Employee (the selected + update(theEmployee : Employee)
root class) before + save(theEmployee : Employee) 1
accessing Timecard and + getEmployee(withID : string) : Employee
Purchase Order. <<entity>>
+ newPO(forEmployee : Commissioned Employee) : PurchaseOrder 0..* Payc heck
+ delete(thePO : PurchaseOrder, forEmployee : Commissioned Employee) (from Payroll Artifacts)
+ update(thePO : PurchaseOrder, forEmployee : Commissioned Employee) <<entity>> <<entity>> - amount
+ save(thePO : PurchaseOrder, forEmployee : Commissioned Employee) SalariedEmployee HourlyEmployee
+ get(forEmployee : Commissioned Employee) : PurchaseOrder (from Payroll Artifacts) (from Payroll Artifacts) + // create with amount()
+ save(thePaycheck : Paycheck, forEmployee : Employee)
1 1 1 1
1
Session
1
(from com.odi)
<<entity>> <<entity>>
1 0..*
CommissionedEmployee PurchaseOrder
(from Payroll Artifacts) (from Payroll Artifacts)
0..*
1 1
1
Map Database Transaction Object Store
(from com.odi) (from com.odi) (f ro m com.o di) (from com.odi)
Session: The class that represents a database session. A session must be created in order to access the database and
any persistent data.
A session is the context in which PSE/PSE Pro databases are created or opened, and transactions can be executed.
Only one transaction at a time can exist in a session.
Before you begin creating persistent objects, you must create a database to hold the objects. In subsequent
processes, you open the database to allow the process to read or modify the objects. To create a database, you call
the static create() method on the Database class and specify the database name and an access mode.
Transaction: An ObjectStore transaction. Manages a logical unit of work. All persistent objects must be accessed
within a transaction.
ObjectStore: Defines system-level operations that are not specific to any database.
PayrollDBManager: For the Payroll System, there is one ObjectStore database, the Payroll Database, that contains
employee, timecard, and purchase order information for the company. There is one PayrollDBManager (i.e., this
class is a singleton).
This class is responsible for providing access to the persistent objects in the Payroll Database. It provides a single
entry point into the Payroll Database. It contains operations to access entities in the database.
The PayrollDBManager class contains most of the database-specific code, such as starting and ending transactions.
There are noPayrollDBManager objects stored in the database, which means that the PayrollDBManager class is not
required to be persistence-capable.
The PayrollDBManager class has a static members that keep track of the database that is open. It also has a number
of static methods, each of which executes a transaction in the ObjectStore database.
Timecard: The timecard contains information regarding the hours worked by an employee for a given time period.
Paycheck: A record of how much an employee was paid for a given pay period.
<<subsystem>>
ProjectManagementData
base
(from Business Services)
External System
Interfaces
(from Business Services)
ObjectStore Support
(from Business Services)
Payroll Artifacts
(from Business Services)
Security
(from Business Services)
GUI Framework
When the RDBMS
(from Security) mechanism is incorporated,
the dependency on java.sql
will be added
<<subsystem>>
Secure
Security
Interfaces
Manager java.sql
(from Security)
(from Security) (from Middleware)
java.rmi com.odi
(from Middleware) (from Middleware)
java.awt
(from Middleware)
Server
(from java.rmi) java.lang
(from Middleware)
java.io
(from Middleware)
Base Reuse
global
BankSystem Subsystem: Encapsulates the details involved in communicating with external bank systems.
com.odi : The com.odi package contains the design elements that support the OODBMS persistency mechanism.
The name of the package in the model reflects the naming convention for 3rd party Java software. The convention is
to use the reverse of the domain name, so if Rational had a Java package called "util" they’d call it"
com.rational.util". This com.odi has nothing to do with Microsoft COM/DCOM, they are totally separate. There is
nothing COM/DCOM related when using CORBA, RMI, or ObjectStore.
Employee Activities : Contains the design elements that support the Employee's applications.
External System Interfaces : Contains the interfaces that support access to external systems. This is so that the
external system interface classes can be version controlled independently from the subsystems that realize them.
GUI Framework : This package comprises a whole framework for user interface management.
It has a ViewHandler that manages the opening and closing of windows, plus window-to-window communication
so that windows do not need to depend directly upon each other.
This framework is security-aware, it has a login window that will create a server-resident user context object. The
ViewHandler class manages a handle to the user context object.
The ViewHandler also starts up the controller classes for each use case manager.
java.awt : The java.awt package contains the basic GUI design elements for java.
java.io :
java.rmi : The java.rmi package contains the classes that implement the RMI distribution mechanism. This package
is commercially available with most standard JAVA IDEs.
java.sql : The package that contains the design elements that support RDBMS persistency.
ObjectStore Support : Contains the business-specific design elements that support the OODBMS persistency
mechanism. This includes the DBManager. The DBManager class must contain operations for every OODBMS
persistent class.
Payroll : Contains the design elements that support the execution of the payroll processing.
Secure Interfaces : Contains the interfaces that provide clients access to security services.
Security Manager Subsystem: Provides the implementation for the core security services.
Server :