[Opensource] Time to initialize dbobject

Michael Rimov rimovm at centercomp.com
Fri Jun 7 12:31:21 PDT 2002


At 09:09 PM 6/6/2002 -0500, you wrote:
>On Thu, 06 Jun 2002 10:54:52
>  Michael Rimov wrote:
> >At 09:08 AM 6/6/2002 +0200, you wrote:
>
>(snip)
>
> >Thirdly, DBObjects themselves are not truly threadsafe [Although the
> >function to get the value from the cache is, the rest of it isn't.]
>
>DBObjects are not threadsafe??  Are you saying that using DBObjects from a 
>servlet environment could cause database corruption or other problems?

Not at all!  Sorry for the misunderstanding!  But if you think about it a 
threadsafe object is only necessary if:

1 - The object is actually shared between server requests

or

2 - The object is specifically shared between two threads without explicit 
queues.


In this case, a DBObject is traditionally retrieved by a single 
request.  Therefore, inter-thread sharing is not truly really necessary.

The ONE case where a DBObject is shared across threads is through the 
dbobject cache.  Access to the DBObjects through the cache IS 
threadsafe.  Thus you won't be corrupting anything in the database.  In 
fact my own test takes about 30 threads and works with the underlying 
database as a test case.  If that helps to ease your mind.

Why I say not threadsafe, is that right now an instantiated DBObject is not 
intended to be shared except through the system cache.  You could easily 
create a wrapper object where all methods to the object are synchronized, 
and you would be fine.

It gives us a LARGE performance boost by working things that way, and still 
allows DBObjects to be used in the way they typically are through a normal 
servlet request.

Does this make sense?  Am I babbling?  Let me know! :)

                                                 -Mike





More information about the Opensource mailing list