I think, performance wise File I/O is not the right idea. What do you say ?
-----Original Message----- From: Christina Siena [mailto:[EMAIL PROTECTED] Sent: Thursday, July 08, 2004 8:16 AM To: Struts Users Mailing List Subject: Re: some best practices questions I have an idea how to persist the data that I currently place in session scope but I need to run it by someone. Recall when I said that placing data in session scope is frowned upon by some members of my team? Well no one said anything about not using Java serialization. Why couldn't I serialize the same data that I currently keep in session scope? I've already implemented a solution for streaming images so creating a temp file should not be a problem. Here is what I think I will need: In the action where the data is first retrieved: try { final String prefix = "myVehicleLineMap"; final String suffix = null; File file = File.createTempFile(prefix, suffix); FileOutputStream fileOutputStream = new FileOutputStream(file); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(myMap); objectOutputStream.flush(); myForm.setTempFileName(file.getAbsolutePath()); } catch (Exception e) { System.out.println(this.getClass().getName() + "==>> " + e.toString()); } In the action where the data needs to be re-accessed to prepare the page for re-display: try { FileInputStream fileInputStream = new FileInputStream(myForm.getTempFileName()); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); SortedMap myMap = (SortedMap) objectInputStream.readObject(); // use myMap as before (when in session scope) } catch (Exception e) { System.out.println(this.getClass().getName() + "==>> " + e.toString()); } This is just an idea at this point, so I would welcome any feedback. I'm not sure if this will work or if its feasible, but at least it may generate some more ideas. ----- Original Message ----- From: Michael McGrady To: Struts Users Mailing List Sent: Tuesday, July 06, 2004 11:59 PM Subject: Re: some best practices questions Ever thought about creating a new scope managed by your own manager from application scope? That is an approach I have been thinking of more and more as of late. At 08:35 PM 7/6/2004, you wrote: >I used hidden select lists to restore user selections since I wasn't >"allowed" to place the whole form in session scope. The >management/maintenance of user selections was indeed ugly (but its done >and works fine). My question has to do with the data retrieved from the db >(from which the user makes selections). For example, when the form is >initially displayed, I populate a list of vehicle lines (i.e. Focus, >Mustang, Freestar, and so on). The user can copy a vehicle line from the >source list to the target list. The target list consists of user >selections. When the page needs to be re-displayed as a result of some >other query, I needed to re-populate the list of vehicle lines (the source >list). I felt that re-retrieving the same vehicle lines from the db again >was silly (since I got it once I simply put a map in session and use it >when needed). When posting the form, the list of label value beans is no >longer available in the action, so my options were: (1) either store in >hidden lists (concatenating the key with the description) or (2) >re-retrieve the vehicle lines from the db or (3) place them in session the >first they are retrieved and get them from session scope. I chose the >third and wondered about some best practices others have used in similar >situations. > ----- Original Message ----- > From: Rick Reumann > To: Struts Users Mailing List > Sent: Tuesday, July 06, 2004 10:58 PM > Subject: Re: some best practices questions > > > Christina Siena wrote: > > > I recently developed an application with a complex UI. One of the > > pages required querying the database based on user selection and > > re-displaying the page with the retrieved data and any previous > > existing user selections. Four different fields can trigger a db > > query resulting in page re-display and validations can also result in > > page re-display. Each time the page is re-displayed, the "state" of > > the page must be "remembered" from the last time it was displayed. > > (still with me so far?) Most of the data retrieved is list data > > displayed in single- or multi-select lists and populated using > > html:options collection and LabelValueBean. (for those of you reading > > this post who have developed similar code, you will know what I'm > > referring to). > > > > In the action, the retrieved data is placed in session scope to > > minimize db hits. I thought this was a good idea at the time. For > > some reason, placing data in session scope is frowned upon by some > > members of my team (even if improves performance). Anyways, what I > > need are some ideas of the best practices that fellow Struts users > > follow when a page requires querying the db and re-displaying the > > page with the retrieved data and previous selections if placing the > > data in session scope is not an option. How can I recall the > > previously retrieved data without requerying the db? Would it make > > sense to hide the data in the page? (i.e. either using hidden fields > > or hidden select lists or to generate a JavaScript array). What are > > the risks, if any, of hiding the data in the page? (i.e. > > performance). > > > > If anyone has developed similar pages, can you tell me if you decided > > for or against placing data in session scope and why? > > Here's is my 2cents. Personally I'm not as anti-session as most people, > and I think to use it or not use has to be taken on a case per case > basis. If your queries to generate the lists are not going be cached in > anyway by the backend and/or they are expensive queries to run, the > Session can be a better place to temporarilly store this information as > the user progresses through the 'flow' as you've described above. Sure > the data each time might not be perfectly fresh, so if that is a > requirement than you will need to query after each new selection is > chosen. I'd opt for testing out performance making a new query each time > to generate your lists for the drop downs and see how it behaves. (If > your data in the database will never be altered by an external process > you can really leverage something like iBATIS that will cache queries > for you so everything is golden). > > You are asking a two part question, though, and one thing I think that > you 'might' be confusing is the use of the lists in Session versus the > ActionForm in Session (retaining user's selections). From what you are > describing I would DEFIINITELY keep your form bean in Session scope for > this. This way any chosen parameters will be remembered as you are > brought back to the page. This is a perfectly legit use of the Session > and don't let anyone convince you in to using a bunch of hidden > variables and storing your form bean in request scope each time. (To me > that is so stupid, how much memory is a Form bean going to take up in > Session scope weighed out agains the ugliness and maintenance of dealing > with a bunch of hidden variables and making sure they are always set > etc. USE the Session in this case for you form bean). You are basically > describing in a sense a "wizard" where the user might be brought along > to different pages to collect data in a form, only you are simply > reusing the same form with different lists. > > -- > Rick > > --------------------------------------------------------------------- > 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]