Hi Juan,
Thanks for your email. This gives me some confidence of beign on the wright track. Why I tried the Loaderconfig.url "notnull" string hack was because it just works but most of all because that's the only way of not having to pass a reference to stage.loaderInfo.url since it is not nice to have a proxy extending a DisplayObject and silly to pass a stage reference to the remoting instance to get remoting to work. The loaderInfo.parameters are of no importance to get it to work, so I dropped it. Good to remind me about the DTO registering, I only registered the basic messaging classes but I will need some more in the future. If you have made any examples to test this stuff, it would be nice to see copy of your test-setup even if it looks hacky.
Feel free to (not) send me.

Ciao,
Latcho

Juan Pablo Califano wrote:
Hi,
I've had this same issue some weeks ago. In my case, I had to use an existing back-end that was consumed by a Flex app using RemoteObjects. The requirement was to replace the front-end with a more lightweight AS pure client, but keeping the back-end. After googling a bit, I found, as you did, that the trick was manually registering the Flex classes that take part in the communication process (before attempting any communication!); this is something you get for free if you setup a Flex project, by the way (by means of the Remote meta-tag). I just made some tests to see whether it was feasible and haven't built the real thing yet, but I it worked ok against my local service (I installed BlazeDS) and against the production service (they're using FDS, I think). About the mx_internal "hack", I used this code (found it googling): var swfURL:String = this.loaderInfo.url;
   LoaderConfig.mx_internal::_url = this.loaderInfo.url;
   LoaderConfig.mx_internal::_parameters = this.loaderInfo.parameters;
It worked fine. I don't know if it's better this way or your way, though. Maybe you already know this, but another important thing is to map / register your DTO's before calling the backend; otherwise, the serialization / deserialization fails. I've used this code: private function mapAppRemoteClasses():void { // map the classes that represent entities in the backend to the AS classes
   registerClassAlias("ar.com.califa010.remotingTest.User",User);
} (Again, in flex project I think you'd just put a [Remote] tag on you class, but in an AS project you have to do it manually). Regarding the destination, I set it through the remote object using an id. The actual mapping to the Java entry point is on the server; in my case (BlazeDS), in the remoting-config.xml <destination id="userservice-test">
  <properties>
            <source>ar.com.califa010.remotingTest.UserService</source>
  </properties>
 </destination>
So, in the AS side: private function setupUserService():void {
   _userService     = new RemoteObject();
_userService.destination = "userservice-test";
   _userService.channelSet  = _amfChannelSet;
_userService.getFriends.addEventListener(ResultEvent.RESULT,handleServiceResult);
   
_userService.getFriends.addEventListener(InvokeEvent.INVOKE,handleServiceInvoke);
_userService.getFriends.addEventListener(FaultEvent.FAULT,handleServiceFault); _userService.loginUser.addEventListener(ResultEvent.RESULT,handleServiceResult);
   
_userService.loginUser.addEventListener(InvokeEvent.INVOKE,handleServiceInvoke);
_userService.loginUser.addEventListener(FaultEvent.FAULT,handleServiceFault); // call methods to test the service...
   _userService.getFriends();
   _userService.loginUser("username","pass");
} As far as I know, you won't lose any significant functionality. You'll lose some of the amenities provided by Flex (I mean compiling as a Flex Project), like data binding, automatic alias registration, automatic linking to the framework dependencies and probably some more (I don't have much experience in Flex projects). Hope this helps, and if you find out something interesting, please share! Cheers
Juan Pablo Califano
2009/3/12, Latcho <spamtha...@gmail.com <mailto:spamtha...@gmail.com>>:

    Hi friends,

    I'm a bit of a novice when it comes to remoting.
    I want to be able to use remoting with weborb-php in AS3 pure
    sang, fairly compact , without mxml configuation and remaining as
    functional as possible.

    Setting a direct endpoint into the remotingObject amfchannel was
    quite impossibe due to it beign a getter only and only
    configurable trough mxmlc,
    So I had to set up a channel.
    I also had to hack the mx messaging config LoaderConfig's url ,
    otherwise the flex mx.rpc's classes fail, if it remains a null value.
    (found this hack/tip here:
    http://bugs.adobe.com/jira/browse/BLZ-16#action_171947 but
    figgured it can hold any value as long it's not null)

    So I did this

     public dynamic class AMFService extends RemoteObject
     {
             ....
                mx.messaging.config.LoaderConfig.mx_internal::_url =
    "notnull";

          public function AMFService(.......)
         (
             _amfChannel = new
    AMFChannel(_destinationChannel,_serviceGateway);
             _amfChannel.connectTimeout = _conectTimeOut;
             _amfChannel.requestTimeout = _requestTimeout;
                       var myChannelSet:ChannelSet = new ChannelSet();
             myChannelSet.addChannel(_amfChannel);

    `        }


    furthermore this to solve some Typing errors and to get the of
    Messages wright wright

         static private function registerClassAliases():void
         {
                       /* REGISTERCLASSALIAS()
              * Preserves the class (type) of an object when the
    object is encoded in Action Message Format (AMF).
              * When you encode an object into AMF, this function
    saves the alias for its class,
              * so that you can recover the class when decoding the
    object.
              * If the encoding context did not register an alias for
    an object's class,
              * the object is encoded as an anonymous object.
              * Similarly, if the decoding context does not have the
    same alias registered,
              * an anonymous object is created for the decoded data.
              * */
              registerClassAlias("DSA", AsyncMessageExt);
registerClassAlias("flex.messaging.messages.AsyncMessage", AsyncMessage); registerClassAlias("DSA", AsyncMessageExt);
             registerClassAlias("DSC", CommandMessageExt);
registerClassAlias("flex.messaging.messages.CommandMessage",CommandMessage);

registerClassAlias("flex.messaging.messages.RemotingMessage", RemotingMessage); registerClassAlias("DSK", AcknowledgeMessageExt); registerClassAlias("flex.messaging.messages.AcknowledgeMessage",
    AcknowledgeMessage);
registerClassAlias("flex.messaging.messages.ErrorMessage",
    ErrorMessage);
registerClassAlias("flex.messaging.messages.HTTPMessage",HTTPRequestMessage);

             registerClassAlias("flex.messaging.messages.SOAPMessage",
    SOAPMessage);
registerClassAlias("flex.messaging.messages.MessagePerformanceInfo",
    MessagePerformanceInfo);
registerClassAlias("flex.messaging.io.ArrayList", ArrayList); registerClassAlias("flex.messaging.io.ArrayCollection",ArrayCollection); registerClassAlias("flex.messaging.io.ObjectProxy",ObjectProxy);
             registerClassAlias("flex.messaging.config.ConfigMap",
    ConfigMap);
         }


    Now my questions:
    Is this the best way to keep it tiny and pure AS3 without mxml
    Do I drop functionallity here if it comes to remoting (and not to
    the remote data processing) ?
    Can this be done in an oher AS3 way without hacking with the
    mx_internal trick ?
    FYI, the filesize of my remoting test is now 86Kb in release mode.

    Please help me out of uncertainty :)

    Tnx
    Latcho
    _______________________________________________
    Flashcoders mailing list
    Flashcoders@chattyfig.figleaf.com
    <mailto:Flashcoders@chattyfig.figleaf.com>
    http://chattyfig.figleaf.com/mailman/listinfo/flashcoders



_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to