PORTABLE.NSD - pure TCL OpenACS


Overview


The portable.nsd project will all the OpenACS source code to execute outside the AOLServer environment.  We will achieve this portability be redefining the AOLServer TCL API dependencies to support different deployment containers.  The container responsibility is to map AOLServer functionality to functionality offered by the environment. Deployment environment include tclsh,  tclhttpd, FastCGI, and Apache 2.0 (mod_tcl and Rivet).

The AOLServer functionality we need to implement includes the tcl api, registered procs,  scheduled procs, registered filters, and global state (nsv's).  AOLServer initializes a single interpreter and then clones it to perform it's multithreaded request processing.  Our initial approach will be to treat the application as a single-threaded one,  and ignore the issue of multiple interpreters,  and the separation of the initializaton and request processing.  Eventually we'll figure out some way to deal with singleton initialization behavior and page serving behavior (See the Presentation for a proposed solution).

Note: Portable.nsd is not an attempt to replace AOLServer's role as OpenACS' native deployment environment.  It is intended to provide viable options to prospective users constrained to web servers,   operating systems, or single-threaded TCL packages not directly or sufficiently supported by AOLServer.  The intention is absolutely not to fork OpenACS but to provide  an emulation layer that supports 100% of the current and future OpenACS codebase.

Also, it is outside the scope of the effort to try to run arbitrary AOLServer applications (see nstclhttpd ) .  We're focused on the small subset of the nsd api used by OpenACS,  which is eminently more doable.


Phase 1 - COMPLETED (9/2002)

The first objective will be to get OpenACS code to run outside of AOLServer using only tclsh.  This will entail rewriting enough of the ns_api,  and figuring out a way to call directly into the request processor without using a web browser or web server.   TclPro & Komodo step debugging will be supported.

Phase 2 - ON HOLD (11/2002)

After we can initialize the TCL interpreter by running through the bootstrap process and can run the installer from the command line,  it's time to work on returning HTML to the browser.  This phase will primarily focus on connected initialized interpreters to tclHTTPD,  because that's the simplest deployment environment and the one where we have the most control.  We'll need to be able to interact with the request processor, and register filters and handlers.


Phase 3 - IN PROGRESS (12/2002)

Once the core is stable and running on tclHTTPD,  we'll implement separate deployment containers for CGI, FastCGI and Apache,  ensuring that OpenACS can run anywhere.  We will also need to work on completely replacing AOLServer module dependencies like ns_xml.

Phase 4
Phase 4 is the blue sky phase.  Once we're running pretty much anywhere,  we can
  • bundle up OpenACS into a single .exe file for deployment,  
  • play with TCL Blend or IBM's bean scripting framework for j2ee integration (JDBC, JAAS support),  
  • code COM/ADO or .NET integration using tcom & TCLScript,  
  • prototype a WebDAV implementation using apache's mod_tcl and mod_webdav, or by using Zope as a proxy to the content repository
  • mess around with performance maximization use a caching mod_proxy, Edge Side Includes, fastCGI and tux,  
  • migrate our containers to use AOLServer's forthcoming unbundled libraries, 
  • or implement my personal favorite,  MSSQL Server support.  



Status
mocked up = proc signature has been implemented,  returning reasonable (but probably hard-coded) values
tclHTTPD = web pages running under pure-tcl web server
FastCGI = multiple independent interpreters capable of responding to FastCGI requests
Apache/mod_tcl = ns_ procs have been ported to mod_tcl API so that OpenACS can run under native Apache module

Task/Functionality
Assignee
mocked up
tclsh
tclHTTPD
Apache + mod_fastcgi
IIS/tcom
ns_db*
MC

7/4
11/21/02
12/29/02

ns_config/config file parsing
MC





query processor / nstcl
JS

9/27
11/21/02
12/29/02
ns_cache
JS
10/1
in-progress


installer
JS

9/30
12/29/02
nsv_*  -  single interpreter
JS
9/4


12/29/02
nsv_* - multiple interpreter
MC
9/12
in progress



ns_info
JS
9/4


12/29/02
ns_xml -> tDOM
JS
9/12


12/29/02
request processor
JS

11/19/02 11/21/02
12/29/02
ns_register_proc
JS
9/4

in-progress

ns_register_filter
JS
9/4
in-progress


ns_scheduled_proc
MC
9/1




templating
JS

11/02

12/29/02

basic unit testing framework