nwebb

Flex, Flash, AIR

Archive for the 'AIR' Category

Using WebOrb with AIR (Step 1)

[I'm using the .NET version of WebOrb but this should be generic enough to apply to all versions]

Examples Work For Flex But Not AIR
When you load WebOrb you get access to the 'weborbconsole' which is a Flex app that runs on localhost). In the 'Getting Started' section of this app there is a tutorial which will work if you run it as a Flex application, but will throw an error if you run it as an AIR application. I found some very helpful documentation pointing to the necessary changes, but it is slightly outdated so I thought I'd fill in the gaps.

Recommended Reading
First of all, here is the documentation which I'd highly recommend reading (I'll summarise some of the key points below): Channels, endpoints and destinations

Config Files
Okay, so if you stuck with the default installation then you should find all your config files located here:
C:\inetpub\wwwroot\weborb30\WEB-INF\flex
The two files we are most interested in are services-config.xml (specifies channels) and remoting-config.xml (specifies destinations). The former references the latter.

In remoting-config.xml you can see that some default channels are defined:

<default-channels>
     <channel ref="my-amf"/>
     <channel ref="my-secure-amf">
</default-channels>

You can also see that a bunch of destinations are declared, one of which is called "GenericDestination" and uses a wildcard (*) for the source:

<destination id="GenericDestination">
     <properties>
          <source>*</source>
     </properties>
</destination>

When the wildcard is used, WebOrb uses one of the default-channels. The default channels apply to all remoting destinations unless a channel is specifically referenced in a destination declaration (thanks Mark!).

You can see that the first of the default channels references the "my-amf" channel, so by default any [non-secure app?] setting the destination to be "GenericDestination" will actually end up using the "my-amf" channel. Here is an example of the Flex RemoteObject tag doing just that:

<mx:RemoteObject id="compinfo" destination="GenericDestination" source="noteperfect.remote.ComputerInfoService"
showBusyCursor="true"
fault="faultHandler(event)">
     <mx:method name="getComputerInfo" result="getComputerInfoHandler(event)"/>
</mx:RemoteObject>

A Solution
The documentation I linked to ( above) explains how AIR needs absolute URLs rather than relative URLs, and this is why we need to use different channels for Flex and AIR apps ( the only difference being that the AIR channel has an absolute reference to the endpoint uri ) . The doc also refers to "my-air-amf" and "GenericAIRDestination". I could only find an "air-http" channel definition in my version of WebOrb, and as for "GenericAIRDestination", that does exist (in weborb-services-config.xml) but it is exactly the same as "GenericDestination".

So, I was able to get the example working as an AIR app by doing the following:

  • Changing the default channel in remoting-config.xml to be  <channel ref="air-http"/>
  • Setting the destination on my RemoteObject in Flex to be "GenericDestination" (rather than GenericAIRDestination)

I'm brand-new to WebOrb and I'm not suggesting that this is the only/best/recommended way to get things working - although the documentation seems to suggest it is. Please feel free to leave a comment if there is a better way.

-------------------------------------------------------------------------------------------
Edit:

After chatting to Mark from MidnightCoders I've changed things slightly. All I've really done is:
(1) Reverted the default-channel to be "my-amf" (in remoting-config)
(2) Copied "GenericAIRDestination" ( from weborb-services-config.xml) in to remoting-config,  and added both a channels attribute and tag - see the xml below.
(3)
Changed my RemoteObject in Flex to use "GenericAIRDestination"

In Remoting Config:

<default-channels>
     <channel ref="my-amf"/>
</default-channels>

Also In Remoting Config (copied over from weborb-services-config & ammended):

<destination id="GenericAIRDestination" channels="air-http">
     <channels>
          <channel ref="air-http" />
     </channels>
     <properties>
          <source>*</source>
     </properties>
</destination>

In Services Config:

<channel-definition id="air-http" class="mx.messaging.channels.AMFChannel">
     <endpoint uri="http://localhost:80/weborb30/weborb.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
     <properties>
          <polling-enabled>false</polling-enabled>
     </properties>
</channel-definition>

In Flex App:

<mx:RemoteObject id="compinfo"
destination="GenericAIRDestination"
source="noteperfect.remote.ComputerInfoService"
showBusyCursor="true"
fault="faultHandler(event)">
     <mx:method name="getComputerInfo" result="getComputerInfoHandler(event)"/>
</mx:RemoteObject>

I won't go too much further in to this, because (a) Mark has indicated that things will probably be made easier in WebOrb 4, and (b)  my next post is going to be about using WebOrb & AIR without referring to the config files at all ( courtesy of Dan from the moov2 team).

Thanks to Mark for all his help.

No comments

Cool Flex AIR & Flash Stuff You Could Be Missing Out On

I thought I should mention that while there has been a lack of standard blog posting from me in the last few months (due to a hectic work schedule) I *am* micro-blogging at regular intervals (usually several times a day) via my Twitter feed.

This is perfect, as it allows me to tweet or retweet information that may be of interest to fellow developers, without impacting significantly upon my working day.

Here is a sample of the type of info I've linked to in the past few weeks:

Dependency injection with Flex (article)
Flight Framework (custom data binding framework)
Creating a PicLens Web Application with Flex and Away 3D (3 part tutorial)
Grooveshark (Flash/Flex web based music player)
AIR SQLite Administration Tool
AIR Application Descriptor Manager
Using Swiz (3 part tutorial)
Zoetrope (video)

If any of that sounds like it would have been of interest to you then you can find the links on my feed, and if you want to follow my (or anyone else's) Twitter feed, the easiest thing to do is to create a Twitter account then get yourself a free desktop client such as the rather excellent AIR app Tweetdeck (does anyone even use the web interface??!)

If you have an iPhone you can also get Twitterific for free from the app store (though I would recommend Tweetie, which is worth every penny of the £1.79 price tag).

Twitter is a great medium as long as you subscribe to the right people. I try to keep 90% of my feed related to Flex/AIR/Flash so you won't be receiving too many banal posts like "I am eating a sandwich" from me ( although I occasionally chat rubbish when I feel like it ;) )

Other regular Twitter users I can highly recommend include [but are no means limited to]:

@FlashGen
@davidderaedt
@peterelst
@polyGeek
@InsideRIA
@Fitzchev
@leebrimelow
@jwilker
@air

Happy tweeting!

p.s. If you're in to travel writing, check out my girlfriend's Twitter feed too (@femaletraveller) :)

1 comment

Installing (pretty much) everything – great resource

I just ran across this page

Now this guy Edward has been busy! First check out his 900 code examples page (at the time of writing many of the examples on the first page are Flex/AIR)

Next take a look at the tutorials page. As an example, one of his PHP tutorials gives nice clear screen-shots and examples, which tell you how to:

1. Install Apache 2. Install 7-Zip 3. Install PHP 4. Install MySQL 5. Install phpMyAdmin 6. Install Java 7. Install Eclipse 8. Install PHPEclipse 9. Install Subversion 10. Install TortoiseSVN 11. Install Tortoise Plug-in 12. Install Datapod 13. Setup Repository 14. Setup Eclipse Project and Test SVN 15. Create a web site with Datapod

...and that's only one of his tutorials! This man is obviously a tutorial writing machine ;-)

He really does deserve some credit for putting together such a great resource. Thanks Edward.

Windows, Linux, AJAX, Ruby, Python, Java, CSS, XML, PHP5, Excel VBA, MySQL, C#, Perl, Flash, EVERYTHING...

3 comments

Next Page »

Bad Behavior has blocked 399 access attempts in the last 7 days.