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]



Reply via email to