How crazy is this!  I took your advise and moved a few things
around.  In my Unit test file I changed it to:

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"
      xmlns:sdm="sdm.*"
      xmlns:services="services.*">
      <services:Services id="myServices"/>  <---changed
      <sdm:SiteDataMaint/>                  <---changed
</mx:Application>

Basically just swapping the order of the services and sdm tag made it
work.

Thanks for all your efforts Doug!

Geoff


--- In [email protected], "Doug Lowder" <[EMAIL PROTECTED]>
wrote:
>
> It seems like siteDataServices hasn't been created at the time the
> SMDelegate constructor is being called.  You'll need to dig through
> your code to find out why, e.g. check where you're calling
> ReviewKeywordsCommand(), and possibly call the constructor at some
> other point when you know the remote object has been created.
>
> Regarding parameter passing, the constructor example you gave is
> exactly what I had in mind.  The value you're passing isn't a string
> though, it's a reference to the RemoteObject that you gave the id
> "siteDataServices" to.  Personally, I'd probably pass the service
as a
> parameter, but as long as the delegate constructor is called only
> after you know the service object exists, either way should work.
>
> I hope this helps, and another thing to note is that the work you're
> doing now to implement these design patterns will pay off down the
> road - especially if you're implementing a large-scale app.
>
> Doug
>
> --- In [email protected], "Geoffrey" <gtb104@> wrote:
> >
> > I tried to dump myServices via:
> > <code>Dumper.dump
(mx.core.Application.application.myServices);</code>
> > during the Delegate constructor, and it came up 'undefined'.
> >
> > I tried a creationComplete and an Initialize event to dump
> > siteDataServices upon startup of the main mxml file.  Both had
this
> > to say:
> >
> > [INFO]: (Object)
> >          log: (Object)
> >           level: 1 (Number)
> >           name: RemoteObject_AMF (String)
> >          __conn: (Object)
> >           contentType: application/x-fcs (String)
> >           _headerAdded: false (Boolean)
> >           _config: (Object)
> >            m_debug: true (Boolean)
> >            app_server: (Object)
> >             coldfusion: true (Boolean)
> >             amfheaders: false (Boolean)
> >             amf: false (Boolean)
> >             httpheaders: false (Boolean)
> >             recordset: true (Boolean)
> >             error: true (Boolean)
> >             trace: true (Boolean)
> >             _debug: true (Boolean)
> >            realtime_server: (Object)
> >             trace: true (Boolean)
> >             _debug: true (Boolean)
> >            client: (Object)
> >             rtmp: true (Boolean)
> >             http: true (Boolean)
> >             recordset: true (Boolean)
> >             trace: true (Boolean)
> >             _debug: true (Boolean)
> >            _debug: true (Boolean)
> >           _protocol: http (String)
> >           _id: 0 (Number)
> >           netDebugProxyFunctions: true (Boolean)
> >          _allowRes: true (Boolean)
> >          __serviceName:
com.foo.test.business.SiteMaintenanceDelegate
> > (String)
> >          __responder: (Object)
> >           __obj: undefined (undefined)
> >           __onFault: _resp5_fault (String)
> >           __onResult: _resp5_result (String)
> >          __name: siteDataServices (String)
> >          __showBusyCursor: true (Boolean)
> >          __concurrency: 0 (Number)
> >          __parentDocument: undefined (undefined)
> >
> > Looks like it's available at both initialization and
creationComplete
> > time frames.
> >
> > I'm curious why the examples taken from the books website would
prove
> > to be this difficult to implement.
> >
> > When you say "pass the service to your delegate constructor as a
> > parameter", do you mean as a string?  Like the following:
> >
> >   public function ReviewKeywordsCommand() {
> >       this.delegate = new SDMDelegate( this, mx.core.Application.\
> >                         application.myServices.siteDataServices );
> >   }
> >
> >
> > sorry if these are really basic questions, but I'm new to RIA
> > development.
> >
> > Thanks,
> > Geoff
> >
> >
> > --- In [email protected], "Doug Lowder" <douglowder@>
> > wrote:
> > >
> > > The parentApplication property is a reference to the Application
> > > object (the nesting refers to applications loaded within other
> > > applications with the Loader control and probably doesn't apply
to
> > > your case), but it's a property of mx.core.UIObject, which your
> > > SDMDelegate obviously isn't extending and probably shouldn't. 
Have
> > > you tried dumping mx.core.Application.application.myServices in
the
> > > delegate constructor to see if it exists at that point?  You
could
> > > also try adding a creationComplete event to the application to
> > > determine exactly when the siteDataServices remote object is
> > > available; something like
> > > creationComplete="Dumper.dump(myServices.siteDataServices)"
should
> > do it.
> > >
> > > It might be your best bet to pass the service to your delegate
> > > constructor as a parameter.
> > >
> > >
> > > --- In [email protected], "Geoffrey" <gtb104@> wrote:
> > > >
> > > > Hmm....
> > > >
> > > > I replaced the service assignment with:
> > > > "this.service =
parentApplication.myServices.siteDataServices;"
> > > >
> > > > But I get the following error:
> > > > "There is no property with the name 'parentApplication'."
> > > >
> > > > Looking at the docs, parentApplication looks like it's
intended
> > to
> > > > walk up the tree of multiple application nested within
> > themselves.  I
> > > > don't think that applys to this case since I only have 1 mxml
> > file
> > > > with the <mx:Application> tag.  Please correct me if I've
> > > > misunderstood this.
> > > >
> > > > Thanks,
> > > > Geoff
> > > >
> > > >
> > > > --- In [email protected], "Doug Lowder"
<douglowder@>
> > > > wrote:
> > > > >
> > > > > My guess would be that SDMDelegate's constructor can't
access
> > your
> > > > > siteDataServices RemoteObject through
> > > > mx.core.Application.application.
> > > > >  Try "this.service =
> > parentApplication.myServices.siteDataServices"
> > > > > instead, or pass the service as a parameter to the
constructor
> > as
> > > > you
> > > > > do with the responder.
> > > > >
> > > > > Doug
> > > > >
> > > > > --- In [email protected], "Geoffrey" <gtb104@>
wrote:
> > > > > >
> > > > > > I've been trying for the last few days to get
RemoteObject to
> > > > work,
> > > > > > but with little luck.  I've searched this site, and have
> > tried to
> > > > > > implement the examples found in "developing rich clients
with
> > > > > > macromedia FLEX".  To make matters more confusing, I've
also
> > > > tried to
> > > > > > implement the command/control/delegate patterns that the
> > above
> > > > book
> > > > > > advocates.
> > > > > >
> > > > > > Basically, I think the problem is that I'm not "seeing"
the
> > Java
> > > > > > classes I've created.  Below are code snippets of (what I
> > think)
> > > > are
> > > > > > the relevant files.
> > > > > >
> > > > > > ### My Java classes ###
> > > > > > {TOMCAT-HOME}\webapps\flex\WEB-
> > > > > >
> > INF\classes\com\foo\test\business\SiteMaintenanceDelegate.class
> > > > > >   package com.foo.test.business;
> > > > > >   import com.foo.test.vo.SiteKeywordVO;
> > > > > >   public class SiteMaintenanceDelegate {
> > > > > >       public SiteMaintenanceDelegate() {
> > > > > >       }
> > > > > >       public SiteKeywordVO reviewKeywords() {
> > > > > >             SiteKeywordVO keywords = new SiteKeywordVO();
> > > > > >             return keywords;
> > > > > >       }
> > > > > >   }
> > > > > >
> > > > > > {TOMCAT-HOME}\webapps\flex\WEB-
> > > > > > INF\classes\com\foo\test\vo\SiteKeywordVO.class
> > > > > >   package com.foo.test.vo;
> > > > > >   import java.io.Serializable;
> > > > > >   public class SiteKeywordVO implements Serializable {
> > > > > >     public String[] keywords;
> > > > > >       public void SiteKeywordVO() {
> > > > > >         String[] keywords = {"first agr", "second
> > agr", "third
> > > > agr"};
> > > > > >       }
> > > > > >   }
> > > > > >
> > > > > > ### My RO definition  ###
> > > > > > {TOMCAT-HOME}\webapps\flex\services\Services.mxml
> > > > > >   <mx:RemoteObject id="siteDataServices"           
> > > > > >       source="com.foo.test.business.SiteMaintenanceDelegate"
> > > > > >       result="event.call.resultHandler(event)"
> > > > > >       fault="event.call.faultHandler(event)"
> > > > > >       showBusyCursor="true">
> > > > > >             <mx:method name="reviewKeywords"/>
> > > > > >   </mx:RemoteObject>
> > > > > >
> > > > > > ### My ActionScript VO ###
> > > > > > {TOMCAT-HOME}
> > \webapps\flex\sdm\com\foo\test\vo\SiteKeywordVO.as
> > > > > >   class com.foo.test.vo.SiteKeywordVO {
> > > > > >       public var keywords:Array;
> > > > > >       public var _remoteClass;
> > > > > >       public function SiteKeywordVO() {
> > > > > >            _remoteClass="com.foo.test.vo.SiteKeywordVO";
> > > > > >       }
> > > > > >   }
> > > > > >
> > > > > > ### My testing mxml file ###
> > > > > > {TOMCAT-HOME}\webapps\flex\sdm\sdmUnitTest.mxml
> > > > > >  <?xml version="1.0" encoding="utf-8"?>
> > > > > >  <mx:Application
> > xmlns:mx="http://www.macromedia.com/2003/mxml"
> > > > > >       xmlns:sdm="sdm.*"
> > > > > >       xmlns:services="services.*"
> > > > > >       <sdm:SiteDataMaint/>
> > > > > >       <services:Services id="myServices"/>
> > > > > > </mx:Application>
> > > > > >
> > > > > > ### My SiteDataMaint component ###
> > > > > > {TOMCAT-HOME}\webapps\flex\sdm\SiteDataMaint.mxml
> > > > > >   ... //just the script part
> > > > > >   <mx:Script>
> > > > > >       <![CDATA[
> > > > > >       import sdm.business.*;
> > > > > >       import sdm.commands.*;
> > > > > >       import sdm.control.*;
> > > > > >       import com.foo.test.vo.*;
> > > > > >       import mx.controls.Alert;
> > > > > >       public function initApp() {
> > > > > >            var controller = new SDMController;
> > > > > >       }
> > > > > >       ]]>
> > > > > >   </mx:Script>
> > > > > >   ...
> > > > > >
> > > > > > The SDMController class seems to be working correctly.
> > > > > >
> > > > > > ### My Delegate class ###
> > > > > > {TOMCAT-HOME}\webapps\flex\sdm\business\SDMDelegate.as
> > > > > >   ... //just the constructor
> > > > > >   public function SDMDelegate(responder:Responder) {
> > > > > >       this.service =
> > > > > >
mx.core.Application.application.myServices.siteDataServices;
> > > > > >       Dumper.dump(service);
> > > > > >       this.responder = responder;
> > > > > >   }
> > > > > >
> > > > > > I think this is where the problem is.  When I
dump 'service'
> > (via
> > > > > > Flex Trace Panel), I get 'undefined'.
> > > > > >
> > > > > > I really have no idea where to go from here.  I've tried
> > turning
> > > > on
> > > > > > all debug stuff, used NetConnectionDebugger, use Flex
Trace
> > > > Panel...
> > > > > > nothing on all accounts.
> > > > > >
> > > > > > Thanks for any suggestions you may have!
> > > > > > Geoff
> > > > > >
> > > > >
> > > >
> > >
> >
>







--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com




SPONSORED LINKS
Web site design development Computer software development Software design and development
Macromedia flex Software development best practice


YAHOO! GROUPS LINKS




Reply via email to