Hi Tim,

> are you using Cairngorm2 yet?

Yes, we are using Cairngorm2 on a pretty large Flex/ColdFusion project.

Our architecture :
- ColdFusion MX 7 Standard + Flash Media Server 2 + SQL Server 2005 (we do
not plan to use Flex Enterprise Services),
- Flash (Flex 2).

Frameworks used :
- ColdSpring to handle our CFC-based model/service layers,
- Model-Glue to handle our CFC/CFM-based view/controller layers for the HTML
client,
- Cairngorm to handle our AS3/MXML model/view/controller layers for the
Flash client. 

I'm a big fan of those three frameworks : lightweight and powerful.
We never used ARP, so I have no opinions on it.

As soon as I have some times (maybe this week-end...), I'll write a sample
Flex/ColdFusion application (probably, a Cairngorm 2 version of Ben Forta's
Phones app).

Benoit Hediard

PS: Later this year, I also plan to rebuild entirely benorama.com (not
updated since 2002 for CFMX launch...), in order to put all the latest
Flex2/ColdFusion7 best practices!
 

-----Message d'origine-----
De : [email protected] [mailto:[EMAIL PROTECTED] De la
part de sufibaba
Envoyé : mardi 7 février 2006 23:08
À : [email protected]
Objet : [flexcoders] Re: Flex/Coldfusion connectivity test app

Thanks for the excellent reply.   

You saved the day.  

We do have CF working with Flex.  There's also the Phones example on the
Adobe Labs site that shows this connectivity.  All of this is working fine.
The challenge we were having was with the new version of Cairngorm.  We have
been using ARP for a flash application that is to be migrated to flex2 and
we need to get a bit of advice from the creator of Cairngorm -- who is now
Adobe, to suggest a best practice example that shows how coldfusion is the
"perfect mate" for flex2.

The login example that was given is a bit too simplified and also did not
include how coldfusion.  

If Adobe wants to sell coldfusion with flex, then it would be beneficial to
demonstrate via examples how things could work together.

Anyhow, aside from our wish list to Adobe, 

Merci Beaucoup for your excellent tutorial and sharing your experiences,
especially the bugs.  

BTW, are you using Cairngorm2 yet? or what type of architecture are you
using.  

P.S.  I used your Benorama architecture for a project and was very happy
with it.  What are your thoughts on Cairngorm and the upcomming
ARP3 for flex2.

Cheers,

Tim



--- In [email protected], "Benoit Hediard" <[EMAIL PROTECTED]> wrote:
>
> This sample app also shows how CFC/AS3 VO mappings (or remote class
alias)
> works.
> 
> Have fun!
> 
> Benoit Hediard
> 
> -----Message d'origine-----
> De : [email protected] [mailto:[EMAIL PROTECTED]
De la
> part de Benoit Hediard
> Envoyé : mardi 7 février 2006 20:37
> À : [email protected]
> Objet : [flexcoders] Flex/Coldfusion connectivity test app
> 
> Since some people seems to have issues to use the Flex/ColdFusion 
> connectivity, here is a sample app to test your connectivity.
> 
> ------------------------
> ColdFusion / Server side
> ------------------------
> 
> Save the following value object CFC in 
> {wwwroot}/com/mycompany/myapp/model/TestVO.cfc
> <cfcomponent>
> 
> <cfproperty name="someString" type="String" /> <cfproperty
name="someNumber"
> type="Numeric" />
> 
> <cffunction name="init" returntype="com.mycompany.myapp.model.TestVO">
>       <cfscript>
>       this.someString = "test";
>       this.someNumber = 0;
>       </cfscript>
>       <cfreturn this />
> </cffunction>
> 
> </cfcomponent>
> 
> Save the following remote service CFC in 
> {wwwroot}/com/mycompany/myapp/service/TestService.cfc
> <cfcomponent>
> 
> <cffunction name="getArray" access="remote" returntype="Array">
>       <cfscript>
>       var data = arrayNew(1);
>       arrayAppend(data, createObject("component", 
> "com.mycompany.myapp.model.TestVO").init());
>       arrayAppend(data, createObject("component", 
> "com.mycompany.myapp.model.TestVO").init());
>       </cfscript>
>       <cfreturn data />
> </cffunction>
> 
> <cffunction name="getStruct" access="remote" returntype="Struct">
>       <cfscript>
>       var data = structNew();
>       data.firstData = createObject("component", 
> "com.mycompany.myapp.model.TestVO").init();
>       data.secondData = createObject("component", 
> "com.mycompany.myapp.model.TestVO").init();
>       </cfscript>
>       <cfreturn data />
> </cffunction>
> 
> <cffunction name="receiveAndReturnVO" access="remote"
> returntype="com.mycompany.myapp.model.TestVO">
>       <cfargument name="vo" type="com.mycompany.myapp.model.TestVO">
>       <cfreturn arguments.vo>
> </cffunction>
> 
> </cfcomponent>
> 
> ------------------
> Flex / Client side
> ------------------
> 
> Save the following value object in {some test 
> project}/com/mycompany/myapp/model/TestVO.as
> package com.mycompany.myapp.model {
> 
>       [Bindable]
>       [RemoteClass(alias="com.mycompany.myapp.model.TestVO")]
>       
>       public class TestVO {
>               
>               public var someString:String;
>               public var someNumber:int;
>               
>               public function TestVO() {
>                       someString = "";
>                       someNumber = 0;
>               }
> 
>       }
>       
> }
> 
> Save the following test application in Flex Builder 2 {some test 
> project}/TestConnectivity.mxml <?xml version="1.0" encoding="utf-8"?> 
> <mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml";
xmlns="*">
>       
>       <mx:RemoteObject id="testService"
>               destination="ColdFusion"
>               result="onResult(event)"
>               source="com.mycompany.myapp.service.TestService"  />
>       
>       <mx:Script>
>               <![CDATA[
>                       import com.mycompany.myapp.model.TestVO;
>                       import mx.controls.Alert;
>                       import mx.rpc.events.ResultEvent;
>                       import mx.utils.ObjectUtil;
>                       
>                       private function onResult(event:ResultEvent){
>
Alert.show(ObjectUtil.toString(event.result));
>                       }
>               ]]>
>       </mx:Script>
>       
>       <mx:Button label="getArray" click="testService.getArray()" />
> 
>       <mx:Button label="getStruct" click="testService.getStruct()" />
>       <!-- BUGS : display (null) value instead of objects, but objects are

> correctly returned... -->
>       
>       <mx:Button label="receiveAndReturnVO"
> click="testService.receiveAndReturnVO(new TestVO())" />
>       
> </mx:Application>
> 
> Compile and run TestConnectivity.mxml (do not forget to set the 
> compile argument to take into account your flex/coldfusion service 
> definition,
> "flex-enterprise-services.xml")
> 
> It should work, if your ColdFusion server is correctly configured
with the
> Flex/ColdFusion connectivity add-on.
> You can also check the adapter logs in 
> {CFusionMX7}/runtime/logs/coldfusion-out.log, very nice to see if
the typed
> objects are correctly received or sent by the ColdFusion adapter.
> 
> ----
> BUGS
> ----
> 
> We have faced several bugs with the Flex/ColdFusion connectivity.
> 
> 1. In the above sample app, getStruct() display (null) object in the
Flex
> app, but objects are correctly returned... Strange.
> 
> 2. Sometimes, the AS -> CFC does not map the full type correctly.
> Example : the CFC might receive "TestVO" instead of 
> "com.mycompany.myapp.model.TestVO", so the CFC argument type
validation will
> fail and you will get an error...
> The current workaround is to remove typed object validation in remote 
> service CFCs.
> 
> 3. You might have to add UPPERCASE setter functions for CFC -> AS 
> translation to work correctly.
> We don't know yet when it is necessary... But sometimes it does!
>       
> Example in TestVO.as :
>       public function set SOMESTRING(value:String):void {
>               this.someString = value;
>       }
>               
>       public function set SOMENUMBER(someNumber:int):void {
>               this.someNumber = someNumber;
>       }
> 
> ---------------------------
> COLDFUSION WITH CAIRNGORM 2
> ---------------------------
> 
> In order to use your service CFCs in a cairngorm application, you
just need
> to add the RemoteObject definition in your ServiceLocator definition
file.
> 
> Hope this helps!
> 
> Benoit Hediard
> 
> 
> 
> 
> 
> 
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>





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



 








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

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 



Reply via email to