ColdFusion 11 - MySQL no Suitable Driver

For reasons too complicated to get into, ColdFusion 11 no longer ships with a JDBC driver for MySQL. This is a change over previous versions of ColdFusion. Largely, this is because of a license issue relating to redistributing the Jar file.

How to fix it

The fix is easy:

  1. download the JDBC driver JDBC Driver for MySQL (Connector/J) here: http://dev.mysql.com/downloads/connector/j/.
  2. in the Platform select box, choose platform independent
  3. next, choose the tar or zip version appropriate for your platform. If you don't know which to pick, choose the zip version.
  4. next, on the screen titled "Begin Your Download - mysql-connector-java-5.1.35.zip", scroll to the bottom and choose the small link "No thanks, just start my download."
  5. finally, once the download completes, extract "mysql-connector-java-5.1.35-bin.jar" and put it in the lib directory of your CF install. For me it is located at: C:\ColdFusion11\cfusion\lib (your platform and coldfusion edition impacts the path for you.
  6. restart ColdFusion and validate your datasource in the ColdFusion Administrator.

That's all there is too it!

How to get Oracle 8i to Start on Windows XP

Oracle Error - Oracle Not Available

I'm working on a client project that uses an Oracle 8i database. We'll eventually convert this database to another platform at some point, but for now, we need to make some much needed changes to the existing platform.

Oracle 8i doesn't seem to run on modern Windows Operating Systems so I installed it on Windows XP. This worked fine until I restarted the machine. Upon restart, the once functioning database service would not open. Connecting to the database gave the error "Oracle not available".

It turns out, this is a common issue and after researching and exploring various options, I finally got the database to start up with a series of steps.

Here's what to do:

Since this process involves starting services in a particular order, we need to change the 5 Oracle services below to start up manually: (Administrative Tools > Services )

  1. OracleOraHome81TNSListener
  2. OracleOraHome81DataGatherer
  3. OracleOraHome81ClientCache
  4. OracleOraHome81Agent
  5. OracleWebAssistant0

While you are in there, change the name of your particular database service "OracleServiceWhateverYourServiceNameIs" to Manual also.

After a reboot, start all 5 services in the order listed above. Once all services are up and running, start your database service: "OracleServiceWhateverYourServiceNameIs"

It'll probably complain with an error afterwards, but that's ok.

Go to Task Manager and kill the ORACLE.exe process running and restart the service for your database instance: "OracleServiceWhateverYourServiceNameIs".

Try to connect to the database. Sometimes the service will be up and ready for service after these steps. If it is not, perform the following steps:

  1. Open the Database Configuration Assistant ( start>Programs>Oracle-oraHome8i>database administration> database configuration assistant )
  2. Choose "Change Database Configuration"
  3. After pressing Next, choose the instance you want to connect to.
  4. Press next 2 more times and the database will be ready for service then

At this point, you should be able to connect to your database with SQLPlus, or any other preconfigured connection. I hope this works as well for you as it worked for me.

How to solve error: [Oracle JDBC Driver]Transliteration failed, reason: invalid UTF8 data

I got a strange error "[Oracle JDBC Driver]Transliteration failed, reason: invalid UTF8 data" while working on a client system. I spent a reasonable amount of time trying to work out what caused this.

The Oracle database was a restore of an Oracle 8.1.6 system onto the new Oracle XE 11.2. During the import, the character sets changed.

  • export client uses WE8ISO8859P1 character set (possible charset conversion)
  • export server uses WE8ISO8859P1 NCHAR character set (possible ncharset conversion)
  • import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
  • import server uses AL32UTF8 character set (possible charset conversion)

So, I'm guessing since the new database did a conversion of NCHARSET from WE8ISO8859P1 to AL16UTF16, the size of the characters threw off something. Thus, there were problems and none of the queries on certain tables worked.

The Solution

The DataDirect Oracle Driver that ships with ColdFusion 9 has an error in it. It appears the error is fixed and if you have an agreement with the provider, you can download an update. However, I don't have an agreement so I downloaded fresh Oracle JDBC Drivers to fix the problem. Here's what I did:
  • Download the drivers here: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
  • I used the ojdbc6.jar one.
  • Copy the ojdbc6.jar file to /JRun4/lib (or, if you wanna be fancy, put it somewhere else and update the class path in the jvm.config pertaining to the instance you want to update)
  • Restart ColdFusion
  • Enter the following in the JDBC URL field: jdbc:oracle:thin:username/password@IP.Address.Of.Database.Server:PortOfDatabaseServer:OracleSID
  • Enter the following in the Driver Class field: oracle.jdbc.driver.OracleDriver
  • Add the user name and password in the appropriate boxes
  • Save the datasource. It should verify if you did everything correctly.

If you got an error, remember these things:

  • Usernames, passwords and seemingly the Oracle SID are case sensitive
  • The JDBC Url Field is particular and must be exactly right.
  • The default port for Oracle is 1521

How to resolve svn: Error setting property 'log':

I was trying to check in some changes on the Model-Glue framework and kept getting this error:

view plain print about
1update D:/webroot/ModelGlueTrunk/ModelGlue/gesture -r HEAD --force
2 At revision 184.
3commit -m "Removed potential recursion in this functionality..." D:/webroot/ModelGlueTrunk/ModelGlue/gesture/helper/HelperInjector.cfc D:/webroot/ModelGlueTrunk/ModelGlue/gesture/helper/IncludeHelperShell.cfc
4 Failed to execute WebDAV PROPPATCH
5svn: Commit failed (details follow):
6svn: At least one property change failed; repository is unchanged
7RA layer request failed
8svn: Error setting property 'log':
9Could not execute PROPPATCH.

I updated from SVN, thinking it to be a synchronization error, but I still got the same error.

I used the 'cleanup' or SVN:clean functionality to maybe get the .svn files and such back in to the right condition, but that didn't help either.

The original SVN Comment I used was:

view plain print about
1Removed potential recursion in this functionality
2Also removed useless cfdump when a helper is attempted to be included but doesn't have a cfc or cfm extension

Can you spot the issue? I can't either. What fixed the error:

view plain print about
1Failed to execute WebDAV PROPPATCH
2svn: Commit failed (details follow):
3svn: At least one property change failed; repository is unchanged
4RA layer request failed
5svn: Error setting property 'log':
6Could not execute PROPPATCH.

Was changing the multi-line comment to a single line comment. Once the comment was a single line, there was no issue checking it in. I'm not sure what I learned here, but I hope SVN doesn't REALLY have a problem with multi-line comments, after all, we need those to keep details on what changed!

ColdFusion 7 error 500 Null with Custom Tags

I spent a couple hours diagnosing a 500 Null error. There was little information to go on and 500 Null errors are hard to figure out in general. Let's hope someone is helped by this.

The error resulted on a Linux Machine using CF7.02 with no updaters. The code in question was a set of nested custom tags all linked together using cfassociate. I dug through the code looking for any such potential null reference evaluations and chopped out large blocks of code at a time to try get the error to go away. If I took out enough CFML code, the error went away. It really didn't matter at all WHICH code I took out, just that I took out some mysterious amount.

The total lines of code in the custom tagset was less than 500 with no loops or anything that would jack up the lines of code when evaluated so this REALLY threw me for a loop.

Eventually, I updated to the latest updator for CF7 and the error went away. Strangely, there was no mention in the list of updater fixes, but trust me, the error went away. If you are having a similar problem, use ColdFusion MX 7.02 Cumulative Hot Fix 3 or later.

If you similar stuff going on in your applications, there is a good chance the ColdFusion MX 7.02 Cumulative Hot Fix 3 will sort it out for you.

Fix for Filezilla Failing to Retrieve Directory Listing

I use Filezilla FTP client to manage files on many servers. I had a specific Filezilla client that refused to retrieve a directory listing. Other computers could connect to the same server just fine. Thusly I knew it was a client configuration problem.

I ended up with messages like this:

Response:	200 PORT command successful. Consider using PASV.
Command:	LIST
Error:	Connection timed out
Error:	Failed to retrieve directory listing

I ran the Filezilla configuration wizard to diagnose the problem. The configuration wizard utility ran for a while reporting success until the very end. After timing out, I received the following messages:
Response: 200 PORT command successful
LIST
Response: 150 opening data connection
Response: 503 Failure of data connection.
Server sent invalid reply.
Connection closed

Searching the Internet led to not so helpful posts such as "Please read the Network Configuration guide.". After analyzing the situation, it turns out the solution isn't so obvious. My Client had the default setting of Connection -> FTP -> Active Mode: Get External IP Address From This URL. Which pointed to http://ip.filezilla-project.org/ip.php . This is the source of the problem. If you go to that URL, you will probably get a result of 127.0.0.1. If the Filezilla client needs the external address, and is given 127.0.0.1, then there will be problems indeed!

If you have a similar problem with Filezilla, and the problem persists even when the Windows Firewall is disabled, here is what you need to do:

  • Open Filezilla, go to Edit -> Settings
  • Click on Connection -> FTP: Choose Active
  • Click on Connection -> FTP -> Active Mode: Select "Ask your operating system for the external IP address"
  • Click on Connection -> FTP -> Passive Mode: Choose Fall Back to Active Mode
  • Press OK.

Try connecting to your FTP site once again. Works!

Update: In some cases, and for reasons unknown, Filezilla just won't work. I have found that coreFTP is a nice FTP program that is free Windows software which includes the client FTP features you need. Features like SFTP (SSH), SSL, TLS, IDN, browser integration, site to site transfers, FTP transfer resume, drag and drop support, file viewing & editing, firewall support, custom commands, FTP URL parsing, command line transfers, filters, and much, much more!

If Filezilla still does not work for you after you follow the steps above, then install coreFTP and it will work just fine.

Diagnosing Server Issues

I've had the pleasure of working for many diverse employers and clients. A number of times I've been on a team working to resolve misbehaving software/servers. Part of the job is digging through logs. Another part is load testing specific workflows looking for knots or bottlenecks in the process. Still another part is analyzing each query for suboptimal performance.

There can be many factors that contribute to performance problems. Mike Brunt, Systems Guru at Alagad, has the skills to quickly analyze an application and tune it for proper efficiency. Mike has been posting on the Alagad blog for some time now. I find his posts to be informative and to show an uncommon depth on complex topics. Mike has an ability to simply explain tough subjects.

After reading his latest post, I was struck by how much I do not know. I understand, at a base level, how the JVM allocates memory and that changing the allocated memory can improve application performance. I don't pretend to have the experience needed to diagnose problems and fix them by providing more appropriate settings.

Organizations that rely on critical web applications should pay attention to server performance. While performance problems can be mitigated, to an extent, by increasing the hardware running the system, adding hardware brings additional expenses in the form of hardware, software licenses, maintenance efforts, increased power consumption and less available room in the server racks.

If you run into server performance issues, keep in mind the professionals in our community that specialize in diagnosing and repairing server performance. There is more to server performance than code and database queries!

Flash Security with Off-Root CrossDomain.xml files

Bruce Phillips (You should check out his interesting Flex posts) let me know that my Surfing Stats data didn't load when the swf was located off my http://www.nodans.com domain. I want others to take the code and do with it as they please so I need to make the data available across domains. This is done through the use of a crossdomain.xml file. The file I used looks like this:

view plain print about
1<?xml version="1.0"?>
2<cross-domain-policy>
3 <allow-access-from domain="*" />
4</cross-domain-policy>

This is a very promiscuous file. It allows anyone anywhere to load any data in the containing directory and all subdirectories. Such a promiscuous file also opens up security vectors. In the words of Lucas Adamski on DevNet:

As an example, a user is logged in to an e-commerce site that uses cookies for authentication. On the site is a user account settings page where you can see information such as your mailing address and other personally identifiable information. If this site has an overly permissive cross-domain policy file like *, a SWF file that is hosted on another domain could silently load the account settings data and send it elsewhere. This is because the browser appends the cookies for the e-commerce site to the request from Flash Player.

By default, the SWF looks for the crossdomain.xml file in the root of the website but with a little code, you can put it anywhere you please. I used this command to tell the SWF where to find the crossdomain.xml file:

view plain print about
1Security.loadPolicyFile("http://www.nodans.com/custom/surfingstats/crossdomain.xml");

Now, only the directory containing SurfingStats is enabled, reducing the surface area of attack. If you want to read more on the security issues with crossdomain.xml files, check out these links:
Poking new holes with Flash Crossdomain Policy Files
Cross-domain policy file usage recommendations for Flash Player
The Dangers of Cross-Domain Ajax with Flash

XP Drivers for Toshiba A215 - S7428

Recently I removed Windows Vista and installed Windows XP on the Toshiba A215-S7428. The Windows XP installation is complete and functioning properly. Due to the driver incompatibilities, this process was much more annoying than I thought it ever could be.

To get this to work, you have to pretty much forget the Toshiba site. It is mostly unhelpful and will send you over the edge. Instead, one must dig down deep into the operating system. One must manually edit driver inf files. One must deal with trying to find a driver for "Unknown System Device".

Fortunately, some unnamed kind soul has done all the hard work for you. I have been asked by unnamed kind soul to say the following:

[More]

Toshiba Satellite A215-S7428 on Windows XP

I recently purchased a Toshiba Satellite A215-S7428. This well-equipped notebook computer comes with Windows Vista Home Premium. I planned to remove Vista Home Premium and replace it with the venerable and less annoying Windows XP. Let this post serve as a warning to others with similar ideas.

Removing Vista was easy enough. Installing Windows XP was easy enough. Finding and installing drivers has been the bane of my existence.

Update: This has been solved. See: XP Drivers for Toshiba A215 - S7428

Predictably, the Toshiba site was no help. I understand they shipped the computer with Vista Home Premium, and likely feel their support obligations only extend to OEM configurations. However, I lost confidence in Toshiba when I read the following on their Detailed Specs for the Toshiba Satellite A215-S7428: "This product specification is variable and subject to change prior to product launch."

If anyone sees Toshiba, please remind them the product Toshiba Satellite A215-S7428 has launched.

A few of the problems I am currently working through:

Realtek allegedly provided the WLAN component. The driver listed at The Realtek WLAN RTL8187B Support Section is not recognized by Windows XP as a valid driver. RTL8187B is listed by the Windows XP device Manager.

The Display Driver listed by the Detailed Specs for the Toshiba Satellite A215-S7428 is ATI Radeon X1200M. This is not even an option at the ATI driver download site. I tried the Radeon X1200 driver (in the Windows XP > Professional/Home > Integrated/Motherboard > Radeon X1200 but the install aborted when it found no compatible hardware. I guess the 'M' in ATI Radeon X1200M makes a HUGE difference.

As a consolation prize, there is no driver listed for the ATI Radeon X1200M in the Windows Vista section either.

Network and Display adapters are KEY. I haven't even tried to figure out what Base System Device is, or PCI Device....

Final Thoughts

I've swapped OS versions in the past and do not recall these types of issues. If I am overlooking something, please point it out to me. Meanwhile, I issue a word of caution for those who plan to purchase the Toshiba Satellite A215-S7428.

While this notebook comes well equipped on the hardware side, it is severely lacking for those who wish to swap Operating Systems. Think twice if you choose to go this route. There are plenty of computers that will still ship with Windows XP. Choose one of those.

Update: In case you missed the inline announcement, this has been solved. See: XP Drivers for Toshiba A215 - S7428