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
)
closeDbConnection
private void closeDbConnection(Connection conn)
Closes connection to the datasource
getResourceStream
public InputStream getResourceStream(String name)
throws ResourceNotFoundException
Get an InputStream so that the Runtime can build a
template with it.
- getResourceStream in interface ResourceLoader
name
- name of template
- InputStream containing template
init
public void init(ExtendedProperties configuration)
- init in interface ResourceLoader
isSourceModified
public boolean isSourceModified(Resource resource)
- isSourceModified in interface ResourceLoader
openDbConnection
private Connection openDbConnection()
throws Exception
gets connection to the datasource specified through the configuration
parameters.
- connection
readData
private ResultSet readData(Connection conn,
String columnNames,
String templateName)
throws 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()
conn
- connection to datasourcecolumnNames
- columns to fetch from datasourcetemplateName
- name of template to fetch
- result set from query
readLastModified
private long readLastModified(Resource resource,
String i_operation)
Fetches the last modification time of the resource
resource
- Resource object we are finding timestamp ofi_operation
- string for logging, indicating caller's intention
- timestamp as long