diff -Nru prudence-clojure-1.0/content/applications/prudence-admin/web/dynamic/index.html prudence-clojure-1.0/content/applications/prudence-admin/web/dynamic/index.html --- prudence-clojure-1.0/content/applications/prudence-admin/web/dynamic/index.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-admin/web/dynamic/index.html 2011-01-08 00:56:02.000000000 +0000 @@ -1,10 +1,10 @@ <%velocity -#set($component = $application.globals.get('com.threecrickets.prudence.component')) -#set($applications = $component.context.attributes.get('com.threecrickets.prudence.applications')) -#set($version = $component.context.attributes.get('com.threecrickets.prudence.version')) -#set($revision = $component.context.attributes.get('com.threecrickets.prudence.revision')) -#set($flavor = $component.context.attributes.get('com.threecrickets.prudence.flavor')) +#set($component = $application.globals['com.threecrickets.prudence.component']) +#set($applications = $component.context.attributes['com.threecrickets.prudence.applications']) +#set($version = $component.context.attributes['com.threecrickets.prudence.version']) +#set($revision = $component.context.attributes['com.threecrickets.prudence.revision']) +#set($flavor = $component.context.attributes['com.threecrickets.prudence.flavor']) #set($action = $conversation.query.action) #set($item = $conversation.query.item) @@ -13,11 +13,11 @@ #set($Integer = 0) #set($index = $Integer.valueOf($index) - 1) #if($item == 'host') - #set($item = $component.hosts.get($index)) + #set($item = $component.hosts[$index]) #elseif($item == 'server') - #set($item = $component.servers.get($index)) + #set($item = $component.servers[$index]) #elseif($item == 'application') - #set($item = $applications.get($index)) + #set($item = $applications[$index]) #else #set($item = '') #end @@ -84,7 +84,7 @@ Author: $application.author

- #if($application.started)Running (stop)#else Stopped (start)#end + #if($application.started)Running (stop)#else Stopped (start)#end

#end @@ -120,7 +120,7 @@

- #if($host.started)Running (stop)#else Stopped (start)#end + #if($host.started)Running (stop)#else Stopped (start)#end

#end @@ -135,7 +135,7 @@ For protocols: $server.protocols

- #if($server.started)Running (stop)#else Stopped (start)#end + #if($server.started)Running (stop)#else Stopped (start)#end

#end diff -Nru prudence-clojure-1.0/content/applications/prudence-admin/web/static/style/soft-cricket.css prudence-clojure-1.0/content/applications/prudence-admin/web/static/style/soft-cricket.css --- prudence-clojure-1.0/content/applications/prudence-admin/web/static/style/soft-cricket.css 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-admin/web/static/style/soft-cricket.css 2011-01-08 00:56:02.000000000 +0000 @@ -8,7 +8,7 @@ margin-top: 0px; margin-bottom: 0px; __background-color: #e0ffe0; - background: url(../images/background.png); /* From: http://www.eosdev.com/Backgrounds/Back_Tilework/EosTilework2h.htm */ + background: url(../media/background.png); /* From: http://www.eosdev.com/Backgrounds/Back_Tilework/EosTilework2h.htm */ font-family: 'Lucida Sans Unicode', 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; } @@ -16,7 +16,7 @@ div#main { padding-left: 22px; padding-right: 22px; - _background-image: url(../../images/background-footer.png); + _background-image: url(../../media/background-footer.png); background-color: #ffd8d0; } div#main-content { @@ -62,7 +62,7 @@ div.hr { height: 57px; - background-image: url(../images/ruler.png); + background-image: url(../media/ruler.png); background-repeat: no-repeat; background-position: center; } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/tasks/startup.clj prudence-clojure-1.0/content/applications/prudence-test/tasks/startup.clj --- prudence-clojure-1.0/content/applications/prudence-test/tasks/startup.clj 1970-01-01 00:00:00.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/tasks/startup.clj 2011-01-08 00:56:02.000000000 +0000 @@ -0,0 +1,2 @@ + +(.. application getLogger (info "The startup task says hello!")) diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/dynamic/test/velocity.html prudence-clojure-1.0/content/applications/prudence-test/web/dynamic/test/velocity.html --- prudence-clojure-1.0/content/applications/prudence-test/web/dynamic/test/velocity.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/dynamic/test/velocity.html 2011-01-08 00:56:02.000000000 +0000 @@ -44,12 +44,11 @@ #macro(printAdapter $adapter)

