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, setModificationCheckIntervalpublic void init(ExtProperties configuration)
ResourceLoaderinit in class ResourceLoaderResourceLoader.init(org.apache.velocity.util.ExtProperties)public void setDataSource(DataSource dataSource)
dataSource - The data source for this ResourceLoader.public boolean isSourceModified(Resource resource)
ResourceLoaderisSourceModified in class ResourceLoaderResourceLoader.isSourceModified(org.apache.velocity.runtime.resource.Resource)public long getLastModified(Resource resource)
ResourceLoadergetLastModified in class ResourceLoaderResourceLoader.getLastModified(org.apache.velocity.runtime.resource.Resource)public Reader getResourceReader(String name, String encoding) throws ResourceNotFoundException
getResourceReader in class ResourceLoadername - name of templateencoding - asked encodingResourceNotFoundExceptionprotected 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 templateNameSQLExceptionprotected ResultSet fetchResult(PreparedStatement ps, String templateName) throws SQLException
ps - target prepared statementtemplateName - input template nameSQLExceptionprotected Reader getReader(ResultSet resultSet, String column, String encoding) throws SQLException
resultSet - column - encoding - SQLExceptionCopyright © 2000–2019 The Apache Software Foundation. All rights reserved.