J
John
I'm looking for some ideas on which combinations of Java language
features, third party tools and design patterns would apply to the
design of the following type of system subject to certain constraints as
described below.
This is to be a distributed client-server system.
J2EE is NOT an option.
SERVER
This task manages a database on behalf of multiple clients. All requests
and responses must be synchronous. The database is relational but the
server must work with an object-oriented representation of the data therein.
The server must be a singleton.
If it crashes then something must restart it.
CLIENT
Must be Swing based.
Retrieves lists of database objects managed by the server with which to
populate its GUI.
User selects an object via the GUI, enters additional data via that same
GUI, and issues a synchronous add/update/delete transaction to the
server upon clicking the appropriate button. Client app must wait for a
response from the server before continuing.
All clients must display a "live" view of the internal state of the
objects that the server is maintaining on their behalf. In other words,
if client 'A' updates an object then the GUI of client 'B' should
reflect that change automatically.
OPTIONS CONSIDERED SO FAR
Hibernate - for the ORM. I'm okay with this part.
RMI - While this seems a natural fit to the system's design, in
prototyping it I find a number of problems. For instance:
An "activatable" server can be successfully launched on demand but
if/when the server exits normally or crashes I can't get RMID to
relaunch it. Perhaps I am doing something wrong?
The RMIRegistry and RMID are additional tasks that must be launched
prior to the server. This requires non-Java, OS-specific scripting to
achieve. I'd prefer an all-Java, OS-independent approach.
It's not clear to me how I would effectively apply the notion of an
Observable object in an RMI environment. This seems particularly murky
to me since the objects are also being managed by Hibernate. This is
probably the design aspect where I could use the most assistance.
SWING - I have concluded that plain Swing, without some sort of higher
level framework to streamline the process, is not worth coding. I have
looked at JGoodies and SWIXML, and each has its benefits, but they don't
cooperate with one another. So their potential value is lost to me.
I am also totally PO'd at having to write a custom model for every
blasted JTable and JList in the GUI as there are many lists of objects
to be managed by the server on behalf of the clients. Grrr.
Thanks for listening.
features, third party tools and design patterns would apply to the
design of the following type of system subject to certain constraints as
described below.
This is to be a distributed client-server system.
J2EE is NOT an option.
SERVER
This task manages a database on behalf of multiple clients. All requests
and responses must be synchronous. The database is relational but the
server must work with an object-oriented representation of the data therein.
The server must be a singleton.
If it crashes then something must restart it.
CLIENT
Must be Swing based.
Retrieves lists of database objects managed by the server with which to
populate its GUI.
User selects an object via the GUI, enters additional data via that same
GUI, and issues a synchronous add/update/delete transaction to the
server upon clicking the appropriate button. Client app must wait for a
response from the server before continuing.
All clients must display a "live" view of the internal state of the
objects that the server is maintaining on their behalf. In other words,
if client 'A' updates an object then the GUI of client 'B' should
reflect that change automatically.
OPTIONS CONSIDERED SO FAR
Hibernate - for the ORM. I'm okay with this part.
RMI - While this seems a natural fit to the system's design, in
prototyping it I find a number of problems. For instance:
An "activatable" server can be successfully launched on demand but
if/when the server exits normally or crashes I can't get RMID to
relaunch it. Perhaps I am doing something wrong?
The RMIRegistry and RMID are additional tasks that must be launched
prior to the server. This requires non-Java, OS-specific scripting to
achieve. I'd prefer an all-Java, OS-independent approach.
It's not clear to me how I would effectively apply the notion of an
Observable object in an RMI environment. This seems particularly murky
to me since the objects are also being managed by Hibernate. This is
probably the design aspect where I could use the most assistance.
SWING - I have concluded that plain Swing, without some sort of higher
level framework to streamline the process, is not worth coding. I have
looked at JGoodies and SWIXML, and each has its benefits, but they don't
cooperate with one another. So their potential value is lost to me.
I am also totally PO'd at having to write a custom model for every
blasted JTable and JList in the GUI as there are many lists of objects
to be managed by the server on behalf of the clients. Grrr.
Thanks for listening.