Occasionally when developing an action sequence to extend the Pentaho BI platform, the action sequence needs access to information in a relational database. The
Relational action or
SQL Command action can be added to the action sequence to get access to this information.
SQL Command actions are configured to reference a specific database using the database's JNDI name. When running the Pentaho BI Platform in the JBoss Application server, there are several steps required to successfully configure a JNDI name for the datasource. In the example, I'll use values appropriate for a MySQL database, and I'll be using the Pentaho Preconfigured Install to verify that the datasource was configured properly.
You will need to learn how to install and work with the Pentaho preconfigured install in order to test your datasource configuration.
The first step is to get a driver for your database and drop the driver file into
/pentaho-preconfiguredinstall/server/default/lib. You can get the MySQL driver from the MySQL driver download page. Extract the driver (mysql-connector-java-5.0.4/mysql-connector-java-5.0.4-bin.jar) from the zip file and place it in the
For the example, I will choose
After installing the driver, you'll need to configure the JBoss server with a datasource and a JNDI name to reference the datasource. This is done by creating a datasource definition file in
/pentaho-preconfiguredinstall/server/default/deploy. The datasource definition file is an XML file whose name consists of an arbitrary name followed by "
-ds.xml", for instance,
Below is an example of a datasource definition file. The datasource is referenced by the JNDI name
myJNDIName, and is configured to connect to a database named
myDatabaseName which is hosted on a MySQL RDBMS. The RDBMS is hosted on a machine called
localhost, and the RDBMS is listening for connections on port
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <!-- JNDI name of the datasource, it is prefixed with java:/ --> <jndi-name>myJNDIName</jndi-name> <connection-url>jdbc:mysql://localhost:3306/myDatabaseName</connection-url> <driver-class>org.gjt.mm.mysql.Driver</driver-class> <user-name>username</user-name> <password>password</password> <!-- optional params follow --> <!-- sql to call when connection is created --> <new-connection-sql>select * from myTable</new-connection-sql> <!-- sql to call on an existing pooled connection when it is obtained from pool --> <check-valid-connection-sql>select * from myTable</check-valid-connection-sql> <!-- minimum connections in a pool. Pools are lazily constructed on first use --> <min-pool-size>5</min-pool-size> <!-- maximum connections in a pool. --> <max-pool-size>20</max-pool-size> <!-- Time to wait to check if connection is idle. Connection destroyed somewhere between 1x and 2x this timeout after last use --> <idle-timeout-minutes>0</idle-timeout-minutes> <!-- Whether to check all statements are closed when the connection is returned to the pool, this is a debugging feature that should be turned off in production --> <track-statements>true</track-statements> </local-tx-datasource> </datasources>
Bellow is the same BD now on a PostgreSQL server localhost, port 5432:
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <!-- JNDI name of the datasource, it is prefixed with java:/ --> <jndi-name>myJNDIName</jndi-name> <connection-url>jdbc:postgresql://localhost:5432/myDatabaseName</connection-url> <driver-class>org.postgresql.Driver</driver-class> <user-name>username</user-name> <password>password</password> </local-tx-datasource> </datasources>
TODO: create sample datasource definition files for other RDBMSs.
Almost there! Now, modify the pentaho web application configuration files to include our connection info.
<resource-ref> <description>mysql_db</description> <res-ref-name>jdbc/mysql_db</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
<resource-ref> <res-ref-name>jdbc/mysql_db</res-ref-name> <res-type>javax.sql.DataSource</res-type> <jndi-name>java:/mysql_db</jndi-name> </resource-ref>
Please note you have to use the proper configuration based on your database supplier. Example above has used MySQL, but if you were using PostgreSQL for instance you would have to have it changed accordingly.
The above directions were missing from this article, but where present in many others, like in http://wiki.pentaho.com/display/COM/Designing+Reports+With+MySQL+and+JNDI, from where it was copied from.
That is it! You now have to restart the Pentaho preconfigured install.
To test the datasource configuration, you'll need to have the Pentaho preconfigured install setup and running.
In order to create the Action Sequence to test your datasource configuration, you may like to use the Pentaho Design Studio. You can get the Design Studio from SourceForge: pentaho-design-studio_184.108.40.2061-GA.zip. The Design Studio is implemented as an Eclipse plugin.
Managing JBoss Datasources
Using Multiple Databases with JBoss
Nicholas Goodman on Business Intelligence