org.apache.cocoon.reading
Class DatabaseReader

java.lang.Object
  extended by org.apache.avalon.framework.logger.AbstractLogEnabled
      extended by org.apache.cocoon.reading.AbstractReader
          extended by org.apache.cocoon.reading.ServiceableReader
              extended by org.apache.cocoon.reading.DatabaseReader
All Implemented Interfaces:
Poolable, Recyclable, Disposable, Component, Configurable, LogEnabled, Serviceable, CacheableProcessingComponent, Reader, SitemapModelComponent, SitemapOutputComponent

public class DatabaseReader
extends ServiceableReader
implements Configurable, Disposable, CacheableProcessingComponent

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.

Version:
CVS $Id: DatabaseReader.html 1304258 2012-03-23 10:09:27Z ilgrosso $
Author:
Berin Loritsch

Field Summary
 
Fields inherited from class org.apache.cocoon.reading.ServiceableReader
manager
 
Fields inherited from class org.apache.cocoon.reading.AbstractReader
objectModel, out, parameters, resolver, source
 
Fields inherited from interface org.apache.cocoon.reading.Reader
ROLE
 
Constructor Summary
DatabaseReader()
           
 
Method Summary
 void configure(Configuration conf)
          Configure the Reader so that we can use the same database for all instances.
 void dispose()
           
 void generate()
          Generates the resource we need to retrieve verbatim from the database.
 Serializable getKey()
          Generate the unique key.
 String getMimeType()
          Get the mime-type of the output of this Reader
protected  String getQuery()
          This method builds the query string used for accessing the database.
 SourceValidity getValidity()
          Generate the validity object.
protected  boolean modifiedSince(ResultSet set, Request request, Response response)
          Tests whether a resource has been modified or not.
 void recycle()
          Recycle the component
 void serialize(Response response)
          This method actually performs the serialization.
 void service(ServiceManager manager)
           
 void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
          Set the SourceResolver the object model Map, the source and sitemap Parameters used to process the request.
 
Methods inherited from class org.apache.cocoon.reading.AbstractReader
getLastModified, setOutputStream, shouldSetContentLength
 
Methods inherited from class org.apache.avalon.framework.logger.AbstractLogEnabled
enableLogging, getLogger, setupLogger, setupLogger, setupLogger
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DatabaseReader

public DatabaseReader()
Method Detail

service

public void service(ServiceManager manager)
             throws ServiceException
Specified by:
service in interface Serviceable
Overrides:
service in class ServiceableReader
Throws:
ServiceException
See Also:
Serviceable.service(org.apache.avalon.framework.service.ServiceManager)

configure

public void configure(Configuration conf)
               throws ConfigurationException
Configure the Reader so that we can use the same database for all instances.

Specified by:
configure in interface Configurable
Throws:
ConfigurationException

setup

public void setup(SourceResolver resolver,
                  Map objectModel,
                  String src,
                  Parameters par)
           throws ProcessingException,
                  SAXException,
                  IOException
Set the SourceResolver the object model Map, the source and sitemap Parameters used to process the request.

Specified by:
setup in interface SitemapModelComponent
Overrides:
setup in class AbstractReader
Throws:
ProcessingException
SAXException
IOException

generate

public void generate()
              throws ProcessingException,
                     SAXException,
                     IOException
Generates the resource we need to retrieve verbatim from the database. Granted, this can be used for any resource from a database, so we may want to get rid of the bias toward images. This reader requires a number of parameters:
   <parameter name="table" value="database_table_name"/>
   <parameter name="image" value="database_resource_column_name"/>
   <parameter name="key" value="database_lookup_key_column_name"/>
 
Please note that if any of those parameters are missing, this Reader cannot function. There are a number of other parameters that allow you to provide hints for the reader to optimize resource use:
   <parameter name="last-modified" value="database_timestamp_column_name"/>
   <parameter name="content-type" value="content_mime_type"/>
   <parameter name="type-column" value="database_content_mime_type_column"/>
   <parameter name="expires" value="number_of_millis_before_refresh"/>
   <parameter name="where" value="alternate_key = 'foo'"/>
   <parameter name="order-by" value="alternate_key DESC"/>
 
Lastly, the key value is derived from the value of the source string.

Specified by:
generate in interface Reader
Throws:
ProcessingException
SAXException
IOException

getQuery

protected String getQuery()
                   throws ProcessingException
This method builds the query string used for accessing the database. If the required parameters do not exist, then we cannot build a correct query.

Throws:
ProcessingException

modifiedSince

protected boolean modifiedSince(ResultSet set,
                                Request request,
                                Response response)
                         throws SQLException
Tests whether a resource has been modified or not. As Blobs and database columns usually do not have intrinsic dates on them (at least easily accessible), we have to have a database column that holds a date for the resource. Please note, that the database column must be a Timestamp column. In the absence of such a column this method always returns true. This is because databases are much more prone to change than filesystems, and don't have intrinsic timestamps on column updates.

Throws:
SQLException

serialize

public void serialize(Response response)
               throws IOException,
                      SQLException
This method actually performs the serialization.

Throws:
IOException
SQLException

getKey

public Serializable getKey()
Generate the unique key. This key must be unique inside the space of this component.

Specified by:
getKey in interface CacheableProcessingComponent
Returns:
The generated key hashes the src

getValidity

public SourceValidity getValidity()
Generate the validity object.

Specified by:
getValidity in interface CacheableProcessingComponent
Returns:
The generated validity object or null if the component is currently not cacheable.

recycle

public void recycle()
Description copied from class: AbstractReader
Recycle the component

Specified by:
recycle in interface Recyclable
Overrides:
recycle in class AbstractReader

dispose

public void dispose()
Specified by:
dispose in interface Disposable

getMimeType

public String getMimeType()
Description copied from class: AbstractReader
Get the mime-type of the output of this Reader

Specified by:
getMimeType in interface SitemapOutputComponent
Overrides:
getMimeType in class AbstractReader
See Also:
AbstractProcessingPipeline.setMimeTypeForSerializer(org.apache.cocoon.environment.Environment), AbstractProcessingPipeline.setMimeTypeForReader(org.apache.cocoon.environment.Environment)


Copyright © 1999-2010 The Apache Software Foundation. All Rights Reserved.