Re: Mapping objects

Todd Hivnor <[email protected]> Wed, 05 Jul 2006 12:19:22 -0700
Newsgroups gmane.comp.java.openamf.user
Message-ID <[email protected]>
I think the important change here was in your constructor. 
The following code will _not_ do what you want, I should have 
caught it earlier. 

>> ActionScript Code for SmackletType:
>>
>> class SmackletType {
>>
>>  // class properties
>>  private var _smackletName:String;
>>  private var _smackletTeaseLink:String;
>>  private var _smackletLink:String;
>>  private var _smackletThumbnail:String;
>>
>>  // constructor
>>
>>  public function SmackletType(smackletName:String,
>> smackletLink:String, smackletTeaseLink:String, smackletThumb:String) {
>>
>>   _smackletThumbnail = smackletThumb; // Bad for remoting. Will null out smackletThumbnail 
>>   _smackletTeaseLink = smackletTeaseLink;
>>   _smackletLink = smackletLink;
>>   _smackletName = smackletName;
>>
>> } // SmackletType constructor


Remoting will create a SmackletType object, populate the
instance variables, and finally call the constructor. 
But it won't pass any _arguments_ to the constructor. 
So, the constructor above will actually reset 
your instance variables like _smackletThumbnail 
back to null, because the smackletThumb argument is null.

If I am making an ActionScript class which is sometimes
instantiated via Remoting, and sometimes instantiated from
ActionScript code, I do something like this:

 public function SmackletType(smackletName:String,
	 smackletLink:String, smackletTeaseLink:String, smackletThumb:String) {

	if (arguments.length == 4) {
		// Class was instantiated from ActionScript w/ all arguments
 		   _smackletThumbnail = smackletThumb;  
		   _smackletTeaseLink = smackletTeaseLink;
		   _smackletLink = smackletLink;
		   _smackletName = smackletName;
	} else if (arguments.length == 0) {
		// Class was probably instantiated via Remoting.
		// You might test to ensure that smackletThumbnail 
		// or other instance variables are defined as expected.
	} else {
		// Class was called from ActionScript with wrong number of arguments. 
		// --> programmer error.
	}
}




Luke DeWitt wrote:
> Hooha!
>
> It works! I am not sure whether it was removing the parameters from the 
> constructors, removing the _ before variable names, or the fact that I moved 
> the AS classes into a package of the same name, but it appears to be 
> working!
>
> I couldn't get anything to work when ServiceCapture was running, and their 
> site was down when I tried to access it, but it is working now!!
>
> Thank you both for your help... though I have a feeling I'll be back for 
> more in the not so near future!
>
> Thanks,
>
> --LD
>
> ----- Original Message ----- 
> From: "Martin Wood" <[email protected]>
> To: <[email protected]>
> Sent: Wednesday, July 05, 2006 10:27 AM
> Subject: Re: [Openamf-user] Mapping objects
>
>
>   
>> hmm, definitely try using service capture and see what that says about the
>> object being sent to flash (i think you get a 30 day trial...i bought it 
>> because
>> its an invaluable tool for remoting development)
>>
>> one other thing i noticed which you should be aware of is that the 
>> constructor
>> of the actionscript class gets called after de-serialization so you have 
>> to be
>> careful what you do in your constructors.
>>
>> read this post for more information :
>>
>> http://www.darronschall.com/weblog/archives/000186.cfm
>>
>> anyway...back to the point..if you are getting a null that means that 
>> flash cant
>> do that cast, so i think that the object is being sent as the correct type 
>> from
>> java.
>>
>> personally i would try these things (as well as using service capture)
>>
>> 1. Make both constructors parameter less
>>
>> 2. Remove the underscores from the properties
>>
>> 3. triple check the mapping configuration
>>
>> 4. Keep the Object.registerClass call as part of the initialization code 
>> in the
>> Smacklet class
>>
>> class com.flashdb.domain.Smacklet
>> {
>>     private var reg:Boolean =
>> Object.registerClass("com.flashdb.domain.Smacklet",com.flashdb.domain.Smacklet);
>>
>>  // Rest of class code
>> }
>>
>>
>> if it doesnt work after that then i try a liberal dose of swearing. :)
>>
>> good luck.
>>
>> Martin
>>
>> Using Tomcat but need to do more? Need to support web services, security?
>> Get stuff done quickly with pre-integrated technology to make your job 
>> easier
>> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
>> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>> _______________________________________________
>> Openamf-user mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/openamf-user
>>
>>     
>
>
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Openamf-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/openamf-user
>   


Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642