On 17/03/2004 13:33, "HG" <[EMAIL PROTECTED]> wrote:

> 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..:-)
> 

 (sorry to jump in to the conversation)
  I have been doing this but using a xml configuration file, using a Struts
plugin. It falls on something like this:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE views PUBLIC "-//04Web//DTD Horizon Configuration 1.0//EN"
    "http://www.04web.com/dtd/horizon-config_1_0.dtd";>
<views>

    <view name="usersView">
        <dyna-property property="users"      type="java.util.Collection"/>
        <dyna-property property="flag"       type="java.lang.Boolean"/>
    </view>

</views>

 (similar to struts-config)

  I did this because I found it a bit confusing mixing bean attributes to
retrieve html form data and attributes to deliver the intended presentation.

  I use a "view" factory to retrieve the bean definitions and then do
something like:

  view.set("property", object); (I extended the DynaBean and implement the
Map interface to achieve this - much simpler and JSTL friendly)

  ...you could also use BeanUtils for setting the properties.


  A simple module aware configuration:

    <!-- HORIZON PLUGIN -->

    <plug-in className="com.ohforweb.horizon.HorizonPlugin">

        <set-property property="config-files"
value="/WEB-INF/horizon-config.xml"/>

        <set-property property="parser-validate" value="true"/>

        <set-property property="module-aware" value="true"/>

    </plug-in>

  When I send the request I usually send a "view". If aa prepopulated html
form is to be presented I send a "view" and a form bean.

  Voila :)

Pedro Salgado
(http://www.04web.com/)

> 
> ----- 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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to