<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Rivet 3.0: Release Notes</title>
    <link rel="stylesheet" href="../templates/wondrous/styles.css" type="text/css" />
</head>

<body>
    <div id="container">
        <div id="header">
            <h1><a href="../index.html">Rivet</a></h1>
            <h2 id="slogan">Webscripting for Tcl'ers</h2>
            <div class="clear"></div>
        </div>
        <div id="body">
            <div id="content">
                <h2>Rivet 3.0: Release Notes</h2>
                <div>
    <div class="sez">
        <h4>Download</h4>
        <p>
                    Rivet 3.0 is available for download from ASF mirror sites. Check the 
                    <a href="download.html">download page</a>

 for information about 
                    downloading the source code. If you plan to run Rivet on Linux or Free-BSD and
                    you don't want to get bothered building the module yourself then usually,
                    after a few weeks from release, packages for the most popular 
                    Linux distributions become available
                                    </p>
        <p>
                    Code integrity for this release can be checked using the 
                    public keys in the <a href="http://www.apache.org/dist/tcl/KEYS">KEYS</a>

 file.
                                    </p>
        <h3>Release Notes</h3>
        <h4>Requirements</h4>
        <p>
                    Rivet 3.0 is tested and works with the Apache Webserver version 2.4 (running any 
                    MPM) and requires Tcl &gt;= 8.6.1. Rivet 3.0 now supports also the Apache Webserver when running on the
                    MS-Windows family of operative systems. The module has been built on MS-Windows 
                    through the <a href="https://cmake.org/">CMake</a>

 build system using the 
                    <a href="https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017">Visual Studio Community 2017</a>


                    compiler.
                                    </p>
        <h4>Apache MPM and Rivet Bridge Modules</h4>
        <p>
                	  Rivet 3.0 is a major rewriting of mod_rivet, the Apache HTTP Websever module 
                	  at the core of Rivet. Unlike in previous versions of mod_rivet which only supported
                	  the <a href="https://httpd.apache.org/docs/2.4/mod/prefork.html">prefork MPM</a>

 
                	  (<a href="https://httpd.apache.org/docs/2.4/mpm.html">Multiprocessing Module</a>

),
                	  starting with 3.0 we attained full support of different MPM for the Apache framework.

						  Threaded MPM integration was achieved by making mod_rivet multithreaded and modular itself,
						  introducing the mod_rivet/MPM bridge concept. We developed a set of loadable modules which
						  are supposed not only to overcome the issues related to threading but also to offer 
						  the best possible MPM mod_rivet integration. 
						  As a side effect of this modular design, mod_rivet is not only able to
						  integrate with its environment, but also to work as a framework for writing more MPM bridges
						  designed along different multi-threading schemes and workload management models. See the
						  internals section of the <a href="http://tcl.apache.org/rivet/manual3.0/">rivet manual</a>

 
						  for further reading. MPM bridges are loaded accordingly
						  to a heuristics of rules based on the Apache introspection calls, but they can be determined
						  in the configuration. Only a bridge can be loaded at a time.
                                    </p>
        <p>
                		Version 3.0 is a drop-in replacement of any earlier version of Rivet but there are
                		new features that can deeply change the way you have so far developed your Rivet
                		based applications
                </p>
        <h4>New Request Processing Scheme</h4>
        <p>
                	  In Rivet 2.x request processing was performed by chaining together 3 scripts
                	  
                	  <ul>
                <li>
                    <strong>BeforeScript</strong>

, if defined in the configuration                                    </li>
                <li>The Tcl script or rvt template referenced by the URL and determined with respect to the 
                	  	DocumentRoot and following other resource determination methods, such as the ones offered by 
                	  	mod_alias and mod_rewrite.</li>
                <li>
                    <strong>AfterScript</strong>

 if defined in the configuration                                    </li>
            </ul>


						  Errors and exceptions (raised by the ::rivet::abort_page command) are handled by the 
						  <strong>ErrorScript</strong>

 and <strong>AbortScript</strong>

 (<strong>ErrorScript</strong>

 
						  has a default implementation if left undefined)
						                    </p>
        <p>
							Rivet 3.0 implements a new request processing scheme entirely based on Tcl. 
							By default rivet 3.0 provides compatibility with the version 2.x scheme 
							but this can be entirely overridden by the developer replacing the central request
							handling procedure.
                </p>
        <h4>Packages</h4>
        <p>
                	Rivet comes with the usual collection of packages. Some of the available packages are
                </p>
        <ul>
            <li>
                <strong>Asciiglyphs</strong>

: a ASCII-art character printer. Character typefaces were shamelessly taken from
                	the code of the <a href="https://www.fossil-scm.org/">Fossil DVCS</a>

 under permission of Richard Hipp,
                	Fossil's mastermind                            </li>
            <li>
                <strong>Calendar</strong>

: a class to print text, HTML and XML based calendar tables like the ones printed
                	by the Unix '<a href="https://en.wikipedia.org/wiki/Cal_(Unix)">cal</a>

' command                            </li>
            <li>
                <strong>DIO</strong>

: a generic, object-oriented interface to SQL databases. Its main goal is
                	to be as generic as possible                            </li>
            <li>
                <strong>Entities</strong>

