OK, so your formBean would be called via <use bean. And the form bean would have some method to do the rest of persistence or populating?
OK. That is kid of what I was driving to. One deals with beans. Beans have technology designs (patters) ... but they are there to do bus. requirements (your problem/bus domain patterns/solutions) .V (of course Model 2 is better) [EMAIL PROTECTED] wrote: > > > Model 1? I assume you're referring to the practice of posting directly to a > jsp page instead of through an Action servlet - the "model 1" that was > proposed in the original JSP 0.92 spec. > > (For those who haven't reviewed it, the JSP 0.92 specificiation was the > first place I believe the terms 'Model 1' and 'Model 2' originated. At > least that's the earliest I remember seeing it. Here's a link to an old > copy of it: http://www.kirkdorffer.com/jspspecs/jsp092.html . It still > provides one of the best explanations of the difference between Model 1 and > Model 2 that I've come across.). > > Not sure. I'd suppose you'd create a bean (and access it using a classic > jsp:usebean) that is essentially your 'Model' component. This would have to > be the equivalent of the 'Form Bean'. > > You set all the properties on this 'form bean' (using a scriptlet > potentially) and then execute some method on it that would invoke this > whole back-end process. (there are other potential ways of doing it - this > is just one.) The facade and the other statements would be invoked from > your bean. Once this processing was done, you could either extract > properties from the same bean to populate the 'View', or you could extract > another bean (that was a Value Object) from the first bean and drive the > display results from it. > > This actually demonstrates the strength of Struts - the model 1 solution is > more complex lends itself to embedding scriptlets faster. Also, a big > problem is what do you do when things go wrong communicating to the back > end? In Model 1, you have to trap the error and do a jsp:forward or just > put conditional processing in the JSP directly - using Struts you simply > catch the exception and forward to a different ActionForward. > > Kevin > > > > > > > > > > "V. Cekvenich" <[EMAIL PROTECTED]>@main.gmane.org> on 10/15/2002 > 08:43:46 AM > > Please respond to "Struts Users Mailing List" > <[EMAIL PROTECTED]> > > Sent by: news <[EMAIL PROTECTED]> > > > To: [EMAIL PROTECTED] > cc: (bcc: Kevin Bedell/Systems/USHO/SunLife) > Subject: Re: DAO or ... ? [Scanned for known viruses] > > > Q: How would you re-use this in Model 1? > > .V > > > > [EMAIL PROTECTED] wrote: > >> >> >>James - >> >>I've attached a few files from my upcoming book Struts Kick Start that >>provide a basic design pattern that sounds like it may be similar to what >>your describing. >> >>What I do is: >> >> - Create a Value Object that encapsulates data communicated with the > > Model > >>component. >> >> - Create a facade class that accepts and returns value objects through >>'business methods'. By defining the facade to work at a 'business method' >>level, it helps keep any code related to a particular persistence layer > > or > >>back-end system out of the Action class. This also addresses the issues > > you > >>described of 'designing to test' - the clean seperation between the > > Action > >>class and the Model components that the Facade provides simplifies > > testing. > >> - Create the form bean to provide set/get methods that also accept and >>return value objects - this greatly simplifies the Action class and >>isolates it from changes. >> >>The Action class (a bit simplified - I've taken out detailed comments and >>exception handling) goes something like: >> >> // cast the form bean >> CustomerForm cf = (CustomerForm) form; >> >> // Create a facade to interface to the back-end system >> CustomerWSFacade facade = new CustomerWSFacade(); >> >> // Extract the value object from the form bean >> CustomerValueObject cvo = cf.getValueObject(); >> >> // Pass the value object to the facade. It returns an update value > > object > >> cvo = facade.addressChange( cvo ); >> >> // Use the returned value object to update the values in the form > > bean. > >> cf.setValueObject(cvo); >> >>These particular classes come from the chapter on providing integration >>with Axis for Web Services. Another chapter uses the identical set of >>classes to communicate with JBoss using a Session Bean - all I did was >>write a different facade class. The point of this was to demonstrate a >>design that made it very simple to perform maintenance or changes on the >>back-end or persistence layer. >> >> >> >>Regarding testing - I'd recommend you take a look at the StrutsTestCase >>project at sourceforge - it provides some great templates for both JUnit >>and Cactus tests that are designed for Struts. Makes JUnit/Cactus testing >>pretty straightforward. A copy of this and detailed directions also come >>with the book. >> >> http://strutstestcase.sourceforge.net/ >> >> >>Best of luck - >>Kevin >> >> >>Author, Struts Kick Start >> >>(See attached file: customer.zip) >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >>"Couball, James" <[EMAIL PROTECTED]> on 10/14/2002 01:19:16 > > PM > >>Please respond to "Struts Users Mailing List" >> <[EMAIL PROTECTED]> >> >>To: "'Struts Users Mailing List'" <[EMAIL PROTECTED]> >>cc: (bcc: Kevin Bedell/Systems/USHO/SunLife) >>Subject: RE: DAO or ... ? >> >> >>I recommend taking a look at the Session Façade pattern in the Java Blue >>Prints. No matter if you use EJBs or not, this pattern encapsulates the >>ideas that Simon was mentioning. >> >>Does anyone know the name of the more general pattern that doesn't > > involve > >>Session Beans specifically? >> >>One of my general concerns is "design to test". I like to be able to > > test > >>the (business/persistence) layer that the actions will call independently >>of >>struts, actions, etc. Encapsulating that layer in an API (or wrapping > > with > >>a session bean) makes this possible. >> >>Sincerely, >>James. >> >> >> >>>-----Original Message----- >>>From: Andrew Hill [mailto:[EMAIL PROTECTED]] >>>Sent: Monday, October 14, 2002 8:16 AM >>>To: Struts Users Mailing List >>>Subject: RE: DAO or ... ? >>> >>>But you still call the API from the action right - is this not invoking >>>the >>>functionality that persists your data? >>> >>>Seems a bit like semantic juggling to me... (after all the persistance >>>layer >>>is just an abstraction API on top of writing to db/disk/punchcard >>>itself...) >>>;-) >>> >>>I would however agree that there ought to be some sort of abstracting >>>layer >>>between the view and the implementation specific details of the p-tier... >>> >>>-----Original Message----- >>>From: Chappell, Simon P [mailto:[EMAIL PROTECTED]] >>>Sent: Monday, October 14, 2002 23:04 >>>To: Struts Users Mailing List; [EMAIL PROTECTED] >>>Subject: RE: DAO or ... ? >>> >>> >>>You invoke your persistence code in the same place that you would invoke >>>any >>>other code ... not in the Action! >>> >>>Write all your core application code (business rules, persistence, >>>communications etc) in a way that has no connection to the view portion >> >>of >> >> >>>your system and then create a API to it. This way you can have any client >>>you like call into your core code and your core code doesn't need to >> >>worry >> >> >>>about what calls it, only about acting upon requests. >>> >>>Then use the actions to call into the API and pass the API return values >>>to >>>the JSPs. Works great. >>> >>>/------\ /---\ /----\ >>>|Client|--> |API|-->|Core| >>>|Code | | | |Code| >>>\------/ \---/ \----/ >>> >>>The API is now your fire break. Nothing on the Core Code side has to >> >>worry >> >> >>>about displaying anything and nothing in the Client Code has to worry >>>about >>>calculating anything. >>> >>>Simon >>> >>>----------------------------------------------------------------- >>>Simon P. Chappell [EMAIL PROTECTED] >>>Java Programming Specialist www.landsend.com >>>Lands' End, Inc. (608) 935-4526 >>> >>> >>> >>> >>>>-----Original Message----- >>>>From: Andrew Hill [mailto:[EMAIL PROTECTED]] >>>>Sent: Monday, October 14, 2002 9:57 AM >>>>To: Struts Users Mailing List >>>>Subject: RE: DAO or ... ? >>>> >>>> >>>>So where should one invoke the persistance layer? >>>> >>>>-----Original Message----- >>>>From: Lacerda, Wellington (AFIS) [mailto:[EMAIL PROTECTED]] >>>>Sent: Monday, October 14, 2002 22:51 >>>>To: 'Struts Users Mailing List' >>>>Subject: RE: DAO or ... ? >>>>Importance: High >>>> >>>> >>>>Hi Kevin >>>> >>>>Avoid persistence in Action code as much as you can. >>>> >>>>This is the general recommendation. >>>> >>>>Wellington Silva >>>>Author of "JSP and Tag Libraries for Web Development" >>>>FAO of the UN - Consultant >>>> >>>>-----Original Message----- >>>>From: Kevin Viet [mailto:[EMAIL PROTECTED]] >>>>Sent: Monday, October 14, 2002 4:45 PM >>>>To: struts-user >>>>Subject: DAO or ... ? >>>> >>>> >>>>My question is a web app design question. >>>>What pattern you guys follow when you want to save a domain object in >>>>the database ?: >>>> >>>>- use the DAO pattern of java blueprint (persistence layer is called >>>>into classes) >>>>- call to persistence statements into action code : >>>> >>>> // store example >>>> try { >>>> PeristenceLayer pl = getPerstitenceLayer(); >>>> pl.save(domainObject); >>>> } >>>> catch (Exception >>>> >>>> >>>>-- >>>>Kevin Viet <[EMAIL PROTECTED]> >>>>ActiVia Networks >>>> >>>> >>>> >>>> >>>>-- >>>>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]> >>>> >>>> >>>>-- >>>>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]> >>> >>> >>>-- >>>To unsubscribe, e-mail: <mailto:struts-user- >>>[EMAIL PROTECTED]> >>>For additional commands, e-mail: <mailto:struts-user- >>>[EMAIL PROTECTED]> >> >> >>-- >>To unsubscribe, e-mail: < >>mailto:[EMAIL PROTECTED]> >>For additional commands, e-mail: < >>mailto:[EMAIL PROTECTED]> >> >> >> >> >> >> >> >> > --------------------------------------------------------------------------- > >>This e-mail message (including attachments, if any) is intended for the > > use > >>of the individual or entity to which it is addressed and may contain >>information that is privileged, proprietary , confidential and exempt > > from > >>disclosure. If you are not the intended recipient, you are notified that >>any dissemination, distribution or copying of this communication is >>strictly prohibited. If you have received this communication in error, >>please notify the sender and erase this e-mail message immediately. >> > > --------------------------------------------------------------------------- > >> >>------------------------------------------------------------------------ >> >>-- >>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]> > > > > > --------------------------------------------------------------------------- > This e-mail message (including attachments, if any) is intended for the use > of the individual or entity to which it is addressed and may contain > information that is privileged, proprietary , confidential and exempt from > disclosure. If you are not the intended recipient, you are notified that > any dissemination, distribution or copying of this communication is > strictly prohibited. If you have received this communication in error, > please notify the sender and erase this e-mail message immediately. > --------------------------------------------------------------------------- -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>