From a8bf6dadfea7aec848b5c6fb09781eed92f54933 Mon Sep 17 00:00:00 2001 From: Patrick Cheng Date: Wed, 22 Feb 2012 00:23:05 -0800 Subject: [PATCH] better support for JNDI URLs --- lib/dm-core/adapters.rb | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/dm-core/adapters.rb b/lib/dm-core/adapters.rb index ad4e29be8..9cd0295a0 100644 --- a/lib/dm-core/adapters.rb +++ b/lib/dm-core/adapters.rb @@ -10,7 +10,36 @@ module Adapters # @api private def self.new(repository_name, options) options = normalize_options(options) - adapter_class(options.fetch(:adapter)).new(repository_name, options) + + case options.fetch(:adapter) + when 'java' + # discover the real adapter + jndi_uri = "#{options[:scheme]}:#{options[:path]}" + context = javax.naming.InitialContext.new + ds= context.lookup(jndi_uri) + conn = ds.getConnection + begin + metadata = conn.getMetaData + driver_name = metadata.getDriverName + + driver = case driver_name + when /mysql/i then 'mysql' + when /oracle/i then 'oracle' + when /postgres/i then 'postgres' + when /sqlite/i then 'sqlite' + when /sqlserver|tds|Microsoft SQL/i then 'sqlserver' + else + nil # not supported + end # case + options[:adapter] = driver + ensure + conn.close + end + else + driver = options.fetch(:adapter) + end # case + + adapter_class(driver).new(repository_name, options) end # The path used to require the in memory adapter