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.
Right now, I've implemented nsv_ and ns_config functionality as globals, and I've implemented enough of ns_xml to successfully parse xql files using tDOM. I am currently working on a pure-tcl pg_bind function.
I'm doing the bulk of my work on the bootstrap code using TclPro's visual IDE ( screenshot ), and I'm finding breakpoints and watch variables really useful. I hope my next generally useful deliverable to be a set of scripts which enable 'headless' installation (i.e. no browser required) of OpenACS.
Request notifications