haul        02/04/28 11:11:12

  Modified:    src/documentation/xdocs/userdocs/concepts book.xml
  Added:       src/documentation/xdocs/userdocs/concepts modules.xml
                        databases.xml
  Log:
  docs for database operations and modules
  
  Revision  Changes    Path
  1.4       +2 -0      
xml-cocoon2/src/documentation/xdocs/userdocs/concepts/book.xml
  
  Index: book.xml
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/documentation/xdocs/userdocs/concepts/book.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- book.xml  14 Mar 2002 21:43:00 -0000      1.3
  +++ book.xml  28 Apr 2002 18:11:12 -0000      1.4
  @@ -22,6 +22,8 @@
       <menu-item label="Persistence" href="persistence.html"/>
       <menu-item label="StoreJanitor" href="storejanitor.html"/>
       <menu-item label="XMLSearching" href="xmlsearching.html"/>
  +    <menu-item label="Databases" href="databases.html"/>
  +    <menu-item label="Modules" href="modules.html"/>
     </menu>
   
   </book>
  
  
  
  1.1                  
xml-cocoon2/src/documentation/xdocs/userdocs/concepts/modules.xml
  
  Index: modules.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" 
"../../dtd/document-v10.dtd">
  
  <document>
  
    <header>
      <title>Modules</title>
      <authors>
        <person name="Christian Haul" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
  
  <body>
  
        <s1 title="Introduction">
          <p>
                Many sitemap components serve a purpose regardless how the 
input is
                obtained. Still, to provide a wide range of components to 
quickly get
                you up to speed, variants for different inputs exist. Modules 
allow to
                create generic components and plug-in input or output later.
          </p>
          <p>
                This document will explain how modules work and how to make use 
of
                them. If you plan on writing your own modules, it is highly 
recommended
                to read <fork
                  href="http://jakarta.apache.org/avalon/developing/index.html";>
                  Developing With Apache Avalon</fork>. It is a very good 
description
                of the underlying rationale and principles.
          </p>
          <note>
                To use modules, Apache Cocoon needs to have been build to 
include
                scratchpad components.
          </note>
        </s1>
        <s1 title="Types of Modules">
          <p>
                Currently, three different types of modules exist: Input modules
                provide means to enumerate parameters and to retrieve them, 
output
                modules allow storing of data and exhibit transaction like 
semantics,
                database modules encapsulate different mechanisms for auto 
increment
                columns of various database management systems. Please refer to 
the
                javadoc documentation of these interfaces.
          </p>
          <p>
                Input modules are modelled after request parameters. The main
                difference is, that every method takes two additional 
arguments, the
                request object and a configuration object. The configuration 
object is
                used to allow arbitrarily complex instructions for the input 
module.
                Apart from that, input modules are more or less a drop-in 
replacement.
          </p>
          <p>
                Output modules are again very similar to using request
                attributes. Basically, they provide a method to set an 
attribute to a
                value. Again, a request and a configuration object is the only 
change
                to request attributes. A fundamental difference is, however, 
that
                output modules should exhibit transactional behaviour. Thus 
setting an
                attributes implicitly starts a transaction that must be ended by
                calling rollback or commit. Only if the transaction is 
completed by
                calling commit, the values set should be visible. This is needed
                e.g. by the database actions.
          </p>
          <p>
                Database modules, actually named AutoIncrementModule, contains
                configuration information how to retrieve a value for an auto 
increment
                column. It is possible to obtain the value before inserting a 
row,
                while inserting as part of the SQL or after successful insert. 
If the
                value is obtained before inserting, it can be generated
                externally. Currently, supported database management systems 
include
                HSQL, Informix, MySQL, and querying the database for the 
current max
                value. 
          </p>
        </s1>
        <s1 title="Using modules">
          <p>
                Using any of these modules requires a two step setup process. 
Step one
                has already been done for your for all modules that come with 
Apache
                Cocoon. Exception to this rule are the auto increment modules: 
only the
                HSQL module is already setup.
          </p>
          <s2 title="Step 1: Making a new module know to Apache Cocoon">
                <p>
                  Like other core components of Apache Cocoon, modules are 
declared in
                  <code>cocoon.xconf</code>.
                </p>
                <source>
  <![CDATA[
  <input-modules>
     <component-instance name="request"   
class="org.apache.cocoon.components.modules.input.RequestParameterModule"/>
     <component-instance name="attribute" 
class="org.apache.cocoon.components.modules.input.RequestAttributeModule"/>
     <component-instance name="URI"       
class="org.apache.cocoon.components.modules.input.RequestURIModule"/>
     <component-instance name="header"    
class="org.apache.cocoon.components.modules.input.HeaderAttributeModule"/>
     <component-instance name="session"   
class="org.apache.cocoon.components.modules.input.SessionAttributeModule"/>
  </input-modules>
  
  <output-modules>
     <component-instance name="attribute" 
class="org.apache.cocoon.components.modules.output.RequestAttributeOutputModule"/>
     <component-instance name="session"   
class="org.apache.cocoon.components.modules.output.SessionAttributeOutputModule"/>
  </output-modules>
  
  <autoincrement-modules>
     <component-instance name="auto" 
class="org.apache.cocoon.components.modules.database.HsqlIdentityAutoIncrementModule"/>
  <!--
        <component-instance name="auto" 
class="org.apache.cocoon.components.modules.database.ManualAutoIncrementModule"/>
        <component-instance name="auto" 
class="org.apache.cocoon.components.modules.database.IfxSerialAutoIncrementModule"/>
        <component-instance name="auto" 
class="org.apache.cocoon.components.modules.database.MysqlAutoIncrementModule"/>
  -->
  </autoincrement-modules>
  ]]>
                </source>
                <p>
                  The above snippet declares a number of modules. After this, 
