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]>