Payroll Arch Handbk RPT
Payroll Arch Handbk RPT
Payroll Arch Handbk RPT
Version 2003
Mastering OOAD with UML Issue: 2003
Payroll Architecture Handbook Issue Date: 2/7/03
payroll_arch_handbk_rpt.doc
Revision History
Date Issue Description Author
9/5/2000 V2000 Generation for beta Shawn Siemers
10/2/2000 V2000 Final release Shawn Siemers
01/14/2003 V2003 Final Release Alex Kutsick
Table of Contents
1. Description 5
2. Architectural Mechanisms 5
2.1 Analysis Mechanisms 5
2.2 Analysis-to-Design-to-Implementation Mechanisms Map 5
2.3 Implementation Mechanisms 6
2.3.1 Security 6
2.3.2 Persistency - RDBMS - JDBC 10
2.3.3 Persistency - OODBMS - ObjectStore 17
2.3.4 Distribution - RMI 25
3. Logical View 28
3.1 Architectural Analysis 28
3.1.1 Upper-Level Layers 28
3.1.2 Upper-Level Layer Dependencies 28
3.2 Architectural Design 28
3.2.1 Incorporating ObjectStore 28
3.2.2 Architectural Layers and Their Dependencies 29
3.2.3 Packages and Their Dependencies 30
4. Process View 32
4.1 Processes 32
4.2 Design Element to Process Mapping 32
5. Deployment View 32
5.1 Nodes and Connections 32
5.2 Process-to-Node Map 32
In some sections of this document, the architecture is represented textually. The students, as part of the exercises
throughout the course, will generate the associated UML diagrams. Thus, for the UML representation of the
architecture, see the Payroll Exercise Solution.
Note: A SUBSET OF THE PAYROLL SYSTEM IS PROVIDED. Concentration is on the elements needed to
support the Login, Maintain Timecard and Run Payroll use cases.
2. Architectural Mechanisms
2.1 Analysis Mechanisms
Persistency: A means to make an element persistent (i.e., exist after the application that created it ceases to exist).
Distribution: A means to distribute an element across existing nodes of the system.
Note: For this course, it has been decided that the business logic will be distributed.
Security: A means to control access to an element.
Legacy Interface: A means to access a legacy system with an existing interface.
2.2 Analysis-to-Design-to-Implementation Mechanisms Map
Note: Remote Method Invocation (RMI) is a Java-specific mechanism that allows client objects to invoke
operations on server objects as though they were local. Native Java RMI comes with Sun's Java 1.1.
2.3.1 Security
<<Interface>>
Security Acc ess
ISecureData
(from Secure Interfaces)
(from Secure Interfaces)
+ isReadable() : Boolean
+ getUniqueId() : UniqueId
+ isWriteable() : Boolean
+ isDeleteable() : Boolean
UniqueId + makeReadable()
(from Secure Interfaces) + makeWriteable()
<<role>> + makeDeleteable()
SampleSecureClass + generat e() : UniqueId + new()
+ asSt ring() : String
+ getUniqueID() + UniqueId(value : String)
SampleSecureClass :
- Security
Requirements Traceability:
- Usability: The desktop user-interface shall be Windows 95/98 compliant.
1. start( )
1.1. open( )
2. enterUserName( )
We did not expand on
3. enterPas sword( ) validation since it was a
reverse engineered
4. logInUser( ) component
4.1. validateUserIDPassword( )
[ login s uccessful ]
4.2. setupSecurityContext( )
4.2.1. new(UserID)
The
5. setupSecurityContext( ) MainApplicationForm
retains the secure
Display the 5.1. getUserContext( ) user context for later
operations/functions processing by the
that the application user.
provides. 6. close( )
7. displayAvailOperations( )
Secure : :
Clien SecurityAcce
AND/O
4.
For JDBC, a client will work with a DBClass to read and write persistent data.
The DBClass is responsible for accesing the JDBC database using the
DriverManager class. Once a database connection is opened, the DBClass
can then create SQL statements that will be sent to the underlying RDBMS
and executed using the Statement class. The results of the SQL query is
returned in a ResultSet class object.
<<role>>
PersistentClassList
(from SamplePersistentClass)
<<role>>
PersistencyClient
(from SamplePersistency Client) + new()
+ add(c : PersistentClass)
1
0..*
<<role>>
<<role>>
PersistentClass
DBClass
(from SamplePersistentClass)
DriverManager
1 (from java.sql)
Connection
(from java.sql) + getConnection()
+ createSt atement ()
Statement
(from java.sql)
+ executeQuery()
Result Set
(from java.sql)
+ executeUpdate()
+ get String()
PersistentClassList :
Statement : The class used for executing a static SQL statement and obtaining the results produced by it.
SQL statements without parameters are normally executed using Statement objects.
DBClass : A sample of a class that would be responsible for making another class persistent.
Every Class that's persistent will have a corresponding DBClass (e.g., Student will have a DBStudent class).
With an RDBMS, you need a mapping of objects/classes to tables, and you must recreate the
(association/aggregation) structures. DBClass is a database interface class which understands the OO-to-RDBMS
mapping and has the behavior to interface with the RDBMS. This database interface class is used whenever a
persistent class needs to be created, accessed, or deleted. The database interface class flattens the object and writes
it to the RDBMS and reads the object data from the RDBMS and builds the object.
Connection : A connection (session) with a specific database. Within the context of a Connection, SQL statements
are executed, and results are returned.
ResultSet : A ResultSet provides access to a table of data. A ResultSet object is usually generated by executing a
Statement.
To read a class, the client asks the DBClass to read. The DBClass creates a
new statement using the Connection class createStatement() operation. The
statement is executed and the data is returned in a ResultSet object. The
DBClass then creates a new instance of the PersistentClass and populates
with the retrieved data. The data is returned in a collection object, an instance
of the PersistentClassList class.
JDBC RDBMS
1.2. createStatement(
execute SQL
statement
1.3.
To update a class, the client asks the DBClass to update. The DBClass retriev
from the existing PersistentClass object, and creates a new Statement using
connection class createStatement() operation. Once the Statement is built, the
executed, and the database is updated with the new data from the
1. create( )
1.1. new( )
1.2. getData( )
1.3. createStatement( )
1.4. executeUpdate(string)
To create a new class, the client asks the DBClass to create the new class. The
DBClass creates a new instance of Persistent Class with default values. The
DBClass then creates a new Statement using the Connection class
createStatement() operation. The statement is executed and the data is inserted
into the database.
1. delete(PersistentClass)
: DBClass :
DriverManager
Parameters:
url - A database url of the form jdbc:subprotocol:subname
user - The database user on whose behalf the Connection
is being made
password - The user's password
You define the Persistent Class for persis tent use the same way you
define it for transient use. Ot her than t he required import com.odi.*
statement, there is almost no special code for pers ist ent use of the
Persis tent Class.
<<role>>
SampleDBManager
+ initialize()
+ command()
+ shutdown()
+ newPersistentClass() : PersistentClass
1
+ removePersistentClass(theClass : PersistentClass)
+ getPersistentClassData() : PersistentClass
Session
1 Object St ore
(from com.odi)
1 1 1 (from com.odi)
1
1
+ create()
+ destroy(object : Object)
+ join()
+ terminate() 0..*
1 Transaction
Map (from com.odi)
(f ro m c om.od i)
+ begin()
+ put(name : string, object : Object) + commit(retain : int)
+ get(name : string) : Object
+ remove(name : string) 1
+ new()
Database
(from com.odi)
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.
: : : Transaction : DatabaseRoot :
PersistencyClient SampleDBManager PersistentClass Map
1. newPersistentClass( )
1.1. begin( ) constructor
call
The root is
1.2. new( ) the entry
point into the
Database.
1.3. put(string, Object)
1.4. commit(int)
Pass in the unique key for the
PersistentClass and the
PersistentClass.
The PersistentClass will be stored in
the Map, and subsequently, in the
ObjectStore Database.
To delete an object from the database, the SampleDBManager first creates a new transaction,
removes any constituent parts, and then removes the object using the database root "remove()"
operation. The object is then completely removed from the ObjectStore database immediately via
ObjectStore.destry (). Once the object has been removed, the transaction is committed.
Thus, in ObjectStore, delete really has two steps -- removal from the container class that is the
database in memory, and removal from the physical database. that is because you want the deletion
to occur right away, as opposed to being cached.
: : : Transaction : DatabaseRoot :
PersistencyClient SampleDBManager PersistentClass Map
The root is
1. getPersistentClassData( ) the entry
Find the object in point int o t he
1.1. begin( )
the database; pass Databas e.
in the unique key
St art a read-only
t ransaction to ensure
t hat t he object isn't 1.2. get(string)
c hanged while we're
reading it
1.3. getData(String)
1.4. commit(RETAIN_HOLLOW)
Read the dat a from
returned object
Specify the object
RETAIN_HOLLOW option
on the commit(), so that the
references to the retrieved
data can be used outside of
the transaction.
To read an object , the SampleDBManager first creates a new read-only transaction then looks
up the object using the Map "get()" operation. Once the object has been found it can be read with
the "getData()" operation, and the transaction committed. RETAIN_HOLLOW is specified for the
commit,. so the references to the object and the retrieved data can be used outside of the
retrieval transaction. Once the transaction is committed the object can then be updated.
Note: Even though RETAIN_HOLLOW is specified, it does not guarantee the integrity of the
reference outside of the transaction. There is still some risk that the reference could be outdated.
RETAIN_HOLLOW basically says "I'm consciously taking such a risk". If that option was not
used, then the references would not be available.
: : : Transaction DatabaseRoot : :
PersistencyClient SampleDBManager Map PersistentClass
1.4. commit
1. initializ e( )
1.1. create( )
The root is the entry point into the
Database. It is a "special" data
1.2. join( ) structure. Any changes to this
data structure that occur within the
context of a transaction will be
applied to the associated
1.3. create( ) ObjectStore Database.
1.4. begin( )
Pass in the
name of the
Map, as well 1.5. new( )
as the Map
itself (the map 1.6. createRoot(string, Object) Create the Map that will
is an Object). serve as the database
root.
1.7. commit ()
Once the session has been c reated and joined, t he SampleDBManager must open and create the new
database.
To create the database, the SampleDB Manager creates a new transac tion and creates the "root" of t he
database with the "createRoot()" operation.
The root is the entry point into the Database (the root class is the top-level class in t he object databas e).
It is a "special" data st ructure (in the above example, a Map that contains instanc es of the root class and
all “reachable” c lasses). Any changes to this data struct ure that occur within t he c ontext of a trans action
will be applied to the associated ObjectStore Database. There may be multiple database root s.
1. shutdown( )
1.1. c lose( )
1.2. terminate( )
<<role>>
SampleDistributedClass
Remote :
* The Remote interface serves to identify all remote objects.
* Any object that is a remote object must directly or indirectly implement
* this interface. Only those methods specified in a remote interface are
* available remotely. <p>
* Implementation classes can implement any number of remote interfaces
* and can extend other remote implementation classes.
For all classes that realize the Remote interface, a remote stub and a remote skeleton are created. These classes
handle the communication that must occur to support distribution.
UnicastRemoteObject :
Serializable : Any Java class that you want to pass as an argument to an operation on a remote interface must
realize the Serializable interface.
2. doSomething
2.1. doSomething
: : Naming. : :
SampleDistributedClassClient ISampleDist ributedClassInt erface SampleDistributedClass
2. doSomething
2.1. doSomething
3. Logical View
3.1 Architectural Analysis
The selected container is the Map, where the unique key to access the Employees is EmployeeID.
There is one DBManager class per ObjectStore database instance. For the Payroll System, there is one ObjectStore
database, the Payroll Database, that contains employee information, including timecard, purchase order, and
paycheck information. Thus, there is one PayrollDBManager that exists in the new OODBMS Support package.
For the ObjectStore persistency mechanism, the DBManager class includes operations to access the OODBMS
persistent entities in the database. For the PayrollDBManager class, operations have been added to access
Employee, Timecard, Purchase Order, and Paycheck information since that is required for the core system
functionality.
During Identify Design Mechanisms, the architect provides guidance to the designers and makes sure that the
architecture has the necessary infrastructure to support the mechanism. Thus, the PayrollDBManager and the
supporting architectural packages and relationships (OODBMS Support) have been defined in Identify Design
Mechanisms. However, the development of the interaction diagrams that describe these operations and where they
fit into the existing use-case realizations has been deferred until detailed design (e.g., Use-Case and Subsystem
Design).
The following diagram demonstrates the operations that have been defined for the PayrollDBManager during
Identify Design Mechanisms:
<<layer>>
Application
<<layer>>
Business
Services
<<layer>>
Middleware
Base Reuse
global
Business Services Layer: The Business Services layer contains business-specific elements that are used in several
applications.
<<subsystem>>
BankSystem
(from Business Services)
<<subsystem>>
PrintService
(from Business Services)
<<subsystem>>
ProjectManagementData
External System b ase
Interfaces (from Business Services)
(from Business Services)
Payroll Artifacts
(from Business Services)
GUI Framework
(from Security)
Security
(from Business Services)
<<subsystem>>
Secure When the RDBMS
Security Manager
Interfaces mechanism is incorporated,
(from Security) the dependency to java.sql
(from Security)
will be added
com.odi java.sql
java.rmi java.awt (from Middleware) (from Middleware)
(from Middleware) (from Middleware)
Base Reuse
java.lang
global (from Middleware)
Employee Activities : Contains the design elements that support the Employee's applications.
Administration : Contains the design elements that support the Payroll Administrator's applications.
Payroll : Contains the design elements that support the execution of the payroll processing.
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.
java.awt : The java.awt package contains the basic GUI design elements for java.
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.
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.
Secure Interfaces : Contains the interfaces that provide clients access to security services.
Security Manager Subsystem: Provides the implementation for the core security services.
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.
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.
4. Process View
4.1 Processes
The processes for the Payroll System will be the following:
To further improve throughput and turnaround, a Bank Transaction thread was defined to allow multiple accesses to
the Bank System to occur concurrently. Each time a transaction needs to be sent to the Bank System, a different
thread is used. The Bank Transaction thread will run in the context of the Bank System Access process.
In general, the above processes and threads were defined to support faster response times and take advantage of
multiple processors.
4.2 Design Element to Process Mapping
- The classes associated with the individual user interfaces should be mapped to those processes.
- The classes associated with the individual business services should be mapped to those processes.
- The classes associated with access to the external systems should be mapped to those processes.
5. Deployment View
5.1 Nodes and Connections
The nodes of the physical architecture for the Payroll System are the following:
- Desktop PCs (processors)
- Payroll Server (processor)
- Bank System (processor)
- Project Management Database (processor)
- Printers (devices)
- The Desktop PCs are connected to the Payroll Server via the Company LAN
- The Printers are connected to the Payroll Server via the Company LAN
- The Payroll Server is connected to the external Bank System via the Internet.
- The Payroll Server is connected to the ProjectManagementDatabase via the Company LAN
5.2 Process-to-Node Map
The following processes run on the Desktop PCs:
- EmployeeApplication