So Mike,

You guys developed the external-ref stuff, what do you think of Cameron's changes? It 
sounds like he made it more flexible and powerful to me...

> -----Original Message-----
> From: Mike Cannon-Brookes [mailto:[EMAIL PROTECTED] 
> Sent: Friday, December 12, 2003 4:51 AM
> To: [EMAIL PROTECTED]
> Subject: Re: [OS-webwork] [OS-xwork] Spring IoC integration
> 
> 
> Francois,
> 
> :)
> 
> As for why it's required, it makes everything more flexible - 
> and it's not required at all. Just ignore it and it will do 
> you no harm.
> 
> Pico is good (for somethings) but personally I much prefer 
> Spring (that's a large debate for another time - each to their own) :)
> 
> - XWorks IoC container requires interfaces on your actions.
> - Pico requires a custom constructor and your own factories.
> - Spring requires external references (in one way)
> 
> You can also use Spring exactly like Pico if you want (using 
> constructors), but I actually like the explicitly defined 
> contracts that the external references give you.
> 
> Basically treat an external reference as a chance for some 
> code to resolve references on the action (IoC is just one use 
> for them) at a user defined time (you can't do this with Pico 
> - it's a constructor, it's done when the object is 
> constructed). With the ExternalReferenceInterceptor it's a 
> part of the interceptor chain, so I can govern when those 
> references are resolved (before Params? After Params? After 
> Validation?) I have control.
> 
> Anyway - some thoughts - don't get fooled by the Pico folk, 
> it's not the be-all-and-end-all of IoC - it's just one solution. :)
> 
> M
> 
> On 12/12/03 6:15 PM, "Francois Beauregard" 
> ([EMAIL PROTECTED]) penned the words:
> 
> > Why all of this external reference resolver thing gets into XWork?
> > 
> > Couldn't you just extend DefaultActionProxyFactory, 
> > DefaultActionInvocation and do whatever logic to integrate with the 
> > IoC container and/or use an interceptor?
> > 
> > Even XWorks own IoC container does not need this kind of 
> modification 
> > to XWork.xml, it looks like it only needs an interceptor and stores 
> > its configuration in an xml file.
> > 
> > You can also have a look at PicoContainer's integration (in 
> > NanoContainer), it is neatly done.
> > 
> > Cheers,
> > ___________________________
> > François Beauregard, b.ing.
> > Vice-président
> > Recherche et développement
> > Pyxis Technologies
> > www.pyxis-tech.com
> > 
> > T : (450) 681-9094, poste 102
> > F : (450) 681-5758
> > [EMAIL PROTECTED]
> > 
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] 
> Behalf Of 
> > Cameron Braid
> > Sent: December 12, 2003 1:32 AM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [OS-webwork] [OS-xwork] Spring IoC integration
> > 
> > 
> > It looks like noone else is interested in discussing this.
> > 
> > I have refactored xwork so that the external refrence resolvers are 
> > defined as described below
> > 
> > <xwork>
> >   <package name='test' extends='webwork-default'>
> > 
> >       <external-resolvers>
> >           <external-resolver name="test" 
> > class="com.opensymphony.xwork.config.TestExternalReferenceResolver">
> >               <param name='stringParam'>stringParamValue</param>
> >           </external-resolver>
> >           <external-resolver name="test2" 
> > 
> class="com.opensymphony.xwork.config.Test2ExternalReferenceResolver"/>
> >       </external-resolvers>
> > 
> >       <default-external-resolver-ref name='test'/>
> > 
> >       <action name="TestExternalRefResolver3" 
> > class="com.opensymphony.xwork.ExternalReferenceAction">
> >           <external-ref required="true" 
> name="Boo">myBoo</external-ref>
> >           <interceptor-ref name="debugStack"/>
> >           <interceptor-ref name="defaultStack"/>
> >       </action>
> > 
> >       <!-- test where external-resolver-ref overrides the package's 
> > resolver -->
> >       <action name="TestExternalRefResolver5" 
> > class="com.opensymphony.xwork.ExternalReferenceAction">
> >           <external-ref name="foo" 
> > external-resolver-ref='test2'>myFoo</external-ref>
> >           <interceptor-ref name="debugStack"/>
> >           <interceptor-ref name="defaultStack"/>
> >       </action>
> > 
> >   </package>
> > </xwork>
> > 
> > I have updated the test cases to use this new structure, and added 
> > tests for the new features.
> > 
> > This has required that the ExternalReferenceResolver interface be 
> > changed a little bit, simplifying the implementation.
> > 
> > Previousally ExternalReferenceResolver.resolveReferences(..) had to 
> > resolve all external refrences for an action, where as now it just 
> > resolves a single refrence at a time.
> > 
> > public interface ExternalReferenceResolver {
> >   public void resolveReferences(ActionInvocation invocation, 
> > ExternalReference reference) throws ReferenceResolverException; }
> > 
> >   This simplifies the implemetation of the resolver because 
> it doesn't 
> > need to know about the ActionConfig at all, since ExternalReference 
> > contains the action property name, the external ref string and the 
> > required boolean.
> > 
> >   It is the responsiblity of the 
> ExternalReferencesInterceptor to call 
> > the relevant resolver for each <external-ref> tag for the action.
> > 
> >   I can add a Jira task, and attach the patch if anyone is 
> interested.
> > 
> >   I would prefer that this code gets added before the final release.
> > 
> > Cameron.
> > 
> > Cameron Braid wrote:
> > 
> >> Ross Mason wrote:
> >> 
> >>> 
> >>> 
> >>> Cameron Braid wrote:
> >>> 
> >>>> Ross Mason wrote:
> >>>> 
> >>>>> 
> >>>>> 
> >>>>> Cameron Braid wrote:
> >>>>> 
> >>>>>> I have downloaded and integrated this code though and 
> the tests 
> >>>>>> run perfectly (after creating my my own ServletContextAware 
> >>>>>> interface and removing refrences to the confluence packages)
> >>>>>> 
> >>>>>> I really like the work that you have done. Though I think some 
> >>>>>> more work is required to be able to integrate into 
> xwork/webwork
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> Cool!
> >>>>> 
> >>>>>> 
> >>>>>> I can't see how the servlet context is set onto the 
> >>>>>> SpringServletContextReferenceResolver or the 
> ApplicationContext 
> >>>>>> is set onto the SpringApplicationContextReferenceResolver 
> >>>>>> (depending on the one that is used)
> >>>>>> 
> >>>>>> you construct the ExternalReferenceResolver using this 
> code, and 
> >>>>>> immediately add it to the package config.
> >>>>>> 
> >>>>>>                 Class erResolverClazz = 
> >>>>>> ClassLoaderUtil.loadClass(externalReferenceResolver,
> >>>>>> ExternalReferenceResolver.class);
> >>>>>>                 erResolver = (ExternalReferenceResolver) 
> >>>>>> erResolverClazz.newInstance();
> >>>>>> 
> >>>>>> I guess that the ServletContextAware interface could 
> be added to 
> >>>>>> webwork, though the question remains - how is the
> >>>>>> ServletContextAware.setServletContext(..) method going to get 
> >>>>>> called ?
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> We could use a ServletContextListener to set the 
> contexts on our 
> >>>>> resolvers... Could we access the packageConfig from a listener?
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> Yeah I guess we could, though this starts to get ugly when each 
> >>>> different resolver needs its own listener that is bound to the 
> >>>> action config api.
> >>> 
> >>> 
> >>> You only need one listener to set the Servlet context on all 
> >>> Resolvers that are ServletContextAware.  I'll attach the one I'm 
> >>> using to the issue.
> >> 
> >> 
> >> Sounds like we need to get the DefaultComponentManager to 
> bootstrap 
> >> the external refrence resolvers ;)
> >> 
> >> Actually... my point here was that each type of resolver... ie the 
> >> spring one, the XXXFramework one and any other framework 
> integration 
> >> one will require someone to code a specific 
> ConfigurerListener to set 
> >> any external resources that the resolver requires. I think that if 
> >> this can be done with simple parameter based configuration then it 
> >> will be a lot simpler.
> >> 
> >>>> 
> >>>>>> 
> >>>>>> I propost the following soloution :
> >>>>>> 
> >>>>>> 1 : have different SpringXXXReferenceResolver classes in xwork 
> >>>>>> and webwork like this :
> >>>>>> 
> >>>>>> xwork : 
> Spring/ClassPathXmlApplicationContext/ReferenceResolver 
> >>>>>> or a Spring/FileSystemXmlApplicationContext/ReferenceResolver
> >>>>>> webwork : 
> Spring/WebApplicationContext/ReferenceResolver - using
> >>>>>> 
> > 
> WebApplicationContextUtils.getWebApplicationContext(ServletActionConte
> > xt.get
> > ServletContext())
> >>>>>> to obtain the application context
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> I agree, we should have different implementations, 
> separated like
> >>>>> this.    In my test case I have provided a
> >>>>> Spring/XmlFileApplicationContext, so we could just 
> refactor that 
> >>>>> out.
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> Certainly can.
> >>>> 
> >>>>>> 
> >>>>>> This works find for webwork based apps, though for xwork based 
> >>>>>> apps that the 
> >>>>>> SpringClassPathXmlApplicationContextReferenceResolver and 
> >>>>>> SpringFileSystemXmlApplicationContextReferenceResolver require 
> >>>>>> configuration to specify the filename.. therfore step two is 
> >>>>>> required :
> >>>>>> 
> >>>>>> 2 : allow for external refrence resolvers to be 
> declards by name, 
> >>>>>> class and to be parameterizable like interceptors.  
> the refer to 
> >>>>>> the by name instead of className
> >>>>>> 
> >>>>>> e.g. :
> >>>>>> 
> >>>>>> <xwork>
> >>>>>>     <package ... externalReferenceResolver="spring">
> >>>>>>        ....
> >>>>>>     <!-- NEW FEATURE : new node set -->
> >>>>>>         <externalRefrenceResolvers>
> >>>>>>            <externalRefrenceResolver name='spring' 
> >>>>>> class="SpringWebApplicationContextReferenceResolver"/>
> >>>>>>            <externalRefrenceResolver name='springXmlFile' 
> >>>>>> class="SpringClassPathXmlApplicationContextReferenceResolver">
> >>>>>>               <param 
> name="filename">myApplicationContext.xml</param>
> >>>>>>             </externalRefrenceResolver >
> >>>>>>         </externalRefrenceResolvers>
> >>>>>>        ....
> >>>>>>        <action name='...' class='...'>
> >>>>>> 
> >>>>>>         <!-- NEW FEATURE : externalRefrenceResolver 
> attribute -->
> >>>>>>           <external-ref 
> externalRefrenceResolver='springXmlFile'
> >>>>>> name='foo'>myFoo</external-ref>
> >>>>>>           <external-ref name='bar'>myBar</external-ref>
> >>>>>>        </action>
> >>>>>>     </package>
> >>>>>> </xwork>
> >>>>>> 
> >>>>>> this allows for reusing the same configured  resolver 
> in multiple 
> >>>>>> packages - which you can do now, though without configuration. 
> >>>>>> this allows for each external-ref tag to optionally use a 
> >>>>>> different resolver as in the example above
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> Ok that looks like it would work, I think we should declare 
> >>>>> resolvers the way you suggested. Though I don't think 
> we need then 
> >>>>> externalReferenceResolver attrib on the external-ref 
> element.  We 
> >>>>> can just assume all actions in a package use the same 
> Resolver.  I 
> >>>>> think it's neater that way; You can still use different 
> Containers 
> >>>>> on different packages to resolve your references and 
> there would 
> >>>>> be a more logical grouping of package/container.
> >>>>> 
> >>>> I agree that is is not necessary to allow the resolver to be 
> >>>> overriden per external-ref though I think it could be a usefull 
> >>>> feature to have.  Say you are using a thirs party spring based 
> >>>> component  package - say for security - and you want 
> each action's 
> >>>> securityManager property to be resolved from this 
> context instead 
> >>>> of the package's one.
> >>>> 
> >>>> I guess that another way of specifying it would be to use
> >>>> 
> >>>>       <external-ref name='foo'>springXmlFile:myFoo</external-ref>
> >>>> 
> >>>> and to modify the interceptor to look for the : char.
> >>>> 
> >>>> just my 2c worth ;)
> >>> 
> >>> 
> >>> See your point, I guess we need to throw the notation up for 
> >>> discussion.
> >> 
> >> 
> >> I don't really mind the syntax for specifying which 
> resolver to use.
> >> 
> >> SO there are two questions
> >> 
> >> 1. Do we need to be able to override the resolver on a per 
> refrence 
> >> basis 2. If we can override, what is the syntax ?
> >> 
> >> Does anyone else have any thoughs or suggestions ?
> >> 
> >>>> 
> >>>>>> I am sure that other frameworks will require some sort 
> of runtime 
> >>>>>> configuration  for the external reference resolvers as well.
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> Any comments ?
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> yep!
> >>>>> 
> >>>>>> 
> >>>>>> Cameron
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> Cheers,
> >>>>> 
> >>>>> ross
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> Thanks
> >>>> 
> >>>> Cameron
> >>>> 
> >>>>>> 
> >>>>>> Ross Mason wrote:
> >>>>>> 
> >>>>>>> Cheers mate.
> >>>>>>> 
> >>>>>>> I've just attached the SpringExternalReferenceResolver 
> >>>>>>> implmentation and tests to the Jira Issue.
> >>>>>>> 
> >>>>>>> http://jira.opensymphony.com/secure/ViewIssue.jspa?key=XW-122
> >>>>>>> 
> >>>>>>> Ross
> >>>>>>> 
> >>>>>>> Patrick Lightbody wrote:
> >>>>>>> 
> >>>>>>>> This is good stuff -- not sure about a 1.0 release though. 
> >>>>>>>> We'll try to get a point release out shortly after though to 
> >>>>>>>> support this.
> >>>>>>>> 
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: [EMAIL PROTECTED]
> >>>>>>>> [mailto:[EMAIL PROTECTED] On 
> >>>>>>>> Behalf Of Ross Mason
> >>>>>>>> Sent: Monday, November 17, 2003 8:02 PM
> >>>>>>>> To: [EMAIL PROTECTED]
> >>>>>>>> Subject: Re: [OS-webwork] [OS-xwork] Spring IoC integration
> >>>>>>>> 
> >>>>>>>> I'll fix the commons dependancies first :-)
> >>>>>>>> 
> >>>>>>>> Ross Mason wrote:
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>> I've tried running the patch again (through 
> Eclipse) and I get 
> >>>>>>>>> the
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> same
> >>>>>>>> 
> >>>>>>>>> problem - It only creates patch entries for new 
> files?  I know 
> >>>>>>>>> this isn't a subject for this list, but does anyone 
> know why 
> >>>>>>>>> this happens?
> >>>>>>>>> 
> >>>>>>>>> Anyway Cameron,  I'll create a zip of the changes 
> for now and 
> >>>>>>>>> attach
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> it
> >>>>>>>> 
> >>>>>>>>> to the the issue and this list.
> >>>>>>>>> 
> >>>>>>>>> Cheers,
> >>>>>>>>> 
> >>>>>>>>> Ross
> >>>>>>>>> 
> >>>>>>>>> Cameron Braid wrote:
> >>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>>> The patch seems to be missing code in the configuration 
> >>>>>>>>>> classes... since I have applied it, I am geting 
> compilation 
> >>>>>>>>>> errors :
> >>>>>>>>>> 
> >>>>>>>>>> not defined :
> >>>>>>>>>> 
> >>>>>>>>>> invocation.getProxy().getConfig().getPackageName()
> >>>>>>>>>> invocation.getProxy().getConfig().getExternalRefs();
> >>>>>>>>>> packageConfig.getExternalRefResolver()
> >>>>>>>>>> 
> >>>>>>>>>> Thanks,
> >>>>>>>>>> 
> >>>>>>>>>> Cameron
> >>>>>>>>>> 
> >>>>>>>>>> Ross Mason wrote:
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>>> Hi,
> >>>>>>>>>>> 
> >>>>>>>>>>> As per the discussion late last week, we have a patch for 
> >>>>>>>>>>> Xwork so that it can use an external container to resolve 
> >>>>>>>>>>> component
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> references.
> >>>>>>>> 
> >>>>>>>>>>> I've created the following issue - 
> >>>>>>>>>>> 
> http://jira.opensymphony.com/secure/ViewIssue.jspa?key=XW-12
> >>>>>>>>>>> 2
> >>>>>>>>>>> 
> >>>>>>>>>>> I've added a breakdown of the changes below, in summary, 
> >>>>>>>>>>> this is how
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>>>> it works-
> >>>>>>>>>>> 
> >>>>>>>>>>> You can configure a action to have external references in 
> >>>>>>>>>>> the xwork.xml using a new <external-ref> tag on the action
> >>>>>>>>>>> 
> >>>>>>>>>>> When the action is configured the external refs 
> are stored 
> >>>>>>>>>>> on the action config.
> >>>>>>>>>>> 
> >>>>>>>>>>> When the action is invoked, there is a new 
> interceptor that 
> >>>>>>>>>>> will resolve these references.  It does this by 
> using a new 
> >>>>>>>>>>> attribute on the package config called 
> >>>>>>>>>>> externalReferenceResolver i.e.
> >>>>>>>>>>> 
> >>>>>>>>>>> <package name="default"
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> > 
> externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContex
> > tR
> >>>>>>>> 
> >>>>>>>> eferenceResolver">
> >>>>>>>> 
> >>>>>>>>>>> 
> >>>>>>>>>>> In this case, the SpringServletContextReferenceResolver
> >>>>>>>>>>> implementation will handle the work of looking up and 
> >>>>>>>>>>> setting the references on the action. Note, if a 
> resolver is 
> >>>>>>>>>>> not found on the actions package, it will 
> tranverse up the 
> >>>>>>>>>>> package heirarchy to find one.
> >>>>>>>>>>> 
> >>>>>>>>>>> We have an implementation for Spring, but I have not 
> >>>>>>>>>>> included it in this patch as it should probably 
> go into an 
> >>>>>>>>>>> xwork-ext sub-project.  Let me know what you want 
> me to do 
> >>>>>>>>>>> with this...
> >>>>>>>>>>> 
> >>>>>>>>>>> Here are the changes and additions to the xwork codebase -
> >>>>>>>>>>> 
> >>>>>>>>>>> 1. added 2 new config attributes -
> >>>>>>>>>>> - a new element external-ref to the action element in the
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> config.
> >>>>>>>> 
> >>>>>>>>>>> i.e <external-ref name="foo">Foo</external-ref> 
> where name 
> >>>>>>>>>>> is the setter method name and Foo is the reference to 
> >>>>>>>>>>> lookup.
> >>>>>>>>>>> - added an attribute to the package element called 
> >>>>>>>>>>> externalReferenceResolver which supplies a FQ 
> classname to 
> >>>>>>>>>>> an ExternalReferenceResolver implementation.
> >>>>>>>>>>> 
> >>>>>>>>>>> 2. Updated the xwork DTD accordingly.
> >>>>>>>>>>> 
> >>>>>>>>>>> 3. Added 4 new classes -
> >>>>>>>>>>> - External Reference - an encapsulation of the 
> external-ref 
> >>>>>>>>>>> tag
> >>>>>>>>>>> - ExternalReferenceResolver - an interface to provide
> >>>>>>>>>>> implementations for resolving references from an external
> >>>>>>>>>>> container
> >>>>>>>>>>> - ExternalReferencesInterceptor - will resolve 
> references on a
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> given
> >>>>>>>> 
> >>>>>>>>>>> ActionInvocation
> >>>>>>>>>>> - ReferenceResolverException - thrown by 
> >>>>>>>>>>> ExternalReferenceResolver
> >>>>>>>>>>> 
> >>>>>>>>>>> 4. Added support for external references to the 
> >>>>>>>>>>> ActionConfig. I also
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>>>> added the attribute packageName to the 
> ActionConfig, so that 
> >>>>>>>>>>> the Interceptor could determine which package the action 
> >>>>>>>>>>> belonged to in order to find the 
> externalReferenceResolver.
> >>>>>>>>>>> 
> >>>>>>>>>>> 5. Added support for the 
> externalReferenceResolver attribute 
> >>>>>>>>>>> to the PackageConfig.
> >>>>>>>>>>> 
> >>>>>>>>>>> 6. Added support for the extra configuration to the 
> >>>>>>>>>>> XMLConfigurationProvider and DefaultConfigurationProvider
> >>>>>>>>>>> 
> >>>>>>>>>>> 7. Added tests in the 
> >>>>>>>>>>> 
> org.opensymphony.xwork.config.ExternalReferenceResolverTest
> >>>>>>>>>>> 
> >>>>>>>>>>> 
> >>>>>>>>>>> I've attached a cvs patch with all the changes.  
> I built the 
> >>>>>>>>>>> patch against the latest src.
> >>>>>>>>>>> 
> >>>>>>>>>>> Cheers,
> >>>>>>>>>>> 
> >>>>>>>>>>> Ross
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>> -------------------------------------------------------
> >>>>>>>>> This SF. Net email is sponsored by: GoToMyPC
> >>>>>>>>> GoToMyPC is the fast, easy and secure way to access your 
> >>>>>>>>> computer from any Web browser or wireless device. 
> Click here 
> >>>>>>>>> to Try it Free!
> >>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> > 
> https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tm
> > pl
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>> _______________________________________________
> >>>>>>>>> Opensymphony-webwork mailing list 
> >>>>>>>>> [EMAIL PROTECTED]
> >>>>>>>>> 
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webw
> >>>>>>>>> ork
> >>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> -------------------------------------------------------
> >>>>>>>> This SF. Net email is sponsored by: GoToMyPC
> >>>>>>>> GoToMyPC is the fast, easy and secure way to access your 
> >>>>>>>> computer from any Web browser or wireless device. 
> Click here to 
> >>>>>>>> Try it Free!
> >>>>>>>> 
> > 
> https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tm
> > pl
> >>>>>>>> 
> >>>>>>>> _______________________________________________
> >>>>>>>> Opensymphony-webwork mailing list 
> >>>>>>>> [EMAIL PROTECTED]
> >>>>>>>> 
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwo
> >>>>>>>> rk
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> -------------------------------------------------------
> >>>>>>>> This SF. Net email is sponsored by: GoToMyPC
> >>>>>>>> GoToMyPC is the fast, easy and secure way to access your 
> >>>>>>>> computer from any Web browser or wireless device. 
> Click here to 
> >>>>>>>> Try it Free!
> >>>>>>>> 
> > 
> https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tm
> > pl
> >>>>>>>> 
> >>>>>>>> _______________________________________________
> >>>>>>>> Opensymphony-webwork mailing list 
> >>>>>>>> [EMAIL PROTECTED]
> >>>>>>>> 
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwo
> >>>>>>>> rk
> >>>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> -------------------------------------------------------
> >>>>>>> This SF. Net email is sponsored by: GoToMyPC
> >>>>>>> GoToMyPC is the fast, easy and secure way to access your 
> >>>>>>> computer from any Web browser or wireless device. 
> Click here to 
> >>>>>>> Try it Free!
> >>>>>>> 
> > 
> https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tm
> > pl
> >>>>>>> 
> >>>>>>> _______________________________________________
> >>>>>>> Opensymphony-webwork mailing list 
> >>>>>>> [EMAIL PROTECTED]
> >>>>>>> 
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwor
> >>>>>>> k
> >>>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> --
> >>>>>> Any damn fool can write code that a computer can understand... 
> >>>>>> The trick is to write code that humans can understand. [Martin 
> >>>>>> Fowler 
> >>>>>> 
> http://www.martinfowler.com/distributedComputing/refactoring.pdf]
> >>>>>> 
> >>>>>> 
> ------------------------------------------------------- This SF. 
> >>>>>> Net email is sponsored by: GoToMyPC GoToMyPC is the fast, easy 
> >>>>>> and secure way to access your computer from any Web browser or 
> >>>>>> wireless device. Click here to Try it Free!
> >>>>>> 
> > 
> https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tm
> > pl
> >>>>>> _______________________________________________
> >>>>>> Opensymphony-webwork mailing list 
> >>>>>> [EMAIL PROTECTED]
> >>>>>> 
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> -------------------------------------------------------
> >>>>> This SF.net email is sponsored by: SF.net Giveback 
> Program. Does 
> >>>>> SourceForge.net help you be more productive?  Does it help you 
> >>>>> create better code?  SHARE THE LOVE, and help us help 
> YOU!  Click 
> >>>>> Here: http://sourceforge.net/donate/ 
> >>>>> _______________________________________________
> >>>>> Opensymphony-webwork mailing list 
> >>>>> [EMAIL PROTECTED]
> >>>>> 
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> >>>>> 
> >>>> 
> >>>> 
> >>> 
> >>> 
> >>> 
> >>> -------------------------------------------------------
> >>> This SF.net email is sponsored by: SF.net Giveback Program. Does 
> >>> SourceForge.net help you be more productive?  Does it help you 
> >>> create better code?  SHARE THE LOVE, and help us help YOU!  Click 
> >>> Here: http://sourceforge.net/donate/ 
> >>> _______________________________________________
> >>> Opensymphony-webwork mailing list 
> >>> [EMAIL PROTECTED]
> >>> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> >>> 
> >> 
> >> 
> > 
> > 
> > --
> > Any damn fool can write code that a computer can understand... The 
> > trick is to write code that humans can understand. [Martin Fowler
> > http://www.martinfowler.com/distributedComputing/refactoring.pdf]
> > 
> > 
> > 
> > 
> > 
> > -------------------------------------------------------
> > This SF.net email is sponsored by: SF.net Giveback Program. Does 
> > SourceForge.net help you be more productive?  Does it help 
> you create 
> > better code?  SHARE THE LOVE, and help us help YOU!  Click Here: 
> > http://sourceforge.net/donate/ 
> > _______________________________________________
> > Opensymphony-webwork mailing list 
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> > 
> > 
> > 
> > -------------------------------------------------------
> > This SF.net email is sponsored by: SF.net Giveback Program. Does 
> > SourceForge.net help you be more productive?  Does it help 
> you create 
> > better code?  SHARE THE LOVE, and help us help YOU!  Click Here: 
> > http://sourceforge.net/donate/ 
> > _______________________________________________
> > Opensymphony-webwork mailing list 
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> 
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by: SF.net Giveback Program. 
> Does SourceForge.net help you be more productive?  Does it 
> help you create better code?  SHARE THE LOVE, and help us 
> help YOU!  Click Here: http://sourceforge.net/donate/ 
> _______________________________________________
> Opensymphony-webwork mailing list 
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> 


-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
Opensymphony-webwork mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork

Reply via email to