On Wed, 03 Dec 2003 16:18, Todd O'Bryan wrote:
> How do people handle this elegantly? The requirements are: a single,
> globally visible (within a webapp) database interface and the ability
> to access multiple databases easily.
The first point is to use a singleton to set up the database connection - or
more correctly the connection pool. This way you can request a connection and
return it to the pool easily. Of course every time you use one you will have
to use try-catch blocks. Sorry no way around that.
However, if you are clever you will create data objects to hide all that
stuff. Even better - why not get something to write all those horrid data
objects - sql and trycatch blocks for you.
Last year we (another developer any myself) developed a project called sysmod,
which essentially takes a xml description of a database schema and turns it
into Java code and a real SQL schema. This is by no means a unique approach -
tools like JBuilder allow you to use graphical UI's and UML to do something
similar - and is even two way.
However, our approach is somewhat lighter. All we have is the XML model. The
model generates the Java data objects. The code includes comments such that
it creates nice JavaDoc as well, so in effect you have a self documenting
business model from the XML. At this stage we have to write very little SQL,
and no SQL at all for updating and adding records.
The actions (we use struts) become very simple because in addition to being
able to load and save themselves from a database they can also load
themselves from a request, therefore our code looks something like this:
Client client = ClientFactory.newClient();
client.loadFromRequest( "client", request );
client.saveChanges();
This code essentially loads all the fields from the request prefixed by
"client" into the data object. Then the call to saveChanges() saves the
record to the database. The data objects also handle their own SQL
exceptions, although they throw their own exceptions.
The Factory for each data object also provides lists of various kinds, ie you
can call ClientFactory.findAll() and it will return a list of Client objects
prefilled by a single query. You can also do a findByQuery with parameters to
define the query.
The approach works very well, but is not without its drawbacks. It is quite
easy to code things which look logical but create hundreds of queries and is
inefficient. We are still working on ways to improve the system, such as
caching data. It is also limiting - in that while it creates DataObjects it
is not a trrue object hiracy. This is because the system is still based on a
relational database. In other words this system is not a relational mapping
tool. It is also not a object database.
However, it does provide a quick and easy way to prototype databases and the
Java code to access it. Currently the system creates objects that are not JDO
or EJB.
If you are interested I can provide it -
Regards,
Peter Harrison
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]