You can use stateless session beans since the beans will store information
specific to a client.
James Cook wrote:
> Dan,
>
> The problem you are facing is not restricted to servlets, but rather the
> browser paradigm. I believe your argument is correct in those circumstances
> when the developer uses frames, and when the user opens multiple windows.
> Someone developing applications could experience similar "shortcomings" if
> they used threading in their application.
>
> The real crux of your problem deals with the server's ability to recognize
> an incoming clients session identification. How does the server magically
> determine that the client request belongs to ClientA and not ClientB? The
> spec does not specify *how* this will occur, so I imagine that there are a
> variety of techniques. You may find that they vary specifically based on the
> underlying platform, RMI versus CORBA.
>
> I hope that each vendor takes the time to weigh in on this issue. It is at
> this point that we have the opportunity to establish "best practices" for
> future development.
>
> jim
>
> PS: Have you actually tested your hypothesis? Do your servlets blow up with
> exceptions? If so, a workaround would be to store the state you were
> delegating to the stateful session bean in the servlet. Redesign your server
> interfaces to use stateless session beans.
>
> ----- Original Message -----
> From: dan benanav <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Tuesday, January 18, 2000 6:19 AM
> Subject: Re: Thread Safety, Session beans,Saving in servlet sessions.
>
> > I have concluded that the Pet Store demo is not thread-safe and that there
> is no currently recommended way to us a
> > session bean for storing session state for a web-based client.
> >
> > Can we get a definitive answer from Sun on this?
> >
> > 1) Do you agree the Pet Store Demo is not thread safe? If not where is
> the flaw in my argument?
> > 2) What should be done to store session state? (See below for
> suggestions)
> >
> > We might have hundreds of programmers following the recommendations and
> writing unsafe code.
> >
> > dan
> >
> > dan benanav wrote:
> >
> > > No it doesn't help. The original question concerns how to use a session
> bean from a servlet. I think that the
> > > obvious way to use it leads to unsafe code. That is, the servlet saves
> a reference to the session bean in an
> > > HttpSession object. That is what was done in the Pet Store Demo and
> what is suggested in the Sun BluePrint
> > > (Formerly Application Programming Model). Since we seem to be saying
> clients are not allowed to make
> > > concurrent calls to a session object one should not do that.
> > >
> > > So the real question is what is the proper way to use a session bean
> from a servlet?
> > >
> > > Possible answers seem to be:
> > >
> > > 1. Wrap the method calls to a session bean in another web object that
> synchronized the calls.
> > > 2. Implement a locking mechanism in the servlet an obtain a lock before
> using the session bean and release
> > > when done.
> > >
> > > I don't really like either of these approaches since the programming is
> now having to do "system level"
> > > programming, something that is supposed to be unnecessary by using ejb.
> > >
> > > A possible 3rd approach is to:
> > >
> > > 3. Use an entity bean to keep track of the session information.
> > >
> > > For 3 the programmer would have to take care of the life cycle of the
> bean. In particular when the session
> > > expires the bean should be destroyed.
> > >
> > > Maybe 3 is the best approach?
> > >
> > > I must say also that I am quite surprised about the number of people who
> incorrectly believe that session
> > > object methods can be called concurrently and that there appears to be
> no standard way to use a session object
> > > from a servlet to keep track of session specific information. It
> concerns me that after all this time it is
> > > still not clear.
> > >
> > > Mark Cade wrote:
> > >
> > > > Dan,
> > > >
> > > > I agree with the sentence that clients are not allowed to make
> concurrent calls to a session object,
> > > > but the specification cannot control the client so the specification
> put in the provision to throw a
> > > > remote exception when the client attempts to make concurrent calls.
> If you choose to control this in
> > > > your client, that is fine or you can let the bean take care of this
> for you and catch the remote exception.
> > > >
> > > > Hope this helped.
> > > >
> > > > Mark
> > > > >Assad,
> > > > >
> > > > >Your are completely ignoring the sentence:
> > > > >
> > > > >Clients are not allowed to make concurrent calls to a session object.
> > > > >
> > > > >Note that it says, clients, not the container. What is your
> interpretation of
> > > > >that
> > > > >sentence? I believe you are misinterpreting the section on
> serialization. The
> > > > >container
> > > > >will make calls to the bean and must serialize those calls. For
> example it
> > > > >should not
> > > > >call ejbPassivate while invoking a method on the bean.
> > > > >
> > > > >dan
> > > > >
> > > > >Assaf Arkin wrote:
> > > > >
> > > > >> Please accept my apology for not responding directly to the
> argument you
> > > > >> made. I was just too busy conversing with RMH on the CMP
> implementation.
> > > > >>
> > > > >> Section 6.5 defines the contract between the container and the
> bean. The
> > > > >> container will assure that all access to a bean instance are
> serialized.
> > > > >> Period. A bean does not have to be re-entrant.
> > > > >>
> > > > >> However, (please refer to pages 67/68) when invoking a method on a
> > > > >> stateless session bean the container can choose a different
> instance for
> > > > >> each method invocation. That means that concurrent method
> invocation can
> > > > >> occur by delegating them to two separate instances.
> > > > >>
> > > > >> So, if you have one remote interface into a stateless session bean
> and
> > > > >> perform concurrent method invocation, you get to instances two
> serve the
> > > > >> two method calls. Pretty much the same as using two different
> remote
> > > > >> interfaces, since the interface is not tied to any particular
> instance.
> > > > >>
> > > > >> There is just no other way to deal with stateless session beans in
> a
> > > > >> distributed environment.
> > > > >>
> > > > >> arkin
> > > > >>
> > > > >> dan benanav wrote:
> > > > >> >
> > > > >> > Assaf Arkin wrote:
> > > > >> >
> > > > >> > > That's exactly what I was reading. The "container serializes"
> means that
> > > > >> > > the container is responsible for serialization, not the
> application. You
> > > > >> > > can write an application that perform concurrent calls to the
> same bean
> > > > >> > > without needing to synchronize the access. The container will
> make that
> > > > >> > > happen for you.
> > > > >> >
> > > > >> > You missed the sentence that says:
> > > > >> >
> > > > >> > Clients are not allowed to make concurrent calls to a session
> object.
> > > > >> > > If a client-invoked business method
> > > > >> > > is in progress on an instance when another client-invoked call,
> from
> > > > >> > > the same or different client, arrives
> > > > >> > > at the same instance, the container must throw the
> > > > >> > > java.rmi.RemoteException to the second cli-ent.
> > > > >> >
> > > > >> > That seems pretty clear to me.
> > > > >> >
> > > > >> > The sentence you refer to is saying something else. The
> container
> > > > >serializes calls
> > > > >> > that it makes to the bean. For example it should not call
> ejbPassivate and a
> > > > >method
> > > > >> > of the bean simultaneously from two separate threads. For
> example the
> > > > >container
> > > > >> > needs to be careful not to call ejbPassivate while it is in the
> process of
> > > > >invoking
> > > > >> > a business method. Hence it needs to serialize these calls.
> > > > >> >
> > > > >> > > Why is that important? If you are running two threads that
> access the
> > > > >> > > same bean, you can use synchronized() on the bean object to
> perform
> > > > >> > > serialized access. But if you passed your handle to an
> application on a
> > > > >> > > different machine, both your application and the other one
> might attempt
> > > > >> > > to access the bean at the same time. There is no distributed
> > > > >> > > synchronized() mechanism, so the responsibility falls on the
> container.
> > > > >> > >
> > > > >> > > Loopback is indeed not supported in some beans, supported but
> highly
> > > > >> > > discouraged in other beans (this is spelled out in the entity
> bean
> > > > >> > > section). It doesn't prevent recursion if that recursion is
> performed
> > > > >> > > inside the bean, but not across beans.
> > > > >> > >
> > > > >> > > arkin
> > > > >> > >
> > > > >> > > dan benanav wrote:
> > > > >> > > >
> > > > >> > > > > Assaf, notice the bold text below taken from the spec.
> > > > >> > > >
> > > > >> > > > 6.5.6 Serializing session bean methods
> > > > >> > > > A container serializes calls to each session bean instance.
> Most
> > > > >> > > > containers will support many instances
> > > > >> > > > of a session bean executing concurrently; however, each
> instance sees
> > > > >> > > > only a serialized sequence of
> > > > >> > > > method calls. Therefore, a session bean does not have to be
> coded as
> > > > >> > > > reentrant.
> > > > >> > > > The container must serialize all the container-invoked
> callbacks (that
> > > > >> > > > is, the methods ejbPassivate,
> > > > >> > > > beforeCompletion, and so on), and it must serialize these
> callbacks
> > > > >> > > > with the client-invoked busi-ness
> > > > >> > > > method calls.
> > > > >> > > >
> > > > >> > > > One implication of this rule is that it is illegal to make a
> > > > >> > > > ?loopback? call to a session bean instance.
> > > > >> > > > An example of a loopback call is when a client calls instance
> A,
> > > > >> > > > instance A calls instance B, and B calls
> > > > >> > > > A. The loopback call attempt from B to A would result in the
> container
> > > > >> > > > throwing the
> > > > >> > > > java.rmi.RemoteException to B.
> > > > >> > > > Assaf Arkin wrote:
> > > > >> > > >
> > > > >> > > > > Let the EJB server deal with synchronized access. That's
> what it was
> > > > >> > > > >
> > > > >> > > > > designed to do.
> > > > >> > > > >
> > > > >> > > > > arkin
> > > > >> > > > >
> > > > >> > > > > dan benanav wrote:
> > > > >> > > > > >
> > > > >> > > > > > I am confused about how to use EJB session beans from
> servlets.
> > > > >> > > > > Isn't
> > > > >> > > > > > is true that EJB session beans should only be accessed by
> one
> > > > >> > > > > thread at
> > > > >> > > > > > a time and that the client must enforce that? If that is
> the case
> > > > >> > > > > then
> > > > >> > > > > > doesn't that mean that an EJB session bean should not be
> saved in
> > > > >> > > > > a
> > > > >> > > > > > session object, since session objects can be accessed by
> more then
> > > > >> > > > > one
> > > > >> > > > > > thread at a time. (I am referring to session objects in
> the
> > > > >> > > > > servlet
> > > > >> > > > > > sense now, not the ejb sense.) This happens when
> multiple
> > > > >> > > > > windows are
> > > > >> > > > > > open or when frames are used.
> > > > >> > > > > >
> > > > >> > > > > > For example, it looks to me like the ejb session beans
> are saved
> > > > >> > > > > in
> > > > >> > > > > > various session object of the Pet Store demo. Doesn't
> this mean
> > > > >> > > > > the
> > > > >> > > > > > demo is not thread safe?
> > > > >> > > > > >
> > > > >> > > > > > dan
> > > > >> > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > >
> >===========================================================================
> > > > >> > > > >
> > > > >> > > > > > To unsubscribe, send email to [EMAIL PROTECTED] and
> include in
> > > > >> > > > > the body
> > > > >> > > > > > of the message "signoff EJB-INTEREST". For general help,
> send
> > > > >> > > > > email to
> > > > >> > > > > > [EMAIL PROTECTED] and include in the body of the
> message
> > > > >> > > > > "help".
> > > > >> > >
> > > > >> > > --
> > > > >> >
> > ----------------------------------------------------------------------
> > > > >> > > Assaf Arkin
> www.exoffice.com
> > > > >> > > CTO, Exoffice Technologies, Inc.
> www.exolab.org
> > > >
> > > >
> ===========================================================================
> > > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the
> body
> > > > of the message "signoff EJB-INTEREST". For general help, send email
> to
> > > > [EMAIL PROTECTED] and include in the body of the message "help".
> > >
> > >
> ===========================================================================
> > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the
> body
> > > of the message "signoff EJB-INTEREST". For general help, send email to
> > > [EMAIL PROTECTED] and include in the body of the message "help".
> >
> >
> ===========================================================================
> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the
> body
> > of the message "signoff EJB-INTEREST". For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
> >
>
> ===========================================================================
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff EJB-INTEREST". For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".