apache > cocoon
 

DatabaseReader

DatabaseReader

NAME

databasereader

WHAT

The DatabaseReader component is used to serve data from a database

TYPE

Reader, Sitemap Component

BLOCK

Database

CLASS

org.apache.cocoon.reading.DatabaseReader

SINCE

Cocoon 2.1

CACHEABLE

yes

Description

This Reader pulls a resource from a database. It is configured with the Connection to use, parameters specify the table and column to pull the image from, and source specifies the source key information.

Usage

Sitemap pipeline examples

The following pipeline snippet uses a Database Reader for serving PNG images from a database.

<map:match pattern="images/*.png">
  <map:read type="databasereader" 
    src="{1}" 
    mime-type="image/png">
    <!-- option sitemap parameters -->
    <map:parameter name="table" value="images"/>
    <map:parameter name="image" value="image"/>
    <map:parameter name="key" value="name"/>
    <map:parameter name="where" value="publishing = 1"/>
    <map:parameter name="order-by" value="created"/>
    <map:parameter name="last-modified" value="last-modified"/>
  </map:read>
</map:match>
        

The snippet above make following assumption about the database

  • A database table images holds the PNG image data.
  • The database table has image column storing the image data as BLOB.
  • The database table has key column which must match the value of of {1}.
  • The database table has publishing column indicating by value 1 that the image data is allowed to get published.
  • The database table has created column, indicating the creation date of the image data, and used if the key is not a primary key, serving images in a LIFO fashion.
  • The database table has last-modified column of type TIMESTAMP indicating the last modification date of the image data.

Sitemap component configuration example

<map:readers...
  <map:reader name="databasereader" 
    src="org.apache.cocoon.reading.DatabaseReader"
    logger="sitemap.reader.databasereader" 
    pool-max="32"/>
    <!-- optional reader configuration -->
    ...
  </map:readers>
...

Configuration

In the Database Reader declaration section following configuration options are available

Configurationname

Type

Comment

use-connection

Data source name

The name of a database selector, configured in the cocoon.xconf file.

invalidate

never | always

This option configures the caching behaviour if lastModifed has value of -1.

Setup

The DatabaseReader accepts following setup parameters

Parametername

Type

Comment

table

database table name

The database table name

image

database column name

The column name of the image data

key

database key column name

The key column name of the image data matching the src attribute of the <map:read> sitemap usage.

where

database where expression

Optional parameter specifying SQL where expression.

order-by

database order-by expression

Optional parameter specifying an SQL order-by expression.

last-modified

timestamp column name

Optional parameter a TIMESTAMP column name, added to the SELECT clause of the SQL query.

content-type

database column name

Optional parameter a column name, if specified the column value overrides the mime-type attribute of the <map:read> sitemap usage.

The key value is derived from the src attribute of the Database Reader usage..

The Database Reader builds internally following SQL query:

SELECT {image} [, last-modified] [, {order-by-column} ] from {table}
  WHERE {key} = {src} [ AND {where} ]
  [ORDER BY {order-by}]
        

Effect on Object Model and Sitemap Parameters

Bugs/Caveats

The Database Reader needs a datasource name, it is referenced by the configuration element use-connection. The datasource name has to be configured in the Cocoon database configuration cocoon.xconf.

If the parameter last-modified ends with " DESC" this suffix is truncated as it is appended to the SQL clause, noted as {order-by-column} in the SQL query snippet above.

History

12-25-02: created initial version by Bernhard Huber

See also