【问题标题】:Pentaho data source access from Groovy从 Groovy 访问 Pentaho 数据源
【发布时间】:2014-10-30 03:20:42
【问题描述】:

在 Pentaho Report Designer (PRD) 中,我想通过引用在 default.properties 文件中创建的 JNDI 使用 Groovy 脚本(或 EMCAScript 脚本)连接到我的数据源。因此,我将创建一个包含 JNDI 名称的多值列表参数,并根据参数中选择的 JNDI 连接到数据源。

脚本:

import groovy.sql.Sql
import javax.naming.InitialContext
import javax.sql.DataSource

class SqlClient {

    InitialContext context = new InitialContext()
    DataSource dataSource = context.lookup("OLTP") as DataSource
    def sql = new Sql(dataSource)
    sql.execute("SELECT * FROM Person.User_JNDI")
    TypedTableModel model = new TypedTableModel();   
    while(sql.next())  
    model.addRow(new Object [] {rs.getString(1)});    
    c.close();  
    return model;
}

我收到以下错误: 原因:org.apache.bsf.BSFException:Groovy 异常:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败: 表达式:11:意外令牌:sql @ 第 11 行,第 5 列。 sql.execute("SELECT * FROM Person.User_JNDI")

另外,PRD 期望脚本返回一个模型,可能与 TypedtableModel 类有关。

谁能给我一个 Groovy 脚本的例子?

【问题讨论】:

    标签: groovy pentaho


    【解决方案1】:

    假设您已经填写了default.properties,正如它所说的here,您应该能够通过以下方式访问数据源:

    import groovy.sql.Sql
    
    import javax.naming.InitialContext
    import javax.sql.DataSource
    
    class SqlClient {
    
        InitialContext context = new InitialContext()
        DataSource dataSource = context.lookup("SampleData") as DataSource
        def sql = new Sql(dataSource)
        sql.execute '''
           select * from ... '''
        ...
    }
    

    使用Sql 实例。

    【讨论】:

    • 谢谢@mschonaker。我添加了上面添加查询的脚本(选择 1)只是为了检查它是否连接到 JNDI 指定的数据源。但是当我在 Pentaho 报表设计器 (PRD) 中单击确定时,它什么也没做。我在“JDBC 数据源”窗口的“全局脚本”选项卡下选择了 Groovy 脚本。如何检查是否成功连接到指定的JNDI?
    • 谁能告诉我如何在我的 groovy 脚本中使用 jndi 连接到我的数据源?我使用了上面给出的脚本,但是当我点击 OK 按钮时,按钮只是变成蓝色并且什么都没有发生。我的要求是当用户在报告参数列表中选择所需的 JNDI 时更改报告的数据。因此,我将有一个包含 JNDI 名称的参数,并在我的 Groovy 脚本中访问此参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2012-10-03
    • 2014-05-31
    • 1970-01-01
    • 2013-11-02
    • 2010-09-21
    相关资源
    最近更新 更多