Key

This line was added.

This line was removed.

Formatting was changed.

Comment:
Migration of unmigrated content due to installation of a new plugin

Motivation

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.

The Relational and 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.

Installing the Database Driver

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 /pentaho-preconfiguredinstall/server/default/lib folder.

Configuring the JNDI Name

Info

title

Configuration Property Names for the Example

For the example, I will choose myJNDIName for my JNDI name, myDatebaseName for my database name, username for the username, and password for the password.

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, my-datasource-name-ds.xml.

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 3306.

Code Block

xml

xml

<?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:

Locate the web.xml file in <pci-home>\jboss\server\default\deploy\pentaho.war\WEB-INF.

Inside the <webapp></webapp> tags, after the last </resource-ref> tag, add the following: NOTE that the <res-ref-name> value should match the JNDI name used in the report definition above, preceded by "jdbc/".

Locate the jboss-web.xml file in <pci-home>\jboss\server\default\deploy\pentaho.war\WEB-INF.

Inside the <jboss-web></jboss-web> tags, after the last </resource-ref> tag, add the following: NOTE that the <res-ref-name> value and the <jndi-name> value should include the JNDI name used in the report definition above.

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.