[ 
https://issues.apache.org/jira/browse/GROOVY-7105?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15097978#comment-15097978
 ] 

Jochen Theodorou commented on GROOVY-7105:
------------------------------------------

The problem is that there is a jar, with classes, requiring other classes and 
those classes are not there. In Java this might not be a problem, because there 
the order in which classes are loaded is well known enough to be sure, that 
those missing classes are never requested, unless certain features are used. 
Well... groovy has to do things different. I am perfectly fine with the 
try-catch PR, but it is not the case that Groovy does wrong classloading or 
anything like that here. There are many scenarios in which a construct like 
that can blow up

> Oracle Thin Driver Fails with an Exception in Groovy 2.3.x
> ----------------------------------------------------------
>
>                 Key: GROOVY-7105
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7105
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk, SQL processing
>    Affects Versions: 2.3.0
>            Reporter: Charlie Hubbard
>            Priority: Blocker
>
> Trying to load the Oracle driver in Groovy fails with the following error:
> java.lang.NoClassDefFoundError: oracle/xdb/XMLType
>       at java_sql_Connection$getMetaData.call(Unknown Source)
>       at db_test.printMetaData(db_test.groovy:9)
>       at db_test.printMetaData(db_test.groovy)
>       at db_test$printMetaData$0.callCurrent(Unknown Source)
>       at db_test.run(db_test.groovy:45)
> Caused by: java.lang.ClassNotFoundException: oracle.xdb.XMLType
>       ... 5 more
> This works in Groovy 2.1.x.  This is loading the thin driver which doesn't 
> require extra libraries.  It appears that Groovy loads Oracle's OCI driver 
> which requires these additional jar files and fails.
> {code}
> import groovy.sql.Sql
> import java.sql.ResultSet
> import java.sql.DatabaseMetaData
> void printMetaData( Sql sql, catalog = null, schema = null ) {
>     try {
>         DatabaseMetaData metadata = sql.connection.getMetaData()
>         
>         ResultSet rs = metadata.getCatalogs()
>         while( rs.next() ) {
>            String catalogName = rs.getString("TABLE_CAT")
>            println("${catalogName}")
>         }
>         rs.close()
>         
>         rs = metadata.getSchemas()
>         while( rs.next() ) {
>            String catalogName = rs.getString("TABLE_CAT")
>            String schemaName = rs.getString("TABLE_SCHEM")
>            
>            println("${catalogName}.${schemaName}")
>         }
>         rs.close()
>         
>         def types = [ "TABLE" ]
>         rs = metadata.getTables( catalog, schema, null, types.toArray( new 
> String[types.size()]) )
>         while( rs.next() ) {
>            String catalogName = rs.getString("TABLE_CAT")
>            String schemaName = rs.getString("TABLE_SCHEM")
>            String tableName = rs.getString("TABLE_NAME")
>            println("${catalogName}.${schemaName}.${tableName}")
>         }
>         rs.close()
>     } finally {
>         sql.close()
>     }
> }
> oracle = Sql.newInstance("jdbc:oracle:thin:@//localhost:1521/PDB1", 
> "someUser", "somePassword", "oracle.jdbc.driver.OracleDriver")
> printMetaData( oracle )
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to