org.apache.velocity.runtime.resource.loader
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.loader = file, ds

ds.resource.loader.public.name = DataSource
ds.resource.loader.description = Velocity DataSource Resource Loader
ds.resource.loader.class = org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader
ds.resource.loader.resource.datasource = java:comp/env/jdbc/Velocity
ds.resource.loader.resource.table = tb_velocity_template
ds.resource.loader.resource.keycolumn = id_template
ds.resource.loader.resource.templatecolumn = template_definition
ds.resource.loader.resource.timestampcolumn = template_timestamp
ds.resource.loader.cache = false
ds.resource.loader.modificationCheckInterval = 60

Example WEB-INF/web.xml:


Velocity template DataSource
jdbc/Velocity
javax.sql.DataSource
Container



and Tomcat 4 server.xml file:
[...]

[...]


driverClassName
org.hsql.jdbcDriver


driverName
jdbc:HypersonicSQL:database


user
database_username


password
database_password


[...]

[...]

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
)

Version:
$Id: DataSourceResourceLoader.java,v 1.8 2002/02/10 18:46:58 geirm Exp $
Author:
David Kinnvall, Paulo Gaspar, Sylwester Lachiewicz

Field Summary
private  javax.naming.InitialContext ctx
           
private  javax.sql.DataSource dataSource
           
private  java.lang.String dataSourceName
           
private  java.lang.String keyColumn
           
private  java.lang.String tableName
           
private  java.lang.String templateColumn
           
private  java.lang.String timestampColumn
           
 
Fields inherited from class org.apache.velocity.runtime.resource.loader.ResourceLoader
className, isCachingOn, modificationCheckInterval, rsvc
 
Constructor Summary
DataSourceResourceLoader()
           
 
Method Summary
private  void closeDbConnection(java.sql.Connection conn)
          Closes connection to the datasource
 long getLastModified(Resource resource)
          Get the last modified time of the InputStream source that was used to create the template.
 java.io.InputStream getResourceStream(java.lang.String name)
          Get an InputStream so that the Runtime can build a template with it.
 void init(org.apache.commons.collections.ExtendedProperties configuration)
          Initialize the template loader with a a resources class.
 boolean isSourceModified(Resource resource)
          Given a template, check to see if the source of InputStream has been modified.
private  java.sql.Connection openDbConnection()
          gets connection to the datasource specified through the configuration parameters.
private  java.sql.ResultSet readData(java.sql.Connection conn, java.lang.String columnNames, java.lang.String templateName)
          Reads the data from the datasource.
private  long readLastModified(Resource resource, java.lang.String i_operation)
          Fetches the last modification time of the resource
 
Methods inherited from class org.apache.velocity.runtime.resource.loader.ResourceLoader
commonInit, getClassName, getModificationCheckInterval, isCachingOn, setCachingOn, setModificationCheckInterval
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

dataSourceName

private java.lang.String dataSourceName

tableName

private java.lang.String tableName

keyColumn

private java.lang.String keyColumn

templateColumn

private java.lang.String templateColumn

timestampColumn

private java.lang.String timestampColumn

ctx

private javax.naming.InitialContext ctx

dataSource

private javax.sql.DataSource dataSource
Constructor Detail

DataSourceResourceLoader

public DataSourceResourceLoader()
Method Detail

init

public void init(org.apache.commons.collections.ExtendedProperties configuration)
Description copied from class: ResourceLoader
Initialize the template loader with a a resources class.
Overrides:
init in class ResourceLoader

isSourceModified

public boolean isSourceModified(Resource resource)
Description copied from class: ResourceLoader
Given a template, check to see if the source of InputStream has been modified.
Overrides:
isSourceModified in class ResourceLoader

getLastModified

public long getLastModified(Resource resource)
Description copied from class: ResourceLoader
Get the last modified time of the InputStream source that was used to create the template. We need the template here because we have to extract the name of the template in order to locate the InputStream source.
Overrides:
getLastModified in class ResourceLoader

getResourceStream

public java.io.InputStream getResourceStream(java.lang.String name)
                                      throws ResourceNotFoundException
Get an InputStream so that the Runtime can build a template with it.
Overrides:
getResourceStream in class ResourceLoader
Parameters:
name - name of template
Returns:
InputStream containing template

readLastModified

private long readLastModified(Resource resource,
                              java.lang.String i_operation)
Fetches the last modification time of the resource
Parameters:
resource - Resource object we are finding timestamp of
i_operation - string for logging, indicating caller's intention
Returns:
timestamp as long

openDbConnection

private java.sql.Connection openDbConnection()
                                      throws java.lang.Exception
gets connection to the datasource specified through the configuration parameters.
Returns:
connection

closeDbConnection

private void closeDbConnection(java.sql.Connection conn)
Closes connection to the datasource

readData

private java.sql.ResultSet readData(java.sql.Connection conn,
                                    java.lang.String columnNames,
                                    java.lang.String templateName)
                             throws java.sql.SQLException
Reads the data from the datasource. It simply does the following query :
SELECT columnNames FROM tableName WHERE keyColumn = 'templateName'
where keyColumn is a class member set in init()
Parameters:
conn - connection to datasource
columnNames - columns to fetch from datasource
templateName - name of template to fetch
Returns:
result set from query


Copyright © 2003 Apache Software Foundation. All Rights Reserved.