Index: main/waeup.uniben/trunk/buildout-zeo.cfg
===================================================================
--- main/waeup.uniben/trunk/buildout-zeo.cfg	(revision 17595)
+++ main/waeup.uniben/trunk/buildout-zeo.cfg	(revision 17596)
@@ -19,4 +19,5 @@
     zeo1_ini
     zeo2_ini
+    zeo3_ini
     coverage-detect
     coverage-report
@@ -33,10 +34,14 @@
     zope_conf_zeo_1
     zope_conf_zeo_2
+    zope_conf_zeo_3
     zeo1_ini
     zeo2_ini
+    zeo3_ini
     zeo1_conf
     zeo2_conf
+    zeo3_conf
     zeo_client1
     zeo_client2
+    zeo_client3
 
 [zeo_server]
@@ -93,4 +98,15 @@
 # 'extra' is copied verbatim. Use it for product config sections and so.
 
+[zope_conf_zeo_3]
+recipe = collective.recipe.template
+input = etc/zope_zeo3.conf.in
+output = ${buildout:parts-directory}/etc/zope_zeo3.conf
+filestorage = ${buildout:directory}/var/filestorage
+blobstorage = ${buildout:directory}/var/blobstorage
+logfiles = ${buildout:directory}/var/log
+extra =
+# extra = <grokwarnings>True</grokwarnings>
+# 'extra' is copied verbatim. Use it for product config sections and so.
+
 [zeo1_ini]
 recipe = collective.recipe.template
@@ -102,4 +118,9 @@
 input = etc/themed/zeo2.ini.in
 output = ${buildout:parts-directory}/etc/themed-zeo2.ini
+
+[zeo3_ini]
+recipe = collective.recipe.template
+input = etc/themed/zeo3.ini.in
+output = ${buildout:parts-directory}/etc/themed-zeo3.ini
 
 [zeo1_conf]
@@ -113,4 +134,8 @@
 output = ${buildout:parts-directory}/etc/zeo2.conf
 
+[zeo3_conf]
+recipe = collective.recipe.template
+input = etc/zeo3.conf.in
+output = ${buildout:parts-directory}/etc/zeo3.conf
 
 [zeo_client1]
@@ -128,2 +153,8 @@
 scripts = kofactl=zeo_client2
 
+[zeo_client3]
+# See http://pypi.python.org/pypi/zc.recipe.egg for details...
+recipe = zc.recipe.egg
+eggs = waeup.uniben [beaker, diazo]
+arguments = "${buildout:parts-directory}/etc/zeo3.conf"
+scripts = kofactl=zeo_client3
Index: main/waeup.uniben/trunk/etc/themed/zeo3.ini.in
===================================================================
--- main/waeup.uniben/trunk/etc/themed/zeo3.ini.in	(revision 17596)
+++ main/waeup.uniben/trunk/etc/themed/zeo3.ini.in	(revision 17596)
@@ -0,0 +1,126 @@
+# deploy.ini
+#
+# Deployment configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi, async, async_trace
+
+[handlers]
+keys = null, console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+#handlers = accesslog
+handlers = null
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[handler_null]
+# you can use 'NullHandler' (w/o the path) if under Python 2.7+
+class = waeup.kofa.utils.helpers.NullHandler
+args = ()
+level = NOTSET
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo3.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo3_async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo3_async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[app:content]
+use = egg:${kofa_params:devel_pkg}
+filter-with = translogger
+
+[app:static]
+use = egg:Paste#static
+document_root = %(LAYOUT_DIR)s/static/
+
+[app:static_custom]
+use = egg:Paste#static
+document_root = %(LAYOUT_CUSTOM_DIR)s/static/
+
+[composite:main]
+use = egg:Paste#urlmap
+/static = static
+/static_custom = static_custom
+/ = default
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:zeo3_port}
+threadpool_workers = ${kofa_params:threadpool_workers}
+use_threadpool = True
+
+[filter:theme]
+use = egg:diazo
+rules = file:///%(LAYOUT_CUSTOM_DIR)s/rules.xml
+prefix = /
+doctype = <!DOCTYPE html>
+# set to true, if you want rules.xml being rebuild on each request
+debug = false
+
+[pipeline:default]
+pipeline = theme
+           content
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope_zeo3.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid3.txt
+# the directory where all real diazo config is done (no trailing slash)
+LAYOUT_DIR = ${buildout:directory}/sources/waeup.kofa/layout
+STATIC_DIR = %(LAYOUT_DIR)s/static
+LAYOUT_CUSTOM_DIR = ${buildout:directory}/layout
+STATIC_CUSTOM_DIR = %(LAYOUT_CUSTOM_DIR)s/static
Index: main/waeup.uniben/trunk/etc/zeo3.conf.in
===================================================================
--- main/waeup.uniben/trunk/etc/zeo3.conf.in	(revision 17596)
+++ main/waeup.uniben/trunk/etc/zeo3.conf.in	(revision 17596)
@@ -0,0 +1,8 @@
+<runner>
+  program ${buildout:directory}/bin/paster serve --pid-file ${buildout:directory}/var/zeo3.pid ${buildout:directory}/parts/etc/themed-zeo3.ini
+  daemon on
+  transcript ${zope_conf:logfiles}/zdaemon-zeo3.log
+  socket-name ${zope_conf:logfiles}/zeo3.sock
+  # Enable this to run the child process as a different user
+  # user kofa
+</runner>
Index: main/waeup.uniben/trunk/etc/zope_zeo3.conf.in
===================================================================
--- main/waeup.uniben/trunk/etc/zope_zeo3.conf.in	(revision 17596)
+++ main/waeup.uniben/trunk/etc/zope_zeo3.conf.in	(revision 17596)
@@ -0,0 +1,47 @@
+# Identify the component configuration used to define the site:
+site-definition ${site_zcml:output}
+
+<zodb>
+
+  #cache-size
+
+  # num of concurrent pre-opened ZODB threads; default: 7
+  pool-size 7
+
+# Uncomment this if you want to connect to a ZEO server instead:
+  <zeoclient>
+    server localhost:7010
+    storage 1
+    # ZEO client cache, in bytes
+    cache-size 20MB
+    # Uncomment to have a persistent disk cache
+    client ${zope_conf_zeo_3:filestorage}/zeo3
+  </zeoclient>
+
+</zodb>
+
+<zodb async>
+  <zeoclient>
+    server localhost:7010
+    storage async
+    name async
+    # ZEO client cache, in bytes
+    cache-size 20MB
+    # Uncomment to have a persistent disk cache
+    client ${zope_conf_zeo_3:filestorage}/zeo3_async
+  </zeoclient>
+</zodb>
+
+<eventlog>
+  # This sets up logging to a file.
+  # The "path" setting can be a relative or absolute
+  # filesystem path.
+
+  <logfile>
+    path ${zope_conf:logfiles}/zeo3_z3.log
+    formatter zope.exceptions.log.Formatter
+  </logfile>
+
+</eventlog>
+
+${zope_conf:extra}
