Sybase JDBC Craziness
Say you're working on an enterprise class system. Developers work on Windows and Linux. Servers run Linux. Not so unusual.
Now enter Sybase SQL Anywhere. Aka Sybase ASA or iAnywhere.
First off there are 2 different JDBC drivers. JConnect (jconn3) and the iAnywhere JDBC driver (jodbc). It turns out that only the iAnwhere driver actually works with the high availability option (although not documented).
Also it turns out that the iAnywhere driver is really an ODBC bridge and you have to specify another driver in the JDBC URL.
While a little confusing at first due to the lack of documentation eventually you can dig up an example.
jdbc:ianywhere:driver=SQL Anywhere
10;dbn=mydatabase;eng=myserver;
Everything works and you move on with life.
Except that eventually you want to deploy your new code to the server. BAM nothing works. All sorts of errors about no suitable driver found.
After thrashing around for a few days you discover that the JDBC URL must be different on Linux! (this is the only page on the Internet that specifies this).
jdbc:ianywhere:driver=libdbodbc10.so;dbn=mydatabase;eng=myserver;
Of course your application now works on Linux, but not on Windows.
Now if I were writing my own code that needed to talk to the database there wouldn't be much problem as I can use one of several techniques for figuring out which driver I should be using.
However, this URL used to configure some enterprise reporting tool which uses that same URL whether doing local report development or running from the server.
So now I have 3 options.
- Install the reporting server on every developers workstation.
- Stand up a Windows version of the reporting server.
- Create ODBC DSNs on all affected systems.
While option #1 is enticing (I like developers to have a local copy of all dependencies if at all feasible). Feasibility plays into the picture here because of license costs.
Option #2 is certainly doable, but I am not a big fan of adding the overhead of administering another server and keeping it in sync with all the others.
Options #3 is simple and works well. However, DSNs represent another thing that needs to be set up on every developer and qa system. This also breaks my rule of being able to check out the source tree and go, even on a new computer (for reasons of continuous integration and easy new team member set up).
Ultimately we will go with #3 because it is low cost in dollars, and low cost in time (we'll write an Ant target to do the DSN setup).
Now wasn't that easy? It only took 3 days to work through in real time.