agree, I've read the O'reilly struts book and "Struts in Action". The Oreilly is more WHAT you can do, where "Struts in Action" is takes a more practical approach. Mr. Husted has already sorted out the good vs bad approaches for you. A good read.
Henrik Bentel "Laconia Data Systems" <[EMAIL PROTECTED]> 12/09/04 09:31 AM Please respond to "Struts Users Mailing List" To: "Struts Users Mailing List" <[EMAIL PROTECTED]> cc: Subject: Re: Best practice question: Properties (ShoppingCart) per user good answer- I would also strongly encourage reading "Struts in Action" by Ted Husted if you Read the foreword from Craig McClanahan you'll want to read this book cover to cover Martin ----- Original Message ----- From: <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Thursday, December 09, 2004 10:21 AM Subject: Re: Best practice question: Properties (ShoppingCart) per user > > > > > > For Struts, O'Reilly has a pretty good book, the title of which elludes > me at the moment, > > Programming Jakarta Struts 2nd ed - Chuck Cavaness > > Stuts The Complete Reference - James Holmes was the first Struts book I > read and was very helpful. Each chapter gave a good overview before > getting into the details and the code example was simple and manageable. > > Bart > > "Frank W. Zammetti" <[EMAIL PROTECTED]> wrote on 12/08/2004 11:11:01 PM: > > > Sounds good! You'll find that the people here are extremely helpful, > > but they do tend to shy away from general questions (unless they are SO > > general as to be theoretical, in which case EVERYONE has an opinion :) > > ), so the more specific a question you can ask, the better. > > > > As for books to read, I would highly recommend grabbing the latest copy > > of Head First Servlets and JSP. It's not Struts-specific, but it is > > really necassery to know what is going on beneath Struts, and it is the > > best I've seen in this area (I'm currently using it as a study guide for > > the SCWCD exam, but it's good for anyone I'd say). Frankly, if you get > > everything in that book, most of Struts will make sense almost > > immediately. For Struts, O'Reilly has a pretty good book, the title of > > which elludes me at the moment, but I suspect it's the only one they > > sell. At times it goes into a little TOO much detail for people trying > > to get a start in Struts, but most of it is excellent. > > > > As for your specific architecture questions... Generally speaking, your > > concern about putting all application state for a user in session is > > valid. This isn't what session is for. It's really for fairly small > > BITS of state information, things that will in all likelihood change > > frequently, and certainly nothing that should persist beyond a session > > (hence the name!). But, in your case, since you are just using it as an > > example, I wouldn't worry about it, go ahead and use session, it'll be > > easier. > > > > In Struts, Actions can be shared across requests, which means that if > > you have class-level variables, they are, potentially, shared across > > multiple requests. Clearly this is a formula for disaster. > > > > There are two ways you could go here... one is to use session as I said, > > the other is to have a "data storage class" that just has some static > > members, most probably a Map of some sort. You can use this as > > something of a poor man's database. Think of a HashMap for instance as > > a database table. Now, assume each element you add to the HashMap is > > itself a HashMap. You can think of these "inner HashMaps" as rows in > > the table. Then, each element in that inner HashMap is a field in the > > table. Make sense? You can go so far as to create insertRow(), > > deleteRow() and updateRow() methods for your data storage class... These > > would do the functions their name implies on the HashMap, and you can in > > that way "key" your data, i.e., each "row" has an element recordKey > > let's say. So, your insert method can throw an exception if a "record" > > exists with that key already. In fact, you could go so far as to throw > > a SQLException, and in that way you could replace that data storage > > class with a class that talks to a database down the road, and nothing > > that uses that class should have to change. > > > > But that's getting ahead of ourselves a bit :) If you intend to build > > something that you know would usually use a database, then the second > > approach is a good idea. Be sure to synchronize your access to your > > Maps (which would be a bottleneck in a real application, but you can get > > away with it here, and in general in any application that isn't going to > > have a big load). But, using session might be easier, depends on how > > much work (and control) you want. For a shopping cart, the volume of > > data isn't going to be great, so no worries there. > > > > But, the golden rule with Struts to remember is no class-level > > variables! That's what all this is designed to avoid. > > > > -- > > Frank W. Zammetti > > Founder and Chief Software Architect > > Omnytex Technologies > > http://www.omnytex.com > > > > Simon MARTIN wrote: > > > Hi, > > > > > > thanks for your offering of help. > > > I know that my Struts knowlegde is not the best yet -- no question > about > > > it -- but I'm willing to change that, as far as my time allows it. > > > > > > Fortunately, my lecture is not of that importance you might have > > > assumed, as I'm 'only' giving a presentation at school. However, I of > > > course want to present something I know about, so this does not really > > > change the situation. > > > > > > As I can see what you're telling me, I think my learning has been to > > > practice-orientated and too less theory-orientated, which brings me > into > > > trouble when the requirements change. > > > So far, I've only strictly written Spring apps with Struts MVC or > > > without Struts MVC, but, in any case, with Hibernate as ORM-framework. > > > Therefore, I really came into troubles when using Struts alone, and > then > > > even doing so without a database. > > > Of course, I had thought about putting the stuff into the session, > > > either, but putting complete client-state into the session seemed > > > unclean to me, as I personally had prefered some kind of > > > property-setting statically. > > > Please let me know about further architectural mistakes I've done. > > > > > > I've started reading Wiley's 'Mastering Jakarta Struts', which > > > unfortunately seems kind of outdated to me. Please let me know about > > > better alternatives. > > > > > > Furthermore, I'd appreciate any kind of help. > > > > > > Kind regards and thanks in advance, > > > Simon > > > > > > > > > [EMAIL PROTECTED] wrote: > > > > > >> PLEASE do not take offense from what I am about to say. I do not mean > > > >> to be anything but constructive and helpful... > > >> > > >> I am concerned that you are trying to build an example for those you > > >> will be teaching because I can see some fundamental misunderstandings, > > > >> or gaps in your knowledge. I'd be willing to guess that someone (your > > > >> emoployer?) asked you to teach some people because you were the best > > >> of the group, and if that's the case I most certainly commend you for > > >> taking on the task. > > >> > > >> However, I think it would be in your best interest, and certainly in > > >> your students' best interest, to take some time and become more > > >> familiar with the topic(s) you are going to be teaching. I and others > > > >> here could give you the answers, and we'd be happy to do so, but the > > >> questions you are asking are things that you really should be able to > > >> answer yourself in light of the fact that you are going to be > > >> teaching, and might face the same questions, or others that will test > > >> your fundamental knowledge. I'm not just talking about learning > > >> Struts here, which certainly is a big part of it. I sense you may > > >> have some learning to do with regard to web application development in > > > >> general. > > >> > > >> Again, I hope I have not offended you, that is not my intent in any > > >> way. If your just learning this stuff yourself, that's great, we'll > > >> all help any way we can, but I would really try and hold off on the > > >> teaching for a while until you see these answers yourself. > > >> > > > > > > > > > > On Tue, December 7, 2004 1:59 pm, Bill Siggelkow said: > > > > Simon, > > > > > > > > Actions should not hold client-state; instead, you can create a > > > > ShoppingCart in the Action but then save it in the HttpSession. > > > > > > > > Without going into to many details, I suggest you take a look at the > > > > Struts MailReader example distributed with Struts. > > > > > > > > -Bill Siggelkow > > > > > > > > > > > > Simon MARTIN wrote: > > > > > > > >> Hi, > > > >> > > > >> I'm currently writing a short Struts application without a database > (I > > > >> know that this would be better, but as it is only for teaching > > > purposes, > > > >> I don't want to 'overflow' my audience with databases and ORM). > > > >> It should be a small online sales system -- I've got ShoppingItems, > > > >> ShoppingUsers (which are not yet used) and ShoppingCarts. > > > >> > > > >> I want a ShoppingCart which stores the ordered items per user. I > had > > > >> something like this: > > > >> > > > >> public class ShoppingCartAction extends DispatchAction { > > > >> private ShoppingCartManager shoppingCartManager; > > > >> ... > > > >> > > > >> public ActionForward order(...) > > > >> ... > > > >> > > > >> public ActionForward list(...) > > > >> ... > > > >> } > > > >> > > > >> and thought that it would work. Unfortunately, each user (which is > not > > > >> authenticated or anything yet) gets the same shopping cart when he > > > calls > > > >> shoppingCart.do?method=list. > > > >> > > > >> So I did some research and found this: > > > >> http://www.jguru.com/faq/view.jsp?EID=1057609 > > > >> > > > >> So I created an ShoppingCartMapping class > > > >> > > > >> public class ShoppingCartMapping extends ActionMapping { > > > >> private ShoppingCartManager shoppingCartManager; > > > >> ... > > > >> } > > > >> > > > >> and call it like this > > > >> > > > >> public ActionForward list(ActionMapping mapping, ActionForm form, > > > >> HttpServletRequest request, > > > >> HttpServletResponse response) > > > >> throws Exception { > > > >> request.setAttribute("orderedItems", > > > >> > > > ((ShoppingCartMapping)mapping).getShoppingCartManager().getItems()); > > > >> return mapping.findForward("list"); > > > >> } > > > >> > > > >> which gives me a ClassCastException. > > > >> > > > >> Do I have to set my custom ActionMapping in web.xml or > > > >> struts-config.xml? > > > >> Am I on the right way, or is there a better way of doing this? > > > >> > > > >> Thanks in advande and kind regards, > > > >> Simon > > > >> > > > >> PS: Please cc me in your answers. > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > 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] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]