Subject: Re: Value object doubt !!! From: Vic C <[EMAIL PROTECTED]> === And no need to panic, anyone can build a web app. But a software engineer can help you use less resources and effort and make it more scalable and maintainable.
Vic C wrote: > Don't kill the messenger. That's what some of this is about. I do not > know of any contradictions documents or comments and my and other > consultants experience is inline with this. See point 95, I think that > is why there are a few vocal sales people who say the emperor IS wearing > some clothing. > This is why I did what is says on page 4, 2nd sentence. > The working full realistic example webPIM is Struts specific. However > the choice I did to implement the dao (DAO has nothing to do with > Struts. Struts only defines the form Bean and MVC ) is what is says on > page 4 2nd sentence. > > JDO got recently delayed or pulled. You cant do XML joins (as JDO > implies), and have some of the same EQL issues. On news.strutsplus.com > there is a newsgroup Castor a leading JDO implementation. I wish there > was a better place than Struts MVC to talk about the M at length. > Anyway, my implementation works well at several client's production > sites and ... I am the only one to share a public realistic full example > with tiles, validation, master detail, CRUD, model, navigation, options, > formatting, etc. which I think kind of makes me a bit of a target. Some > day there will be a better practice to CRUD Master/Detail applications > that are better than webPIM. My goal was webPIM as a Struts MVC example, > but by separating the DAO outside of the bean, people can implement the > DAO anyway they chose, and not follow my design. Or they can refractor > and improved DAO and not break the bean. > > They only good choice, for people that hire me to advise them or recover > their project, is to roll your own beans. I had to show a working > realistic M in webPIM and did so. > > Nice thing about open standards is that any potential weakens is > publicized and criticized and a road to improvements is open, by those > wiling to implement it. When MS has a weakness, it is "forbade to > criticize the HQ". Cathedral and the Bazaar book shows why open standard > will defeat the "Cathedral approach. > > Vic > > > > Michael Delamere wrote: > >> Hi, >> >> I´ve just read the "EJB_101Damnations.pdf". Could somebody lead me to an >> article that may contradict the 101Damnations pdf. If the specified >> pdf is >> overall correct, what are the alternatives? JDO?? >> >> Could someone please clarify me on this issue. >> >> Thanks, >> >> Michael >> >> >> ----- Original Message ----- >> From: "Struts Newsgroup" <@[EMAIL PROTECTED]> >> To: <[EMAIL PROTECTED]> >> Sent: Friday, May 24, 2002 7:25 PM >> Subject: Re: Value object doubt !!! >> >> >> >>> Subject: Re: Value object doubt !!! >>> From: Vic C <[EMAIL PROTECTED]> >>> === >>> Fat fingered "do not look at" >>> http://www.softwarereality.com/programming/ejb/EJB_101Damnations.pdf >>> >>> >>> Vic Cekvenich wrote: >>> >>>> STEVE WILKINSON wrote: >>>> 2 each his own. I understand you view on EJB's and would apprechiate if >>>> you keep that on your site and don't put that here. >>>> >>>> Should I say do not look at >>>> http://www.bad-managers.com/Features*/ejb/i*ndex.shtml ? >>>> Not sure how to respond to this. EJB's is something I used in the >>>> model; and now I don't. You don't think people should be exposed as >>>> to why that is? Certainly new users and new managers should be aware >>>> that you can do MVC and J2EE without EJB and at least some feel that >>>> this is better. My guess is EJBs are going to go the way of the >>>> client side Java, that is to say, they will not be used. I predict >>>> that the silent majority used to use EJB's and don't use EJB anymore >>>> and very soon that will be conventional wisdom not to use EJB. I >>>> would say people that argue EJB is good lose some credibility with >>>> me (and you could say people that argue EJB are not good lose >>>> credibility with you. 2 each his own) I do ask for comments on >>>> http://www.bad-managers.com/Features/ejb/index.shtml here or at >>>> mvc-programmers. >>>> >>>> >>>> We are using the EJB technology, but we also use DataAccessObjects >>>> (DAO), the problem is that the data in the database is needed by both >>>> web clients and other interfaces, XML/SOAP, and Java Swing Clients. We >>>> are using the transformation process strickly on the web tier to >>>> eliminate some of the manual coding within the Action class. We have >>>> JUnit tests for Form Beans and ValueObjects (DTO) to remind us that >>>> when >>>> we update one we need to update the other. >>>> >>>> :-\ , You can look at a post in the mvc-programmers news group on >>>> how it is benefitial to have a single model beans for use by SOAP, >>>> Swing, etc. >>>> >>>> >>>> I'm just trying to give someone a peek at how we are planning on doing >>>> that. >>>> >>>> >>>> It looked like a question. >>>> >>>> >>>> >>>> >>>> If you have "been there done, done that, got the T-shirt" I would be >>>> interested in hearing how you did the conversion from ValueObject (DTO) >>>> to FormBean and return. >>>> >>>> I have a post of the code on the strutsplus.com home page. Again, >>>> feel free to comment on the implemented design. >>>> >>>> >>>> To the newbies, you don't want to sub-class a mixed type object >>>> within a >>>> FormBean because of validation issues that Craig covered in prior >>>> posts. >>>> If you want to do it automatically in a layered tier, I've described an >>>> approach that we are trying. >>>> >>>> ?? >>>> >>>> >>>> >>>> >>>> I by not way mean to imply this is the best way or the only way. If you >>>> want an option there are plenty on this list to provide it. >>>> >>>> BTW, it's Friday. >>>> >>>> I just need not to look at this list on Fridays. ;-) >>>> Vic >>>> >>>> >>>> >>>>> >>>>>> From: Struts Newsgroup (@Basebeans.com) <[EMAIL PROTECTED]> >>>>>> Reply-To: "Struts Users Mailing List" >>>>>> <[EMAIL PROTECTED]> >>>>>> To: [EMAIL PROTECTED] >>>>>> Subject: Re: Value object doubt !!! >>>>>> Date: Fri, 24 May 2002 08:10:02 -0700 >>>>>> >>>>>> Subject: Re: Value object doubt !!! >>>>>> From: Vic C <[EMAIL PROTECTED]> >>>>>> === >>>>>> Been there done that, got the T-Shirt. I used to do the same thing. >>>>>> And I found a simpler, better approach and have a tested production >>>>>> designs and fully functional sample code to show! Other designs are >>>>> >>>>> >> not >> >>>>>> showing fully functional code. >>>>>> I do project recovery for a living. >>>>>> For your consideration: >>>>>> >>>>>> Craig support light weight frameworks MVC I think and not forcing >>>>> >>>>> >> people >> >>>>>> to do things one way.(Are you using EJB? How are you addressing some >>>>> >>>>> >> of >> >>>>>> the issues in Software Reality EJB 101 that I and others found?) >>>>>> I hope to persuade Craig and others one way to look at a practical >>>>>> and >>>>>> simple and light weight alternative for model direction. I think it >>>>> >>>>> >> all >> >>>>>> stems from the old discussion of should form beans be a base class or >>>>> >>>>> >> an >> >>>>>> interface. (I think one of the reasons for Struts success is that it >>>>> >>>>> >> is >> >>>>>> light weight, simple and practical). >>>>>> >>>>>> The point of using a framework it to use it, and not build a >>>>> >>>>> >> framework. >> >>>>>> Analogy I use it you can wake up in the morning and drive a car, >>>>>> or go >>>>>> under the car and thinker with the combustion engine and the brakes. >>>>> >>>>> >> No >> >>>>>> need to mess with the technology. Use the force Luke, to make your >>>>>> project more productive. >>>>>> >>>>>> The larger the project the more the risk, so use Struts and don't do >>>>>> technology. ValueObject are just another bean. Transformation helper? >>>>>> You will get lost in the woods. >>>>>> >>>>>> Based on WebPIM from home page of StrutsPlus.com: >>>>>> Here is a repost on an alterntative design for your consideration, >>>>>> repost from news.strutsplus.com: >>>>>> >>>>>> [EMAIL PROTECTED] >>>>>> >>>>>>> Inline: >>>>>>> >>>>>>> >>>>>>>> Rick Reumann wrote: >>>>>>>> I'm still new to trying to comprehend the various ways the Model >>>>>>> >>>>>>> >>>>>> layer >>>>>> >>>>>>>> can be implemented in a J2EE app, so I want to make sure I'm >>>>>>>> understanding a few things in relation to the webPIM sample app at >>>>>>>> www.basebeans.com. >>>>>>> >>>>>>> >>>>>>> It is possible to use J2EE without EJB and it is possible and >>>>>> >>>>>> >>>>>> desirable >>>>>> >>>>>>> to use MVC with a less complexity. (No need for Business objects or >>>>>>> Value Objects in some cases, if they do nothing for you if only a >>>>>> >>>>>> >> DAO >> >>>>>>> would do). Doing things right means more scalability and faster to >>>>>>> develop with less effort. >>>>>>> >>>>>>> >>>>>>>> 1) I was under the impression that you want to have your Data >>>>>>> >>>>>>> >>>>>> Transfer >>>>>> >>>>>>>> Objects (or Value Objects) to be as reusable as possible. It looks >>>>>>>> like in the case of the webPIM app that a typical bean (ie >>>>>>> >>>>>>> >>>>>> NameLstBean >>>>>> >>>>>>>> ) is tightly coupled with the table columns found in the DAO that >>>>>>> >>>>>>> >>>>>> the >>>>>> >>>>>>>> bean has as a member. >>>>>>> >>>>>>> >>>>>>> Nope. This is a form bean; it should reflect the page properties, >>>>>> >>>>>> >> not >> >>>>>>> the physical data model. The bean is bound to the presentation. How >>>>>> >>>>>> >>>>>> the >>>>>> >>>>>>> physical DB does not matter to the public interface of the bean. >>>>>>> Idea here is that a requriment or html page would be the spec. You >>>>>> >>>>>> >>>>>> would >>>>>> >>>>>>> create a bean that follows it logicaly, with getters and setters >>>>>>> matching page properties. >>>>>>> (What confused you is the physical data model design, which a good >>>>>>> design follows the outputs and uses of the web app.) >>>>>>> So: Bean maps to the page logically. It hides the physical >>>>>>> implementation inside of it. Changes to the data model do affect the >>>>>>> implementation but not the "use" of the bean. >>>>>>> (Complex example: A bean getter could call another beans getter or >>>>>>> setter so you can have a bean that contains other beans for a >>>>>> >>>>>> >> complex >> >>>>>> page) >>>>>> >>>>>>> >>>>>>>> The design seems to be: call a populate method >>>>>>>> on a particular bean which in turn will return a DAO to the bean >>>>>>> >>>>>>> >>>>>> that >>>>>> >>>>>>>> contains a cached rowset of the columns returned from the query. >>>>>>> >>>>>>> >>>>>> Then >>>>>> >>>>>>>> in order to get back say a First Name the bean will actually get a >>>>>>>> handle to the DAO stored in the bean and then call a method like >>>>>>>> nameLstDAO.getCRString("first_name"). (Forgive me Vic if I >>>>>>> >>>>>>> >> explained >> >>>>>>>> that all wrong ). >>>>>>> >>>>>>> >>>>>>> You got it. Very simple delegation. You can unit test the beans >>>>>> >>>>>> >> CRUD, >> >>>>>>> and properties before you ever use it. And you can later make the >>>>>> >>>>>> >>>>>> beans >>>>>> >>>>>>> soapy. >>>>>>> >>>>>>> >>>>>>> >>>>>>>> So my question is under this model it seems like if >>>>>>>> the underlying implementation changes, such as the column names in >>>>>>> >>>>>>> >> a >> >>>>>>>> table change, you end up having to fix all your beans plus all of >>>>>>> >>>>>>> >>>>>> your >>>>>> >>>>>>>> DAOs (as opposed to only having to change it one place if the >>>>>>> >>>>>>> >>>>>> DAOs are >>>>>> >>>>>>>> used to directly populate the beans). >>>>>>> >>>>>>> >>>>>>> The public interface of the bean stays the same. So the users of the >>>>>>> data model layer are not affected. The whole point of separating the >>>>>>> data layer is that if it changes, the other 2 layers are unaffected. >>>>>>> You would only fix the implementation of the bean or the dao that >>>>>> >>>>>> >> has >> >>>>>>> the changed table. Of course once you have data in the DB, you would >>>>>>> with the changed db have to do data conversion, so changes to the >>>>>>> physical db are very rare. >>>>>>> More realistic is that you would add a column or maybe a table, and >>>>>> >>>>>> >>>>>> add >>>>>> >>>>>>> a bean or a bean property. >>>>>>> >>>>>>> >>>>>>>> I'm guessing the reason for >>>>>>>> calling the db columns in the cached rowset might be so that the >>>>>>> >>>>>>> >>>>>> bean >>>>>> >>>>>>>> doesn't have to be populated in the DAO (although I'm not so sure >>>>>>> >>>>>>> >>>>>> why >>>>>> >>>>>>>> that would be so negative ). >>>>>>> >>>>>>> >>>>>>> DAO does retrieve and store in a disconnected row set. It just >>>>>> >>>>>> >>>>>> holds it >>>>>> >>>>>>> there. >>>>>>> >>>>>>> >>>>>>> >>>>>>>> 2) If each bean ( ie ListNmBean ) is responsible for populating >>>>>>> >>>>>>> >>>>>> itself >>>>>> >>>>>>>> where do you put SQL to populate a Collection of beans? ( I >>>>>>> >>>>>>> >>>>>> apologize >>>>>> >>>>>>>> Vic if you do this somewhere in the application that I haven't >>>>>>> >>>>>>> >>>>>> found). >>>>>> >>>>>>>> In your architecture it looks like the DAOs are only really called >>>>>>>> from within beans themselves, so in order to get a Collection of >>>>>>>> ListNmBeans would I need to create a CollectionOfNameBeans object >>>>>>>> which would call a DAO that would populate me with ListNmBeans? >>>>>>>> >>>>>>> >>>>>>> That's the beauty. Most retrievals are multi row. The DAO has the ( >>>>>>> disconnected ) rowset. The rowset is your "collection" of rows. (No >>>>>> >>>>>> >>>>>> need >>>>>> >>>>>>> for a collection, when the rowset has the full metadata and is >>>>>>> disconnected) It contains multiple rows (no need for multiple beans >>>>>> >>>>>> >>>>>> and >>>>>> >>>>>>> garbage collection load). The Bean has iterate. It iterates the DAO >>>>>> >>>>>> >>>>>> ('s >>>>>> >>>>>>> rowset). Multi row retrievals like nameLst or multi row updates are >>>>>> >>>>>> >> a >> >>>>>>> synch. and easily unit testable at the bean level (with not web app >>>>>>> needed to unit test, the whole point of unit test it to test one >>>>>> >>>>>> >>>>>> thing). >>>>>> >>>>>>> >>>>>>>> 3) Using an architecture such as the webPIM app it looks like you >>>>>>>> would only need one type of bean to hold your main object's >>>>>>> >>>>>>> >> fields. >> >>>>>>>> For example I'd only need an EmployeeBean, and wouldn't need an >>>>>>>> EmployeeBean plus a Data Transfer Object EmployeeBean. >>>>>>> >>>>>>> >>>>>>> Yes. KISS >>>>>>> >>>>>>> >>>>>>>> In the webPIM >>>>>>>> app am I correct in assuming objects such as the NameLstBean act >>>>>>> >>>>>>> >>>>>> as a >>>>>> >>>>>>>> Data Transfer Object or Value Object and also acts as what I hear >>>>>>>> other's mention as an Entity or Session bean? >>>>>>> >>>>>>> >>>>>>> Value Object and Data Transfer Object and Business Objects are just >>>>>>> Beans. The less you do, the faster you write it, the less code, the >>>>>> >>>>>> >>>>>> less >>>>>> >>>>>>> has to go trough CPU, the less code, the less bugs, less GC. >>>>>> >>>>>> >> Benefits >> >>>>>>> pile on. Plus easier to debug. >>>>>>> >>>>>>> EJBs (and design patterns to try to make them palatable) is >>>>>> >>>>>> >>>>>> something I >>>>>> >>>>>>> r USED TO USE, but I do not use them anymore (in fact my new and >>>>>>> existing clients that might have them are having the EJBs removed). >>>>>> >>>>>> >>>>>> You >>>>>> >>>>>>> do not need EJB to do J2EE. Look at some of my post about software >>>>>>> reality . com and the first 101 reasons not to use EJB. EJB only >>>>>> >>>>>> >>>>>> work in >>>>>> >>>>>>> lab conditions and most organizations remove them eventually. EJB is >>>>>> >>>>>> >> a >> >>>>>>> technology in search of a problem. >>>>>>> >>>>>>> >>>>>>> >>>>>>>> 4) I take it each bean would contain all different overloaded >>>>>>> >>>>>>> >>>>>> populate >>>>>> >>>>>>>> methods for different ways you would want to return an Employee? >>>>>>> >>>>>>> >> For >> >>>>>>>> example "populate( int employeeId )" or "populate( String >>>>>>> >>>>>>> >> firstName, >> >>>>>>>> String Last Name )" ? >>>>>>> >>>>>>> >>>>>>> Yup. >>>>>>> Do you see how simple this design is? (especially compare to pet >>>>>> >>>>>> >> store >> >>>>>>> type designs) >>>>>>> A bean and a DAO (DAO with a "collection" of rows") >>>>>>> It is always better to look at a real application and code. >>>>>>> Most clients can be talked into removing EJB and other objects they >>>>>> >>>>>> >> do >> >>>>>>> not use, if it is helpful to them. >>>>>>> Simple = flexible = less effort. >>>>>>> >>>>>>> Actually, anyone can build a web app. But a software engineer can >>>>>> >>>>>> >> help >> >>>>>>> you use less resources and effort and make it more scalable and >>>>>>> maintainable. >>>>>>> >>>>>>> Hth, V. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> Thanks for any help with this. >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> STEVE WILKINSON wrote: >>>>>> >>>>>>> Given the comments from Craig on not using Value Objects as form >>>>>> >>>>>> >> beans >> >>>>>>> our project is taking the following approach. >>>>>>> >>>>>>> We are creating a "helper" class to transform our ValueObject (Data >>>>>>> Transfer Object as we call it) into a form bean (Strings, Boolean, >>>>>> >>>>>> >> and >> >>>>>>> boolean types only) and the reverse. I started this effort by >>>>>> >>>>>> >> looking >> >>>>>>> at the code within the beanutil package that is part of commons. >>>>>>> Unfortunately, object composition is not supported (User object >>>>>> >>>>>> >>>>>> contains >>>>>> >>>>>>> an Address object) within the commons code base. So, I've taken to >>>>>>> writing our own transformation helper and take advantage reflection >>>>>> >>>>>> >>>>>> and >>>>>> >>>>>>> the convertion utilities provided in the commons package. Granted >>>>>> >>>>>> >> this >> >>>>>>> is not an approach that a small project should take, but ours is a >>>>>>> fairly large project and we wanted to create a "Helper class" to >>>>>> >>>>>> >>>>>> assist >>>>>> >>>>>>> in transforming the data between tiers. The idea is that each >>>>>> >>>>>> >>>>>> interface >>>>>> >>>>>>> (Struts being the HTTP interface) will have it's own helper class to >>>>>>> assist in this. I will reduce a little coding, but provide easy >>>>>>> tranformation of the data between tiers. >>>>>>> >>>>>>> Currently, the transformation helper class is dependent on our own >>>>>>> package structure. :-( I'm hoping to be able to refactor this so >>>>>> >>>>>> >> that >> >>>>>>> it's configurable like the ConvertUtils does and I'll offer it up if >>>>>>> people are >>>>>>> interested. Also, since we are only prototyping right now, I don't >>>>>>> provide support for Collections, but I do provide support for Object >>>>>>> Array types (e.g. User[] user). The intent is to provide Collection >>>>>>> support in the future, but I must utilize a "type safe" collection >>>>>> >>>>>> >>>>>> that >>>>>> >>>>>>> is initalized with "type" or it's class that will be stored at >>>>>>> initialization in the target object so the transformation utility >>>>>> >>>>>> >>>>>> knows >>>>>> >>>>>>> what class to create when transforming an object from one >>>>>> >>>>>> >>>>>> collection to >>>>>> >>>>>>> the other. We are using the same names for our attributes and >>>>>> >>>>>> >> classes, >> >>>>>>> it's just different data types. The DTO (VO) contains mixed type, >>>>>>> java.sql.Date, java.lang.Float, etc. The FormBean >>>>>>> currently only has String, Boolean and boolean types. >>>>>>> >>>>>>> Hope this helps give an idea on another approach. >>>>>>> >>>>>>> Steve >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> From: Ted Husted <[EMAIL PROTECTED]> >>>>>>>> Reply-To: [EMAIL PROTECTED] >>>>>>>> To: Struts Users Mailing List <[EMAIL PROTECTED]> >>>>>>>> Subject: Re: Value object doubt !!! >>>>>>>> Date: Fri, 24 May 2002 08:47:27 -0400 >>>>>>>> >>>>>>>> The best stategy will depend on what else is going on with your >>>>>>>> application. >>>>>>>> >>>>>>>> The ActionForm is really part of the control layer and so can >>>>>>> >>>>>>> >>>>>> interact >>>>>> >>>>>>>> with objects on both the presentation and business layers. >>>>>>>> >>>>>>>> A generally useful approach is to put a factory method on the >>>>>>> >>>>>>> >>>>>> ActionForm >>>>>> >>>>>>>> that returns your value object. >>>>>>>> >>>>>>>> This neatly encapsulates the data transfer. All the Action has to >>>>>>> >>>>>>> >>>>>> do is >>>>>> >>>>>>>> call the method and pass along the result. >>>>>>>> >>>>>>>> Which I guess is your #2. >>>>>>>> >>>>>>>> -- Ted Husted, Husted dot Com, Fairport NY US >>>>>>>> -- Developing Java Web Applications with Struts >>>>>>>> -- Tel: +1 585 737-3463 >>>>>>>> -- Web: http://husted.com/about/services >>>>>>>> >>>>>>>> >>>>>>>> Radhika Nadkarni wrote: >>>>>>>> >>>>>>>>> hi, >>>>>>>>> Im having an action Form. Im using Value object for data >>>>>>>> >>>>>>>> >>>>>> conversions. >>>>>> >>>>>>>>> Now my problem is i have two scenarios for implementing the same >>>>>>>> >>>>>>>> >>>>>> : - >>>>>> >>>>>>>>> 1) Value object will be separate >>>>>>>>> 2) Value object will be composed within the Form Bean. >>>>>>>>> Can anyone tell me which is the best strategy out of the two ? >>>>>>>>> >>>>>>>>> _________________________________________________________________ >>>>>>>>> Get your FREE download of MSN Explorer at >>>>>>>> >>>>>>>> >>>>>>>> http://explorer.msn.com/intl.asp. >>>>>>>> >>>>>>>>> -- >>>>>>>>> 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]> >>>>>>>> >>>>>>> >>>>>>> _________________________________________________________________ >>>>>>> Chat with friends online, try MSN Messenger: >>>>>> >>>>>> >> http://messenger.msn.com >> >>>>>>> >>>>>>> -- >>>>>>> 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]> >>>>>> >>>>> >>>>> _________________________________________________________________ >>>>> Join the world's largest e-mail service with MSN Hotmail. >>>>> http://www.hotmail.com >>>>> >>>>> >>>>> -- >>>>> 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:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>