Hi Latcho, You're probably right about passing a stage ref to an object whose sole purpose is connecting to the backend. Since I was just testing if I could get the thing working, I setup the remoting stuff in the main class (a Sprite), so I already have that there.
You could also pass just the url to the "real" class, I guess, instead of a ref to the stage; but anyway if just setting _url to anything not null is enough, that could also be a way to go. (I don't know if there are any pros / cons to any of those methods). No problem, I'll send you a copy of my test in a off-list email (to not spam this list; I think attachments are not allowed). It's very simple and not too different from yours, I think, but maybe it helps you to compare both. Another thing I tried is using a polling channel (using as a base the example that comes with blazeds to pure AS 3) and got it working, but I can't seem to find the project now (I'm such a bozo sometimes!). Anyway, I remember the AS part was almost identical, just the channel creating part changed and some mapping xml on the server side. I wasn't quite impressed about this feature, though. I mean, the good part is that it's transparent for you, but you could probably do the same with a timer. I was expecting something like RMTP, allowing real data push, but apparently that's not possible with RemoteObjects (or just with blazeDS ? Not sure). Cheers Juan Pablo Califano 2009/3/13 Latcho <spamtha...@gmail.com> > 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 > _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders