Dan,

<vendor>
GemStone/J provides some good solutions in this area, including:

- Shared http session state. GemStone/J can share http session state across
multiple JVM's and server machines. You code to standard http session state
apis (nothing proprietary). We share the session state map through PCA
transaparently.

- You can use PCA directly to cache things. PCA is accessed through JNDI
(very transparent to your object model). Concurrency services and multiple
read/writer collisions. This is similar to ObjectDesign's offering, but all
bundled into the EJB server itself.
</vendor>

-Chris.

http://www.gemstone.com/

> -----Original Message-----
> From: dan benanav [SMTP:[EMAIL PROTECTED]]
> Sent: Tuesday, January 18, 2000 7:44 AM
> To:   [EMAIL PROTECTED]
> Subject:      Re: Caching of read-only DB contents in an EJB
>
> I am very interested in caching and have been asking a similar question in
> another subject thread. See Re: Thread Safety, Session beans,Saving in
> servlet sessions.
>
> Often in web based applications session state for clients must be
> maintained.  Essentially this is just a cache for data.  The requirements
> are:
>
> 1) The cache may be accessed concurrently by multiple threads doing both
> reading and writing.  (Even if you use an HttpSession there is no
> guarantee that only one thread will access the cache at a time.)
> 2) Exclusive locks should be obtained for writing.
> 3) Shared locks for reading or perhaps exclusive locks would be OK.
>
> The Sun Blueprints guideline suggests using a session bean for this which
> is stored in an HttpSession object.  However that doesn't work because
> session beans (stateless or stateful) don't allow for concurrent access.
> Synchronizing calls in the Servlet won't work in a clustered servlet
> environment.
>
> I thought that perhaps one could use an entity bean which references a
> stateless session bean.  But I have a question about this. The
> specification states that a container can create multiple bean instances
> to handle method calls in separate transactions.  So suppose the following
> occurs,
>
> 1) Under transaction A, method foo is called.   The container delegates
> this call to the foo method of entity bean instance B1.  This method
> accesses the foo method of a stateless session bean.
> 2) Under transaction B, method foo is called. The container delegates this
> call to the foo method of entity bean instance B2.  This method accesses
> the foo method of a stateless session bean.
>
> Since transaction A and B are occurring in separate thread it is possible
> that the foo method is called concurrently on the stateless session bean
> or beans.  Since concurrent access is not allowed on session beans B1 and
> B2 should not be storing a handle to the stateless bean and should instead
> called create to access the stateless bean.  This means that that cache
> would have to bean stored in a static variable of the stateless bean.  But
> that is not thread safe.  Hence the entity bean calling the stateless
> session bean will not work!
>
> Now I am asking myself the following questions.
>
> 1) Why use a session bean at all for storing Http session information?
> Maybe just use the HttpSession object and synchronize it's methods.  The
> Web container will have to ensure that multiple servlet instances all
> reference the same HttpSession object.   If this is the conclusion then
> this means session beans don't work for storing Http session state and the
> programmer will have to write multi-thread safe code.
>
> 2)  Still wondering how to properly write a cache with multiple readers
> and writers that is access from entity or session beans. Using entity
> beans to cache will not because a container could create multiple copies
> of the bean and there is no way to synchronize the multiple copies.  So
> the only remaining option as mentioned by  Rickard is to use RMI.   Anyone
> have information on how to do that?  What about transactions handling
> etc..?  One other choice is to use the Javlin product from ObjectDesign.
> Has anyone used that?
>
> dan
>
> Rickard �berg wrote:
>
>       Hi!
>
>       "Lahooti, Hamid" wrote:
>       > >>Almost but not quite. Readonly data can be cached by stateless
> session
>       > >>beans. If you need read/write caching then either use Entities
> or a RMI
>       > >>object.
>       >
>       > A stateless session bean with a state?
>
>       Yes. If it's readonly and not client specific. Sure.
>
>       > as a singleton?
>
>       I didn't say that.
>
>       > and it
>       > doesn't get destroyed by the container?
>
>       The state may be kept in instance variables of each stateless
> session
>       bean instance, or if you want to optimize it you could store it in
>       static variables and use lazy loading (i.e. check on each usage that
> the
>       class has not been reset, in which case you load the data again).
>
>       /Rickard
>
>       --
>       Rickard �berg
>
>       @home: +46 13 177937
>       Email: [EMAIL PROTECTED]
>       <http://www.dreambean.com>
>       Question reality
>
>
> ==========================================================================
> =
>       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".

Reply via email to