- Adapter: $adapter.attributes.get('name') version $adapter.attributes.get('version')
- Language: $adapter.attributes.get('language.name') version $adapter.attributes.get('language.version')
+ Adapter: $adapter.attributes.name version $adapter.attributes.version
+ Language: $adapter.attributes['language.name'] version $adapter.attributes['language.version']
Tags: - #set($size = $adapter.attributes.get('tags').size()) - #foreach($tag in $adapter.attributes.get('tags')) - $tag#if($velocityCount < $size),#end + #foreach($tag in $adapter.attributes.tags) + $tag#if($foreach.hasNext),#end #end #end diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-frame.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-frame.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-frame.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-frame.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -All Classes (Prudence 1.0-789) +All Classes (Prudence 1.0-${revision.max}) - + diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-noframe.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-noframe.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-noframe.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/allclasses-noframe.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -All Classes (Prudence 1.0-789) +All Classes (Prudence 1.0-${revision.max}) - + diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTaskCollector.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTaskCollector.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTaskCollector.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTaskCollector.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ApplicationTaskCollector (Prudence 1.0-789) +ApplicationTaskCollector (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ApplicationTaskCollector (Prudence 1.0-789)"; + parent.document.title="ApplicationTaskCollector (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTask.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTask.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTask.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/ApplicationTask.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ApplicationTask (Prudence 1.0-789) +ApplicationTask (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ApplicationTask (Prudence 1.0-789)"; + parent.document.title="ApplicationTask (Prudence 1.0-${revision.max})"; } } @@ -124,8 +124,13 @@ service. Defaults to "application". See getApplicationServiceName().

  • + com.threecrickets.prudence.ApplicationTask.commonLibraryDirectory: + File. Defaults to the DocumentFileSource.getBasePath() plus + "../../../libraries/". See getCommonLibraryDirectory().
  • +
  • com.threecrickets.prudence.ApplicationTask.defaultLanguageTag: - String, defaults to "js". See getDefaultLanguageTag().
  • + String, defaults to "javascript". See + getDefaultLanguageTag().
  • com.threecrickets.prudence.ApplicationTask.defaultName: String, defaults to "default". See getDefaultName().
  • @@ -222,6 +227,15 @@ + File +getCommonLibraryDirectory() + +
    +          Executables from all applications might use this directory for importing + libraries. + + +  String getDefaultLanguageTag() @@ -297,16 +311,6 @@ - File -getLibraryDirectoryRelative() - -
    -          If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). - - -  Writer getWriter() @@ -552,7 +556,7 @@ public String getDefaultLanguageTag()
    The default language tag name to be used if the script doesn't specify - one. Defaults to "js". + one. Defaults to "javascript".

    This setting can be configured by setting an attribute named com.threecrickets.prudence.ApplicationTask.defaultLanguageTag @@ -660,21 +664,26 @@


    -

    -getLibraryDirectoryRelative

    +

    +getCommonLibraryDirectory

    -public File getLibraryDirectoryRelative()
    +public File getCommonLibraryDirectory()
    -
    If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). Otherwise, it's null. +
    Executables from all applications might use this directory for importing + libraries. If the getDocumentSource() is a + DocumentFileSource, then this will default to the + DocumentFileSource.getBasePath() plus "../../../libraries/". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.ApplicationTask.commonLibraryDirectory + in the application's Context.

    -
    Returns:
    The relative library directory or null
    +
    Returns:
    The common library directory or null
    See Also:
    ExecutionContext.getLibraryLocations()

    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/CacheEntry.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/CacheEntry.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/CacheEntry.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/CacheEntry.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -CacheEntry (Prudence 1.0-789) +CacheEntry (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="CacheEntry (Prudence 1.0-789)"; + parent.document.title="CacheEntry (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/Cache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/Cache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/Cache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/Cache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Cache (Prudence 1.0-789) +Cache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Cache (Prudence 1.0-789)"; + parent.document.title="Cache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/ChainCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/ChainCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/ChainCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/ChainCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ChainCache (Prudence 1.0-789) +ChainCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ChainCache (Prudence 1.0-789)"; + parent.document.title="ChainCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/CacheEntry.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/CacheEntry.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/CacheEntry.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/CacheEntry.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.CacheEntry (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.CacheEntry (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.CacheEntry (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.CacheEntry (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/Cache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/Cache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/Cache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/Cache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Interface com.threecrickets.prudence.cache.Cache (Prudence 1.0-789) +Uses of Interface com.threecrickets.prudence.cache.Cache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Interface com.threecrickets.prudence.cache.Cache (Prudence 1.0-789)"; + parent.document.title="Uses of Interface com.threecrickets.prudence.cache.Cache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/ChainCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/ChainCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/ChainCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/ChainCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.ChainCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.ChainCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.ChainCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.ChainCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/FakeCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/FakeCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/FakeCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/FakeCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.FakeCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.FakeCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.FakeCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.FakeCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/H2Cache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/H2Cache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/H2Cache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/H2Cache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.H2Cache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.H2Cache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.H2Cache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.H2Cache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/HazelcastCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/HazelcastCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/HazelcastCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/HazelcastCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.HazelcastCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.HazelcastCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.HazelcastCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.HazelcastCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/InProcessMemoryCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/InProcessMemoryCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/InProcessMemoryCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/InProcessMemoryCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.InProcessMemoryCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.InProcessMemoryCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.InProcessMemoryCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.InProcessMemoryCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MemcachedCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MemcachedCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MemcachedCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MemcachedCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.MemcachedCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.MemcachedCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.MemcachedCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.MemcachedCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MongoCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MongoCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MongoCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/MongoCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.MongoCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.MongoCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.MongoCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.MongoCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/SqlCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/SqlCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/SqlCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/SqlCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.SqlCache (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.SqlCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.SqlCache (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.SqlCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/TaggedCacheEntry.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/TaggedCacheEntry.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/TaggedCacheEntry.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/class-use/TaggedCacheEntry.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.cache.TaggedCacheEntry (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.cache.TaggedCacheEntry (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.cache.TaggedCacheEntry (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.cache.TaggedCacheEntry (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/FakeCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/FakeCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/FakeCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/FakeCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -FakeCache (Prudence 1.0-789) +FakeCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="FakeCache (Prudence 1.0-789)"; + parent.document.title="FakeCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/H2Cache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/H2Cache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/H2Cache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/H2Cache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -H2Cache (Prudence 1.0-789) +H2Cache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="H2Cache (Prudence 1.0-789)"; + parent.document.title="H2Cache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/HazelcastCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/HazelcastCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/HazelcastCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/HazelcastCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -HazelcastCache (Prudence 1.0-789) +HazelcastCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="HazelcastCache (Prudence 1.0-789)"; + parent.document.title="HazelcastCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/InProcessMemoryCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/InProcessMemoryCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/InProcessMemoryCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/InProcessMemoryCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -InProcessMemoryCache (Prudence 1.0-789) +InProcessMemoryCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="InProcessMemoryCache (Prudence 1.0-789)"; + parent.document.title="InProcessMemoryCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MemcachedCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MemcachedCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MemcachedCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MemcachedCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -MemcachedCache (Prudence 1.0-789) +MemcachedCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MemcachedCache (Prudence 1.0-789)"; + parent.document.title="MemcachedCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MongoCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MongoCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MongoCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/MongoCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -MongoCache (Prudence 1.0-789) +MongoCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="MongoCache (Prudence 1.0-789)"; + parent.document.title="MongoCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-frame.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-frame.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-frame.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-frame.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.cache (Prudence 1.0-789) +com.threecrickets.prudence.cache (Prudence 1.0-${revision.max}) - + diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-summary.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-summary.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-summary.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-summary.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.cache (Prudence 1.0-789) +com.threecrickets.prudence.cache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence.cache (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence.cache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-tree.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-tree.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-tree.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-tree.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.cache Class Hierarchy (Prudence 1.0-789) +com.threecrickets.prudence.cache Class Hierarchy (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence.cache Class Hierarchy (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence.cache Class Hierarchy (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-use.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-use.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-use.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/package-use.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Package com.threecrickets.prudence.cache (Prudence 1.0-789) +Uses of Package com.threecrickets.prudence.cache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Package com.threecrickets.prudence.cache (Prudence 1.0-789)"; + parent.document.title="Uses of Package com.threecrickets.prudence.cache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/SqlCache.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/SqlCache.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/SqlCache.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/SqlCache.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -SqlCache (Prudence 1.0-789) +SqlCache (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SqlCache (Prudence 1.0-789)"; + parent.document.title="SqlCache (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/TaggedCacheEntry.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/TaggedCacheEntry.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/TaggedCacheEntry.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/cache/TaggedCacheEntry.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -TaggedCacheEntry (Prudence 1.0-789) +TaggedCacheEntry (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="TaggedCacheEntry (Prudence 1.0-789)"; + parent.document.title="TaggedCacheEntry (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTaskCollector.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTaskCollector.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTaskCollector.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTaskCollector.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.ApplicationTaskCollector (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.ApplicationTaskCollector (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.ApplicationTaskCollector (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.ApplicationTaskCollector (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTask.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTask.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTask.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/ApplicationTask.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.ApplicationTask (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.ApplicationTask (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.ApplicationTask (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.ApplicationTask (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedCacheKeyPatternHandler.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedCacheKeyPatternHandler.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedCacheKeyPatternHandler.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedCacheKeyPatternHandler.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.DelegatedCacheKeyPatternHandler (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.DelegatedCacheKeyPatternHandler (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedCacheKeyPatternHandler (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedCacheKeyPatternHandler (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.DelegatedFilter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.DelegatedFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedFilter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedHandler.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedHandler.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedHandler.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedHandler.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.DelegatedHandler (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.DelegatedHandler (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedHandler (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedHandler (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedResource.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedResource.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedResource.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedResource.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.DelegatedResource (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.DelegatedResource (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedResource (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedResource (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedStatusService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedStatusService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedStatusService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/DelegatedStatusService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.DelegatedStatusService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.DelegatedStatusService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedStatusService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.DelegatedStatusService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/GeneratedTextResource.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/GeneratedTextResource.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/GeneratedTextResource.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/GeneratedTextResource.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.GeneratedTextResource (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.GeneratedTextResource (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.GeneratedTextResource (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.GeneratedTextResource (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceApplication.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceApplication.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceApplication.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceApplication.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.PrudenceApplication (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.PrudenceApplication (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.PrudenceApplication (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.PrudenceApplication (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceDaemon.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceDaemon.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceDaemon.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceDaemon.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.PrudenceDaemon (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.PrudenceDaemon (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.PrudenceDaemon (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.PrudenceDaemon (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceRouter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceRouter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceRouter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/PrudenceRouter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.PrudenceRouter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.PrudenceRouter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.PrudenceRouter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.PrudenceRouter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/SourceCodeResource.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/SourceCodeResource.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/SourceCodeResource.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/class-use/SourceCodeResource.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.SourceCodeResource (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.SourceCodeResource (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.SourceCodeResource (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.SourceCodeResource (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedCacheKeyPatternHandler.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedCacheKeyPatternHandler.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedCacheKeyPatternHandler.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedCacheKeyPatternHandler.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedCacheKeyPatternHandler (Prudence 1.0-789) +DelegatedCacheKeyPatternHandler (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedCacheKeyPatternHandler (Prudence 1.0-789)"; + parent.document.title="DelegatedCacheKeyPatternHandler (Prudence 1.0-${revision.max})"; } } @@ -127,9 +127,10 @@ Constructor Summary -DelegatedCacheKeyPatternHandler(String documentName, +DelegatedCacheKeyPatternHandler(String documentName, DocumentSource<Executable> documentSource, - LanguageManager languageManager) + LanguageManager languageManager, + Context context)
              Construction. @@ -175,7 +176,7 @@ Methods inherited from class com.threecrickets.prudence.DelegatedHandler -getApplicationServiceName, getDefaultLanguageTag, getDocumentName, getDocumentServiceName, getDocumentSource, getErrorWriter, getExecutionController, getFileUploadDirectory, getFileUploadSizeThreshold, getLanguageManager, getLibraryDirectory, getLibraryDirectoryRelative, getWriter, handle, isPrepare, setApplicationServiceName, setDefaultLanguageTag, setDocumentServiceName, setErrorWriter, setExecutionController, setFileUploadDirectory, setFileUploadSizeThreshold, setLibraryDirectory, setPrepare, setWriter +getApplicationServiceName, getCommonLibraryDirectory, getContext, getDefaultLanguageTag, getDocumentName, getDocumentServiceName, getDocumentSource, getEntryPointValidityCache, getErrorWriter, getExecutionController, getFileUploadDirectory, getFileUploadSizeThreshold, getLanguageManager, getLibraryDirectory, getWriter, handle, isPrepare   @@ -200,17 +201,18 @@ -

    +

    DelegatedCacheKeyPatternHandler

     public DelegatedCacheKeyPatternHandler(String documentName,
                                            DocumentSource<Executable> documentSource,
    -                                       LanguageManager languageManager)
    + LanguageManager languageManager, + Context context)
    Construction.

    -
    Parameters:
    documentName - The document name
    documentSource - The document source
    languageManager - The language manager
    +
    Parameters:
    documentName - The document name
    documentSource - The document source
    languageManager - The language manager
    context - The context used to configure the handler
    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedFilter (Prudence 1.0-789) +DelegatedFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedFilter (Prudence 1.0-789)"; + parent.document.title="DelegatedFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedHandler.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedHandler.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedHandler.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedHandler.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedHandler (Prudence 1.0-789) +DelegatedHandler (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedHandler (Prudence 1.0-789)"; + parent.document.title="DelegatedHandler (Prudence 1.0-${revision.max})"; } } @@ -119,7 +119,63 @@ Most likely, you will not want to output anything from the executable. However, this redirection is provided as a debugging convenience.

    - For a more sophisticated resource delegate, see DelegatedResource. + For a more sophisticated resource delegate, see + DelegatedResourceHandler. +

    + Instances are not thread-safe. +

    + Summary of settings configured via the application's Context: +

    @@ -140,9 +196,10 @@ Constructor Summary -DelegatedHandler(String documentName, +DelegatedHandler(String documentName, DocumentSource<Executable> documentSource, - LanguageManager languageManager) + LanguageManager languageManager, + Context context)
              Construction. @@ -163,7 +220,25 @@ getApplicationServiceName()
    -          Defaults to "application". +          The name of the global variable with which to access the application + service. + + + + File +getCommonLibraryDirectory() + +
    +          Executables from all applications might use this directory for importing + libraries. + + + + Context +getContext() + +
    +          The context used to configure the handler. @@ -171,7 +246,8 @@ getDefaultLanguageTag()
    -          Defaults to "javascript". +          The default language tag name to be used if the script doesn't specify + one. @@ -187,7 +263,8 @@ getDocumentServiceName()
    -          Defaults to "document". +          The name of the global variable with which to access the document + service. @@ -199,11 +276,19 @@ + ConcurrentMap<String,Boolean> +getEntryPointValidityCache(Executable executable) + +
    +          A cache for entry point validity. + + +  Writer getErrorWriter()
    -          Defaults to standard error. +          Same as getWriter(), for standard error. @@ -211,7 +296,7 @@ getExecutionController()
    -          Defaults to null. +          An optional ExecutionController to be used with the executable. @@ -219,8 +304,7 @@ getFileUploadDirectory()
    -          Defaults to the DocumentFileSource.getBasePath() plus - "../uploads/". +          The directory in which to place uploaded files. @@ -228,7 +312,7 @@ getFileUploadSizeThreshold()
    -          Defaults to zero. +          The size in bytes beyond which uploaded files will be stored to disk. @@ -236,7 +320,7 @@ getLanguageManager()
    -            +          The LanguageManager used to create the language adapters. @@ -244,18 +328,7 @@ getLibraryDirectory()
    -          Defaults to the DocumentFileSource.getBasePath() plus - "../library/". - - - - File -getLibraryDirectoryRelative() - -
    -          If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). +          Executables might use this directory for importing libraries. @@ -263,7 +336,7 @@ getWriter()
    -          Defaults to standard output. +          The Writer used by the Executable. @@ -280,87 +353,7 @@ isPrepare()
    -          Defaults to true. - - - - void -setApplicationServiceName(String applicationServiceName) - -
    -            - - - - void -setDefaultLanguageTag(String defaultLanguageTag) - -
    -            - - - - void -setDocumentServiceName(String documentServiceName) - -
    -            - - - - void -setErrorWriter(Writer errorWriter) - -
    -            - - - - void -setExecutionController(ExecutionController executionController) - -
    -            - - - - void -setFileUploadDirectory(File fileUploadDirectory) - -
    -            - - - - void -setFileUploadSizeThreshold(int fileUploadSizeThreshold) - -
    -            - - - - void -setLibraryDirectory(File libraryDirectory) - -
    -            - - - - void -setPrepare(boolean prepare) - -
    -            - - - - void -setWriter(Writer writer) - -
    -            +          Whether to prepare the executables.   @@ -385,17 +378,18 @@ -

    +

    DelegatedHandler

     public DelegatedHandler(String documentName,
                             DocumentSource<Executable> documentSource,
    -                        LanguageManager languageManager)
    + LanguageManager languageManager, + Context context)
    Construction.

    -
    Parameters:
    documentName - The document name
    documentSource - The document source
    languageManager - The language manager
    +
    Parameters:
    documentName - The document name
    documentSource - The document source
    languageManager - The language manager
    context - The context used to configure the handler
    @@ -427,44 +421,59 @@
    -
    Returns:
    The documentName
    +
    Returns:
    The document name

    -

    -getLanguageManager

    +

    +getContext

    -public LanguageManager getLanguageManager()
    +public Context getContext()
    +
    The context used to configure the handler. +

    -
    Returns:
    The languageManager
    +
    Returns:
    The context

    -

    -getDefaultLanguageTag

    +

    +getLanguageManager

    -public String getDefaultLanguageTag()
    +public LanguageManager getLanguageManager()
    -
    Defaults to "javascript". +
    The LanguageManager used to create the language adapters. Uses a + default instance, but can be set to something else. +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.languageManager + in the application's Context.

    -
    Returns:
    The default language tag
    See Also:
    setDefaultLanguageTag(String)
    +
    Returns:
    The language manager

    -

    -setDefaultLanguageTag

    +

    +getDefaultLanguageTag

    -public void setDefaultLanguageTag(String defaultLanguageTag)
    +public String getDefaultLanguageTag()
    +
    The default language tag name to be used if the script doesn't specify + one. Defaults to "javascript". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.defaultLanguageTag + in the application's Context. +

    -
    Parameters:
    defaultLanguageTag - The default language tag
    See Also:
    getDefaultLanguageTag()
    + +
    Returns:
    The default language tag

    @@ -474,22 +483,17 @@
     public boolean isPrepare()
    -
    Defaults to true. +
    Whether to prepare the executables. Preparation increases initialization + time and reduces execution time. Note that not all languages support + preparation as a separate operation. Defaults to true. +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.prepare in the + application's Context.

    -
    Returns:
    Whether to prepare executables
    See Also:
    setPrepare(boolean)
    -
    -
    -
    - -

    -setPrepare

    -
    -public void setPrepare(boolean prepare)
    -
    -
    -
    Parameters:
    prepare - Whether to prepare executables
    See Also:
    isPrepare()
    +
    Returns:
    Whether to prepare executables

    @@ -499,22 +503,16 @@
     public Writer getWriter()
    -
    Defaults to standard output. +
    The Writer used by the Executable. Defaults to standard + output. +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.writer in the + application's Context.

    -
    Returns:
    The writer
    See Also:
    setWriter(Writer)
    -
    -
    -
    - -

    -setWriter

    -
    -public void setWriter(Writer writer)
    -
    -
    -
    Parameters:
    writer - The writer
    See Also:
    getWriter()
    +
    Returns:
    The writer

    @@ -524,22 +522,16 @@
     public Writer getErrorWriter()
    -
    Defaults to standard error. +
    Same as getWriter(), for standard error. Defaults to standard + error. +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.errorWriter in + the application's Context.

    -
    Returns:
    The error writer
    See Also:
    setErrorWriter(Writer)
    -
    -
    -
    - -

    -setErrorWriter

    -
    -public void setErrorWriter(Writer errorWriter)
    -
    -
    -
    Parameters:
    errorWriter - The error writer
    See Also:
    getErrorWriter()
    +
    Returns:
    The error writer

    @@ -549,39 +541,39 @@
     public File getLibraryDirectory()
    -
    Defaults to the DocumentFileSource.getBasePath() plus - "../library/". +
    Executables might use this directory for importing libraries. If the + getDocumentSource() is a DocumentFileSource, then this + will default to the DocumentFileSource.getBasePath() plus + "../libraries/". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.libraryDirectory + in the application's Context.

    -
    Returns:
    The library directory
    See Also:
    setLibraryDirectory(File)
    +
    Returns:
    The library directory or null
    See Also:
    ExecutionContext.getLibraryLocations()

    -

    -setLibraryDirectory

    +

    +getCommonLibraryDirectory

    -public void setLibraryDirectory(File libraryDirectory)
    +public File getCommonLibraryDirectory()
    -
    -
    Parameters:
    libraryDirectory - The library directory
    See Also:
    getLibraryDirectory()
    -
    -
    -
    - -

    -getLibraryDirectoryRelative

    -
    -public File getLibraryDirectoryRelative()
    -
    -
    If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). Otherwise, it's null. +
    Executables from all applications might use this directory for importing + libraries. If the getDocumentSource() is a + DocumentFileSource, then this will default to the + DocumentFileSource.getBasePath() plus "../../../libraries/". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.commonLibraryDirectory + in the application's Context.

    -
    Returns:
    The relative library directory or null
    +
    Returns:
    The common library directory or null
    See Also:
    ExecutionContext.getLibraryLocations()

    @@ -591,22 +583,16 @@
     public String getDocumentServiceName()
    -
    Defaults to "document". +
    The name of the global variable with which to access the document + service. Defaults to "document". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.documentServiceName + in the application's Context.

    -
    Returns:
    The document service name
    See Also:
    setDocumentServiceName(String)
    -
    -
    -
    - -

    -setDocumentServiceName

    -
    -public void setDocumentServiceName(String documentServiceName)
    -
    -
    -
    Parameters:
    documentServiceName - The document service name
    See Also:
    getDocumentServiceName()
    +
    Returns:
    The document service name

    @@ -616,22 +602,16 @@
     public String getApplicationServiceName()
    -
    Defaults to "application". +
    The name of the global variable with which to access the application + service. Defaults to "application". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.applicationServiceName + in the application's Context.

    -
    Returns:
    The application service name
    See Also:
    setApplicationServiceName(String)
    -
    -
    -
    - -

    -setApplicationServiceName

    -
    -public void setApplicationServiceName(String applicationServiceName)
    -
    -
    -
    Parameters:
    applicationServiceName - The application service name
    See Also:
    getApplicationServiceName()
    +
    Returns:
    The application service name

    @@ -641,22 +621,37 @@
     public ExecutionController getExecutionController()
    -
    Defaults to null. +
    An optional ExecutionController to be used with the executable. + Useful for exposing your own global variables to the executable. +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.executionController + in the application's Context.

    -
    Returns:
    The execution controller
    See Also:
    setExecutionController(ExecutionController)
    +
    Returns:
    The execution controller or null if none used

    -

    -setExecutionController

    +

    +getFileUploadDirectory

    -public void setExecutionController(ExecutionController executionController)
    +public File getFileUploadDirectory()
    +
    The directory in which to place uploaded files. If the + getDocumentSource() is a DocumentFileSource, then this + will default to the DocumentFileSource.getBasePath() plus + "../uploads/". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.fileUploadDirectory + in the application's Context. +

    -
    Parameters:
    executionController - The execution controller
    See Also:
    getExecutionController()
    + +
    Returns:
    The file upload directory or null

    @@ -666,48 +661,30 @@
     public int getFileUploadSizeThreshold()
    -
    Defaults to zero. +
    The size in bytes beyond which uploaded files will be stored to disk. + Defaults to zero, meaning that all uploaded files will be stored to disk. +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedHandler.fileUploadSizeThreshold + in the application's Context.

    -
    Returns:
    The file upload size threshold
    See Also:
    setFileUploadSizeThreshold(int)
    +
    Returns:
    The file upload size threshold

    -

    -setFileUploadSizeThreshold

    -
    -public void setFileUploadSizeThreshold(int fileUploadSizeThreshold)
    -
    -
    -
    Parameters:
    fileUploadSizeThreshold - The file upload size threshold
    See Also:
    getFileUploadSizeThreshold()
    -
    -
    -
    - -

    -getFileUploadDirectory

    +

    +getEntryPointValidityCache

    -public File getFileUploadDirectory()
    +public ConcurrentMap<String,Boolean> getEntryPointValidityCache(Executable executable)
    -
    Defaults to the DocumentFileSource.getBasePath() plus - "../uploads/". +
    A cache for entry point validity.

    - -
    Returns:
    The file upload directory
    See Also:
    setFileUploadDirectory(File)
    -
    -
    -
    - -

    -setFileUploadDirectory

    -
    -public void setFileUploadDirectory(File fileUploadDirectory)
    -
    -
    -
    Parameters:
    fileUploadDirectory - The file upload directory
    See Also:
    getFileUploadDirectory()
    +
    Parameters:
    executable - The executable +
    Returns:
    The entry point validity cache

    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedResource.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedResource.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedResource.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedResource.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedResource (Prudence 1.0-789) +DelegatedResource (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedResource (Prudence 1.0-789)"; + parent.document.title="DelegatedResource (Prudence 1.0-${revision.max})"; } } @@ -144,12 +144,16 @@ service. Defaults to "application". See getApplicationServiceName().

  • + com.threecrickets.prudence.DelegatedResource.commonLibraryDirectory: + File. Defaults to the DocumentFileSource.getBasePath() plus + "../../../libraries/". See getCommonLibraryDirectory().
  • +
  • com.threecrickets.prudence.DelegatedResource.defaultCharacterSet: CharacterSet, defaults to CharacterSet.UTF_8. See getDefaultCharacterSet().
  • com.threecrickets.prudence.DelegatedResource.defaultLanguageTag: - String, defaults to "js". See getDefaultLanguageTag().
  • + String, defaults to "javascript". See getDefaultLanguageTag().
  • com.threecrickets.prudence.DelegatedResource.defaultName: String, defaults to "default". See getDefaultName().
  • @@ -335,6 +339,15 @@ + File +getCommonLibraryDirectory() + +
    +          Executables from all applications might use this directory for importing + libraries. + + +  CharacterSet getDefaultCharacterSet() @@ -512,16 +525,6 @@ - File -getLibraryDirectoryRelative() - -
    -          If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). - - -  Writer getWriter() @@ -815,7 +818,7 @@ public String getDefaultLanguageTag()
    The default language tag name to be used if the script doesn't specify - one. Defaults to "js". + one. Defaults to "javascript".

    This setting can be configured by setting an attribute named com.threecrickets.prudence.DelegatedResource.defaultLanguageTag @@ -1039,18 +1042,23 @@


    -

    -getLibraryDirectoryRelative

    +

    +getCommonLibraryDirectory

    -public File getLibraryDirectoryRelative()
    +public File getCommonLibraryDirectory()
    -
    If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). Otherwise, it's null. +
    Executables from all applications might use this directory for importing + libraries. If the getDocumentSource() is a + DocumentFileSource, then this will default to the + DocumentFileSource.getBasePath() plus "../../../libraries/". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.DelegatedResource.commonLibraryDirectory + in the application's Context.

    -
    Returns:
    The relative library directory or null
    +
    Returns:
    The common library directory or null
    See Also:
    ExecutionContext.getLibraryLocations()

    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedStatusService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedStatusService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedStatusService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/DelegatedStatusService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedStatusService (Prudence 1.0-789) +DelegatedStatusService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedStatusService (Prudence 1.0-789)"; + parent.document.title="DelegatedStatusService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/GeneratedTextResource.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/GeneratedTextResource.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/GeneratedTextResource.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/GeneratedTextResource.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -GeneratedTextResource (Prudence 1.0-789) +GeneratedTextResource (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="GeneratedTextResource (Prudence 1.0-789)"; + parent.document.title="GeneratedTextResource (Prudence 1.0-${revision.max})"; } } @@ -145,6 +145,10 @@ Integer, defaults to CLIENT_CACHING_MODE_CONDITIONAL. See getClientCachingMode().
  • + com.threecrickets.prudence.GeneratedTextResource.commonLibraryDirectory: + File. Defaults to the DocumentFileSource.getBasePath() plus + "../../../../libraries/". See getCommonLibraryDirectory().
  • +
  • com.threecrickets.prudence.GeneratedTextResource.conversationServiceName : The name of the global variable with which to access the conversation service. Defaults to "conversation". See @@ -159,7 +163,8 @@ getDefaultCharacterSet().
  • com.threecrickets.prudence.GeneratedTextResource.defaultLanguageTag: - String, defaults to "js". See getDefaultLanguageTag().
  • + String, defaults to "javascript". See + getDefaultLanguageTag().
  • com.threecrickets.prudence.GeneratedTextResource.defaultName: String, defaults to "index". See getDefaultName().
  • @@ -369,6 +374,15 @@ + File +getCommonLibraryDirectory() + +
    +          Executables from all applications might use this directory for importing + libraries. + + +  String getConversationServiceName() @@ -471,16 +485,6 @@ - File -getFragmentDirectoryRelative() - -
    -          If the getDocumentSource() is a DocumentFileSource, then - this is the fragment directory relative to the - DocumentFileSource.getBasePath(). - - -  DocumentSource<Executable> getHandlersDocumentSource() @@ -522,16 +526,6 @@ - File -getLibraryDirectoryRelative() - -
    -          If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). - - -  boolean isNegotiateEncoding() @@ -853,7 +847,7 @@ public String getDefaultLanguageTag()
    The default language tag to use if the first scriptlet doesn't specify - one. Defaults to "js". + one. Defaults to "javascript".

    This setting can be configured by setting an attribute named com.threecrickets.prudence.GeneratedTextResource.defaultLanguageTag @@ -1000,22 +994,6 @@


    -

    -getFragmentDirectoryRelative

    -
    -public File getFragmentDirectoryRelative()
    -
    -
    If the getDocumentSource() is a DocumentFileSource, then - this is the fragment directory relative to the - DocumentFileSource.getBasePath(). Otherwise, it's null. -

    -

    - -
    Returns:
    The relative fragment directory or null
    -
    -
    -
    -

    getLibraryDirectory

    @@ -1037,18 +1015,23 @@
     
     
    -

    -getLibraryDirectoryRelative

    +

    +getCommonLibraryDirectory

    -public File getLibraryDirectoryRelative()
    +public File getCommonLibraryDirectory()
    -
    If the getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). Otherwise, it's null. +
    Executables from all applications might use this directory for importing + libraries. If the getDocumentSource() is a + DocumentFileSource, then this will default to the + DocumentFileSource.getBasePath() plus "../../../../libraries/". +

    + This setting can be configured by setting an attribute named + com.threecrickets.prudence.GeneratedTextResource.commonLibraryDirectory + in the application's Context.

    -
    Returns:
    The relative library directory or null
    +
    Returns:
    The common library directory or null
    See Also:
    ExecutionContext.getLibraryLocations()

    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-frame.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-frame.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-frame.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-frame.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence (Prudence 1.0-789) +com.threecrickets.prudence (Prudence 1.0-${revision.max}) - + diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-summary.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-summary.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-summary.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-summary.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence (Prudence 1.0-789) +com.threecrickets.prudence (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-tree.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-tree.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-tree.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-tree.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence Class Hierarchy (Prudence 1.0-789) +com.threecrickets.prudence Class Hierarchy (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence Class Hierarchy (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence Class Hierarchy (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-use.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-use.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-use.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/package-use.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Package com.threecrickets.prudence (Prudence 1.0-789) +Uses of Package com.threecrickets.prudence (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Package com.threecrickets.prudence (Prudence 1.0-789)"; + parent.document.title="Uses of Package com.threecrickets.prudence (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceApplication.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceApplication.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceApplication.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceApplication.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -PrudenceApplication (Prudence 1.0-789) +PrudenceApplication (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="PrudenceApplication (Prudence 1.0-789)"; + parent.document.title="PrudenceApplication (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceDaemon.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceDaemon.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceDaemon.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceDaemon.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -PrudenceDaemon (Prudence 1.0-789) +PrudenceDaemon (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="PrudenceDaemon (Prudence 1.0-789)"; + parent.document.title="PrudenceDaemon (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceRouter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceRouter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceRouter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/PrudenceRouter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -PrudenceRouter (Prudence 1.0-789) +PrudenceRouter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="PrudenceRouter (Prudence 1.0-789)"; + parent.document.title="PrudenceRouter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ApplicationService (Prudence 1.0-789) +ApplicationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ApplicationService (Prudence 1.0-789)"; + parent.document.title="ApplicationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationTaskDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationTaskDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationTaskDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ApplicationTaskDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ApplicationTaskDocumentService (Prudence 1.0-789) +ApplicationTaskDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ApplicationTaskDocumentService (Prudence 1.0-789)"; + parent.document.title="ApplicationTaskDocumentService (Prudence 1.0-${revision.max})"; } } @@ -168,7 +168,7 @@ Methods inherited from class com.threecrickets.prudence.service.DocumentServiceBase -addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor +addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getRelativeFile, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor   diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.ApplicationService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.ApplicationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.ApplicationService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.ApplicationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationTaskDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationTaskDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationTaskDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ApplicationTaskDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.ApplicationTaskDocumentService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.ApplicationTaskDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.ApplicationTaskDocumentService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.ApplicationTaskDocumentService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ConversationServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ConversationServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ConversationServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ConversationServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.ConversationServiceBase (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.ConversationServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.ConversationServiceBase (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.ConversationServiceBase (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerConversationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerConversationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerConversationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerConversationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.DelegatedHandlerConversationService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.DelegatedHandlerConversationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedHandlerConversationService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedHandlerConversationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedHandlerDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.DelegatedHandlerDocumentService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.DelegatedHandlerDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedHandlerDocumentService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedHandlerDocumentService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceConversationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceConversationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceConversationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceConversationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.DelegatedResourceConversationService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.DelegatedResourceConversationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedResourceConversationService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedResourceConversationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DelegatedResourceDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.DelegatedResourceDocumentService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.DelegatedResourceDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedResourceDocumentService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.DelegatedResourceDocumentService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DocumentServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DocumentServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DocumentServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/DocumentServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.DocumentServiceBase (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.DocumentServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.DocumentServiceBase (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.DocumentServiceBase (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceConversationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceConversationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceConversationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceConversationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceConversationService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceConversationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceConversationService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceConversationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/GeneratedTextResourceDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceDocumentService (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceDocumentService (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.GeneratedTextResourceDocumentService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceConversationServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceConversationServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceConversationServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceConversationServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.ResourceConversationServiceBase (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.ResourceConversationServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.ResourceConversationServiceBase (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.ResourceConversationServiceBase (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceDocumentServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceDocumentServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceDocumentServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/class-use/ResourceDocumentServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.service.ResourceDocumentServiceBase (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.service.ResourceDocumentServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.service.ResourceDocumentServiceBase (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.service.ResourceDocumentServiceBase (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ConversationServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ConversationServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ConversationServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ConversationServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ConversationServiceBase (Prudence 1.0-789) +ConversationServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ConversationServiceBase (Prudence 1.0-789)"; + parent.document.title="ConversationServiceBase (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerConversationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerConversationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerConversationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerConversationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedHandlerConversationService (Prudence 1.0-789) +DelegatedHandlerConversationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedHandlerConversationService (Prudence 1.0-789)"; + parent.document.title="DelegatedHandlerConversationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedHandlerDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedHandlerDocumentService (Prudence 1.0-789) +DelegatedHandlerDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedHandlerDocumentService (Prudence 1.0-789)"; + parent.document.title="DelegatedHandlerDocumentService (Prudence 1.0-${revision.max})"; } } @@ -168,7 +168,7 @@ Methods inherited from class com.threecrickets.prudence.service.DocumentServiceBase -addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor +addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getRelativeFile, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor   diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceConversationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceConversationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceConversationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceConversationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedResourceConversationService (Prudence 1.0-789) +DelegatedResourceConversationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedResourceConversationService (Prudence 1.0-789)"; + parent.document.title="DelegatedResourceConversationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DelegatedResourceDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DelegatedResourceDocumentService (Prudence 1.0-789) +DelegatedResourceDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DelegatedResourceDocumentService (Prudence 1.0-789)"; + parent.document.title="DelegatedResourceDocumentService (Prudence 1.0-${revision.max})"; } } @@ -182,7 +182,7 @@ Methods inherited from class com.threecrickets.prudence.service.DocumentServiceBase -addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor +addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getRelativeFile, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor   diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DocumentServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DocumentServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DocumentServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/DocumentServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DocumentServiceBase (Prudence 1.0-789) +DocumentServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DocumentServiceBase (Prudence 1.0-789)"; + parent.document.title="DocumentServiceBase (Prudence 1.0-${revision.max})"; } } @@ -208,6 +208,15 @@ +protected  File +getRelativeFile(File file) + +
    +          If the getSource() is a DocumentFileSource, then this is + the file relative to the DocumentFileSource.getBasePath() . + + +  DocumentSource<Executable> getSource() @@ -411,7 +420,8 @@
     public void invalidate(String documentName)
                     throws ParsingException,
    -                       DocumentException
    + DocumentException, + IOException
    Invalidates a document, which can affect documents that depend on it.

    @@ -419,7 +429,8 @@

    Throws:
    DocumentException -
    ParsingException
    +
    ParsingException +
    IOException

    @@ -541,6 +552,22 @@ +
    + +

    +getRelativeFile

    +
    +protected File getRelativeFile(File file)
    +
    +
    If the getSource() is a DocumentFileSource, then this is + the file relative to the DocumentFileSource.getBasePath() . + Otherwise, it's null. +

    +

    + +
    Returns:
    The relative library directory or null
    +
    +

    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceConversationService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceConversationService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceConversationService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceConversationService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -GeneratedTextResourceConversationService (Prudence 1.0-789) +GeneratedTextResourceConversationService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="GeneratedTextResourceConversationService (Prudence 1.0-789)"; + parent.document.title="GeneratedTextResourceConversationService (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceDocumentService.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceDocumentService.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceDocumentService.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/GeneratedTextResourceDocumentService.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -GeneratedTextResourceDocumentService (Prudence 1.0-789) +GeneratedTextResourceDocumentService (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="GeneratedTextResourceDocumentService (Prudence 1.0-789)"; + parent.document.title="GeneratedTextResourceDocumentService (Prudence 1.0-${revision.max})"; } } @@ -271,7 +271,7 @@ Methods inherited from class com.threecrickets.prudence.service.DocumentServiceBase -addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor +addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getRelativeFile, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor   diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-frame.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-frame.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-frame.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-frame.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.service (Prudence 1.0-789) +com.threecrickets.prudence.service (Prudence 1.0-${revision.max}) - + diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-summary.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-summary.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-summary.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-summary.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.service (Prudence 1.0-789) +com.threecrickets.prudence.service (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence.service (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence.service (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-tree.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-tree.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-tree.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-tree.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.service Class Hierarchy (Prudence 1.0-789) +com.threecrickets.prudence.service Class Hierarchy (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence.service Class Hierarchy (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence.service Class Hierarchy (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-use.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-use.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-use.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/package-use.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Package com.threecrickets.prudence.service (Prudence 1.0-789) +Uses of Package com.threecrickets.prudence.service (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Package com.threecrickets.prudence.service (Prudence 1.0-789)"; + parent.document.title="Uses of Package com.threecrickets.prudence.service (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceConversationServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceConversationServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceConversationServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceConversationServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ResourceConversationServiceBase (Prudence 1.0-789) +ResourceConversationServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ResourceConversationServiceBase (Prudence 1.0-789)"; + parent.document.title="ResourceConversationServiceBase (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceDocumentServiceBase.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceDocumentServiceBase.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceDocumentServiceBase.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/service/ResourceDocumentServiceBase.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ResourceDocumentServiceBase (Prudence 1.0-789) +ResourceDocumentServiceBase (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ResourceDocumentServiceBase (Prudence 1.0-789)"; + parent.document.title="ResourceDocumentServiceBase (Prudence 1.0-${revision.max})"; } } @@ -177,7 +177,7 @@ Methods inherited from class com.threecrickets.prudence.service.DocumentServiceBase -addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getDocumentDescriptor, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor +addDependency, addFileDependency, execute, external, getCurrentDocumentDescriptor, getDocumentDescriptor, getRelativeFile, getSource, internal, internal, invalidate, invalidateCurrent, popDocumentDescriptor, pushDocumentDescriptor   diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/SourceCodeResource.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/SourceCodeResource.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/SourceCodeResource.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/SourceCodeResource.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -SourceCodeResource (Prudence 1.0-789) +SourceCodeResource (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="SourceCodeResource (Prudence 1.0-789)"; + parent.document.title="SourceCodeResource (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ByteArrayRepresentation.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ByteArrayRepresentation.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ByteArrayRepresentation.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ByteArrayRepresentation.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ByteArrayRepresentation (Prudence 1.0-789) +ByteArrayRepresentation (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ByteArrayRepresentation (Prudence 1.0-789)"; + parent.document.title="ByteArrayRepresentation (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CacheControlFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CacheControlFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CacheControlFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CacheControlFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -CacheControlFilter (Prudence 1.0-789) +CacheControlFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="CacheControlFilter (Prudence 1.0-789)"; + parent.document.title="CacheControlFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CaptiveRedirector.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CaptiveRedirector.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CaptiveRedirector.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CaptiveRedirector.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -CaptiveRedirector (Prudence 1.0-789) +CaptiveRedirector (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="CaptiveRedirector (Prudence 1.0-789)"; + parent.document.title="CaptiveRedirector (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ByteArrayRepresentation.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ByteArrayRepresentation.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ByteArrayRepresentation.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ByteArrayRepresentation.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.ByteArrayRepresentation (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.ByteArrayRepresentation (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.ByteArrayRepresentation (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.ByteArrayRepresentation (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CacheControlFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CacheControlFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CacheControlFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CacheControlFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.CacheControlFilter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.CacheControlFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.CacheControlFilter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.CacheControlFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CaptiveRedirector.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CaptiveRedirector.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CaptiveRedirector.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CaptiveRedirector.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.CaptiveRedirector (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.CaptiveRedirector (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.CaptiveRedirector (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.CaptiveRedirector (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CompressedStringRepresentation.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CompressedStringRepresentation.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CompressedStringRepresentation.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CompressedStringRepresentation.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.CompressedStringRepresentation (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.CompressedStringRepresentation (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.CompressedStringRepresentation (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.CompressedStringRepresentation (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ConversationCookie.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ConversationCookie.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ConversationCookie.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/ConversationCookie.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.ConversationCookie (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.ConversationCookie (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.ConversationCookie (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.ConversationCookie (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CssUnifyMinifyFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CssUnifyMinifyFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CssUnifyMinifyFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/CssUnifyMinifyFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.CssUnifyMinifyFilter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.CssUnifyMinifyFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.CssUnifyMinifyFilter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.CssUnifyMinifyFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/DebugRepresentation.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/DebugRepresentation.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/DebugRepresentation.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/DebugRepresentation.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.DebugRepresentation (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.DebugRepresentation (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.DebugRepresentation (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.DebugRepresentation (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/Fallback.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/Fallback.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/Fallback.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/Fallback.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.Fallback (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.Fallback (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.Fallback (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.Fallback (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FallbackRouter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FallbackRouter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FallbackRouter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FallbackRouter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.FallbackRouter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.FallbackRouter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.FallbackRouter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.FallbackRouter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FileParameter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FileParameter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FileParameter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FileParameter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.FileParameter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.FileParameter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.FileParameter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.FileParameter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FormWithFiles.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FormWithFiles.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FormWithFiles.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/FormWithFiles.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.FormWithFiles (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.FormWithFiles (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.FormWithFiles (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.FormWithFiles (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/IoUtil.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/IoUtil.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/IoUtil.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/IoUtil.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.IoUtil (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.IoUtil (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.IoUtil (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.IoUtil (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/JavaScriptUnifyMinifyFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/JavaScriptUnifyMinifyFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/JavaScriptUnifyMinifyFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/JavaScriptUnifyMinifyFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.JavaScriptUnifyMinifyFilter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.JavaScriptUnifyMinifyFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.JavaScriptUnifyMinifyFilter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.JavaScriptUnifyMinifyFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/LoggingUtil.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/LoggingUtil.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/LoggingUtil.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/LoggingUtil.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.LoggingUtil (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.LoggingUtil (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.LoggingUtil (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.LoggingUtil (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/NormalizingRedirector.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/NormalizingRedirector.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/NormalizingRedirector.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/NormalizingRedirector.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.NormalizingRedirector (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.NormalizingRedirector (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.NormalizingRedirector (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.NormalizingRedirector (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PhpExecutionController.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PhpExecutionController.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PhpExecutionController.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PhpExecutionController.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.PhpExecutionController (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.PhpExecutionController (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.PhpExecutionController (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.PhpExecutionController (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PreheatTask.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PreheatTask.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PreheatTask.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/PreheatTask.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.PreheatTask (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.PreheatTask (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.PreheatTask (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.PreheatTask (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/StatusRestlet.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/StatusRestlet.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/StatusRestlet.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/StatusRestlet.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.StatusRestlet (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.StatusRestlet (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.StatusRestlet (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.StatusRestlet (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/UnifyMinifyFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/UnifyMinifyFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/UnifyMinifyFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/class-use/UnifyMinifyFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Class com.threecrickets.prudence.util.UnifyMinifyFilter (Prudence 1.0-789) +Uses of Class com.threecrickets.prudence.util.UnifyMinifyFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Class com.threecrickets.prudence.util.UnifyMinifyFilter (Prudence 1.0-789)"; + parent.document.title="Uses of Class com.threecrickets.prudence.util.UnifyMinifyFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CompressedStringRepresentation.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CompressedStringRepresentation.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CompressedStringRepresentation.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CompressedStringRepresentation.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -CompressedStringRepresentation (Prudence 1.0-789) +CompressedStringRepresentation (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="CompressedStringRepresentation (Prudence 1.0-789)"; + parent.document.title="CompressedStringRepresentation (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ConversationCookie.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ConversationCookie.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ConversationCookie.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/ConversationCookie.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -ConversationCookie (Prudence 1.0-789) +ConversationCookie (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="ConversationCookie (Prudence 1.0-789)"; + parent.document.title="ConversationCookie (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CssUnifyMinifyFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CssUnifyMinifyFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CssUnifyMinifyFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/CssUnifyMinifyFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -CssUnifyMinifyFilter (Prudence 1.0-789) +CssUnifyMinifyFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="CssUnifyMinifyFilter (Prudence 1.0-789)"; + parent.document.title="CssUnifyMinifyFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/DebugRepresentation.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/DebugRepresentation.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/DebugRepresentation.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/DebugRepresentation.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -DebugRepresentation (Prudence 1.0-789) +DebugRepresentation (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="DebugRepresentation (Prudence 1.0-789)"; + parent.document.title="DebugRepresentation (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/Fallback.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/Fallback.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/Fallback.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/Fallback.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Fallback (Prudence 1.0-789) +Fallback (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Fallback (Prudence 1.0-789)"; + parent.document.title="Fallback (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FallbackRouter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FallbackRouter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FallbackRouter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FallbackRouter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -FallbackRouter (Prudence 1.0-789) +FallbackRouter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="FallbackRouter (Prudence 1.0-789)"; + parent.document.title="FallbackRouter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FileParameter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FileParameter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FileParameter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FileParameter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -FileParameter (Prudence 1.0-789) +FileParameter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="FileParameter (Prudence 1.0-789)"; + parent.document.title="FileParameter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FormWithFiles.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FormWithFiles.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FormWithFiles.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/FormWithFiles.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -FormWithFiles (Prudence 1.0-789) +FormWithFiles (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="FormWithFiles (Prudence 1.0-789)"; + parent.document.title="FormWithFiles (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/IoUtil.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/IoUtil.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/IoUtil.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/IoUtil.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -IoUtil (Prudence 1.0-789) +IoUtil (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="IoUtil (Prudence 1.0-789)"; + parent.document.title="IoUtil (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/JavaScriptUnifyMinifyFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/JavaScriptUnifyMinifyFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/JavaScriptUnifyMinifyFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/JavaScriptUnifyMinifyFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -JavaScriptUnifyMinifyFilter (Prudence 1.0-789) +JavaScriptUnifyMinifyFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="JavaScriptUnifyMinifyFilter (Prudence 1.0-789)"; + parent.document.title="JavaScriptUnifyMinifyFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/LoggingUtil.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/LoggingUtil.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/LoggingUtil.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/LoggingUtil.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -LoggingUtil (Prudence 1.0-789) +LoggingUtil (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="LoggingUtil (Prudence 1.0-789)"; + parent.document.title="LoggingUtil (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/NormalizingRedirector.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/NormalizingRedirector.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/NormalizingRedirector.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/NormalizingRedirector.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -NormalizingRedirector (Prudence 1.0-789) +NormalizingRedirector (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="NormalizingRedirector (Prudence 1.0-789)"; + parent.document.title="NormalizingRedirector (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-frame.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-frame.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-frame.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-frame.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.util (Prudence 1.0-789) +com.threecrickets.prudence.util (Prudence 1.0-${revision.max}) - + diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-summary.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-summary.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-summary.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-summary.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.util (Prudence 1.0-789) +com.threecrickets.prudence.util (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence.util (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence.util (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-tree.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-tree.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-tree.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-tree.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -com.threecrickets.prudence.util Class Hierarchy (Prudence 1.0-789) +com.threecrickets.prudence.util Class Hierarchy (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="com.threecrickets.prudence.util Class Hierarchy (Prudence 1.0-789)"; + parent.document.title="com.threecrickets.prudence.util Class Hierarchy (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-use.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-use.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-use.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/package-use.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Uses of Package com.threecrickets.prudence.util (Prudence 1.0-789) +Uses of Package com.threecrickets.prudence.util (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Uses of Package com.threecrickets.prudence.util (Prudence 1.0-789)"; + parent.document.title="Uses of Package com.threecrickets.prudence.util (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PhpExecutionController.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PhpExecutionController.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PhpExecutionController.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PhpExecutionController.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -PhpExecutionController (Prudence 1.0-789) +PhpExecutionController (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="PhpExecutionController (Prudence 1.0-789)"; + parent.document.title="PhpExecutionController (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PreheatTask.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PreheatTask.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PreheatTask.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/PreheatTask.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -PreheatTask (Prudence 1.0-789) +PreheatTask (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="PreheatTask (Prudence 1.0-789)"; + parent.document.title="PreheatTask (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/StatusRestlet.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/StatusRestlet.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/StatusRestlet.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/StatusRestlet.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -StatusRestlet (Prudence 1.0-789) +StatusRestlet (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="StatusRestlet (Prudence 1.0-789)"; + parent.document.title="StatusRestlet (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/UnifyMinifyFilter.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/UnifyMinifyFilter.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/UnifyMinifyFilter.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/com/threecrickets/prudence/util/UnifyMinifyFilter.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -UnifyMinifyFilter (Prudence 1.0-789) +UnifyMinifyFilter (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="UnifyMinifyFilter (Prudence 1.0-789)"; + parent.document.title="UnifyMinifyFilter (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/constant-values.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/constant-values.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/constant-values.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/constant-values.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Constant Field Values (Prudence 1.0-789) +Constant Field Values (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Constant Field Values (Prudence 1.0-789)"; + parent.document.title="Constant Field Values (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/deprecated-list.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/deprecated-list.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/deprecated-list.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/deprecated-list.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Deprecated List (Prudence 1.0-789) +Deprecated List (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Deprecated List (Prudence 1.0-789)"; + parent.document.title="Deprecated List (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/help-doc.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/help-doc.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/help-doc.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/help-doc.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -API Help (Prudence 1.0-789) +API Help (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="API Help (Prudence 1.0-789)"; + parent.document.title="API Help (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-10.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-10.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-10.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-10.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -J-Index (Prudence 1.0-789) +J-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="J-Index (Prudence 1.0-789)"; + parent.document.title="J-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-11.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-11.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-11.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-11.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -L-Index (Prudence 1.0-789) +L-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="L-Index (Prudence 1.0-789)"; + parent.document.title="L-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-12.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-12.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-12.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-12.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -M-Index (Prudence 1.0-789) +M-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="M-Index (Prudence 1.0-789)"; + parent.document.title="M-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-13.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-13.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-13.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-13.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -N-Index (Prudence 1.0-789) +N-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="N-Index (Prudence 1.0-789)"; + parent.document.title="N-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-14.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-14.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-14.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-14.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -O-Index (Prudence 1.0-789) +O-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="O-Index (Prudence 1.0-789)"; + parent.document.title="O-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-15.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-15.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-15.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-15.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -P-Index (Prudence 1.0-789) +P-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="P-Index (Prudence 1.0-789)"; + parent.document.title="P-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-16.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-16.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-16.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-16.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -R-Index (Prudence 1.0-789) +R-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="R-Index (Prudence 1.0-789)"; + parent.document.title="R-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-17.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-17.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-17.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-17.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -S-Index (Prudence 1.0-789) +S-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="S-Index (Prudence 1.0-789)"; + parent.document.title="S-Index (Prudence 1.0-${revision.max})"; } } @@ -94,9 +94,6 @@
    setAccessRestricted(boolean) - Method in class com.threecrickets.prudence.util.ConversationCookie
    Whether access is restricted. -
    setApplicationServiceName(String) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setBinary(boolean) - Method in class com.threecrickets.prudence.cache.MongoCache
      @@ -134,15 +131,9 @@
    setDefaultAction(int) - Method in class com.threecrickets.prudence.DelegatedFilter
      -
    setDefaultLanguageTag(String) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setDefaultMaxAge(int) - Method in class com.threecrickets.prudence.util.CacheControlFilter
      -
    setDocumentServiceName(String) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setDomain(String) - Method in class com.threecrickets.prudence.util.ConversationCookie
      @@ -161,24 +152,12 @@
    setEntryPointNameForCacheKeyPattern(String) - Method in class com.threecrickets.prudence.DelegatedCacheKeyPatternHandler
      -
    setErrorWriter(Writer) - -Method in class com.threecrickets.prudence.DelegatedHandler -
      -
    setExecutionController(ExecutionController) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setExpirationDate(Date) - Method in class com.threecrickets.prudence.service.DelegatedResourceConversationService
     
    setExpirationTimestamp(long) - Method in class com.threecrickets.prudence.service.DelegatedResourceConversationService
      -
    setFileUploadDirectory(File) - -Method in class com.threecrickets.prudence.DelegatedHandler -
      -
    setFileUploadSizeThreshold(int) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setFilterDocumentSource(DocumentSource<Executable>) - Method in class com.threecrickets.prudence.PrudenceRouter
      @@ -197,9 +176,6 @@
    setLanguageName(String) - Method in class com.threecrickets.prudence.service.ResourceConversationServiceBase
      -
    setLibraryDirectory(File) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setMaxAge(int) - Method in class com.threecrickets.prudence.service.DelegatedResourceConversationService
      @@ -236,9 +212,6 @@
    setPath(String) - Method in class com.threecrickets.prudence.util.ConversationCookie
      -
    setPrepare(boolean) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    setStatus(Status) - Method in class com.threecrickets.prudence.service.ConversationServiceBase
    The response status. @@ -254,9 +227,6 @@
    setVersion(int) - Method in class com.threecrickets.prudence.util.ConversationCookie
      -
    setWriter(Writer) - -Method in class com.threecrickets.prudence.DelegatedHandler -
     
    SourceCodeResource - Class in com.threecrickets.prudence
    A Restlet resource that returns a formatted textual representation of Scripturian DocumentDescriptor source code.
    SourceCodeResource() - Constructor for class com.threecrickets.prudence.SourceCodeResource diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-18.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-18.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-18.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-18.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -T-Index (Prudence 1.0-789) +T-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="T-Index (Prudence 1.0-789)"; + parent.document.title="T-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-19.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-19.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-19.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-19.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -U-Index (Prudence 1.0-789) +U-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="U-Index (Prudence 1.0-789)"; + parent.document.title="U-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-1.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-1.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-1.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-1.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -A-Index (Prudence 1.0-789) +A-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="A-Index (Prudence 1.0-789)"; + parent.document.title="A-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-20.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-20.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-20.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-20.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -V-Index (Prudence 1.0-789) +V-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="V-Index (Prudence 1.0-789)"; + parent.document.title="V-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-21.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-21.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-21.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-21.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -W-Index (Prudence 1.0-789) +W-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="W-Index (Prudence 1.0-789)"; + parent.document.title="W-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-22.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-22.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-22.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-22.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Z-Index (Prudence 1.0-789) +Z-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Z-Index (Prudence 1.0-789)"; + parent.document.title="Z-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-2.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-2.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-2.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-2.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -B-Index (Prudence 1.0-789) +B-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="B-Index (Prudence 1.0-789)"; + parent.document.title="B-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-3.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-3.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-3.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-3.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -C-Index (Prudence 1.0-789) +C-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="C-Index (Prudence 1.0-789)"; + parent.document.title="C-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-4.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-4.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-4.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-4.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -D-Index (Prudence 1.0-789) +D-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="D-Index (Prudence 1.0-789)"; + parent.document.title="D-Index (Prudence 1.0-${revision.max})"; } } @@ -99,7 +99,7 @@ A DelegatedHandler with the following supported entry points: handleCacheKeyPattern() -
    DelegatedCacheKeyPatternHandler(String, DocumentSource<Executable>, LanguageManager) - +
    DelegatedCacheKeyPatternHandler(String, DocumentSource<Executable>, LanguageManager, Context) - Constructor for class com.threecrickets.prudence.DelegatedCacheKeyPatternHandler
    Construction.
    DelegatedFilter - Class in com.threecrickets.prudence
    A Filter that wraps an underlying DelegatedHandler.
    DelegatedFilter(Context, String, DocumentSource<Executable>, LanguageManager) - @@ -109,7 +109,7 @@ Constructor for class com.threecrickets.prudence.DelegatedFilter
    Construction.
    DelegatedHandler - Class in com.threecrickets.prudence
    A general-purpose delegate used to enter defined entry points in a - Scripturian Executable.
    DelegatedHandler(String, DocumentSource<Executable>, LanguageManager) - + Scripturian Executable.
    DelegatedHandler(String, DocumentSource<Executable>, LanguageManager, Context) - Constructor for class com.threecrickets.prudence.DelegatedHandler
    Construction.
    DelegatedHandlerConversationService - Class in com.threecrickets.prudence.service
    Conversation service exposed to executables.
    DelegatedHandlerConversationService(int, File) - diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-5.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-5.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-5.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-5.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -E-Index (Prudence 1.0-789) +E-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="E-Index (Prudence 1.0-789)"; + parent.document.title="E-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-6.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-6.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-6.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-6.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -F-Index (Prudence 1.0-789) +F-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="F-Index (Prudence 1.0-789)"; + parent.document.title="F-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-7.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-7.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-7.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-7.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -G-Index (Prudence 1.0-789) +G-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="G-Index (Prudence 1.0-789)"; + parent.document.title="G-Index (Prudence 1.0-${revision.max})"; } } @@ -121,7 +121,8 @@ service.
    getApplicationServiceName() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to "application". +
    The name of the global variable with which to access the application + service.
    getApplicationServiceName() - Method in class com.threecrickets.prudence.DelegatedResource
    The name of the global variable with which to access the application @@ -194,6 +195,25 @@
    getComment() - Method in class com.threecrickets.prudence.util.ConversationCookie
    The comment. +
    getCommonLibraryDirectory() - +Method in class com.threecrickets.prudence.ApplicationTask +
    Executables from all applications might use this directory for importing + libraries. +
    getCommonLibraryDirectory() - +Method in class com.threecrickets.prudence.DelegatedHandler +
    Executables from all applications might use this directory for importing + libraries. +
    getCommonLibraryDirectory() - +Method in class com.threecrickets.prudence.DelegatedResource +
    Executables from all applications might use this directory for importing + libraries. +
    getCommonLibraryDirectory() - +Method in class com.threecrickets.prudence.GeneratedTextResource +
    Executables from all applications might use this directory for importing + libraries. +
    getContext() - +Method in class com.threecrickets.prudence.DelegatedHandler +
    The context used to configure the handler.
    getConversationServiceName() - Method in class com.threecrickets.prudence.GeneratedTextResource
    The name of the global variable with which to access the conversation @@ -232,7 +252,8 @@ one.
    getDefaultLanguageTag() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to "javascript". +
    The default language tag name to be used if the script doesn't specify + one.
    getDefaultLanguageTag() - Method in class com.threecrickets.prudence.DelegatedResource
    The default language tag name to be used if the script doesn't specify @@ -298,7 +319,8 @@ service.
    getDocumentServiceName() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to "document". +
    The name of the global variable with which to access the document + service.
    getDocumentServiceName() - Method in class com.threecrickets.prudence.DelegatedResource
    The name of the global variable with which to access the document @@ -367,6 +389,9 @@
    getEntryPointNameForPut() - Method in class com.threecrickets.prudence.DelegatedResource
    The name of the handlePut() entry point in the executable. +
    getEntryPointValidityCache(Executable) - +Method in class com.threecrickets.prudence.DelegatedHandler +
    A cache for entry point validity.
    getErrorHandlers() - Method in class com.threecrickets.prudence.DelegatedStatusService
    A map of error statuses to target restlets. @@ -375,7 +400,7 @@
    Same as ApplicationTask.getWriter(), for standard error.
    getErrorWriter() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to standard error. +
    Same as DelegatedHandler.getWriter(), for standard error.
    getErrorWriter() - Method in class com.threecrickets.prudence.DelegatedResource
    Same as DelegatedResource.getWriter(), for standard error. @@ -384,7 +409,7 @@
    An optional ExecutionController to be used with the executable.
    getExecutionController() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to null. +
    An optional ExecutionController to be used with the executable.
    getExecutionController() - Method in class com.threecrickets.prudence.DelegatedResource
    An optional ExecutionController to be used with the executable. @@ -405,8 +430,7 @@
    The file.
    getFileUploadDirectory() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to the DocumentFileSource.getBasePath() plus - "../uploads/". +
    The directory in which to place uploaded files.
    getFileUploadDirectory() - Method in class com.threecrickets.prudence.DelegatedResource
    The directory in which to place uploaded files. @@ -415,7 +439,7 @@
    The directory in which to place uploaded files.
    getFileUploadSizeThreshold() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to zero. +
    The size in bytes beyond which uploaded files will be stored to disk.
    getFileUploadSizeThreshold() - Method in class com.threecrickets.prudence.DelegatedResource
    The size in bytes beyond which uploaded files will be stored to disk. @@ -440,11 +464,6 @@
    getFragmentDirectory() - Method in class com.threecrickets.prudence.GeneratedTextResource
    Executables might use this directory for including fragments. -
    getFragmentDirectoryRelative() - -Method in class com.threecrickets.prudence.GeneratedTextResource -
    If the GeneratedTextResource.getDocumentSource() is a DocumentFileSource, then - this is the fragment directory relative to the - DocumentFileSource.getBasePath().
    getGlobal(String, Object) - Method in class com.threecrickets.prudence.service.ApplicationService
    Gets a value global to the current application, atomically setting it to @@ -497,7 +516,7 @@
    The LanguageManager used to create the language adapters.
    getLanguageManager() - Method in class com.threecrickets.prudence.DelegatedHandler -
      +
    The LanguageManager used to create the language adapters.
    getLanguageManager() - Method in class com.threecrickets.prudence.DelegatedResource
    The LanguageManager used to create the language adapters. @@ -512,34 +531,13 @@
    Executables might use this directory for importing libraries.
    getLibraryDirectory() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to the DocumentFileSource.getBasePath() plus - "../library/". +
    Executables might use this directory for importing libraries.
    getLibraryDirectory() - Method in class com.threecrickets.prudence.DelegatedResource
    Executables might use this directory for importing libraries.
    getLibraryDirectory() - Method in class com.threecrickets.prudence.GeneratedTextResource
    Executables might use this directory for importing libraries. -
    getLibraryDirectoryRelative() - -Method in class com.threecrickets.prudence.ApplicationTask -
    If the ApplicationTask.getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). -
    getLibraryDirectoryRelative() - -Method in class com.threecrickets.prudence.DelegatedHandler -
    If the DelegatedHandler.getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). -
    getLibraryDirectoryRelative() - -Method in class com.threecrickets.prudence.DelegatedResource -
    If the DelegatedResource.getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath(). -
    getLibraryDirectoryRelative() - -Method in class com.threecrickets.prudence.GeneratedTextResource -
    If the GeneratedTextResource.getDocumentSource() is a DocumentFileSource, then - this is the library directory relative to the - DocumentFileSource.getBasePath().
    getLocals() - Method in class com.threecrickets.prudence.service.ConversationServiceBase
    The request attributes. @@ -628,6 +626,10 @@
    getReference() - Method in class com.threecrickets.prudence.service.ConversationServiceBase
    The resource reference. +
    getRelativeFile(File) - +Method in class com.threecrickets.prudence.service.DocumentServiceBase +
    If the DocumentServiceBase.getSource() is a DocumentFileSource, then this is + the file relative to the DocumentFileSource.getBasePath() .
    getRepresentation(Status, Request, Response) - Method in class com.threecrickets.prudence.DelegatedStatusService
      @@ -700,7 +702,7 @@
    The Writer used by the Executable.
    getWriter() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to standard output. +
    The Writer used by the Executable.
    getWriter() - Method in class com.threecrickets.prudence.DelegatedResource
    The Writer used by the Executable. diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-8.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-8.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-8.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-8.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -H-Index (Prudence 1.0-789) +H-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="H-Index (Prudence 1.0-789)"; + parent.document.title="H-Index (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-9.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-9.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-9.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index-files/index-9.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -I-Index (Prudence 1.0-789) +I-Index (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="I-Index (Prudence 1.0-789)"; + parent.document.title="I-Index (Prudence 1.0-${revision.max})"; } } @@ -157,7 +157,7 @@
    Whether to prepare the executables.
    isPrepare() - Method in class com.threecrickets.prudence.DelegatedHandler -
    Defaults to true. +
    Whether to prepare the executables.
    isPrepare() - Method in class com.threecrickets.prudence.DelegatedResource
    Whether to prepare the executables. diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/index.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,9 +2,9 @@ - + -Prudence 1.0-789 +Prudence 1.0-${revision.max} @@ -81,7 +81,7 @@

    -Prudence 1.0-789 +Prudence 1.0-${revision.max}

    diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/overview-tree.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/overview-tree.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/overview-tree.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/overview-tree.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Class Hierarchy (Prudence 1.0-789) +Class Hierarchy (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Class Hierarchy (Prudence 1.0-789)"; + parent.document.title="Class Hierarchy (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/api/serialized-form.html prudence-clojure-1.0/content/applications/prudence-test/web/static/api/serialized-form.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/api/serialized-form.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/api/serialized-form.html 2011-01-08 00:56:02.000000000 +0000 @@ -2,12 +2,12 @@ - + -Serialized Form (Prudence 1.0-789) +Serialized Form (Prudence 1.0-${revision.max}) - + @@ -15,7 +15,7 @@ function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { - parent.document.title="Serialized Form (Prudence 1.0-789)"; + parent.document.title="Serialized Form (Prudence 1.0-${revision.max})"; } } diff -Nru prudence-clojure-1.0/content/applications/prudence-test/web/static/manual/index.html prudence-clojure-1.0/content/applications/prudence-test/web/static/manual/index.html --- prudence-clojure-1.0/content/applications/prudence-test/web/static/manual/index.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/applications/prudence-test/web/static/manual/index.html 2011-01-08 00:56:02.000000000 +0000 @@ -3,7 +3,7 @@ - + Prudence Manual @@ -20,7 +20,7 @@
    -Copyright 2009-2010 by Three Crickets LLC.
    +Copyright 2009-2011 by Three Crickets LLC.
    This work is licensed under a
    Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.


    @@ -1591,7 +1591,7 @@ See logging (page 1↓).

    -/configuration/ +/configuration/

    There are a few essential configuration files here. @@ -1612,12 +1612,15 @@

    -/libraries/ +/libraries/

    Here you will find Prudence’s main libraries as well as support libraries. The main /libraries/ subdirectory is for Java archives (JARs), but you may find subdirectories for libraries in other languages, such as /libraries/python/ for Python.
    +This directory also serves as a common /libraries/ directory for all applications, similarly to how an individual application’s /libraries/ directory (page 1↓) works. You can thus put source code here that you want to share for all your applications. +
    +
    If you add your own JARs, make sure to edit the scripts in /bin/ to accommodate your additions.
    @@ -1991,10 +1994,10 @@ /tasks/
    -Tasks (page 1↓)are straightforward scripts that can be run on-demand or scheduled to run and specific times. They are straightforward in that, upon execution, the code is simply run as is. There is no particular entry point as with /resources/ or /handlers/. +Tasks (page 1↓) are straightforward scripts that can be run on-demand or scheduled to run and specific times. They are straightforward in that, upon execution, the code is simply run as is. There is no particular entry point as with /resources/ or /handlers/.

    -/libraries/ +/libraries/

    All your code, whether it’s in /resources/, /handlers/, /tasks/ or in scriptlets embedded in /web/dynamic/ and /fragments/, can include code from /libraries/. @@ -2002,6 +2005,9 @@
    Use whatever mechanism is appropriate for your language: ‘‘import’’ for Python or Ruby, ‘‘use’’ for Clojure, etc. For languages that don’t have inclusion mechanisms—Groovy, JavaScript—you can use Prudence’s inclusion mechanism, document.execute (page 1↓).
    +
    +To share source code with all your applications, use the instance’s /libraries/ directory (page 1↑). +

    /uploads/

    @@ -3779,8 +3785,28 @@

    At Startup

    +

    +Startup Task +

    +
    +Prudence will automatically run the task called ‘‘startup/’’ upon startup. Note that it will run after all the other startup tasks (defrosting, preheating) finish, in order to make sure your application is ‘‘hot’’ first. If you need multiple tasks running—usually repeating tasks, such as those that do general maintenance, monitor resource availability, send out email reminders, etc.—you can start them from your startup task using application.task (page 1↓). +
    +
    +For example, here is an application’s ‘‘/tasks/startup.js’’ file: +
    +
    + +
    +
    application.logger.info(’Scheduling monitor task to repeat every second’)
    +application.task(’monitor/’, 1000, 1000, false) 
    +
    +
    +
    +

    +Custom Startup Tasks +

    -Use application.task (page 1↓) to schedule general tasks in any of the application’s configuration scripts (page 1↑). This is especially useful for repeating tasks, such as those that do general maintenance, monitor resource availability, send out email reminders, etc. +You can also use application.task (page 1↓) to schedule general tasks in any of the application’s configuration scripts (page 1↑).
    Here is an example default.js (note the use of ‘‘applicationService’’ instead of ‘‘application’’): @@ -4030,7 +4056,7 @@ Before a request reaches your application, it is routed by your Prudence instance.

    -Step 1: Servers +Step 1: Servers

    Requests come in from servers. Prudence instances have at the minimum one server, but can have more than one. Each server listens at a particular HTTP port, and multiple servers may in turn be restricted to particular network interfaces on your machine. By default, Prudence has a single server that listens to HTTP requests on port 8080 coming in from all network interfaces. @@ -4039,13 +4065,13 @@ You can configure your servers in /instance/servers.* (page 1↑).

    -Step 2: The Component +Step 2: The Component

    There is only one component per Prudence instance, and all servers route to it. This allows Prudence a unified mechanism to deal with all incoming requests.

    -Step 3: Virtual Hosts +Step 3: Virtual Hosts

    The component’s router decides which virtual host should receive the request. The decision is often made according to the domain name in the URL, but can also take into account which server it came from. Virtual hosting is a tool to let you host multiple sites on the same Prudence instance, but it can be used for more subtle kinds of routing, too. @@ -4057,7 +4083,7 @@ You can configure your virtual hosts in /instance/hosts.* (page 1↑).

    -Step 4: Applications +Step 4: Applications

    Using ‘‘hosts’’ in your application’s /settings.* (page 1↑), you can configure which virtual hosts your application will be attached to, and the base URI for the application on each virtual host. An application can accept requests from several virtual hosts at once. @@ -4069,7 +4095,7 @@ Note that you can create a ‘‘nested’’ URI scheme for your applications. For example, one application might be attached at the root URI at a certain virtual host, ‘‘/’’, while other applications might be at different URIs beneath the root, ‘‘/wackywiki’’ and ‘‘/wackywiki/support/forum’’. The root application will not ‘‘steal’’ requests from the other applications, because the request is routed to the right application by the virtual host. The fact that the latter URI is the hierarchical descendent of the former makes no difference to the virtual host router.

    -A Complete Route +A Complete Route

    Let’s assume a client from the Internet send a request to URI ‘‘http://www.wacky.org/wackywicki/support/forum/thread/12/.’’ @@ -4090,7 +4116,7 @@ Application Routing

    -Step 5: Application Handlers +Step 5: Application Handlers

    Prudence applications come with default support for three kinds of handlers: resources (in the /resources/ subdirectory), dynamic web pages (in the /web/dynamic/ subdirectory) and static web resources (in the /web/static/ subdirectory). By default, all three handlers are attached at the root URI, ‘‘/’’, of the application (which may vary per virtual host). However, it is possible to change this in your application’s /settings.*, see resourcesBaseURL, dynamicWebBaseURL and staticWebBaseURL (page 1↑). For example, you may want your resources to be routed under ‘‘/rest-interface/’’. @@ -4102,7 +4128,7 @@ Be careful: this system allows for previous handlers in the sequence to supersede later handlers. For example, if you decide to remove scriptlets from a file named /dynamic/web/about.html and move it to /static/web/about.html, make sure to delete the former, or else the latter will not be reached.

    -Subdirectories and Filenames As URI Segments +Subdirectories and Filenames As URI Segments

    The three application handlers—resources, dynamic web pages and static web resources—are all routed by mapping the filesystem structure to a URI. Each subdirectory path or filename is directly translated into a URI segment. @@ -4114,7 +4140,7 @@ There’s one deficiency to this scheme: by directly mapping filenames, it can allow for ‘‘ugly’’ URIs that include filename extensions. For example, you’re probably used to seeing many web sites with URLs that end in ‘‘.html’’, ‘‘.php’’ and ‘‘.jsp’’. While these extensions are meaningful to the site developer, they complicate the URIs and expose internal implementation details to outsiders.

    -Pretty URIs +Pretty URIs

    To allow for prettier URIs, Prudence does a few things: @@ -4181,7 +4207,7 @@

    -Filename Extensions +Filename Extensions

    Though Prudence hides the filename extensions from the URIs, they do have two important functions: @@ -4223,7 +4249,7 @@ Actually, all of this API can also be called at runtime, allowing you to attach and change routes dynamically while the Prudence instance and its applications are up and running.

    -Hiding +Hiding

    The following will make sure that the given URI always returns a 404, even if the page or resource exists. For example, in /routing.* (JavaScript flavor): @@ -4239,7 +4265,7 @@ The resource will still be available internally, via document.internal (page 1↓), and for capturing (page 1↓).

    -Capturing +Capturing

    Prudence lets you ‘‘capture’’ abitrary URI patterns into any internal URI you wish, in /resources/, /web/dynamic/ or /web/static/. @@ -4410,7 +4436,7 @@ Of course, you might prefer to check the MIME type in code your code via conversation.mediaTypeName (page 1↓), but the above is a good example of how powerful routing can be with URI patterns.

    -Capturing Errors +Capturing Errors

    A special case of capturing is for errors. ‘‘Errors’’ can be set explicitly by you: for example, we can set conversation.statusCode (page 1↓) to 404, as we did above. However, a 500 error occurs automatically for uncaught exceptions in your code. @@ -4474,7 +4500,7 @@

    -Static Redirection +Static Redirection

    By ‘‘static’’ here is meant that redirection is configured into the application’s /routing.* script. (You can also call this API on a running application, though you should realize that it essentially changed your application’s routing.) ‘‘Dynamic’’ routing, from within /dynamic/web/ or /resources/, is described in the next section (page 1↓). @@ -4530,7 +4556,7 @@

    -Dynamic Redirection +Dynamic Redirection

    You can handle redirection at either /resources/ or /web/dynamic/ with the following API: @@ -4579,7 +4605,7 @@ See also static redirection (page 1↑).

    -Attaching +Attaching

    This is the lowest-level routing API. It allows you to route URI patterns to any custom ‘‘restlet’’ (a REST conversation handler), as well as Restlet resources (which internally use a Finder restlet). Do your attachments in the application’s /routing.* configuration script. Prudence offers some attachment ‘‘sugar’’ in addition the standard Restlet API. @@ -4614,7 +4640,7 @@

    -Filtering +Filtering

    Instances of filters, which wrap instances of other restlets, can be attached directly to URIs. The filter can then pass control to the ‘‘next’’ restlet, skip other filters along the chain, or immediately stop routing. @@ -4770,7 +4796,7 @@ For more information, see the Restlet Resolver documentation.

    -Data Attributes +Data Attributes

    All these refer to the data (‘‘entity’’) sent by the client or that you are returning to the client. Lowercase is used for request attributes, uppercase for response attributes. We’ll note these as pairs: @@ -4803,7 +4829,7 @@

    -Request Attributes +Request Attributes

      @@ -4824,7 +4850,7 @@

    -Response Attributes +Response Attributes

      @@ -4842,7 +4868,7 @@

    -URIs +URIs

    We’ll use a hyphen to show that you need to add one of the modifiers detailed after this list. For example, ‘‘{ri}’’ is the complete actual URI. @@ -4896,7 +4922,7 @@ Every URI also has a ‘‘base’’ URI, accessed via the ‘‘b’’ modifier. Usually, this is the application’s root URI on the virtual host. You can add the URI modifiers above to this URI. For example: ‘‘{rbi}’’.

    -Cache Key Variables +Cache Key Variables

    The following variables are only available for cache key patterns (page 1↓), not for routing: @@ -4914,7 +4940,7 @@

    -conversation.locals +conversation.locals

    Variables that aren’t any of the above will be assumed to be conversation.locals (page 1↓). You can thus inject any data you wish into a pattern. @@ -5102,7 +5128,7 @@ In the case of /resources/ and the configuration scripts, ‘‘this document’’ is simply the source code file. In the case /web/dynamic/, it’s the whole ‘‘text-with-scriptlets’’ page, so it is shared by all scriptlets on the page, even if they are written in different languages.

    -This Document +This Document

    Many of these attributes have to do with caching. Caching is your best tool to make sure your application can scale well. Read more about it in ‘‘Scaling Tips’’ (page 1↓). @@ -5287,7 +5313,7 @@ Forces the current document to be marked as invalid, which would trigger the current and dependent documents to be refreshed. See document.addDependency (page 1↓) and document.invalidate (page 1↓).

    -Other Documents +Other Documents

    document.include @@ -5439,6 +5465,9 @@ There are many, many use cases for document.external, and they keep growing as REST is adopted by service providers on the Internet. There are online storage, publishing and content delivery systems, public databases, archives, geolocation services, social networking applications, etc. Perhaps, with Prudence, you will create the next one. +
    +Important: The semantics of ClientResource require you to explicitly release the response as soon as you’re done using it, which will in turn release the thread used to stream the response to you. (Though these threads might eventually be reclaimed by a built-in garbage collection mechanism, leaving them hanging could lead to starvation, such that further uses of document.external will block until threads return to the pool.) It’s probably best to employ a try-finally paradigm, where the try clause contains as little code as possible, and the finally clause releases the response. See the example below. +
    This is a good place to remind you that REST is not just HTTP. By default, Prudence supports http: and file: scheme URIs for document.external, and you can add more protocols via your /instance/clients.* configuration script (page 1↑).
    @@ -5448,8 +5477,16 @@
    -
    var fixture =
    -	document.external(’file:///myfiles/fixture.json’, ’application/json’).get().text
    +
    var fixture
    +var resource = document.external(’file:///myfiles/fixture.json’, ’application/json’)
    +try {
    +	fixture = resource.get().text
    +}
    +finally {
    +	resource.response.release()
    +}
    +​
    +// Do something with the fixture here...
     
    @@ -5529,7 +5566,7 @@ Note that in /web/dynamic/ ‘‘conversation’’ is available as a global variable. In /resources/ and /handlers/, it is sent to the handling entry points (functions, closures, etc.) as an argument. Usage is otherwise identical. ‘‘conversation’’ is not available in configuration scripts or in /tasks/.

    -The Request +The Request

    conversation.reference @@ -5683,7 +5720,7 @@ In /web/dynamic/ (and /web/static/), our supported media type will be set according to the filename extension (page 1↑).

    -The Response +The Response

    By default, Prudence initializes all response attributes according to the client’s preferences (page 1↑). However, you may want to explicitly change them. Also note that some clients to not specify preferences, in which case the response attributes will be undefined. @@ -5788,7 +5825,7 @@ The default encoding will be set according to conversation.preferences (page 1↑).Use conversation.request.clientInfo.acceptedEncodings to find out more generally which encodings the client supports.

    -Cookies +Cookies

    conversation.cookies @@ -5857,7 +5894,7 @@ For new cookies, be sure to call save() on the cookie in order to send it in the response, thus asking the client to create it, or delete() if you want to cancel the creation (in which case nothing will be sent in the response).

    -Conditional Requests +Conditional Requests

    These attributes are only available for /resources/. See conditional requests (page 1↑) for use cases. @@ -5890,7 +5927,7 @@ conversation.tag is the underlying Tag instance.

    -Client Caching +Client Caching

    These attributes are only available for /resources/. See conditional requests and client caching (page 1↑) for use cases. @@ -5932,7 +5969,7 @@ conversation.expirationDate is the underlying JVM Date instance. Refer to the Java API documentation for details.

    -Resource Initialization +Resource Initialization

    conversation.addMediaTypeByName, conversation.addMediaTypeByExtension, conversation.addMediaType @@ -5953,7 +5990,7 @@ conversation.addMediaType accepts the underlying MediaType instance.

    -Conversation Flow +Conversation Flow

    conversation.stop @@ -6025,7 +6062,7 @@ True if the conversation has been deferred via a call to conversation.defer (page 1↑).

    -Low-level Access +Low-level Access

    Use these to access the Restlet instances underlying the conversation. This is useful for features not covered by Prudence’s standard API. @@ -6058,7 +6095,7 @@ Prudence is designed to allow massive concurrency and scalability while at the same time shielding you from the gorier details. However, when it comes to sharing state between different parts of your code, it’s critical that you understand Prudence’s state services.

    -Global Variables +Global Variables

    You know how local variables work in your programming language: they exist only for the duration of a function call, after which their state is discarded. If you want state to persist beyond the function call, you use a global variable (or a ‘‘static’’ local, which is really a global). @@ -6073,7 +6110,7 @@ The exception to this is code in /resources/, in which language globals might persist. To improve performance, Prudence caches the global context for these in memory, with the side effect that your language globals persist beyond a single user request. For various reasons, however, Prudence may reset this global context. You should not rely on this side effect, and instead always use application.globals (page 1↑) or even executable.globals (page 1↑).

    -application.globals vs. executable.globals +application.globals vs. executable.globals

    You should prefer application.globals. By doing so, you’ll minimize interdependencies between applications, and help make each application deployable on its own. @@ -6097,7 +6134,7 @@ Note for Clojure flavor: All Clojure vars are VM-wide globals equivalent in scope to executable.globals. You usually work with namespaces that Prudence creates on the fly, so they do not persist beyond the execution. However, if you explicitly define a namespace, then you use it as a place for shared state. It will then be up to you to make sure that your namescape doesn’t collide with that of another application installed in the Prudence insstance. Though this approach might seem to break our rule of thumb here, of preferring application.globals to executable.globals, it is more idiomatic to Clojure and Lisps more generally.

    -Concurrency +Concurrency

    Though application.globals and executable.globals are thread safe, it’s important to understand how to use them properly. @@ -6211,7 +6248,7 @@ But, don’t be discouraged. The standard protocol for using Prudence’s globals will likely be good enough for the vast majority of your state-sharing needs.

    -conversation.locals +conversation.locals

    These are not ‘‘local’’ in the same way that function locals are. The term ‘‘local’’ here should be read as ‘‘local to the conversation’’ (compare with the term ‘‘thread locals’’). They are ‘‘global’’ in the sense that they can be accessed by any function in your code, but are ‘‘local’’ in the sense that they persist only for the duration of the user request. @@ -6234,6 +6271,12 @@ They can be used as document.cacheKeyPattern (page 1↑) variables, in conjunction with cache key pattern handlers (page 1↑). +

    +Sharing State Between Prudence Instances +

    +
    +Prudence comes with Hazelcast, which does an excellent job at sharing standard JVM maps, lists, locks and other state facilities. See the Hazelcast documentation for complete information. +

    Debugging

    @@ -6334,13 +6377,13 @@ Loggers

    -The Base Logger +The Base Logger

    Use application.logger (page 1↑) to send text messages to the log. The logger name defaults to your application’s subdirectory name, but can be configured via the applicationLoggerName setting (page 1↑).

    -Sub-Loggers +Sub-Loggers

    Large applications might benefit from using more than one logger. Use application.getSubLogger (page 1↑) with any name you wish. This name will be appended to your base logger name with a ‘‘.’’, and will inherit the base logger’s configuration by default. For example, if your base logger is named ‘‘wackywiki’’, then application.getSubLogger(’backend’) will appear as ‘‘wackiwiki.backend’’ in the log files. @@ -6391,7 +6434,7 @@ The Prudence defaults are mostly at ‘‘info’’ level. You are encouraged to experiment with lower levels in order to see how Prudence’s internals function!

    -Appenders +Appenders

    An ‘‘appender’’ is the service that actually writes log messages. Appenders are configured with properties prefixed with ‘‘log4j.appender.X’’, where X is the name of the appender. @@ -6400,7 +6443,7 @@ Prudence by default uses two rolling file appenders, one called ‘‘web’’ for web.log, and one called ‘‘prudence’’ for prudence.log. Additionally, a console appender named ‘‘console’’ and a remote appender named ‘‘remote’’ are configured, though they are not used by default.

    -Loggers +Loggers

    A ‘‘logger’’ is the service to which you send your log messages. It decides whether to write the message according to its level, and if so sends it to one or more appenders. Loggers are configured with properties prefixed with ‘‘log4j.logger.X’’, where X is the name of the logger. Logger names appear in the logs for every message, and are thus useful for organization your log. @@ -6459,7 +6502,7 @@

    -Separate Logs Per Application +Separate Logs Per Application

    We’ll create a new appender for each new log file we need. In this example, we’ll just copy the ‘‘prudence’’ appender with a new name: @@ -6521,7 +6564,7 @@ Customization

    -Changing the Root URL +Changing the Root URL

    Let’s say we want prudence-admin at the ‘‘/admin/’’ URL on the default host, and the ‘‘/prudence/admin/’’ URL on myHost. We’ll edit its settings.*. Here’s an example for the JavaScript flavor: @@ -6534,7 +6577,7 @@

    -Requiring a Password +Requiring a Password

    As an example, we’ll route the application’s root router through an HTTP authentication filter (page 1↑). @@ -6591,7 +6634,7 @@ The scripts work by detecting your running environment and attempting to use the appropriate Apache Commons Daemon binary. Prudence comes with binaries for Linux, Solaris, Darwin (OS X) and Windows, for both 32bit and 64bit architectures.

    -Notes for Linux +Notes for Linux

      @@ -6617,7 +6660,7 @@

    -Notes for Windows +Notes for Windows

      @@ -7035,29 +7078,14 @@ Scaling Tips
      -If you want your application to handle many concurrent users, then you’re fighting this fact: a request will get queued in the best case or discarded in the worst case if there is no thread available to serve it. -
      -
      -Your challenge is to make sure that a thread is always available. And it’s not easy, as you’ll find out as you read through this article. -
      -
      Scalability is the ability to respond to a growing number of user requests without degradation in response time. Two variables influence it: 1) your total number of threads and 2) the time it takes each thread to process a request. Increasing the number of threads seems straightforward: you can keep adding more machines behind load balancers. However, the two variables are tied, as there are diminishing returns and even reversals: beyond a certain point, time per request can actually grow longer as you add threads and machines.
      -Let’s ignore the first variable, because the challenge of getting more machines is mostly financial. It’s the second that we can do something about as engineers: minimizing the time per request becomes an architectural challenge that encompasses the entire structure of your application. +Let’s ignore the first variable here, because the challenge of getting more machines is mostly financial. It’s the second that you can do something about as an engineer.
      -Meanwhile, feel free to frame these inspirational slogans on your wall: +If you want your application to handle many concurrent users, then you’re fighting this fact: a request will get queued in the best case or discarded in the worst case if there is no thread available to serve it. Your challenge is to make sure that a thread is always available. And it’s not easy, as you’ll find out as you read through this article. Minimizing the time per request becomes an architectural challenge that encompasses the entire structure of your application
      -
      -Requests are hot potatoes: Pass them on! -
      -
      -And: -
      -
      -It’s better to have many short requests than one long one. -

      Performance Does Not Equal Scalability

      @@ -7071,7 +7099,7 @@ This is an important mantra for two reasons:

    -1. Performant Can Mean Less Scalable +1. Performant Can Mean Less Scalable

    Optimizing for performance can adversely affect your scalability. The reason is contextual: when you optimize for performance, you often work in an isolated context, specifically so you can accurately measure response times and fine-tune them. For example, making sure that a specific SQL query is fast would involve just running that query. A full-blown experiment involving millions of users doing various operations on your application would make it very hard to accurately measure and optimize the query. Unfortunately, by working in an isolated context you cannot easily see how your efforts would affect other parts of an application. To do so would require a lot of experience and imagination. To continue our example, in order to optimize your one SQL query you might create an index. That index might need to be synchronized with many servers in your cluster. And that synchronization overhead, in turn, could seriously affect your ability to scale. Congratulations! You’ve made one query run fast in a situation that never happens in real life, and you’ve brought your web site to a halt. @@ -7080,7 +7108,7 @@ One way to try to get around this is to fake scale. Tools such as JMeter, Siege and ApacheBench can create ‘‘load.’’ They also create unfounded confidence in engineers. If you simulate 10,000 users bombarding a single web page, then you’re, as before, working in an isolated context. All you’ve done is add concurrency to your performance optimization measurements. Your application pathways might work optimally in these situations, but this might very well be due to the fact that the system is not doing anything else. Add those ‘‘other’’ operations in, and you might get worse site capacity than you did before ‘‘optimizing.’’

    -2. Wasted Effort +2. Wasted Effort

    Even if you don’t adversely affect your scalability through optimizing for performance, you might be making no gains, either. No harm done? Well, plenty of harm, maybe. Optimizing for performance might waste a lot of development time and money. This effort would be better spent on work that could actually help scalability. @@ -7089,53 +7117,62 @@ And, perhaps more seriously, it demonstrates a fundamental misunderstanding of the problem field. If you don’t know what your problems are, you’ll never be able to solve them.

    -Optimizing for Scalability +Pitfalls

    -So, what can you do? +Study the problem field carefully. Understand the challenges and potential pitfalls. You don’t have to apply every single scalability strategy up-front, but at least make sure you’re not making a fatal mistake, such as binding yourself strongly to a technology or product with poor scalability. A bad decision can mean that when you need to scale up in the future, no amount of money and engineering effort would be able to save you before you lose customers and tarnish your brand.
    -First, study the problem field carefully. Understand the challenges and potential pitfalls. You don’t have to apply every single strategy up-front, but at least make sure you’re not making a fatal mistake, such as binding yourself strongly to a technology or product with poor scalability. A poor decision can mean that when you need to scale up in the future, no amount of money and engineering effort will be able to save you in time. +Moreover, be very careful of blindly applying ‘‘successful’’ strategies used and recommended by others to your product. What worked for them might not work for you. In fact, there’s a chance that their strategy doesn’t even work for them, and they just think it did because of a combination of seemingly unrelated factors. The realm of web scalability is still young, full of guesswork, intuition and magical thinking. Even the experts are often making it up as they’re going along.
    -Moreover, be very careful of blindly applying strategies used by other people to your own application. What worked for them might not work for you. In fact, there’s a chance that their strategy doesn’t even work for them, and they just think it did because of a combination of seemingly unrelated factors. The realm of web scalability is still young, full of guesswork, intuition and magical thinking. +Generally, be very suspicious of products or technologies being touted as ‘‘faster’’ than others. ‘‘Fast’’ doesn’t say anything about the ability to scale. Is a certain database engine ‘‘fast’’? That’s important for certain applications, no doubt. But maybe the database is missing important clustering features, such that it would be a poor choice for scalable applications. Does a certain programming language execute faster than another? That’s great if you’re doing video compression, but speed of execution might not have have noticeable effect on scalability. Web applications mostly do I/O, not computation. The same web application might have very similar performance characteristics whether it’s written in C++ or PHP.
    -Be especially careful of applying a solution before you know if you even have a problem. +Moreover, if the faster language is difficult to work with, has poor debugging tools, limited integration with web technologies, then it would slow down your work and your ability to scale.
    -
    -How to identify the problems? You can create simulations and measurements of scalability rather than performance. You need to model actual user behavior patterns, allow for a diversity of such behaviors to happen concurrently, and replicate this diversity on a massive scale. +
    +Speed of execution can actually help scalability in its financial aspect: If your application servers are constantly at maximum CPU load, then a faster execution platform would let you cram more web threads into each server. This will help you reduce costs. For example, see Facebook's HipHop: they saved millions by translating their PHP code to C. Because Prudence is built on the fast JVM platform, you’re in good hands in this respect. Note, however, that there’s a potential pitfall to high performance: more threads threads per machine would also mean more RAM requirements per machine, which also costs money. Crunch the numbers and make sure that you’re actually saving money by increasing performance. Once again, performance does not equal scalability. +
    +
    +That last point about programming languages is worth some elaboration. Beyond how well your chosen technologies perform, it’s important to evaluate them in terms to how easy they are to manage. Large web sites are large projects, involving large teams of people and large amounts of money. That’s difficult enough to coordinate. You want the technology to present you with as few extra managerial challenges as possible.
    -Creating such a simulation is a difficult and expensive, as is monitoring and interpreting the results and identifying potential bottlenecks. This is the main reason for the lack of good data and good judgment about how to scale. Most of what we know comes from tweaking real live web sites, which either comes at the expense of user experience, or allows for very limited experimentation. Your best bet is to hire a team who’s already been through this before. +Beware especially of languages and platforms described as ‘‘agile,’’ as if they somehow embody the spirit of the popular Agile Manifesto. Often, ‘‘agile’’ seems to emphasize the following features: forgiveness for syntax slips, light or no type checking, automatic memory management and automatic concurrency—all features that seem to speed up development, but could just as well be used for sloppy, error-prone, hard-to-debug, and hard-to-fix code, slowing down development in the long run. If you’re reading this article, then your goal is likely not to create a quick demo, but a stable application with a long, evolving life span.
    -Generally, be very suspicious of products or technologies being touted as ‘‘faster’’ than others. ‘‘Fast’’ doesn’t say anything about the ability to scale. Is a certain database engine ‘‘fast’’? That’s important for certain applications, no doubt. But maybe it’s missing important clustering features, making it a poor choice for large applications. Does a certain programming language execute faster than another? That’s great if you’re doing video compression, but speed of execution might not be your bottleneck at all. Web applications mostly do I/O, not computation. The same web application might have very similar performance characteristics whether it’s written in C++ or PHP. +Ignore the buzzwords (‘‘productivity’’, ‘‘fast’’), and instead make sure you’re choosing technology that you can control, instead of technology that will control you.
    -Moreover, if the faster language is difficult to work with, has poor debugging tools, limited integration with web technologies, then it would slow down your work and your ability to scale. -
    -
    -Speed of execution can actually help scalability in one respect: If your application servers are constantly at maximum CPU load, then a faster execution platform would let you cram more web threads into each server. This will help you reduce costs. Because Prudence is built on the fast JVM platform, you’re in good hands in this respect. Also see Facebook's HipHop. Note, however, that there’s a cost to high performance: more threads threads per machine would also mean more RAM requirements per machine, which also costs money. Once again, performance does not equal scalability, and you need to optimize specifically for scalability. -
    -
    -In summary, your architectural objective is to increase concurrency, not necessarily performance. Optimizing for concurrency means breaking up tasks into as many pieces as possible, and possibly even breaking requests into smaller pieces. We’ll cover numerous strategies here, from frontend to backend. +We discuss this topic some more in ‘‘The Case for Rest’’ (page 1↑). By building on the existing web infrastructure, Prudence can make large Internet projects easier to manage.

    -Project Scalability +Analysis

    -That last point about programming languages is worth some elaboration. Beyond how well your chosen technologies perform, it’s important to evaluate them in terms to how easy they are to manage. Large web sites are large projects, involving large teams of people and large amounts of money. That’s difficult enough to coordinate. You want the technology to present you with as few extra managerial challenges as possible. +Be especially careful of applying a solution before you know if you even have a problem.
    -Beware especially of languages described as ‘‘agile,’’ as if they somehow embody the spirit of the popular Agile Manifesto. Often, this epithet seems to emphasize the following aspects fo code: forgiveness for syntax slips, light or no type checking, automatic memory management and concurrency—all features that could just as well be used for sloppy, error-prone, hard-to-debug, and hard-to-fix code. Beware, too, of the cult of ‘‘productivity’’: if you’re reading this article, then your goal is likely not to create a quick demo, but a stable application with a long, evolving life span. +How to identify your scalability bottlenecks? You can create simulations and measurements of scalability rather than performance. You need to model actual user behavior patterns, allow for a diversity of such behaviors to happen concurrently, and replicate this diversity on a massive scale.
    -Ignore the buzzwords, and instead make sure you’re choosing technology that you can control, instead of technology that will control you. +Creating such a simulation is a difficult and expensive, as is monitoring and interpreting the results and identifying potential bottlenecks. This is the main reason for the lack of good data and good judgment about how to scale. Most of what we know comes from tweaking real live web sites, which either comes at the expense of user experience, or allows for very limited experimentation. Your best bet is to hire a team who’s already been through this before.
    -
    -We discuss this topic some more in ‘‘The Case for Rest’’ (page 1↑). By building on the existing web infrastructure, Prudence can make large Internet projects easier to manage. +

    +Optimizing for Scalability +

    +
    +In summary, your architectural objective is to increase concurrency, not necessarily performance. Optimizing for concurrency means breaking up tasks into as many pieces as possible, and possibly even breaking requests into smaller pieces. We’ll cover numerous strategies here, from frontend to backend. Meanwhile, feel free to frame these inspirational slogans on your wall:
    +
    +Requests are hot potatoes: Pass them on! +
    +
    +And: +
    +
    +It’s better to have many short requests than one long one. +

    Caching

    @@ -7167,7 +7204,7 @@ Note that even very small cache durations can make a big difference in application stability. Consider it the maximum throttle for load. For example, a huge sudden peak of user load, or even a denial-of-service (DOS) attack, might overrun your thread pool. However, a cache duration of just 1 second would mean that your page would never be generated more than once every second. You are instantly protected against a destructive scenario.

    -Cache Warming +Cache Warming

    Caches work best when they are ‘‘warm,’’ meaning that they are full of data ready to be retrieved. @@ -7239,7 +7276,7 @@ Prudence’s sister project, Diligence, is designed specifically to solve this problem. It not only caches your data structures, but it validates them in memory using your coded logic, instead of invalidating them and forcing them to be re-fetched from the database. It supports data structures commonly used with relational databases, pluggable storage technologies, high-performance resource pooling and throttling, and natural integration with Prudence. Together, Diligence and Prudence form a solid platform for building scalable, data-backed web applications. At the time of this writing, Diligence is still under development. We hope to release it as open source soon, so stay tuned!

    -Cache Backends +Cache Backends

    Your cache backend can become a bottleneck to scalability if 1) it can’t handle the amount of data you are storing, or 2) it can’t respond quickly enough to cache fetching. @@ -7263,7 +7300,7 @@ You’ll see many web frameworks out there that support a distributed memory cache (usually memcached) and recommend you use it (‘‘it’s fast!’’ they claim, except that it can be slower per request than optimized databases, and that anyway performance does not equal scalability). We’d urge you to consider that advice carefully: keeping your cache warm is a challenge made much easier if you can store it in a persistent backend, and database backends can take you very far in scale without adding a new infrastructure to your deployment. It’s good to know, though, that Prudence’s support for Hazelcast and memcached is there to help you in case you reach the popularity levels of LiveJournal, Facebook, YouTube, Twitter, etc.

    -Client-Side Caching +Client-Side Caching

    Modern web browsers support client-side caching, a feature meant to improve the user experience and save bandwidth costs. A site that makes good use of client-side caching will appear to work fast for users, and will also help to increase your site’s popularity index with search engines. @@ -7284,7 +7321,7 @@ It’s generally safer to apply offline caching to your static resources, such as graphics and other resources. A general custom is to ask the client to cache these ‘‘forever’’ (10 years), and then, if you need to update a file, you simply create a new one with a new URL, and have all your HTML refer to the new version. Because clients cache according to URL, their cached for the old version will simply not be ignored. See CacheControlFilter (page 1↑). There, you’ll also see some more tricks Prudence offers you to help optimize the user experience, such as unifying/minimizing client-side JavaScript and CSS.

    -Upstream Caching +Upstream Caching

    If you need to quickly scale a web site that has not been designed for caching, a band-aid is available: upstream caches, such as Varnish, NCache and even Squid. For archaic reasons, these are called ‘‘reverse proxy’’ caches, but they really work more like filters. According to attributes in the user request (URL, cookies, etc.), they decide whether to fetch and send a cached version of the response, or to allow the request to continue to your application servers. @@ -7317,7 +7354,7 @@ One size does not fit all: you will want to use different strategies to deal with different kinds of tasks.

    -Necessary Tasks +Necessary Tasks

    The user can’t continue without the task being resolved. @@ -7332,7 +7369,7 @@ Implementing a handling service is by no means trivial. It adds a new component to your architecture, one that also has to be made to scale. One can also argue that it adversely affects user experience by adding overhead, delaying the time it takes for the task to complete. The bottom line, though, is you’re vastly increasing concurrency and your ability to scale. And, you’re actually improving the user experience: they would get a feedback on what’s going on rather than having their browsers spin, waiting for their requests to complete.

    -Deferrable Tasks +Deferrable Tasks

    It’s OK if the task occurs later. @@ -7350,7 +7387,7 @@ Prudence lets you easily defer work internally via tasks (page 1↑). In particular, you can spawn a task dynamically to do work without tying up the current thread. Also, Prudence comes with Hazelcast, which is used for an optional distributed cache backend (page 1↑), but also has excellent support for handling distributed task queues.

    -File Uploads +File Uploads

    These are potentially very long requests that you cannot break into smaller tasks, because they depend entirely on the client. As such, they present a unique challenge to scalability. @@ -7362,7 +7399,7 @@ Unfortunately, many concurrent uploads will still saturate your threads. If your application relies on frequent file uploads, you are advised to handle such requests on separate Prudence instances, so that uploads won’t stop your application from handling other web requests. You may also consider using a third-party service specializing in file storage and web uploads.

    -Asynchronous Request Processing +Asynchronous Request Processing

    Having the client poll until a task is completed lets you break up a task into multiple requests and increase concurrency. Another strategy is to break an individual request into pieces. While you’re processing the request and preparing the response, you can free the web thread to handle other requests. When you’re ready to deliver content, you raise a signal, and the next available web thread takes care of sending your response to the client. You can continue doing this indefinitely until the response is complete. From the client’s perspective it’s a single request: a web browser, for example, would spin until the request was completed. @@ -7401,7 +7438,7 @@ Backend Partitioning
    -You can keeping adding more nodes behind a load balancer insofar as each request does not have to access shared state. Useful web applications, however, are likely data-driven, requiring considerable state. +You can keep adding more nodes behind a load balancer insofar as each request does not have to access shared state. Useful web applications, however, are likely data-driven, requiring considerable state.
    If the challenge in handling web requests is cutting down the length of request, then that of backends is the struggle against degraded performance as you add new nodes to your database cluster. These nodes have to synchronize their state with each other, and that synchronization overhead increases exponentially. There’s a definite point of diminishing returns. @@ -7419,7 +7456,7 @@ Partitioning can happen in various components of your application, such as application servers, the caching system, task queues, etc. However, it is most effective, and most complicated to implement, for databases. Our discussion will thus focus on relational (SQL) databases. Other systems would likely require simpler subsets of these strategies.

    -Reads vs. Writes +Reads vs. Writes

    This simple partitioning scheme greatly reduces synchronization overhead. Read-only servers will never send data to the writable servers. Also, knowing that they don’t have to handle writes means you can optimize their configurations for aggressive caching. @@ -7437,7 +7474,7 @@ Note that one feature you lose is the ability to have a transaction in which a write might happen, because a transaction cannot contain both a read-only node and a write-only node. If you must have atomicity, you will have to do your transaction on the writable cluster, or have two transactions: one to lookup and see if you need to change the data, and the second to perform the change—while first checking again that data didn’t change since the previous transaction. Too much of this obviously lessens the effectiveness of read/write partitioning.

    -By Feature +By Feature

    The most obvious and effective partitioning scheme is by feature. Your site might offer different kinds of services that are functionally independent of each other, even though they are displayed to users as united. Behind the scenes, each feature uses a different set of tables. The rule of thumb is trivial: if you can put the tables in separate databases, then you can put these databases in separate clusters. @@ -7458,7 +7495,7 @@ Also consider that some features might be candidates for using a ‘‘NoSQL’’ database (page 1↓). Choose the best backend per feature.

    -By Section +By Section

    Another kind of partitioning is sometimes called ‘‘sharding.’’ It involves splitting up tables into sections that can be placed in different databases. Some databases support sharding as part of their synchronization strategy, but you can also implement it in your code. The great thing about sharding is that it lets you create as many shards (and clusters) as you want. It’s the key to the truly large scale. @@ -7537,7 +7574,7 @@ Relational databases require a lot of synchronization overhead for clusters, limiting their scalability. Though partitioning can take you far, using a ‘‘NoSQL’’ database could take you even further.

    -Graph Databases +Graph Databases

    If your relational data structure contains arbitrary-depth relationships or many ‘‘generic’’ relationships forced into a relational model, then consider using a graph database instead. Not only will traversing your data be faster, but also the database structure will allow for more efficient performance. The implications for scalability can be dramatic. @@ -7552,7 +7589,7 @@ A popular graph database is Neo4j, and it’s especially easy to use with Prudence. Because it’s JVM-based, you can access it internally from Prudence. It also has embedded bindings for many of Prudence’s supported languages, and supports a network REST interface which you can easily access via Prudence’s document.external.

    -Document Databases +Document Databases

    If your data contains mostly ‘‘documents’’—self-contained records with few relationships to other documents—then consider a document database. @@ -7573,7 +7610,7 @@ We’ve started a project to better integrate Prudence JavaScript with MongoDB. It is included in the ‘‘Savory JavaScript’’ edition.

    -Column Databases +Column Databases

    These can be considered as subsets of document databases. The ‘‘document,’’ in this case, is required to have an especially simple, one-dimensional structure. @@ -7588,7 +7625,7 @@ Though you can run your own column database via open source projects like Cassandra (originally developed by/for Facebook) and HBase, the document databases mentioned above offer richer document structures and more features. Consider column databases only if you need truly massive scale, or if you want to make use of the cheap storage offered by ‘‘cloud’’ vendors.

    -Best of All Worlds +Best of All Worlds

    Of course, consider that it’s very possible to use both SQL and ‘‘NoSQL’’ (graph, document, column) databases together for different parts of your application. See backend partitioning (page 1↑). @@ -7699,7 +7736,7 @@ REST

    -Why are plural URL forms for aggregate resources (/animal/cats/) preferred over singular forms (/animal/cat/)? +Why are plural URL forms for aggregate resources (/animal/cats/) preferred over singular forms (/animal/cat/)?

    You’ll see RESTful implementations that use either convention. The advantage of using the singular form is that you have less addresses, and what some people would call a more elegant scheme: @@ -7730,7 +7767,7 @@ Languages

    -How to avoid the ‘‘Adapter not available for language: xml’’ parsing exception for XML files? +How to avoid the ‘‘Adapter not available for language: xml’’ parsing exception for XML files?

    The problem is that the XML header confuses Scripturian, Prudence’s langauge parser, which considers the ‘‘<?’’ a possible scriptlet delimeter: @@ -7756,7 +7793,7 @@ Scalability

    -I heard REST is very scalable. Is this true? Does this mean Prudence can support many millions of users? +I heard REST is very scalable. Is this true? Does this mean Prudence can support many millions of users?

    Yes, if you know what you’re doing. See ‘‘The Case for REST’’ (page 1↑) and ‘‘Scaling Tips’’ (page 1↑) for in-depth discussions. @@ -7771,7 +7808,7 @@ Performance

    -How well does Prudence perform? How well does it scale? +How well does Prudence perform? How well does it scale?

    First, recognize that there are two common uses for the term ‘‘scale.’’ REST is often referred to as an inherently scalable architecture, but that has more to do with project management than technical performance. This difference is addressed in the ‘‘The Case for REST’’ (page 1↑). @@ -7813,7 +7850,7 @@ The author is not a lawyer. This is not legal advice, but a personal, and possibly wrong interpretation. The wording of the license itself supersedes anything written here.

    -Does the LGPL mean I can’t use Prudence unless my product is open sourced? +Does the LGPL mean I can’t use Prudence unless my product is open sourced?

    The GPL family of licenses restrict your ability to redistribute software, not to use it. You are free to use Prudence as you please within your organization, even if you’re using it to serve public web sites (though with no warranty nor an implicit guarantee of support from Three Crickets, the copyright holder). @@ -7834,7 +7871,7 @@ We understand that in some cases open sourcing your product is impossible. As a last resort, we offer you a commercial license. Please contact us for details.

    -Why the LGPL and not the GPL? +Why the LGPL and not the GPL?

    The Lesser GPL used to be called the ‘‘Library GPL,’’ and was originally drafted for glibc. It represents a certain admission of defeat: there are so many alternatives to our library out there, that you might not consider using our library under GPL. @@ -7848,10 +7885,10 @@
    diff -Nru prudence-clojure-1.0/content/bin/run.bat prudence-clojure-1.0/content/bin/run.bat --- prudence-clojure-1.0/content/bin/run.bat 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/bin/run.bat 2011-01-08 00:56:02.000000000 +0000 @@ -1,6 +1,6 @@ @ECHO OFF REM # -REM # Copyright 2009-2010 Three Crickets LLC. +REM # Copyright 2009-2011 Three Crickets LLC. REM # REM # The contents of this file are subject to the terms of the LGPL version 3.0: REM # http://www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/bin/run.sh prudence-clojure-1.0/content/bin/run.sh --- prudence-clojure-1.0/content/bin/run.sh 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/bin/run.sh 2011-01-08 00:56:02.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2009-2010 Three Crickets LLC. +# Copyright 2009-2011 Three Crickets LLC. # # The contents of this file are subject to the terms of the LGPL version 3.0: # http://www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/application/application.clj prudence-clojure-1.0/content/defaults/application/application.clj --- prudence-clojure-1.0/content/defaults/application/application.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/application/application.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Application ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/application/default.clj prudence-clojure-1.0/content/defaults/application/default.clj --- prudence-clojure-1.0/content/defaults/application/default.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/application/default.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Application ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html @@ -80,6 +80,13 @@ (.addTaskCollector scheduler (ApplicationTaskCollector. (File. (str application-base-path "/crontab")) application-instance)) ; +; Handlers +; + +(.put application-globals "com.threecrickets.prudence.DelegatedHandler.languageManager" language-manager) +(.put application-globals "com.threecrickets.prudence.DelegatedHandler.defaultLanguageTag" "clojure") + +; ; ApplicationService ; diff -Nru prudence-clojure-1.0/content/defaults/application/routing.clj prudence-clojure-1.0/content/defaults/application/routing.clj --- prudence-clojure-1.0/content/defaults/application/routing.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/application/routing.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Application Routing ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/application/settings.clj prudence-clojure-1.0/content/defaults/application/settings.clj --- prudence-clojure-1.0/content/defaults/application/settings.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/application/settings.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Application Settings ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/instance/clients.clj prudence-clojure-1.0/content/defaults/instance/clients.clj --- prudence-clojure-1.0/content/defaults/instance/clients.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/instance/clients.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Clients ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/instance/component.clj prudence-clojure-1.0/content/defaults/instance/component.clj --- prudence-clojure-1.0/content/defaults/instance/component.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/instance/component.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Component ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/instance/default.clj prudence-clojure-1.0/content/defaults/instance/default.clj --- prudence-clojure-1.0/content/defaults/instance/default.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/instance/default.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Instance ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html @@ -12,8 +12,9 @@ ; (import - 'java.util.logging.LogManager - 'com.threecrickets.scripturian.exception.DocumentNotFoundException) + 'java.util.logging.LogManager + 'com.threecrickets.scripturian.exception.DocumentNotFoundException + 'com.threecrickets.prudence.service.ApplicationService) (defn execute-or-default ([name default] @@ -32,7 +33,7 @@ ; (def prudence-version "1.0") -(def prudence-revision "-789") +(def prudence-revision "-801") (if (= (.length prudence-revision) 1) (def prudence-revision "")) (def prudence-flavor "Clojure") @@ -138,3 +139,7 @@ (let [futures (for [task tasks] (.submit fixed-executor task))] (dorun (for [future futures] (.get future))) (println "Finished all startup tasks in" (/ (- (System/currentTimeMillis) start-time) 1000.0) "seconds.")))) + +(doseq [application applications] + (let [application-service (ApplicationService. application)] + (.task application-service "startup/" 0 0 false))) diff -Nru prudence-clojure-1.0/content/defaults/instance/hosts.clj prudence-clojure-1.0/content/defaults/instance/hosts.clj --- prudence-clojure-1.0/content/defaults/instance/hosts.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/instance/hosts.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Hosts ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/instance/routing.clj prudence-clojure-1.0/content/defaults/instance/routing.clj --- prudence-clojure-1.0/content/defaults/instance/routing.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/instance/routing.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Routing ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/defaults/instance/servers.clj prudence-clojure-1.0/content/defaults/instance/servers.clj --- prudence-clojure-1.0/content/defaults/instance/servers.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/defaults/instance/servers.clj 2011-01-08 00:56:03.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Servers ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/documentation/prudence_manual.html prudence-clojure-1.0/content/documentation/prudence_manual.html --- prudence-clojure-1.0/content/documentation/prudence_manual.html 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/documentation/prudence_manual.html 2011-01-08 00:56:02.000000000 +0000 @@ -3,7 +3,7 @@ - + Prudence Manual @@ -20,7 +20,7 @@
    -Copyright 2009-2010 by Three Crickets LLC.
    +Copyright 2009-2011 by Three Crickets LLC.
    This work is licensed under a
    Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.


    @@ -1591,7 +1591,7 @@ See logging (page 1↓).

    -/configuration/ +/configuration/

    There are a few essential configuration files here. @@ -1612,12 +1612,15 @@

    -/libraries/ +/libraries/

    Here you will find Prudence’s main libraries as well as support libraries. The main /libraries/ subdirectory is for Java archives (JARs), but you may find subdirectories for libraries in other languages, such as /libraries/python/ for Python.
    +This directory also serves as a common /libraries/ directory for all applications, similarly to how an individual application’s /libraries/ directory (page 1↓) works. You can thus put source code here that you want to share for all your applications. +
    +
    If you add your own JARs, make sure to edit the scripts in /bin/ to accommodate your additions.
    @@ -1991,10 +1994,10 @@ /tasks/
    -Tasks (page 1↓)are straightforward scripts that can be run on-demand or scheduled to run and specific times. They are straightforward in that, upon execution, the code is simply run as is. There is no particular entry point as with /resources/ or /handlers/. +Tasks (page 1↓) are straightforward scripts that can be run on-demand or scheduled to run and specific times. They are straightforward in that, upon execution, the code is simply run as is. There is no particular entry point as with /resources/ or /handlers/.

    -/libraries/ +/libraries/

    All your code, whether it’s in /resources/, /handlers/, /tasks/ or in scriptlets embedded in /web/dynamic/ and /fragments/, can include code from /libraries/. @@ -2002,6 +2005,9 @@
    Use whatever mechanism is appropriate for your language: ‘‘import’’ for Python or Ruby, ‘‘use’’ for Clojure, etc. For languages that don’t have inclusion mechanisms—Groovy, JavaScript—you can use Prudence’s inclusion mechanism, document.execute (page 1↓).
    +
    +To share source code with all your applications, use the instance’s /libraries/ directory (page 1↑). +

    /uploads/

    @@ -3779,8 +3785,28 @@

    At Startup

    +

    +Startup Task +

    +
    +Prudence will automatically run the task called ‘‘startup/’’ upon startup. Note that it will run after all the other startup tasks (defrosting, preheating) finish, in order to make sure your application is ‘‘hot’’ first. If you need multiple tasks running—usually repeating tasks, such as those that do general maintenance, monitor resource availability, send out email reminders, etc.—you can start them from your startup task using application.task (page 1↓). +
    +
    +For example, here is an application’s ‘‘/tasks/startup.js’’ file: +
    +
    + +
    +
    application.logger.info(’Scheduling monitor task to repeat every second’)
    +application.task(’monitor/’, 1000, 1000, false) 
    +
    +
    +
    +

    +Custom Startup Tasks +

    -Use application.task (page 1↓) to schedule general tasks in any of the application’s configuration scripts (page 1↑). This is especially useful for repeating tasks, such as those that do general maintenance, monitor resource availability, send out email reminders, etc. +You can also use application.task (page 1↓) to schedule general tasks in any of the application’s configuration scripts (page 1↑).
    Here is an example default.js (note the use of ‘‘applicationService’’ instead of ‘‘application’’): @@ -4030,7 +4056,7 @@ Before a request reaches your application, it is routed by your Prudence instance.

    -Step 1: Servers +Step 1: Servers

    Requests come in from servers. Prudence instances have at the minimum one server, but can have more than one. Each server listens at a particular HTTP port, and multiple servers may in turn be restricted to particular network interfaces on your machine. By default, Prudence has a single server that listens to HTTP requests on port 8080 coming in from all network interfaces. @@ -4039,13 +4065,13 @@ You can configure your servers in /instance/servers.* (page 1↑).

    -Step 2: The Component +Step 2: The Component

    There is only one component per Prudence instance, and all servers route to it. This allows Prudence a unified mechanism to deal with all incoming requests.

    -Step 3: Virtual Hosts +Step 3: Virtual Hosts

    The component’s router decides which virtual host should receive the request. The decision is often made according to the domain name in the URL, but can also take into account which server it came from. Virtual hosting is a tool to let you host multiple sites on the same Prudence instance, but it can be used for more subtle kinds of routing, too. @@ -4057,7 +4083,7 @@ You can configure your virtual hosts in /instance/hosts.* (page 1↑).

    -Step 4: Applications +Step 4: Applications

    Using ‘‘hosts’’ in your application’s /settings.* (page 1↑), you can configure which virtual hosts your application will be attached to, and the base URI for the application on each virtual host. An application can accept requests from several virtual hosts at once. @@ -4069,7 +4095,7 @@ Note that you can create a ‘‘nested’’ URI scheme for your applications. For example, one application might be attached at the root URI at a certain virtual host, ‘‘/’’, while other applications might be at different URIs beneath the root, ‘‘/wackywiki’’ and ‘‘/wackywiki/support/forum’’. The root application will not ‘‘steal’’ requests from the other applications, because the request is routed to the right application by the virtual host. The fact that the latter URI is the hierarchical descendent of the former makes no difference to the virtual host router.

    -A Complete Route +A Complete Route

    Let’s assume a client from the Internet send a request to URI ‘‘http://www.wacky.org/wackywicki/support/forum/thread/12/.’’ @@ -4090,7 +4116,7 @@ Application Routing

    -Step 5: Application Handlers +Step 5: Application Handlers

    Prudence applications come with default support for three kinds of handlers: resources (in the /resources/ subdirectory), dynamic web pages (in the /web/dynamic/ subdirectory) and static web resources (in the /web/static/ subdirectory). By default, all three handlers are attached at the root URI, ‘‘/’’, of the application (which may vary per virtual host). However, it is possible to change this in your application’s /settings.*, see resourcesBaseURL, dynamicWebBaseURL and staticWebBaseURL (page 1↑). For example, you may want your resources to be routed under ‘‘/rest-interface/’’. @@ -4102,7 +4128,7 @@ Be careful: this system allows for previous handlers in the sequence to supersede later handlers. For example, if you decide to remove scriptlets from a file named /dynamic/web/about.html and move it to /static/web/about.html, make sure to delete the former, or else the latter will not be reached.

    -Subdirectories and Filenames As URI Segments +Subdirectories and Filenames As URI Segments

    The three application handlers—resources, dynamic web pages and static web resources—are all routed by mapping the filesystem structure to a URI. Each subdirectory path or filename is directly translated into a URI segment. @@ -4114,7 +4140,7 @@ There’s one deficiency to this scheme: by directly mapping filenames, it can allow for ‘‘ugly’’ URIs that include filename extensions. For example, you’re probably used to seeing many web sites with URLs that end in ‘‘.html’’, ‘‘.php’’ and ‘‘.jsp’’. While these extensions are meaningful to the site developer, they complicate the URIs and expose internal implementation details to outsiders.

    -Pretty URIs +Pretty URIs

    To allow for prettier URIs, Prudence does a few things: @@ -4181,7 +4207,7 @@

    -Filename Extensions +Filename Extensions

    Though Prudence hides the filename extensions from the URIs, they do have two important functions: @@ -4223,7 +4249,7 @@ Actually, all of this API can also be called at runtime, allowing you to attach and change routes dynamically while the Prudence instance and its applications are up and running.

    -Hiding +Hiding

    The following will make sure that the given URI always returns a 404, even if the page or resource exists. For example, in /routing.* (JavaScript flavor): @@ -4239,7 +4265,7 @@ The resource will still be available internally, via document.internal (page 1↓), and for capturing (page 1↓).

    -Capturing +Capturing

    Prudence lets you ‘‘capture’’ abitrary URI patterns into any internal URI you wish, in /resources/, /web/dynamic/ or /web/static/. @@ -4410,7 +4436,7 @@ Of course, you might prefer to check the MIME type in code your code via conversation.mediaTypeName (page 1↓), but the above is a good example of how powerful routing can be with URI patterns.

    -Capturing Errors +Capturing Errors

    A special case of capturing is for errors. ‘‘Errors’’ can be set explicitly by you: for example, we can set conversation.statusCode (page 1↓) to 404, as we did above. However, a 500 error occurs automatically for uncaught exceptions in your code. @@ -4474,7 +4500,7 @@

    -Static Redirection +Static Redirection

    By ‘‘static’’ here is meant that redirection is configured into the application’s /routing.* script. (You can also call this API on a running application, though you should realize that it essentially changed your application’s routing.) ‘‘Dynamic’’ routing, from within /dynamic/web/ or /resources/, is described in the next section (page 1↓). @@ -4530,7 +4556,7 @@

    -Dynamic Redirection +Dynamic Redirection

    You can handle redirection at either /resources/ or /web/dynamic/ with the following API: @@ -4579,7 +4605,7 @@ See also static redirection (page 1↑).

    -Attaching +Attaching

    This is the lowest-level routing API. It allows you to route URI patterns to any custom ‘‘restlet’’ (a REST conversation handler), as well as Restlet resources (which internally use a Finder restlet). Do your attachments in the application’s /routing.* configuration script. Prudence offers some attachment ‘‘sugar’’ in addition the standard Restlet API. @@ -4614,7 +4640,7 @@

    -Filtering +Filtering

    Instances of filters, which wrap instances of other restlets, can be attached directly to URIs. The filter can then pass control to the ‘‘next’’ restlet, skip other filters along the chain, or immediately stop routing. @@ -4770,7 +4796,7 @@ For more information, see the Restlet Resolver documentation.

    -Data Attributes +Data Attributes

    All these refer to the data (‘‘entity’’) sent by the client or that you are returning to the client. Lowercase is used for request attributes, uppercase for response attributes. We’ll note these as pairs: @@ -4803,7 +4829,7 @@

    -Request Attributes +Request Attributes

      @@ -4824,7 +4850,7 @@

    -Response Attributes +Response Attributes

      @@ -4842,7 +4868,7 @@

    -URIs +URIs

    We’ll use a hyphen to show that you need to add one of the modifiers detailed after this list. For example, ‘‘{ri}’’ is the complete actual URI. @@ -4896,7 +4922,7 @@ Every URI also has a ‘‘base’’ URI, accessed via the ‘‘b’’ modifier. Usually, this is the application’s root URI on the virtual host. You can add the URI modifiers above to this URI. For example: ‘‘{rbi}’’.

    -Cache Key Variables +Cache Key Variables

    The following variables are only available for cache key patterns (page 1↓), not for routing: @@ -4914,7 +4940,7 @@

    -conversation.locals +conversation.locals

    Variables that aren’t any of the above will be assumed to be conversation.locals (page 1↓). You can thus inject any data you wish into a pattern. @@ -5102,7 +5128,7 @@ In the case of /resources/ and the configuration scripts, ‘‘this document’’ is simply the source code file. In the case /web/dynamic/, it’s the whole ‘‘text-with-scriptlets’’ page, so it is shared by all scriptlets on the page, even if they are written in different languages.

    -This Document +This Document

    Many of these attributes have to do with caching. Caching is your best tool to make sure your application can scale well. Read more about it in ‘‘Scaling Tips’’ (page 1↓). @@ -5287,7 +5313,7 @@ Forces the current document to be marked as invalid, which would trigger the current and dependent documents to be refreshed. See document.addDependency (page 1↓) and document.invalidate (page 1↓).

    -Other Documents +Other Documents

    document.include @@ -5439,6 +5465,9 @@ There are many, many use cases for document.external, and they keep growing as REST is adopted by service providers on the Internet. There are online storage, publishing and content delivery systems, public databases, archives, geolocation services, social networking applications, etc. Perhaps, with Prudence, you will create the next one. +
    +Important: The semantics of ClientResource require you to explicitly release the response as soon as you’re done using it, which will in turn release the thread used to stream the response to you. (Though these threads might eventually be reclaimed by a built-in garbage collection mechanism, leaving them hanging could lead to starvation, such that further uses of document.external will block until threads return to the pool.) It’s probably best to employ a try-finally paradigm, where the try clause contains as little code as possible, and the finally clause releases the response. See the example below. +
    This is a good place to remind you that REST is not just HTTP. By default, Prudence supports http: and file: scheme URIs for document.external, and you can add more protocols via your /instance/clients.* configuration script (page 1↑).
    @@ -5448,8 +5477,16 @@
    -
    var fixture =
    -	document.external(’file:///myfiles/fixture.json’, ’application/json’).get().text
    +
    var fixture
    +var resource = document.external(’file:///myfiles/fixture.json’, ’application/json’)
    +try {
    +	fixture = resource.get().text
    +}
    +finally {
    +	resource.response.release()
    +}
    +​
    +// Do something with the fixture here...
     
    @@ -5529,7 +5566,7 @@ Note that in /web/dynamic/ ‘‘conversation’’ is available as a global variable. In /resources/ and /handlers/, it is sent to the handling entry points (functions, closures, etc.) as an argument. Usage is otherwise identical. ‘‘conversation’’ is not available in configuration scripts or in /tasks/.

    -The Request +The Request

    conversation.reference @@ -5683,7 +5720,7 @@ In /web/dynamic/ (and /web/static/), our supported media type will be set according to the filename extension (page 1↑).

    -The Response +The Response

    By default, Prudence initializes all response attributes according to the client’s preferences (page 1↑). However, you may want to explicitly change them. Also note that some clients to not specify preferences, in which case the response attributes will be undefined. @@ -5788,7 +5825,7 @@ The default encoding will be set according to conversation.preferences (page 1↑).Use conversation.request.clientInfo.acceptedEncodings to find out more generally which encodings the client supports.

    -Cookies +Cookies

    conversation.cookies @@ -5857,7 +5894,7 @@ For new cookies, be sure to call save() on the cookie in order to send it in the response, thus asking the client to create it, or delete() if you want to cancel the creation (in which case nothing will be sent in the response).

    -Conditional Requests +Conditional Requests

    These attributes are only available for /resources/. See conditional requests (page 1↑) for use cases. @@ -5890,7 +5927,7 @@ conversation.tag is the underlying Tag instance.

    -Client Caching +Client Caching

    These attributes are only available for /resources/. See conditional requests and client caching (page 1↑) for use cases. @@ -5932,7 +5969,7 @@ conversation.expirationDate is the underlying JVM Date instance. Refer to the Java API documentation for details.

    -Resource Initialization +Resource Initialization

    conversation.addMediaTypeByName, conversation.addMediaTypeByExtension, conversation.addMediaType @@ -5953,7 +5990,7 @@ conversation.addMediaType accepts the underlying MediaType instance.

    -Conversation Flow +Conversation Flow

    conversation.stop @@ -6025,7 +6062,7 @@ True if the conversation has been deferred via a call to conversation.defer (page 1↑).

    -Low-level Access +Low-level Access

    Use these to access the Restlet instances underlying the conversation. This is useful for features not covered by Prudence’s standard API. @@ -6058,7 +6095,7 @@ Prudence is designed to allow massive concurrency and scalability while at the same time shielding you from the gorier details. However, when it comes to sharing state between different parts of your code, it’s critical that you understand Prudence’s state services.

    -Global Variables +Global Variables

    You know how local variables work in your programming language: they exist only for the duration of a function call, after which their state is discarded. If you want state to persist beyond the function call, you use a global variable (or a ‘‘static’’ local, which is really a global). @@ -6073,7 +6110,7 @@ The exception to this is code in /resources/, in which language globals might persist. To improve performance, Prudence caches the global context for these in memory, with the side effect that your language globals persist beyond a single user request. For various reasons, however, Prudence may reset this global context. You should not rely on this side effect, and instead always use application.globals (page 1↑) or even executable.globals (page 1↑).

    -application.globals vs. executable.globals +application.globals vs. executable.globals

    You should prefer application.globals. By doing so, you’ll minimize interdependencies between applications, and help make each application deployable on its own. @@ -6097,7 +6134,7 @@ Note for Clojure flavor: All Clojure vars are VM-wide globals equivalent in scope to executable.globals. You usually work with namespaces that Prudence creates on the fly, so they do not persist beyond the execution. However, if you explicitly define a namespace, then you use it as a place for shared state. It will then be up to you to make sure that your namescape doesn’t collide with that of another application installed in the Prudence insstance. Though this approach might seem to break our rule of thumb here, of preferring application.globals to executable.globals, it is more idiomatic to Clojure and Lisps more generally.

    -Concurrency +Concurrency

    Though application.globals and executable.globals are thread safe, it’s important to understand how to use them properly. @@ -6211,7 +6248,7 @@ But, don’t be discouraged. The standard protocol for using Prudence’s globals will likely be good enough for the vast majority of your state-sharing needs.

    -conversation.locals +conversation.locals

    These are not ‘‘local’’ in the same way that function locals are. The term ‘‘local’’ here should be read as ‘‘local to the conversation’’ (compare with the term ‘‘thread locals’’). They are ‘‘global’’ in the sense that they can be accessed by any function in your code, but are ‘‘local’’ in the sense that they persist only for the duration of the user request. @@ -6234,6 +6271,12 @@ They can be used as document.cacheKeyPattern (page 1↑) variables, in conjunction with cache key pattern handlers (page 1↑). +

    +Sharing State Between Prudence Instances +

    +
    +Prudence comes with Hazelcast, which does an excellent job at sharing standard JVM maps, lists, locks and other state facilities. See the Hazelcast documentation for complete information. +

    Debugging

    @@ -6334,13 +6377,13 @@ Loggers

    -The Base Logger +The Base Logger

    Use application.logger (page 1↑) to send text messages to the log. The logger name defaults to your application’s subdirectory name, but can be configured via the applicationLoggerName setting (page 1↑).

    -Sub-Loggers +Sub-Loggers

    Large applications might benefit from using more than one logger. Use application.getSubLogger (page 1↑) with any name you wish. This name will be appended to your base logger name with a ‘‘.’’, and will inherit the base logger’s configuration by default. For example, if your base logger is named ‘‘wackywiki’’, then application.getSubLogger(’backend’) will appear as ‘‘wackiwiki.backend’’ in the log files. @@ -6391,7 +6434,7 @@ The Prudence defaults are mostly at ‘‘info’’ level. You are encouraged to experiment with lower levels in order to see how Prudence’s internals function!

    -Appenders +Appenders

    An ‘‘appender’’ is the service that actually writes log messages. Appenders are configured with properties prefixed with ‘‘log4j.appender.X’’, where X is the name of the appender. @@ -6400,7 +6443,7 @@ Prudence by default uses two rolling file appenders, one called ‘‘web’’ for web.log, and one called ‘‘prudence’’ for prudence.log. Additionally, a console appender named ‘‘console’’ and a remote appender named ‘‘remote’’ are configured, though they are not used by default.

    -Loggers +Loggers

    A ‘‘logger’’ is the service to which you send your log messages. It decides whether to write the message according to its level, and if so sends it to one or more appenders. Loggers are configured with properties prefixed with ‘‘log4j.logger.X’’, where X is the name of the logger. Logger names appear in the logs for every message, and are thus useful for organization your log. @@ -6459,7 +6502,7 @@

    -Separate Logs Per Application +Separate Logs Per Application

    We’ll create a new appender for each new log file we need. In this example, we’ll just copy the ‘‘prudence’’ appender with a new name: @@ -6521,7 +6564,7 @@ Customization

    -Changing the Root URL +Changing the Root URL

    Let’s say we want prudence-admin at the ‘‘/admin/’’ URL on the default host, and the ‘‘/prudence/admin/’’ URL on myHost. We’ll edit its settings.*. Here’s an example for the JavaScript flavor: @@ -6534,7 +6577,7 @@

    -Requiring a Password +Requiring a Password

    As an example, we’ll route the application’s root router through an HTTP authentication filter (page 1↑). @@ -6591,7 +6634,7 @@ The scripts work by detecting your running environment and attempting to use the appropriate Apache Commons Daemon binary. Prudence comes with binaries for Linux, Solaris, Darwin (OS X) and Windows, for both 32bit and 64bit architectures.

    -Notes for Linux +Notes for Linux

      @@ -6617,7 +6660,7 @@

    -Notes for Windows +Notes for Windows

      @@ -7035,29 +7078,14 @@ Scaling Tips
      -If you want your application to handle many concurrent users, then you’re fighting this fact: a request will get queued in the best case or discarded in the worst case if there is no thread available to serve it. -
      -
      -Your challenge is to make sure that a thread is always available. And it’s not easy, as you’ll find out as you read through this article. -
      -
      Scalability is the ability to respond to a growing number of user requests without degradation in response time. Two variables influence it: 1) your total number of threads and 2) the time it takes each thread to process a request. Increasing the number of threads seems straightforward: you can keep adding more machines behind load balancers. However, the two variables are tied, as there are diminishing returns and even reversals: beyond a certain point, time per request can actually grow longer as you add threads and machines.
      -Let’s ignore the first variable, because the challenge of getting more machines is mostly financial. It’s the second that we can do something about as engineers: minimizing the time per request becomes an architectural challenge that encompasses the entire structure of your application. +Let’s ignore the first variable here, because the challenge of getting more machines is mostly financial. It’s the second that you can do something about as an engineer.
      -Meanwhile, feel free to frame these inspirational slogans on your wall: +If you want your application to handle many concurrent users, then you’re fighting this fact: a request will get queued in the best case or discarded in the worst case if there is no thread available to serve it. Your challenge is to make sure that a thread is always available. And it’s not easy, as you’ll find out as you read through this article. Minimizing the time per request becomes an architectural challenge that encompasses the entire structure of your application
      -
      -Requests are hot potatoes: Pass them on! -
      -
      -And: -
      -
      -It’s better to have many short requests than one long one. -

      Performance Does Not Equal Scalability

      @@ -7071,7 +7099,7 @@ This is an important mantra for two reasons:

    -1. Performant Can Mean Less Scalable +1. Performant Can Mean Less Scalable

    Optimizing for performance can adversely affect your scalability. The reason is contextual: when you optimize for performance, you often work in an isolated context, specifically so you can accurately measure response times and fine-tune them. For example, making sure that a specific SQL query is fast would involve just running that query. A full-blown experiment involving millions of users doing various operations on your application would make it very hard to accurately measure and optimize the query. Unfortunately, by working in an isolated context you cannot easily see how your efforts would affect other parts of an application. To do so would require a lot of experience and imagination. To continue our example, in order to optimize your one SQL query you might create an index. That index might need to be synchronized with many servers in your cluster. And that synchronization overhead, in turn, could seriously affect your ability to scale. Congratulations! You’ve made one query run fast in a situation that never happens in real life, and you’ve brought your web site to a halt. @@ -7080,7 +7108,7 @@ One way to try to get around this is to fake scale. Tools such as JMeter, Siege and ApacheBench can create ‘‘load.’’ They also create unfounded confidence in engineers. If you simulate 10,000 users bombarding a single web page, then you’re, as before, working in an isolated context. All you’ve done is add concurrency to your performance optimization measurements. Your application pathways might work optimally in these situations, but this might very well be due to the fact that the system is not doing anything else. Add those ‘‘other’’ operations in, and you might get worse site capacity than you did before ‘‘optimizing.’’

    -2. Wasted Effort +2. Wasted Effort

    Even if you don’t adversely affect your scalability through optimizing for performance, you might be making no gains, either. No harm done? Well, plenty of harm, maybe. Optimizing for performance might waste a lot of development time and money. This effort would be better spent on work that could actually help scalability. @@ -7089,53 +7117,62 @@ And, perhaps more seriously, it demonstrates a fundamental misunderstanding of the problem field. If you don’t know what your problems are, you’ll never be able to solve them.

    -Optimizing for Scalability +Pitfalls

    -So, what can you do? +Study the problem field carefully. Understand the challenges and potential pitfalls. You don’t have to apply every single scalability strategy up-front, but at least make sure you’re not making a fatal mistake, such as binding yourself strongly to a technology or product with poor scalability. A bad decision can mean that when you need to scale up in the future, no amount of money and engineering effort would be able to save you before you lose customers and tarnish your brand.
    -First, study the problem field carefully. Understand the challenges and potential pitfalls. You don’t have to apply every single strategy up-front, but at least make sure you’re not making a fatal mistake, such as binding yourself strongly to a technology or product with poor scalability. A poor decision can mean that when you need to scale up in the future, no amount of money and engineering effort will be able to save you in time. +Moreover, be very careful of blindly applying ‘‘successful’’ strategies used and recommended by others to your product. What worked for them might not work for you. In fact, there’s a chance that their strategy doesn’t even work for them, and they just think it did because of a combination of seemingly unrelated factors. The realm of web scalability is still young, full of guesswork, intuition and magical thinking. Even the experts are often making it up as they’re going along.
    -Moreover, be very careful of blindly applying strategies used by other people to your own application. What worked for them might not work for you. In fact, there’s a chance that their strategy doesn’t even work for them, and they just think it did because of a combination of seemingly unrelated factors. The realm of web scalability is still young, full of guesswork, intuition and magical thinking. +Generally, be very suspicious of products or technologies being touted as ‘‘faster’’ than others. ‘‘Fast’’ doesn’t say anything about the ability to scale. Is a certain database engine ‘‘fast’’? That’s important for certain applications, no doubt. But maybe the database is missing important clustering features, such that it would be a poor choice for scalable applications. Does a certain programming language execute faster than another? That’s great if you’re doing video compression, but speed of execution might not have have noticeable effect on scalability. Web applications mostly do I/O, not computation. The same web application might have very similar performance characteristics whether it’s written in C++ or PHP.
    -Be especially careful of applying a solution before you know if you even have a problem. +Moreover, if the faster language is difficult to work with, has poor debugging tools, limited integration with web technologies, then it would slow down your work and your ability to scale.
    -
    -How to identify the problems? You can create simulations and measurements of scalability rather than performance. You need to model actual user behavior patterns, allow for a diversity of such behaviors to happen concurrently, and replicate this diversity on a massive scale. +
    +Speed of execution can actually help scalability in its financial aspect: If your application servers are constantly at maximum CPU load, then a faster execution platform would let you cram more web threads into each server. This will help you reduce costs. For example, see Facebook's HipHop: they saved millions by translating their PHP code to C. Because Prudence is built on the fast JVM platform, you’re in good hands in this respect. Note, however, that there’s a potential pitfall to high performance: more threads threads per machine would also mean more RAM requirements per machine, which also costs money. Crunch the numbers and make sure that you’re actually saving money by increasing performance. Once again, performance does not equal scalability. +
    +
    +That last point about programming languages is worth some elaboration. Beyond how well your chosen technologies perform, it’s important to evaluate them in terms to how easy they are to manage. Large web sites are large projects, involving large teams of people and large amounts of money. That’s difficult enough to coordinate. You want the technology to present you with as few extra managerial challenges as possible.
    -Creating such a simulation is a difficult and expensive, as is monitoring and interpreting the results and identifying potential bottlenecks. This is the main reason for the lack of good data and good judgment about how to scale. Most of what we know comes from tweaking real live web sites, which either comes at the expense of user experience, or allows for very limited experimentation. Your best bet is to hire a team who’s already been through this before. +Beware especially of languages and platforms described as ‘‘agile,’’ as if they somehow embody the spirit of the popular Agile Manifesto. Often, ‘‘agile’’ seems to emphasize the following features: forgiveness for syntax slips, light or no type checking, automatic memory management and automatic concurrency—all features that seem to speed up development, but could just as well be used for sloppy, error-prone, hard-to-debug, and hard-to-fix code, slowing down development in the long run. If you’re reading this article, then your goal is likely not to create a quick demo, but a stable application with a long, evolving life span.
    -Generally, be very suspicious of products or technologies being touted as ‘‘faster’’ than others. ‘‘Fast’’ doesn’t say anything about the ability to scale. Is a certain database engine ‘‘fast’’? That’s important for certain applications, no doubt. But maybe it’s missing important clustering features, making it a poor choice for large applications. Does a certain programming language execute faster than another? That’s great if you’re doing video compression, but speed of execution might not be your bottleneck at all. Web applications mostly do I/O, not computation. The same web application might have very similar performance characteristics whether it’s written in C++ or PHP. +Ignore the buzzwords (‘‘productivity’’, ‘‘fast’’), and instead make sure you’re choosing technology that you can control, instead of technology that will control you.
    -Moreover, if the faster language is difficult to work with, has poor debugging tools, limited integration with web technologies, then it would slow down your work and your ability to scale. -
    -
    -Speed of execution can actually help scalability in one respect: If your application servers are constantly at maximum CPU load, then a faster execution platform would let you cram more web threads into each server. This will help you reduce costs. Because Prudence is built on the fast JVM platform, you’re in good hands in this respect. Also see Facebook's HipHop. Note, however, that there’s a cost to high performance: more threads threads per machine would also mean more RAM requirements per machine, which also costs money. Once again, performance does not equal scalability, and you need to optimize specifically for scalability. -
    -
    -In summary, your architectural objective is to increase concurrency, not necessarily performance. Optimizing for concurrency means breaking up tasks into as many pieces as possible, and possibly even breaking requests into smaller pieces. We’ll cover numerous strategies here, from frontend to backend. +We discuss this topic some more in ‘‘The Case for Rest’’ (page 1↑). By building on the existing web infrastructure, Prudence can make large Internet projects easier to manage.

    -Project Scalability +Analysis

    -That last point about programming languages is worth some elaboration. Beyond how well your chosen technologies perform, it’s important to evaluate them in terms to how easy they are to manage. Large web sites are large projects, involving large teams of people and large amounts of money. That’s difficult enough to coordinate. You want the technology to present you with as few extra managerial challenges as possible. +Be especially careful of applying a solution before you know if you even have a problem.
    -Beware especially of languages described as ‘‘agile,’’ as if they somehow embody the spirit of the popular Agile Manifesto. Often, this epithet seems to emphasize the following aspects fo code: forgiveness for syntax slips, light or no type checking, automatic memory management and concurrency—all features that could just as well be used for sloppy, error-prone, hard-to-debug, and hard-to-fix code. Beware, too, of the cult of ‘‘productivity’’: if you’re reading this article, then your goal is likely not to create a quick demo, but a stable application with a long, evolving life span. +How to identify your scalability bottlenecks? You can create simulations and measurements of scalability rather than performance. You need to model actual user behavior patterns, allow for a diversity of such behaviors to happen concurrently, and replicate this diversity on a massive scale.
    -Ignore the buzzwords, and instead make sure you’re choosing technology that you can control, instead of technology that will control you. +Creating such a simulation is a difficult and expensive, as is monitoring and interpreting the results and identifying potential bottlenecks. This is the main reason for the lack of good data and good judgment about how to scale. Most of what we know comes from tweaking real live web sites, which either comes at the expense of user experience, or allows for very limited experimentation. Your best bet is to hire a team who’s already been through this before.
    -
    -We discuss this topic some more in ‘‘The Case for Rest’’ (page 1↑). By building on the existing web infrastructure, Prudence can make large Internet projects easier to manage. +

    +Optimizing for Scalability +

    +
    +In summary, your architectural objective is to increase concurrency, not necessarily performance. Optimizing for concurrency means breaking up tasks into as many pieces as possible, and possibly even breaking requests into smaller pieces. We’ll cover numerous strategies here, from frontend to backend. Meanwhile, feel free to frame these inspirational slogans on your wall:
    +
    +Requests are hot potatoes: Pass them on! +
    +
    +And: +
    +
    +It’s better to have many short requests than one long one. +

    Caching

    @@ -7167,7 +7204,7 @@ Note that even very small cache durations can make a big difference in application stability. Consider it the maximum throttle for load. For example, a huge sudden peak of user load, or even a denial-of-service (DOS) attack, might overrun your thread pool. However, a cache duration of just 1 second would mean that your page would never be generated more than once every second. You are instantly protected against a destructive scenario.

    -Cache Warming +Cache Warming

    Caches work best when they are ‘‘warm,’’ meaning that they are full of data ready to be retrieved. @@ -7239,7 +7276,7 @@ Prudence’s sister project, Diligence, is designed specifically to solve this problem. It not only caches your data structures, but it validates them in memory using your coded logic, instead of invalidating them and forcing them to be re-fetched from the database. It supports data structures commonly used with relational databases, pluggable storage technologies, high-performance resource pooling and throttling, and natural integration with Prudence. Together, Diligence and Prudence form a solid platform for building scalable, data-backed web applications. At the time of this writing, Diligence is still under development. We hope to release it as open source soon, so stay tuned!

    -Cache Backends +Cache Backends

    Your cache backend can become a bottleneck to scalability if 1) it can’t handle the amount of data you are storing, or 2) it can’t respond quickly enough to cache fetching. @@ -7263,7 +7300,7 @@ You’ll see many web frameworks out there that support a distributed memory cache (usually memcached) and recommend you use it (‘‘it’s fast!’’ they claim, except that it can be slower per request than optimized databases, and that anyway performance does not equal scalability). We’d urge you to consider that advice carefully: keeping your cache warm is a challenge made much easier if you can store it in a persistent backend, and database backends can take you very far in scale without adding a new infrastructure to your deployment. It’s good to know, though, that Prudence’s support for Hazelcast and memcached is there to help you in case you reach the popularity levels of LiveJournal, Facebook, YouTube, Twitter, etc.

    -Client-Side Caching +Client-Side Caching

    Modern web browsers support client-side caching, a feature meant to improve the user experience and save bandwidth costs. A site that makes good use of client-side caching will appear to work fast for users, and will also help to increase your site’s popularity index with search engines. @@ -7284,7 +7321,7 @@ It’s generally safer to apply offline caching to your static resources, such as graphics and other resources. A general custom is to ask the client to cache these ‘‘forever’’ (10 years), and then, if you need to update a file, you simply create a new one with a new URL, and have all your HTML refer to the new version. Because clients cache according to URL, their cached for the old version will simply not be ignored. See CacheControlFilter (page 1↑). There, you’ll also see some more tricks Prudence offers you to help optimize the user experience, such as unifying/minimizing client-side JavaScript and CSS.

    -Upstream Caching +Upstream Caching

    If you need to quickly scale a web site that has not been designed for caching, a band-aid is available: upstream caches, such as Varnish, NCache and even Squid. For archaic reasons, these are called ‘‘reverse proxy’’ caches, but they really work more like filters. According to attributes in the user request (URL, cookies, etc.), they decide whether to fetch and send a cached version of the response, or to allow the request to continue to your application servers. @@ -7317,7 +7354,7 @@ One size does not fit all: you will want to use different strategies to deal with different kinds of tasks.

    -Necessary Tasks +Necessary Tasks

    The user can’t continue without the task being resolved. @@ -7332,7 +7369,7 @@ Implementing a handling service is by no means trivial. It adds a new component to your architecture, one that also has to be made to scale. One can also argue that it adversely affects user experience by adding overhead, delaying the time it takes for the task to complete. The bottom line, though, is you’re vastly increasing concurrency and your ability to scale. And, you’re actually improving the user experience: they would get a feedback on what’s going on rather than having their browsers spin, waiting for their requests to complete.

    -Deferrable Tasks +Deferrable Tasks

    It’s OK if the task occurs later. @@ -7350,7 +7387,7 @@ Prudence lets you easily defer work internally via tasks (page 1↑). In particular, you can spawn a task dynamically to do work without tying up the current thread. Also, Prudence comes with Hazelcast, which is used for an optional distributed cache backend (page 1↑), but also has excellent support for handling distributed task queues.

    -File Uploads +File Uploads

    These are potentially very long requests that you cannot break into smaller tasks, because they depend entirely on the client. As such, they present a unique challenge to scalability. @@ -7362,7 +7399,7 @@ Unfortunately, many concurrent uploads will still saturate your threads. If your application relies on frequent file uploads, you are advised to handle such requests on separate Prudence instances, so that uploads won’t stop your application from handling other web requests. You may also consider using a third-party service specializing in file storage and web uploads.

    -Asynchronous Request Processing +Asynchronous Request Processing

    Having the client poll until a task is completed lets you break up a task into multiple requests and increase concurrency. Another strategy is to break an individual request into pieces. While you’re processing the request and preparing the response, you can free the web thread to handle other requests. When you’re ready to deliver content, you raise a signal, and the next available web thread takes care of sending your response to the client. You can continue doing this indefinitely until the response is complete. From the client’s perspective it’s a single request: a web browser, for example, would spin until the request was completed. @@ -7401,7 +7438,7 @@ Backend Partitioning
    -You can keeping adding more nodes behind a load balancer insofar as each request does not have to access shared state. Useful web applications, however, are likely data-driven, requiring considerable state. +You can keep adding more nodes behind a load balancer insofar as each request does not have to access shared state. Useful web applications, however, are likely data-driven, requiring considerable state.
    If the challenge in handling web requests is cutting down the length of request, then that of backends is the struggle against degraded performance as you add new nodes to your database cluster. These nodes have to synchronize their state with each other, and that synchronization overhead increases exponentially. There’s a definite point of diminishing returns. @@ -7419,7 +7456,7 @@ Partitioning can happen in various components of your application, such as application servers, the caching system, task queues, etc. However, it is most effective, and most complicated to implement, for databases. Our discussion will thus focus on relational (SQL) databases. Other systems would likely require simpler subsets of these strategies.

    -Reads vs. Writes +Reads vs. Writes

    This simple partitioning scheme greatly reduces synchronization overhead. Read-only servers will never send data to the writable servers. Also, knowing that they don’t have to handle writes means you can optimize their configurations for aggressive caching. @@ -7437,7 +7474,7 @@ Note that one feature you lose is the ability to have a transaction in which a write might happen, because a transaction cannot contain both a read-only node and a write-only node. If you must have atomicity, you will have to do your transaction on the writable cluster, or have two transactions: one to lookup and see if you need to change the data, and the second to perform the change—while first checking again that data didn’t change since the previous transaction. Too much of this obviously lessens the effectiveness of read/write partitioning.

    -By Feature +By Feature

    The most obvious and effective partitioning scheme is by feature. Your site might offer different kinds of services that are functionally independent of each other, even though they are displayed to users as united. Behind the scenes, each feature uses a different set of tables. The rule of thumb is trivial: if you can put the tables in separate databases, then you can put these databases in separate clusters. @@ -7458,7 +7495,7 @@ Also consider that some features might be candidates for using a ‘‘NoSQL’’ database (page 1↓). Choose the best backend per feature.

    -By Section +By Section

    Another kind of partitioning is sometimes called ‘‘sharding.’’ It involves splitting up tables into sections that can be placed in different databases. Some databases support sharding as part of their synchronization strategy, but you can also implement it in your code. The great thing about sharding is that it lets you create as many shards (and clusters) as you want. It’s the key to the truly large scale. @@ -7537,7 +7574,7 @@ Relational databases require a lot of synchronization overhead for clusters, limiting their scalability. Though partitioning can take you far, using a ‘‘NoSQL’’ database could take you even further.

    -Graph Databases +Graph Databases

    If your relational data structure contains arbitrary-depth relationships or many ‘‘generic’’ relationships forced into a relational model, then consider using a graph database instead. Not only will traversing your data be faster, but also the database structure will allow for more efficient performance. The implications for scalability can be dramatic. @@ -7552,7 +7589,7 @@ A popular graph database is Neo4j, and it’s especially easy to use with Prudence. Because it’s JVM-based, you can access it internally from Prudence. It also has embedded bindings for many of Prudence’s supported languages, and supports a network REST interface which you can easily access via Prudence’s document.external.

    -Document Databases +Document Databases

    If your data contains mostly ‘‘documents’’—self-contained records with few relationships to other documents—then consider a document database. @@ -7573,7 +7610,7 @@ We’ve started a project to better integrate Prudence JavaScript with MongoDB. It is included in the ‘‘Savory JavaScript’’ edition.

    -Column Databases +Column Databases

    These can be considered as subsets of document databases. The ‘‘document,’’ in this case, is required to have an especially simple, one-dimensional structure. @@ -7588,7 +7625,7 @@ Though you can run your own column database via open source projects like Cassandra (originally developed by/for Facebook) and HBase, the document databases mentioned above offer richer document structures and more features. Consider column databases only if you need truly massive scale, or if you want to make use of the cheap storage offered by ‘‘cloud’’ vendors.

    -Best of All Worlds +Best of All Worlds

    Of course, consider that it’s very possible to use both SQL and ‘‘NoSQL’’ (graph, document, column) databases together for different parts of your application. See backend partitioning (page 1↑). @@ -7699,7 +7736,7 @@ REST

    -Why are plural URL forms for aggregate resources (/animal/cats/) preferred over singular forms (/animal/cat/)? +Why are plural URL forms for aggregate resources (/animal/cats/) preferred over singular forms (/animal/cat/)?

    You’ll see RESTful implementations that use either convention. The advantage of using the singular form is that you have less addresses, and what some people would call a more elegant scheme: @@ -7730,7 +7767,7 @@ Languages

    -How to avoid the ‘‘Adapter not available for language: xml’’ parsing exception for XML files? +How to avoid the ‘‘Adapter not available for language: xml’’ parsing exception for XML files?

    The problem is that the XML header confuses Scripturian, Prudence’s langauge parser, which considers the ‘‘<?’’ a possible scriptlet delimeter: @@ -7756,7 +7793,7 @@ Scalability

    -I heard REST is very scalable. Is this true? Does this mean Prudence can support many millions of users? +I heard REST is very scalable. Is this true? Does this mean Prudence can support many millions of users?

    Yes, if you know what you’re doing. See ‘‘The Case for REST’’ (page 1↑) and ‘‘Scaling Tips’’ (page 1↑) for in-depth discussions. @@ -7771,7 +7808,7 @@ Performance

    -How well does Prudence perform? How well does it scale? +How well does Prudence perform? How well does it scale?

    First, recognize that there are two common uses for the term ‘‘scale.’’ REST is often referred to as an inherently scalable architecture, but that has more to do with project management than technical performance. This difference is addressed in the ‘‘The Case for REST’’ (page 1↑). @@ -7813,7 +7850,7 @@ The author is not a lawyer. This is not legal advice, but a personal, and possibly wrong interpretation. The wording of the license itself supersedes anything written here.

    -Does the LGPL mean I can’t use Prudence unless my product is open sourced? +Does the LGPL mean I can’t use Prudence unless my product is open sourced?

    The GPL family of licenses restrict your ability to redistribute software, not to use it. You are free to use Prudence as you please within your organization, even if you’re using it to serve public web sites (though with no warranty nor an implicit guarantee of support from Three Crickets, the copyright holder). @@ -7834,7 +7871,7 @@ We understand that in some cases open sourcing your product is impossible. As a last resort, we offer you a commercial license. Please contact us for details.

    -Why the LGPL and not the GPL? +Why the LGPL and not the GPL?

    The Lesser GPL used to be called the ‘‘Library GPL,’’ and was originally drafted for glibc. It represents a certain admission of defeat: there are so many alternatives to our library out there, that you might not consider using our library under GPL. @@ -7848,10 +7885,10 @@
    diff -Nru prudence-clojure-1.0/content/documentation/prudence_manual.lyx prudence-clojure-1.0/content/documentation/prudence_manual.lyx --- prudence-clojure-1.0/content/documentation/prudence_manual.lyx 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/documentation/prudence_manual.lyx 2011-01-08 00:56:02.000000000 +0000 @@ -1,4 +1,4 @@ -#LyX 1.6.7 created this file. For more info see http://www.lyx.org/ +#LyX 1.6.8 created this file. For more info see http://www.lyx.org/ \lyxformat 345 \begin_document \begin_header @@ -66,7 +66,7 @@ \begin_layout Standard \noindent \align center -Copyright 2009-2010 by Three Crickets LLC. +Copyright 2009-2011 by Three Crickets LLC. \begin_inset Newline newline \end_inset @@ -3814,7 +3814,7 @@ /configuration/ \begin_inset CommandInset label LatexCommand label -name "../application/|configuration" +name "../instance/|configuration" \end_inset @@ -3895,6 +3895,13 @@ \begin_layout Subsubsection /libraries/ +\begin_inset CommandInset label +LatexCommand label +name "../instance/|libraries" + +\end_inset + + \end_layout \begin_layout Standard @@ -3905,6 +3912,24 @@ \end_layout \begin_layout Standard +This directory also serves as a common /libraries/ directory for all application +s, similarly to how an +\bar under +individual application's /libraries/ directory (page +\begin_inset CommandInset ref +LatexCommand pageref +reference "../application/|libraries" + +\end_inset + +) +\bar default + works. + You can thus put source code here that you want to share for all your applicati +ons. +\end_layout + +\begin_layout Standard If you add your own JARs, make sure to edit the scripts in /bin/ to accommodate your additions. \end_layout @@ -4963,7 +4988,7 @@ ) \bar default -are straightforward scripts that can be run on-demand or scheduled to run + are straightforward scripts that can be run on-demand or scheduled to run and specific times. They are straightforward in that, upon execution, the code is simply run as is. @@ -4972,6 +4997,13 @@ \begin_layout Subsubsection /libraries/ +\begin_inset CommandInset label +LatexCommand label +name "../application/|libraries" + +\end_inset + + \end_layout \begin_layout Standard @@ -4997,6 +5029,21 @@ . \end_layout +\begin_layout Standard +To share source code with all your applications, use the +\bar under +instance's /libraries/ directory (page +\begin_inset CommandInset ref +LatexCommand pageref +reference "../instance/|libraries" + +\end_inset + +) +\bar default +. +\end_layout + \begin_layout Subsubsection /uploads/ \end_layout @@ -11275,8 +11322,64 @@ At Startup \end_layout +\begin_layout Subsubsection +Startup Task +\end_layout + \begin_layout Standard -Use +Prudence will automatically run the task called ``startup/'' upon startup. + Note that it will run after all the other startup tasks (defrosting, preheating +) finish, in order to make sure your application is ``hot'' first. + If you need multiple tasks running---usually repeating tasks, such as those + that do general maintenance, monitor resource availability, send out email + reminders, etc.---you can start them from your startup task using +\bar under +application.task +\bar default + +\bar under +(page +\begin_inset CommandInset ref +LatexCommand pageref +reference "../api/|application-task" + +\end_inset + +) +\bar default +. +\end_layout + +\begin_layout Standard +For example, here is an application's ``/tasks/startup.js'' file: +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +application.logger.info('Scheduling monitor task to repeat every second') +\end_layout + +\begin_layout Plain Layout + +application.task('monitor/', 1000, 1000, false) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsubsection +Custom Startup Tasks +\end_layout + +\begin_layout Standard +You can also use \bar under application.task \bar default @@ -11303,8 +11406,6 @@ ) \bar default . - This is especially useful for repeating tasks, such as those that do general - maintenance, monitor resource availability, send out email reminders, etc. \end_layout \begin_layout Standard @@ -16626,6 +16727,19 @@ Perhaps, with Prudence, you will create the next one. \end_layout +\begin_layout Quote +Important: The semantics of ClientResource require you to explicitly release + the response as soon as you're done using it, which will in turn release + the thread used to stream the response to you. + (Though these threads might eventually be reclaimed by a built-in garbage + collection mechanism, leaving them hanging could lead to starvation, such + that further uses of document.external will block until threads return to + the pool.) It's probably best to employ a try-finally paradigm, where the + try clause contains as little code as possible, and the finally clause + releases the response. + See the example below. +\end_layout + \begin_layout Standard This is a good place to remind you that REST is not just HTTP. By default, Prudence supports http: and file: scheme URIs for document.external, @@ -16656,12 +16770,52 @@ \begin_layout Plain Layout -var fixture = +var fixture +\end_layout + +\begin_layout Plain Layout + +var resource = document.external('file:///myfiles/fixture.json', 'application/json +') +\end_layout + +\begin_layout Plain Layout + +try { \end_layout \begin_layout Plain Layout - document.external('file:///myfiles/fixture.json', 'application/json').get().text + fixture = resource.get().text +\end_layout + +\begin_layout Plain Layout + +} +\end_layout + +\begin_layout Plain Layout + +finally { +\end_layout + +\begin_layout Plain Layout + + resource.response.release() +\end_layout + +\begin_layout Plain Layout + +} +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +// Do something with the fixture here... \end_layout \end_inset @@ -19288,6 +19442,24 @@ . \end_layout +\begin_layout Subsubsection +Sharing State Between Prudence Instances +\end_layout + +\begin_layout Standard +Prudence comes with +\begin_inset CommandInset href +LatexCommand href +name "Hazelcast" +target "http://www.hazelcast.com/" + +\end_inset + +, which does an excellent job at sharing standard JVM maps, lists, locks + and other state facilities. + See the Hazelcast documentation for complete information. +\end_layout + \begin_layout Section Debugging \begin_inset CommandInset label @@ -21901,17 +22073,6 @@ \end_layout \begin_layout Standard -If you want your application to handle many concurrent users, then you're - fighting this fact: a request will get queued in the best case or discarded - in the worst case if there is no thread available to serve it. -\end_layout - -\begin_layout Standard -Your challenge is to make sure that a thread is always available. - And it's not easy, as you'll find out as you read through this article. -\end_layout - -\begin_layout Standard Scalability is the ability to respond to a growing number of user requests without degradation in response time. Two variables influence it: 1) your total number of threads and 2) the @@ -21924,27 +22085,19 @@ \end_layout \begin_layout Standard -Let's ignore the first variable, because the challenge of getting more machines - is mostly financial. - It's the second that we can do something about as engineers: minimizing - the time per request becomes an architectural challenge that encompasses - the entire structure of your application. +Let's ignore the first variable here, because the challenge of getting more + machines is mostly financial. + It's the second that you can do something about as an engineer. \end_layout \begin_layout Standard -Meanwhile, feel free to frame these inspirational slogans on your wall: -\end_layout - -\begin_layout Quote -Requests are hot potatoes: Pass them on! -\end_layout - -\begin_layout Standard -And: -\end_layout - -\begin_layout Quote -It's better to have many short requests than one long one. +If you want your application to handle many concurrent users, then you're + fighting this fact: a request will get queued in the best case or discarded + in the worst case if there is no thread available to serve it. + Your challenge is to make sure that a thread is always available. + And it's not easy, as you'll find out as you read through this article. + Minimizing the time per request becomes an architectural challenge that + encompasses the entire structure of your application \end_layout \begin_layout Subsection @@ -22051,60 +22204,30 @@ \end_layout \begin_layout Subsubsection -Optimizing for Scalability -\end_layout - -\begin_layout Standard -So, what can -\emph on - -\emph default -you do? +Pitfalls \end_layout \begin_layout Standard -First, study the problem field carefully. +Study the problem field carefully. Understand the challenges and potential pitfalls. - You don't have to apply every single strategy up-front, but at least make - sure you're not making a fatal mistake, such as binding yourself strongly - to a technology or product with poor scalability. - A poor decision can mean that when you need to scale up in the future, - no amount of money and engineering effort will be able to save you in time. + You don't have to apply every single scalability strategy up-front, but + at least make sure you're not making a fatal mistake, such as binding yourself + strongly to a technology or product with poor scalability. + A bad decision can mean that when you need to scale up in the future, no + amount of money and engineering effort would be able to save you before + you lose customers and tarnish your brand. \end_layout \begin_layout Standard -Moreover, be very careful of blindly applying strategies used by other people - to your own application. +Moreover, be very careful of blindly applying ``successful'' strategies + used and recommended by others to your product. What worked for them might not work for you. In fact, there's a chance that their strategy doesn't even work for them, and they just think it did because of a combination of seemingly unrelated factors. The realm of web scalability is still young, full of guesswork, intuition and magical thinking. -\end_layout - -\begin_layout Standard -Be especially careful of applying a solution before you know if you even - have a problem. -\end_layout - -\begin_layout Standard -How to identify the problems? You can create simulations and measurements - of scalability rather than performance. - You need to model actual user behavior patterns, allow for a diversity - of such behaviors to happen concurrently, and replicate this diversity - on a massive scale. -\end_layout - -\begin_layout Standard -Creating such a simulation is a difficult and expensive, as is monitoring - and interpreting the results and identifying potential bottlenecks. - This is the main reason for the lack of good data and good judgment about - how to scale. - Most of what we know comes from tweaking real live web sites, which either - comes at the expense of user experience, or allows for very limited experimenta -tion. - Your best bet is to hire a team who's already been through this before. + Even the experts are often making it up as they're going along. \end_layout \begin_layout Standard @@ -22117,11 +22240,11 @@ \emph default Is a certain database engine ``fast''? That's important for certain application s, no doubt. - But maybe it's missing important clustering features, making it a poor - choice for large applications. + But maybe the database is missing important clustering features, such that + it would be a poor choice for scalable applications. Does a certain programming language execute faster than another? That's great if you're doing video compression, but speed of execution might not - be your bottleneck at all. + have have noticeable effect on scalability. Web applications mostly do I/O, not computation. The same web application might have very similar performance characteristics whether it's written in C++ or PHP. @@ -22134,13 +22257,12 @@ \end_layout \begin_layout Quote -Speed of execution can actually help scalability in one respect: If your - application servers are constantly at maximum CPU load, then a faster execution - platform would let you cram more web threads into each server. +Speed of execution can actually help scalability in its financial aspect: + If your application servers are constantly at maximum CPU load, then a + faster execution platform would let you cram more web threads into each + server. This will help you reduce costs. - Because Prudence is built on the fast JVM platform, you're in good hands - in this respect. - Also see + For example, see \begin_inset CommandInset href LatexCommand href name "Facebook's HipHop" @@ -22148,24 +22270,15 @@ \end_inset -. - Note, however, that there's a cost to high performance: more threads threads - per machine would also mean more RAM requirements per machine, which also - costs money. - Once again, performance does not equal scalability, and you need to optimize - specifically for scalability. -\end_layout - -\begin_layout Standard -In summary, your architectural objective is to increase concurrency, not - necessarily performance. - Optimizing for concurrency means breaking up tasks into as many pieces - as possible, and possibly even breaking requests into smaller pieces. - We'll cover numerous strategies here, from frontend to backend. -\end_layout - -\begin_layout Subsubsection -Project Scalability +: they saved millions by translating their PHP code to C. + Because Prudence is built on the fast JVM platform, you're in good hands + in this respect. + Note, however, that there's a potential pitfall to high performance: more + threads threads per machine would also mean more RAM requirements per machine, + which also costs money. + Crunch the numbers and make sure that you're actually saving money by increasin +g performance. + Once again, performance does not equal scalability. \end_layout \begin_layout Standard @@ -22180,8 +22293,8 @@ \end_layout \begin_layout Standard -Beware especially of languages described as ``agile,'' as if they somehow - embody the spirit of the popular +Beware especially of languages and platforms described as ``agile,'' as + if they somehow embody the spirit of the popular \begin_inset CommandInset href LatexCommand href name "Agile Manifesto" @@ -22190,18 +22303,19 @@ \end_inset . - Often, this epithet seems to emphasize the following aspects fo code: forgivene -ss for syntax slips, light or no type checking, automatic memory management - and concurrency---all features that could just as well be used for sloppy, - error-prone, hard-to-debug, and hard-to-fix code. - Beware, too, of the cult of ``productivity'': if you're reading this article, - then your goal is likely not to create a quick demo, but a stable application - with a long, evolving life span. + Often, ``agile'' seems to emphasize the following features: forgiveness + for syntax slips, light or no type checking, automatic memory management + and automatic concurrency---all features that seem to speed up development, + but could just as well be used for sloppy, error-prone, hard-to-debug, + and hard-to-fix code, slowing down development in the long run. + If you're reading this article, then your goal is likely not to create + a quick demo, but a stable application with a long, evolving life span. \end_layout \begin_layout Standard -Ignore the buzzwords, and instead make sure you're choosing technology that - you can control, instead of technology that will control you. +Ignore the buzzwords (``productivity'', ``fast''), and instead make sure + you're choosing technology that you can control, instead of technology + that will control you. \end_layout \begin_layout Standard @@ -22221,6 +22335,59 @@ Internet projects easier to manage. \end_layout +\begin_layout Subsubsection +Analysis +\end_layout + +\begin_layout Standard +Be especially careful of applying a solution before you know if you even + have a problem. +\end_layout + +\begin_layout Standard +How to identify your scalability bottlenecks? You can create simulations + and measurements of scalability rather than performance. + You need to model actual user behavior patterns, allow for a diversity + of such behaviors to happen concurrently, and replicate this diversity + on a massive scale. +\end_layout + +\begin_layout Standard +Creating such a simulation is a difficult and expensive, as is monitoring + and interpreting the results and identifying potential bottlenecks. + This is the main reason for the lack of good data and good judgment about + how to scale. + Most of what we know comes from tweaking real live web sites, which either + comes at the expense of user experience, or allows for very limited experimenta +tion. + Your best bet is to hire a team who's already been through this before. +\end_layout + +\begin_layout Subsubsection +Optimizing for Scalability +\end_layout + +\begin_layout Standard +In summary, your architectural objective is to increase concurrency, not + necessarily performance. + Optimizing for concurrency means breaking up tasks into as many pieces + as possible, and possibly even breaking requests into smaller pieces. + We'll cover numerous strategies here, from frontend to backend. + Meanwhile, feel free to frame these inspirational slogans on your wall: +\end_layout + +\begin_layout Quote +Requests are hot potatoes: Pass them on! +\end_layout + +\begin_layout Standard +And: +\end_layout + +\begin_layout Quote +It's better to have many short requests than one long one. +\end_layout + \begin_layout Subsection Caching \begin_inset CommandInset label @@ -23155,8 +23322,8 @@ \end_layout \begin_layout Standard -You can keeping adding more nodes behind a load balancer insofar as each - request does not have to access shared state. +You can keep adding more nodes behind a load balancer insofar as each request + does not have to access shared state. Useful web applications, however, are likely data-driven, requiring considerabl e state. \end_layout Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/documentation/prudence_manual.pdf and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/documentation/prudence_manual.pdf differ diff -Nru prudence-clojure-1.0/content/instance/component.clj prudence-clojure-1.0/content/instance/component.clj --- prudence-clojure-1.0/content/instance/component.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/instance/component.clj 2011-01-08 00:56:02.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Component ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html diff -Nru prudence-clojure-1.0/content/instance/default.clj prudence-clojure-1.0/content/instance/default.clj --- prudence-clojure-1.0/content/instance/default.clj 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/instance/default.clj 2011-01-08 00:56:02.000000000 +0000 @@ -1,7 +1,7 @@ ; ; Prudence Instance ; -; Copyright 2009-2010 Three Crickets LLC. +; Copyright 2009-2011 Three Crickets LLC. ; ; The contents of this file are subject to the terms of the LGPL version 3.0: ; http:;www.opensource.org/licenses/lgpl-3.0.html Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/com.hazelcast.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/com.hazelcast.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/com.mysql.jdbc.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/com.mysql.jdbc.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/com.threecrickets.prudence.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/com.threecrickets.prudence.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/com.threecrickets.scripturian.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/com.threecrickets.scripturian.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.apache.velocity.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.apache.velocity.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.ajp.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.ajp.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.continuation.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.continuation.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.http.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.http.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.io.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.io.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.server.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.server.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.util.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.eclipse.jetty.util.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.ext.fileupload.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.ext.fileupload.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.ext.httpclient.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.ext.httpclient.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.ext.jackson.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.ext.jackson.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.ext.jetty.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.ext.jetty.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.ext.json.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.ext.json.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.ext.slf4j.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.ext.slf4j.jar differ Binary files /tmp/7NVt8Y_JEY/prudence-clojure-1.0/content/libraries/org.restlet.jar and /tmp/w604Z6uvPk/prudence-clojure-1.0/content/libraries/org.restlet.jar differ diff -Nru prudence-clojure-1.0/content/libraries/versions.txt prudence-clojure-1.0/content/libraries/versions.txt --- prudence-clojure-1.0/content/libraries/versions.txt 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/libraries/versions.txt 2011-01-08 00:56:03.000000000 +0000 @@ -11,15 +11,15 @@ groboutils 5 (note: we've removed the internal log4j distribution) groovy 1.7.5 h2 1.2.145 -hazelcast 1.9 +hazelcast 1.9.1 httpclient 4.0.3 httpcore 4.0.1 (blocking version) httpmime 4.0.3 jackson 1.6.2 jcip-annotations jepp 2.4 -jetty 7.2.0 -jruby 1.5.3 +jetty 7.2.2 +jruby 1.5.6 json jsr-223 junit 4.8.2 @@ -28,19 +28,19 @@ log4j 1.2.16 mime4j 0.6 mongo-java-driver 2.3 -mongo-rhino-driver 1.0 (Revision 44) -mysqlconnector 5.1.8 +mongo-rhino-driver 1.0 (Revision 48) +mysqlconnector 5.1.14 pygments 1.1.1 quercus 4.0.11 -restlet (JSE) 2.0.3 +restlet (JSE) 2.0.4 rhino 1.7R2 servlet (jetty) 2.5 -scripturian 1.0 (Revision 250) +scripturian 1.0 (Revision 254) slf4j 1.6.1 spymemcached 2.5 sqlalchemy 0.6 (Revision 6720 + H2 patch) succinct 1.0 (Revision 21) svnant 1.3.0 syntaxhighlighter 2.1.364 -velocity 1.6.4 +velocity 1.7 vpp 2.2.1 (note: we've removed the internal Velocity distribution) diff -Nru prudence-clojure-1.0/content/licenses/mysqlconnector/license-exceptions.txt prudence-clojure-1.0/content/licenses/mysqlconnector/license-exceptions.txt --- prudence-clojure-1.0/content/licenses/mysqlconnector/license-exceptions.txt 2010-12-12 02:46:19.000000000 +0000 +++ prudence-clojure-1.0/content/licenses/mysqlconnector/license-exceptions.txt 2011-01-08 00:56:03.000000000 +0000 @@ -1,119 +1,59 @@ -MySQL FLOSS License Exception +FOSS License Exception -The MySQL AB Exception for Free/Libre and Open Source -Software-only Applications Using MySQL Client Libraries (the -"FLOSS Exception"). - -Version 0.6, 7 March 2007 - -Exception Intent - -We want specified Free/Libre and Open Source Software (``FLOSS'') -applications to be able to use specified GPL-licensed MySQL client -libraries (the ``Program'') despite the fact that not all FLOSS -licenses are compatible with version 2 of the GNU General Public -License (the ``GPL''). - -Legal Terms and Conditions - -As a special exception to the terms and conditions of version 2.0 -of the GPL: - - 1. You are free to distribute a Derivative Work that is formed - entirely from the Program and one or more works (each, a - "FLOSS Work") licensed under one or more of the licenses - listed below in section 1, as long as: - a. You obey the GPL in all respects for the Program and the - Derivative Work, except for identifiable sections of the - Derivative Work which are not derived from the Program, - and which can reasonably be considered independent and - separate works in themselves, - b. all identifiable sections of the Derivative Work which - are not derived from the Program, and which can - reasonably be considered independent and separate works - in themselves, - i. are distributed subject to one of the FLOSS licenses - listed below, and - ii. the object code or executable form of those sections - are accompanied by the complete corresponding - machine-readable source code for those sections on - the same medium and under the same FLOSS license as - the corresponding object code or executable forms of - those sections, and - c. any works which are aggregated with the Program or with a - Derivative Work on a volume of a storage or distribution - medium in accordance with the GPL, can reasonably be - considered independent and separate works in themselves - which are not derivatives of either the Program, a - Derivative Work or a FLOSS Work. - If the above conditions are not met, then the Program may only - be copied, modified, distributed or used under the terms and - conditions of the GPL or another valid licensing option from - MySQL AB. - - 2. FLOSS License List - -License name Version(s)/Copyright Date -Academic Free License 2.0 -Apache Software License 1.0/1.1/2.0 -Apple Public Source License 2.0 -Artistic license From Perl 5.8.0 -BSD license "July 22 1999" -Common Development and Distribution License (CDDL) 1.0 -Common Public License 1.0 -Eclipse Public License 1.0 -GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1 -Jabber Open Source License 1.0 -MIT license (As listed in file MIT-License.txt) --- -Mozilla Public License (MPL) 1.0/1.1 -Open Software License 2.0 -OpenSSL license (with original SSLeay license) "2003" ("1998") -PHP License 3.0 -Python license (CNRI Python License) --- -Python Software Foundation License 2.1.1 -Sleepycat License "1999" -University of Illinois/NCSA Open Source License --- -W3C License "2001" -X11 License "2001" -Zlib/libpng License --- -Zope Public License 2.0 - - Due to the many variants of some of the above licenses, we - require that any version follow the 2003 version of the Free - Software Foundation's Free Software Definition - (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of - the Open Source Definition by the Open Source Initiative - (http://www.opensource.org/docs/definition.php). - - 3. Definitions - - a. Terms used, but not defined, herein shall have the - meaning provided in the GPL. - b. Derivative Work means a derivative work under copyright - law. - - 4. Applicability: This FLOSS Exception applies to all Programs - that contain a notice placed by MySQL AB saying that the - Program may be distributed under the terms of this FLOSS - Exception. If you create or distribute a work which is a - Derivative Work of both the Program and any other work - licensed under the GPL, then this FLOSS Exception is not - available for that work; thus, you must remove the FLOSS - Exception notice from that work and comply with the GPL in all - respects, including by retaining all GPL notices. You may - choose to redistribute a copy of the Program exclusively under - the terms of the GPL by removing the FLOSS Exception notice - from that copy of the Program, provided that the copy has - never been modified by you or any third party. - -Appendix A. Qualified Libraries and Packages - -The following is a non-exhaustive list of libraries and packages -which are covered by the FLOSS License Exception. Please note that -this appendix is provided merely as an additional service to -specific FLOSS projects wishing to simplify licensing information -for their users. Compliance with one of the licenses noted under -the "FLOSS license list" section remains a prerequisite. +Updated July 1, 2010 +What is the FOSS License Exception? -Package Name Qualifying License and Version -Apache Portable Runtime (APR) Apache Software License 2.0 \ No newline at end of file +Oracle’s Free and Open Source Software ("FOSS") License Exception (formerly known as the FLOSS License Exception) allows developers of FOSS applications to include Oracle's MySQL Client Libraries (also referred to as "MySQL Drivers" or "MySQL Connectors") with their FOSS applications. MySQL Client Libraries are typically licensed pursuant to version 2 of the General Public License ("GPL"), but this exception permits distribution of certain MySQL Client Libraries with a developer’s FOSS applications licensed under the terms of another FOSS license listed below, even though such other FOSS license may be incompatible with the GPL. + +The following terms and conditions describe the circumstances under which Oracle’s FOSS License Exception applies. +Oracle’s FOSS License Exception Terms and Conditions + + 1. Definitions. + "Derivative Work" means a derivative work, as defined under applicable copyright law, formed entirely from the Program and one or more FOSS Applications. + + "FOSS Application" means a free and open source software application distributed subject to a license listed in the section below titled "FOSS License List." + + "FOSS Notice" means a notice placed by Oracle or MySQL in a copy of the MySQL Client Libraries stating that such copy of the MySQL Client Libraries may be distributed under Oracle's or MySQL’s FOSS (or FLOSS) License Exception. + + "Independent Work" means portions of the Derivative Work that are not derived from the Program and can reasonably be considered independent and separate works. + + "Program" means a copy of Oracle’s MySQL Client Libraries that contains a FOSS Notice. + + 2. A FOSS application developer ("you" or "your") may distribute a Derivative Work provided that you and the Derivative Work meet all of the following conditions: + 1. You obey the GPL in all respects for the Program and all portions (including modifications) of the Program included in the Derivative Work (provided that this condition does not apply to Independent Works); + 2. The Derivative Work does not include any work licensed under the GPL other than the Program; + 3. You distribute Independent Works subject to a license listed in the section below titled "FOSS License List"; + 4. You distribute Independent Works in object code or executable form with the complete corresponding machine-readable source code on the same medium and under the same FOSS license applying to the object code or executable forms; + 5. All works that are aggregated with the Program or the Derivative Work on a medium or volume of storage are not derivative works of the Program, Derivative Work or FOSS Application, and must reasonably be considered independent and separate works. + 3. Oracle reserves all rights not expressly granted in these terms and conditions. If all of the above conditions are not met, then this FOSS License Exception does not apply to you or your Derivative Work. + + FOSS License List + License Name Version(s)/Copyright Date + Release Early Certified Software + Academic Free License 2.0 + Apache Software License 1.0/1.1/2.0 + Apple Public Source License 2.0 + Artistic license From Perl 5.8.0 + BSD license "July 22 1999" + Common Development and Distribution License (CDDL) 1.0 + Common Public License 1.0 + Eclipse Public License 1.0 + European Union Public License (EUPL)1 1.1 + GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1/3.0 + GNU General Public License (GPL) 3.0 + Jabber Open Source License 1.0 + MIT License (As listed in file MIT-License.txt) - + Mozilla Public License (MPL) 1.0/1.1 + Open Software License 2.0 + OpenSSL license (with original SSLeay license) "2003" ("1998") + PHP License 3.0/3.01 + Python license (CNRI Python License) - + Python Software Foundation License 2.1.1 + Sleepycat License "1999" + University of Illinois/NCSA Open Source License - + W3C License "2001" + X11 License "2001" + Zlib/libpng License - + Zope Public License 2.0 + + 1 When an Independent Work is licensed under a "Compatible License" pursuant to the EUPL, the Compatible License rather than the EUPL is the applicable license for purposes of these FOSS License Exception Terms and Conditions. \ No newline at end of file diff -Nru prudence-clojure-1.0/debian/changelog prudence-clojure-1.0/debian/changelog --- prudence-clojure-1.0/debian/changelog 2010-12-12 02:44:35.000000000 +0000 +++ prudence-clojure-1.0/debian/changelog 2011-01-08 00:11:35.000000000 +0000 @@ -1,3 +1,9 @@ +prudence-clojure (1.0-10) lucid; urgency=medium + + * RC9 (revision 801) + + -- Tal Liron Fri, 7 Jan 2011 01:16:38 -0600 + prudence-clojure (1.0-9) lucid; urgency=medium * RC8 (revision 789) diff -Nru prudence-clojure-1.0/debian/.svn/all-wcprops prudence-clojure-1.0/debian/.svn/all-wcprops --- prudence-clojure-1.0/debian/.svn/all-wcprops 2010-11-21 06:03:41.000000000 +0000 +++ prudence-clojure-1.0/debian/.svn/all-wcprops 2010-12-12 02:50:16.000000000 +0000 @@ -17,7 +17,7 @@ K 25 svn:wc:ra_dav:version-url V 74 -/svn/!svn/ver/775/trunk/build/debian/prudence-clojure-1.0/debian/changelog +/svn/!svn/ver/791/trunk/build/debian/prudence-clojure-1.0/debian/changelog END postinst K 25 diff -Nru prudence-clojure-1.0/debian/.svn/entries prudence-clojure-1.0/debian/.svn/entries --- prudence-clojure-1.0/debian/.svn/entries 2010-11-21 06:03:41.000000000 +0000 +++ prudence-clojure-1.0/debian/.svn/entries 2010-12-12 02:50:16.000000000 +0000 @@ -35,14 +35,14 @@ changelog file -775 +791 -2010-11-21T00:41:52.000000Z -209a21c2cdf74ffa70847e45939197ff -2010-11-21T06:03:22.964937Z -775 +2010-12-12T02:44:35.000000Z +51d20b8f46d86ac7d5325fb912c740d8 +2010-12-12T02:49:55.935026Z +791 tal.liron has-props @@ -65,7 +65,7 @@ -860 +1002 compat file diff -Nru prudence-clojure-1.0/debian/.svn/text-base/changelog.svn-base prudence-clojure-1.0/debian/.svn/text-base/changelog.svn-base --- prudence-clojure-1.0/debian/.svn/text-base/changelog.svn-base 2010-11-21 06:03:36.000000000 +0000 +++ prudence-clojure-1.0/debian/.svn/text-base/changelog.svn-base 2010-12-12 02:50:08.000000000 +0000 @@ -1,3 +1,9 @@ +prudence-clojure (1.0-9) lucid; urgency=medium + + * RC8 (revision 789) + + -- Tal Liron Sat, 11 Dec 2010 01:16:38 -0600 + prudence-clojure (1.0-8) lucid; urgency=medium * RC7 (revision 774)