Class DataSourceResourceLoader

java.lang.Object
org.apache.velocity.runtime.resource.loader.ResourceLoader
org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader

public class DataSourceResourceLoader extends ResourceLoader

This is a simple template file loader that loads templates from a DataSource instead of plain files.

It can be configured with a datasource name, a table name, id column (name), content column (the template body) and a datetime column (for last modification info).


Example configuration snippet for velocity.properties:



 resource.loaders = file, ds

 resource.loader.ds.description = Velocity DataSource Resource Loader 
resource.loader.ds.class = org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader
resource.loader.ds.resource.datasource_url = java:comp/env/jdbc/Velocity
resource.loader.ds.resource.table = tb_velocity_template
resource.loader.ds.resource.key_column = id_template
resource.loader.ds.resource.template_column = template_definition
resource.loader.ds.resource.timestamp_column = template_timestamp
resource.loader.ds.cache = false
resource.loader.ds.modification_check_interval = 60
resource.loader.ds.statements_pool_max_size = 50

Optionally, the developer can instantiate the DataSourceResourceLoader and set the DataSource via code in a manner similar to the following:



 DataSourceResourceLoader ds = new DataSourceResourceLoader();
 ds.setDataSource(DATASOURCE);
 Velocity.setProperty("resource.loader.ds.instance",ds);
 

The property resource.loader.ds.class should be left out, otherwise all the other properties in velocity.properties would remain the same.


Example WEB-INF/web.xml:



  <resource-ref>
   <description>Velocity template DataSource</description>
   <res-ref-name>jdbc/Velocity</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
  </resource-ref>
 

and Tomcat 4 server.xml file:

  [...]
  <Context path="/exampleVelocity" docBase="exampleVelocity" debug="0">
  [...]
   <ResourceParams name="jdbc/Velocity">
    <parameter>
      <name>driverClassName</name>
      <value>org.hsql.jdbcDriver</value>
    </parameter>
    <parameter>
     <name>driverName</name>
     <value>jdbc:HypersonicSQL:database</value>
    </parameter>
    <parameter>
     <name>user</name>
     <value>database_username</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>database_password</value>
    </parameter>
   </ResourceParams>
  [...]
  </Context>
  [...]
 

Example sql script:


  CREATE TABLE tb_velocity_template (
    id_template varchar (40) NOT NULL ,
    template_definition text (16) NOT NULL ,
    template_timestamp datetime NOT NULL
  );
 

Prior to Velocity 2.4, this class should not be considered thread-safe.

Since Velocity 2.4, the handling of JDBC connections and prepared statements is delegated to the DatabaseObjectsFactory instance. The default class for this database objects factory is DefaultDatabaseObjectsFactory, which obtains a new connection from the data source and prepares statements at each query. You can configure this resource loader to use the

invalid reference
org.apache.velocity.runtime.resource.loader.CachingDatabaseObjectsFactory
which will keep a single connection and tries to reuse prepared statements. statements

Since:
1.5
Version:
$Id$
Author:
Will Glass-Husain, Matt Raible, David Kinnvall, Paulo Gaspar, Sylwester Lachiewicz, Henning P. Schmiedehausen