the
                  modules are accessible through the given name. Thus, when an
                  <code>input-module</code> is expected, it is sufficient to 
give the
                  name of a module, like <code>header</code>.
                </p>
                <p>
                  For the auto increment modules only one is declared as the 
name
                  <code>"auto"</code> has special meaning to the modular 
database
                  actions. If more than one is needed at the same time, the
                  configuration of the database actions needs to explicitly 
specify
                  which one to use.
                </p>
          </s2>
          <s2 title="Step 2: Have sitemap component use a module">
                <p>
                  This depends on the component that is to be used. As an 
example the
                  <code>CachingWildcardMatcher</code> requires to set the
                  <code>input-module</code> on declaration.
                </p>
                <source>
  <![CDATA[
  <map:matchers default="wildcard">
    <map:matcher name="cached-uri" 
src="org.apache.cocoon.matching.modular.CachingWildcardMatcher">
      <input-module name="URI"/>
    </map:matcher>
  </map:matchers>
  ]]>
                </source>
                <p>
                  By replacing the input module name with any of the other 
declared
                  input modules, this matcher can be used to match e.g. on 
session
                  attributes or request headers.
                </p>
          </s2>
        </s1>
  
  </body>
  </document>
  
  
  
  1.1                  
xml-cocoon2/src/documentation/xdocs/userdocs/concepts/databases.xml
  
  Index: databases.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" 
"../../dtd/document-v10.dtd">
  
  <document>
  
    <header>
      <title>Database Access</title>
      <authors>
        <person name="Christian Haul" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
  
  <body>
  
        <s1 title="Introduction">
          <p>
                Publishing dynamic content or creating web-applications at
                some point often involves database access. Apache Cocoon
                offers a number of different facilities to access databases,
                (object) relational and XML. This document aims to give an
                overview over the different choices to access (object)
                relational databases.
          </p>
          <p>
                This document will not explain how to setup database
                connectivity with Apache Cocoon. For this, see <link
                  href="../../developing/datasources.html">here.</link>
          </p>
          <p>
                Basically, there are three different approaches available:
                <link href="actions.html">Actions,</link> <link
                  href="../xsp/logicsheet-concepts.html">logicsheets,</link>
                and <link href="sitemap.html">transformers.</link> Each has
                its merits and difficulties. 
          </p>
        </s1>
  
        <s1 title="Actions">
          <p>
                <link href="actions.html">Actions</link> are code that is 
executed
                during pipeline setup and its outcome can change how the 
pipeline is
                assembled. This way a pipeline can for example contain an 
alternative
                page to display when a database operation failed.
          </p>
          <p>
                Actions are especially great to insert, change, or delete data. 
By
                using the pipeline switching feature of actions, pages can be 
simpler
                as they are only concerned with one view - either successful 
operation
                or failure.
          </p>
          <p>
                Even for data that is not user-provided, actions can be useful.
                Tracking information can be stored in a database from a central
                location without the need to modify every page.
          </p>
          <p>
                Database actions allow also to read data from a database. This 
is
                useful if the pipeline assembling depends on this data or to 
setup an
                environment for processing on a XSP.
          </p>
          <p>
                A big advantage of these actions is, that once the database 
meta data
                is captured into a descriptor file in XML, using any of these 
actions
                is just a matter of placing it in the pipeline, no programming 
is
                required, not even writing SQL queries.
          </p>
          <p>
                A detailed description can be found <link
                  href="../actions/database-actions.html">here</link>.
          </p>
        </s1>
  
        <s1 title="ESQL Logicsheet">
          <p>
                Usage of logicsheets is limited to XSPs, ESQL is currently 
available
                for JAVA XSPs. In addition, the interface is largely modelled 
after
                JDBC, and it is advantageous to be familiar with it.
          </p>
          <p>
                ESQL is great to read data from a database while it is less 
attractive
                to react to operation failures because that makes the XSP 
complex and
                less easy to understand and maintain.
          </p>
          <p>
                Complex layouts of the data read are easy to achieve. ESQL 
allows
                arbitrary nesting of queries and connections, provides support 
for
                stored procedures and complex data types. For generating 
reports that
                can be used with other XML-aware software or formated with XSL 
or CSS2,
                ESQL provides means to create a structured representation of the
                database data with just one tag. XML data can be retrieved from 
the
                database and included in the output, ESQL supports skipping 
part of the
                resultset and limiting the result with some supported database
                management systems. With the full power of JAVA available on 
the XSP,
                any processing of the data is possible. 
          </p>
          <p>
                A detailed description can be found <link
                  href="../xsp/esql.html">here</link>.
          </p>
        </s1>
  
        <s1 title="SQL Transformer">
          <p>
                As a transformer, this approach can be combined with any kind
                of page. This results in slightly cleaner pages as some of the
                setup ESQL requires is not needed.
          </p>
          <p>
                On the other hand it is more or less impossible to react to 
operation
                failures since the pipeline is already assembled and logic is 
not
                available inside transformers unless a custom transformer is 
written.
                This makes the transformer approach best for retrieving data. 
Creating
                an XML representation of the query result is even simpler than 
with
                using the ESQL logicsheet. The transformer supports stored 
procedures.
                No programming is required apart from writing SQL.
          </p>
          <p>
                A detailed description can be found <link
                  href="../transformers/sql-transformer.html">here</link>.
          </p>
        </s1>
  
  </body>
  </document>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to