A document has been updated:

http://cocoon.zones.apache.org/daisy/documentation/681.html

Document ID: 681
Branch: main
Language: default
Name: Creating a Reader (unchanged)
Document Type: Document (unchanged)
Updated on: 8/25/05 7:44:05 PM
Updated by: Berin Loritsch

A new version has been created, state: publish

Parts
=====
Content
-------
This part has been updated.
Mime type: text/xml (unchanged)
File name:  (unchanged)
Size: 9063 bytes (previous version: 5976 bytes)
Content diff:
(125 equal lines skipped)
    </pre>
    
    <p>Now we are going to override the <tt>service()</tt> method and implement 
the
--- <tt>dispose()</tt> method to get and cleanup after ourselves.</p>
+++ <tt>dispose()</tt> method to get and cleanup after ourselves.  First lets 
start
+++ with getting the DataSourceComponent.  Because Cocoon is configured to deal 
with
+++ multiple databases, you will need to use a ServiceSelector to choose the
+++ DataSourceComponent corresponding to your desired database.</p>
    
+++ <pre>    @Override
+++     public void service(ServiceManager services) throws ServiceException
+++     {
+++         super.service(services);
+++ 
+++         dbselector = (ServiceSelector) 
manager.lookup(DataSourceComponent.ROLE + "Selector");
+++         datasource = (DataSourceComponent) 
dbselector.select(DB_RESOURCE_NAME);
+++     }
+++ </pre>
+++ 
+++ <p class="note">The <tt>@Override</tt> annotation above is used by the Java
+++ compiler to ensure that you are overriding a parent class's method.  It only
+++ works in Java 5.  If you are developing against an earlier version of Java
+++ remove that line so that you can compile the class.  That goes for every 
time
+++ you see it.</p>
+++ 
+++ <p>We ensured that we called the superclass's <tt>service()</tt> method so 
that
+++ we didn't upset the expectations of anyone wanting to extend our class.  
Keeping
+++ the user's expectations in mind always helps to produce a good product--and 
in
+++ this case the user is a developer.  Next, we retrieved the selector for the
+++ DataSourceComponent and stored it in the class field we created earlier.  
Then
+++ we did the same for the actual DataSouceComponent itself.  Now we have 
access to
+++ the component when we need it.  We didn't get an actual connection yet 
because
+++ the connections are pooled.  If we held onto a connection for the life of 
the
+++ component then we would run out and the application would come to a 
screaching
+++ halt waiting for a connection to become available.</p>
+++ 
+++ <p>Since we are still dealing with managing the component itself, let's do 
the
+++ cleanup code next.  The Avalon framework uses the 
<tt>Disposable.dispose()</tt>
+++ callback method to let the component know when it is safe to release all the
+++ components it is using and perform other cleanup.</p>
+++ 
+++ <pre>    public void dispose()
+++     {
+++         dbselector.release(datasource);
+++         manager.release(dbselector);
+++         datasource = null;
+++         manager = null;
+++     }
+++ </pre>
+++ 
+++ <p>While setting the fields to <tt>null</tt> might not be necessary with 
modern
+++ day garbage collectors, it still doesn't hurt.  By releasing those 
components we
+++ ensure that Cocoon can shut down nicely and safely when it is time.</p>
+++ 
+++ <h3>Make sure PDFs Work</h3>
+++ 
+++ <p>Since we expect to have PDF documents in our database alongside pictures 
and
+++ other types of documents, we need to make sure they display properly.  
Since the
+++ bug in the IE Acrobat Reader plugin wasn't fixed until version 7 we need to 
make
+++ sure the content length is returned.  There is some overhead with this as 
Cocoon
+++ has to cache the results to get the content length, but because we are 
going to
+++ cache it anyway there is little difference on when it gets sent to the 
cache. 
+++ This is how we do it:</p>
+++ 
+++ <pre>    @Override
+++     public boolean shouldSetContentLength()
+++     {
+++         return true;
+++     }
+++ </pre>
+++ 
+++ <h3>Setting up for the Read (Cache directives, finding the resource, 
etc.)</h3>
+++ 
    </body>
    </html>


Fields
======
no changes

Links
=====
no changes

Custom Fields
=============
no changes

Collections
===========
no changes

Reply via email to