2008-07-31

Facebook should use AIR for file uploads

Many people now use Facebook to keep in touch and share information with friends. One of the features used the most I believe is the fact that you can create a photo gallery and upload any number of pictures to it. Thing is, you upload the photos using a Java Applet!

That's probably the only mainstream use of a Java Applet I've ever seen. But sometimes it doesn't work, not even for me, sometimes it just doesn't load on my home PC. Its happened to my brother and to several of my friends as well and they've all come to me for help. Usually it involves re-installing the JRE in order for it to work again as I recall.

So in playing with AIR allot lately, it would seem like a perfect use of the technology. That is what AIR was built for afterall, to allow end-users to interact with their desktops and the web at the same time. In this case the AIR application would allow an user to browse his local pictures and select the ones he wants to include in the photo album (with a preview). Finally he would upload them to his photo album for all of his friends to see. Advantage here is that the download/install process would be easier for end-users (smaller download) and would hopefully be more robust and work 100% of the time.

2008-07-29

Remote deployment on JBoss

Not completely Flex related, but I am thinking of deploying our latest AIR application with an LCDS backend on a JBoss 4.2 server (maybe 5.0). Question is, and I've been searching but can't find the answer so far, does anyone know how to do remote deployments of a WAR/EAR to a JBoss server?

2008-07-26

Flex automated testing tools improving

When Flex first came onto the scene back in 2004, we loved it but something was missing. How do we test our applications? There were no real solutions at the time, but with the release of Flex 2 (in 2006) we were given FlexUnit (similar to JUnit in the Java world) and also QuickTest Pro (QTP) added support for web applications built in Flex. With QTP would record actions and then play them back and set checkpoints along the way. I've used QTP, but it is not as user-friendly as I would want it to be, so I've been looking and waiting to see what other testing applications would pop up.
And recently I've discovered two other solutions, so perhaps you will want to take a look as well.

Selenium
This testing tool has been around for while and is used for testing traditional web applications. But recently an add-on has been created to support the testing of Flex applications as well. You can get the add-on here.

RIATest
This is perhaps my favorite so far. It was built specifically for testing Flex (and AIR) applications, its scripting language is easy to understand and you don't need to compile your application in any special way for it work (unlike QTP). I'm just waiting for the next release before using it on my own applications, cause I'm waiting for certain bugs to be fixed.

So obviously the automated testing tool support for Flex is definitly improving, I've also heard that SilkTest will be supporting Flex in the future as well.

What do you guys use?

2008-07-09

Different MessageBrokerServlet in the same EAR

If you work with LCDS or BlazeDS and are about to configure a second web application inside the same EAR, then you might see an error like this when the application starts up:

javax.servlet.UnavailableException: MessageBroker already defined from MessageBrokerServlet with init parameter messageBrokerId = '__default__'

This is because the declaration of both the MessageBroker servlets in both web.xml files looks like so:

<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<init-param>
<param-name>flex.write.path</param-name>
<param-value>/WEB-INF/flex</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>


The above declaration is the default, and when both servlets are initialized, both are given a default identifier of '__default__'. Thus when a second web application in the EAR is initialized, it fails with the above error. They must have different identifiers and you do this by specifying an additional parameter in the declaration of the servlets in each respective web.xml. The declaration of the identifier should be like so:

<init-param>
<param-name>messageBrokerId</param-name>
<param-value>55</param-value>
</init-param>

So now one of MessageBroker servlet's will have an identifier of '55'. Add the same parameter for the other servlet in the web.xml file of the other web application, with a different identifer and both web applications should operate properly.