JRUN Servlet Error: coldfusion.runtime.CfJspPage.bindImportPath
A while back, Jamie Krug helped me set up my local ColdFusion multiserver development environment in which I could run ColdFusion 8 and ColdFusion 9 instances on the same code base. Jamie was a super fantastic help and everything was running perfectly fine until, seemingly out of nowhere, my ColdFusion 9 instance died. ColdFusion 8 was working properly; but, whenever I tried to run code through my ColdFusion 9 instance, I got the following JRUN error:
ROOT CAUSE:
java.lang.NoSuchMethodError: coldfusion.runtime.CfJspPage.bindImportPath
This morning, after weeks of not being able to fix the problem, I finally uninstalled everything (JRUN and ColdFusion) and started again from scratch. After installing JRUN and deploying my ColdFusion 9 and ColdFusion 8 EAR files, things appeared to be on the up-and-up. Once again, I had both servers running successfully in parallel.
That is, until I broke it.... again.
This time, however, I know exactly what I did wrong: I ran the ColdFusion 8.0.1 Updater. I was only intending to target the ColdFusion 8 instance; but, apparently, the updater alters the underlying JRUN installation which, at the time, was the ColdFusion 9 multiserver compatible version. As such, it looks like JRUN is no longer able to work with ColdFusion 9 code.
Oh well, at least I know never to do that again. An hour wasted, but much wisdom gained.
Reader Comments
Bummer! To think of the code you could have been writing instead :) But I'm so glad you identified the cause. I assume you confirmed that you needed the 8.01 update? You can download a current developer edition of CF8, which already has the 8.01 update applied, and create an EAR from that installer. Not cool that it somehow ruins JRun for any other apps running under it :(
@Jamie,
I finally got everything up and running. I messed up the second time when configuring the web service connector (oops) and had to start over (as I didn't know what was going wrong).
Apparently, 3rd time is the charm. Although, on the 3rd time around, for some reason, the dotnet integration stuff did not install even though I had selected it for EAR creation. I did, however, unselected ALL extra installs for the instance manager (standalone version). Perhaps if the core one doesn't have the services, it doesn't install them in the EAR?
Who knows. Those are stand alone projects anyway so I was able to install dotnet integration afterward (though figuring out where the CF8 root was took a lot of trial an error):
C:\JRun4\servers\cf8-main\cfusion.ear\cfusion.war\WEB-INF\cfusion
... Finally got it up and running, even tested dotnet integration.
@Ben, great to hear!
Don't know whether this will help, but my colleague Mike Henke has been exploring having multiple cf flavours running on JRun. His blog may help:
http://www.henke.ws/post.cfm/multiple-coldfusion-version-and-engines-on-adobe-coldfusion-with-jrun
That said you may want to dump JRun entirely and use TomCat or JBoss. They're more recent J2EE engines and are faster than Jrun.
regards,
larry
I forgot to mention that deployment is much easier on Tomcat and JBoss than on JRun. Its much simpler deploying a war archive or an exploded war file than the ear deployment that JRun uses.
Moreover using the Eclipse Webtools or MyEclipse, you have very fine grained control over the servers.
regards,
larry
@Larry,
As much as I love the lightweight servlet containers like Tomcat and Jetty, and also prefer JBoss to JRun, there is still one little trick that only JRun provides (AFAIK). The JRun connector does a slick trick by which it somehow passes along the document root from a fronted Web server (Apache or IIS). This means you need only specify an application's Web root in one place, the virtual host of your Web server.
To the best of my knowledge no other setup allows you to do this. You generally need to configure each virtual host on both the Web server (e.g., Apache) and the Java application server (e.g., JBoss).
In the world of Java Web apps, it's very common to configure a virtual host in your Java app server, and to deploy a full EAR or WAR for each app. But many ColdFusion developers are very accustomed to all that "magic" happening whereby one Java Web application (one ColdFusion EAR/WAR) can power many virtual hosts without duplicating virtual hosts or littering Web roots with WEB-INF folders.
I'm fairly certain that one might be able to, for example, place the ColdFusion 9 jars in a common class path of JBoss and configure the necessary CF descriptor in the global/common Web descriptor file (web.xml) of JBoss, but I've yet to spend the time fighting through it myself. It's fairly well documented on how to do this with Railo and Open BlueDragon. But for ACF, outside of using JRun, you're expected to run one CF application (Web root, virtual host, etc.) per EAR/WAR deployment of ColdFusion.
The options are seemingly endless, and there are lots of pros and cons and potential confusion, but it's powerful stuff!
@Larry,
Thanks - I'll check out Mike's post. I'm very new to this stuff, so it's sort of all greek to me. Although, slowly, after my 3rd install this morning, it's starting to sink in :)
Something else that may help if you go for the jBoss route (its more easier to put multiple different instances on jBoss) is to use exploded War files. Steve Brownlee has an excellent tutorial on running CF on Jboss,
http://www.fusioncube.net/index.php/coldfusion-on-jboss-standalone-primer
regards,
larry