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
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>
[...]
<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
);
className, isCachingOn, log, modificationCheckInterval, rsvc
Constructor and Description |
---|
DataSourceResourceLoader() |
Modifier and Type | Method and Description |
---|---|
protected ResultSet |
fetchResult(PreparedStatement ps,
String templateName)
Fetches the result for a given template name.
|
protected void |
finalize()
Close DB connection on finalization
|
long |
getLastModified(Resource resource)
Get the last modified time of the InputStream source
that was used to create the template.
|
protected Reader |
getReader(ResultSet resultSet,
String column,
String encoding)
Gets a reader from a result set's column
|
Reader |
getResourceReader(String name,
String encoding)
Get an InputStream so that the Runtime can build a
template with it.
|
void |
init(ExtProperties 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.
|
protected PreparedStatement |
prepareStatement(Connection conn,
String columnNames,
String tableName,
String keyColumn)
Creates the following PreparedStatement query :
SELECT columnNames FROM tableName WHERE keyColumn = 'templateName' where keyColumn is a class member set in init() |
void |
setDataSource(DataSource dataSource)
Set the DataSource used by this resource loader.
|
buildReader, commonInit, getClassName, getModificationCheckInterval, isCachingOn, resourceExists, setCachingOn, setModificationCheckInterval
public void init(ExtProperties configuration)
ResourceLoader
init
in class ResourceLoader
ResourceLoader.init(org.apache.velocity.util.ExtProperties)
public void setDataSource(DataSource dataSource)
dataSource
- The data source for this ResourceLoader.public boolean isSourceModified(Resource resource)
ResourceLoader
isSourceModified
in class ResourceLoader
ResourceLoader.isSourceModified(org.apache.velocity.runtime.resource.Resource)
public long getLastModified(Resource resource)
ResourceLoader
getLastModified
in class ResourceLoader
ResourceLoader.getLastModified(org.apache.velocity.runtime.resource.Resource)
public Reader getResourceReader(String name, String encoding) throws ResourceNotFoundException
getResourceReader
in class ResourceLoader
name
- name of templateencoding
- asked encodingResourceNotFoundException
protected void finalize() throws Throwable
protected PreparedStatement prepareStatement(Connection conn, String columnNames, String tableName, String keyColumn) throws SQLException
conn
- connection to datasourcecolumnNames
- columns to fetch from datasourcetableName
- table to fetch fromkeyColumn
- column whose value should match templateNameSQLException
protected ResultSet fetchResult(PreparedStatement ps, String templateName) throws SQLException
ps
- target prepared statementtemplateName
- input template nameSQLException
protected Reader getReader(ResultSet resultSet, String column, String encoding) throws SQLException
resultSet
- column
- encoding
- SQLException
Copyright © 2000–2021 The Apache Software Foundation. All rights reserved.