A common request I’ve heard is for guidance around capacity planning for LCDS installations. We’ve gone ahead and created a document for planning with LCDS 2.6. You can view it here and learn a little more over on Damon’s blog.
The Developing Rich Internet Clients With Macromedia Flex chapter on my favorite subject, data binding, is now available as a free download!
Brian Deitte on the Flex team wrote up a quick set of classes that can be used to compress your network traffic for all 3 data services (RemoteObject using AMF, HTTPService, and WebService). Dan Schaffer on the QA team then did a number of performance tests to see what kind of improvements we could get. I’ve been given permission to re-post his results here. This is strictly for experimentation, it is not officially supported in any way.
You can download the source (includes a README for setup which you should read since it has more info than Dan’s report) here. Dan’s report follows:
I’ve uploaded the 1.5 versions of my data management examples, the same ones that I’m showing in my MAX presentation. Grab ‘em here and give ‘em a whirl. Please check out the README first to make sure you get it installed correctly.
Check out new iteration::two member Daniel Harfleet’s post on dynamic text filtering. A really nice example.
TheServerSide has posted a sample chapter from Effective Enterprise Java about state and data management within your J2EE application. While the book focuses on J2EE a lot of the concepts discussed apply to general application development. You’ll also get a preview of some of the things I plan on talking about at MAX in a few weeks. The first section of the chapter talks about saving state in the HTTPSession and some of the limitations; it’s practically an advertisement for some of the benefits of RIAs It also discusses data loading techniques coming from a relational database. You’ll recognize some of the issues from the large data discussions we’ve had.
Hans asked a while back if I’d discuss stateful vs. stateless classes for the RemoteObject tag. I don’t think I have anything definitive or official to say, but I’ll go through my own thought process as to how I decide what kind of class I’m going to use. First, the default is stateless, so I try to err on using a stateless class unless something compelling comes along to make the class stateful. With that in mind, some reasons to consider stateful classes (not in any order).
I’ve been answering some questions for folks internally and externally about validation and thought I’d try to post it here for anyone who’s interested. This is a combination of personal opinion as to how validation can work as well as notes on how it does work now…
I’ve posted a new zip file for all of the data management examples. You are no longer required to have a database to run them. This should make installing and testing even easier. You can download the new zip file here.
All I did was create a simple (non-robust) parser for the CSV file that I was using to import the data into the database. I wrote a new version of my DAO and had the CensusService use that instead. The database DAO is still in the source and you can see the commented out calls to it in the CensusService. I admit, I was too lazy to create an interface/factory for the DAO, etc. so you’ll just have to survive with my quick edits. The only change I made to the MXML was to set the RemoteObject for CensusService to type=stateful-class so that access was more efficient. The logic has not changed at all.
Hope you find this useful!
Now that we have discussed paging and sorting let’s talk about getting the experience a little better for your user. Our first step is to add to the paging solution so that the DataProvider looks ahead when the user is approaching the end of a page. After that we’ll improve the performance of the DataGrid by turning off the “live scrolling” so that the DataGrid doesn’t try to update as the user is navigating. Finally we’ll build on that DataGrid to provide context information to the user so they can navigate more accurately. The examples can be found here and are a superset of what we did in articles 1 and 2.