Sha256: 3418b64f9df19871a3c10cf5c218a1c11e97ff84cec4a74edf1476771d70b5a5

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

module KVM
  module Db
    class JdbcAdapter
      DB_DRIVERS = {
        'oracle' => 'oracle.jdbc.driver.OracleDriver',
        'mysql' => 'com.mysql.jdbc.Driver'
      }
      
      def initialize(db_config)
        ensure_jruby
        @db_config = db_config
        @driver_jar = db_config.jar
        load_driver
      end
      
      def execute_update(sqls)
        for sql in sqls
          with_statement do |stmt|
            next unless sql and sql.length > 0
            KVM::LOG.info("Executing statement: " + sql)
            stmt.executeUpdate(sql)
          end
        end
      end
      
      protected
      
      def with_statement
        with_connection do |con|
          stmt = con.createStatement
          begin
            yield stmt
          ensure
            stmt.close
          end
        end
      end
      
      def with_connection
        con = jdbc_connect
        begin
          yield con
        ensure
          con.close
        end
      end
      
      def jdbc_connect
        # load the jdbc driver
        Java::JavaClass.for_name(DB_DRIVERS[@db_config.db_type])
        props = java.util.Properties.new
        props.setProperty("user", @db_config.username)
        props.setProperty("password", @db_config.password)
        # special case to automatically log in as sysdba when using 'sys' username
        props.setProperty("internal_logon", "sysdba") if @db_config.db_type == 'oracle' and @db_config.username == 'sys'
        java.sql.DriverManager.getConnection(@db_config.url, props)
      end

      def ensure_jruby
        raise "This command must be run under JRuby" unless defined? JRUBY_VERSION
      end
      
      def load_driver
        raise "Please specify the driver jar in the 'jar' property" unless @driver_jar
        # jrubiness follows...
        require 'java'
        require @driver_jar
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kvm-0.0.1.pre lib/kvm/db/jdbc_adapter.rb