¿Qué es classpath para Groovy Console / jdbc driver prblem?

Dicho código de base de datos está bien en el entorno Java (sin el valor enlazado 'c'), pero en la consola Groovy no se puede usar correctamente jdbc, con excepción

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=

La clase de controlador es conocida por el script (se carga sin nulo, etc.) pero probablemente no está registrado en Drivermanager.

código (lo intento con y sinClass.forname() )

import groovy.sql.Sql
import groovy.sql.DataSet

c =   Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')

def db = [url:'jdbc:sqlserver://localhost;databaseName=... ,driver:'com.microsoft.sqlserver.jdbc.SQLServerDriver']
 def sql = Sql.newInstance(db )

EDITAR: lo que ya había verificado:

La consola Groovy recién iniciada no tiene sqljdbc4.jar en classpath.

Excepción naturaljava.lang.ClassNotFoundException en la línea 4Class.forName(), o si la línea 4 comentó y los parámetros db con el nombre del controlador, la excepción en la línea 7Sql.newInstance(db )

Es lógico, no se encuentra la clase de controlador, etc.

1a. si los parámetros db con 3 argumentos (sin controlador), supongo que su excepción legal (y que funciona en otras situaciones) cambia aSQLException: No suitable driver en la línea 7Sql.newInstance(db )

También es lógico, DriverManager no sabe cómo resolver la clavejdbc:sqlserver . Driver no está registrado y DriverManager no tiene conocimiento mágico de lo que implementa la clase.

2. cuando agrego jar al classpath de la consola (Script / Add jar (s) to classpath) las cosas cambian un poco. No másClassNotFoundException y variablec tiene un valor no nulo (clase de controlador) peroSQLException: No suitable driver continúa

Mi comprensión de la filosofía JDBC: el controlador JAR (moderno) utiliza la técnica con el archivoMETA-INF/services/java.sql.Driver ser conocido porDriverManager. Entonces, en la situación correcta, no se requiere el 4to argumento (nombre de clase del controlador) porque se descubre automáticamente. Por favor corrija mi comprensión si me equivoco.

He usado la palabra 'activo' en este sentido ("no activo" significa que la clase existe y está cargada, pero se puede usar como controlador jdbc).

Mi código máximo es:

import groovy.sql.Sql
import groovy.sql.DataSet
import java.sql.DriverManager;
import java.util.ServiceLoader;


c =   Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')
DriverManager.getDrivers()
ServiceLoader.load(java.sql.Driver.class)
def db = [url:'jdbc:sqlserver://localhost;...,driver:'com.microsoft.sqlserver.jdbc.SQLServerDriver']
def sql = Sql.newInstance(db )

pero aúnno suitable driver Excepción

EDIT2: enumero cosas con dicho código (antes de newInstance ()):

StringBuilder sb = new StringBuilder();
        String grVersion = "brak";

        Enumeration<Driver> dri = DriverManager.getDrivers();

        for (Enumeration<Driver> e = dri; e.hasMoreElements();) {
            Driver e1 = e.nextElement();
            sb.append(e1.getClass().getName()).append(' ');
            sb.append(e1.getMajorVersion()).append('.').append(e1.getMinorVersion());
        }


        // get LOADED drivers niesetty

        ServiceLoader<java.sql.Driver> codecSetLoader = ServiceLoader.load(java.sql.Driver.class);
        for (Driver e1 : codecSetLoader) {
            sb.append(e1.getClass().getName()).append('!');
            sb.append(e1.getMajorVersion()).append('.').append(e1.getMinorVersion());
            sb.append("# ");
        }

y obten

com.mysql.jdbc.Driver 5.1com.mysql.fabric.jdbc.FabricMySQLDriver 5.1com.mysql.jdbc.Driver!5.1# com.mysql.fabric.jdbc.FabricMySQLDriver!5.1# com.microsoft.sqlserver.jdbc.SQLServerDriver!4.0#  
Exception thrown

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=....

    at ConsoleScript11.run(ConsoleScript11:32)

Mi código (básico) ejecutado es que el entorno de Tomcat sigue funcionando bien. ¿Qué pasa?

Respuestas a la pregunta(2)

Su respuesta a la pregunta