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