Outlook for my professional development

Since I began supporting ColdFusion customers for Allaire many years ago I've taken a wide range of computer and web development courses in local universites and vendors, as well as many internal training classes on Macromedia products. Except for a few vendor certifications though, I have no advanced degree or similar milestone to demonstrate my aptitude and achievements in computer or web technology.

I'd like to be able point a tangible and definitive milestone to demonstrate my technical level to others, as well as to satisfy myself when reflecting on the subject. To address this need, I've committed to a 6 month Master's Certificate in Java and J2EE from Boston University. I think a Certifcate from an accredited university carries much more weight than most vendor "certifcates", so much so that I wish the naming convention was different because you can't compare a 60 minute multiple choice test with a 6 month program. At any rate, the BU Master of Java & J2EE Certificate includes the following sequence of courses which could be broken down into two sub-areas:


Datasource Timeouts and Support for CFQUERY Timeout Attribute

When considering Timeout settings and sources of problematic bottlenecks in ColdFusion applications, a widely held misconception is that all active database connections do not obey timeouts. Discussions surrounding slowness or unresponsiveness in ColdFusion applications often boil down to isolating unusual database activity as the culprit. The explanation provided is often that while the general Timeout in the ColdFusion Administrator, as well as the page level CFSETTING timeout attribute, will be enforced for all page requests except those actively waiting on a response from the database server after a SQL statement has been sent. While this is true, its sometines overlooked that the CFQUERY tag itself has a timeout attribute that is worth considering in some cases. In fact, this particular timeout is something that I've often forgotten, too.

One reason for the confusion over the CFQUERY tag timeout is that not all drivers support it. Of the databases drivers that ship with ColdFusion MX, only the Oracle and SQL Server drivers will enforce the CFQUERY attribute for timeout if it is supplied.

From the ColdFusion documentation for CFQUERY, the timeout attribute is described as:

CFQUERY timeout attribute

Maximum number of seconds that each action of a query is permitted to execute before returning an error. The cumulative time may exceed this value.

For JDBC statements, ColdFusion sets this attribute. For other drivers, check driver documentation.


Snowfall at Concord Center

View this photo gallery. Yesterday's snowstorm on December 9th lasted over twelve hours, blanketing Concord, MA in 15-18 inches of light, powdery snow. This morning I was up before sunrise to photograph the town before the traffic and christmas shoppers would swarm to the center.


Below, I've also made some renderings from these images in Adobe Photoshop, so check them out too. They are available for printing up to 20" x 30", so contact me if you're interested.


Red Hat to certify and support web application stacks

Beginning in 2006, Red Hat will begin offering subscription models for web application development stacks, including three levels starting with the basic LAMP stack for $599, as an add-on to Red Hat Enterprise Linux subscriptions. This means that not only will you be able to run a fully supported enterprise class distribution of Linux but that you could also run one of the web application stacks and expect the same level of updates and other support for the software stack from one vendor.

The three stacks range from LAMP (Linux, Apache, MySQL, Perl/PHP) to a Java (LAMP + Tomcat, Ant, Lucene, etc) and Enterprise Java web application stack (Java stack + Red Hat J2EE Application Server).

Read more from Red Hat and this c|net news article.

Renderings of the First Parish of Sudbury


Winter settles in at the First Parish of Sudbury, MA. The sign reads: First West Precinct Meeting House on the Rocky Plain built 1723. This is the Second Meeting House. Built in 1797. Unitarian since 1839.

For this set I used a Sigma 10-22mm ultra wide angle lens on a Canon D20 Digital SLR, with bracketing at 2/3 stop and manual exposure at f8. Selected photos were post processed in Adobe Photoshop using a technique that includes applying a medium degree of Poster Edges which creates a watercolor with pen & ink look as though they were hand drawn.

This photo gallery also available on Flickr.

Got Work? Solve ColdFusion Problems for Fun and Money

For those seeking employment in the Eastern Massachusetts area, there is a job opening for an Escalation Coldfusion Product Support Engineer, described as:

We are looking for a member of the ColdFusion Technical Support team to function as a Tier 3 (escalation) engineer. This is a senior-level technical position and the support delivered in this role is in English only. The product set being supported is associated with internet web applications. Client Server offerings include ColdFusion and JRun. ColdFusion is a HTML Tag based, proprietary server that works with databases and delivers dynamic contact to browser based users. JRun is a J2EE application server that runs applications based on industry standard JSP pages and/or Servlets. Other related technical skills include: Web Services, Java Literacy, dbms and SQL knowledge, LDAP, and general web application development and deployment.

