Object Design Review

submitDocument Scenario
Jack, an IETM author in Montana, finishes his first draft and needs to submit it to the Authoring Database for review.  (submitDocument())
The DBClient notices that this is the first time Jack has accessed the database, and asks him to login. (authenticateUser(), which is not a public method)

submitDocument (cont)
After successful authentication, the DBClient initiates a call to the DBServer to carry out the submit request. (API undecided)
Upon successful completion of the task, the ID of the newly submitted document is returned.
Jack realizes this is the last thing he needs to do today, and logs out.  (logout())

Object Model (Simplified)

Notes on the Object Model
Other subsystems should only interact with the DBClient.
The DBServer creates threads for each connection from the NetworkServer.
As a result, the authentication and notification subsystems will be thread-safe.

Infamous Document
It is an interface
void addSubscriber(String username)
String getDatatype()
Collection getAuthorizedReaders()
Collection getAuthorizedWriters()
Collection getSubscribers()
Collection getSearchableData()

API
int submitDocument(Document data)
Document retrieveDocument(int docID, String datatype, boolean forReading)
int updateDocument(int docID, Document data)
Collection listDocuments(Collection criteria, Collection desiredFields)

API (cont)
void addSubscriber(String username, int DocID, String datatype)
String getUsername()
void logout()
Javadoc: http://www.contrib.andrew.cmu.edu/~parkison/SE/javadoc/index.html

Hardware Requirements
Client: PEDD, desktop – we’re not the bottleneck in hardware needs!
Server: Dedicated STARS DB Server with 100-300 GB of disk space.
Client/Server: Any network connection, but the faster, the better.

Software Requirements
Client: JavaRMI
Server: JavaRMI.  Also, LotusNotes must be running for authentication and notification.  The database subsystem also needs a database backend to store all of the data.

Notes About the Database
LotusNotes has a 254 character limit on field sizes when using JDBC.
LotusNotes only supports JDBC 1.1.
Workflow is currently looking at other DBMS’s to use as the backend.

Database Fields
The fields need to be specified to the Workflow team ahead of time.
Workflow will be adding additional fields, mostly for internal management.
These fields will be accessible by other subsystems.

Added Fields
previous_version
current_writer
serialized_data
These field names cannot be used by other subsystems!

Status of Subsystem
Working on implementation
Interface to front end is defined and ready to implement
Back end server access to database is proceeding in earnest
Authentication and Notification subsystem are somewhat lacking in code
RMI is in the works

Timeline

Open Issues
Is RMI the best way to do the networking?
What database will replace LotusNotes?
How do we deal with dead network connections?
How are we going to implement and test all of this in a timely manner?