Archive for February, 2003

Flash Data Validation Routines

Mike Chambers is collecting ideas for data validation routines in ActionScript. Why should ColdFusion developers care about data validation routines written in ActionScript? Well, the more data validation routines other people write in ActionScript, the less we have to write when integrating Flash into our CF apps.

If you have a minute, cast your vote.

The Business Impact of Rich Internet Applications

So this might be a little off-topic, but I thought this was such a good presentation that I wanted to blog it. And that means a lot coming from me, because I am typically a pretty harsh critic when it comes to presentations. But this one is first-class both in terms of design and content. If you have 15 minutes to spare (and a high-bandwidth connection), you should check it out:

5 New JRun Hot Fixes

Macromedia releases 5 new JRun hot fixes. Details are below:

  • EJB Container deadlock when using container-managed persistence (CMP).

  • Instance pool size settings in jrun-ejb-jar.xml don’t work properly.

  • Provide support for Open SSL 0.9.6c in JRun connector.
  • Multiple EJB defects related to pooling and persistence.
  • Container Managed Relationships (CMR) Iterator does not work properly.

  • Incorrect configuration information written into httpd.conf for the Apache web server.
  • JSP jspInit() method and JSP preloading do not work properly.

  • wsconfig tool does not work with remote iPlanet servers.
  • Cannot logout of web application when using multiple web applications with the same roles.
  • Memory leak in connectors corrected.
  • Apache connector may hang when the proxyService attribute mapCheck=0.
  • request.getServletInfo() returns incorrect value when web.xml mappings are used.

Macromedia’s Valentine’s Day Offer

Macromedia’s Valentine’s Day offer ends Feb 15th. You can get free online training when you upgrade to Flash, Dreamweaver or Fireworks MX. Follow the URL below for details:

Macromedia Launches DevNet Subscriptions

Today Macromedia announced DevNet subscriptions. There is all kinds of information on Macromedia’s site, so I won’t get into details here, but I will say that there are two different levels of subscriptions (DevNet Professional and DevNet Essentials), and that both offer tons of software and tools at significant savings.

Macromedia also launched the new DevNet Center (previously know as DesDev), so you might want to check it out, too. Oh, and Mike Chambers has a good article on the new DevNet service, as well.

Down and Out with a Disk Failure

My machine had been getting slower and slower. Operations were taking longer and longer. I was spending more and more time watching the colorful pinwheel spin while mail was written to files and my browser read and wrote to its cache. Then apps starting freezing in such a way that they couldn’t be killed (either with “Force Quit” or kill -9). Every now and then I would have to power-cycle the machine, then finally, it didn’t come back up.

I’m not sure what happened, but I suspect my disk had become hopelessly fragmented from the amount of mail that I get which was causing the machine to hang during file IO operations. All it took was for me to turn it off one time at the wrong moment to create an “invalid sibling link” for which there is no recovery on OS X except to rebuild. I tried Disk Utility and I tried fsck. In fact, I discovered that Disk Utility is just GUI for fsck. Anyway, neither worked.

Fortunately, I had a second Mac around, and through firewire tricks and network access to the hosed machine, I was able to recover all my data. It took two full days, but I got back up and running. Now I own a 100GB external firewire drive, and I have vowed to never get lazy about backups again.

The lesson I learned here is that although OS X is like Unix, it isn’t Unix, and in particular, it isn’t Linux. At least in terms of the file system. By default, OS X uses HFS plus rather than a Unix file system, and apparently HFS plus has the potential to become very fragmented. I have also learned that Macs were not designed to take the amount of file abuse I tend to dish out as there are no good utilities out there (yet) for disk recovery and maintenance (unless you have classic installed, which I didn’t and still don’t). Fortunately, there are some coming.

I am going to try reinstalling OS X on my old machine, but this time, with a Unix filesystem rather than HFS plus. I have no idea what will happen, but it should be interesting. (Anyone out there tried this yet?) If nothing else, I should a truly case-sensitive Mac. The other solution might be to run OS X server. Presumably it is more robust than the standard edition.

New TechNotes on cfgraph, Verity and Oracle

Indexing PDF files created with Acrobat Distiller 4.x or higher causes ColdFusion MX on Solaris to restart:

Unable to serve Flash content generated by cfgraph via HTTPS:

Oracle 9i Thin Client driver causes CPU to spike:

Shared Variable Scopes and Locking

This is a post I made this morning on cf-talk in response to a thread on locking shared variable scopes. The short answer is that you don’t need to unless you are preventing a race condition. For the long answer, read on:

Just some additional interesting information on shared variable scopes: the reason you do not need to lock them (unless you are attempting to prevent a race condition) is that their underlying Java implementations use java.util.Hashtables. Hashtables are synchronized so that two threads cannot modify the same instance of a Hashtable concurrently. So Tony, you are right that Macromedia engineers did the right thing here, otherwise there would be a lot more cflocking going on. For instance, if they had used a HashMap, all access/modification would have to be locked (to prevent actual exceptions as opposed to just unexpected behavior), which would make for a lot more code with no advantages.

Another thing to note is that synchronization at such a low level is very fast and efficient; faster than using cflocks.

Jeremy Allaire, Macromedia Founder Emeritus

I would like to wish Jeremy Allaire all the best as he moves on to new challenges and new adventures. Jeremy will continue to have a role at Macromedia as Founder Emeritus, which means he will remain active within the community, keep in touch with Macromedia management, and occasionally write and speak on Macromedia’s behalf. I would just like to thank Jeremy for everything he has done for Macromedia, and especially for ColdFusion.

Visit Jeremy’s weblog to see what he was to say about it:

Pet Market Blueprint Application on Mac OS X

In my spare time, I have been trying to get the Pet Market Blueprint app (Flash version) running on CFMX and JRun 4 on my Mac. As it turns out, the Unix version technically works just fine right out of the box — just follow the instructions, and even the datasource will be set up properly since Pointbase is a 100% pure Java implementation. There is one little detail, however, that actually has more to do with JRun configuration than the Pet Market app itself, but boy is it a tricky one.

JRun comes with it’s own version of Flash Remoting which is mapped to flashservices/gateway. It is a Java-only version of Flash remoting, meaning it will not find and delegate to ColdFusion components. Of course, ColdFusion for J2EE servers comes with Flash Remoting as well, so you have to find a way for the two of them to coexist. I found that both of the options below worked, depending on how I had CFMX configured:

  1. If you are using a context root for ColdFusion (like “cfmx” or “cfusion”), edit the shell_init.xml file in the petmarket web directory. You can continue to use the “default” backend (you do not have to use j2ee), but you will need to add your context root before the flashservices/gateway reference in the gatewayURI tag. For instance, if your context root is “cfmx”, your tag should look like this:
    <gatewayURI dir="cfmx/flashservices/gateway" />

    Save the file and everything should run fine. You don’t even have to restart anything.

  2. If you do not use a context path for ColdFusion (more properly stated, if your context root is “” or “/”), you simple need to make sure that the Flash Remoting gateway that came with JRun does not intercept your requests. The easiest way to do this is to go into the JRun administrator (http://localhost:8000) and change the context root of the Flash Remoting Enterprise application to anything other than flashservices (for instance, I changed it to “flash-services”). Then redeploy the Flash Remoing application or restart JRun and you should be good to go.

If you want to give it a try, download the necessary files here: