Thanks for the reply. I was planning to put the look up of the EJB 
reference in the init method of the servlet, so unless Iam missing 
something, It should be thread safe. I looked at the java pet store 
source code specifically at WebControllerImpl. I found that , it looks 
up the EJB reference in a non synchronized method. All the other 
methods that access the EJB are synchronized, Does that mean lookups in 
general are thread safe? 

Appreciate your help,
Sunder

----- Original Message -----
From: "James Dasher" <[EMAIL PROTECTED]>
Date: Tuesday, January 8, 2002 7:20 pm
Subject: RE: Accessing EJB references by extending ActionServlet

> Uh, careful--synchronization issues (immediate problem) and data
> abstraction (long term problem).
> Servlets are not thread-safe, so be very careful handing that 
> referencearound.
> 
> Also, do you want your struts stuff knowing about EJB?  EJB is
> complicated.
> 
> Possible alternatives:
> 1.  Use session-scope beans as web-tier Helpers, abstracting data-
> accessimplementation.  (Your actions don't really need to know how 
> to use an
> EJB, do they?)
> 2.  Consider adding a service locator, which implements
> HttpSessionListener, which binds itself in session and knows how to
> get/create above Helper objects
> 3.  Value object are a pretty good idea, too.
> 4.  (Extreme)  Have a single point of entry into the EJB tier, a
> controller which has one operant method, something like
>    
>    public synchronized ModificationResponse
> handleModification(Modification Request) {}
> 
>    public interface ModificationRequest {
>        public String getName();
>    }
>    
>    public interface ModifcationResponse {
>        public Object getPayload();
>    }
> 
>    Your controller (a stateful EJB) can delegate to various other
> EJB's based on an XML file or environment entries with
> ModificationRequest.getName() as the key.
> 
>    Your Data-Access Objects can take that response, grab the
> payload, and put it in session as needs be.
> 
> Then your actions can just grab what they need likewise: 
>        Locator l =
> (Locator)request.getSession().getAttribute(Keys.SERVICE_LOCATOR)
>        Carthelper c = l.getCartWebhelper();
>    
> request.setSessionAttribute(Keys.SHOPPING_CART,c.addStuffToCart
(someItem
> ))
>        where addStuffToCart returns some kind of Value Object
> you can expose as a bean.  Meanwhile, your cart has been updated 
> back in
> the EJB's somewhere.
> 
> Most of this is ripped straight from the pages of the petstore 
> demo Web
> Application Framework.  If you haven't read it, it is worth it.  The
> part you are looking for is 
> 
>  petstore1.3/src/waf/src/controller/com/sun/j2ee/blueprints/waf
> 
> Remember--Sun pushes EJB so you buy bigger appservers.  Basically, 90%
> of the projects using EJB don't have to.  If you are in the other 10%,
> then your project is large-scale enough to merit some extra time
> thinking about data abstraction.
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] 
> Sent: Tuesday, January 08, 2002 9:17 PM
> To: Struts Users Mailing List
> Subject: Accessing EJB references by extending ActionServlet
> 
> 
> Hello,
> I have a design question about accessing EJB references from the 
> servlet. I would like to obtain a reference to my proxy session 
> bean in 
> the init of the servlet and use that reference to call methods on 
> the 
> bean from the action classes. I have extended the ActionServlet 
> and 
> added additional code to the init method for the EJB lookup. I 
> would 
> like to know how I can pass the remote reference across the 
> different 
> action classes? I am not sure if putting the remote reference in 
> session would be a good idea. I have all my action classes extend 
> from 
> the new ExtendedActionServlet
> 
> Sunder
> 
> 
> 
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
> 
> 


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to