Class 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 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