AabinGunz
AabinGunz

Reputation: 12347

How to import files while loading a groovy class?

I am loading a class and doing some sql select statements, it seems that import groovy.sql.Sql needs to be imported. How can I load some library while loading a class?

My code (works fine if I remove Sql operations)

def fClass = new GroovyClassLoader().parseClass( new File( 'plugin/Pi.groovy' ) )
result=fClass.newInstance().buildTags( params, i9piparams, "userRoleCount")

pi.groovy

public class Pi{
    def result

    private def getDbUrl(dbdriver,dbhost,dbport,dbname)
    {
        return "$dbdriver:@$dbhost:$dbport:$dbname"
    }

    public def buildTags(Map<String,String> params,Map<String,String> i9piparams,def i9piType)
    {

        println params
        println i9piparams

        /*some Sql operation*/
        Driver="oracle.jdbc.driver.OracleDriver"
            dbdriver="jdbc:oracle:thin"
        def url=getDbUrl(dbdriver,params.tns,i9piparams.dbport,i9piparams.dbname)           

            def sql = Sql.newInstance(url,params.u,params.x,Driver)

            sql.eachRow("select name, value from v\$parameter where name = 'open_cursors'"){ row ->
                result.name=row.name
                result.value=row.value
            }

    }
}

Output

[pd:admin, u:zx5531d, tns:foner, dh:abds, dn:D35531, dp:11531, un:admin, x:cx15531]
[:, dbname:orcl, dbport:1521, dbtype:oracle]
Exception in thread "main" groovy.lang.GroovyRuntimeException: Could not find matching constructor for: groovy.sql.Sql(org.codehaus.groovy.runtime.GStringImpl, groovy.util.slurpersupport.Attributes, java.lang.String, java.lang.String)
.
.
.

Upvotes: 1

Views: 1031

Answers (1)

tim_yates
tim_yates

Reputation: 171054

Can you try changing your line:

def sql = Sql.newInstance(url,params.u,params.x,Driver)

to

def sql = Sql.newInstance( url, 'zx5531d', params.x, Driver )

What I suspect is that you need to call text() on the attributes when you read them from the XML, so that you get a String rather than a groovy.util.slurpersupport.Attributes class.

Also, why has Driver got a capital initial letter?

And (not sure what parameter is), but you probably want to change:

"select name, value from v\$parameter where name = 'open_cursors'"

to

"select name, value from v\${Sql.expand(parameter)} where name = 'open_cursors'"

Upvotes: 2

Related Questions