Actually, any class with only local variables is always thread safe.

On 1/6/06, Michael Echerer <[EMAIL PROTECTED]> wrote:
>
> Duan, Nick wrote:
> > HttpServlet is inherently thread-safe as long as you don't use any
> > instance and class variables in your code.  There is also no need to
> > sync around the session object, because there is only one servlet that
> > is active at a time.  The only sync you have to do is with app context
> > objects.
> How can you guarantee that only one servlet is active at a time? Tomcat
> by default has many connector threads that could simultaneously handle
> concurrent requests to the same servlet or different servlets that all
> could work with the same sessionid session objects. Without
> SingleThreadModel this servlet won't be pooled, hence all requests would
> have to be serialized to make this work, which is obviously not an
> option for performance reasons as the spec says (e.g. regarding servlet
> lifecycle and synchronized service methods)
> BTW, if only one servlet would be active at a time, your advice not to
> use instance/class variables would not be of any use, as under this
> assumption no concurrency issues while accessing those variables could
> occur. However it's valid.
> It should be quite easy to write a simple test jsp using a session and
> containing e.g. image links to a servlet that manipulates session
> content, each time called. Due to most browsers behaviour to request
> many images at the same time and Tomcats connector threads, I wouldn't
> bet on this, if you put this under load and log results...
> >
> > If you want to sync on your DB resource, you will have bottleneck
> > problems with DB connections.  The best solution is to use a DB
> > connection pool which is more scalable.
> >
> DB connections pools are a good idea (e.g. to avoid connection opening
> times that take a few hundred ms with most DBs, eventhough neglectable
> for others). Nevertheless depending on the kind of transactions done,
> setting an appropriate transaction isolation level is just as important
> as doing other syncs. If you just read from the DB you can stick to the
> default level, but e.g. for a booking & reservation system, I wouldn't
> trust read-committed, when doing lookups, inserts, updates wildly mixed
> in one transaction. Could easily happen that someone else booked your
> trip then, eventhough you got the confirmation... ;-)
>
> Cheers,
> Michael
> > ND
> >
> > -----Original Message-----
> > From: Michael Echerer [mailto:[EMAIL PROTECTED]
> > Sent: Friday, January 06, 2006 11:52 AM
> > To: Tomcat Users List
> > Subject: Re: Single Thread is deprecated?
> >
> > Christian Stalp wrote:
> >
> >>Hello out there,
> >>I want to build a servelt which access a database. To avoid
> >>race-conditions and to realize synchronous access, I decited to make a
> >>"Singe Thread" Servlet. But Eclipse told me that this is no longer a
> >>usable code.
> >
> > Usually the best solution is to synchronize just the part that accesses
> > the single resource (the DB) instead of using single thread.
> >
> > In worst case you won't even achieve what you want using single thread
> > mode because according to the servlet specification servlet containers
> > are free to pool servlets, if it implements SingleThreadModel. Hence you
> > could have multiple pooled instances that be no means guarantee an
> > synchronized access to your database in case of simultaneous requests
> > hitting different instances.
> >
> > So SingleThreadModel is deprecated for good reason, since servlet spec
> > 2.4 and also for 2.5. You are better of synchronizing yourself. Don't
> > rely on SingleThreadModel as an easy way to get around multithreading
> > issues.
> >
> > In case you have different code parts accessing your DB or various
> > clients, it might not even help to just sync one servlet. You might even
> > have to set database transaction isolation level to fit your needs for
> > your DB connections. Most DBs have "read-committed" by default, but it
> > might be that you need isolation level up to "synchronized". Depends on
> > your use case...
> >
> > Cheers
> > Michael
> >
> >
> >>So what can I do else?
> >>
> >>Thank you...
> >>
> >>Gruss Christian
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
"You can lead a horse to water but you cannot make it float on its back."
~Dakota Jack~

Reply via email to