: The RivetEntities package was kindly provided by Harald Oehlmann 
                	and is largely taken from a simple yet clever encoder/decoder of HTML entities starting from a utf-8
                	character string. The original code writted by Andy Goth is at http://wiki.tcl.tk/26403. 
                	Package entities extends the functionality in the original code combining it with Tcl's 'encoding'
                	command to encode/decode from any supported encoding                            </li>
            <li>
                <strong>Form</strong>

: The form package is a utility for generating html forms. 
                	A form object command saves the programmer from typing the cumbersome html code of input elements,
                	working out a solution for better standardization and readability of the code                            </li>
            <li>
                <strong>Formbroker</strong>

: The FormBroker package creates instances of objects representing a
                	form data description. These objects offer a simple interface of methods meant to validate and control
                	data as typically posted through an HTML form                            </li>
            <li>
                <strong>session</strong>

: This is session management code. It provides an interface to
                    allow you to generate and track a browser's visit as a "session", 
                    giving you a unique session ID and an interface for storing and 
                	retrieving data for that session on the server.                            </li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 3.0.3 Release Notes</h4>
        <p>
						Rivet 3.0.3 is a bug fix release of rivet 3.0. This release includes
						<ul>
                <li>Packages in DIO are not assuming anymore the rivet command set had
                            been imported into the global namespace</li>
                <li>A minor change to ::rivet::xml provides a new form to 
                            generate self closing elements</li>
            </ul>
        </p>
    </div>
    <div class="sez">
        <h4>Rivet 3.0.2 Release Notes</h4>
        <p>
						Rivet 3.0.2 is a bug fix release of rivet 3.0. This release includes
						<ul>
                <li>Fixed a bug in the default error handler</li>
                <li>Other minor changes are relevant to the code and have
 							no interest at the application level</li>
            </ul>
        </p>
    </div>
    <div class="sez">
        <h4>Rivet 3.0.1 Release Notes</h4>
        <p>
						Rivet 3.0.1 is a bug fix release of rivet 3.0. This release includes
						<ul>
                <li>rivet Namespace determination in librivet has been revised to
   							 avoid to check for the module globals and therefore avoiding
   							 the inclusion of mod_rivet.h</li>
                <li>A few details in the worker bridge have been fixed, including
							a thread root interpreter initialization</li>
                <li>the lazy bridge has been extensively commented</li>
                <li>documentation has been expanded and corrected in various sections</li>
            </ul>
        </p>
    </div>
</div>



                <div class="contentbottom">
                    
                </div>
            </div>

            <div class="sidebar">
                <ul>
                    <li id="news">
    <h4>News</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a href="rn%2d2%2d3.html">11 Nov 2017: Rivet 2.3.5 released</a>
        </li>
        <li class="navitem">
            <a href="rn%2d3%2d0.html">18 Nov 2018: Rivet 3.0.3 released</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                    <li id="home">
    <h4>Rivet</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="A home for Rivet" href="../index.html">Rivet Homepage</a>
        </li>
        <li class="navitem">
            <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
        </li>
        <li class="navitem">
            <a title="Getting Rivet" href="download.html">Getting Rivet</a>
        </li>
        <li class="navitem">
            <a title="Hello World!" href="hello%5fworld.html">Examples</a>
        </li>
        <li class="navitem">
            <a title="The Rivet development team" href="about.html">About Us - Contact</a>
        </li>
    </ul>
</li>
<li id="manual">
    <h4>Documentation</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Rivet 2.1 Manual" target="rivetman2.1" href="http://tcl.apache.org/rivet/manual2.1/">Rivet 2.1</a>
        </li>
        <li class="navitem">
            <a title="Rivet 2.2 Manual" target="rivetman2.2" href="http://tcl.apache.org/rivet/manual2.2/">Rivet 2.2</a>
        </li>
        <li class="navitem">
            <a title="Rivet 2.3 Manual" target="rivetman2.3" href="http://tcl.apache.org/rivet/manual2.3/">Rivet 2.3</a>
        </li>
        <li class="navitem">
            <a title="Rivet 3.0 Manual" target="rivetman3.0" href="http://tcl.apache.org/rivet/manual3.0/">Rivet 3.0</a>
        </li>
    </ul>
</li>
<li id="rn">
    <h4>Release Notes</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a href="rn%2d2%2d0.html">v2.0</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d1.html">v2.1</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d2.html">v2.2</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d3.html">v2.3</a>
        </li>
        <li class="navitem">
            <a href="rn%2d3%2d0.html">v3.0</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                     
                </ul> 
            </div>
            <div class="clear"></div>
        </div>
    </div>
    <div id="footer">
        <div class="footer-content">
            <p><a href="http://www.apache.org/">Apache Software Foundation</a> | Design by <a href="http://www.spyka.net">Free CSS Templates</a> | <a href="http://www.justfreetemplates.com">Free Web Templates</a></p>
        </div>
    </div>
    <div style="text-align: center; font-size: 0.75em;">Design downloaded from <a href="http://www.freewebtemplates.com/">free website templates</a>.</div></body>
</html>

