Hi Adam.. Well, I haven't experienced any problems whatsoever with this approach...so I guess it is safe.
Sometimes I use BeanUtils to copy attributes but not very often...in my opinion DTOs (or Value Objects) and the form bean is two totally different concepts..therefore I like to keep them separate and sometimes with different attribute names...Just my way of doing it ..might be silly...I dunno..:-) ----- Original Message ----- From: "Adam Hardy" <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Wednesday, March 17, 2004 2:07 PM Subject: Re: action - delegate - facade > Is it safe? I really don't know. You'd have to ask someone else.... or > wait until I've got a couple of years experience with the service > locator pattern, and I'll let you know ;) > > but regarding value objects - you use BeanUtils to copy the properties > into the form beans? > > > > On 03/17/2004 12:34 PM HG wrote: > > ehh..Correction to third answer... > > > > Actually the plugin caches the reference to the EJB Facade and the Service > > Locator caches the home looked up from JNDI... > > > > Is this really safe..?? :-) > > > > > > ----- Original Message ----- > > From: "HG" <[EMAIL PROTECTED]> > > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > > Sent: Wednesday, March 17, 2004 12:31 PM > > Subject: Re: action - delegate - facade > > > > > > > >>Hi Adam. > >> > >>Your first question, regarding packaging > >>I keep that part simple, so I place all value objects in a model package, > >>say "com.mycompany.myproduct.model". Both the ejb-jar and the web-jat > >>contain these classes. > >> > >>Your second question, regarding generation value objects > >>I use xDoclets facilities to generate value objects. If I need special > >>services/attributes in the value objects I subclass the one generated by > >>xDoclet and roll my changes. > >> > >>Your third question, regarding home lookups. > >>I use the ServiceLocator pattern from my business delegates(plugins). The > >>service locator is implemented as a Singleton and contains only Facades. I > >>have antoher another singleton ServiceLocator for Entities. > >>Each plugin caches the home of the "Business Services" it uses (ie. the > >>Facades). > >> > >>Hope to help...otherwise....feel free to ask. > >> > >>Best regards > >> > >>Henrik > >> > >> > >>----- Original Message ----- > >>From: "Adam Hardy" <[EMAIL PROTECTED]> > >>To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > >>Sent: Wednesday, March 17, 2004 11:01 AM > >>Subject: Re: action - delegate - facade > >> > >> > >> > >>>I am surprised to see that the xpetstore @ sourceforge has a direct > >>>interface between Actions and the session beans. > >>> > >>>The delegate does make sense to me now and I'm going to implement it. > >>> > >>>One think I've been wondering is about packaging all the classes. Do you > >>>put the delegate classes and the transfer / value object classes in a > >>>seperate jar file from the action classes, and from the EJBs? > >>> > >>>While on the subject, what do you use for value objects? Form beans or > >>>something generated by xdoclet? I've been using an xml schema to > >>>generate my value objects so far (not with EJB) via JAXB, but this isn't > >>>going to work with EJB because the things aren't serializable. > >>> > >>>Another question (my last!): what is the best way to handle home > >>>interfaces in the delegate? Do you cache them? Do you treat them like a > >>>logger object or a singleton? Or do you just instantiate them fresh each > >>>call? > >>> > >>> > >>>Thanks! > >>>Adam > >>> > >>> > >>>On 03/17/2004 09:22 AM HG wrote: > >>> > >>>>Hi Robert and Adam... > >>>> > >>>>Guess I am paranoid or prepared.. :-) > >>>> > >>>>I use nearly the approach Robert described, using a Factory for the > >>>>delegate....although the purpose is not the same.. > >>>> > >>>>I use the Delegate as the "web tier view" of the business > > > > logic/services > > > >>in > >> > >>>>the system. That becomes important, when different business > > > > rules/logic > > > >>>>applies to different modules/plugin. > >>>> > >>>>In my scenario I call the business delegates for business plugins > >> > >>because of > >> > >>>>the dynamic plugable nature. Plugins are hosted by a plugin manager > > > > (the > > > >>>>factory), and access the plugin interfaces always goes through the > >> > >>plugin > >> > >>>>manager. > >>>> > >>>>You get an interface to a plugin (ie. web tier view of a business > >> > >>service), > >> > >>>>not an implementation...that's important as you state correctly > > > > Robert. > > > >>>>The difference is that I don't care if it is a POJO, EJB, whatever I > > > > am > > > >>>>talking to "behing the scenes", I care about HOW the business service > > > > is > > > >>>>implemented... > >>>> > >>>>Let me give you an example: > >>>> > >>>>Way through system is: > >>>> > >>>>Action->Plugin->Facade->Entity > >>>> > >>>>Pseudo code for action execute: > >>>>AccountManagement plugin = > >>>>pluginManager.getPlugin("core.account.management"); > >>>> > >>>>What I get here is an interface (AccountManagement) of a business > >> > >>service > >> > >>>>plugin. Behind the interface, one specific implementation of it > > > > resides. > > > >>>>WHAT implementation to use is decided by the plugin manager. I my > >> > >>scenario > >> > >>>>it is based on a customer, which have a certain business role. But it > >> > >>can be > >> > >>>>whatever logic to decide which implementation to use. > >>>> > >>>>Now I use the the plugin business service interface from my action > >>>> > >>>>plugin.createAccount("001", "Hans Gruber"); > >>>> > >>>>With this one call a specific implementation of the Management > > > > interface > > > >>is > >> > >>>>called. What happens behind the scenes is not important from the > > > > actions > > > >>>>point of view. Maybe different business rules/logic applies for > >> > >>different > >> > >>>>implementations of the AccountManagement. > >>>> > >>>>What actually happens is that the plugin service implementation calls > > > > a > > > >>>>facade to fulfil the business action of creating an account. > >>>> > >>>>This approach is highly flexible...You have the possibility of hosting > >>>>different customers (with different needs) under the same application > >>>>constrcuted using business plugins building blocks. > >>>> > >>>>It also (like other business delegates as you stated Robert) promotes > >>>>loosely coupling between the web tier and EJB or whatever tier is > >> > >>behind. > >> > >>>>With this clean interface it is very very easy to provide an additonal > >> > >>XML > >> > >>>>WebServices interface (maybe though Axis) that makes your business > >> > >>services > >> > >>>>accessible from other platforms, systems, whatever... > >>>> > >>>>My few bucks...Anyone has comments...they are welcome... > >>>> > >>>>Regards > >>>> > >>>>Henrik > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>----- Original Message ----- > >>>>From: "Robert Taylor" <[EMAIL PROTECTED]> > >>>>To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > >>>>Sent: Wednesday, March 17, 2004 2:51 AM > >>>>Subject: RE: action - delegate - facade > >>>> > >>>> > >>>> > >>>> > >>>>>Adam, IMHO the Business Delegate pattern abstracts the client from > >> > >>knowing > >> > >>>>>your business implementation, whether it be EBJ, JDO, POJO, roll your > >> > >>own. > >> > >>>>The > >>>> > >>>> > >>>>>client interfaces with the Business Delegate and not its > > > > implementation. > > > >>>>>For example, if you have an Action (client) interface with the > > > > Business > > > >>>>Delegate > >>>> > >>>> > >>>>>instead of directly with a SessionFacade, then you can change the > >>>> > >>>>underlying implementation > >>>> > >>>> > >>>>>of the Business Delegate without changing anything in the client. > >>>>>If your really paranoid (or prepared), you can use the Abstract > > > > Factory > > > >>>>pattern which you could then > >>>> > >>>> > >>>>>initialize/subclass to create the appropriate Business Delegate > >>>> > >>>>implementations (EJB, JDO, main frame). > >>>> > >>>> > >>>>>Also by using a Business Delegate the client isn't exposed to > >>>> > >>>>implementation details > >>>> > >>>> > >>>>>such as (if your using EJB) looking up the appropropriate EJB or > >> > >>handling > >> > >>>>implementation > >>>> > >>>> > >>>>>specific exceptions. The Business Delegate becomes a high level > >>>> > >>>>abstraction of the > >>>> > >>>> > >>>>>business rules raising application level exceptions when error occur > > > > to > > > >>>>which the client > >>>> > >>>> > >>>>>can respond appropriately. > >>>>> > >>>>>So, you wouldn't necessarily have to modify the Delegate-Facade > >> > >>interface. > >> > >>>>The interface > >>>> > >>>> > >>>>>itself remains unchanged. You have to use a different implementation. > >> > >>That > >> > >>>>is where the > >>>> > >>>> > >>>>>factory comes in. I imagine you could do something like the following: > >>>>> > >>>>>Properties props = // get initialization properties > >>>>> // to initialize factory to return EJB BD > >>>> > >>>>implementations > >>>> > >>>> > >>>>>BusinessDelegateFactory bdf = BusinessDelegateFactory.init(props); > >>>>> > >>>>> > >>>>>In your client, suppose AccountBD is your BusinessDelegate interface: > >>>>> > >>>>>BusinessDelegateFactory bdf = BusinessDelegateFactory.getInstance(); > >>>>>AccountBD accountBD = > >>>> > >>>>(AccountBD)bdf.createBusinessDelegate(AccountBD.BD_NAME); > >>>> > >>>> > >>>>>So you just end up "plugging" in new implementations as needed. > >>>>> > >>>>>Anyhow, that's my interpretation of the some of the forces behind the > >>>> > >>>>pattern > >>>> > >>>> > >>>>>and an idea on implementing it. > >>>>> > >>>>>Here's more information: > >>>>> > >>>> > >>>> > > http://java.sun.com/blueprints/corej2eepatterns/Patterns/BusinessDelegate.html > > > >>>>>http://www.developer.com/java/other/article.php/626001 > >>>>> > >>>>>robert > >>>>> > >>>>> > >>>>> > >>>>>>-----Original Message----- > >>>>>>From: Adam Hardy [mailto:[EMAIL PROTECTED] > >>>>>>Sent: Tuesday, March 16, 2004 6:26 PM > >>>>>>To: Struts Users Mailing List > >>>>>>Subject: action - delegate - facade > >>>>>> > >>>>>> > >>>>>>I've just been perusing the archive to check out what people have > > > > been > > > >>>>>>saying about struts to EJB interfacing. > >>>>>> > >>>>>>One thing that occurs to me is that the only reason mentioned for > >> > >>having > >> > >>>>>>a business delegate layer between the Actions and the Session Facade > > > > is > > > >>>>>>to allow for loose coupling of the struts-dependent code with the EJB > >>>>>>dependent code. > >>>>>> > >>>>>>How necessary is that? If you choose to drop EJB and go with, say > >>>>>>Hibernate, you would have to modify the interface, whether it is the > >>>>>>Action - Facade interface or the Delegate - Facade interface. > >>>>>> > >>>>>>Or have I missed an important other reason for the existence of the > >>>>>>Delegate layer? > >>>>>> > >>>>>>Adam > >>>>>>-- > >>>>>>struts 1.1 + tomcat 5.0.16 + java 1.4.2 > >>>>>>Linux 2.4.20 Debian > >>>>>> > >>>>>> > >>>>>>--------------------------------------------------------------------- > >>>>>>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] > >>>> > >>>> > >>> > >>> > >>>-- > >>>struts 1.1 + tomcat 5.0.16 + java 1.4.2 > >>>Linux 2.4.20 Debian > >>> > >>> > >>>--------------------------------------------------------------------- > >>>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] > > > > > > > -- > struts 1.1 + tomcat 5.0.16 + java 1.4.2 > Linux 2.4.20 Debian > > > --------------------------------------------------------------------- > 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]