The job posting is on Dice.com through a third party recruiter, although I'm not sure why its not listed on the Macromedia.com website. I was once in this escalation role for a year before I moved to "Gold" Support, and its definitely challenging. Are you up to it?

Please defer salary inquiries for the recruiter.

Request timed out waiting for an available thread to run

The ColdFusion MX error message "Request timed out waiting for an available thread to run" occurs specifically when a thread in the queued request pool times out while still in the queue, before it ever had a chance to make it to the running request pool. This blog entry revisits a topic previously blogged about here.

An example of the Java stack trace for the exception might look like this at the top:

view plain print about
1java.lang.RuntimeException: Request timed out waiting for an available thread to run. You may want to consider increasing the number of active threads in the thread pool.
2    at jrunx.scheduler.ThreadPool$Throttle.enter(ThreadPool.java:116)
3    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:425)
4    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

The helpful hint provided in the exception message suggests increasing the active thread pool size, which would correspond to the Simultaneous Requests setting in the ColdFusion Administrator. While that might be a short term band-aid to the problem, in most cases this will simply delay the onset of the symptoms rather than truely solve the problem.

To back up for a moment, I'll take a look at some of the settings in the JRun server's jrun.xml configuration file, found in the SERVER-INF directory for a given server instance. The threadWaitTimeout setting in jrun.xml controls how long a thread will wait in the queued request pool. The activeHandlerThreads setting is the same as the Simultaneous Requests setting in the CFAdmin, and this setting is the maximum size of the running request pool, or the maximum of how many actual requests could be actively processed at any given moment. The maxHandlerThreads is the maximum total thread limit as a sum of the running request pool size (activeHandlerThreads) plus the maximum allowed queued threads (which can be restated at the maxiumum number of queued threads is equal to maxHandlerThreads - activeHandlerThreads).

If you're getting this error, then the problem is most likely bottleneck requests that are shifting the throughput rate downward so that more threads are added to the queued request pool than can be reasonably processed by the running request pool. It's not necessary that the running request pool is completely occupied with bottleneck threads, but just enough of them to cause a noticeable increase in current number of threads in the queued request pool. This doesn't necessarily mean that the queued request pool has reached its maximum size, but just that the threads in the queued pool weren't getting a chance to run within the threadWaitTimeout period.

To better diagnose the problem, try to find out what's in the running request pool. I recommend taking a series of three thread dumps about 15-30 seconds apart at the time this error is being reported, and then looking for differences between the running threads across the span of the three thread dumps to identify any that might be 'stuck' on something. The running threads are usually identifiable by having a 'jrpp-' to the thread id number and a reference to one of your application templates in the stack such as those with a .cfm or .cfc extension.

Related entries:

Related Blogs:

Controlling the ports used by the webserver configuration utility

The wsconfig utility that installs the webserver connector for ColdFusion MX tries to establish TCP connections to the JRun server on two ports for the installation process, the JNDI port and the RMI port. Here's how to control both.

First it will scan the port range 2900 - 3000 to find out whats listening, then it will begin to connect to each active port discovered in that range starting at 2900. The target port is referred to as the JNDI port that the JRun server listens on. A server's JNDI port is defined in jndi.properties such as with the following setting

Second, upon successful communication with the JRun server on the JNDI port, the JRun server will instruct wsconfig to complete the second half of the communication on the RMI port. By default, this is a high *random* port. So this is where most Linux folks running a firewall go wrong. They allow for the JNDI port but don't know about the high random port for RMI.

This two part process is described in more detail in my blog post Tracing wsconfig with Ethereal Network Analyzer.


Regarding File Permissions on CFML Source Files

Ok, final post for today. This one is also a follow up to a demonstration made by the instructor in my DB Design class that was intended to stress the importance of users setting Read permission on for Other on a common Linux server used by the class. Reposting here for benefit of those not on the internal class forum.


In last night's class Maria demonstrated the importance of having the read bit turned on for Other for your ColdFusion cfm files.

Initially she removed the read bit for Other and then refreshed the browser while expecting to demonstrate an error that she wants to protect you from. Instead the page worked as normal? So what happened?


How ColdFusion Receives and Processes Requests.

Here's another post I made to the internal forum for my class on Database Design where I describe how requests are handled by ColdFusion and how the webserver connector works in general. Reposting here in case anyone finds it useful.


A question was asked in yesterday's class regarding the difference between making requests to the Apache port versus the ColdFusion port.

Effectively, the answer is that there is no difference for the purpose of this class.

ColdFusion MX has a built-in webserver that can be used in lieu of an external, production-quality webserver like Apache, Iplanet, or IIS. The default for this built-in webserver is port 8500, 8501, or 8300 depending on the type of installation and CF version, and that port is configurable.


Previous Entries / More Entries