I did not tell anybody that I was automatically failed long time ago in early August.
I made small mistake in my readme file - it's too long story to tell here. As a result I
was involved in very heated argument with Sun and it followed by tons of letters and mutual
misanderstandings. I could not apeal properly because I did not know what part to apeal
about: they've put zero all over the assignment. Eventually, they accepted my mistake as
typo which it was (it was obvious from the beginning but they were determined to blow it
into elefant) and did not charge me those arcane fee for resubmission .
So the following is description of what i did. Maybe you guys will benefit.
First of all, i created very user friendly program, so that from server console it was
possible to administer whole database such as: see all databases (server supported several
datafiles by design) and their detailed logs, control rate of writing to disk (it was done
asincroniously), remote connection expiration time and, of course, port number. Also, the
administrator could close the any given db without notice or stop the server (listening the
connections) that was handled graciously on client side: client was offered to reconnect or
connect later. Dynamic log ran on the server's console: which db did what etc.
From the server's console one could open the client and configure it in remote mode (local
mode was assumed by the client automatically, so you would push the radio button if you
wanted remote for some reason) - it was my answer to somewhat confusing reqs of giving the
choice.
When standalone, client automatically prepared itself as remote client and did not offer
local connecton. Everything was configured as RMI default (1099, localhost).
Now, I will explain guts score by score.
The max number of points: 400, passing score 320. Mine - 362.
General consid: 100 77.
In my old grading table it was broken like this (initially 58 points)
ease of use - many people think that my prog. is very friendly and interesting to deal
with;
coding standard and readability - kept with sun guidlines, maybe lack of comments inside
long methods;
clarity and maintainability, maintainability of the design and implementation - i have no
comments here because i did my best, maybe main class that dealt with Data and actual
datafile was bulkier then they wanted. It is my favorite creation, and I simply love it.
One thing was I kept everything in memory -?
Documentation: 70 70.
Here I don't understand because i thought it was not very good putting it mildly. My only
comment is: I used codes from javaworld articles and SwingWorker which i modified but
nevetherless told urls from which i took those and how i modified them (SwingWorker
especially). Codes from javaworld i modified only by stripping some comments that belonged
to the author of the code. I documented it meticulously and paid due respect to the authors.
OOD: 30 15
This was not on my grading chart initially. I don't know why they stripped 50% for this. I'd
tell that i had a bloody lot of objects on client side to make it more flexible and
stipulated that it was overkill in my docs and indicated all kind of improvements here and
there which were to much for the assignment as is.
GUI: 40 40
My gui contained toolbar: back, refresh, connect, help, search, about buttons with use of
those sun's graphics; header with name of the db, welcome to the user and current time;
right panel with
reserve/unreserve, disconnect, exit buttons; status panel with comnnection info.
I disabled all buttons that the user could not use at the time or enabled them accordingly,
put up exceptions explanations whenever possible, allowed multiple reservations or
cancelations (this was difficult because of dealing with stupid key listeners and such) and
gave detailed report of the operation results (what was successful what failed and why: for.
ex. "there were only 3 seats available why res. for 5 seats failed") as well itemized bill
including taxes
.
Locking 80 80
I am very proud of my locking and if the took it from me i would scream. So, they were good.
In short, my locking mechanism consisted of two major parts.
I wrapped records in binary semaphores - they were Doug Lea-Holub mutants and I am follower of those two. LockManager class had the Semaphores in BitSet and ruled over all their lock-unlock cooperative actions. I had two LockManagers which were twins but one was commanded by the database, another one was expose as public methods to client. So, even if anybody wrote malign client (who did not care for locking) my db would lock itself if the data were modified to avoid corruption.
Date store: 40 40
I don't know what it is.
Please who knows let me know what is it
Network server: 40 40
My server is old pal of adapter
pattern. I think that it's strength is extensive logging - the way how i debugged the whole mess and its name is Pushkin.
If you guys have any questions that are not intended to get whole code,
I will answer.
I am very grateful to these forums for at least one thing that remembered me to include some strings into my prog. so i had very good leverage while arguing with sun - impeccable following of all their reqs.