diff --git a/.babelrc b/.babelrc index 282de0ce..408ea3df 100644 --- a/.babelrc +++ b/.babelrc @@ -1,16 +1,39 @@ { - "presets": ["es2015", "stage-0","node6", "react"], "plugins": [ - "transform-runtime", - "add-module-exports", - "babel-plugin-transform-decorators-legacy", - "react-html-attrs", - "transform-class-properties", - "react-html-attrs" + [ + "transform-decorators-legacy", + "transform-object-rest-spread", + { + "useBuiltIns": true + } + ], + "transform-export-extensions", + "transform-es2015-modules-commonjs" ], "env": { "development": { - "presets": ["react-hmre"] + "plugins":[ + "transform-export-extensions" + ], + "presets": [ + [ + "env", + { + "targets": { + "electron": "1.8.1" + }, + "useBuiltIns": true, + "include": [ + "syntax-trailing-function-commas" + ], + "exclude": [ + "transform-async-to-generator", + "web.timers", + "web.immediate" + ] + } + ] + ] } } -} +} \ No newline at end of file diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index b0de2ec6..00000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,12 +0,0 @@ -languages: - Ruby: false - JavaScript: true - Python: true - PHP: false -exclude_paths: -- "build/*" -- "support/*" -- "WAIL.spec" -- "bundledApps/heritrix-3.2.0/*" -- "bundledApps/html/*" -- "bundledApps/tomcat/*" diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 00000000..5e81eb5c --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,17 @@ +### Are you submitting a **bug report** or a **feature request**? + + + +### What is the current behavior? + + + +### What is the expected behavior? + + +### What's your environment? + + + +### Other information + \ No newline at end of file diff --git a/.gitignore b/.gitignore index e0f5421f..95effb6f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,7 @@ build/* bundledApps/waybackConfigWriter.pyc bundledApps/openjdk WAIL.spec - +*.db # Mac meta .DS_Store @@ -30,13 +30,14 @@ src/public/* .idea +creds.json build -bundledApps/heritrix-3.2.0/ +#bundledApps/heritrix-3.2.0/ +bundledApps/heritrix-3.3.0/ wayback.xml -heritrix.pid heritrix_out.log electron/build/dist @@ -53,3 +54,8 @@ electron-main.js* backUp dist +wail-config + +testBuild + +chromDLogs \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 6fe614e7..039bac16 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,17 @@ -FROM node +FROM ubuntu MAINTAINER John Berlin -ADD . /usr/src/app -WORKDIR /usr/src/app -RUN npm install +RUN apt-get update && apt-get install -y libgtk2.0-0 libgconf-2-4 libasound2 libxtst6 libxss1 libnss3 xvfb libcanberra-gtk* firefox -RUN npm run-script download-externals-all +RUN groupadd wail && useradd -m -g wail wail -CMD bash +ADD . /wail +ADD settings.json /home/wail/.config/wail/wail-settings/ + +RUN chown -R wail:wail /home/wail /wail + +ENV JAVA_HOME=/wail/resources/app/bundledApps/openjdk + +USER wail + +CMD ["/wail/wail"] diff --git a/README.md b/README.md index e3165078..2ba60e6a 100644 --- a/README.md +++ b/README.md @@ -6,127 +6,36 @@ Web Archiving Integration Layer (WAIL) _"One-Click User Instigated Preservation"_ -Web Archiving Integration Layer (WAIL) is a graphical user interface (GUI) atop multiple web archiving tools intended to be used as an easy way for anyone to preserve and replay web pages. Tools included and accessible through the GUI are [Heritrix 3.3.0](https://github.com/internetarchive/heritrix3) and [OpenWayback 2.3.0](https://github.com/iipc/openwayback). Support packages include Apache Tomcat and [MemGator](https://github.com/oduwsdl/memgator). +Web Archiving Integration Layer (WAIL) is a graphical user interface (GUI) atop multiple web archiving tools +intended to be used as an easy way for anyone to preserve and replay web pages. +Tools included and accessible through the GUI are [Heritrix 3.2.0](https://github.com/internetarchive/heritrix3) +and [PyWb 0.33.0](https://github.com/webrecorder/pywb). -## Electron Wail +More information about the motivations behind WAIL see the [Motivations](https://github.com/N0taN3rd/wail/wiki/Why-Wail%3F) section in the projects wiki. -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Requires node 6.x/5.x and npm 3.x see Electron 1.0 [documentation](http://electron.atom.io) - -Use node 6.x for best performance - -### NPM Scripts -Use `$ npm run-script ` to execute any of the script listed below - -1. External Dependancies - * download-externals: Download the required openjdk and memgator version for current operating systems - * download-externals-all: Same as above script but for all operating systems supported by this tool - -2. Development - * start-dev: Runs both the dev and dev-electron commands - * dev: Runs the webpack dev server with hot module replacement enabled. - * dev-electron: Start the electron shell for wail-electron - -3. Production - * package: Build wail-electron for the current operating systems - * package-all: Builds wail-electron for all supported operating systems - * package-[windows,linux,osx]: Builds wail-electron for a specific operating systems - - -### Shell scripts - -1. bootstrap.sh: - - Executes npm install and npm run-script download-externals. - - If you supply the argument build will also execute npm run-script package - - -2. doElectron.sh: - - Executes any of the listed npm scripts whose name is given as an argument - Additional arguments - * install-start: runs npm install and npm run-script start-dev - * bootstrap: executes the script `bootstrap.sh` - * bootstrap-build: executes the script `bootstrap.sh` with the argument build +This work is supported by the [National Endowment for the Humanities](https://www.neh.gov/) (NEH), through Digital Humanities grants [HD-51670-13](https://securegrants.neh.gov/publicquery/main.aspx?f=1&gn=HD-51670-13) and [HK-50181-14](https://securegrants.neh.gov/publicquery/main.aspx?f=1&gn=HK-50181-14) +## WAIL Electron +[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) +WAIL Home Screen +## Usage +You can download the latest release [here](https://github.com/N0taN3rd/wail/releases). +For information on using WAIL please consult the [wiki](https://github.com/N0taN3rd/wail/wiki). - -### Running in development mode -If you have not done so all ready `npm install`, `npm run-script download-externals` and copy the downloaded openjdk -and memgator to the bundled apps directory and finally run `npm run-script start-dev`. - -We use webpack-dev server with `--inline --hot` and requires port 9000 to be free. - - - -## Major Tasks - -### Status monitoring -- [X] heritrix crawl progress updating(queued,downloaded,...) per job -- [X] reachability of wayback and heritrix - -### Heritrix -- [x] start/stop -- [x] configure and launch single seed crawl -- [x] launch web ui in default browser -- [X] job crawl - - [x] configure one off crawl - - [x] launch one off crawl - - [x] view with in app editor - - [X] edit and save with in app editor - - [x] multi uri crawl -- [X] job status - - [x] on app start previous crawl status displayed - - [X] background monitoring -- [X] post initial launch control - -### Wayback -- [x] start/stop -- [x] replay of local archives(java7 runtimes only) -- [x] index CDX generation -- [X] wayback config - - [x] view in app editor - - [X] edit and save with in app editor - -### Memgator -- [X] I can haz memento - - [x] local memgator(linux only) - - [X] compile version for windows and osx - -### OS support - - [x] Linux!!!! - - [x] OSX - - [X] Windows - - [X] add os detection for operations - - [x] works - -### Misc - - [ ] ui (move from dev ui to finalized ui) - - [X] make monitoring and file sytem actions electron background processes - - [ ] hook into Google APIs - - [ ] save to local or public archive - - -### Screen shots - -![Wail Electron Advanced](/images/wailFront.png?raw=true "Basic") -![Wail Electron Advanced](/images/wail-advanced.png?raw=true "Advanced") +To get up and running from source consult the Development section in this projects wiki. ### Slides from Archives Unleased 2.0 [Are Wails Electric?](http://www.slideshare.net/JohnBerlin3/are-wails-electric) -Powered by Electron and React. ## Problems? Questions? -Please see the [Frequently Asked Questions](https://github.com/machawk1/wail/wiki/FAQ) page. +Please see the [Frequently Asked Questions](https://github.com/N0taN3rd/wail/wiki/FAQ) page. ## Contact diff --git a/bundledApps/tomcat/temp/.gitkeep b/archives/collections/default/archive/.gitkeep similarity index 100% rename from bundledApps/tomcat/temp/.gitkeep rename to archives/collections/default/archive/.gitkeep diff --git a/bundledApps/tomcat/logs/thisBlankFileMustExistForAutomatedScriptsToWork b/archives/collections/default/indexes/.gitkeep similarity index 100% rename from bundledApps/tomcat/logs/thisBlankFileMustExistForAutomatedScriptsToWork rename to archives/collections/default/indexes/.gitkeep diff --git a/archives/collections/default/indexes/all.cdxj b/archives/collections/default/indexes/all.cdxj new file mode 100644 index 00000000..e69de29b diff --git a/archives/collections/default/indexes/index.cdxj b/archives/collections/default/indexes/index.cdxj new file mode 100644 index 00000000..e69de29b diff --git a/archives/collections/default/metadata.yaml b/archives/collections/default/metadata.yaml new file mode 100755 index 00000000..b6f15a62 --- /dev/null +++ b/archives/collections/default/metadata.yaml @@ -0,0 +1,2 @@ +description: Default Collection +title: Default diff --git a/archives/collections/default/static/.gitkeep b/archives/collections/default/static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/archives/collections/default/templates/.gitkeep b/archives/collections/default/templates/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/archives/static/default_banner.js b/archives/static/default_banner.js new file mode 100644 index 00000000..3f24942f --- /dev/null +++ b/archives/static/default_banner.js @@ -0,0 +1,61 @@ +/* +Copyright(c) 2013-2014 Ilya Kreymer. Released under the GNU General Public License. + +This file is part of pywb, https://github.com/ikreymer/pywb + + pywb is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + pywb is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with pywb. If not, see . + +*/ + +// Creates the default pywb banner. +// Override this function/script to create a different type of banner + + +_wb_js.create_banner_element = function(banner_id) +{ + + var banner = document.createElement("wb_div", true); + banner.setAttribute("id", banner_id); + banner.setAttribute("lang", "en"); + + var text; + + if (wbinfo.is_frame) { + text = _wb_js.banner_labels.LOADING_MSG; + } else if (wbinfo.is_live) { + text = _wb_js.banner_labels.LIVE_MSG; + } else { + text = _wb_js.banner_labels.REPLAY_MSG; + } + + text = "" + text + ""; + + var capture_str = ""; + if (wbinfo && wbinfo.timestamp) { + capture_str = _wb_js.ts_to_date(wbinfo.timestamp, true); + } + + text += "" + capture_str + ""; + + if (wbinfo.proxy_magic && wbinfo.url) { + var select_url = wbinfo.proxy_magic + "/" + wbinfo.url; + var query_url = wbinfo.proxy_magic + "/*/" + wbinfo.url; + text += ' All Capture Times'; + text += '
' + text += 'From collection "' + wbinfo.coll + '" All Collections'; + } + + banner.innerHTML = text; + document.body.insertBefore(banner, document.body.firstChild); +} diff --git a/archives/static/flowplayer/flowplayer-3.2.18.swf b/archives/static/flowplayer/flowplayer-3.2.18.swf new file mode 100644 index 00000000..aed1fcb1 Binary files /dev/null and b/archives/static/flowplayer/flowplayer-3.2.18.swf differ diff --git a/archives/static/flowplayer/flowplayer.audio-3.2.11.swf b/archives/static/flowplayer/flowplayer.audio-3.2.11.swf new file mode 100644 index 00000000..6c11d551 Binary files /dev/null and b/archives/static/flowplayer/flowplayer.audio-3.2.11.swf differ diff --git a/archives/static/flowplayer/flowplayer.controls-3.2.16.swf b/archives/static/flowplayer/flowplayer.controls-3.2.16.swf new file mode 100644 index 00000000..7887f964 Binary files /dev/null and b/archives/static/flowplayer/flowplayer.controls-3.2.16.swf differ diff --git a/archives/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf b/archives/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf new file mode 100644 index 00000000..2a570ba9 Binary files /dev/null and b/archives/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf differ diff --git a/archives/static/flowplayer/toolbox.flashembed.js b/archives/static/flowplayer/toolbox.flashembed.js new file mode 100644 index 00000000..cb96948e --- /dev/null +++ b/archives/static/flowplayer/toolbox.flashembed.js @@ -0,0 +1,301 @@ +/** + * @license + * jQuery Tools @VERSION / Flashembed - New wave Flash embedding + * + * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE. + * + * http://flowplayer.org/tools/toolbox/flashembed.html + * + * Since : March 2008 + * Date : @DATE + */ +(function() { + + var IE = document.all, + URL = 'http://www.adobe.com/go/getflashplayer', + JQUERY = typeof jQuery == 'function', + RE = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/, + GLOBAL_OPTS = { + // very common opts + width: '100%', + height: '100%', + id: "_" + ("" + Math.random()).slice(9), + + // flashembed defaults + allowfullscreen: true, + allowscriptaccess: 'always', + quality: 'high', + + // flashembed specific options + version: [3, 0], + onFail: null, + expressInstall: null, + w3c: false, + cachebusting: false + }; + + // version 9 bugfix: (http://blog.deconcept.com/2006/07/28/swfobject-143-released/) + if (window.attachEvent) { + window.attachEvent("onbeforeunload", function() { + __flash_unloadHandler = function() {}; + __flash_savedUnloadHandler = function() {}; + }); + } + + // simple extend + function extend(to, from) { + if (from) { + for (var key in from) { + if (from.hasOwnProperty(key)) { + to[key] = from[key]; + } + } + } + return to; + } + + // used by asString method + function map(arr, func) { + var newArr = []; + for (var i in arr) { + if (arr.hasOwnProperty(i)) { + newArr[i] = func(arr[i]); + } + } + return newArr; + } + + window.flashembed = function(root, opts, conf) { + + // root must be found / loaded + if (typeof root == 'string') { + root = document.getElementById(root.replace("#", "")); + } + + // not found + if (!root) { return; } + + if (typeof opts == 'string') { + opts = {src: opts}; + } + + return new Flash(root, extend(extend({}, GLOBAL_OPTS), opts), conf); + }; + + // flashembed "static" API + var f = extend(window.flashembed, { + + conf: GLOBAL_OPTS, + + getVersion: function() { + var fo, ver; + + try { + ver = navigator.plugins["Shockwave Flash"].description.slice(16); + } catch(e) { + + try { + fo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + ver = fo && fo.GetVariable("$version"); + + } catch(err) { + try { + fo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + ver = fo && fo.GetVariable("$version"); + } catch(err2) { } + } + } + + ver = RE.exec(ver); + return ver ? [ver[1], ver[3]] : [0, 0]; + }, + + asString: function(obj) { + + if (obj === null || obj === undefined) { return null; } + var type = typeof obj; + if (type == 'object' && obj.push) { type = 'array'; } + + switch (type){ + + case 'string': + obj = obj.replace(new RegExp('(["\\\\])', 'g'), '\\$1'); + + // flash does not handle %- characters well. transforms "50%" to "50pct" (a dirty hack, I admit) + obj = obj.replace(/^\s?(\d+\.?\d*)%/, "$1pct"); + return '"' +obj+ '"'; + + case 'array': + return '['+ map(obj, function(el) { + return f.asString(el); + }).join(',') +']'; + + case 'function': + return '"function()"'; + + case 'object': + var str = []; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + str.push('"'+prop+'":'+ f.asString(obj[prop])); + } + } + return '{'+str.join(',')+'}'; + } + + // replace ' --> " and remove spaces + return String(obj).replace(/\s/g, " ").replace(/\'/g, "\""); + }, + + getHTML: function(opts, conf) { + + opts = extend({}, opts); + + /******* OBJECT tag and it's attributes *******/ + var html = ''; + } + + // not allowed params + opts.width = opts.height = opts.id = opts.w3c = opts.src = null; + opts.onFail = opts.version = opts.expressInstall = null; + + for (var key in opts) { + if (opts[key]) { + html += ''; + } + } + + /******* FLASHVARS *******/ + var vars = ""; + + if (conf) { + for (var k in conf) { + if (conf[k]) { + var val = conf[k]; + vars += k +'='+ encodeURIComponent(/function|object/.test(typeof val) ? f.asString(val) : val) + '&'; + } + } + vars = vars.slice(0, -1); + html += ''; + } + + html += ""; + + return html; + }, + + isSupported: function(ver) { + return VERSION[0] > ver[0] || VERSION[0] == ver[0] && VERSION[1] >= ver[1]; + } + + }); + + var VERSION = f.getVersion(); + + function Flash(root, opts, conf) { + + // version is ok + if (f.isSupported(opts.version)) { + root.innerHTML = f.getHTML(opts, conf); + + // express install + } else if (opts.expressInstall && f.isSupported([6, 65])) { + root.innerHTML = f.getHTML(extend(opts, {src: opts.expressInstall}), { + MMredirectURL: location.href, + MMplayerType: 'PlugIn', + MMdoctitle: document.title + }); + + } else { + + // fail #2.1 custom content inside container + if (!root.innerHTML.replace(/\s/g, '')) { + root.innerHTML = + "

Flash version " + opts.version + " or greater is required

" + + "

" + + (VERSION[0] > 0 ? "Your version is " + VERSION : "You have no flash plugin installed") + + "

" + + + (root.tagName == 'A' ? "

Click here to download latest version

" : + "

Download latest version from here

"); + + if (root.tagName == 'A') { + root.onclick = function() { + location.href = URL; + }; + } + } + + // onFail + if (opts.onFail) { + var ret = opts.onFail.call(this); + if (typeof ret == 'string') { root.innerHTML = ret; } + } + } + + // http://flowplayer.org/forum/8/18186#post-18593 + if (IE) { + window[opts.id] = document.getElementById(opts.id); + } + + // API methods for callback + extend(this, { + + getRoot: function() { + return root; + }, + + getOptions: function() { + return opts; + }, + + + getConf: function() { + return conf; + }, + + getApi: function() { + return root.firstChild; + } + + }); + } + + // setup jquery support + if (JQUERY) { + + // tools version number + jQuery.tools = jQuery.tools || {version: '@VERSION'}; + + jQuery.tools.flashembed = { + conf: GLOBAL_OPTS + }; + + jQuery.fn.flashembed = function(opts, conf) { + return this.each(function() { + jQuery(this).data("flashembed", flashembed(this, opts, conf)); + }); + }; + } + +})(); + diff --git a/archives/static/scroll-webkit.css b/archives/static/scroll-webkit.css new file mode 100644 index 00000000..a64d87e9 --- /dev/null +++ b/archives/static/scroll-webkit.css @@ -0,0 +1,83 @@ +::-webkit-scrollbar { +height: 12px; +overflow: visible; +width: 12px +} +::-webkit-scrollbar-button { +height: 0; +width: 0 +} +::-webkit-scrollbar-track { +background-clip: padding-box; +border: solid transparent; +border-width: 0 0 0 0px +} +::-webkit-scrollbar-track:horizontal { +border-width: 4px 0 0 +} +::-webkit-scrollbar-track:hover { +background-color: rgba(0, 0, 0, .05); +box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1) +} +::-webkit-scrollbar-track:horizontal:hover { +box-shadow: inset 0 1px 0 rgba(0, 0, 0, .1) +} +::-webkit-scrollbar-track:active { +background-color: rgba(0, 0, 0, .05); +box-shadow: inset 1px 0 0 rgba(0, 0, 0, .14), inset -1px 0 0 rgba(0, 0, 0, .07) +} +::-webkit-scrollbar-track:horizontal:active { +box-shadow: inset 0 1px 0 rgba(0, 0, 0, .14), inset 0 -1px 0 rgba(0, 0, 0, .07) +} +::-webkit-scrollbar-thumb { +background-color: rgba(0, 0, 0, .2); +background-clip: padding-box; +border: solid transparent; +border-width: 1px 1px 1px 2px; +min-height: 28px; +padding: 100px 0 0; +box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset 0 -1px 0 rgba(0, 0, 0, .07) +} +::-webkit-scrollbar-thumb:horizontal { +border-width: 6px 1px 1px; +padding: 0 0 0 100px; +box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .07) +} +::-webkit-scrollbar-thumb:hover { +background-color: rgba(0, 0, 0, .4); +box-shadow: inset 1px 1px 1px rgba(0, 0, 0, .25) +} +::-webkit-scrollbar-thumb:active { +background-color: rgba(0, 0, 0, 0.5); +box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.35) +} +::-webkit-scrollbar-corner { +background: transparent +} + +/* +body::-webkit-scrollbar-track-piece { +background-clip: padding-box; +background-color: #f5f5f5; +border: solid #fff; +border-width: 0 0 0 3px; +box-shadow: inset 1px 0 0 rgba(0, 0, 0, .14), inset -1px 0 0 rgba(0, 0, 0, .07) +} +body::-webkit-scrollbar-track-piece:horizontal { +border-width: 3px 0 0; +box-shadow: inset 0 1px 0 rgba(0, 0, 0, .14), inset 0 -1px 0 rgba(0, 0, 0, .07) +} +body::-webkit-scrollbar-thumb { +border-width: 1px 1px 1px 5px +} +body::-webkit-scrollbar-thumb:horizontal { +border-width: 5px 1px 1px +} +body::-webkit-scrollbar-corner { +background-clip: padding-box; +background-color: #f5f5f5; +border: solid #fff; +border-width: 3px 0 0 3px; +box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14) +} +*/ diff --git a/archives/static/vidrw.js b/archives/static/vidrw.js new file mode 100644 index 00000000..43f9014e --- /dev/null +++ b/archives/static/vidrw.js @@ -0,0 +1,723 @@ +/* +Copyright(c) 2013-2014 Ilya Kreymer. Released under the GNU General Public License. + +This file is part of pywb, https://github.com/ikreymer/pywb + + pywb is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + pywb is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with pywb. If not, see . +*/ + +// VidRw 1.0 -- video rewriting +// +// + +var _pywbvid = "default"; + +var _pywb_yt_err = undefined; + +if (window.location.hash) { + var m = window.location.hash.match(/_pywbvid=([\w]+)/); + if (m) { + _pywbvid = m[1]; + } + + if (_pywbvid == "html" || _pywbvid == "flash") { + var YT_W_E_RX = /^(https?:\/\/.*youtube.com)\/(watch|embed).*$/; + + if (wbinfo.url.match(YT_W_E_RX)) { + // special case: prevent yt player from being inited + Object.defineProperty(window, 'yt', {writeable: false}); + Object.defineProperty(window, 'ytplayer', {writeable: false}); + } + } +} + + +__wbvidrw = (function() { + + var checked_embeds = false; + + var FLASH_PLAYER = wbinfo.static_prefix + "/flowplayer/flowplayer-3.2.18.swf"; + + var replay_prefix = wbinfo.prefix; + if (wbinfo.mod) { + replay_prefix += wbinfo.mod + "/"; + } + + function check_videos() { + if (checked_embeds) { + return; + } + + function handle_all_embeds() { + var embeds = document.getElementsByTagName("embed"); + + for (var i = 0; i < embeds.length; i++) { + handle_embed_tag(embeds[i]); + } + } + + function handle_all_objects() { + var objects = document.getElementsByTagName("object"); + + for (var i = 0; i < objects.length; i++) { + handle_object_tag(objects[i]); + } + } + + handle_all_embeds(); + handle_all_objects(); + + checked_embeds = true; + + handle_yt_videos(_pywbvid); + + //window.setInterval(handle_all_embeds, 2000); + //_wb_wombat.add_tag_handler("embed", handle_all_embeds); + //_wb_wombat.add_tag_handler("object", handle_all_objects); + } + + function check_broken_vimeo() + { + if (document.querySelector("video")) { + return; + } + + if (document.querySelector("object") || document.querySelector("embed")) { + return; + } + + var player = document.getElementById("player"); + + if (!player) { + return; + } + + player.classList.remove("loading"); + + // Add placeholder embed + var embed = document.createElement("embed"); + embed.src = wbinfo.url; + player.appendChild(embed); + + if (!window.MutationObserver) { + handle_embed_tag(embed); + } + } + + function handle_embed_tag(elem) + { + var src = elem.getAttribute("src"); + if (!src) { + return false; + } + + if (elem._vidrw) { + return false; + } + + // already rewritten + if (elem.outerHTML.indexOf(FLASH_PLAYER) >= 0) { + return false; + } + + elem._vidrw = true; + + if (src.indexOf("ustream.tv/flash") >= 0) { + var flashvars = elem.getAttribute("flashvars"); + var res = flashvars.match(/[vc]id=([\d]+)/); + if (res) { + src = "http://www.ustream.tv/recorded/" + res[1]; + } + } + + check_replacement(elem, src); + return true; + } + + function handle_object_tag(elem) + { + var obj_url = undefined; + + // already rewritten + if (elem.outerHTML.indexOf(FLASH_PLAYER) >= 0) { + return false; + } + + for (var j = 0; j < elem.children.length; j++) { + var child = elem.children[j]; + + if (child.tagName == "EMBED") { + return false; + } + + if (child.tagName == "PARAM" && !obj_url) { + var name = child.getAttribute("name"); + name = name.toLowerCase(); + + if (name == "movie" || name == "src") { + var value = child.getAttribute("value"); + obj_url = value; + } + + //flashvars extraction: work in progress: for now, only ustream + if (name == "flashvars") { + if (wbinfo.url.indexOf("ustream") >= 0) { + var value = child.getAttribute("value"); + + var pairs = value.split('&'); + + var result = {}; + pairs.forEach(function(pair) { + if (obj_url) { + return; + } + pair = pair.split('='); + var qval = decodeURIComponent(pair[1] || ''); + //TODO: allow for picking from multiple urls + if (qval.indexOf("http") == 0) { + obj_url = qval; + return; + } + }); + } + + //if (wbinfo.url.indexOf("livestream") >= 0) { + obj_url = wbinfo.url; + //} + } + } + } + + if (obj_url) { + if (elem._vidrw) { + return false; + } + + elem._vidrw = true; + + check_replacement(elem, obj_url); + return true; + } + + return false; + } + + var YT_W_E_RX = /^(https?:\/\/.*youtube.com)\/(watch|embed).*$/; + var YT_V_RX = /^(https?:\/\/.*youtube.com)\/v\/([^&?]+)(.*)$/; + var VIMEO_RX = /^https?:\/\/.*vimeo.*clip_id=([^&]+)/; + + function remove_yt() + { + // yt special case + if (window.yt && window.yt.player && window.yt.player.getPlayerByElement) { + //yt.player.Application.create("player-api", ytplayer.config).dispose(); + + var elem = window.yt.player.getPlayerByElement("player-api"); + + if (!elem) { + elem = window.yt.player.getPlayerByElement("player"); + } + + if (elem) { + elem.destroy(); + } + + delete window.yt; + if (window.ytplayer) { + delete window.ytplayer; + } + } + // end yt special case + } + + function handle_yt_videos(_pywbvid) + { + function do_yt_video_replace(elem) + { + remove_yt(); + + while (elem.hasChildNodes()) { + elem.removeChild(elem.lastChild); + } + + //add placeholder child to remove + var placeholder = document.createElement("div", true); + elem.appendChild(placeholder); + check_replacement(placeholder, wbinfo.url); + } + + // special case: yt + if (wbinfo.url.match(YT_W_E_RX)) { + //var ytvideo = document.getElementsByTagName("video"); + var player_div = document.getElementById("player-api"); + if (!player_div) { + player_div = document.getElementById("player"); + } + + //if (ytvideo.length == 1 && ytvideo[0].getAttribute("data-youtube-id") != "") { + if (player_div) { + if (_pywbvid == "html" || _pywbvid == "flash") { + do_yt_video_replace(player_div); + } else if (!wbinfo.is_live) { + var player = undefined; + + if (window.yt && window.yt.player && window.yt.player.getPlayerByElement) { + player = window.yt.player.getPlayerByElement(player_div); + } + + if (player) { + _pywb_yt_err = function() { + console.log("yt onError"); + console.log(arguments); + //do_yt_video_replace(player_div); + } + player.addEventListener("onStateChange", function() { console.log("yt stateChange"); }); + + player.addEventListener("onError", "_pywb_yt_err"); + } + + setTimeout(function() { + if (!window.yt || !window.yt.player) { + do_yt_video_replace(player_div); + return; + } + + var state = -1; + + if (player && player.getPlayerState) { + state = player.getPlayerState(); + } + + // if no player or player is still buffering (is this ok), then replace + if (state < 0) { + do_yt_video_replace(player_div); + return; + } + }, 4000); + } + } + } + } + + function check_replacement(elem, src, no_retry) { + if (!src || src.indexOf("javascript:") == 0) { + return; + } + + if (src.indexOf("blob:") == 0) { + src = wbinfo.url; + no_retry = true; + } + + src = _wb_wombat.extract_orig(src); + + // special cases + if (src.indexOf("dailymotion.com/swf/") > 0) { + src = src.replace("/swf/", "/video/"); + } + + src = src.replace(VIMEO_RX, "http://player.vimeo.com/video/$1"); + + if (_pywbvid == "orig") { + var repl_src = src.replace(YT_V_RX, "$1/embed/$2?$3&controls=0"); + if (repl_src != src) { + do_replace_iframe(elem, repl_src); + return; + } + } + // end special cases + + var xhr = new XMLHttpRequest(); + xhr._no_rewrite = true; + + var info_url; + + // if in proxy mode, access video info via special proxy magic path + // eg: http://pywb.proxy//vi_/ + if (wbinfo.proxy_magic) { + info_url = window.location.protocol + "//" + wbinfo.proxy_magic + "/" + wbinfo.coll + "/"; + } else { + info_url = wbinfo.prefix; + } + + info_url += "vi_/" + src; + + xhr.open('GET', info_url, true); + xhr.onload = function() { + if (xhr.status == 200) { + var videoinfo = JSON.parse(xhr.responseText); + + // special cases + // Soundcloud + if (videoinfo._type == "playlist" && videoinfo.extractor == "soundcloud:playlist") { + var player_url = "https://w.soundcloud.com/player/?visual=true&show_artwork=true&url=" + encodeURIComponent(videoinfo.webpage_url); + do_replace_iframe(elem, player_url); + return; + } + + if (videoinfo._type == "playlist") { + if (videoinfo.entries && videoinfo.entries.length > 0) { + do_replace_video(elem, videoinfo.entries[0]); + return; + } + } + + if (!videoinfo.formats && videoinfo.url && videoinfo.ext && videoinfo.format_id && + !(videoinfo.ext == "swf" && videoinfo.format_id == "0")) { + videoinfo.formats = [{ext: videoinfo.ext, + url: videoinfo.url, + format_id: videoinfo.format_id + }]; + } + + if (videoinfo.formats) { + do_replace_video(elem, videoinfo); + return; + } + } + + // Retry with current page as last resort + if (!no_retry) { + check_replacement(elem, wbinfo.url, true); + } + }; + xhr.send(); + } + + function do_replace_iframe(elem, url) { + var iframe = document.createElement("iframe"); + var dim = get_dim(elem); + iframe.width = dim[0]; + iframe.height = dim[1]; + iframe.src = url; + iframe.setAttribute("frameborder", 0); + do_replace_elem(elem, iframe); + } + + function get_dim(elem) { + var width = elem.width; + if (!width) { + width = "100%"; + } + + var height = elem.height; + if (!height) { + height = "100%"; + } + + return [width, height]; + } + + function do_replace_elem(elem, replacement) { + var tag_name = elem.tagName.toLowerCase(); + + if (!elem.parentNode) { + console.warn("vidrw: Missing Parent Node for Video Replace!"); + return; + } + + if (tag_name == "iframe" || tag_name == "object") { + elem.parentNode.replaceChild(replacement, elem); + } else if (tag_name == "embed") { + if (elem.parentElement && elem.parentElement.tagName.toLowerCase() == "object") { + elem = elem.parentElement; + } + + elem.parentNode.replaceChild(replacement, elem); + + } else { + elem.parentNode.replaceChild(replacement, elem); + } + } + + + function do_replace_video(elem, info) { + var thumb_url = null; + + if (info.thumbnail) { + thumb_url = replay_prefix + info.thumbnail; + } + + var tag_name = elem.tagName.toLowerCase(); + + var dim = get_dim(elem); + var width = dim[0], height = dim[1]; + + // sort in reverse preference + info.formats.sort(function(f1, f2) { + var pref1 = f1.preference ? f1.preference : 0; + var pref2 = f2.preference ? f2.preference : 0; + return pref2 - pref1; + }); + + // Try HTML5 Video + var htmlelem = document.createElement("video", true); + + var replacement = null; + + if (htmlelem.canPlayType) { + var type = can_play_video_or_audio(htmlelem, info); + + if (type) { + if (type == "audio") { + htmlelem = document.createElement("audio", true); + } + if (_pywbvid != "flash") { + replacement = init_html_player(htmlelem, type, width, height, info, thumb_url); + } + } + } + + var vidId = undefined; + + if (!replacement) { + + // check format, if this is just an swf file, and not a video, nothing to replace! + if (get_format_ext(info) == "swf") { + return; + } + + replacement = document.createElement("div", true); + + vidId = "_wb_vid" + Date.now() + Math.random(); + replacement.setAttribute("id", vidId); + } + + do_replace_elem(elem, replacement); + + if (vidId) { + init_flash_player(vidId, replacement, width, height, info, thumb_url); + } + } + + function get_format_ext(info_format) { + if (info_format.ext == "unknown_video") { + return info_format.format_id; + } else { + return info_format.ext; + } + } + + function can_play_video_or_audio(elem, info) { + var types = ["video", "audio"]; + var type = undefined; + + // include main url + info._wb_avail = 1; + + for (var i = 0; i < info.formats.length; i++) { + // Skip DASH formats + if (info.formats[i].format_note && info.formats[i].format_note.indexOf("DASH") >= 0) { + continue; + } + + for (var j = 0; j < types.length; j++) { + var ext = get_format_ext(info.formats[i]); + + if (can_play(elem, ext, types[j])) { + info.formats[i]._wb_canPlay = true; + info._wb_avail++; + type = types[j]; + break; + } + } + } + + return type; + } + + function can_play(elem, ext, type) { + var canplay = elem.canPlayType(type + "/" + ext); + if (canplay === "probably" || canplay === "maybe") { + return true; + } else { + return false; + } + } + + function init_html_player(htmlelem, type, width, height, info, thumb_url) + { + htmlelem.setAttribute("width", width); + htmlelem.setAttribute("height", height); + htmlelem.setAttribute("controls", "1"); + htmlelem.style.backgroundColor = "#000"; + htmlelem.style.visibility = "visible"; + + if (thumb_url) { + htmlelem.setAttribute("poster", thumb_url); + } + + var num_failed = 0; + + var fallback = function() { + num_failed++; + // only handle if all have failed + if (num_failed < info._wb_avail) { + return; + } + + var replacement = document.createElement("div", true); + + var vidId = "_wb_vid" + Date.now(); + replacement.setAttribute("id", vidId); + + htmlelem.parentNode.replaceChild(replacement, htmlelem); + + init_flash_player(vidId, replacement, width, height, info, thumb_url); + }; + + for (var i = -1; i < info.formats.length; i++) { + var source = document.createElement("source", true); + + var url, format; + + if (i < 0) { + url = info.url; + format = get_format_ext(info); + } else { + if (!info.formats[i]._wb_canPlay) { + continue; + } + url = info.formats[i].url; + format = get_format_ext(info.formats[i]); + } + + url = replay_prefix + url; + format = type + "/" + format; + + source.setAttribute("src", url); + source.setAttribute("type", format); + source.addEventListener("error", fallback); + + htmlelem.appendChild(source); + } + + htmlelem.addEventListener("error", fallback); + return htmlelem; + } + + function init_flash_player(div_id, elem, width, height, info, thumb_url) + { + if (width[width.length - 1] != '%') { + width += "px"; + } + if (height[height.length - 1] != '%') { + height += "px"; + } + + var style = 'width: ' + width + '; height: ' + height + '; display: block; visibility: visible !important'; + + elem.style.cssText += ';' + style; + + var url; + + if (wbinfo.is_live) { + url = info.url; + } else { + url = info.url; + } + + url = replay_prefix + url; + + var config = { + clip: { + url: url, + }, + + plugins: { + rangeRequests: true + } + }; + + var opts = { + src: FLASH_PLAYER, + onFail: function() { console.log("FAILED"); } + }; + + var do_embed = function() { + var flash = window.flashembed(div_id, opts, {"config": config}); + }; + + if (!window.flashembed) { + var script = document.createElement("script", true); + script._no_rewrite = true; + script.onload = do_embed; + script.setAttribute("src", wbinfo.static_prefix + "/flowplayer/toolbox.flashembed.js"); + document.body.appendChild(script); + } else { + do_embed(); + } + } + + //============================================ + function init_node_insert_obs(window) + { + function do_handle(te, func) + { + setTimeout(function() { func(te); }, 100); + } + + var m = new MutationObserver(function(records, observer) + { + for (var i = 0; i < records.length; i++) { + var r = records[i]; + if (r.type == "childList") { + for (var j = 0; j < r.addedNodes.length; j++) { + + var elem = undefined; + var tag_name = undefined; + + try { + elem = r.addedNodes[j]; + tag_name = elem.tagName; + } catch (e) { + continue; + } + + if (tag_name) { + if (tag_name == "OBJECT") { + do_handle(elem, handle_object_tag); + } else if (tag_name == "EMBED") { + do_handle(elem, handle_embed_tag); + } + } + } + } + } + }); + + m.observe(window.document.documentElement, { + childList: true, + subtree: true, + }); + } + + + if (!window.MutationObserver) { + document.addEventListener("DOMContentLoaded", function() { + window.setTimeout(check_videos, 200); + }); + } else { + init_node_insert_obs(window); + } + + + // VIMEO FIX + if (wbinfo && wbinfo.url.indexOf("player.vimeo.com/") >= 0) { + document.addEventListener("DOMContentLoaded", function() { + window.setTimeout(check_broken_vimeo, 500); + }); + } + +})(); diff --git a/archives/static/wb.css b/archives/static/wb.css new file mode 100644 index 00000000..b285cfa6 --- /dev/null +++ b/archives/static/wb.css @@ -0,0 +1,51 @@ + +#_wb_plain_banner, #_wb_frame_top_banner +{ + display: block !important; + top: 0px !important; + left: 0px !important; + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif !important; + width: 100% !important; + font-size: 24px !important; + background-color: lightYellow !important; + color: black !important; + text-align: center !important; + z-index: 2147483643 !important; + line-height: normal !important; +} + +#_wb_plain_banner +{ + position: absolute !important; + padding: 4px !important; + border: 1px solid !important; +} + +#_wb_frame_top_banner +{ + position: absolute !important; + border: 0px; + height: 40px !important; +} + +.wb_iframe_div +{ + position: absolute; + width: 100%; + height: 100%; + padding: 40px 4px 4px 0px; + border: none; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + overflow: hidden; +} + +.wb_iframe +{ + width: 100%; + height: 100%; + border: 2px solid tan; + padding: 0px 0px 0px 0px; + overflow: scroll; +} diff --git a/archives/static/wb.js b/archives/static/wb.js new file mode 100644 index 00000000..6b5693c1 --- /dev/null +++ b/archives/static/wb.js @@ -0,0 +1,175 @@ +/* +Copyright(c) 2013-2014 Ilya Kreymer. Released under the GNU General Public License. + +This file is part of pywb, https://github.com/ikreymer/pywb + + pywb is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + pywb is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with pywb. If not, see . + */ + +function __WbJsInit() { + +var bid = undefined; + + +function init_banner() { + var PLAIN_BANNER_ID = "_wb_plain_banner"; + var FRAME_BANNER_ID = "_wb_frame_top_banner"; + + if (!window.wbinfo || (window.__WB_replay_top && window != window.__WB_replay_top)) { + return; + } + + if (!bid) { + if (wbinfo.is_frame) { + bid = FRAME_BANNER_ID; + } else { + bid = PLAIN_BANNER_ID; + } + } + + if (!document || !document.body) { + return; + } + + if (document.getElementById(bid) != null) { + return; + } + + var res = _wb_js.create_banner_element(bid); + if (res) { + bid = res; + } +} + +this.banner_labels = {LOADING_MSG: "Loading...", + REPLAY_MSG: "This is an archived page from ", + LIVE_MSG: "This is a live page loaded on "}; + +this.create_banner_element = function() { + // No banner by default + return null; +} + +this.ts_to_date = function(ts, is_gmt) +{ + if (!ts) { + return ""; + } + + if (ts.length < 14) { + ts += "00000000000000".substr(ts.length); + } + + var datestr = (ts.substring(0, 4) + "-" + + ts.substring(4, 6) + "-" + + ts.substring(6, 8) + "T" + + ts.substring(8, 10) + ":" + + ts.substring(10, 12) + ":" + + ts.substring(12, 14) + "-00:00"); + + var date = new Date(datestr); + if (is_gmt) { + return date.toGMTString(); + } else { + return date.toLocaleString(); + } +} + +function add_event(name, func, object) { + if (object.addEventListener) { + object.addEventListener(name, func); + return true; + } else if (object.attachEvent) { + object.attachEvent("on" + name, func); + return true; + } else { + return false; + } +} + +function remove_event(name, func, object) { + if (object.removeEventListener) { + object.removeEventListener(name, func); + return true; + } else if (object.detachEvent) { + object.detachEvent("on" + name, func); + return true; + } else { + return false; + } +} + +function notify_top(event) { + if (!window.__WB_top_frame) { + return; + } + + if (!window.WB_wombat_location) { + return; + } + + if (typeof(window.WB_wombat_location.href) != "string") { + return; + } + + var message = { + "url": window.WB_wombat_location.href, + "ts": wbinfo.timestamp, + "request_ts": wbinfo.request_ts, + "is_live": wbinfo.is_live, + "title": document ? document.title : "", + "wb_type": "load", + } + + window.__WB_top_frame.postMessage(message, "*"); + + //remove_event("readystatechange", notify_top, document); +} + +this.load = function() { + if (window._wb_js_inited) { + return; + } + + window._wb_js_inited = true; + + // Non-Framed Replay OR top frame for framed replay! + if (window.wbinfo && !window.__WB_top_frame) { + if (wbinfo.is_framed && wbinfo.mod != "bn_") { + var hash = window.location.hash; + + var loc = window.location.href.replace(window.location.hash, ""); + loc = decodeURI(loc); + + var top_url = wbinfo.top_url; + + if (wbinfo.top_url && (loc != decodeURI(wbinfo.top_url))) { + // Auto-redirect to top frame + window.location.replace(wbinfo.top_url + hash); + return; + } + } + // Init Banner (no frame or top frame) + add_event("readystatechange", init_banner, document); + + // Framed Replay + } else if (window.__WB_top_frame) { + add_event("readystatechange", notify_top, document); + } +} + +}; + + +_wb_js = new __WbJsInit(); diff --git a/archives/static/wb_frame.js b/archives/static/wb_frame.js new file mode 100644 index 00000000..535877e4 --- /dev/null +++ b/archives/static/wb_frame.js @@ -0,0 +1,248 @@ +/* +Copyright(c) 2013-2014 Ilya Kreymer. Released under the GNU General Public License. + +This file is part of pywb, https://github.com/ikreymer/pywb + + pywb is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + pywb is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with pywb. If not, see . +*/ + +var LIVE_COOKIE_REGEX = /pywb.timestamp=([\d]{1,14})/; + +var TS_REGEX = /\/([\d]{1,14})(?:\w+_)?\/(?:\w+[:])?\/\//; + +//var curr_state = {}; + +var IFRAME_ID = "replay_iframe"; + +var last_inner_hash = undefined; + +function make_url(url, ts, mod, prefix) +{ + if (ts || mod) { + mod += "/"; + } + + prefix = prefix || wbinfo.prefix; + + if (ts) { + return prefix + ts + mod + url; + } else { + return prefix + mod + url; + } +} + +function push_state(state) { + /* + var frame = document.getElementById(IFRAME_ID).contentWindow; + if (frame.WB_wombat_location) { + var curr_href = frame.WB_wombat_location.href; + + // If not current url, don't update + if (state.url != curr_href) { + return; + } + } + */ + + state.outer_url = make_url(state.url, state.request_ts, wbinfo.frame_mod, wbinfo.outer_prefix); + state.inner_url = make_url(state.url, state.request_ts, wbinfo.replay_mod); + + var canon_url = make_url(state.url, state.request_ts, "", wbinfo.outer_prefix); + + if (window.location.href != canon_url) { + if (state.wb_type != "pushState") { + window.history.replaceState(state, "", canon_url); + } else { + window.history.pushState(state, "", canon_url); + } + } + + set_state(state); +} + +function pop_state(state) { + set_state(state); + + //var frame = document.getElementById(IFRAME_ID); + //frame.src = state.inner_url; +} + +function extract_ts(url) +{ + var result = url.match(TS_REGEX); + if (!result) { + return ""; + } + + return result[1]; +} + +function extract_replay_url(url) { + var inx = url.indexOf("/http:"); + if (inx < 0) { + inx = url.indexOf("/https:"); + if (inx < 0) { + return ""; + } + } + return url.substring(inx + 1); +} + +function set_state(state) { + var capture_info = document.getElementById("_wb_capture_info"); + if (capture_info) { + capture_info.innerHTML = state.capture_str; + } + + var label = document.getElementById("_wb_label"); + if (label && window._wb_js) { + if (state.is_live) { + label.innerHTML = _wb_js.banner_labels.LIVE_MSG; + } else { + label.innerHTML = _wb_js.banner_labels.REPLAY_MSG; + } + } + + //curr_state = state; +} + +window.onpopstate = function(event) { + var state = event.state; + + if (state) { + pop_state(state); + } +} + +function extract_ts_cookie(value) { + var result = value.match(LIVE_COOKIE_REGEX); + if (result) { + return result[1]; + } else { + return ""; + } +} + + +function init_pm(frame) { + if (!frame) { + return; + } + + var frame_win = frame.contentWindow; + + window.addEventListener("message", function(event) { + if (event.source == window.parent) { + // Pass to replay frame + frame_win.postMessage(event.data, "*"); + } else if (event.source == frame_win) { + + // Check if iframe url change message + if (typeof(event.data) == "object" && event.data["wb_type"]) { + handle_message(event.data); + + } else { + // Pass to parent + window.parent.postMessage(event.data, "*"); + } + } + }); + + window.__WB_pmw = function(win) { + this.pm_source = win; + return this; + } +} + + +function handle_message(state) { + var type = state.wb_type; + + if (type == "load" || type == "pushState" || type == "replaceState") { + update_wb_url(state); + } else if (type == "go") { + window.history.go(state.param); + } else if (type == "back") { + window.history.back(); + } else if (type == "forward") { + window.history.forward(); + } else if (type == "hashchange") { + inner_hash_changed(state); + } +} + + +function update_wb_url(state) { + if (window._wb_js) { + state['capture_str'] = _wb_js.ts_to_date(state.ts, true); + } + + push_state(state); +} + +function inner_hash_changed(state) { + if (window.location.hash != state.hash) { + window.location.hash = state.hash; + } + last_inner_hash = state.hash; +} + +function outer_hash_changed(event) { + if (window.location.hash == last_inner_hash) { + return; + } + + var frame = document.getElementById(IFRAME_ID); + + if (frame) { + var message = {"wb_type": "outer_hashchange", "hash": window.location.hash} + + frame.contentWindow.postMessage(message, "*", undefined, true); + } +} + +function init_hash_connect() { + var frame = document.getElementById(IFRAME_ID); + + if (!frame) { + return; + } + + if (window.location.hash) { + var curr_url = wbinfo.capture_url + window.location.hash; + + frame.src = make_url(curr_url, wbinfo.request_ts, wbinfo.replay_mod); + + last_inner_hash = window.location.hash; + //frame.location.href = make_url(curr_url, wbinfo.request_ts, wbinfo.replay_mod); + //frame.location.hash = window.location.hash; + } + + if ("onhashchange" in window) { + window.addEventListener("hashchange", outer_hash_changed, false); + } + + // Init Post Message connect + init_pm(frame); +} + +document.addEventListener("DOMContentLoaded", init_hash_connect); + +// Load Banner +if (window._wb_js) { + _wb_js.load(); +} + + + diff --git a/archives/static/wombat.js b/archives/static/wombat.js new file mode 100644 index 00000000..4e317463 --- /dev/null +++ b/archives/static/wombat.js @@ -0,0 +1,2755 @@ +/* +Copyright(c) 2013-2015 Ilya Kreymer. Released under the GNU General Public License. + +This file is part of pywb, https://github.com/ikreymer/pywb + + pywb is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + pywb is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with pywb. If not, see . + */ + +//============================================ +// Wombat JS-Rewriting Library v2.21 +//============================================ + + + +_WBWombat = (function() { + + +var wombat_internal = function($wbwindow) { + // Globals + var wb_replay_prefix; + + var wb_abs_prefix; + var wb_rel_prefix; + var wb_rel_prefix_check; + + var wb_capture_date_part; + var wb_orig_scheme; + var wb_orig_origin; + var wb_curr_host; + + var wb_setAttribute = $wbwindow.Element.prototype.setAttribute; + var wb_getAttribute = $wbwindow.Element.prototype.getAttribute; + + var wb_info; + + var wb_wombat_updating = false; + + // custom options + var wb_opts; + + var wb_is_proxy = false; + + //============================================ + function is_host_url(str) { + // Good guess that's its a hostname + if (str.indexOf("www.") == 0) { + return true; + } + + // hostname:port (port required) + var matches = str.match(/^[\w-]+(\.[\w-_]+)+(:\d+)(\/|$)/); + if (matches && (matches[0].length < 64)) { + return true; + } + + // ip:port + matches = str.match(/^\d+\.\d+\.\d+\.\d+(:\d+)?(\/|$)/); + if (matches && (matches[0].length < 64)) { + return true; + } + + return false; + } + + //============================================ + function starts_with(string, arr_or_prefix) { + if (!string) { return undefined; } + + if (arr_or_prefix instanceof Array) { + for (var i = 0; i < arr_or_prefix.length; i++) { + if (string.indexOf(arr_or_prefix[i]) == 0) { + return arr_or_prefix[i]; + } + } + } else if (string.indexOf(arr_or_prefix) == 0) { + return arr_or_prefix; + } + + return undefined; + } + + //============================================ + function equals_any(string, arr) { + for (var i = 0; i < arr.length; i++) { + if (string === arr[i]) { + return arr[i]; + } + } + return undefined; + } + + //============================================ + function ends_with(str, suffix) { + if (str.indexOf(suffix, str.length - suffix.length) !== -1) { + return suffix; + } else { + return undefined; + } + } + + //============================================ + var rewrite_url = rewrite_url_; + + function rewrite_url_debug(url, use_rel, mod) { + var rewritten = rewrite_url_(url, use_rel, mod); + if (url != rewritten) { + console.log('REWRITE: ' + url + ' -> ' + rewritten); + } else { + console.log('NOT REWRITTEN ' + url); + } + return rewritten; + } + + //============================================ + var HTTP_PREFIX = "http://"; + var HTTPS_PREFIX = "https://"; + var REL_PREFIX = "//"; + + var VALID_PREFIXES = [HTTP_PREFIX, HTTPS_PREFIX, REL_PREFIX]; + var IGNORE_PREFIXES = ["#", "about:", "data:", "mailto:", "javascript:", "{", "*"]; + + var BAD_PREFIXES; + + function init_bad_prefixes(prefix) { + BAD_PREFIXES = ["http:" + prefix, "https:" + prefix, + "http:/" + prefix, "https:/" + prefix]; + } + + var SRC_TAGS = ["IFRAME", "IMG", "SCRIPT", "VIDEO", "AUDIO", "SOURCE", "EMBED", "INPUT"]; + + var HREF_TAGS = ["LINK", "A"]; + + var REWRITE_ATTRS = ["src", "href", "poster"]; + + var URL_PROPS = ["href", "hash", "pathname", "host", "hostname", "protocol", "origin", "search", "port"]; + + //============================================ + function rewrite_url_(url, use_rel, mod) { + // If undefined, just return it + if (!url) { + return url; + } + + var urltype_ = (typeof url); + + // If object, use toString + if (urltype_ == "object") { + url = url.toString(); + } else if (urltype_ != "string") { + return url; + } + + // proxy mode: If no wb_replay_prefix, only rewrite scheme + if (wb_is_proxy) { + if (wb_orig_scheme == HTTP_PREFIX && starts_with(url, HTTPS_PREFIX)) { + return HTTP_PREFIX + url.substr(HTTPS_PREFIX.length); + } else if (wb_orig_scheme == HTTPS_PREFIX && starts_with(url, HTTP_PREFIX)) { + return HTTPS_PREFIX + url.substr(HTTP_PREFIX.length); + } else { + return url; + } + } + + // just in case wombat reference made it into url! + url = url.replace("WB_wombat_", ""); + + // ignore anchors, about, data + if (starts_with(url, IGNORE_PREFIXES)) { + return url; + } + + // OPTS: additional ignore prefixes + if (wb_opts.no_rewrite_prefixes) { + if (starts_with(url, wb_opts.no_rewrite_prefixes)) { + return url; + } + } + + // If starts with prefix, no rewriting needed + // Only check replay prefix (no date) as date may be different for each + // capture + if (starts_with(url, wb_replay_prefix) || starts_with(url, $wbwindow.location.origin + wb_replay_prefix)) { + return url; + } + + // A special case where the port somehow gets dropped + // Check for this and add it back in, eg http://localhost/path/ -> http://localhost:8080/path/ + if ($wbwindow.location.host != $wbwindow.location.hostname) { + if (starts_with(url, $wbwindow.location.protocol + '//' + $wbwindow.location.hostname + "/")) { + url = url.replace("/" + $wbwindow.location.hostname + "/", "/" + $wbwindow.location.host + "/"); + return url; + } + } + + // If server relative url, add prefix and original host + if (url.charAt(0) == "/" && !starts_with(url, REL_PREFIX)) { + + // Already a relative url, don't make any changes! + if (wb_capture_date_part && url.indexOf(wb_capture_date_part) >= 0) { + return url; + } + + // relative collection + if ((url.indexOf(wb_rel_prefix) == 1) && (url.indexOf("http") > 1)) { + var scheme_sep = url.indexOf(":/"); + if (scheme_sep > 0 && url[scheme_sep + 2] != '/') { + url = url.substring(0, scheme_sep + 2) + "/" + url.substring(scheme_sep + 2); + } + return url; + } + + return get_final_url(use_rel ? wb_rel_prefix : wb_abs_prefix, mod, wb_orig_origin + url); + } + + // Use a parser + if (url.charAt(0) == ".") { + url = resolve_rel_url(url); + } + + // If full url starting with http://, https:// or // + // add rewrite prefix + var prefix = starts_with(url, VALID_PREFIXES); + + if (prefix) { + var orig_host = $wbwindow.__WB_replay_top.location.host; + var orig_protocol = $wbwindow.__WB_replay_top.location.protocol; + + var prefix_host = prefix + orig_host + '/'; + + // if already rewritten url, must still check scheme + if (starts_with(url, prefix_host)) { + if (starts_with(url, wb_replay_prefix)) { + return url; + } + + var curr_scheme = orig_protocol + '//'; + var path = url.substring(prefix_host.length); + var rebuild = false; + + if (path.indexOf(wb_rel_prefix_check) < 0 && url.indexOf("/static/") < 0) { + path = get_final_url(wb_rel_prefix, mod, WB_wombat_location.origin + "/" + path); + rebuild = true; + } + + // replace scheme to ensure using the correct server scheme + //if (starts_with(url, wb_orig_scheme) && (wb_orig_scheme != curr_scheme)) { + if (prefix != curr_scheme && prefix != REL_PREFIX) { + rebuild = true; + } + + if (rebuild) { + if (!use_rel) { + url = curr_scheme + orig_host; + } else { + url = ""; + } + url += "/" + path; + } + + return url; + } + return get_final_url(wb_abs_prefix, mod, url); + } + + // Check for common bad prefixes and remove them + prefix = starts_with(url, BAD_PREFIXES); + + if (prefix) { + url = extract_orig(url); + return get_final_url(wb_abs_prefix, mod, url); + } + + // May or may not be a hostname, call function to determine + // If it is, add the prefix and make sure port is removed + if (is_host_url(url) && !starts_with(url, $wbwindow.location.host + '/')) { + return get_final_url(wb_abs_prefix, mod, wb_orig_scheme + url); + } + + return url; + } + + //============================================ + function resolve_rel_url(url) { + var parser = make_parser(extract_orig($wbwindow.document.baseURI)); + var href = parser.href; + var hash = href.lastIndexOf("#"); + + if (hash >= 0) { + href = href.substring(0, hash); + } + + var lastslash = href.lastIndexOf("/"); + + if (lastslash >= 0 && lastslash != (href.length - 1)) { + href = href.substring(0, lastslash + 1); + } + + parser.href = href + url; + url = parser.href; + return url; + } + + //============================================ + function extract_orig(href) { + if (!href) { + return ""; + } + + var orig_href = href; + + // proxy mode: no extraction needed + if (wb_is_proxy) { + return href; + } + + href = href.toString(); + + // ignore certain urls + if (starts_with(href, IGNORE_PREFIXES)) { + return href; + } + + // if no coll, start from beginning, otherwise could be part of coll.. + var start = wb_rel_prefix ? 1 : 0; + + var index = href.indexOf("/http", start); + if (index < 0) { + index = href.indexOf("///", start); + } + + // extract original url from wburl + if (index >= 0) { + href = href.substr(index + 1); + } else { + index = href.indexOf(wb_replay_prefix); + if (index >= 0) { + href = href.substr(index + wb_replay_prefix.length); + } + if ((href.length > 4) && + (href.charAt(2) == "_") && + (href.charAt(3) == "/")) { + href = href.substr(4); + } + + if (href != orig_href && !starts_with(href, VALID_PREFIXES)) { + href = HTTP_PREFIX + href; + } + } + + if (orig_href.charAt(0) == "/" && orig_href.charAt(1) != "/" && starts_with(href, wb_orig_origin)) { + href = href.substr(wb_orig_origin.length); + } + + return href; + } + + //============================================ + // Override a DOM property + function def_prop(obj, prop, set_func, get_func, enumerable) { + // if the property is marked as non-configurable in the current + // browser, skip the override + var existingDescriptor = Object.getOwnPropertyDescriptor(obj, prop); + if (existingDescriptor && !existingDescriptor.configurable) { + return; + } + + // if no getter function was supplied, skip the override. + // See https://github.com/ikreymer/pywb/issues/147 for context + if (!get_func) { + return; + } + + try { + var descriptor = { + configurable: true, + enumerable: enumerable || false, + get: get_func, + }; + + if (set_func) { + descriptor.set = set_func; + } + + Object.defineProperty(obj, prop, descriptor); + + return true; + } catch (e) { + console.warn('Failed to redefine property %s', prop, e.message); + return false; + } + } + + + //============================================ + function make_parser(href) { + href = extract_orig(href); + + var baseWin; + + // special case: for newly opened blank windows, use the opener + // to create parser to have the proper baseURI + if ($wbwindow.location.href == "about:blank" && $wbwindow.opener) { + baseWin = $wbwindow.opener; + } else { + baseWin = $wbwindow; + } + + var p = baseWin.document.createElement("a", true); + p.href = href; + return p; + } + + + //============================================ + function set_loc(loc, orig_href) { + var parser = make_parser(orig_href); + + loc._orig_href = orig_href; + loc._parser = parser; + + var href = parser.href; + loc._hash = parser.hash; + + loc._href = href; + + loc._host = parser.host; + loc._hostname = parser.hostname; + + if (parser.origin) { + loc._origin = parser.origin; + } + + loc._pathname = parser.pathname; + loc._port = parser.port; + //this.protocol = parser.protocol; + loc._protocol = parser.protocol; + loc._search = parser.search; + + if (!Object.defineProperty) { + loc.href = href; + loc.hash = parser.hash; + + loc.host = loc._host; + loc.hostname = loc._hostname; + loc.origin = loc._origin; + loc.pathname = loc._pathname; + loc.port = loc._port; + loc.protocol = loc._protocol; + loc.search = loc._search; + } + } + + + function init_loc_override(loc_obj, orig_setter, orig_getter) { + var make_get_loc_prop = function(prop) { + function getter() { + if (this._no_rewrite) { + return orig_getter.call(this, prop); + } + + var curr_orig_href = orig_getter.call(this, "href"); + + if (prop == "href") { + return extract_orig(curr_orig_href); + } + + if (this._orig_href != curr_orig_href) { + set_loc(this, curr_orig_href); + } + + var value = this["_" + prop]; + + return value; + } + + return getter; + } + + var make_set_loc_prop = function(prop) { + function setter(value) { + if (this._no_rewrite) { + orig_setter.call(this, prop, value); + return; + } + + this["_" + prop] = value; + + if (!this._parser) { + var href = orig_getter.call(this); + this._parser = make_parser(href); + } + + //Special case for href="." assignment + if (prop == "href" && typeof(value) == "string") { + if (value) { + if (value[0] == ".") { + value = resolve_rel_url(value); + } else if (value[0] == "/" && (value.length <= 1 || value[1] != "/")) { + value = WB_wombat_location.origin + value; + } + } + } + + try { + this._parser[prop] = value; + } catch (e) { + console.log('Error setting ' + prop + ' = ' + value); + } + + if (prop == "hash") { + value = this._parser[prop]; + } else { + prop = "href"; + var rel = (value == this._parser.pathname); + value = rewrite_url(this._parser.href, rel); + } + + orig_setter.call(this, prop, value); + } + + return setter; + } + + function add_loc_prop(loc, prop) { + def_prop(loc, prop, make_set_loc_prop(prop), make_get_loc_prop(prop), true); + } + + if (Object.defineProperty) { + for (var i = 0; i < URL_PROPS.length; i++) { + add_loc_prop(loc_obj, URL_PROPS[i]); + } + } + } + + + //============================================ + //Define WombatLocation + + function WombatLocation(orig_loc) { + this._orig_loc = orig_loc; + + // Rewrite replace and assign functions + this.replace = function(url) { + var new_url = rewrite_url(url); + var orig = extract_orig(new_url); + if (orig == this.href) { + return orig; + } + return this._orig_loc.replace(new_url); + } + + this.assign = function(url) { + var new_url = rewrite_url(url); + var orig = extract_orig(new_url); + if (orig == this.href) { + return orig; + } + return this._orig_loc.assign(new_url); + } + + this.reload = function() { + return this._orig_loc.reload(); + } + + this.orig_getter = function(prop) { + return this._orig_loc[prop]; + } + + this.orig_setter = function(prop, value) { + this._orig_loc[prop] = value; + } + + init_loc_override(this, this.orig_setter, this.orig_getter); + + set_loc(this, orig_loc.href); + + this.toString = function() { + return this.href; + } + + // Copy any remaining properties + for (prop in orig_loc) { + if (this.hasOwnProperty(prop)) { + continue; + } + + if ((typeof orig_loc[prop]) != "function") { + this[prop] = orig_loc[prop]; + } + } + } + + //============================================ + function update_location(req_href, orig_href, actual_location, wombat_loc) { + if (!req_href) { + return; + } + + if (req_href == orig_href) { + // Reset wombat loc to the unrewritten version + //if (wombat_loc) { + // wombat_loc.href = extract_orig(orig_href); + //} + return; + } + + + var ext_orig = extract_orig(orig_href); + var ext_req = extract_orig(req_href); + + if (!ext_orig || ext_orig == ext_req) { + return; + } + + var final_href = rewrite_url(req_href); + + console.log(actual_location.href + ' -> ' + final_href); + + actual_location.href = final_href; + } + + //============================================ + function check_location_change(wombat_loc, is_top) { + var locType = (typeof wombat_loc); + + var actual_location = (is_top ? $wbwindow.__WB_replay_top.location : $wbwindow.location); + + // String has been assigned to location, so assign it + if (locType == "string") { + update_location(wombat_loc, actual_location.href, actual_location); + + } else if (locType == "object") { + update_location(wombat_loc.href, + wombat_loc._orig_href, + actual_location); + } + } + + //============================================ + function check_all_locations() { + if (wb_wombat_updating) { + return false; + } + + wb_wombat_updating = true; + + check_location_change($wbwindow.WB_wombat_location, false); + + // Only check top if its a different $wbwindow + if ($wbwindow.WB_wombat_location != $wbwindow.__WB_replay_top.WB_wombat_location) { + check_location_change($wbwindow.__WB_replay_top.WB_wombat_location, true); + } + + // lochash = $wbwindow.WB_wombat_location.hash; + // + // if (lochash) { + // $wbwindow.location.hash = lochash; + // + // //if ($wbwindow.top.update_wb_url) { + // // $wbwindow.top.location.hash = lochash; + // //} + // } + + wb_wombat_updating = false; + } + + //============================================ + function init_seeded_random(seed) { + // Adapted from: + // http://indiegamr.com/generate-repeatable-random-numbers-in-js/ + + $wbwindow.Math.seed = parseInt(seed); + function seeded_random() { + $wbwindow.Math.seed = ($wbwindow.Math.seed * 9301 + 49297) % 233280; + var rnd = $wbwindow.Math.seed / 233280; + + return rnd; + } + + $wbwindow.Math.random = seeded_random; + } + + function init_crypto_random() { + if (!$wbwindow.crypto || !$wbwindow.Crypto) { + return; + } + + var orig_getrandom = $wbwindow.Crypto.prototype.getRandomValues; + + var new_getrandom = function(array) { + for (i = 0; i < array.length; i++) { + array[i] = parseInt($wbwindow.Math.random() * 4294967296); + } + return array; + } + + $wbwindow.Crypto.prototype.getRandomValues = new_getrandom; + $wbwindow.crypto.getRandomValues = new_getrandom; + } + + //============================================ + function override_history_func(func_name) { + if (!$wbwindow.history) { + return; + } + + var orig_func = $wbwindow.history[func_name]; + + if (!orig_func) { + return; + } + + $wbwindow.history['_orig_' + func_name] = orig_func; + + function rewritten_func(state_obj, title, url) { + url = rewrite_url(url); + + var abs_url = extract_orig(url); + + if (!abs_url) { + abs_url = $wbwindow.WB_wombat_location.href; + } + + if (abs_url && + (abs_url != $wbwindow.WB_wombat_location.origin) && + !starts_with(abs_url, $wbwindow.WB_wombat_location.origin + "/")) { + throw new DOMException("Invalid history change: " + abs_url); + } + + if (url == $wbwindow.location.href) { + return; + } + + orig_func.call(this, state_obj, title, url); + + if ($wbwindow.__WB_top_frame) { + var message = { + "url": abs_url, + "ts": wb_info.timestamp, + "request_ts": wb_info.request_ts, + "is_live": wb_info.is_live, + "title": title, + "wb_type": func_name, + } + + $wbwindow.__WB_top_frame.postMessage(message, wb_info.top_host); + } + } + + $wbwindow.history[func_name] = rewritten_func; + if ($wbwindow.History && $wbwindow.History.prototype) { + $wbwindow.History.prototype[func_name] = rewritten_func; + } + + return rewritten_func; + } + + //============================================ + function override_history_nav(func_name) { + if (!$wbwindow.history) { + return; + } + + // Only useful for framed replay + if (!$wbwindow.__WB_top_frame) { + return; + } + + var orig_func = $wbwindow.history[func_name]; + + if (!orig_func) { + return; + } + + function rewritten_func() { + orig_func.apply(this, arguments); + + var message = { + "wb_type": func_name, + } + + if (func_name == "go") { + message["param"] = arguments[0]; + } + + if ($wbwindow.__WB_top_frame) { + $wbwindow.__WB_top_frame.postMessage(message, wb_info.top_host); + } + } + + $wbwindow.history[func_name] = rewritten_func; + if ($wbwindow.History && $wbwindow.History.prototype) { + $wbwindow.History.prototype[func_name] = rewritten_func; + } + + return rewritten_func; + } + + //============================================ + function init_ajax_rewrite() { + if (!$wbwindow.XMLHttpRequest || + !$wbwindow.XMLHttpRequest.prototype || + !$wbwindow.XMLHttpRequest.prototype.open) { + return; + } + + var orig = $wbwindow.XMLHttpRequest.prototype.open; + + function open_rewritten(method, url, async, user, password) { + if (!this._no_rewrite) { + url = rewrite_url(url); + } + + // defaults to true + if (async != false) { + async = true; + } + + result = orig.call(this, method, url, async, user, password); + if (!starts_with(url, "data:")) { + this.setRequestHeader('X-Pywb-Requested-With', 'XMLHttpRequest'); + } + } + + $wbwindow.XMLHttpRequest.prototype.open = open_rewritten; + + + // responseURL override + override_prop_extract($wbwindow.XMLHttpRequest.prototype, "responseURL"); + } + + //============================================ + function init_fetch_rewrite() + { + if (!$wbwindow.fetch) { + return; + } + + var orig_fetch = $wbwindow.fetch; + + $wbwindow.fetch = function(input, init) { + if (typeof(input) === "string") { + input = rewrite_url(input); + } else if (typeof(input) === "object" && input.url) { + var new_url = rewrite_url(input.url); + if (new_url != input.url) { + input = new Request(new_url, input); + } + } + + return orig_fetch.call(this, input, init); + } + } + + //============================================ + function init_base_override() + { + if (!Object.defineProperty) { + return; + } + + // element .getAttribute() + orig_getAttribute = $wbwindow.HTMLBaseElement.prototype.getAttribute; + + $wbwindow.HTMLBaseElement.prototype.getAttribute = function(name) { + var result = orig_getAttribute.call(this, name); + if (name == "href") { + result = extract_orig(result); + } + return result; + } + + // element .href + var base_href_get = function() { + return this.getAttribute("href"); + }; + + def_prop($wbwindow.HTMLBaseElement.prototype, "href", undefined, base_href_get); + + // Shared baseURI + override_prop_extract($wbwindow.Node.prototype, "baseURI"); + } + + //============================================ + function override_prop_extract(proto, prop) { + var orig_getter = get_orig_getter(proto, prop); + if (orig_getter) { + var new_getter = function() { + var res = orig_getter.call(this); + return extract_orig(res, true); + } + + def_prop(proto, prop, undefined, new_getter); + } + } + + //============================================ + function init_setAttribute_override() + { + if (!$wbwindow.Element || + !$wbwindow.Element.prototype || + !$wbwindow.Element.prototype.setAttribute) { + return; + } + + var orig_setAttribute = $wbwindow.Element.prototype.setAttribute; + wb_setAttribute = orig_setAttribute; + + $wbwindow.Element.prototype._orig_setAttribute = orig_setAttribute; + + $wbwindow.Element.prototype.setAttribute = function(name, value) { + if (name) { + var lowername = name.toLowerCase(); + if (equals_any(lowername, REWRITE_ATTRS) && typeof(value) == "string") { + if (!this._no_rewrite) { + var old_value = value; + + var mod = undefined; + if (this.tagName == "SCRIPT") { + mod = "js_"; + } + value = rewrite_url(value, false, mod); + } + } else if (lowername == "style" && typeof(value) == "string") { + value = rewrite_style(value); + } + } + orig_setAttribute.call(this, name, value); + }; + } + + //============================================ + function init_getAttribute_override() + { + if (!$wbwindow.Element || + !$wbwindow.Element.prototype || + !$wbwindow.Element.prototype.setAttribute) { + return; + } + + var orig_getAttribute = $wbwindow.Element.prototype.getAttribute; + wb_getAttribute = orig_getAttribute; + + $wbwindow.Element.prototype.getAttribute = function(name) { + var result = orig_getAttribute.call(this, name); + + if (equals_any(name.toLowerCase(), REWRITE_ATTRS)) { + result = extract_orig(result); + } else if (starts_with(name, "data-") && starts_with(result, VALID_PREFIXES)) { + result = extract_orig(result); + } + + return result; + } + + } + + //============================================ + function init_createElement_override() + { + if (!$wbwindow.document.createElement || + !$wbwindow.Document.prototype.createElement) { + return; + } + + var orig_createElement = $wbwindow.document.createElement; + + var createElement_override = function(tagName, skip) + { + var created = orig_createElement.call(this, tagName); + if (!created) { + return created; + } + if (skip) { + created._no_rewrite = true; + } + else { + // form override + if (created.tagName == "FORM") { + override_attr(created, "action", "", true); + } + } + + return created; + } + + $wbwindow.Document.prototype.createElement = createElement_override; + $wbwindow.document.createElement = createElement_override; + } + + //============================================ + function init_createElementNS_fix() + { + if (!$wbwindow.document.createElementNS || + !$wbwindow.Document.prototype.createElementNS) { + return; + } + + var orig_createElementNS = $wbwindow.document.createElementNS; + + var createElementNS_fix = function(namespaceURI, qualifiedName) + { + namespaceURI = extract_orig(namespaceURI); + return orig_createElementNS.call(this, namespaceURI, qualifiedName); + } + + $wbwindow.Document.prototype.createElementNS = createElementNS_fix; + $wbwindow.document.createElementNS = createElementNS_fix; + } + + //============================================ + //function init_image_override() { + // $wbwindow.__Image = $wbwindow.Image; + // $wbwindow.Image = function (Image) { + // return function (width, height) { + // var image = new Image(width, height); + // override_attr(image, "src"); + // return image; + // } + // }($wbwindow.Image); + //} + + //============================================ + function init_date_override(timestamp) { + timestamp = parseInt(timestamp) * 1000; + //var timezone = new Date().getTimezoneOffset() * 60 * 1000; + // Already UTC! + var timezone = 0; + var start_now = $wbwindow.Date.now() + var timediff = start_now - (timestamp - timezone); + + if ($wbwindow.__wb_Date_now) { + return; + } + + var orig_date = $wbwindow.Date; + + var orig_utc = $wbwindow.Date.UTC; + var orig_parse = $wbwindow.Date.parse; + var orig_now = $wbwindow.Date.now; + + $wbwindow.__wb_Date_now = orig_now; + + $wbwindow.Date = function (Date) { + return function (A, B, C, D, E, F, G) { + // Apply doesn't work for constructors and Date doesn't + // seem to like undefined args, so must explicitly + // call constructor for each possible args 0..7 + if (A === undefined) { + return new Date(orig_now() - timediff); + } else if (B === undefined) { + return new Date(A); + } else if (C === undefined) { + return new Date(A, B); + } else if (D === undefined) { + return new Date(A, B, C); + } else if (E === undefined) { + return new Date(A, B, C, D); + } else if (F === undefined) { + return new Date(A, B, C, D, E); + } else if (G === undefined) { + return new Date(A, B, C, D, E, F); + } else { + return new Date(A, B, C, D, E, F, G); + } + } + }($wbwindow.Date); + + $wbwindow.Date.prototype = orig_date.prototype; + + $wbwindow.Date.now = function() { + return orig_now() - timediff; + } + + $wbwindow.Date.UTC = orig_utc; + $wbwindow.Date.parse = orig_parse; + + $wbwindow.Date.__WB_timediff = timediff; + } + + //============================================ + function init_worker_override() { + if (!$wbwindow.Worker) { + return; + } + + // for now, disabling workers until override of worker content can be supported + // hopefully, pages depending on workers will have a fallback + //$wbwindow.Worker = undefined; + + // Worker unrewrite postMessage + var orig_worker = $wbwindow.Worker; + + function rewrite_blob(url) { + console.log('worker rewrite',url); + // use sync ajax request to get the contents, remove postMessage() rewriting + var x = new XMLHttpRequest(); + x.open("GET", url, false); + x.send(); + + var resp = x.responseText.replace(/__WB_pmw\(window\)\./g, ""); + var blob = new Blob([resp], {"type": "text/javascript"}); + return URL.createObjectURL(blob); + } + + $wbwindow.Worker = (function (Worker) { + return function (url) { + if (starts_with(url, "blob:")) { + url = rewrite_blob(url); + } + return new Worker(url); + } + + })($wbwindow.Worker); + + $wbwindow.Worker.prototype = orig_worker.prototype; + } + + + //============================================ +/* function init_mutation_obs($wbwindow) { + if (!$wbwindow.MutationObserver) { + return; + } + + var m = new MutationObserver(function(records, observer) + { + for (var i = 0; i < records.length; i++) { + var r = records[i]; + if (r.type == "attributes" && r.attributeName == "style") { + var style = r.target.style.cssText; + if (style.indexOf("url(") > 0) { + var new_style = rewrite_style(style); + if (new_style != style) { + r.target.style.cssText = new_style; + } + } + } + } + }); + + m.observe($wbwindow.document.documentElement, { + childList: false, + attributes: true, + subtree: true, + //attributeOldValue: true, + attributeFilter: ["style"]}); + } +*/ + //============================================ +/* function init_href_src_obs($wbwindow) + { + if (!$wbwindow.MutationObserver) { + return; + } + + var m = new MutationObserver(function(records, observer) + { + for (var i = 0; i < records.length; i++) { + var r = records[i]; + if (r.type == "attributes") { + //var curr = wb_getAttribute(r.target, r.attributeName); + var curr = r.target.getAttribute(r.attributeName); + var new_url = rewrite_url(curr); + if (curr != new_url) { + wb_setAttribute.call(r.target, r.attributeName, new_url); + } + } + } + }); + + m.observe($wbwindow.document.documentElement, { + childList: false, + attributes: true, + subtree: true, + //attributeOldValue: true, + attributeFilter: ["src", "href"]}); + + } + + + //============================================ + function init_iframe_insert_obs(root) + { + if (!$wbwindow.MutationObserver) { + return; + } + + var m = new MutationObserver(function(records, observer) + { + for (var i = 0; i < records.length; i++) { + var r = records[i]; + if (r.type == "childList") { + for (var j = 0; j < r.addedNodes.length; j++) { + if (r.addedNodes[j].tagName == "IFRAME") { + init_iframe_wombat(r.addedNodes[j]); + } + } + } + } + }); + + m.observe(root, { + childList: true, + subtree: true, + }); + } +*/ + //============================================ + function rewrite_attr(elem, name, abs_url_only) { + if (!elem || !elem.getAttribute) { + return; + } + + if (elem._no_rewrite) { + return; + } + + // already overwritten + if (elem["_" + name]) { + return; + } + + var value = wb_getAttribute.call(elem, name); + + if (!value || starts_with(value, "javascript:")) { + return; + } + + var new_value; + + if (name == "style") { + new_value = rewrite_style(value); + } else { + // Only rewrite if absolute url + if (abs_url_only && !starts_with(value, VALID_PREFIXES)) { + return; + } + + var mod = undefined; + + if (elem.tagName == "SCRIPT") { + mod = "js_"; + } + new_value = rewrite_url(value, false, mod); + } + + if (new_value != value) { + wb_setAttribute.call(elem, name, new_value); + return true; + } + } + + //============================================ + function rewrite_style(value) + { + STYLE_REGEX = /(url\s*\(\s*[\\"']*)([^)'"]+)([\\"']*\s*\))/gi; + + function style_replacer(match, n1, n2, n3, offset, string) { + return n1 + rewrite_url(n2) + n3; + } + + if (typeof(value) === "string") { + value = value.replace(STYLE_REGEX, style_replacer); + value = value.replace('WB_wombat_', ''); + } + + return value; + } + + //============================================ + function rewrite_frame_src(elem, name) + { + var value = wb_getAttribute.call(elem, name); + var new_value = undefined; + + // special case for rewriting javascript: urls that contain WB_wombat_ + // must insert wombat init first! + if (starts_with(value, "javascript:")) { + if (value.indexOf("WB_wombat_") >= 0) { + var JS = "javascript:"; + new_value = JS; + new_value += "window.parent._wb_wombat.init_new_window_wombat(window);" + new_value += value.substr(JS.length); + } + } + + if (!new_value) { + new_value = rewrite_url(value, false); + } + + if (new_value != value) { + wb_setAttribute.call(elem, name, new_value); + return true; + } + + return false; + } + + //============================================ + function rewrite_elem(elem) + { + if (!elem) { + return; + } + + var changed; + + if (elem.tagName == "STYLE") { + var new_content = rewrite_style(elem.textContent); + if (elem.textContent != new_content) { + elem.textContent = new_content; + changed = true; + } + } else if (elem.tagName == "OBJECT") { + changed = rewrite_attr(elem, "data", true); + } else if (elem.tagName == "FORM") { + changed = rewrite_attr(elem, "action", true); + } else if (elem.tagName == "INPUT") { + changed = rewrite_attr(elem, "value", true); + } else if (elem.tagName == "IFRAME" || elem.tagName == "FRAME") { + changed = rewrite_frame_src(elem, "src"); + } else { + changed = rewrite_attr(elem, "src"); + changed = rewrite_attr(elem, "srcset") || changed; + changed = rewrite_attr(elem, "href") || changed; + changed = rewrite_attr(elem, "style") || changed; + changed = rewrite_attr(elem, "poster") || changed; + } + + if (elem.getAttribute) { + if (elem.getAttribute("crossorigin")) { + elem.removeAttribute("crossorigin"); + changed = true; + } + + if (elem.getAttribute("integrity")) { + elem.removeAttribute("integrity"); + changed = true; + } + } + + return changed; + } + + var write_buff = ""; + + //============================================ + function rewrite_html(string, check_end_tag) { + if (!string) { + return string; + } + + if (write_buff) { + string = write_buff + string; + write_buff = ""; + } + var inner_doc = new DOMParser().parseFromString(string, "text/html"); + + if (!inner_doc) { + return string; + } + + string = string.toString(); + + var changed = false; + + for (var i = 0; i < inner_doc.all.length; i++) { + changed = rewrite_elem(inner_doc.all[i]) || changed; + } + + if (!changed) { + return string; + } + + var new_html = ""; + + // if original had tag, add full document HTML + if (string && string.indexOf("= 0) { + new_html = inner_doc.documentElement.outerHTML; + } else { + // otherwise, just add contents of head and body + new_html = inner_doc.head.innerHTML; + new_html += inner_doc.body.innerHTML; + + if (check_end_tag) { + if (inner_doc.all.length > 3) { + var end_tag = ""; + if (ends_with(new_html, end_tag) && !ends_with(string, end_tag)) { + new_html = new_html.substring(0, new_html.length - end_tag.length); + } + } else if (string[0] != "<" || string[string.length - 1] != ">") { + write_buff += string; + return; + } + } + } + + return new_html; + } + + //============================================ +/* function add_attr_overrides(tagName, created) + { + if (!created || created._src != undefined || created._href != undefined) { + return; + } + + if (equals_any(tagName, SRC_TAGS)) { + override_attr(created, "src"); + } else if (equals_any(tagName, HREF_TAGS)) { + override_attr(created, "href"); + } + } +*/ + //============================================ + function get_orig_getter(obj, prop) { + var orig_getter; + + if (obj.__lookupGetter__) { + orig_getter = obj.__lookupGetter__(prop); + } + + if (!orig_getter && Object.getOwnPropertyDescriptor) { + var props = Object.getOwnPropertyDescriptor(obj, prop); + if (props) { + orig_getter = props.get; + } + } + + return orig_getter; + } + + //============================================ + function get_orig_setter(obj, prop) { + var orig_setter; + + if (obj.__lookupSetter__) { + orig_setter = obj.__lookupSetter__(prop); + } + + if (!orig_setter && Object.getOwnPropertyDescriptor) { + var props = Object.getOwnPropertyDescriptor(obj, prop); + if (props) { + orig_setter = props.set; + } + } + + return orig_setter; + } + + //============================================ + function override_attr(obj, attr, mod, default_to_setget) { + var orig_getter = get_orig_getter(obj, attr); + var orig_setter = get_orig_setter(obj, attr); + + var setter = function(orig) { + var val = rewrite_url(orig, false, mod); + if (orig_setter) { + return orig_setter.call(this, val); + } else if (default_to_setget) { + return wb_setAttribute.call(this, attr, val); + } + } + + var getter = function() { + var res = undefined; + + if (orig_getter) { + res = orig_getter.call(this); + } else if (default_to_setget) { + res = wb_getAttribute.call(this, attr); + } + res = extract_orig(res); + + return res; + } + + def_prop(obj, attr, setter, getter); + } + + + //============================================ + function override_style_attr(obj, attr, prop_name) { + var orig_getter = get_orig_getter(obj, attr); + var orig_setter = get_orig_setter(obj, attr); + + var setter = function(orig) { + var val = rewrite_style(orig); + if (orig_setter) { + orig_setter.call(this, val); + } else { + this.setProperty(prop_name, val); + } + + return val; + } + + var getter = function() { + if (orig_getter) { + return orig_getter.call(this); + } else { + return this.getPropertyValue(prop_name); + } + } + + if ((orig_setter && orig_getter) || prop_name) { + def_prop(obj, attr, setter, getter); + } + } + + + //============================================ + function init_attr_overrides($wbwindow) { + override_attr($wbwindow.HTMLLinkElement.prototype, "href", "cs_"); + override_attr($wbwindow.CSSStyleSheet.prototype, "href", "cs_"); + override_attr($wbwindow.HTMLImageElement.prototype, "src", "im_"); + override_attr($wbwindow.HTMLIFrameElement.prototype, "src", "if_"); + override_attr($wbwindow.HTMLScriptElement.prototype, "src", "js_"); + override_attr($wbwindow.HTMLVideoElement.prototype, "src", "oe_"); + override_attr($wbwindow.HTMLVideoElement.prototype, "poster", "im_"); + override_attr($wbwindow.HTMLAudioElement.prototype, "src", "oe_"); + override_attr($wbwindow.HTMLAudioElement.prototype, "poster", "im_"); + override_attr($wbwindow.HTMLSourceElement.prototype, "src", "oe_"); + override_attr($wbwindow.HTMLSourceElement.prototype, "srcset", "oe_"); + override_attr($wbwindow.HTMLInputElement.prototype, "src", "oe_"); + override_attr($wbwindow.HTMLEmbedElement.prototype, "src", "oe_"); + override_attr($wbwindow.HTMLObjectElement.prototype, "data", "oe_"); + + override_anchor_elem(); + + var style_proto = $wbwindow.CSSStyleDeclaration.prototype; + + // For FF + if ($wbwindow.CSS2Properties) { + style_proto = $wbwindow.CSS2Properties.prototype; + } + + override_style_attr(style_proto, "cssText"); + + override_style_attr(style_proto, "background", "background"); + override_style_attr(style_proto, "backgroundImage", "background-image"); + + override_style_attr(style_proto, "listStyle", "list-style"); + override_style_attr(style_proto, "listStyleImage", "list-style-image"); + + override_style_attr(style_proto, "border", "border"); + override_style_attr(style_proto, "borderImage", "border-image"); + override_style_attr(style_proto, "borderImageSource", "border-image-source"); + } + + //============================================ + function override_anchor_elem() { + var anchor_orig = {} + + function save_prop(prop) { + anchor_orig["get_" + prop] = get_orig_getter($wbwindow.HTMLAnchorElement.prototype, prop); + anchor_orig["set_" + prop] = get_orig_setter($wbwindow.HTMLAnchorElement.prototype, prop); + } + + for (var i = 0; i < URL_PROPS.length; i++) { + save_prop(URL_PROPS[i]); + } + + var anchor_setter = function(prop, value) { + var func = anchor_orig["set_" + prop]; + if (func) { + return func.call(this, value); + } else { + return ""; + } + } + + var anchor_getter = function(prop) { + var func = anchor_orig["get_" + prop]; + if (func) { + return func.call(this); + } else { + return ""; + } + } + + init_loc_override($wbwindow.HTMLAnchorElement.prototype, anchor_setter, anchor_getter); + $wbwindow.HTMLAnchorElement.prototype.toString = function () { + return this.href; + }; + } + + + //============================================ + function override_html_assign(elemtype, prop) { + if (!$wbwindow.DOMParser || + !elemtype || + !elemtype.prototype) { + return; + } + + var obj = elemtype.prototype; + + var orig_getter = get_orig_getter(obj, prop); + var orig_setter = get_orig_setter(obj, prop); + + if (!orig_setter) { + return; + } + + var setter = function(orig) { + var res = orig; + if (!this._no_rewrite) { + //init_iframe_insert_obs(this); + if (this.tagName == "STYLE") { + res = rewrite_style(orig); + } else { + res = rewrite_html(orig); + } + } + orig_setter.call(this, res); + } + + def_prop(obj, prop, setter, orig_getter); + } + + + //============================================ + function override_iframe_content_access(prop) + { + if (!$wbwindow.HTMLIFrameElement || + !$wbwindow.HTMLIFrameElement.prototype) { + return; + } + + var obj = $wbwindow.HTMLIFrameElement.prototype; + + var orig_getter = get_orig_getter(obj, prop); + var orig_setter = get_orig_setter(obj, prop); + + if (!orig_getter) { + return; + } + + var getter = function() { + init_iframe_wombat(this); + return orig_getter.call(this); + }; + + def_prop(obj, prop, orig_setter, getter); + obj["_get_" + prop] = orig_getter; + } + + //============================================ + function init_insertAdjacentHTML_override() + { + if (!$wbwindow.Element || + !$wbwindow.Element.prototype || + !$wbwindow.Element.prototype.insertAdjacentHTML) { + return; + } + + var orig_insertAdjacentHTML = $wbwindow.Element.prototype.insertAdjacentHTML; + + var insertAdjacent_override = function(position, text) + { + if (!this._no_rewrite) { + // inserting adjacent, so must observe parent + //if (this.parentElement) { + // init_iframe_insert_obs(this.parentElement); + //} + text = rewrite_html(text); + } + + return orig_insertAdjacentHTML.call(this, position, text); + } + + $wbwindow.Element.prototype.insertAdjacentHTML = insertAdjacent_override; + } + + + + //============================================ + function init_wombat_loc(win) { + + if (!win || (win.WB_wombat_location && win.document.WB_wombat_location)) { + return; + } + + // Location + var wombat_location = new WombatLocation(win.location); + + if (Object.defineProperty) { + + var setter = function(value) { + if (this._WB_wombat_location) { + this._WB_wombat_location.href = value; + } else { + this.location = value; + } + } + + var getter = function() { + if (this._WB_wombat_location) { + return this._WB_wombat_location; + } else { + return this.location; + } + } + + def_prop(win.Object.prototype, "WB_wombat_location", setter, getter); + + init_proto_pm_origin(win); + + win._WB_wombat_location = wombat_location; + win.document._WB_wombat_location = wombat_location; + } else { + win.WB_wombat_location = wombat_location; + win.document.WB_wombat_location = wombat_location; + + // Check quickly after page load + setTimeout(check_all_locations, 500); + + // Check periodically every few seconds + setInterval(check_all_locations, 500); + } + } + + //============================================ +/* function rewrite_children(child) { + var desc; + + if (child.querySelectorAll) { + desc = child.querySelectorAll("[href], [src]"); + } + + if (desc) { + for (var i = 0; i < desc.length; i++) { + rewrite_elem(desc[i]); + } + } + } +*/ + + //============================================ + function init_dom_override() { + if (!$wbwindow.Node || !$wbwindow.Node.prototype) { + return; + } + + function replace_dom_func(funcname) { + var orig = $wbwindow.Node.prototype[funcname]; + + $wbwindow.Node.prototype[funcname] = function() { + var child = arguments[0]; + + if (child) { + if (child instanceof $wbwindow.Element) { + rewrite_elem(child); + } else if (child instanceof $wbwindow.Text) { + if (this.tagName == "STYLE") { + child.textContent = rewrite_style(child.textContent); + } + } + + // if fragment, rewrite children before adding + //if (child instanceof DocumentFragment) { + // rewrite_children(child); + //} + } + + var created = orig.apply(this, arguments); + + if (created && created.tagName == "IFRAME") { + init_iframe_wombat(created); + } + + return created; + } + } + + replace_dom_func("appendChild"); + replace_dom_func("insertBefore"); + replace_dom_func("replaceChild"); + } + + + function init_proto_pm_origin(win) { + if (win.Object.prototype.__WB_pmw) { + return; + } + + function pm_origin(origin_window) { + this.__WB_source = origin_window; + return this; + } + + try { + win.Object.defineProperty(win.Object.prototype, "__WB_pmw", {value: pm_origin, configurable: false, enumerable: false}); + } catch(e) { + + } + } + + //============================================ + function init_hash_change() + { + if (!$wbwindow.__WB_top_frame) { + return; + } + + function receive_hash_change(event) + { + if (!event.data || event.source != $wbwindow.__WB_top_frame) { + return; + } + + var message = event.data; + + if (!message.wb_type) { + return; + } + + if (message.wb_type == "outer_hashchange") { + if ($wbwindow.location.hash != message.hash) { + $wbwindow.location.hash = message.hash; + } + } + } + + function send_hash_change() { + var message = {"wb_type": "hashchange", + "hash": $wbwindow.location.hash + } + + if ($wbwindow.__WB_top_frame) { + $wbwindow.__WB_top_frame.postMessage(message, wb_info.top_host); + } + } + + $wbwindow.addEventListener("message", receive_hash_change); + + $wbwindow.addEventListener("hashchange", send_hash_change); + } + + //============================================ + function init_postmessage_override($wbwindow) + { + if (!$wbwindow.postMessage || $wbwindow.__orig_postMessage) { + return; + } + + var orig = $wbwindow.postMessage; + + $wbwindow.__orig_postMessage = orig; + + var postmessage_rewritten = function(message, targetOrigin, transfer, from_top) { + var from = undefined; + var src_id = undefined; + + if (window.__WB_source && window.__WB_source.WB_wombat_location) { + var source = window.__WB_source; + + from = source.WB_wombat_location.origin; + + if (!this.__WB_win_id) { + this.__WB_win_id = {}; + this.__WB_counter = 0; + } + + if (!source.__WB_id) { + source.__WB_id = (this.__WB_counter++) + source.WB_wombat_location.href; + } + this.__WB_win_id[source.__WB_id] = source; + + src_id = source.__WB_id; + + window.__WB_source = undefined; + } else { + from = window.WB_wombat_location.origin; + } + + var to = targetOrigin; + + if (to == this.location.origin) { + to = "*"; + } else { + var to_host = to.split("//", 2); + if (to_host.length == 2) { + to = to_host[1]; + } + } + + var new_message = {"from": from, + "to_host": to, + "src_id": src_id, + "message": message, + "from_top": from_top, + } + + if (targetOrigin != "*") { + targetOrigin = this.location.origin; + //targetOrigin = "*"; + } + + //console.log("Sending " + from + " -> " + to + " (" + targetOrigin + ") " + message); + + return orig.call(this, new_message, targetOrigin, transfer); + } + + $wbwindow.postMessage = postmessage_rewritten; + + $wbwindow.Window.prototype.postMessage = postmessage_rewritten; + +/* + for (var i = 0; i < $wbwindow.frames.length; i++) { + try { + //init_postmessage_override($wbwindow.frames[i]); + $wbwindow.frames[i].postMessage = postmessage_rewritten; + } catch (e) { + console.log(e); + } + } +*/ + function WrappedListener(event, orig_listener, win) { + var ne = event; + + if (event.data.from && event.data.message) { + + if (event.data.to_host != "*" && win.WB_wombat_location && event.data.to_host != win.WB_wombat_location.host) { + console.log("Skipping " + win.WB_wombat_location.host + " not " + event.data.to_host); + return; + } + + var source = event.source; + + if (event.data.from_top) { + source = win.__WB_top_frame; + } else if (event.data.src_id && win.__WB_win_id && win.__WB_win_id[event.data.src_id]) { + source = win.__WB_win_id[event.data.src_id]; + } + + ne = new MessageEvent("message", + {"bubbles": event.bubbles, + "cancelable": event.cancelable, + "data": event.data.message, + "origin": event.data.from, + "lastEventId": event.lastEventId, + "source": source, + "ports": event.ports}); + + ne._target = event.target; + ne._srcElement = event.srcElement; + ne._currentTarget = event.currentTarget; + ne._eventPhase = event.eventPhase; + ne._path = event.path; + } + + return orig_listener(ne); + } + + var listen_map = {}; + + // ADD + var _orig_addEventListener = $wbwindow.addEventListener; + + var _orig_removeEventListener = $wbwindow.removeEventListener; + + + var addEventListener_rewritten = function(type, listener, useCapture) { + if (type == "message") { + var win = this; + var wrapped_listener = function(event) { return WrappedListener(event, listener, win); } + + if (listen_map[listener]) { + //console.log("Listener Already Added"); + //_orig_removeEventListener.call(this, type, listen_map[listener], useCapture); + return; + } + + listen_map[listener] = wrapped_listener; + + return _orig_addEventListener.call(this, type, wrapped_listener, useCapture); + } else { + return _orig_addEventListener.call(this, type, listener, useCapture); + } + } + + $wbwindow.addEventListener = addEventListener_rewritten; + + // REMOVE + + var removeEventListener_rewritten = function(type, listener, useCapture) { + if (type == "message") { + var mapped = listen_map[listener]; + if (mapped) { + delete listen_map[listener]; + return _orig_removeEventListener.call(this, type, mapped, useCapture); + } + } else { + return _orig_removeEventListener.call(this, type, listener, useCapture); + } + } + + $wbwindow.removeEventListener = removeEventListener_rewritten; + } + + //============================================ + function init_messageevent_override($wbwindow) { + if (!$wbwindow.MessageEvent || $wbwindow.MessageEvent.prototype.__extended) { + return; + } + + function addMEOverride(attr) + { + var orig_getter = get_orig_getter($wbwindow.MessageEvent.prototype, attr); + + if (!orig_getter) { + return; + } + + function getter() { + if (this["_" + attr] != undefined) { + return this["_" + attr]; + } + return orig_getter.call(this); + } + + def_prop($wbwindow.MessageEvent.prototype, attr, undefined, getter); + } + + addMEOverride("target"); + addMEOverride("srcElement"); + addMEOverride("currentTarget"); + addMEOverride("eventPhase"); + addMEOverride("path"); + + $wbwindow.MessageEvent.prototype.__extended = true; + } + + //============================================ + function init_open_override() + { + var orig = $wbwindow.open; + + if ($wbwindow.Window.prototype.open) { + orig = $wbwindow.Window.prototype.open; + } + + var open_rewritten = function(strUrl, strWindowName, strWindowFeatures) { + strUrl = rewrite_url(strUrl, false, ""); + var res = orig.call(this, strUrl, strWindowName, strWindowFeatures); + init_new_window_wombat(res, strUrl); + return res; + } + + $wbwindow.open = open_rewritten; + + if ($wbwindow.Window.prototype.open) { + $wbwindow.Window.prototype.open = open_rewritten; + } + + for (var i = 0; i < $wbwindow.frames.length; i++) { + try { + $wbwindow.frames[i].open = open_rewritten; + } catch (e) { + console.log(e); + } + } + } + + //============================================ + function init_cookies_override($wbwindow) + { + var cookie_path_regex = /\bPath=\'?\"?([^;'"\s]+)/i; + var cookie_domain_regex = /\bDomain=([^;'"\s]+)/i; + var cookie_expires_regex = /\bExpires=([^;'"]+)/ig; + + var orig_get_cookie = get_orig_getter($wbwindow.document, "cookie"); + var orig_set_cookie = get_orig_setter($wbwindow.document, "cookie"); + + if (!orig_get_cookie) { + orig_get_cookie = get_orig_getter($wbwindow.Document.prototype, "cookie"); + } + if (!orig_set_cookie) { + orig_set_cookie = get_orig_setter($wbwindow.Document.prototype, "cookie"); + } + + function rewrite_cookie(cookie) { + var IP_RX = /^(\d)+\.(\d)+\.(\d)+\.(\d)+$/; + + cookie = cookie.replace(wb_abs_prefix, ''); + cookie = cookie.replace(wb_rel_prefix, ''); + + // rewrite domain + cookie = cookie.replace(cookie_domain_regex, function(m, m1) { + var message = {"domain": m1, + "cookie": cookie, + "wb_type": "cookie", + } + + // norify of cookie setting to allow server-side tracking + if ($wbwindow.__WB_top_frame) { + $wbwindow.__WB_top_frame.postMessage(message, wb_info.top_host); + } + + // if no subdomain, eg. "localhost", just remove domain altogether + if ($wbwindow.location.hostname.indexOf(".") >= 0 && !IP_RX.test($wbwindow.location.hostname)) { + return "Domain=." + $wbwindow.location.hostname; + } else { + return ""; + } + }); + + // rewrite path + cookie = cookie.replace(cookie_path_regex, function(m, m1) { + var rewritten = rewrite_url(m1); + + if (rewritten.indexOf(wb_curr_host) == 0) { + rewritten = rewritten.substring(wb_curr_host.length); + } + + return "Path=" + rewritten; + }); + + // rewrite secure, if needed + if ($wbwindow.location.protocol != "https:") { + cookie = cookie.replace("secure", ""); + } + + cookie = cookie.replace(",|", ","); + + return cookie; + } + + + var set_cookie = function(value) { + if (!value) { + return; + } + + var orig_value = value; + + value = value.replace(cookie_expires_regex, function(m, d1) { + var date = new Date(d1); + + if (isNaN(date.getTime())) { + return "Expires=Thu,| 01 Jan 1970 00:00:00 GMT"; + } + + date = new Date(date.getTime() + Date.__WB_timediff); + return "Expires=" + date.toUTCString().replace(",", ",|"); + }); + + var cookies = value.split(/,(?![|])/); + + for (var i = 0; i < cookies.length; i++) { + cookies[i] = rewrite_cookie(cookies[i]); + } + + value = cookies.join(",") + + return orig_set_cookie.call(this, value); + } + + def_prop($wbwindow.document, "cookie", set_cookie, orig_get_cookie); + } + + //============================================ + function init_write_override() + { + if (!$wbwindow.DOMParser) { + return; + } + + var check_wombat = function(win) { + if (win && !win._wb_wombat) { + win._WBWombat = wombat_internal(win); + win._wb_wombat = new win._WBWombat(wb_info); + } + } + + // Write + var orig_doc_write = $wbwindow.document.write; + + var new_write = function(string) { + new_buff = rewrite_html(string, true); + if (!new_buff) { + return; + } + var res = orig_doc_write.call(this, new_buff); + check_wombat(this.defaultView); + return res; + } + + $wbwindow.document.write = new_write; + $wbwindow.Document.prototype.write = new_write; + + // Writeln + var orig_doc_writeln = $wbwindow.document.writeln; + + var new_writeln = function(string) { + new_buff = rewrite_html(string, true); + if (!new_buff) { + return; + } + var res = orig_doc_writeln.call(this, new_buff); + check_wombat(this.defaultView); + return res; + } + + $wbwindow.document.writeln = new_writeln; + $wbwindow.Document.prototype.writeln = new_writeln; + + // Open + var orig_doc_open = $wbwindow.document.open; + + var new_open = function() { + var res = orig_doc_open.call(this); + check_wombat(this.defaultView); + return res; + } + + $wbwindow.document.open = new_open; + $wbwindow.Document.prototype.open = new_open; + } + + //============================================ + function init_eval_override() { + var orig_eval = $wbwindow.eval; + + $wbwindow.eval = function(string) { + if (string) { + string = string.toString().replace(/\blocation\b/g, "WB_wombat_$&"); + } + orig_eval.call(this, string); + } + } + + //============================================ + function init_iframe_wombat(iframe) { + var win; + + if (iframe._get_contentWindow) { + win = iframe._get_contentWindow.call(iframe); + } else { + win = iframe.contentWindow; + } + + try { + if (!win || win == $wbwindow || win._skip_wombat || win._wb_wombat) { + return; + } + } catch (e) { + return; + } + + //var src = iframe.src; + var src = wb_getAttribute.call(iframe, "src"); + + init_new_window_wombat(win, src); + } + + function init_new_window_wombat(win, src) { + if (!src || src == "" || src == "about:blank" || src.indexOf("javascript:") >= 0) { + win._WBWombat = wombat_internal(win); + win._wb_wombat = new win._WBWombat(wb_info); + } else { + // These should get overriden when content is loaded, but just in case... + //win._WB_wombat_location = win.location; + //win.document.WB_wombat_location = win.document.location; + //win._WB_wombat_top = $wbwindow.WB_wombat_top; + + init_proto_pm_origin(win); + //init_postmessage_override(win); + } + } + + + //============================================ + function init_doc_overrides($wbwindow) { + if (!Object.defineProperty) { + return; + } + + if ($wbwindow.document._wb_override) { + return; + } + + var orig_referrer = extract_orig($wbwindow.document.referrer); + + var domain_info; + + if ($wbwindow.wbinfo) { + domain_info = $wbwindow.wbinfo; + } else { + domain_info = wbinfo; + } + + domain_info.domain = domain_info.wombat_host; + + var domain_setter = function(val) { + if (ends_with(domain_info.wombat_host, val)) { + domain_info.domain = val; + } + } + + var domain_getter = function() { + return domain_info.domain; + } + + // changing domain disallowed, but set as no-op to avoid errors + def_prop($wbwindow.document, "domain", domain_setter, domain_getter); + + def_prop($wbwindow.document, "referrer", undefined, function() { return orig_referrer; }); + + + // Cookies + init_cookies_override($wbwindow); + + // Init mutation observer (for style only) + //init_mutation_obs($wbwindow); + + // override href and src attrs + init_attr_overrides($wbwindow); + + + init_form_overrides($wbwindow); + + + // Attr observers + //if (!wb_opts.skip_attr_observers) { + // init_href_src_obs($wbwindow); + //} + + $wbwindow.document._wb_override = true; + } + + + //============================================ + // Necessary since HTMLFormElement.prototype.action is not consistently + // overridable + function init_form_overrides($wbwindow) { + var do_init_forms = function() { + for (var i = 0; i < $wbwindow.document.forms.length; i++) { + var new_action = rewrite_url($wbwindow.document.forms[i].action); + if (new_action != $wbwindow.document.forms[i].action) { + $wbwindow.document.forms[i].action = new_action; + } + override_attr($wbwindow.document.forms[i], "action", "", true); + } + } + + if (document.readyState == "loading") { + document.addEventListener("DOMContentLoaded", do_init_forms); + } else { + do_init_forms(); + } + } + + + //============================================ + function init_registerPH_override() + { + if (!$wbwindow.navigator.registerProtocolHandler) { + return; + } + + var orig_registerPH = $wbwindow.navigator.registerProtocolHandler; + + $wbwindow.navigator.registerProtocolHandler = function(protocol, uri, title) { + return orig_registerPH.call(this, protocol, rewrite_url(uri), title); + } + } + + //============================================ + function init_beacon_override() + { + if (!$wbwindow.navigator.sendBeacon) { + return; + } + + var orig_sendBeacon = $wbwindow.navigator.sendBeacon; + + $wbwindow.navigator.sendBeacon = function(url, data) { + return orig_sendBeacon.call(this, rewrite_url(url), data); + } + } + + //============================================ + function init_disable_notifications() { + if (window.Notification) { + window.Notification.requestPermission = function(callback) { + if (callback) { + callback("denied"); + } + + return Promise.resolve("denied"); + } + } + + if (window.geolocation) { + var disabled = function(success, error, options) { + if (error) { + error({"code": 2, "message": "not available"}); + } + } + + window.geolocation.getCurrentPosition = disabled; + window.geolocation.watchPosition = disabled; + } + } + + //============================================ + function get_final_url(prefix, mod, url) { + if (mod == undefined) { + mod = wb_info.mod; + } + + // if live, don't add the timestamp + if (!wb_info.is_live) { + prefix += wb_info.wombat_ts; + } + + prefix += mod; + + if (prefix[prefix.length - 1] != "/") { + prefix += "/"; + } + + return prefix + url + } + + //============================================ + function wombat_init(wbinfo) { + wb_info = wbinfo; + wb_opts = wbinfo.wombat_opts; + wb_replay_prefix = wbinfo.prefix; + wb_is_proxy = (!wb_replay_prefix); + + wb_info.top_host = wb_info.top_host || "*"; + + init_top_frame($wbwindow); + + init_wombat_loc($wbwindow); + + wbinfo.wombat_opts = wbinfo.wombat_opts || {}; + + wb_orig_scheme = wbinfo.wombat_scheme + '://'; + + // archival mode: init url-rewriting intercepts + if (!wb_is_proxy) { + init_wombat_top($wbwindow); + + wb_curr_host = $wbwindow.location.protocol + "//" + $wbwindow.location.host; + + if (wb_replay_prefix && wb_replay_prefix.indexOf($wbwindow.__WB_replay_top.location.origin) == 0) { + wb_rel_prefix = wb_replay_prefix.substring($wbwindow.__WB_replay_top.location.origin.length + 1); + } else { + wb_rel_prefix = wb_replay_prefix; + } + wb_rel_prefix_check = wb_rel_prefix; + + wb_abs_prefix = wb_replay_prefix; + //wb_replay_date_prefix = wb_replay_prefix + ts_mod; + //wb_coll_prefix += ts_mod; + + if (!wbinfo.is_live && wbinfo.wombat_ts.length > 0) { + wb_capture_date_part = "/" + wbinfo.wombat_ts + "/"; + } else { + wb_capture_date_part = ""; + } + + wb_orig_origin = wb_orig_scheme + wbinfo.wombat_host; + + init_bad_prefixes(wb_replay_prefix); + + //if ($wbwindow.opener) { + // $wbwindow.opener.WB_wombat_location = copy_location_obj($wbwindow.opener.location); + //} + + // Domain + //$wbwindow.document.WB_wombat_domain = wbinfo.wombat_host; + //$wbwindow.document.WB_wombat_referrer = extract_orig($wbwindow.document.referrer); + + init_doc_overrides($wbwindow, wb_opts); + + // History + override_history_func("pushState"); + override_history_func("replaceState"); + + override_history_nav("go"); + override_history_nav("back"); + override_history_nav("forward"); + + // postMessage + // OPT skip + if (!wb_opts.skip_postmessage) { + init_postmessage_override($wbwindow); + init_messageevent_override($wbwindow); + } + + init_hash_change(); + + // write + init_write_override(); + + // eval + //init_eval_override(); + + // Ajax + init_ajax_rewrite(); + + // Fetch + init_fetch_rewrite(); + + // Worker override (experimental) + init_worker_override(); + + // innerHTML can be overriden on prototype! + override_html_assign($wbwindow.HTMLElement, "innerHTML"); + override_html_assign($wbwindow.HTMLIFrameElement, "srcdoc"); + override_html_assign($wbwindow.HTMLStyleElement, "textContent"); + + // Document.URL override + override_prop_extract($wbwindow.Document.prototype, "URL"); + + // init insertAdjacentHTML() override + init_insertAdjacentHTML_override(); + + // iframe.contentWindow and iframe.contentDocument overrides to + // ensure wombat is inited on the iframe $wbwindow! + override_iframe_content_access("contentWindow"); + override_iframe_content_access("contentDocument"); + + // base override + init_base_override(); + + // setAttribute + if (!wb_opts.skip_setAttribute) { + init_setAttribute_override(); + init_getAttribute_override(); + } + + // createElement attr override + if (!wb_opts.skip_createElement) { + init_createElement_override(); + } + + // ensure namespace urls are NOT rewritten + init_createElementNS_fix(); + + // Image + //init_image_override(); + + // DOM + // OPT skip + if (!wb_opts.skip_dom) { + init_dom_override(); + } + + // registerProtocolHandler override + init_registerPH_override(); + + //sendBeacon override + init_beacon_override(); + } + + // other overrides + // proxy mode: only using these overrides + + // Random + init_seeded_random(wbinfo.wombat_sec); + + // Crypto Random + init_crypto_random(); + + // Date + init_date_override(wbinfo.wombat_sec); + + // open + init_open_override(); + + // disable notifications + init_disable_notifications(); + + // expose functions + this.extract_orig = extract_orig; + this.rewrite_url = rewrite_url; + this.watch_elem = watch_elem; + this.init_new_window_wombat = init_new_window_wombat; + } + + function init_top_frame($wbwindow) { + // proxy mode + if (wb_is_proxy) { + $wbwindow.__WB_replay_top = $wbwindow.top; + $wbwindow.__WB_top_frame = undefined; + return; + } + + function next_parent(win) { + try { + if (!win) { + return false; + } + + // if no wbinfo, see if _wb_wombat was set (eg. if about:blank page) + if (!win.wbinfo) { + return (win._wb_wombat != undefined); + } else { + // otherwise, ensure that it is not a top container frame + return !win.wbinfo.is_frame; + } + + } catch (e) { + return false; + } + } + + var replay_top = $wbwindow; + + while ((replay_top.parent != replay_top) && next_parent(replay_top.parent)) { + replay_top = replay_top.parent; + } + + $wbwindow.__WB_replay_top = replay_top; + + var real_parent = replay_top.__WB_orig_parent || replay_top.parent; + + // Check to ensure top frame is different window and directly accessible (later refactor to support postMessage) + //try { + // if ((real_parent == $wbwindow) || !real_parent.wbinfo || !real_parent.wbinfo.is_frame) { + // real_parent = undefined; + // } + //} catch (e) { + // real_parent = undefined; + //} + if (real_parent == $wbwindow || !wb_info.is_framed) { + real_parent = undefined; + } + + if (real_parent) { + $wbwindow.__WB_top_frame = real_parent; + + init_frameElement_override($wbwindow); + + } else { + $wbwindow.__WB_top_frame = undefined; + } + + // Fix .parent only if not embeddable, otherwise leave for accessing embedding window + if (!wb_opts.embedded && (replay_top == $wbwindow)) { + $wbwindow.__WB_orig_parent = $wbwindow.parent; + $wbwindow.parent = replay_top; + } + } + + function init_frameElement_override($wbwindow) { + if (!Object.defineProperty) { + return; + } + + var getter = function() { + var res = this.frameElement; + + if (this.__WB_replay_top == this) { + return null; + } + + return res; + } + + def_prop($wbwindow.Object.prototype, "WB_wombat_frameElement", undefined, getter); + + // Also try disabling frameElement directly, though may no longer be supported in all browsers + if ($wbwindow.__WB_replay_top == $wbwindow) { + try { + Object.defineProperty($wbwindow, "frameElement", {value: undefined, configurable: false}); + } catch (e) {} + } + } + + function init_wombat_top($wbwindow) { + if (!Object.defineProperty) { + return; + } + + // from http://stackoverflow.com/a/6229603 + function isWindow(obj) { + if (typeof(window.constructor) === 'undefined') { + return obj instanceof window.constructor; + } else { + return obj.window === obj; + } + } + + var getter = function() { + if (this.__WB_replay_top) { + return this.__WB_replay_top; + } else if (isWindow(this)) { + return this; + } else { + return this.top; + } + } + + var setter = function(val) { + this.top = val; + } + + def_prop($wbwindow.Object.prototype, "WB_wombat_top", setter, getter); + } + + + + + // Utility functions used by rewriting rules + function watch_elem(elem, func) + { + if (!$wbwindow.MutationObserver) { + return false; + } + + var m = new MutationObserver(function(records, observer) { + for (var i = 0; i < records.length; i++) { + var r = records[i]; + if (r.type == "childList") { + for (var j = 0; j < r.addedNodes.length; j++) { + func(r.addedNodes[j]); + } + } + } + }); + + m.observe(elem, { + childList: true, + subtree: true, + }); + }; + + return wombat_init; +}; + +return wombat_internal(window); +})(); + +window._WBWombat = _WBWombat; diff --git a/archives/templates/banner.html b/archives/templates/banner.html new file mode 100644 index 00000000..272b60a6 --- /dev/null +++ b/archives/templates/banner.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/archives/templates/collinfo.json b/archives/templates/collinfo.json new file mode 100644 index 00000000..35cf6986 --- /dev/null +++ b/archives/templates/collinfo.json @@ -0,0 +1,15 @@ +[ +{% for route in routes %} +{% if route | is_wb_handler %} +{{ ',' if notfirst else '' }} +{ + "id": "{{ route.path }}", + "name": "{{ route.user_metadata.title if route.user_metadata.title else route.path }}", + "timegate": "{{ host }}/{{route.path}}/", + "timemap": "{{ host }}/{{route.path}}/timemap/*/" + +} +{% set notfirst = true %} +{% endif %} +{% endfor %} +] diff --git a/archives/templates/error.html b/archives/templates/error.html new file mode 100644 index 00000000..e65f69a2 --- /dev/null +++ b/archives/templates/error.html @@ -0,0 +1,45 @@ + + + + + + + + + +
+
+

+ Error +

+ {{ err_msg }} + + {% if err_details %} +

Error Details:

+
+        {{ err_details }}
+    
+ {% endif %} +
+
+ + + + diff --git a/archives/templates/frame_insert.html b/archives/templates/frame_insert.html new file mode 100644 index 00000000..e400d1dd --- /dev/null +++ b/archives/templates/frame_insert.html @@ -0,0 +1,37 @@ + + + + + + + + + +{% include banner_html ignore missing %} + + + + +
+ +
+ + diff --git a/archives/templates/head_insert.html b/archives/templates/head_insert.html new file mode 100644 index 00000000..dfb9dd1a --- /dev/null +++ b/archives/templates/head_insert.html @@ -0,0 +1,55 @@ + + + +{% if rule.js_rewrite_location != 'urls' and include_wombat %} + + +{% endif %} + + + + +{% include banner_html ignore missing %} + + + + +{# + +{% if wbrequest.options.is_framed %} + +{% endif %} +#} + + + diff --git a/archives/templates/index.html b/archives/templates/index.html new file mode 100644 index 00000000..ad53e57b --- /dev/null +++ b/archives/templates/index.html @@ -0,0 +1,53 @@ + + + + + + + + + +
+

Your archive contains the following collections

+
+ {% for route in routes %} + {% if route | is_wb_handler %} + + {{ route.path }} + {% if route.user_metadata.title is defined %} + ({{ route.user_metadata.title }}) + {% endif %} + + {% endif %} + {% endfor %} +
+
+ + + + diff --git a/archives/templates/not_found.html b/archives/templates/not_found.html new file mode 100644 index 00000000..6f8df315 --- /dev/null +++ b/archives/templates/not_found.html @@ -0,0 +1,40 @@ + + + + + + + + +
+

Url Not Found

+ +

+ The url {{ url }} could not be found in this collection. +

+ + {% if wbrequest.env.pywb_proxy_magic and url %} +

+ Try Different Collection +

+ {% endif %} +
+ + + + + + diff --git a/archives/templates/proxy_cert_download.html b/archives/templates/proxy_cert_download.html new file mode 100644 index 00000000..b3f51a14 --- /dev/null +++ b/archives/templates/proxy_cert_download.html @@ -0,0 +1,13 @@ +

HTTPS Certificate For PyWb Web Archive Replay

+{% if not available %} +

Sorry, HTTPS support is not configured for this proxy. However, the proxy should work in HTTP mode.

+ +{% else %} +

Download for all platforms except Windows (or Firefox on Windows):

+

Download Certificate (All except Windows)

+ +

(If you see the Already Installed message, then no further action is necessary and you may start browsing!

+ +

Download for Windows platforms (except if using Firefox. For Firefox, use the above download, even on Windows):

+

Download Certificate (Window Only)

+{% endif %} diff --git a/archives/templates/proxy_select.html b/archives/templates/proxy_select.html new file mode 100644 index 00000000..b06f68a2 --- /dev/null +++ b/archives/templates/proxy_select.html @@ -0,0 +1,25 @@ + + +

Pywb Proxy Collection Selector

+{% if coll %} +

+Current collection is: {{ coll }} +

+{% else %} +

You have attempted to load the url {{ url }}, but there are multiple collections available.

+{% endif %} + +

Please select which collection you would like to use (You will be redirected back to {{ url }}): +

+ +
    +{% for route in routes %} +{% if route.path and route | is_wb_handler %} +
  • {{ route.path }}
  • +{% endif %} +{% endfor %} +
+ +

(Once selected, you will not be prompted again, however you can return to this page to switch collections.)

+ + diff --git a/archives/templates/query.html b/archives/templates/query.html new file mode 100644 index 00000000..ec6fd289 --- /dev/null +++ b/archives/templates/query.html @@ -0,0 +1,94 @@ + + + + + + + + + +
+ {% if cdx_lines | length > 0 %} +

Query Results

+ {{ cdx_lines | length }} captures of {{ url }} + + + + + + + +
CaptureStatusOriginal UrlArchive File
+
+ + {% for cdx in cdx_lines %} + + + + + + + {% endfor %} +
+ + {{ cdx.status }}{{ cdx.url }}{{ cdx.filename }}
+
+

+ * Unique captures are bold. Other captures are duplicates of a previous capture. +

+ {% else %} +

+ No captures found for +

+
{{ url }}
+ {% endif %} +
+ + + + diff --git a/archives/templates/search.html b/archives/templates/search.html new file mode 100644 index 00000000..9b6c9a7a --- /dev/null +++ b/archives/templates/search.html @@ -0,0 +1,68 @@ + + + + + + + + + + +
+
+

Search Page For Collection {{ wbrequest.user_metadata.title if wbrequest.user_metadata.title else + wbrequest.coll }}

+ + + {% for key, val in wbrequest.user_metadata.items() %} + + + + + {% endfor %} +
{{ key }}:{{ val }}
+
+
+
+
+ + +
+ +
+
+
+ + + + + diff --git a/bootstrap.sh b/bootstrap.sh index bd5b0b61..13f726f6 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -11,11 +11,6 @@ npm run-script download-externals if [ ! -z "$1" -a "$1" = "build" ]; then rm -rf ${release} - if [ ! -z "$2" -a "$2" = "wextra" ]; then - echo "building for current os with extra info for osx" - npm run-script package-wextra - else - echo "building for current os" - npm run-script package - fi + echo "building for current os" + npm run-script package fi diff --git a/build-binary-old.js b/build-binary-old.js deleted file mode 100755 index b7387632..00000000 --- a/build-binary-old.js +++ /dev/null @@ -1,214 +0,0 @@ -import fs from 'fs-extra' -import Promise from 'bluebird' -Promise.promisifyAll(fs) -import path from 'path' -import os from 'os' -import webpack from 'webpack' -import electronCfg from './webpack.config.electron.js' -import cfg from './webpack.config.production.js' -import packager from 'electron-packager' -import del from 'del' -import pkg from './package.json' -import moveTo from './tools/moveJDKMemgator' - -fs.removeSync(path.join(path.resolve('.'), 'dist')) - -const exec = require('child_process').exec -const argv = require('minimist')(process.argv.slice(2)) - -const cwd = path.resolve('.') -const currentOSArch = `${os.platform()}${os.arch()}` -const basePath = path.join(path.resolve('.'), 'bundledApps') - -const deps = Object.keys(pkg.dependencies) -const devDeps = Object.keys(pkg.devDependencies) - -const appName = 'wail' -const shouldUseAsar = argv.asar || argv.a || false -const shouldBuildAll = argv.all || false -const shouldBuildWindows = argv.win || false -const shouldBuildOSX = argv.osx || false -const shouldBuildLinux = argv.linux || false - -console.log(argv) - -const DEFAULT_OPTS = { - dir: '.', - name: appName, - asar: shouldUseAsar, - ignore: [ - '^/.idea($|/)', - '^/archives/', - '^/archiveIndexes/', - '^/bundledApps/heritrix-3.2.0/jobs/', - '^/bundledApps/memgator($|/)', - '^/bundledApps/openjdk($|/)', - '^/electron-main-dev.js', - '^/test($|/)', - '^/tools($|/)', - '^/newbinaries($|/)', - '^/memgators($|/)', - '^/release($|/)', - '^/waillogs($|/)', - '^/zips($|/)', - ].concat(devDeps.map(name => `/node_modules/${name}($|/)`)) - .concat( - deps.filter(name => !electronCfg.externals.includes(name)) - .map(name => `/node_modules/${name}($|/)`) - ) -} - -const icon = argv.icon || argv.i || 'app/app' - -if (icon) { - DEFAULT_OPTS.icon = icon -} - -const version = argv.version || argv.v - -if (version) { - DEFAULT_OPTS.version = version - startPack() -} else { - // use the same version as the currently-installed electron-prebuilt - exec('npm list electron-prebuilt --dev', (err, stdout) => { - if (err) { - DEFAULT_OPTS.version = '1.2.5' - } else { - DEFAULT_OPTS.version = stdout.split('electron-prebuilt@')[ 1 ].replace(/\s/g, '') - } - - startPack() - }) -} - -function build (cfg) { - return new Promise((resolve, reject) => { - webpack(cfg, (err, stats) => { - if (err) return reject(err) - resolve(stats) - }) - }) -} - -function startPack () { - console.log('building webpack.config.electron') - build(electronCfg) - .then((stats) => { - console.log('building webpack.config.production') - build(cfg) - }) - .then((stats) => { - console.log('removing previous builds') - del.sync('release') - }) - .then(paths => { - if (shouldBuildAll) { - // build for all platforms - console.log('building for all platforms') - let archs = [ 'ia32', 'x64' ] - let platforms = [ 'linux', 'win32', 'darwin' ] - - platforms.forEach(plat => { - archs.forEach(arch => { - console.log(`build the binary for ${plat}-${arch}`) - pack(plat, arch, log(plat, arch)) - }) - }) - } else { - if (shouldBuildLinux) { - console.log('building for linux') - let archs = [ 'ia32', 'x64' ] - let platforms = [ 'linux', ] - - platforms.forEach(plat => { - archs.forEach(arch => { - console.log(`build the binary for ${plat}-${arch}`) - pack(plat, arch, log(plat, arch)) - }) - }) - } else if (shouldBuildOSX) { - console.log('building for OSX') - let archs = [ 'x64' ] - let platforms = [ 'darwin', ] - - platforms.forEach(plat => { - archs.forEach(arch => { - console.log(`build the binary for ${plat}-${arch}`) - pack(plat, arch, log(plat, arch)) - }) - }) - } else if (shouldBuildWindows) { - console.log('building for Windows') - let archs = [ 'ia32', 'x64' ] - let platforms = [ 'win32' ] - - platforms.forEach(plat => { - archs.forEach(arch => { - console.log(`build the binary for ${plat}-${arch}`) - pack(plat, arch, log(plat, arch)) - }) - }) - } else { - console.log(`build the binary for ${os.platform()}-${os.arch()}`) - pack(os.platform(), os.arch(), log(os.platform(), os.arch())) - } - } - }) - .catch(err => { - console.error(err) - }) -} - -function pack (plat, arch, cb) { - // there is no darwin ia32 electron - if (plat === 'darwin' && arch === 'ia32') return - - const iconObj = { - icon: DEFAULT_OPTS.icon + (() => { - let extension = '.png' - if (plat === 'darwin') { - extension = '.icns' - } else if (plat === 'win32') { - extension = '.ico' - } - return extension - })() - } - let opts - if (plat === 'darwin') { - opts = Object.assign({}, DEFAULT_OPTS, iconObj, { - platform: plat, - arch, - 'extend-info': path.normalize(path.join(cwd, 'buildResources/osx/Extended-Info.plist')), - prune: true, - 'app-version': pkg.version || DEFAULT_OPTS.version, - out: `release/${plat}-${arch}` - }) - } else { - opts = Object.assign({}, DEFAULT_OPTS, iconObj, { - platform: plat, - arch, - prune: true, - 'app-version': pkg.version || DEFAULT_OPTS.version, - out: `release/${plat}-${arch}` - }) - } - - packager(opts, cb) -} - -function log (plat, arch) { - return (err, filepath) => { - if (err) return console.error(err) - let moveTop - if (plat === 'darwin') { - moveTop = `release/${plat}-${arch}/wail-${plat}-${arch}/wail.app/Contents/Resources/app/bundledApps` - } else { - moveTop = `release/${plat}-${arch}/wail-${plat}-${arch}/resources/app/bundledApps` - } - let realsePath = path.join(path.resolve('.'), moveTop) - moveTo({ arch: `${plat}${arch}`, to: realsePath }) - console.log(`${plat}-${arch} finished!`) - } -} diff --git a/build-binary.js b/build-binary.js index 000d36b7..6eaeb1de 100644 --- a/build-binary.js +++ b/build-binary.js @@ -1,27 +1,28 @@ -import fs from 'fs-extra' -import Promise from 'bluebird' -import util from 'util' -import path from 'path' -import os from 'os' -import webpack from 'webpack' -import electronCfg from './webpack.config.electron.js' -import cfg from './webpack.config.production.js' -import packager from 'electron-packager' -import pkg from './package.json' -import moveTo from './tools/moveJDKMemgator' -Promise.promisifyAll(fs) +const fs = require('fs-extra') +const path = require('path') +const os = require('os') +const Promise = require('bluebird') +const webpack = require('webpack') +const zip = require('cross-zip') +const cp = require('child_process') +const electronCfg = require('./webpackConfigs/ui/webpack.config.electron.js') +const cfgUI = require('./webpackConfigs/ui/webpack.config.production.js') +const cfgCore = require('./webpackConfigs/core/webpack.config.production.js') +const packager = require('electron-packager') +const pkg = require('./package.json') +const moveThemP = require('./tools/noImportMoveJdkMemgator').moveThemP const argv = require('minimist')(process.argv.slice(2)) -const cwd = path.resolve('.') - +const cwd = process.cwd() const iconPath = path.normalize(path.join(cwd, 'build/icons/whale.ico')) +// fs.emptyDirSync(path.join(cwd, 'dist')) const darwinBuild = { icon: 'whale.icns', iconPath: path.normalize(path.join(cwd, 'buildResources/osx/whale.icns')), archiveIcon: 'archive.icns', archiveIconPath: path.normalize(path.join(cwd, 'buildResources/osx/archive.icns')), - extendPlist: path.normalize(path.join(cwd, 'buildResources/osx/Extended-Info.plist')), + extendPlist: path.normalize(path.join(cwd, 'buildResources/osx/Extended-Info.plist')) } const deps = Object.keys(pkg.dependencies) @@ -31,28 +32,41 @@ const shouldBuildAll = argv.all || false const shouldBuildWindows = argv.win || false const shouldBuildOSX = argv.osx || false const shouldBuildLinux = argv.linux || false -const shouldBuildWithExtra = argv.we || false const shouldBuildCurrent = !shouldBuildAll && !shouldBuildLinux && !shouldBuildOSX && !shouldBuildWindows const ignore = [ - '^/archiveIndexes/', - '^/archives/', + '^/archiveIndexes($|/)', + '^/archives2($|/)', '^/.babelrc($|/)', + '^/node_modules/.cache($|/)', + '^/.babelrc2($|/)', + '^/.babelrc.bk($|/)', + '^/.gitattributes$', + '^/depDifWinRest.txt$', '^/build($|/)', '^/build-binary.js$', '^/build-binary-old.js$', - '^/bundledApps/heritrix-3.2.0($|/)', - '^/bundledApps/heritrix-3.3.0/heritrix_out.log$', - '^/bundledApps/heritrix-3.3.0/adhoc.keystore$', - '^/bundledApps/heritrix-3.3.0/heritrix.pid$', - '^/bundledApps/heritrix-3.3.0/jobs/', + '^/bundledApps/heritrix/heritrix_out.log$', + '^/bundledApps/heritrix/adhoc.keystore$', + '^/bundledApps/heritrix/heritrix.pid$', + '^/bundledApps/heritrix/jobs/', '^/bundledApps/memgator($|/)', + '^/bundledApps/old($|/)', + '^/bundledApps/bk($|/)', '^/bundledApps/openjdk($|/)', '^/bundledApps/wailpy($|/)', + '^/bundledApps/tomcat($|/)', + '^/bundledApps/pywb_($|/)', '^/.codeclimate.yml($|/)', + '^/crawler-beans_bk.cxml$', + '^/dev_coreData', + '^/coreData($|/)', '^/doElectron.sh$', + '^/wail-core_old($|/)', '^/bootstrap.sh$', '^/npm-debug.log.*$', + '^/tests($|/)', + '^/chromDLogs($|/)', '^/electron-main-dev.js$', '^/.gitignore($|/)', '^/.idea($|/)', @@ -66,16 +80,27 @@ const ignore = [ '^/tools($|/)', '^/waillogs($|/)', '^/webpack.config.*$', + '^/webpackConfigs($|/)$', + '^/buildResources($|/)$', + '^/sharedUtil($|/)$', + '^/wail_utils($|/)$', + '^/wail-core_old($|/)$', + '^/wail-config($|/)$', + '^/bundledApps/pywb_old($|/)$', + '^/support($|/)$', + '^/temp($|/)$', + '^/yarn.lock$', '^/zips($|/)' ].concat(devDeps.map(name => `/node_modules/${name}($|/)`)) .concat( deps.filter(name => !electronCfg.externals.includes(name)) + .filter(name => !cfgUI.externals.includes(name)) .map(name => `/node_modules/${name}($|/)`) ) const DEFAULT_OPTS = { - 'app-copyright': 'jberlin', - 'app-version': pkg.version, + appCopyright: 'Copyright © 2016-2017 Web Science And Digital Libraries Research Group ODU CS', + appVersion: pkg.version, asar: false, prune: true, dir: cwd, @@ -83,31 +108,29 @@ const DEFAULT_OPTS = { ignore, overwrite: true, out: path.normalize(path.join(cwd, 'release')), - version: require('electron-prebuilt/package.json').version + electronVersion: '1.8.1' } // OSX const darwinSpecificOpts = { - 'app-bundle-id': 'wsdl.cs.odu.edu.wail', + 'appBundleId': 'wsdl.cs.odu.edu.wail', // The application category type, as shown in the Finder via 'View' -> 'Arrange by // Application Category' when viewing the Applications directory (OS X only). - 'app-category-type': 'public.app-category.utilities', + 'appCategoryType': 'public.app-category.utilities', // // The bundle identifier to use in the application helper's plist (OS X only). - 'helper-bundle-id': 'wsdl.wail.cs.odu.edu-helper', - - 'extend-info': darwinBuild.extendPlist, + 'helperBundleId': 'wsdl.wail.cs.odu.edu-helper', - 'extra-resource': [ darwinBuild.archiveIconPath, darwinBuild.iconPath ], + 'extraResource': [darwinBuild.archiveIconPath, darwinBuild.iconPath], // Application icon. icon: darwinBuild.iconPath } const windowsSpecificOpts = { - 'version-string': { + win32metadata: { // Company that produced the file. CompanyName: 'wsdl.cs.odu.edu', @@ -134,7 +157,19 @@ const windowsSpecificOpts = { } const linuxSpecificOpts = { - icon: path.normalize(path.join(cwd, 'buildResources/linux/icon.png')), + icon: path.normalize(path.join(cwd, 'buildResources/linux/icon.png')) +} + +function emptyRelease () { + return new Promise((resolve, reject) => { + fs.emptyDir(path.join(cwd, 'release'), error => { + if (error) { + reject(error) + } else { + resolve() + } + }) + }) } function build (cfg) { @@ -146,269 +181,180 @@ function build (cfg) { }) } -function pack (plat, arch, cb) { - // there is no darwin ia32 electron - if (plat === 'darwin' && arch === 'ia32') return - - let opts - if (plat === 'darwin') { - opts = Object.assign({}, DEFAULT_OPTS, darwinSpecificOpts, { - platform: plat, - arch - }) - } else if (plat === 'win32') { - opts = Object.assign({}, DEFAULT_OPTS, windowsSpecificOpts, { - platform: plat, - arch - }) - } else { - /* linux */ - opts = Object.assign({}, DEFAULT_OPTS, linuxSpecificOpts, { - platform: plat, - arch +function zipUp (inPath, outPath) { + return new Promise((resolve, reject) => { + zip.zip(inPath, outPath, (error) => { + if (error) { + reject(error) + } else { + resolve() + } }) - } - - packager(opts, cb) + }) } -function createDMG (appPath, cb) { - let _createDMG = require('electron-installer-dmg') - let out = path.normalize(path.join(cwd, 'release/wail-darwin-dmg')) - fs.emptyDirSync(out) - let dmgOpts = { - appPath, - debug: true, - name: DEFAULT_OPTS.name, - icon: darwinSpecificOpts.icon, - overwrite: true, - out - } - - _createDMG(dmgOpts, error => { - if (error) { - console.error('There was an error in creating the dmg file', error) - } else { - if (cb) { - cb() +function packWindows (platform, arch) { + return new Promise((resolve, reject) => { + let opts = Object.assign({}, DEFAULT_OPTS, windowsSpecificOpts, {platform, arch}) + packager(opts, (err) => { + if (err) { + reject(err) + } else { + resolve() } - } + }) }) } -function createWindowsInstallers (plat, arch, cb) { - let winInstaller = require('electron-winstaller') - let outputDirectory = path.normalize(path.join(cwd, `release/wail-${plat}-${arch}-installer`)) - fs.emptyDirSync(outputDirectory) - let winInstallerOpts = { - appDirectory: path.normalize(path.join(cwd, `release/wail-${plat}-${arch}`)), - authors: pkg.contributors, - description: pkg.description, - exe: `${DEFAULT_OPTS.name}.exe`, - iconUrl: iconPath, - loadingGif: path.normalize(path.join(cwd, 'buildResources/winLinux/mLogo_animated.gif')), - name: DEFAULT_OPTS.name, - noMsi: true, - outputDirectory, - productName: DEFAULT_OPTS.name, - setupExe: `${DEFAULT_OPTS.name}Setup.exe`, - setupIcon: iconPath, - title: DEFAULT_OPTS.name, - usePackageJson: false, - version: pkg.version - } - - console.log(`Creating windows installer for ${arch}. This could take some time`) - winInstaller.createWindowsInstaller(winInstallerOpts) - .then(() => cb()) - .catch(error => console.error(`There was an error in creating the windows installer for ${arch}`, error)) +function packDarwin (platform, arch) { + return new Promise((resolve, reject) => { + let opts = Object.assign({}, DEFAULT_OPTS, darwinSpecificOpts, {platform, arch}) + packager(opts, (err) => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) } -function createDeb_redHat (arc, cb) { - let deb = require('electron-installer-debian') - let deb2 = require('nobin-debian-installer') - let redHat = require('electron-installer-redhat') - let arch = arc === 'x64' ? 'amd64' : 'i386' - let debOptions = { - name: DEFAULT_OPTS.name, - productName: DEFAULT_OPTS.name, - genericName: DEFAULT_OPTS.name, - maintainer: 'John Berlin(jberlin@cs.odu.edu)', - arch, - productDescription: pkg.description, - src: `release/wail-linux-${arc}`, - dest: 'release/installers/', - version: pkg.version, - revision: pkg.revision, - icon: { - '32x32': path.normalize(path.join(cwd, 'build/icons/whale_32.png')), - '64x64': path.normalize(path.join(cwd, 'build/icons/whale_64.png')), - '128x128': path.normalize(path.join(cwd, 'build/icons/whale_128.png')), - '256x256': path.normalize(path.join(cwd, 'build/icons/whale_256.png')) - }, - section: 'utils', - depends: [ - 'gconf2', - 'libxss1', - 'gconf-service', - 'gvfs-bin', - 'libc6', - 'libcap2', - 'libgtk2.0-0', - 'libudev0 | libudev1', - 'libgcrypt11 | libgcrypt20', - 'libnotify4', - 'libnss3', - 'libxtst6', - 'python', - 'xdg-utils' - ], - recommends: [ - 'lsb-release' - ], - suggests: [ - 'gir1.2-gnomekeyring-1.0', - 'libgnome-keyring0' - ], - lintianOverrides: [ - 'changelog-file-missing-in-native-package' - ] - } - - let redOpts = { - name: DEFAULT_OPTS.name, - productName: DEFAULT_OPTS.name, - genericName: DEFAULT_OPTS.name, - maintainer: 'John Berlin(jberlin@cs.odu.edu)', - arch, - productDescription: pkg.description, - src: `release/wail-linux-${arc}`, - dest: 'release/installers/', - version: pkg.version, - revision: pkg.revision, - icon: { - '32x32': path.normalize(path.join(cwd, 'build/icons/whale_32.png')), - '64x64': path.normalize(path.join(cwd, 'build/icons/whale_64.png')), - '128x128': path.normalize(path.join(cwd, 'build/icons/whale_128.png')), - '256x256': path.normalize(path.join(cwd, 'build/icons/whale_256.png')) - }, - description: pkg.description, - license: pkg.license, - - group: undefined, - requires: [ - 'lsb' - ], - bin: pkg.name, - categories: [ - 'GNOME', - 'GTK', - 'Utility' - ] - } - - deb(debOptions, err => { - if (err) { - console.log(`There was an error in creating debian package for ${arc}`) - console.log(`Attempting to create red-hat package for ${arc}`) - console.error(err) - } else { - console.log(`Created debian package for ${arc}`) - console.log(`Creating red-hat package for ${arc}`) +function makeDMG (appPath) { + return new Promise((resolve, reject) => { + let _createDMG = require('electron-installer-dmg') + let out = path.join(cwd, 'release', 'wail-darwin-dmg') + fs.emptyDirSync(out) + let dmgOpts = { + appPath, + debug: true, + name: DEFAULT_OPTS.name, + icon: darwinSpecificOpts.icon, + overwrite: true, + out } - redHat(debOptions, rhErr => { - if (err) { - console.log(`There was an error in creating redHat package for ${arc}`) - console.error(rhErr) - cb() + _createDMG(dmgOpts, error => { + if (error) { + reject(error) } else { - console.log(`Created redHat package for ${arc}`) + resolve() } }) }) } -function log (plat, arch) { - return (err, filepath) => { - if (err) return console.error(err) - let moveToPath - let cb - if (plat === 'darwin') { - let appPath = `release/wail-${plat}-${arch}/wail.app` - moveToPath = `${appPath}/Contents/Resources/app/bundledApps` - let aIconPath = `${appPath}/Contents/Resources/${darwinBuild.archiveIcon}` - cb = () => { - // fs.copySync(darwinBuild.archiveIconPath, path.normalize(path.join(cwd, aIconPath))) - if (process.platform === 'darwin') { - console.log('Building dmg') - createDMG(appPath, () => console.log(`${plat}-${arch} finished!`)) - // console.log(`${plat}-${arch} finished!`) - } else { - console.error(`Can not build dmg file on this operating system [${plat}-${arch}]. It must be done on OSX`) - console.log(`${plat}-${arch} finished!`) - } +function packLinux (platform, arch) { + return new Promise((resolve, reject) => { + let opts = Object.assign({}, DEFAULT_OPTS, linuxSpecificOpts, {platform, arch}) + packager(opts, (err) => { + if (err) { + reject(err) + } else { + resolve() } - } else { - if (plat === 'win32') { - cb = () => { - createWindowsInstallers(plat, arch, () => console.log(`${plat}-${arch} finished!`)) - } + }) + }) +} + +async function darwinDoBuild (platform, arch) { + if (arch === 'ia32') return + console.log(`building the binary for ${platform}-${arch}`) + let packagedPath = path.join(cwd, 'release', `WAIL-${platform}-${arch}`) + let appPath = `${packagedPath}/WAIL.app` + let moveToPath = `${appPath}/Contents/Resources/app/bundledApps` + await packDarwin(platform, arch) + await moveThemP({arch: `${platform}${arch}`, to: moveToPath}) + console.log('Building dmg') + await makeDMG(appPath) + console.log(`zipping up the release for ${platform}-${arch}`) + await zipUp(appPath, `${packagedPath}.zip`) + console.log(`${platform}-${arch} finished!`) +} + +async function linuxDoBuild (platform, arch) { + console.log(`building the binary for ${platform}-${arch}`) + let packagedPath = path.join(cwd, `release/WAIL-${platform}-${arch}`) + let moveToPath = `${packagedPath}/resources/app/bundledApps` + await packLinux(platform, arch) + await moveThemP({arch: `${platform}${arch}`, to: moveToPath}) + console.log(`zipping up the release for ${platform}-${arch}`) + await zipUp(packagedPath, `${packagedPath}.zip`) + console.log(`${platform}-${arch} finished!`) +} + +async function windowsDoBuild (platform, arch) { + console.log(`building the binary for ${platform}-${arch}`) + let packagedPath = path.join(cwd, 'release', `WAIL-${platform}-${arch}`) + let moveToPath = path.join(packagedPath, 'resources', 'app', 'bundledApps') + await packWindows(platform, arch) + await moveThemP({arch: `${platform}${arch}`, to: moveToPath}) + console.log(`zipping up the release for ${platform}-${arch}`) + await zipUp(packagedPath, `${packagedPath}.zip`) + console.log(`${platform}-${arch} finished!`) +} + +async function buildForPlatArch (plats, archs) { + let i = 0 + let plen = plats.length + let alen = archs.length + for (; i < plen; ++i) { + let plat = plats[i] + let j = 0 + for (; j < alen; ++j) { + let arch = archs[j] + if (plat === 'darwin') { + await darwinDoBuild(plat, arch) + } else if (plat === 'linux') { + await linuxDoBuild(plat, arch) } else { - // cb = () => { - // createDeb_redHat(arch, () => console.log(`${plat}-${arch} finished!`)) - // } - console.log(`${plat}-${arch} finished!`) + await windowsDoBuild(plat, arch) } - moveToPath = `release/wail-${plat}-${arch}/resources/app/bundledApps` } - let releasePath = path.normalize(path.join(cwd, moveToPath)) - moveTo({ arch: `${plat}${arch}`, to: releasePath }, cb) } } -fs.emptyDirSync(path.join(cwd, 'dist')) -fs.emptyDirSync(path.join(cwd, 'release')) - -console.log('building webpack.config.electron') -build(electronCfg) - .then((stats) => { - console.log('building webpack.config.production') - build(cfg) - }) - .then((stats) => { - if (shouldBuildCurrent) { - console.log(`building the binary for ${os.platform()}-${os.arch()}`) - pack(os.platform(), os.arch(), log(os.platform(), os.arch())) +async function doBuild () { + console.log('Building WAIL') + console.log('Transpiling and Creating Single File WAIL-Electron-Main') + await build(electronCfg) + console.log('Transpiling and Creating Single File WAIL-UI') + await build(cfgUI) + console.log('Transpiling and Creating Single File WAIL-Core') + await build(cfgCore) + console.log('cleaning previous releases') + await emptyRelease() + if (shouldBuildCurrent) { + const thePlat = os.platform() + if (thePlat === 'darwin') { + await darwinDoBuild(thePlat, os.arch()) + } else if (thePlat === 'linux') { + await linuxDoBuild(thePlat, os.arch()) } else { - let buildFor - let archs - let platforms - if (shouldBuildAll) { - buildFor = 'building for all platforms' - archs = [ 'ia32', 'x64' ] - platforms = [ 'linux', 'win32', 'darwin' ] - } else if (shouldBuildLinux) { - buildFor = 'building for linux' - archs = [ 'ia32', 'x64' ] - platforms = [ 'linux' ] - } else if (shouldBuildOSX) { - buildFor = 'building for OSX' - archs = [ 'x64' ] - platforms = [ 'darwin' ] - } else { - buildFor = 'building for Windows' - archs = [ 'ia32', 'x64' ] - platforms = [ 'win32' ] - } - console.log(buildFor) - platforms.forEach(plat => { - archs.forEach(arch => { - console.log(`building the binary for ${plat}-${arch}`) - pack(plat, arch, log(plat, arch)) - }) - }) + await windowsDoBuild(thePlat, os.arch()) + } + } else { + let archs + let platforms + if (shouldBuildAll) { + archs = ['ia32', 'x64'] + platforms = ['linux', 'win32', 'darwin'] + } else if (shouldBuildLinux) { + archs = ['ia32', 'x64'] + platforms = ['linux'] + } else if (shouldBuildOSX) { + archs = ['x64'] + platforms = ['darwin'] + } else { + archs = ['ia32', 'x64'] + platforms = ['win32'] } + await buildForPlatArch(platforms, archs) + } +} + +doBuild() + .then(() => { + console.log('done') }) - .catch(err => { - console.error(err) + .catch(error => { + console.error('failed', error) }) diff --git a/src/icons/whale.icns b/buildResources/osx/whale.icns similarity index 100% rename from src/icons/whale.icns rename to buildResources/osx/whale.icns diff --git a/bundledApps/heritrix-3.3.0/adhoc.keystore b/bundledApps/heritrix-3.3.0/adhoc.keystore deleted file mode 100644 index b4ed6759..00000000 Binary files a/bundledApps/heritrix-3.3.0/adhoc.keystore and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/heritrix_out.log b/bundledApps/heritrix-3.3.0/heritrix_out.log deleted file mode 100644 index aae084fa..00000000 --- a/bundledApps/heritrix-3.3.0/heritrix_out.log +++ /dev/null @@ -1,80 +0,0 @@ -Sat 07/23/2016 21:18:02.26 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Sat 07/23/2016 21:40:45.04 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Sat 07/23/2016 22:10:55.59 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Sat 07/23/2016 22:13:58.93 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 17:31:06.65 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 20:28:32.48 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 20:43:53.92 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 20:44:36.11 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 20:45:50.38 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 21:03:48.46 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 21:37:07.08 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Mon 07/25/2016 22:42:44.96 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Tue 07/26/2016 13:29:21.57 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Tue 07/26/2016 23:05:06.43 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Tue 07/26/2016 23:05:55.44 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m -Tue 07/26/2016 23:22:11.66 Starting heritrix -java version "1.7.0_80" -Java(TM) SE Runtime Environment (build 1.7.0_80-b15) -Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) -JAVA_OPTS= -Xmx256m diff --git a/bundledApps/heritrix-3.3.0/lib/commons-configuration-1.8.jar b/bundledApps/heritrix-3.3.0/lib/commons-configuration-1.8.jar deleted file mode 100755 index ae9ae996..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/commons-configuration-1.8.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/commons-httpclient-3.1.jar b/bundledApps/heritrix-3.3.0/lib/commons-httpclient-3.1.jar deleted file mode 100755 index 7c59774a..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/commons-httpclient-3.1.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/commons-math3-3.1.1.jar b/bundledApps/heritrix-3.3.0/lib/commons-math3-3.1.1.jar deleted file mode 100755 index 43b52159..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/commons-math3-3.1.1.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/dsiutils-2.0.12.jar b/bundledApps/heritrix-3.3.0/lib/dsiutils-2.0.12.jar deleted file mode 100755 index 18ab6f12..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/dsiutils-2.0.12.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/fastutil-6.5.2.jar b/bundledApps/heritrix-3.3.0/lib/fastutil-6.5.2.jar deleted file mode 100755 index 0b4c0984..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/fastutil-6.5.2.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/guava-17.0.jar b/bundledApps/heritrix-3.3.0/lib/guava-17.0.jar deleted file mode 100755 index 661fc747..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/guava-17.0.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/heritrix-commons-3.3.0-SNAPSHOT.jar b/bundledApps/heritrix-3.3.0/lib/heritrix-commons-3.3.0-SNAPSHOT.jar deleted file mode 100755 index c5c39172..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/heritrix-commons-3.3.0-SNAPSHOT.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/heritrix-engine-3.3.0-SNAPSHOT.jar b/bundledApps/heritrix-3.3.0/lib/heritrix-engine-3.3.0-SNAPSHOT.jar deleted file mode 100755 index 4db252b2..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/heritrix-engine-3.3.0-SNAPSHOT.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/heritrix-modules-3.3.0-SNAPSHOT.jar b/bundledApps/heritrix-3.3.0/lib/heritrix-modules-3.3.0-SNAPSHOT.jar deleted file mode 100755 index cc9ef42b..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/heritrix-modules-3.3.0-SNAPSHOT.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/httpclient-4.3.6.jar b/bundledApps/heritrix-3.3.0/lib/httpclient-4.3.6.jar deleted file mode 100755 index 091498c9..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/httpclient-4.3.6.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/httpcore-4.3.3.jar b/bundledApps/heritrix-3.3.0/lib/httpcore-4.3.3.jar deleted file mode 100755 index a8747b0c..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/httpcore-4.3.3.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/httpmime-4.3.6.jar b/bundledApps/heritrix-3.3.0/lib/httpmime-4.3.6.jar deleted file mode 100755 index a2ba4f28..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/httpmime-4.3.6.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/jetty-ajp-6.1.26.jar b/bundledApps/heritrix-3.3.0/lib/jetty-ajp-6.1.26.jar deleted file mode 100755 index 875bb35a..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/jetty-ajp-6.1.26.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/jsap-2.1.jar b/bundledApps/heritrix-3.3.0/lib/jsap-2.1.jar deleted file mode 100755 index 15d1f37a..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/jsap-2.1.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/json-20131018.jar b/bundledApps/heritrix-3.3.0/lib/json-20131018.jar deleted file mode 100755 index 394caded..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/json-20131018.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/juniversalchardet-1.0.3.jar b/bundledApps/heritrix-3.3.0/lib/juniversalchardet-1.0.3.jar deleted file mode 100755 index ef4d7af5..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/juniversalchardet-1.0.3.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/log4j-1.2.17.jar b/bundledApps/heritrix-3.3.0/lib/log4j-1.2.17.jar deleted file mode 100755 index 1d425cf7..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/log4j-1.2.17.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/slf4j-api-1.7.2.jar b/bundledApps/heritrix-3.3.0/lib/slf4j-api-1.7.2.jar deleted file mode 100755 index 1a887083..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/slf4j-api-1.7.2.jar and /dev/null differ diff --git a/bundledApps/heritrix-3.3.0/lib/webarchive-commons-1.1.5.jar b/bundledApps/heritrix-3.3.0/lib/webarchive-commons-1.1.5.jar deleted file mode 100755 index 371e9c6b..00000000 Binary files a/bundledApps/heritrix-3.3.0/lib/webarchive-commons-1.1.5.jar and /dev/null differ diff --git a/bundledApps/heritrix.bat b/bundledApps/heritrix.bat index 76c0eb3d..e529e37b 100755 --- a/bundledApps/heritrix.bat +++ b/bundledApps/heritrix.bat @@ -2,8 +2,8 @@ set here=%cd% set JAVA_HOME=%here%\openjdk set JRE_HOME=%here%\openjdk\jre -set HERITRIX_HOME=%here%\heritrix-3.3.0 -set start=%here%\heritrix-3.3.0\bin\heritrix.cmd +set HERITRIX_HOME=%here%\heritrix +set start=%here%\heritrix\bin\heritrix.cmd echo starting %* diff --git a/bundledApps/heritrix-3.3.0/LICENSE.txt b/bundledApps/heritrix/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/LICENSE.txt rename to bundledApps/heritrix/LICENSE.txt diff --git a/bundledApps/heritrix-3.3.0/README.txt b/bundledApps/heritrix/README.txt old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/README.txt rename to bundledApps/heritrix/README.txt diff --git a/bundledApps/heritrix-3.3.0/bin/arcreader b/bundledApps/heritrix/bin/arcreader similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/arcreader rename to bundledApps/heritrix/bin/arcreader diff --git a/bundledApps/heritrix-3.3.0/bin/arcreader.cmd b/bundledApps/heritrix/bin/arcreader.cmd similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/arcreader.cmd rename to bundledApps/heritrix/bin/arcreader.cmd diff --git a/bundledApps/heritrix-3.3.0/bin/dependencies.xsl b/bundledApps/heritrix/bin/dependencies.xsl similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/dependencies.xsl rename to bundledApps/heritrix/bin/dependencies.xsl diff --git a/bundledApps/heritrix-3.3.0/bin/extractor b/bundledApps/heritrix/bin/extractor similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/extractor rename to bundledApps/heritrix/bin/extractor diff --git a/bundledApps/heritrix-3.3.0/bin/extractor.cmd b/bundledApps/heritrix/bin/extractor.cmd similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/extractor.cmd rename to bundledApps/heritrix/bin/extractor.cmd diff --git a/bundledApps/heritrix-3.3.0/bin/foreground_heritrix b/bundledApps/heritrix/bin/foreground_heritrix similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/foreground_heritrix rename to bundledApps/heritrix/bin/foreground_heritrix diff --git a/bundledApps/heritrix-3.3.0/bin/foreground_heritrix.cmd b/bundledApps/heritrix/bin/foreground_heritrix.cmd similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/foreground_heritrix.cmd rename to bundledApps/heritrix/bin/foreground_heritrix.cmd diff --git a/bundledApps/heritrix-3.3.0/bin/heritrix b/bundledApps/heritrix/bin/heritrix similarity index 97% rename from bundledApps/heritrix-3.3.0/bin/heritrix rename to bundledApps/heritrix/bin/heritrix index 3175a1d9..302520a8 100755 --- a/bundledApps/heritrix-3.3.0/bin/heritrix +++ b/bundledApps/heritrix/bin/heritrix @@ -104,10 +104,10 @@ do fi done -# heritrix_dmesg.log contains startup output from the crawler main class. -# As soon as content appears in this log, this shell script prints the +# heritrix_dmesg.log contains startup output from the crawler main class. +# As soon as content appears in this log, this shell script prints the # successful (or failed) startup content and moves off waiting on heritrix -# startup. This technique is done so we can show on the console startup +# startup. This technique is done so we can show on the console startup # messages emitted by java subsequent to the redirect of stdout and stderr. startMessage="${HERITRIX_HOME}/heritrix_dmesg.log" @@ -137,7 +137,7 @@ then -Dheritrix.out=${HERITRIX_OUT} ${JAVA_OPTS} ${JMX_OPTS} \ $CLASS_MAIN $@ else - CLASSPATH=${CP} nohup $JAVACMD -Dheritrix.home=${HERITRIX_HOME} \ + CLASSPATH=${CP} nohup $JAVACMD -Dname=heritrix -Dheritrix.home=${HERITRIX_HOME} \ -Djava.protocol.handler.pkgs=org.archive.net \ -Dheritrix.out=${HERITRIX_OUT} ${JAVA_OPTS} ${JMX_OPTS} \ $CLASS_MAIN $@ >> ${stdouterrlog} 2>&1 & @@ -145,7 +145,7 @@ else # Wait for content in the heritrix_dmesg.log file. echo -n "`date` Heritrix starting (pid $HERITRIX_PID)" - while true + while true do sleep 1 if [ -s $startMessage ] @@ -171,8 +171,8 @@ else done kill -0 $HERITRIX_PID > /dev/null 2>&1 - if [ $? -eq 0 ] + if [ $? -eq 0 ] then echo $HERITRIX_PID > heritrix.pid fi -fi +fi \ No newline at end of file diff --git a/bundledApps/heritrix-3.3.0/bin/heritrix.cmd b/bundledApps/heritrix/bin/heritrix.cmd similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/heritrix.cmd rename to bundledApps/heritrix/bin/heritrix.cmd diff --git a/bundledApps/heritrix-3.3.0/bin/hoppath.pl b/bundledApps/heritrix/bin/hoppath.pl similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/hoppath.pl rename to bundledApps/heritrix/bin/hoppath.pl diff --git a/bundledApps/heritrix-3.3.0/bin/htmlextractor b/bundledApps/heritrix/bin/htmlextractor similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/htmlextractor rename to bundledApps/heritrix/bin/htmlextractor diff --git a/bundledApps/heritrix-3.3.0/bin/htmlextractor.cmd b/bundledApps/heritrix/bin/htmlextractor.cmd similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/htmlextractor.cmd rename to bundledApps/heritrix/bin/htmlextractor.cmd diff --git a/bundledApps/heritrix-3.3.0/bin/make_reports.pl b/bundledApps/heritrix/bin/make_reports.pl similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/make_reports.pl rename to bundledApps/heritrix/bin/make_reports.pl diff --git a/bundledApps/heritrix-3.3.0/bin/manifest_bundle.pl b/bundledApps/heritrix/bin/manifest_bundle.pl similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/manifest_bundle.pl rename to bundledApps/heritrix/bin/manifest_bundle.pl diff --git a/bundledApps/heritrix-3.3.0/bin/xdocToTxt.xsl b/bundledApps/heritrix/bin/xdocToTxt.xsl similarity index 100% rename from bundledApps/heritrix-3.3.0/bin/xdocToTxt.xsl rename to bundledApps/heritrix/bin/xdocToTxt.xsl diff --git a/bundledApps/heritrix-3.3.0/conf/heritrix.cacerts b/bundledApps/heritrix/conf/heritrix.cacerts similarity index 100% rename from bundledApps/heritrix-3.3.0/conf/heritrix.cacerts rename to bundledApps/heritrix/conf/heritrix.cacerts diff --git a/bundledApps/heritrix-3.3.0/conf/jobs/.gitignore b/bundledApps/heritrix/conf/jobs/.gitignore similarity index 100% rename from bundledApps/heritrix-3.3.0/conf/jobs/.gitignore rename to bundledApps/heritrix/conf/jobs/.gitignore diff --git a/bundledApps/heritrix-3.3.0/conf/logging.properties b/bundledApps/heritrix/conf/logging.properties similarity index 100% rename from bundledApps/heritrix-3.3.0/conf/logging.properties rename to bundledApps/heritrix/conf/logging.properties diff --git a/bundledApps/heritrix-3.3.0/extras/pagerank/GenGraph.java b/bundledApps/heritrix/extras/pagerank/GenGraph.java similarity index 100% rename from bundledApps/heritrix-3.3.0/extras/pagerank/GenGraph.java rename to bundledApps/heritrix/extras/pagerank/GenGraph.java diff --git a/bundledApps/heritrix-3.3.0/extras/pagerank/PageRank.java b/bundledApps/heritrix/extras/pagerank/PageRank.java similarity index 100% rename from bundledApps/heritrix-3.3.0/extras/pagerank/PageRank.java rename to bundledApps/heritrix/extras/pagerank/PageRank.java diff --git a/bundledApps/heritrix-3.3.0/extras/pagerank/README.txt b/bundledApps/heritrix/extras/pagerank/README.txt similarity index 100% rename from bundledApps/heritrix-3.3.0/extras/pagerank/README.txt rename to bundledApps/heritrix/extras/pagerank/README.txt diff --git a/bundledApps/heritrix-3.3.0/extras/pagerank/assignUrlIndex.pl b/bundledApps/heritrix/extras/pagerank/assignUrlIndex.pl similarity index 100% rename from bundledApps/heritrix-3.3.0/extras/pagerank/assignUrlIndex.pl rename to bundledApps/heritrix/extras/pagerank/assignUrlIndex.pl diff --git a/bundledApps/heritrix-3.3.0/extras/pagerank/pageRankSetup.pl b/bundledApps/heritrix/extras/pagerank/pageRankSetup.pl similarity index 100% rename from bundledApps/heritrix-3.3.0/extras/pagerank/pageRankSetup.pl rename to bundledApps/heritrix/extras/pagerank/pageRankSetup.pl diff --git a/bundledApps/heritrix-3.3.0/extras/pagerank/run-pr.sh b/bundledApps/heritrix/extras/pagerank/run-pr.sh similarity index 100% rename from bundledApps/heritrix-3.3.0/extras/pagerank/run-pr.sh rename to bundledApps/heritrix/extras/pagerank/run-pr.sh diff --git a/bundledApps/heritrix/jobs/.gitignore b/bundledApps/heritrix/jobs/.gitignore new file mode 100755 index 00000000..8b4f08af --- /dev/null +++ b/bundledApps/heritrix/jobs/.gitignore @@ -0,0 +1 @@ +see http://stackoverflow.com/questions/115983/how-do-i-add-an-empty-directory-to-a-git-repository diff --git a/bundledApps/heritrix-3.3.0/lib/ant-1.7.1.jar b/bundledApps/heritrix/lib/ant-1.7.1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/ant-1.7.1.jar rename to bundledApps/heritrix/lib/ant-1.7.1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/ant-launcher-1.7.1.jar b/bundledApps/heritrix/lib/ant-launcher-1.7.1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/ant-launcher-1.7.1.jar rename to bundledApps/heritrix/lib/ant-launcher-1.7.1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/ant.LICENSE b/bundledApps/heritrix/lib/ant.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/ant.LICENSE rename to bundledApps/heritrix/lib/ant.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/ant.NOTICE b/bundledApps/heritrix/lib/ant.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/ant.NOTICE rename to bundledApps/heritrix/lib/ant.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/aopalliance-1.0.jar b/bundledApps/heritrix/lib/aopalliance-1.0.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/aopalliance-1.0.jar rename to bundledApps/heritrix/lib/aopalliance-1.0.jar diff --git a/bundledApps/heritrix/lib/archive-overlay-commons-httpclient-3.1.jar b/bundledApps/heritrix/lib/archive-overlay-commons-httpclient-3.1.jar new file mode 100755 index 00000000..7c44015d Binary files /dev/null and b/bundledApps/heritrix/lib/archive-overlay-commons-httpclient-3.1.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/bsh-2.0b5.jar b/bundledApps/heritrix/lib/bsh-2.0b5.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/bsh-2.0b5.jar rename to bundledApps/heritrix/lib/bsh-2.0b5.jar diff --git a/bundledApps/heritrix-3.3.0/lib/bsh.LICENSE b/bundledApps/heritrix/lib/bsh.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/bsh.LICENSE rename to bundledApps/heritrix/lib/bsh.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/com.noelios.restlet-1.1.10.jar b/bundledApps/heritrix/lib/com.noelios.restlet-1.1.10.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/com.noelios.restlet-1.1.10.jar rename to bundledApps/heritrix/lib/com.noelios.restlet-1.1.10.jar diff --git a/bundledApps/heritrix-3.3.0/lib/com.noelios.restlet.ext.jetty-1.1.10.jar b/bundledApps/heritrix/lib/com.noelios.restlet.ext.jetty-1.1.10.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/com.noelios.restlet.ext.jetty-1.1.10.jar rename to bundledApps/heritrix/lib/com.noelios.restlet.ext.jetty-1.1.10.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-cli-1.1.jar b/bundledApps/heritrix/lib/commons-cli-1.1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-cli-1.1.jar rename to bundledApps/heritrix/lib/commons-cli-1.1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-cli.LICENSE b/bundledApps/heritrix/lib/commons-cli.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-cli.LICENSE rename to bundledApps/heritrix/lib/commons-cli.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-cli.NOTICE b/bundledApps/heritrix/lib/commons-cli.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-cli.NOTICE rename to bundledApps/heritrix/lib/commons-cli.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-codec-1.6.jar b/bundledApps/heritrix/lib/commons-codec-1.6.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-codec-1.6.jar rename to bundledApps/heritrix/lib/commons-codec-1.6.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-codec.LICENSE b/bundledApps/heritrix/lib/commons-codec.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-codec.LICENSE rename to bundledApps/heritrix/lib/commons-codec.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-codec.NOTICE b/bundledApps/heritrix/lib/commons-codec.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-codec.NOTICE rename to bundledApps/heritrix/lib/commons-codec.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-collections-3.1.jar b/bundledApps/heritrix/lib/commons-collections-3.1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-collections-3.1.jar rename to bundledApps/heritrix/lib/commons-collections-3.1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-el.LICENSE b/bundledApps/heritrix/lib/commons-el.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-el.LICENSE rename to bundledApps/heritrix/lib/commons-el.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-el.NOTICE b/bundledApps/heritrix/lib/commons-el.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-el.NOTICE rename to bundledApps/heritrix/lib/commons-el.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-io-1.4.jar b/bundledApps/heritrix/lib/commons-io-1.4.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-io-1.4.jar rename to bundledApps/heritrix/lib/commons-io-1.4.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-io.LICENSE b/bundledApps/heritrix/lib/commons-io.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-io.LICENSE rename to bundledApps/heritrix/lib/commons-io.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-io.NOTICE b/bundledApps/heritrix/lib/commons-io.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-io.NOTICE rename to bundledApps/heritrix/lib/commons-io.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-lang-2.6.jar b/bundledApps/heritrix/lib/commons-lang-2.6.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-lang-2.6.jar rename to bundledApps/heritrix/lib/commons-lang-2.6.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-lang.LICENSE b/bundledApps/heritrix/lib/commons-lang.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-lang.LICENSE rename to bundledApps/heritrix/lib/commons-lang.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-lang.NOTICE b/bundledApps/heritrix/lib/commons-lang.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-lang.NOTICE rename to bundledApps/heritrix/lib/commons-lang.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-logging-1.0.4.jar b/bundledApps/heritrix/lib/commons-logging-1.0.4.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-logging-1.0.4.jar rename to bundledApps/heritrix/lib/commons-logging-1.0.4.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-logging.LICENSE b/bundledApps/heritrix/lib/commons-logging.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-logging.LICENSE rename to bundledApps/heritrix/lib/commons-logging.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-net-2.0.jar b/bundledApps/heritrix/lib/commons-net-2.0.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-net-2.0.jar rename to bundledApps/heritrix/lib/commons-net-2.0.jar diff --git a/bundledApps/heritrix-3.3.0/lib/commons-net.LICENSE b/bundledApps/heritrix/lib/commons-net.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-net.LICENSE rename to bundledApps/heritrix/lib/commons-net.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/commons-net.NOTICE b/bundledApps/heritrix/lib/commons-net.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/commons-net.NOTICE rename to bundledApps/heritrix/lib/commons-net.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/dnsjava-2.0.3.README b/bundledApps/heritrix/lib/dnsjava-2.0.3.README old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/dnsjava-2.0.3.README rename to bundledApps/heritrix/lib/dnsjava-2.0.3.README diff --git a/bundledApps/heritrix-3.3.0/lib/dnsjava-2.0.3.jar b/bundledApps/heritrix/lib/dnsjava-2.0.3.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/dnsjava-2.0.3.jar rename to bundledApps/heritrix/lib/dnsjava-2.0.3.jar diff --git a/bundledApps/heritrix-3.3.0/lib/fastutil-5.0.7.LICENSE b/bundledApps/heritrix/lib/fastutil-5.0.7.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/fastutil-5.0.7.LICENSE rename to bundledApps/heritrix/lib/fastutil-5.0.7.LICENSE diff --git a/bundledApps/heritrix/lib/fastutil-5.0.7.jar b/bundledApps/heritrix/lib/fastutil-5.0.7.jar new file mode 100755 index 00000000..104a399b Binary files /dev/null and b/bundledApps/heritrix/lib/fastutil-5.0.7.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/freemarker-2.3.19.jar b/bundledApps/heritrix/lib/freemarker-2.3.19.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/freemarker-2.3.19.jar rename to bundledApps/heritrix/lib/freemarker-2.3.19.jar diff --git a/bundledApps/heritrix-3.3.0/lib/groovy-all-1.6.3.jar b/bundledApps/heritrix/lib/groovy-all-1.6.3.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/groovy-all-1.6.3.jar rename to bundledApps/heritrix/lib/groovy-all-1.6.3.jar diff --git a/bundledApps/heritrix/lib/guava-r08.jar b/bundledApps/heritrix/lib/guava-r08.jar new file mode 100755 index 00000000..d18d0bda Binary files /dev/null and b/bundledApps/heritrix/lib/guava-r08.jar differ diff --git a/bundledApps/heritrix/lib/heritrix-commons-3.2.0.jar b/bundledApps/heritrix/lib/heritrix-commons-3.2.0.jar new file mode 100755 index 00000000..62e61e29 Binary files /dev/null and b/bundledApps/heritrix/lib/heritrix-commons-3.2.0.jar differ diff --git a/bundledApps/heritrix/lib/heritrix-engine-3.2.0.jar b/bundledApps/heritrix/lib/heritrix-engine-3.2.0.jar new file mode 100755 index 00000000..4c89afbe Binary files /dev/null and b/bundledApps/heritrix/lib/heritrix-engine-3.2.0.jar differ diff --git a/bundledApps/heritrix/lib/heritrix-modules-3.2.0.jar b/bundledApps/heritrix/lib/heritrix-modules-3.2.0.jar new file mode 100755 index 00000000..d9e13e8f Binary files /dev/null and b/bundledApps/heritrix/lib/heritrix-modules-3.2.0.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/htmlparser-1.6.jar b/bundledApps/heritrix/lib/htmlparser-1.6.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/htmlparser-1.6.jar rename to bundledApps/heritrix/lib/htmlparser-1.6.jar diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/httpcore-4.3.jar b/bundledApps/heritrix/lib/httpcore-4.3.jar old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/httpcore-4.3.jar rename to bundledApps/heritrix/lib/httpcore-4.3.jar diff --git a/bundledApps/heritrix/lib/ia-web-commons-1.0-20131207.033010-102.jar b/bundledApps/heritrix/lib/ia-web-commons-1.0-20131207.033010-102.jar new file mode 100755 index 00000000..0722805c Binary files /dev/null and b/bundledApps/heritrix/lib/ia-web-commons-1.0-20131207.033010-102.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/itext-1.3.jar b/bundledApps/heritrix/lib/itext-1.3.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/itext-1.3.jar rename to bundledApps/heritrix/lib/itext-1.3.jar diff --git a/bundledApps/heritrix-3.3.0/lib/itext.LICENSE b/bundledApps/heritrix/lib/itext.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/itext.LICENSE rename to bundledApps/heritrix/lib/itext.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/jasper.LICENSE b/bundledApps/heritrix/lib/jasper.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jasper.LICENSE rename to bundledApps/heritrix/lib/jasper.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/javaswf-CVS-SNAPSHOT-1.jar b/bundledApps/heritrix/lib/javaswf-CVS-SNAPSHOT-1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/javaswf-CVS-SNAPSHOT-1.jar rename to bundledApps/heritrix/lib/javaswf-CVS-SNAPSHOT-1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/javaswf.LICENSE b/bundledApps/heritrix/lib/javaswf.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/javaswf.LICENSE rename to bundledApps/heritrix/lib/javaswf.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/je-3.2.44.LICENSE b/bundledApps/heritrix/lib/je-3.2.44.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/je-3.2.44.LICENSE rename to bundledApps/heritrix/lib/je-3.2.44.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/je-4.1.6.jar b/bundledApps/heritrix/lib/je-4.1.6.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/je-4.1.6.jar rename to bundledApps/heritrix/lib/je-4.1.6.jar diff --git a/bundledApps/heritrix-3.3.0/lib/jericho-html-2.3.LICENSE b/bundledApps/heritrix/lib/jericho-html-2.3.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jericho-html-2.3.LICENSE rename to bundledApps/heritrix/lib/jericho-html-2.3.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/jericho-html-2.6.1.jar b/bundledApps/heritrix/lib/jericho-html-2.6.1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jericho-html-2.6.1.jar rename to bundledApps/heritrix/lib/jericho-html-2.6.1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/jets3t-0.5.0.LICENSE b/bundledApps/heritrix/lib/jets3t-0.5.0.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jets3t-0.5.0.LICENSE rename to bundledApps/heritrix/lib/jets3t-0.5.0.LICENSE diff --git a/bundledApps/heritrix/lib/jets3t-0.5.0.jar b/bundledApps/heritrix/lib/jets3t-0.5.0.jar new file mode 100755 index 00000000..40d9d399 Binary files /dev/null and b/bundledApps/heritrix/lib/jets3t-0.5.0.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/jetty-6.1.26.jar b/bundledApps/heritrix/lib/jetty-6.1.26.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jetty-6.1.26.jar rename to bundledApps/heritrix/lib/jetty-6.1.26.jar diff --git a/bundledApps/heritrix/lib/jetty-ajp-6.1.11.jar b/bundledApps/heritrix/lib/jetty-ajp-6.1.11.jar new file mode 100755 index 00000000..2fa36424 Binary files /dev/null and b/bundledApps/heritrix/lib/jetty-ajp-6.1.11.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/jetty-sslengine-6.1.26.jar b/bundledApps/heritrix/lib/jetty-sslengine-6.1.26.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jetty-sslengine-6.1.26.jar rename to bundledApps/heritrix/lib/jetty-sslengine-6.1.26.jar diff --git a/bundledApps/heritrix-3.3.0/lib/jetty-util-6.1.26.jar b/bundledApps/heritrix/lib/jetty-util-6.1.26.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jetty-util-6.1.26.jar rename to bundledApps/heritrix/lib/jetty-util-6.1.26.jar diff --git a/bundledApps/heritrix-3.3.0/lib/jetty.LICENSE b/bundledApps/heritrix/lib/jetty.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jetty.LICENSE rename to bundledApps/heritrix/lib/jetty.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/jline-0.9.94.jar b/bundledApps/heritrix/lib/jline-0.9.94.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jline-0.9.94.jar rename to bundledApps/heritrix/lib/jline-0.9.94.jar diff --git a/bundledApps/heritrix-3.3.0/lib/jna-3.2.3.jar b/bundledApps/heritrix/lib/jna-3.2.3.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/jna-3.2.3.jar rename to bundledApps/heritrix/lib/jna-3.2.3.jar diff --git a/bundledApps/heritrix-3.3.0/lib/joda-time-1.6.jar b/bundledApps/heritrix/lib/joda-time-1.6.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/joda-time-1.6.jar rename to bundledApps/heritrix/lib/joda-time-1.6.jar diff --git a/bundledApps/heritrix/lib/json-20090211.jar b/bundledApps/heritrix/lib/json-20090211.jar new file mode 100755 index 00000000..ef290940 Binary files /dev/null and b/bundledApps/heritrix/lib/json-20090211.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/junit-3.8.2.jar b/bundledApps/heritrix/lib/junit-3.8.2.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/junit-3.8.2.jar rename to bundledApps/heritrix/lib/junit-3.8.2.jar diff --git a/bundledApps/heritrix-3.3.0/lib/junit.LICENSE.HTML b/bundledApps/heritrix/lib/junit.LICENSE.HTML old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/junit.LICENSE.HTML rename to bundledApps/heritrix/lib/junit.LICENSE.HTML diff --git a/bundledApps/heritrix/lib/juniversalchardet-1.0.3.jar b/bundledApps/heritrix/lib/juniversalchardet-1.0.3.jar new file mode 100755 index 00000000..1af703fe Binary files /dev/null and b/bundledApps/heritrix/lib/juniversalchardet-1.0.3.jar differ diff --git a/bundledApps/heritrix-3.3.0/lib/kryo-1.01.jar b/bundledApps/heritrix/lib/kryo-1.01.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/kryo-1.01.jar rename to bundledApps/heritrix/lib/kryo-1.01.jar diff --git a/bundledApps/heritrix-3.3.0/lib/libidn-1.15.jar b/bundledApps/heritrix/lib/libidn-1.15.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/libidn-1.15.jar rename to bundledApps/heritrix/lib/libidn-1.15.jar diff --git a/bundledApps/heritrix-3.3.0/lib/libidn.LICENSE b/bundledApps/heritrix/lib/libidn.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/libidn.LICENSE rename to bundledApps/heritrix/lib/libidn.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/mg4j-1.0.1.LICENSE b/bundledApps/heritrix/lib/mg4j-1.0.1.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/mg4j-1.0.1.LICENSE rename to bundledApps/heritrix/lib/mg4j-1.0.1.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/mg4j-1.0.1.jar b/bundledApps/heritrix/lib/mg4j-1.0.1.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/mg4j-1.0.1.jar rename to bundledApps/heritrix/lib/mg4j-1.0.1.jar diff --git a/bundledApps/heritrix-3.3.0/lib/minlog-1.2.jar b/bundledApps/heritrix/lib/minlog-1.2.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/minlog-1.2.jar rename to bundledApps/heritrix/lib/minlog-1.2.jar diff --git a/bundledApps/heritrix-3.3.0/lib/org.restlet-1.1.10.jar b/bundledApps/heritrix/lib/org.restlet-1.1.10.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/org.restlet-1.1.10.jar rename to bundledApps/heritrix/lib/org.restlet-1.1.10.jar diff --git a/bundledApps/heritrix-3.3.0/lib/oro-2.0.8.LICENSE b/bundledApps/heritrix/lib/oro-2.0.8.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/oro-2.0.8.LICENSE rename to bundledApps/heritrix/lib/oro-2.0.8.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/poi-2.5.1-final-20040804.jar b/bundledApps/heritrix/lib/poi-2.5.1-final-20040804.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/poi-2.5.1-final-20040804.jar rename to bundledApps/heritrix/lib/poi-2.5.1-final-20040804.jar diff --git a/bundledApps/heritrix-3.3.0/lib/poi-scratchpad-2.5.1-final-20040804.jar b/bundledApps/heritrix/lib/poi-scratchpad-2.5.1-final-20040804.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/poi-scratchpad-2.5.1-final-20040804.jar rename to bundledApps/heritrix/lib/poi-scratchpad-2.5.1-final-20040804.jar diff --git a/bundledApps/heritrix-3.3.0/lib/poi.LICENSE b/bundledApps/heritrix/lib/poi.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/poi.LICENSE rename to bundledApps/heritrix/lib/poi.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/poi.NOTICE b/bundledApps/heritrix/lib/poi.NOTICE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/poi.NOTICE rename to bundledApps/heritrix/lib/poi.NOTICE diff --git a/bundledApps/heritrix-3.3.0/lib/reflectasm-0.8.jar b/bundledApps/heritrix/lib/reflectasm-0.8.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/reflectasm-0.8.jar rename to bundledApps/heritrix/lib/reflectasm-0.8.jar diff --git a/bundledApps/heritrix-3.3.0/lib/servlet-4.1.34.LICENSE b/bundledApps/heritrix/lib/servlet-4.1.34.LICENSE old mode 100644 new mode 100755 similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/servlet-4.1.34.LICENSE rename to bundledApps/heritrix/lib/servlet-4.1.34.LICENSE diff --git a/bundledApps/heritrix-3.3.0/lib/servlet-api-2.5-20081211.jar b/bundledApps/heritrix/lib/servlet-api-2.5-20081211.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/servlet-api-2.5-20081211.jar rename to bundledApps/heritrix/lib/servlet-api-2.5-20081211.jar diff --git a/bundledApps/heritrix-3.3.0/lib/spring-aop-3.0.5.RELEASE.jar b/bundledApps/heritrix/lib/spring-aop-3.0.5.RELEASE.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/spring-aop-3.0.5.RELEASE.jar rename to bundledApps/heritrix/lib/spring-aop-3.0.5.RELEASE.jar diff --git a/bundledApps/heritrix-3.3.0/lib/spring-asm-3.0.5.RELEASE.jar b/bundledApps/heritrix/lib/spring-asm-3.0.5.RELEASE.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/spring-asm-3.0.5.RELEASE.jar rename to bundledApps/heritrix/lib/spring-asm-3.0.5.RELEASE.jar diff --git a/bundledApps/heritrix-3.3.0/lib/spring-beans-3.0.5.RELEASE.jar b/bundledApps/heritrix/lib/spring-beans-3.0.5.RELEASE.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/spring-beans-3.0.5.RELEASE.jar rename to bundledApps/heritrix/lib/spring-beans-3.0.5.RELEASE.jar diff --git a/bundledApps/heritrix-3.3.0/lib/spring-context-3.0.5.RELEASE.jar b/bundledApps/heritrix/lib/spring-context-3.0.5.RELEASE.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/spring-context-3.0.5.RELEASE.jar rename to bundledApps/heritrix/lib/spring-context-3.0.5.RELEASE.jar diff --git a/bundledApps/heritrix-3.3.0/lib/spring-core-3.0.5.RELEASE.jar b/bundledApps/heritrix/lib/spring-core-3.0.5.RELEASE.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/spring-core-3.0.5.RELEASE.jar rename to bundledApps/heritrix/lib/spring-core-3.0.5.RELEASE.jar diff --git a/bundledApps/heritrix-3.3.0/lib/spring-expression-3.0.5.RELEASE.jar b/bundledApps/heritrix/lib/spring-expression-3.0.5.RELEASE.jar similarity index 100% rename from bundledApps/heritrix-3.3.0/lib/spring-expression-3.0.5.RELEASE.jar rename to bundledApps/heritrix/lib/spring-expression-3.0.5.RELEASE.jar diff --git a/bundledApps/moveCollections.sh b/bundledApps/moveCollections.sh new file mode 100644 index 00000000..fe28cb9f --- /dev/null +++ b/bundledApps/moveCollections.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +if [ ! -d "$1" ]; then + echo $1 +fi \ No newline at end of file diff --git a/bundledApps/runH.sh b/bundledApps/runH.sh new file mode 100755 index 00000000..d37996e7 --- /dev/null +++ b/bundledApps/runH.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +CWD=$(pwd) +export JAVA_HOME="${CWD}/openjdk" +export JRE_HOME="${CWD}/openjdk/jre" +export HERITRIX_HOME="${CWD}/heritrix" + +START="${HERITRIX_HOME}/bin/heritrix" + +$START -a lorem:ipsum --jobs-dir /home/john/Documents/WAIL_Managed_Crawls \ No newline at end of file diff --git a/bundledApps/tomcat/LICENSE b/bundledApps/tomcat/LICENSE deleted file mode 100644 index 62fbfa94..00000000 --- a/bundledApps/tomcat/LICENSE +++ /dev/null @@ -1,1050 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -APACHE TOMCAT SUBCOMPONENTS: - -Apache Tomcat includes a number of subcomponents with separate copyright notices -and license terms. Your use of these subcomponents is subject to the terms and -conditions of the following licenses. - - -For the ecj-x.x.x.jar component: - -Eclipse Public License - v 1.0 - -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC -LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM -CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and documentation -distributed under this Agreement, and - -b) in the case of each subsequent Contributor: - -i) changes to the Program, and - -ii) additions to the Program; - -where such changes and/or additions to the Program originate from and are -distributed by that particular Contributor. A Contribution 'originates' from a -Contributor if it was added to the Program by such Contributor itself or anyone -acting on such Contributor's behalf. Contributions do not include additions to -the Program which: (i) are separate modules of software distributed in -conjunction with the Program under their own license agreement, and (ii) are not -derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which are -necessarily infringed by the use or sale of its Contribution alone or when -combined with the Program. - -"Program" means the Contributions distributed in accordance with this Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free copyright license to -reproduce, prepare derivative works of, publicly display, publicly perform, -distribute and sublicense the Contribution of such Contributor, if any, and such -derivative works, in source code and object code form. - -b) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed -Patents to make, use, sell, offer to sell, import and otherwise transfer the -Contribution of such Contributor, if any, in source code and object code form. -This patent license shall apply to the combination of the Contribution and the -Program if, at the time the Contribution is added by the Contributor, such -addition of the Contribution causes such combination to be covered by the -Licensed Patents. The patent license shall not apply to any other combinations -which include the Contribution. No hardware per se is licensed hereunder. - -c) Recipient understands that although each Contributor grants the licenses to -its Contributions set forth herein, no assurances are provided by any -Contributor that the Program does not infringe the patent or other intellectual -property rights of any other entity. Each Contributor disclaims any liability to -Recipient for claims brought by any other entity based on infringement of -intellectual property rights or otherwise. As a condition to exercising the -rights and licenses granted hereunder, each Recipient hereby assumes sole -responsibility to secure any other intellectual property rights needed, if any. -For example, if a third party patent license is required to allow Recipient to -distribute the Program, it is Recipient's responsibility to acquire that license -before distributing the Program. - -d) Each Contributor represents that to its knowledge it has sufficient copyright -rights in its Contribution, if any, to grant the copyright license set forth in -this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under its -own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and - -b) its license agreement: - -i) effectively disclaims on behalf of all Contributors all warranties and -conditions, express and implied, including warranties or conditions of title and -non-infringement, and implied warranties or conditions of merchantability and -fitness for a particular purpose; - -ii) effectively excludes on behalf of all Contributors all liability for -damages, including direct, indirect, special, incidental and consequential -damages, such as lost profits; - -iii) states that any provisions which differ from this Agreement are offered by -that Contributor alone and not by any other party; and - -iv) states that source code for the Program is available from such Contributor, -and informs licensees how to obtain it in a reasonable manner on or through a -medium customarily used for software exchange. - -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and - -b) a copy of this Agreement must be included with each copy of the Program. - -Contributors may not remove or alter any copyright notices contained within the -Program. - -Each Contributor must identify itself as the originator of its Contribution, if -any, in a manner that reasonably allows subsequent Recipients to identify the -originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with -respect to end users, business partners and the like. While this license is -intended to facilitate the commercial use of the Program, the Contributor who -includes the Program in a commercial product offering should do so in a manner -which does not create potential liability for other Contributors. Therefore, if -a Contributor includes the Program in a commercial product offering, such -Contributor ("Commercial Contributor") hereby agrees to defend and indemnify -every other Contributor ("Indemnified Contributor") against any losses, damages -and costs (collectively "Losses") arising from claims, lawsuits and other legal -actions brought by a third party against the Indemnified Contributor to the -extent caused by the acts or omissions of such Commercial Contributor in -connection with its distribution of the Program in a commercial product -offering. The obligations in this section do not apply to any claims or Losses -relating to any actual or alleged intellectual property infringement. In order -to qualify, an Indemnified Contributor must: a) promptly notify the Commercial -Contributor in writing of such claim, and b) allow the Commercial Contributor -to control, and cooperate with the Commercial Contributor in, the defense and -any related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial product -offering, Product X. That Contributor is then a Commercial Contributor. If that -Commercial Contributor then makes performance claims, or offers warranties -related to Product X, those performance claims and warranties are such -Commercial Contributor's responsibility alone. Under this section, the -Commercial Contributor would have to defend claims against the other -Contributors related to those performance claims and warranties, and if a court -requires any other Contributor to pay any damages as a result, the Commercial -Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, -NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each -Recipient is solely responsible for determining the appropriateness of using and -distributing the Program and assumes all risks associated with its exercise of -rights under this Agreement , including but not limited to the risks and costs -of program errors, compliance with applicable laws, damage to or loss of data, -programs or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY -CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS -GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under applicable -law, it shall not affect the validity or enforceability of the remainder of the -terms of this Agreement, and without further action by the parties hereto, such -provision shall be reformed to the minimum extent necessary to make such -provision valid and enforceable. - -If Recipient institutes patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Program itself -(excluding combinations of the Program with other software or hardware) -infringes such Recipient's patent(s), then such Recipient's rights granted under -Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to -comply with any of the material terms or conditions of this Agreement and does -not cure such failure in a reasonable period of time after becoming aware of -such noncompliance. If all Recipient's rights under this Agreement terminate, -Recipient agrees to cease use and distribution of the Program as soon as -reasonably practicable. However, Recipient's obligations under this Agreement -and any licenses granted by Recipient relating to the Program shall continue and -survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in -order to avoid inconsistency the Agreement is copyrighted and may only be -modified in the following manner. The Agreement Steward reserves the right to -publish new versions (including revisions) of this Agreement from time to time. -No one other than the Agreement Steward has the right to modify this Agreement. -The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation -may assign the responsibility to serve as the Agreement Steward to a suitable -separate entity. Each new version of the Agreement will be given a -distinguishing version number. The Program (including Contributions) may always -be distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to distribute the Program (including its Contributions) -under the new version. Except as expressly stated in Sections 2(a) and 2(b) -above, Recipient receives no rights or licenses to the intellectual property of -any Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted under -this Agreement are reserved. - -This Agreement is governed by the laws of the State of New York and the -intellectual property laws of the United States of America. No party to this -Agreement will bring a legal action under this Agreement more than one year -after the cause of action arose. Each party waives its rights to a jury trial in -any resulting litigation. - - -For the Windows Installer component: - - * All NSIS source code, plug-ins, documentation, examples, header files and - graphics, with the exception of the compression modules and where - otherwise noted, are licensed under the zlib/libpng license. - * The zlib compression module for NSIS is licensed under the zlib/libpng - license. - * The bzip2 compression module for NSIS is licensed under the bzip2 license. - * The lzma compression module for NSIS is licensed under the Common Public - License version 1.0. - -zlib/libpng license - -This software is provided 'as-is', without any express or implied warranty. In -no event will the authors be held liable for any damages arising from the use of -this software. - -Permission is granted to anyone to use this software for any purpose, including -commercial applications, and to alter it and redistribute it freely, subject to -the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not claim - that you wrote the original software. If you use this software in a - product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - -bzip2 license - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. The origin of this software must not be misrepresented; you must not claim - that you wrote the original software. If you use this software in a - product, an acknowledgment in the product documentation would be - appreciated but is not required. - 3. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 4. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGE. - -Julian Seward, Cambridge, UK. - -jseward@acm.org -Common Public License version 1.0 - -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC -LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM -CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and documentation -distributed under this Agreement, and b) in the case of each subsequent -Contributor: - -i) changes to the Program, and - -ii) additions to the Program; - -where such changes and/or additions to the Program originate from and are -distributed by that particular Contributor. A Contribution 'originates' from a -Contributor if it was added to the Program by such Contributor itself or anyone -acting on such Contributor's behalf. Contributions do not include additions to -the Program which: (i) are separate modules of software distributed in -conjunction with the Program under their own license agreement, and (ii) are not -derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents " mean patent claims licensable by a Contributor which are -necessarily infringed by the use or sale of its Contribution alone or when -combined with the Program. - -"Program" means the Contributions distributed in accordance with this Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free copyright license to -reproduce, prepare derivative works of, publicly display, publicly perform, -distribute and sublicense the Contribution of such Contributor, if any, and such -derivative works, in source code and object code form. - -b) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed -Patents to make, use, sell, offer to sell, import and otherwise transfer the -Contribution of such Contributor, if any, in source code and object code form. -This patent license shall apply to the combination of the Contribution and the -Program if, at the time the Contribution is added by the Contributor, such -addition of the Contribution causes such combination to be covered by the -Licensed Patents. The patent license shall not apply to any other combinations -which include the Contribution. No hardware per se is licensed hereunder. - -c) Recipient understands that although each Contributor grants the licenses to -its Contributions set forth herein, no assurances are provided by any -Contributor that the Program does not infringe the patent or other intellectual -property rights of any other entity. Each Contributor disclaims any liability to -Recipient for claims brought by any other entity based on infringement of -intellectual property rights or otherwise. As a condition to exercising the -rights and licenses granted hereunder, each Recipient hereby assumes sole -responsibility to secure any other intellectual property rights needed, if any. -For example, if a third party patent license is required to allow Recipient to -distribute the Program, it is Recipient's responsibility to acquire that license -before distributing the Program. - -d) Each Contributor represents that to its knowledge it has sufficient copyright -rights in its Contribution, if any, to grant the copyright license set forth in -this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under its -own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and - -b) its license agreement: - -i) effectively disclaims on behalf of all Contributors all warranties and -conditions, express and implied, including warranties or conditions of title and -non-infringement, and implied warranties or conditions of merchantability and -fitness for a particular purpose; - -ii) effectively excludes on behalf of all Contributors all liability for -damages, including direct, indirect, special, incidental and consequential -damages, such as lost profits; - -iii) states that any provisions which differ from this Agreement are offered by -that Contributor alone and not by any other party; and - -iv) states that source code for the Program is available from such Contributor, -and informs licensees how to obtain it in a reasonable manner on or through a -medium customarily used for software exchange. - -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and - -b) a copy of this Agreement must be included with each copy of the Program. - -Contributors may not remove or alter any copyright notices contained within the -Program. - -Each Contributor must identify itself as the originator of its Contribution, if -any, in a manner that reasonably allows subsequent Recipients to identify the -originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with -respect to end users, business partners and the like. While this license is -intended to facilitate the commercial use of the Program, the Contributor who -includes the Program in a commercial product offering should do so in a manner -which does not create potential liability for other Contributors. Therefore, if -a Contributor includes the Program in a commercial product offering, such -Contributor ("Commercial Contributor") hereby agrees to defend and indemnify -every other Contributor ("Indemnified Contributor") against any losses, damages -and costs (collectively "Losses") arising from claims, lawsuits and other legal -actions brought by a third party against the Indemnified Contributor to the -extent caused by the acts or omissions of such Commercial Contributor in -connection with its distribution of the Program in a commercial product -offering. The obligations in this section do not apply to any claims or Losses -relating to any actual or alleged intellectual property infringement. In order -to qualify, an Indemnified Contributor must: a) promptly notify the Commercial -Contributor in writing of such claim, and b) allow the Commercial Contributor to -control, and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may participate in -any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial product -offering, Product X. That Contributor is then a Commercial Contributor. If that -Commercial Contributor then makes performance claims, or offers warranties -related to Product X, those performance claims and warranties are such -Commercial Contributor's responsibility alone. Under this section, the -Commercial Contributor would have to defend claims against the other -Contributors related to those performance claims and warranties, and if a court -requires any other Contributor to pay any damages as a result, the Commercial -Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, -NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each -Recipient is solely responsible for determining the appropriateness of using and -distributing the Program and assumes all risks associated with its exercise of -rights under this Agreement, including but not limited to the risks and costs of -program errors, compliance with applicable laws, damage to or loss of data, -programs or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY -CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS -GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under applicable -law, it shall not affect the validity or enforceability of the remainder of the -terms of this Agreement, and without further action by the parties hereto, such -provision shall be reformed to the minimum extent necessary to make such -provision valid and enforceable. - -If Recipient institutes patent litigation against a Contributor with respect to -a patent applicable to software (including a cross-claim or counterclaim in a -lawsuit), then any patent licenses granted by that Contributor to such Recipient -under this Agreement shall terminate as of the date such litigation is filed. In -addition, if Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the Program -itself (excluding combinations of the Program with other software or hardware) -infringes such Recipient's patent(s), then such Recipient's rights granted under -Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to -comply with any of the material terms or conditions of this Agreement and does -not cure such failure in a reasonable period of time after becoming aware of -such noncompliance. If all Recipient's rights under this Agreement terminate, -Recipient agrees to cease use and distribution of the Program as soon as -reasonably practicable. However, Recipient's obligations under this Agreement -and any licenses granted by Recipient relating to the Program shall continue and -survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in -order to avoid inconsistency the Agreement is copyrighted and may only be -modified in the following manner. The Agreement Steward reserves the right to -publish new versions (including revisions) of this Agreement from time to time. -No one other than the Agreement Steward has the right to modify this Agreement. -IBM is the initial Agreement Steward. IBM may assign the responsibility to serve -as the Agreement Steward to a suitable separate entity. Each new version of the -Agreement will be given a distinguishing version number. The Program (including -Contributions) may always be distributed subject to the version of the Agreement -under which it was received. In addition, after a new version of the Agreement -is published, Contributor may elect to distribute the Program (including its -Contributions) under the new version. Except as expressly stated in Sections -2(a) and 2(b) above, Recipient receives no rights or licenses to the -intellectual property of any Contributor under this Agreement, whether -expressly, by implication, estoppel or otherwise. All rights in the Program not -expressly granted under this Agreement are reserved. - -This Agreement is governed by the laws of the State of New York and the -intellectual property laws of the United States of America. No party to this -Agreement will bring a legal action under this Agreement more than one year -after the cause of action arose. Each party waives its rights to a jury trial in -any resulting litigation. - -Special exception for LZMA compression module - -Igor Pavlov and Amir Szekely, the authors of the LZMA compression module for -NSIS, expressly permit you to statically or dynamically link your code (or bind -by name) to the files from the LZMA compression module for NSIS without -subjecting your linked code to the terms of the Common Public license version -1.0. Any modifications or additions to files from the LZMA compression module -for NSIS, however, are subject to the terms of the Common Public License version -1.0. - - -For the following XML Schemas for Java EE Deployment Descriptors: - - javaee_5.xsd - - javaee_web_services_1_2.xsd - - javaee_web_services_client_1_2.xsd - - javaee_6.xsd - - javaee_web_services_1_3.xsd - - javaee_web_services_client_1_3.xsd - - jsp_2_2.xsd - - web-app_3_0.xsd - - web-common_3_0.xsd - - web-fragment_3_0.xsd - -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 - -1. Definitions. - - 1.1. Contributor. means each individual or entity that creates or contributes - to the creation of Modifications. - - 1.2. Contributor Version. means the combination of the Original Software, - prior Modifications used by a Contributor (if any), and the - Modifications made by that particular Contributor. - - 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, - or (c) the combination of files containing Original Software with files - containing Modifications, in each case including portions thereof. - - 1.4. Executable. means the Covered Software in any form other than Source - Code. - - 1.5. Initial Developer. means the individual or entity that first makes - Original Software available under this License. - - 1.6. Larger Work. means a work which combines Covered Software or portions - thereof with code not governed by the terms of this License. - - 1.7. License. means this document. - - 1.8. Licensable. means having the right to grant, to the maximum extent - possible, whether at the time of the initial grant or subsequently - acquired, any and all of the rights conveyed herein. - - 1.9. Modifications. means the Source Code and Executable form of any of the - following: - - A. Any file that results from an addition to, deletion from or - modification of the contents of a file containing Original Software - or previous Modifications; - - B. Any new file that contains any part of the Original Software or - previous Modification; or - - C. Any new file that is contributed or otherwise made available under - the terms of this License. - - 1.10. Original Software. means the Source Code and Executable form of - computer software code that is originally released under this License. - - 1.11. Patent Claims. means any patent claim(s), now owned or hereafter - acquired, including without limitation, method, process, and apparatus - claims, in any patent Licensable by grantor. - - 1.12. Source Code. means (a) the common form of computer software code in - which modifications are made and (b) associated documentation included - in or with such code. - - 1.13. You. (or .Your.) means an individual or a legal entity exercising - rights under, and complying with all of the terms of, this License. For - legal entities, .You. includes any entity which controls, is controlled - by, or is under common control with You. For purposes of this - definition, .control. means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject to - third party intellectual property claims, the Initial Developer hereby - grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or trademark) - Licensable by Initial Developer, to use, reproduce, modify, display, - perform, sublicense and distribute the Original Software (or - portions thereof), with or without Modifications, and/or as part of - a Larger Work; and - - (b) under Patent Claims infringed by the making, using or selling of - Original Software, to make, have made, use, practice, sell, and - offer for sale, and/or otherwise dispose of the Original Software - (or portions thereof). - - (c) The licenses granted in Sections 2.1(a) and (b) are effective on the - date Initial Developer first distributes or otherwise makes the - Original Software available to a third party under the terms of this - License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is granted: - (1) for code that You delete from the Original Software, or (2) for - infringements caused by: (i) the modification of the Original - Software, or (ii) the combination of the Original Software with - other software or devices. - - 2.2. Contributor Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject to third - party intellectual property claims, each Contributor hereby grants You a - world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or trademark) - Licensable by Contributor to use, reproduce, modify, display, - perform, sublicense and distribute the Modifications created by such - Contributor (or portions thereof), either on an unmodified basis, - with other Modifications, as Covered Software and/or as part of a - Larger Work; and - - (b) under Patent Claims infringed by the making, using, or selling of - Modifications made by that Contributor either alone and/or in - combination with its Contributor Version (or portions of such - combination), to make, use, sell, offer for sale, have made, and/or - otherwise dispose of: (1) Modifications made by that Contributor (or - portions thereof); and (2) the combination of Modifications made by - that Contributor with its Contributor Version (or portions of such - combination). - - (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on - the date Contributor first distributes or otherwise makes the - Modifications available to a third party. - - (d) Notwithstanding Section 2.2(b) above, no patent license is granted: - (1) for any code that Contributor has deleted from the Contributor - Version; (2) for infringements caused by: (i) third party - modifications of Contributor Version, or (ii) the combination of - Modifications made by that Contributor with other software (except - as part of the Contributor Version) or other devices; or (3) under - Patent Claims infringed by Covered Software in the absence of - Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Availability of Source Code. - Any Covered Software that You distribute or otherwise make available in - Executable form must also be made available in Source Code form and that - Source Code form must be distributed only under the terms of this License. - You must include a copy of this License with every copy of the Source Code - form of the Covered Software You distribute or otherwise make available. - You must inform recipients of any such Covered Software in Executable form - as to how they can obtain such Covered Software in Source Code form in a - reasonable manner on or through a medium customarily used for software - exchange. - - 3.2. Modifications. - The Modifications that You create or to which You contribute are governed - by the terms of this License. You represent that You believe Your - Modifications are Your original creation(s) and/or You have sufficient - rights to grant the rights conveyed by this License. - - 3.3. Required Notices. - You must include a notice in each of Your Modifications that identifies - You as the Contributor of the Modification. You may not remove or alter - any copyright, patent or trademark notices contained within the Covered - Software, or any notices of licensing or any descriptive text giving - attribution to any Contributor or the Initial Developer. - - 3.4. Application of Additional Terms. - You may not offer or impose any terms on any Covered Software in Source - Code form that alters or restricts the applicable version of this License - or the recipients. rights hereunder. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability obligations to - one or more recipients of Covered Software. However, you may do so only on - Your own behalf, and not on behalf of the Initial Developer or any - Contributor. You must make it absolutely clear that any such warranty, - support, indemnity or liability obligation is offered by You alone, and - You hereby agree to indemnify the Initial Developer and every Contributor - for any liability incurred by the Initial Developer or such Contributor as - a result of warranty, support, indemnity or liability terms You offer. - - 3.5. Distribution of Executable Versions. - You may distribute the Executable form of the Covered Software under the - terms of this License or under the terms of a license of Your choice, - which may contain terms different from this License, provided that You are - in compliance with the terms of this License and that the license for the - Executable form does not attempt to limit or alter the recipient.s rights - in the Source Code form from the rights set forth in this License. If You - distribute the Covered Software in Executable form under a different - license, You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial Developer - or Contributor. You hereby agree to indemnify the Initial Developer and - every Contributor for any liability incurred by the Initial Developer or - such Contributor as a result of any such terms You offer. - - 3.6. Larger Works. - You may create a Larger Work by combining Covered Software with other code - not governed by the terms of this License and distribute the Larger Work - as a single product. In such a case, You must make sure the requirements - of this License are fulfilled for the Covered Software. - -4. Versions of the License. - - 4.1. New Versions. - Sun Microsystems, Inc. is the initial license steward and may publish - revised and/or new versions of this License from time to time. Each - version will be given a distinguishing version number. Except as provided - in Section 4.3, no one other than the license steward has the right to - modify this License. - - 4.2. Effect of New Versions. - You may always continue to use, distribute or otherwise make the Covered - Software available under the terms of the version of the License under - which You originally received the Covered Software. If the Initial - Developer includes a notice in the Original Software prohibiting it from - being distributed or otherwise made available under any subsequent version - of the License, You must distribute and make the Covered Software - available under the terms of the version of the License under which You - originally received the Covered Software. Otherwise, You may also choose - to use, distribute or otherwise make the Covered Software available under - the terms of any subsequent version of the License published by the - license steward. - - 4.3. Modified Versions. - When You are an Initial Developer and You want to create a new license for - Your Original Software, You may create and use a modified version of this - License if You: (a) rename the license and remove any references to the - name of the license steward (except to note that the license differs from - this License); and (b) otherwise make it clear that the license contains - terms which differ from this License. - -5. DISCLAIMER OF WARRANTY. - - COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT - LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, - MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK - AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD - ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL - DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY - SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN - ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED - HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -6. TERMINATION. - - 6.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to - cure such breach within 30 days of becoming aware of the breach. - Provisions which, by their nature, must remain in effect beyond the - termination of this License shall survive. - - 6.2. If You assert a patent infringement claim (excluding declaratory - judgment actions) against Initial Developer or a Contributor (the - Initial Developer or Contributor against whom You assert such claim - is referred to as .Participant.) alleging that the Participant - Software (meaning the Contributor Version where the Participant is a - Contributor or the Original Software where the Participant is the - Initial Developer) directly or indirectly infringes any patent, then - any and all rights granted directly or indirectly to You by such - Participant, the Initial Developer (if the Initial Developer is not - the Participant) and all Contributors under Sections 2.1 and/or 2.2 - of this License shall, upon 60 days notice from Participant terminate - prospectively and automatically at the expiration of such 60 day - notice period, unless if within such 60 day period You withdraw Your - claim with respect to the Participant Software against such - Participant either unilaterally or pursuant to a written agreement - with Participant. - - 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end - user licenses that have been validly granted by You or any - distributor hereunder prior to termination (excluding licenses - granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING - NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY - OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF - ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, - INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT - LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, - COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR - LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF - SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR - DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT - APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE - EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS - EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. - - The Covered Software is a .commercial item,. as that term is defined in 48 - C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as - that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and commercial - computer software documentation. as such terms are used in 48 C.F.R. 12.212 - (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 - through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered - Software with only those rights set forth herein. This U.S. Government Rights - clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or - provision that addresses Government rights in computer software under this - License. - -9. MISCELLANEOUS. - - This License represents the complete agreement concerning subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. This License shall be governed by the law of the jurisdiction - specified in a notice contained within the Original Software (except to the - extent applicable law, if any, provides otherwise), excluding such - jurisdiction's conflict-of-law provisions. Any litigation relating to this - License shall be subject to the jurisdiction of the courts located in the - jurisdiction and venue specified in a notice contained within the Original - Software, with the losing party responsible for costs, including, without - limitation, court costs and reasonable attorneys. fees and expenses. The - application of the United Nations Convention on Contracts for the - International Sale of Goods is expressly excluded. Any law or regulation - which provides that the language of a contract shall be construed against - the drafter shall not apply to this License. You agree that You alone are - responsible for compliance with the United States export administration - regulations (and the export control laws and regulation of any other - countries) when You use, distribute or otherwise make available any Covered - Software. - -10. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is responsible - for claims and damages arising, directly or indirectly, out of its - utilization of rights under this License and You agree to work with Initial - Developer and Contributors to distribute such responsibility on an equitable - basis. Nothing herein is intended or shall be deemed to constitute any - admission of liability. - - NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION - LICENSE (CDDL) - - The code released under the CDDL shall be governed by the laws of the State - of California (excluding conflict-of-law provisions). Any litigation relating - to this License shall be subject to the jurisdiction of the Federal Courts of - the Northern District of California and the state courts of the State of - California, with venue lying in Santa Clara County, California. - diff --git a/bundledApps/tomcat/NOTICE b/bundledApps/tomcat/NOTICE deleted file mode 100644 index 9c5b10a0..00000000 --- a/bundledApps/tomcat/NOTICE +++ /dev/null @@ -1,36 +0,0 @@ -Apache Tomcat -Copyright 1999-2012 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). - -The Windows Installer is built with the Nullsoft -Scriptable Install System (NSIS), which is -open source software. The original software and -related information is available at -http://nsis.sourceforge.net. - -Java compilation software for JSP pages is provided by Eclipse, -which is open source software. The original software and -related information is available at -http://www.eclipse.org. - -For the bayeux implementation -The org.apache.cometd.bayeux API is derivative work originating at the Dojo Foundation -* Copyright 2007-2008 Guy Molinari -* Copyright 2007-2008 Filip Hanik -* Copyright 2007 Dojo Foundation -* Copyright 2007 Mort Bay Consulting Pty. Ltd. - -The original XML Schemas for Java EE Deployment Descriptors: - - javaee_5.xsd - - javaee_web_services_1_2.xsd - - javaee_web_services_client_1_2.xsd - - javaee_6.xsd - - javaee_web_services_1_3.xsd - - javaee_web_services_client_1_3.xsd - - jsp_2_2.xsd - - web-app_3_0.xsd - - web-common_3_0.xsd - - web-fragment_3_0.xsd -may be obtained from http://java.sun.com/xml/ns/javaee/ diff --git a/bundledApps/tomcat/RELEASE-NOTES b/bundledApps/tomcat/RELEASE-NOTES deleted file mode 100644 index 6fe3c984..00000000 --- a/bundledApps/tomcat/RELEASE-NOTES +++ /dev/null @@ -1,228 +0,0 @@ -================================================================================ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -================================================================================ - -$Id: RELEASE-NOTES 1189163 2011-10-26 12:19:26Z kkolinko $ - - - Apache Tomcat Version 7.0.30 - Release Notes - - -========= -CONTENTS: -========= - -* Dependency Changes -* API Stability -* JNI Based Applications -* Bundled APIs -* Web application reloading and static fields in shared libraries -* Tomcat on Linux -* Enabling SSI and CGI Support -* Security manager URLs -* Symlinking static resources -* Viewing the Tomcat Change Log -* Cryptographic software notice -* When all else fails - - -=================== -Dependency Changes: -=================== -Tomcat 7.0 is designed to run on Java SE 6 and later. - -In addition, Tomcat 7.0 uses the Eclipse JDT Java compiler for -compiling JSP pages. This means you no longer need to have the complete -Java Development Kit (JDK) to run Tomcat, but a Java Runtime Environment -(JRE) is sufficient. The Eclipse JDT Java compiler is bundled with the -binary Tomcat distributions. Tomcat can also be configured to use the -compiler from the JDK to compile JSPs, or any other Java compiler supported -by Apache Ant. - - -============== -API Stability: -============== -The public interfaces for the following classes are fixed and will not be -changed at all during the remaining lifetime of the 7.x series: -- javax/**/* - -The public interfaces for the following classes may be added to in order to -resolve bugs and/or add new features. No existing interface will be removed or -changed although it may be deprecated. -- org/apache/catalina/* -- org/apache/catalina/comet/* - -Note: As Tomcat 7 matures, the above list will be added to. The list is not - considered complete at this time. - -The remaining classes are considered part of the Tomcat internals and may change -without notice between point releases. - - -======================= -JNI Based Applications: -======================= -Applications that require native libraries must ensure that the libraries have -been loaded prior to use. Typically, this is done with a call like: - - static { - System.loadLibrary("path-to-library-file"); - } - -in some class. However, the application must also ensure that the library is -not loaded more than once. If the above code were placed in a class inside -the web application (i.e. under /WEB-INF/classes or /WEB-INF/lib), and the -application were reloaded, the loadLibrary() call would be attempted a second -time. - -To avoid this problem, place classes that load native libraries outside of the -web application, and ensure that the loadLibrary() call is executed only once -during the lifetime of a particular JVM. - - -============= -Bundled APIs: -============= -A standard installation of Tomcat 7.0 makes all of the following APIs available -for use by web applications (by placing them in "lib"): -* annotations-api.jar (Annotations package) -* catalina.jar (Tomcat Catalina implementation) -* catalina-ant.jar (Tomcat Catalina Ant tasks) -* catalina-ha.jar (High availability package) -* catalina-tribes.jar (Group communication) -* ecj-3.7.2.jar (Eclipse JDT Java compiler) -* el-api.jar (EL 2.2 API) -* jasper.jar (Jasper 2 Compiler and Runtime) -* jasper-el.jar (Jasper 2 EL implementation) -* jsp-api.jar (JSP 2.2 API) -* servlet-api.jar (Servlet 3.0 API) -* tomcat-api.jar (Interfaces shared by Catalina and Jasper) -* tomcat-coyote.jar (Tomcat connectors and utility classes) -* tomcat-dbcp.jar (package renamed database connection pool based on Commons DBCP) - -You can make additional APIs available to all of your web applications by -putting unpacked classes into a "classes" directory (not created by default), -or by placing them in JAR files in the "lib" directory. - -To override the XML parser implementation or interfaces, use the endorsed -mechanism of the JVM. The default configuration defines JARs located in -"endorsed" as endorsed. - - -================================================================ -Web application reloading and static fields in shared libraries: -================================================================ -Some shared libraries (many are part of the JDK) keep references to objects -instantiated by the web application. To avoid class loading related problems -(ClassCastExceptions, messages indicating that the classloader -is stopped, etc.), the shared libraries state should be reinitialized. - -Something which might help is to avoid putting classes which would be -referenced by a shared static field in the web application classloader, -and putting them in the shared classloader instead (JARs should be put in the -"lib" folder, and classes should be put in the "classes" folder). - - -================ -Tomcat on Linux: -================ -GLIBC 2.2 / Linux 2.4 users should define an environment variable: -export LD_ASSUME_KERNEL=2.2.5 - -Redhat Linux 9.0 users should use the following setting to avoid -stability problems: -export LD_ASSUME_KERNEL=2.4.1 - -There are some Linux bugs reported against the NIO sendfile behavior, make sure you -have a JDK that is up to date, or disable sendfile behavior in the Connector.
-6427312: (fc) FileChannel.transferTo() throws IOException "system call interrupted"
-5103988: (fc) FileChannel.transferTo should return -1 for EAGAIN instead throws IOException
-6253145: (fc) FileChannel.transferTo on Linux fails when going beyond 2GB boundary
-6470086: (fc) FileChannel.transferTo(2147483647, 1, channel) cause "Value too large" exception
- - -============================= -Enabling SSI and CGI Support: -============================= -Because of the security risks associated with CGI and SSI available -to web applications, these features are disabled by default. - -To enable and configure CGI support, please see the cgi-howto.html page. - -To enable and configue SSI support, please see the ssi-howto.html page. - - -====================== -Security manager URLs: -====================== -In order to grant security permissions to JARs located inside the -web application repository, use URLs of of the following format -in your policy file: - -file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar - - -============================ -Symlinking static resources: -============================ -By default, Unix symlinks will not work when used in a web application to link -resources located outside the web application root directory. - -This behavior is optional, and the "allowLinking" flag may be used to disable -the check. - - -============================== -Viewing the Tomcat Change Log: -============================== -See changelog.html in this directory. - - -============================= -Cryptographic software notice -============================= -This distribution includes cryptographic software. The country in -which you currently reside may have restrictions on the import, -possession, use, and/or re-export to another country, of -encryption software. BEFORE using any encryption software, please -check your country's laws, regulations and policies concerning the -import, possession, or use, and re-export of encryption software, to -see if this is permitted. See for more -information. - -The U.S. Government Department of Commerce, Bureau of Industry and -Security (BIS), has classified this software as Export Commodity -Control Number (ECCN) 5D002.C.1, which includes information security -software using or performing cryptographic functions with asymmetric -algorithms. The form and manner of this Apache Software Foundation -distribution makes it eligible for export under the License Exception -ENC Technology Software Unrestricted (TSU) exception (see the BIS -Export Administration Regulations, Section 740.13) for both object -code and source code. - -The following provides more details on the included cryptographic -software: - - Tomcat includes code designed to work with JSSE - - Tomcat includes code designed to work with OpenSSL - - -==================== -When all else fails: -==================== -See the FAQ -http://tomcat.apache.org/faq/ diff --git a/bundledApps/tomcat/RUNNING.txt b/bundledApps/tomcat/RUNNING.txt deleted file mode 100644 index 7d31b352..00000000 --- a/bundledApps/tomcat/RUNNING.txt +++ /dev/null @@ -1,454 +0,0 @@ -================================================================================ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -================================================================================ - -$Id: RUNNING.txt 1348594 2012-06-10 14:03:04Z kkolinko $ - - =================================================== - Running The Apache Tomcat 7.0 Servlet/JSP Container - =================================================== - -Apache Tomcat 7.0 requires a Java Standard Edition Runtime -Environment (JRE) version 6.0 or later. - -============================= -Running With JRE 6.0 Or Later -============================= - -(1) Download and Install a Java SE Runtime Environment (JRE) - -(1.1) Download a Java SE Runtime Environment (JRE), - release version 6.0 or later, from - http://www.oracle.com/technetwork/java/javase/downloads/index.html - -(1.2) Install the JRE according to the instructions included with the - release. - - You may also use a full Java Development Kit (JDK) rather than just - a JRE. - - -(2) Download and Install Apache Tomcat - -(2.1) Download a binary distribution of Tomcat from: - - http://tomcat.apache.org/ - -(2.2) Unpack the binary distribution so that it resides in its own - directory (conventionally named "apache-tomcat-[version]"). - - For the purposes of the remainder of this document, the name - "CATALINA_HOME" is used to refer to the full pathname of that - directory. - -NOTE: As an alternative to downloading a binary distribution, you can -create your own from the Tomcat source code, as described in -"BUILDING.txt". You can either - - a) Do the full "release" build and find the created distribution in the - "output/release" directory and then proceed with unpacking as above, or - - b) Do a simple build and use the "output/build" directory as - "CATALINA_HOME". Be warned that there are some differences between the - contents of the "output/build" directory and a full "release" - distribution. - - -(3) Configure Environment Variables - -Tomcat is a Java application and does not use environment variables. The -variables are used by the Tomcat startup scripts. The scripts use the variables -to prepare the command that starts Tomcat. - -(3.1) Set CATALINA_HOME (required) and CATALINA_BASE (optional) - -The CATALINA_HOME and CATALINA_BASE environment variables are used to -specify the location of Apache Tomcat and the location of its active -configuration, respectively. - -The CATALINA_HOME environment variable should be set as defined in (2.2) -above. The Tomcat startup scripts have some logic to set this variable -automatically if it is absent (based on the location of the script in -Unixes and on the current directory in Windows), but this logic might not work -in all circumstances. - -The CATALINA_BASE environment variable is optional and is further described -in the "Multiple Tomcat Instances" section below. If it is absent, it defaults -to be equal to CATALINA_HOME. - - -(3.2) Set JRE_HOME or JAVA_HOME (required) - -The JRE_HOME variable is used to specify location of a JRE that is used to -start Tomcat. - -The JAVA_HOME variable is used to specify location of a JDK. It is used instead -of JRE_HOME. - -Using JAVA_HOME provides access to certain additional startup options that -are not allowed when JRE_HOME is used. - -If both JRE_HOME and JAVA_HOME are specified, JRE_HOME is used. - - -(3.3) Other variables (optional) - -Other environment variables exist, besides the four described above. -See the comments at the top of catalina.bat or catalina.sh scripts for -the list and a description of each of them. - -One frequently used variable is CATALINA_OPTS. It allows specification of -additional options for the java command that starts Tomcat. - -See the Java documentation for the options that affect the Java Runtime -Environment. - -See the "System Properties" page in the Tomcat Configuration Reference for -the system properties that are specific to Tomcat. - -A similar variable is JAVA_OPTS. It is used less frequently. It allows -specification of options that are used both to start and to stop Tomcat as well -as for other commands. - -Do not use JAVA_OPTS to specify memory limits. You do not need much memory -for a small process that is used to stop Tomcat. Those settings belong to -CATALINA_OPTS. - -Another frequently used variable is CATALINA_PID (on *nix platforms only). It -specifies the location of the file where process id of the forked Tomcat java -process will be written. This setting is optional. It will enable the -following features: - - - better protection against duplicate start attempts and - - allows forceful termination of Tomcat process when it does not react to - the standard shutdown command. - - -(3.4) setenv script (optional) - -Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can -be specified in the "setenv" script. - -The script is named setenv.bat (Windows) or setenv.sh (*nix). It can be -placed either into CATALINA_BASE/bin or into CATALINA_HOME/bin. The file -has to be readable. - -By default the setenv script file is absent. If the setenv script is -present both in CATALINA_BASE and in CATALINA_HOME, the one in -CATALINA_BASE is used. - -For example, to configure the JRE_HOME and CATALINA_PID variables you can -create the following script file: - -On Windows, %CATALINA_BASE%\bin\setenv.bat: - - set "JRE_HOME=%ProgramFiles%\Java\jre6" - exit /b 0 - -On Unix, $CATALINA_BASE/bin/setenv.sh: - - JRE_HOME=/usr/java/latest - CATALINA_PID="$CATALINA_BASE/tomcat.pid" - -You cannot configure CATALINA_HOME and CATALINA_BASE variables in the -setenv script, because they are used to find that file. - - -(4) Start Up Tomcat - -(4.1) Tomcat can be started by executing one of the following commands: - - %CATALINA_HOME%\bin\startup.bat (Windows) - - $CATALINA_HOME/bin/startup.sh (Unix) - - or - - %CATALINA_HOME%\bin\catalina.bat start (Windows) - - $CATALINA_HOME/bin/catalina.sh start (Unix) - -(4.2) After startup, the default web applications included with Tomcat will be - available by visiting: - - http://localhost:8080/ - -(4.3) Further information about configuring and running Tomcat can be found in - the documentation included here, as well as on the Tomcat web site: - - http://tomcat.apache.org/ - - -(5) Shut Down Tomcat - -(5.1) Tomcat can be shut down by executing one of the following commands: - - %CATALINA_HOME%\bin\shutdown.bat (Windows) - - $CATALINA_HOME/bin/shutdown.sh (Unix) - - or - - %CATALINA_HOME%\bin\catalina.bat stop (Windows) - - $CATALINA_HOME/bin/catalina.sh stop (Unix) - -================================================== -Advanced Configuration - Multiple Tomcat Instances -================================================== - -In many circumstances, it is desirable to have a single copy of a Tomcat -binary distribution shared among multiple users on the same server. To make -this possible, you can set the CATALINA_BASE environment variable to the -directory that contains the files for your 'personal' Tomcat instance. - -When running with a separate CATALINA_HOME and CATALINA_BASE, the files -and directories are split as following: - -In CATALINA_BASE: - - * bin - Only the following files: - - * setenv.sh (*nix) or setenv.bat (Windows), - * tomcat-juli.jar - - The setenv scripts were described above. The tomcat-juli library - is documented in the Logging chapter in the User Guide. - - * conf - Server configuration files (including server.xml) - - * lib - Libraries and classes, as explained below - - * logs - Log and output files - - * webapps - Automatically loaded web applications - - * work - Temporary working directories for web applications - - * temp - Directory used by the JVM for temporary files (java.io.tmpdir) - - -In CATALINA_HOME: - - * bin - Startup and shutdown scripts - - The following files will be used only if they are absent in - CATALINA_BASE/bin: - - setenv.sh (*nix), setenv.bat (Windows), tomcat-juli.jar - - * lib - Libraries and classes, as explained below - - * endorsed - Libraries that override standard "Endorsed Standards" - libraries provided by JRE. See Classloading documentation - in the User Guide for details. - - By default this "endorsed" directory is absent. - -In the default configuration the JAR libraries and classes both in -CATALINA_BASE/lib and in CATALINA_HOME/lib will be added to the common -classpath, but the ones in CATALINA_BASE will be added first and thus will -be searched first. - -The idea is that you may leave the standard Tomcat libraries in -CATALINA_HOME/lib and add other ones such as database drivers into -CATALINA_BASE/lib. - -In general it is advised to never share libraries between web applications, -but put them into WEB-INF/lib directories inside the applications. See -Classloading documentation in the User Guide for details. - - -It might be useful to note that the values of CATALINA_HOME and -CATALINA_BASE can be referenced in the XML configuration files processed -by Tomcat as ${catalina.home} and ${catalina.base} respectively. - -For example, the standard manager web application can be kept in -CATALINA_HOME/webapps/manager and loaded into CATALINA_BASE by using -the following trick: - - * Copy the CATALINA_HOME/webapps/manager/META-INF/context.xml - file as CATALINA_BASE/conf/Catalina/localhost/manager.xml - - * Add docBase attribute as shown below. - -The file will look like the following: - - - - - -See Deployer chapter in User Guide and Context and Host chapters in the -Configuration Reference for more information on contexts and web -application deployment. - - -================ -Troubleshooting -================ - -There are only really 2 things likely to go wrong during the stand-alone -Tomcat install: - -(1) The most common hiccup is when another web server (or any process for that - matter) has laid claim to port 8080. This is the default HTTP port that - Tomcat attempts to bind to at startup. To change this, open the file: - - $CATALINA_HOME/conf/server.xml - - and search for '8080'. Change it to a port that isn't in use, and is - greater than 1024, as ports less than or equal to 1024 require superuser - access to bind under UNIX. - - Restart Tomcat and you're in business. Be sure that you replace the "8080" - in the URL you're using to access Tomcat. For example, if you change the - port to 1977, you would request the URL http://localhost:1977/ in your - browser. - -(2) The 'localhost' machine isn't found. This could happen if you're behind a - proxy. If that's the case, make sure the proxy configuration for your - browser knows that you shouldn't be going through the proxy to access the - "localhost". - - In Firefox, this is under Tools/Preferences -> Advanced/Network -> - Connection -> Settings..., and in Internet Explorer it is Tools -> - Internet Options -> Connections -> LAN Settings. - - -==================== -Optional Components -==================== - -The following optional components may be included with the Apache Tomcat binary -distribution. If they are not included, you can install them separately. - - 1. Apache Tomcat Native library - - 2. Apache Commons Daemon service launcher - -Both of them are implemented in C language and as such have to be compiled -into binary code. The binary code will be specific for a platform and CPU -architecture and it must match the Java Runtime Environment executables -that will be used to launch Tomcat. - -The Windows-specific binary distributions of Apache Tomcat include binary -files for these components. On other platforms you would have to look for -binary versions elsewhere or compile them yourself. - -If you are new to Tomcat, do not bother with these components to start with. -If you do use them, do not forget to read their documentation. - - -Apache Tomcat Native library ------------------------------ - -It is a library that allows to use the "Apr" variant of HTTP and AJP -protocol connectors in Apache Tomcat. It is built around OpenSSL and Apache -Portable Runtime (APR) libraries. Those are the same libraries as used by -Apache HTTPD Server project. - -This feature was especially important in the old days when Java performance -was poor. It is less important nowadays, but it is still used and respected -by many. See Tomcat documentation for more details. - -For further reading: - - - Apache Tomcat documentation - - * Documentation for APR/Native library in the Tomcat User's Guide - - http://tomcat.apache.org/tomcat-7.0-doc/apr.html - - * Documentation for the HTTP and AJP protocol connectors in the Tomcat - Configuration Reference - - http://tomcat.apache.org/tomcat-7.0-doc/config/http.html - - http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html - - - Apache Tomcat Native project home - - http://tomcat.apache.org/native-doc/ - - - Other projects - - * OpenSSL - - http://openssl.org/ - - * Apache Portable Runtime - - http://apr.apache.org/ - - * Apache HTTP Server - - http://httpd.apache.org/ - -To disable Apache Tomcat Native library: - - - To disable Apache Tomcat Native library when it is installed, or - - To remove the warning that is logged during Tomcat startup when the - library is not installed: - - Edit the "conf/server.xml" file and remove "AprLifecycleListener" from - it. - -The binary file of Apache Tomcat Native library is usually named - - - "tcnative-1.dll" on Windows - - "libtcnative-1.so" on *nix systems - - -Apache Commons Daemon ----------------------- - -Apache Commons Daemon project provides wrappers that can be used to -install Apache Tomcat as a service on Windows or as a daemon on *nix -systems. - -The Windows-specific implementation of Apache Commons Daemon is called -"procrun". The *nix-specific one is called "jsvc". - -For further reading: - - - Apache Commons Daemon project - - http://commons.apache.org/daemon/ - - - Apache Tomcat documentation - - * Installing Apache Tomcat - - http://tomcat.apache.org/tomcat-7.0-doc/setup.html - - * Windows service HOW-TO - - http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html - -The binary files of Apache Commons Daemon in Apache Tomcat distributions -for Windows are named: - - - "tomcat7.exe" - - "tomcat7w.exe" - -These files are renamed copies of "prunsrv.exe" and "prunmgr.exe" from -Apache Commons Daemon distribution. The file names have a meaning: they are -used as the service name to register the service in Windows, as well as the -key name to store distinct configuration for this installation of -"procrun". If you would like to install several instances of Tomcat 7.0 -in parallel, you have to further rename those files, using the same naming -scheme. diff --git a/bundledApps/tomcat/bin/bootstrap.jar b/bundledApps/tomcat/bin/bootstrap.jar deleted file mode 100644 index df3fbbff..00000000 Binary files a/bundledApps/tomcat/bin/bootstrap.jar and /dev/null differ diff --git a/bundledApps/tomcat/bin/catalina-tasks.xml b/bundledApps/tomcat/bin/catalina-tasks.xml deleted file mode 100644 index c121d9b8..00000000 --- a/bundledApps/tomcat/bin/catalina-tasks.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - Catalina Ant Manager, JMX and JSPC Tasks - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/bin/catalina.bat b/bundledApps/tomcat/bin/catalina.bat deleted file mode 100644 index 1bf315d1..00000000 --- a/bundledApps/tomcat/bin/catalina.bat +++ /dev/null @@ -1,323 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Start/Stop Script for the CATALINA Server -rem -rem Environment Variable Prerequisites -rem -rem Do not set the variables in this script. Instead put them into a script -rem setenv.bat in CATALINA_BASE/bin to keep your customizations separate. -rem -rem CATALINA_HOME May point at your Catalina "build" directory. -rem -rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions -rem of a Catalina installation. If not present, resolves to -rem the same directory that CATALINA_HOME points to. -rem -rem CATALINA_OPTS (Optional) Java runtime options used when the "start", -rem "run" or "debug" command is executed. -rem Include here and not in JAVA_OPTS all options, that should -rem only be used by Tomcat itself, not by the stop process, -rem the version command etc. -rem Examples are heap size, GC logging, JMX ports etc. -rem -rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory -rem the JVM should use (java.io.tmpdir). Defaults to -rem %CATALINA_BASE%\temp. -rem -rem JAVA_HOME Must point at your Java Development Kit installation. -rem Required to run the with the "debug" argument. -rem -rem JRE_HOME Must point at your Java Runtime installation. -rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME -rem are both set, JRE_HOME is used. -rem -rem JAVA_OPTS (Optional) Java runtime options used when any command -rem is executed. -rem Include here and not in CATALINA_OPTS all options, that -rem should be used by Tomcat and also by the stop process, -rem the version command etc. -rem Most options should go into CATALINA_OPTS. -rem -rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories -rem containing some jars in order to allow replacement of APIs -rem created outside of the JCP (i.e. DOM and SAX from W3C). -rem It can also be used to update the XML parser implementation. -rem Defaults to $CATALINA_HOME/endorsed. -rem -rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start" -rem command is executed. The default is "dt_socket". -rem -rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start" -rem command is executed. The default is 8000. -rem -rem JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start" -rem command is executed. Specifies whether JVM should suspend -rem execution immediately after startup. Default is "n". -rem -rem JPDA_OPTS (Optional) Java runtime options used when the "jpda start" -rem command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS, -rem and JPDA_SUSPEND are ignored. Thus, all required jpda -rem options MUST be specified. The default is: -rem -rem -agentlib:jdwp=transport=%JPDA_TRANSPORT%, -rem address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND% -rem -rem LOGGING_CONFIG (Optional) Override Tomcat's logging config file -rem Example (all one line) -rem set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" -rem -rem LOGGING_MANAGER (Optional) Override Tomcat's logging manager -rem Example (all one line) -rem set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" -rem -rem TITLE (Optional) Specify the title of Tomcat window. The default -rem TITLE is Tomcat if it's not specified. -rem Example (all one line) -rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%] -rem -rem -rem -rem $Id: catalina.bat 1344732 2012-05-31 14:08:02Z kkolinko $ -rem --------------------------------------------------------------------------- - -rem Suppress Terminate batch job on CTRL+C -if not ""%1"" == ""run"" goto mainEntry -if "%TEMP%" == "" goto mainEntry -if exist "%TEMP%\%~nx0.run" goto mainEntry -echo Y>"%TEMP%\%~nx0.run" -if not exist "%TEMP%\%~nx0.run" goto mainEntry -echo Y>"%TEMP%\%~nx0.Y" -call "%~f0" %* <"%TEMP%\%~nx0.Y" -rem Use provided errorlevel -set RETVAL=%ERRORLEVEL% -del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1 -exit /B %RETVAL% -:mainEntry -del /Q "%TEMP%\%~nx0.run" >NUL 2>&1 - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome - -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -rem Copy CATALINA_BASE from CATALINA_HOME if not defined -if not "%CATALINA_BASE%" == "" goto gotBase -set "CATALINA_BASE=%CATALINA_HOME%" -:gotBase - -rem Ensure that any user defined CLASSPATH variables are not used on startup, -rem but allow them to be specified in setenv.bat, in rare case when it is needed. -set CLASSPATH= - -rem Get standard environment variables -if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome -call "%CATALINA_BASE%\bin\setenv.bat" -goto setenvDone -:checkSetenvHome -if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat" -:setenvDone - -rem Get standard Java environment variables -if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath -echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat" -echo This file is needed to run this program -goto end -:okSetclasspath -call "%CATALINA_HOME%\bin\setclasspath.bat" %1 -if errorlevel 1 goto end - -rem Add on extra jar file to CLASSPATH -rem Note that there are no quotes as we do not want to introduce random -rem quotes into the CLASSPATH -if "%CLASSPATH%" == "" goto emptyClasspath -set "CLASSPATH=%CLASSPATH%;" -:emptyClasspath -set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar" - -if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir -set "CATALINA_TMPDIR=%CATALINA_BASE%\temp" -:gotTmpdir - -rem Add tomcat-juli.jar to classpath -rem tomcat-juli.jar can be over-ridden per instance -if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome -set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" -goto juliClasspathDone -:juliClasspathHome -set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar" -:juliClasspathDone - -if not "%LOGGING_CONFIG%" == "" goto noJuliConfig -set LOGGING_CONFIG=-Dnop -if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig -set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" -:noJuliConfig -set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% - -if not "%LOGGING_MANAGER%" == "" goto noJuliManager -set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -:noJuliManager -set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER% - -rem ----- Execute The Requested Command --------------------------------------- - -echo Using CATALINA_BASE: "%CATALINA_BASE%" -echo Using CATALINA_HOME: "%CATALINA_HOME%" -echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%" -if ""%1"" == ""debug"" goto use_jdk -echo Using JRE_HOME: "%JRE_HOME%" -goto java_dir_displayed -:use_jdk -echo Using JAVA_HOME: "%JAVA_HOME%" -:java_dir_displayed -echo Using CLASSPATH: "%CLASSPATH%" - -set _EXECJAVA=%_RUNJAVA% -set MAINCLASS=org.apache.catalina.startup.Bootstrap -set ACTION=start -set SECURITY_POLICY_FILE= -set DEBUG_OPTS= -set JPDA= - -if not ""%1"" == ""jpda"" goto noJpda -set JPDA=jpda -if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport -set JPDA_TRANSPORT=dt_socket -:gotJpdaTransport -if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress -set JPDA_ADDRESS=8000 -:gotJpdaAddress -if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend -set JPDA_SUSPEND=n -:gotJpdaSuspend -if not "%JPDA_OPTS%" == "" goto gotJpdaOpts -set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND% -:gotJpdaOpts -shift -:noJpda - -if ""%1"" == ""debug"" goto doDebug -if ""%1"" == ""run"" goto doRun -if ""%1"" == ""start"" goto doStart -if ""%1"" == ""stop"" goto doStop -if ""%1"" == ""configtest"" goto doConfigTest -if ""%1"" == ""version"" goto doVersion - -echo Usage: catalina ( commands ... ) -echo commands: -echo debug Start Catalina in a debugger -echo debug -security Debug Catalina with a security manager -echo jpda start Start Catalina under JPDA debugger -echo run Start Catalina in the current window -echo run -security Start in the current window with security manager -echo start Start Catalina in a separate window -echo start -security Start in a separate window with security manager -echo stop Stop Catalina -echo configtest Run a basic syntax check on server.xml -echo version What version of tomcat are you running? -goto end - -:doDebug -shift -set _EXECJAVA=%_RUNJDB% -set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java" -if not ""%1"" == ""-security"" goto execCmd -shift -echo Using Security Manager -set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy" -goto execCmd - -:doRun -shift -if not ""%1"" == ""-security"" goto execCmd -shift -echo Using Security Manager -set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy" -goto execCmd - -:doStart -shift -if not "%OS%" == "Windows_NT" goto noTitle -if "%TITLE%" == "" set TITLE=Tomcat -set _EXECJAVA=start "%TITLE%" %_RUNJAVA% -goto gotTitle -:noTitle -set _EXECJAVA=start %_RUNJAVA% -:gotTitle -if not ""%1"" == ""-security"" goto execCmd -shift -echo Using Security Manager -set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy" -goto execCmd - -:doStop -shift -set ACTION=stop -set CATALINA_OPTS= -goto execCmd - -:doConfigTest -shift -set ACTION=configtest -set CATALINA_OPTS= -goto execCmd - -:doVersion -%_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo -goto end - - -:execCmd -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -rem Execute Java with the applicable properties -if not "%JPDA%" == "" goto doJpda -if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity -%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% -goto end -:doSecurity -%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% -goto end -:doJpda -if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda -%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% -goto end -:doSecurityJpda -%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% -goto end - -:end diff --git a/bundledApps/tomcat/bin/catalina.sh b/bundledApps/tomcat/bin/catalina.sh deleted file mode 100755 index 1690c14d..00000000 --- a/bundledApps/tomcat/bin/catalina.sh +++ /dev/null @@ -1,535 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Control Script for the CATALINA Server -# -# Environment Variable Prerequisites -# -# Do not set the variables in this script. Instead put them into a script -# setenv.sh in CATALINA_BASE/bin to keep your customizations separate. -# -# CATALINA_HOME May point at your Catalina "build" directory. -# -# CATALINA_BASE (Optional) Base directory for resolving dynamic portions -# of a Catalina installation. If not present, resolves to -# the same directory that CATALINA_HOME points to. -# -# CATALINA_OUT (Optional) Full path to a file where stdout and stderr -# will be redirected. -# Default is $CATALINA_BASE/logs/catalina.out -# -# CATALINA_OPTS (Optional) Java runtime options used when the "start", -# "run" or "debug" command is executed. -# Include here and not in JAVA_OPTS all options, that should -# only be used by Tomcat itself, not by the stop process, -# the version command etc. -# Examples are heap size, GC logging, JMX ports etc. -# -# CATALINA_TMPDIR (Optional) Directory path location of temporary directory -# the JVM should use (java.io.tmpdir). Defaults to -# $CATALINA_BASE/temp. -# -# JAVA_HOME Must point at your Java Development Kit installation. -# Required to run the with the "debug" argument. -# -# JRE_HOME Must point at your Java Runtime installation. -# Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME -# are both set, JRE_HOME is used. -# -# JAVA_OPTS (Optional) Java runtime options used when any command -# is executed. -# Include here and not in CATALINA_OPTS all options, that -# should be used by Tomcat and also by the stop process, -# the version command etc. -# Most options should go into CATALINA_OPTS. -# -# JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories -# containing some jars in order to allow replacement of APIs -# created outside of the JCP (i.e. DOM and SAX from W3C). -# It can also be used to update the XML parser implementation. -# Defaults to $CATALINA_HOME/endorsed. -# -# JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start" -# command is executed. The default is "dt_socket". -# -# JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start" -# command is executed. The default is 8000. -# -# JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start" -# command is executed. Specifies whether JVM should suspend -# execution immediately after startup. Default is "n". -# -# JPDA_OPTS (Optional) Java runtime options used when the "jpda start" -# command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS, -# and JPDA_SUSPEND are ignored. Thus, all required jpda -# options MUST be specified. The default is: -# -# -agentlib:jdwp=transport=$JPDA_TRANSPORT, -# address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND -# -# CATALINA_PID (Optional) Path of the file which should contains the pid -# of the catalina startup java process, when start (fork) is -# used -# -# LOGGING_CONFIG (Optional) Override Tomcat's logging config file -# Example (all one line) -# LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" -# -# LOGGING_MANAGER (Optional) Override Tomcat's logging manager -# Example (all one line) -# LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" -# -# $Id: catalina.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false -darwin=false -os400=false -case "`uname`" in -CYGWIN*) cygwin=true;; -Darwin*) darwin=true;; -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -# Get standard environment variables -PRGDIR=`dirname "$PRG"` - -# Only set CATALINA_HOME if not already set -[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` - -# Copy CATALINA_BASE from CATALINA_HOME if not already set -[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME" - -# Ensure that any user defined CLASSPATH variables are not used on startup, -# but allow them to be specified in setenv.sh, in rare case when it is needed. -CLASSPATH= - -if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then - . "$CATALINA_BASE/bin/setenv.sh" -elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then - . "$CATALINA_HOME/bin/setenv.sh" -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"` - [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"` - [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"` - [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For OS400 -if $os400; then - # Set job priority to standard for interactive (interactive - 6) by using - # the interactive priority - 6, the helper threads that respond to requests - # will be running at the same priority as interactive jobs. - COMMAND='chgjob job('$JOBNAME') runpty(6)' - system $COMMAND - - # Enable multi threading - export QIBM_MULTI_THREADED=Y -fi - -# Get standard Java environment variables -if $os400; then - # -r will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - . "$CATALINA_HOME"/bin/setclasspath.sh -else - if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then - . "$CATALINA_HOME"/bin/setclasspath.sh - else - echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh" - echo "This file is needed to run this program" - exit 1 - fi -fi - -# Add on extra jar files to CLASSPATH -if [ ! -z "$CLASSPATH" ] ; then - CLASSPATH="$CLASSPATH": -fi -CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar - -if [ -z "$CATALINA_OUT" ] ; then - CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out -fi - -if [ -z "$CATALINA_TMPDIR" ] ; then - # Define the java.io.tmpdir to use for Catalina - CATALINA_TMPDIR="$CATALINA_BASE"/temp -fi - -# Add tomcat-juli.jar to classpath -# tomcat-juli.jar can be over-ridden per instance -if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then - CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar -else - CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar -fi - -# Bugzilla 37848: When no TTY is available, don't output to console -have_tty=0 -if [ "`tty`" != "not a tty" ]; then - have_tty=1 -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"` - JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"` - CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"` - CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"` - CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"` - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"` -fi - -# Set juli LogManager config file if it is present and an override has not been issued -if [ -z "$LOGGING_CONFIG" ]; then - if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then - LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" - else - # Bugzilla 45585 - LOGGING_CONFIG="-Dnop" - fi -fi - -if [ -z "$LOGGING_MANAGER" ]; then - JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" -else - JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER" -fi - -# Uncomment the following line to make the umask available when using the -# org.apache.catalina.security.SecurityListener -#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" - -# ----- Execute The Requested Command ----------------------------------------- - -# Bugzilla 37848: only output this if we have a TTY -if [ $have_tty -eq 1 ]; then - echo "Using CATALINA_BASE: $CATALINA_BASE" - echo "Using CATALINA_HOME: $CATALINA_HOME" - echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR" - if [ "$1" = "debug" ] ; then - echo "Using JAVA_HOME: $JAVA_HOME" - else - echo "Using JRE_HOME: $JRE_HOME" - fi - echo "Using CLASSPATH: $CLASSPATH" - if [ ! -z "$CATALINA_PID" ]; then - echo "Using CATALINA_PID: $CATALINA_PID" - fi -fi - -if [ "$1" = "jpda" ] ; then - if [ -z "$JPDA_TRANSPORT" ]; then - JPDA_TRANSPORT="dt_socket" - fi - if [ -z "$JPDA_ADDRESS" ]; then - JPDA_ADDRESS="8000" - fi - if [ -z "$JPDA_SUSPEND" ]; then - JPDA_SUSPEND="n" - fi - if [ -z "$JPDA_OPTS" ]; then - JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" - fi - CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS" - shift -fi - -if [ "$1" = "debug" ] ; then - if $os400; then - echo "Debug command not available on OS400" - exit 1 - else - shift - if [ "$1" = "-security" ] ; then - if [ $have_tty -eq 1 ]; then - echo "Using Security Manager" - fi - shift - exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ - -sourcepath "$CATALINA_HOME"/../../java \ - -Djava.security.manager \ - -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ - -Dcatalina.base="$CATALINA_BASE" \ - -Dcatalina.home="$CATALINA_HOME" \ - -Djava.io.tmpdir="$CATALINA_TMPDIR" \ - org.apache.catalina.startup.Bootstrap "$@" start - else - exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ - -sourcepath "$CATALINA_HOME"/../../java \ - -Dcatalina.base="$CATALINA_BASE" \ - -Dcatalina.home="$CATALINA_HOME" \ - -Djava.io.tmpdir="$CATALINA_TMPDIR" \ - org.apache.catalina.startup.Bootstrap "$@" start - fi - fi - -elif [ "$1" = "run" ]; then - - shift - if [ "$1" = "-security" ] ; then - if [ $have_tty -eq 1 ]; then - echo "Using Security Manager" - fi - shift - eval exec \"$_RUNJAVA\" \"$LOGGING_CONFIG\" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \ - -Djava.security.manager \ - -Djava.security.policy==\"$CATALINA_BASE/conf/catalina.policy\" \ - -Dcatalina.base=\"$CATALINA_BASE\" \ - -Dcatalina.home=\"$CATALINA_HOME\" \ - -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \ - org.apache.catalina.startup.Bootstrap "$@" start - else - eval exec \"$_RUNJAVA\" \"$LOGGING_CONFIG\" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \ - -Dcatalina.base=\"$CATALINA_BASE\" \ - -Dcatalina.home=\"$CATALINA_HOME\" \ - -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \ - org.apache.catalina.startup.Bootstrap "$@" start - fi - -elif [ "$1" = "start" ] ; then - - if [ ! -z "$CATALINA_PID" ]; then - if [ -f "$CATALINA_PID" ]; then - if [ -s "$CATALINA_PID" ]; then - echo "Existing PID file found during start." - if [ -r "$CATALINA_PID" ]; then - PID=`cat "$CATALINA_PID"` - ps -p $PID >/dev/null 2>&1 - if [ $? -eq 0 ] ; then - echo "Tomcat appears to still be running with PID $PID. Start aborted." - exit 1 - else - echo "Removing/clearing stale PID file." - rm -f "$CATALINA_PID" >/dev/null 2>&1 - if [ $? != 0 ]; then - if [ -w "$CATALINA_PID" ]; then - cat /dev/null > "$CATALINA_PID" - else - echo "Unable to remove or clear stale PID file. Start aborted." - exit 1 - fi - fi - fi - else - echo "Unable to read PID file. Start aborted." - exit 1 - fi - else - rm -f "$CATALINA_PID" >/dev/null 2>&1 - if [ $? != 0 ]; then - if [ ! -w "$CATALINA_PID" ]; then - echo "Unable to remove or write to empty PID file. Start aborted." - exit 1 - fi - fi - fi - fi - fi - - shift - touch "$CATALINA_OUT" - if [ "$1" = "-security" ] ; then - if [ $have_tty -eq 1 ]; then - echo "Using Security Manager" - fi - shift - eval \"$_RUNJAVA\" \"$LOGGING_CONFIG\" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \ - -Djava.security.manager \ - -Djava.security.policy==\"$CATALINA_BASE/conf/catalina.policy\" \ - -Dcatalina.base=\"$CATALINA_BASE\" \ - -Dcatalina.home=\"$CATALINA_HOME\" \ - -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \ - org.apache.catalina.startup.Bootstrap "$@" start \ - >> "$CATALINA_OUT" 2>&1 "&" - - else - eval \"$_RUNJAVA\" \"$LOGGING_CONFIG\" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \ - -Dcatalina.base=\"$CATALINA_BASE\" \ - -Dcatalina.home=\"$CATALINA_HOME\" \ - -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \ - org.apache.catalina.startup.Bootstrap "$@" start \ - >> "$CATALINA_OUT" 2>&1 "&" - - fi - - if [ ! -z "$CATALINA_PID" ]; then - echo $! > "$CATALINA_PID" - fi - -elif [ "$1" = "stop" ] ; then - - shift - - SLEEP=5 - if [ ! -z "$1" ]; then - echo $1 | grep "[^0-9]" >/dev/null 2>&1 - if [ $? -gt 0 ]; then - SLEEP=$1 - shift - fi - fi - - FORCE=0 - if [ "$1" = "-force" ]; then - shift - FORCE=1 - fi - - if [ ! -z "$CATALINA_PID" ]; then - if [ -f "$CATALINA_PID" ]; then - if [ -s "$CATALINA_PID" ]; then - kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 - if [ $? -gt 0 ]; then - echo "PID file found but no matching process was found. Stop aborted." - exit 1 - fi - else - echo "PID file is empty and has been ignored." - fi - else - echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted." - exit 1 - fi - fi - - eval \"$_RUNJAVA\" $JAVA_OPTS \ - -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \ - -Dcatalina.base=\"$CATALINA_BASE\" \ - -Dcatalina.home=\"$CATALINA_HOME\" \ - -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \ - org.apache.catalina.startup.Bootstrap "$@" stop - - if [ ! -z "$CATALINA_PID" ]; then - if [ -f "$CATALINA_PID" ]; then - while [ $SLEEP -ge 0 ]; do - kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 - if [ $? -gt 0 ]; then - rm -f "$CATALINA_PID" >/dev/null 2>&1 - if [ $? != 0 ]; then - if [ -w "$CATALINA_PID" ]; then - cat /dev/null > "$CATALINA_PID" - else - echo "Tomcat stopped but the PID file could not be removed or cleared." - fi - fi - break - fi - if [ $SLEEP -gt 0 ]; then - sleep 1 - fi - if [ $SLEEP -eq 0 ]; then - if [ $FORCE -eq 0 ]; then - echo "Tomcat did not stop in time. PID file was not removed." - fi - fi - SLEEP=`expr $SLEEP - 1 ` - done - fi - fi - - if [ $FORCE -eq 1 ]; then - if [ -z "$CATALINA_PID" ]; then - echo "Kill failed: \$CATALINA_PID not set" - else - if [ -f "$CATALINA_PID" ]; then - PID=`cat "$CATALINA_PID"` - echo "Killing Tomcat with the PID: $PID" - kill -9 $PID - rm -f "$CATALINA_PID" >/dev/null 2>&1 - if [ $? != 0 ]; then - echo "Tomcat was killed but the PID file could not be removed." - fi - fi - fi - fi - -elif [ "$1" = "configtest" ] ; then - - eval \"$_RUNJAVA\" $JAVA_OPTS \ - -Djava.endorsed.dirs=\"$JAVA_ENDORSED_DIRS\" -classpath \"$CLASSPATH\" \ - -Dcatalina.base=\"$CATALINA_BASE\" \ - -Dcatalina.home=\"$CATALINA_HOME\" \ - -Djava.io.tmpdir=\"$CATALINA_TMPDIR\" \ - org.apache.catalina.startup.Bootstrap configtest - result=$? - if [ $result -ne 0 ]; then - echo "Configuration error detected!" - fi - exit $result - -elif [ "$1" = "version" ] ; then - - "$_RUNJAVA" \ - -classpath "$CATALINA_HOME/lib/catalina.jar" \ - org.apache.catalina.util.ServerInfo - -else - - echo "Usage: catalina.sh ( commands ... )" - echo "commands:" - if $os400; then - echo " debug Start Catalina in a debugger (not available on OS400)" - echo " debug -security Debug Catalina with a security manager (not available on OS400)" - else - echo " debug Start Catalina in a debugger" - echo " debug -security Debug Catalina with a security manager" - fi - echo " jpda start Start Catalina under JPDA debugger" - echo " run Start Catalina in the current window" - echo " run -security Start in the current window with security manager" - echo " start Start Catalina in a separate window" - echo " start -security Start in a separate window with security manager" - echo " stop Stop Catalina, waiting up to 5 seconds for the process to end" - echo " stop n Stop Catalina, waiting up to n seconds for the process to end" - echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running" - echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running" - echo " configtest Run a basic syntax check on server.xml - check exit code for result" - echo " version What version of tomcat are you running?" - echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined" - exit 1 - -fi diff --git a/bundledApps/tomcat/bin/commons-daemon-native.tar.gz b/bundledApps/tomcat/bin/commons-daemon-native.tar.gz deleted file mode 100644 index fcb4da7f..00000000 Binary files a/bundledApps/tomcat/bin/commons-daemon-native.tar.gz and /dev/null differ diff --git a/bundledApps/tomcat/bin/commons-daemon.jar b/bundledApps/tomcat/bin/commons-daemon.jar deleted file mode 100644 index 868ae2e2..00000000 Binary files a/bundledApps/tomcat/bin/commons-daemon.jar and /dev/null differ diff --git a/bundledApps/tomcat/bin/configtest.bat b/bundledApps/tomcat/bin/configtest.bat deleted file mode 100644 index c3bfd892..00000000 --- a/bundledApps/tomcat/bin/configtest.bat +++ /dev/null @@ -1,59 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Configuration test script for the CATALINA Server -rem -rem $Id: configtest.bat 1137560 2011-06-20 09:27:44Z rjung $ -rem --------------------------------------------------------------------------- - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" - -rem Check that target executable exists -if exist "%EXECUTABLE%" goto okExec -echo Cannot find "%EXECUTABLE%" -echo This file is needed to run this program -goto end -:okExec - -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -call "%EXECUTABLE%" configtest %CMD_LINE_ARGS% - -:end diff --git a/bundledApps/tomcat/bin/configtest.sh b/bundledApps/tomcat/bin/configtest.sh deleted file mode 100644 index f084e784..00000000 --- a/bundledApps/tomcat/bin/configtest.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Configuration Test Script for the CATALINA Server -# -# $Id: configtest.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# Better OS/400 detection: see Bugzilla 31132 -os400=false -case "`uname`" in -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -PRGDIR=`dirname "$PRG"` -EXECUTABLE=catalina.sh - -# Check that target executable exists -if $os400; then - # -x will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - eval -else - if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then - echo "Cannot find $PRGDIR/$EXECUTABLE" - echo "The file is absent or does not have execute permission" - echo "This file is needed to run this program" - exit 1 - fi -fi - -exec "$PRGDIR"/"$EXECUTABLE" configtest "$@" diff --git a/bundledApps/tomcat/bin/cpappend.bat b/bundledApps/tomcat/bin/cpappend.bat deleted file mode 100644 index b9b90c1b..00000000 --- a/bundledApps/tomcat/bin/cpappend.bat +++ /dev/null @@ -1,35 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -rem --------------------------------------------------------------------------- -rem Append to CLASSPATH -rem -rem $Id: cpappend.bat 562770 2007-08-04 22:13:58Z markt $ -rem --------------------------------------------------------------------------- - -rem Process the first argument -if ""%1"" == """" goto end -set CLASSPATH=%CLASSPATH%;%1 -shift - -rem Process the remaining arguments -:setArgs -if ""%1"" == """" goto doneSetArgs -set CLASSPATH=%CLASSPATH% %1 -shift -goto setArgs -:doneSetArgs -:end diff --git a/bundledApps/tomcat/bin/daemon.sh b/bundledApps/tomcat/bin/daemon.sh deleted file mode 100644 index 9a4640dc..00000000 --- a/bundledApps/tomcat/bin/daemon.sh +++ /dev/null @@ -1,241 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# ----------------------------------------------------------------------------- -# Commons Daemon wrapper script. -# -# $Id: daemon.sh 1202058 2011-11-15 06:37:12Z mturk $ -# ----------------------------------------------------------------------------- -# -# resolve links - $0 may be a softlink -ARG0="$0" -while [ -h "$ARG0" ]; do - ls=`ls -ld "$ARG0"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - ARG0="$link" - else - ARG0="`dirname $ARG0`/$link" - fi -done -DIRNAME="`dirname $ARG0`" -PROGRAM="`basename $ARG0`" -while [ ".$1" != . ] -do - case "$1" in - --java-home ) - JAVA_HOME="$2" - shift; shift; - continue - ;; - --catalina-home ) - CATALINA_HOME="$2" - shift; shift; - continue - ;; - --catalina-base ) - CATALINA_BASE="$2" - shift; shift; - continue - ;; - --catalina-pid ) - CATALINA_PID="$2" - shift; shift; - continue - ;; - --tomcat-user ) - TOMCAT_USER="$2" - shift; shift; - continue - ;; - * ) - break - ;; - esac -done -# OS specific support (must be 'true' or 'false'). -cygwin=false; -darwin=false; -case "`uname`" in - CYGWIN*) - cygwin=true - ;; - Darwin*) - darwin=true - ;; -esac - -# Use the maximum available, or set MAX_FD != -1 to use that -test ".$MAX_FD" = . && MAX_FD="maximum" -# Setup parameters for running the jsvc -# -test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat -# Set JAVA_HOME to working JDK or JRE -# JAVA_HOME=/opt/jdk-1.6.0.22 -# If not set we'll try to guess the JAVA_HOME -# from java binary if on the PATH -# -if [ -z "$JAVA_HOME" ]; then - JAVA_BIN="`which java 2>/dev/null || type java 2>&1`" - test -x "$JAVA_BIN" && JAVA_HOME="`dirname $JAVA_BIN`" - test ".$JAVA_HOME" != . && JAVA_HOME=`cd "$JAVA_HOME/.." >/dev/null; pwd` -else - JAVA_BIN="$JAVA_HOME/bin/java" -fi - -# Only set CATALINA_HOME if not already set -test ".$CATALINA_HOME" = . && CATALINA_HOME=`cd "$DIRNAME/.." >/dev/null; pwd` -test ".$CATALINA_BASE" = . && CATALINA_BASE="$CATALINA_HOME" -test ".$CATALINA_MAIN" = . && CATALINA_MAIN=org.apache.catalina.startup.Bootstrap -test ".$JSVC" = . && JSVC="$CATALINA_BASE/bin/jsvc" - -# Ensure that any user defined CLASSPATH variables are not used on startup, -# but allow them to be specified in setenv.sh, in rare case when it is needed. -CLASSPATH= -JAVA_OPTS= -if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then - . "$CATALINA_BASE/bin/setenv.sh" -elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then - . "$CATALINA_HOME/bin/setenv.sh" -fi - -# Add on extra jar files to CLASSPATH -test ".$CLASSPATH" != . && CLASSPATH="${CLASSPATH}:" -CLASSPATH="$CLASSPATH$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-daemon.jar" - -test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina-daemon.out" -test ".$CATALINA_TMP" = . && CATALINA_TMP="$CATALINA_BASE/temp" - -# Add tomcat-juli.jar to classpath -# tomcat-juli.jar can be over-ridden per instance -if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then - CLASSPATH="$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar" -else - CLASSPATH="$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar" -fi -# Set juli LogManager config file if it is present and an override has not been issued -if [ -z "$LOGGING_CONFIG" ]; then - if [ -r "$CATALINA_BASE/conf/logging.properties" ]; then - LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" - else - # Bugzilla 45585 - LOGGING_CONFIG="-Dnop" - fi -fi - -test ".$LOGGING_MANAGER" = . && LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" -JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER" - -# Set -pidfile -test ".$CATALINA_PID" = . && CATALINA_PID="$CATALINA_BASE/logs/catalina-daemon.pid" - -# Increase the maximum file descriptors if we can -if [ "$cygwin" = "false" ]; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ "$?" -eq 0 ]; then - # Darwin does not allow RLIMIT_INFINITY on file soft limit - if [ "$darwin" = "true" -a "$MAX_FD_LIMIT" = "unlimited" ]; then - MAX_FD_LIMIT=`/usr/sbin/sysctl -n kern.maxfilesperproc` - fi - test ".$MAX_FD" = ".maximum" && MAX_FD="$MAX_FD_LIMIT" - ulimit -n $MAX_FD - if [ "$?" -ne 0 ]; then - echo "$PROGRAM: Could not set maximum file descriptor limit: $MAX_FD" - fi - else - echo "$PROGRAM: Could not query system maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# ----- Execute The Requested Command ----------------------------------------- -case "$1" in - run ) - shift - "$JSVC" $* \ - $JSVC_OPTS \ - -java-home "$JAVA_HOME" \ - -pidfile "$CATALINA_PID" \ - -wait 10 \ - -nodetach \ - -outfile "&1" \ - -errfile "&2" \ - -classpath "$CLASSPATH" \ - "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ - -Dcatalina.base="$CATALINA_BASE" \ - -Dcatalina.home="$CATALINA_HOME" \ - -Djava.io.tmpdir="$CATALINA_TMP" \ - $CATALINA_MAIN - exit $? - ;; - start ) - "$JSVC" $JSVC_OPTS \ - -java-home "$JAVA_HOME" \ - -user $TOMCAT_USER \ - -pidfile "$CATALINA_PID" \ - -wait 10 \ - -outfile "$CATALINA_OUT" \ - -errfile "&1" \ - -classpath "$CLASSPATH" \ - "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ - -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ - -Dcatalina.base="$CATALINA_BASE" \ - -Dcatalina.home="$CATALINA_HOME" \ - -Djava.io.tmpdir="$CATALINA_TMP" \ - $CATALINA_MAIN - exit $? - ;; - stop ) - "$JSVC" $JSVC_OPTS \ - -stop \ - -pidfile "$CATALINA_PID" \ - -classpath "$CLASSPATH" \ - -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ - -Dcatalina.base="$CATALINA_BASE" \ - -Dcatalina.home="$CATALINA_HOME" \ - -Djava.io.tmpdir="$CATALINA_TMP" \ - $CATALINA_MAIN - exit $? - ;; - version ) - "$JSVC" \ - -java-home "$JAVA_HOME" \ - -pidfile "$CATALINA_PID" \ - -classpath "$CLASSPATH" \ - -errfile "&2" \ - -version \ - -check \ - $CATALINA_MAIN - if [ "$?" = 0 ]; then - "$JAVA_BIN" \ - -classpath "$CATALINA_HOME/lib/catalina.jar" \ - org.apache.catalina.util.ServerInfo - fi - exit $? - ;; - * ) - echo "Unknown command: \`$1'" - echo "Usage: $PROGRAM ( commands ... )" - echo "commands:" - echo " run Start Tomcat without detaching from console" - echo " start Start Tomcat" - echo " stop Stop Tomcat" - echo " version What version of commons daemon and Tomcat" - echo " are you running?" - exit 1 - ;; -esac diff --git a/bundledApps/tomcat/bin/digest.bat b/bundledApps/tomcat/bin/digest.bat deleted file mode 100644 index 41491dca..00000000 --- a/bundledApps/tomcat/bin/digest.bat +++ /dev/null @@ -1,59 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Script to digest password using the algorithm specified -rem -rem $Id: digest.bat 1137559 2011-06-20 09:27:30Z rjung $ -rem --------------------------------------------------------------------------- - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\tool-wrapper.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome -if exist "%CATALINA_HOME%\bin\tool-wrapper.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -set "EXECUTABLE=%CATALINA_HOME%\bin\tool-wrapper.bat" - -rem Check that target executable exists -if exist "%EXECUTABLE%" goto okExec -echo Cannot find "%EXECUTABLE%" -echo This file is needed to run this program -goto end -:okExec - -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -call "%EXECUTABLE%" -server org.apache.catalina.realm.RealmBase %CMD_LINE_ARGS% - -:end diff --git a/bundledApps/tomcat/bin/digest.sh b/bundledApps/tomcat/bin/digest.sh deleted file mode 100644 index 7aa0c404..00000000 --- a/bundledApps/tomcat/bin/digest.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Script to digest password using the algorithm specified -# -# $Id: digest.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# Better OS/400 detection: see Bugzilla 31132 -os400=false -case "`uname`" in -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -PRGDIR=`dirname "$PRG"` -EXECUTABLE=tool-wrapper.sh - -# Check that target executable exists -if $os400; then - # -x will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - eval -else - if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then - echo "Cannot find $PRGDIR/$EXECUTABLE" - echo "The file is absent or does not have execute permission" - echo "This file is needed to run this program" - exit 1 - fi -fi - -exec "$PRGDIR"/"$EXECUTABLE" -server org.apache.catalina.realm.RealmBase "$@" diff --git a/bundledApps/tomcat/bin/service.bat b/bundledApps/tomcat/bin/service.bat deleted file mode 100644 index 459300b2..00000000 --- a/bundledApps/tomcat/bin/service.bat +++ /dev/null @@ -1,166 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem NT Service Install/Uninstall script -rem -rem Options -rem install Install the service using Tomcat7 as service name. -rem Service is installed using default settings. -rem remove Remove the service from the System. -rem -rem name (optional) If the second argument is present it is considered -rem to be new service name -rem -rem $Id: service.bat 1000718 2010-09-24 06:00:00Z mturk $ -rem --------------------------------------------------------------------------- - -set "SELF=%~dp0%service.bat" -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%cd%" -if exist "%CATALINA_HOME%\bin\tomcat7.exe" goto okHome -rem CD to the upper dir -cd .. -set "CATALINA_HOME=%cd%" -:gotHome -if exist "%CATALINA_HOME%\bin\tomcat7.exe" goto okHome -echo The tomcat.exe was not found... -echo The CATALINA_HOME environment variable is not defined correctly. -echo This environment variable is needed to run this program -goto end -:okHome -rem Make sure prerequisite environment variables are set -if not "%JAVA_HOME%" == "" goto gotJdkHome -if not "%JRE_HOME%" == "" goto gotJreHome -echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined -echo Service will try to guess them from the registry. -goto okJavaHome -:gotJreHome -if not exist "%JRE_HOME%\bin\java.exe" goto noJavaHome -if not exist "%JRE_HOME%\bin\javaw.exe" goto noJavaHome -goto okJavaHome -:gotJdkHome -if not exist "%JAVA_HOME%\jre\bin\java.exe" goto noJavaHome -if not exist "%JAVA_HOME%\jre\bin\javaw.exe" goto noJavaHome -if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome -if not "%JRE_HOME%" == "" goto okJavaHome -set "JRE_HOME=%JAVA_HOME%\jre" -goto okJavaHome -:noJavaHome -echo The JAVA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -echo NB: JAVA_HOME should point to a JDK not a JRE -goto end -:okJavaHome -if not "%CATALINA_BASE%" == "" goto gotBase -set "CATALINA_BASE=%CATALINA_HOME%" -:gotBase - -set "EXECUTABLE=%CATALINA_HOME%\bin\tomcat7.exe" - -rem Set default Service name -set SERVICE_NAME=Tomcat7 -set PR_DISPLAYNAME=Apache Tomcat 7 - -if "x%1x" == "xx" goto displayUsage -set SERVICE_CMD=%1 -shift -if "x%1x" == "xx" goto checkServiceCmd -:checkUser -if "x%1x" == "x/userx" goto runAsUser -if "x%1x" == "x--userx" goto runAsUser -set SERVICE_NAME=%1 -set PR_DISPLAYNAME=Apache Tomcat %1 -shift -if "x%1x" == "xx" goto checkServiceCmd -goto checkUser -:runAsUser -shift -if "x%1x" == "xx" goto displayUsage -set SERVICE_USER=%1 -shift -runas /env /savecred /user:%SERVICE_USER% "%COMSPEC% /K \"%SELF%\" %SERVICE_CMD% %SERVICE_NAME%" -goto end -:checkServiceCmd -if /i %SERVICE_CMD% == install goto doInstall -if /i %SERVICE_CMD% == remove goto doRemove -if /i %SERVICE_CMD% == uninstall goto doRemove -echo Unknown parameter "%1" -:displayUsage -echo. -echo Usage: service.bat install/remove [service_name] [/user username] -goto end - -:doRemove -rem Remove the service -"%EXECUTABLE%" //DS//%SERVICE_NAME% -if not errorlevel 1 goto removed -echo Failed removing '%SERVICE_NAME%' service -goto end -:removed -echo The service '%SERVICE_NAME%' has been removed -goto end - -:doInstall -rem Install the service -echo Installing the service '%SERVICE_NAME%' ... -echo Using CATALINA_HOME: "%CATALINA_HOME%" -echo Using CATALINA_BASE: "%CATALINA_BASE%" -echo Using JAVA_HOME: "%JAVA_HOME%" -echo Using JRE_HOME: "%JRE_HOME%" - -rem Use the environment variables as an example -rem Each command line option is prefixed with PR_ - -set PR_DESCRIPTION=Apache Tomcat 7.0.30 Server - http://tomcat.apache.org/ -set "PR_INSTALL=%EXECUTABLE%" -set "PR_LOGPATH=%CATALINA_BASE%\logs" -set "PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\tomcat-juli.jar" -rem Set the server jvm from JAVA_HOME -set "PR_JVM=%JRE_HOME%\bin\server\jvm.dll" -if exist "%PR_JVM%" goto foundJvm -rem Set the client jvm from JAVA_HOME -set "PR_JVM=%JRE_HOME%\bin\client\jvm.dll" -if exist "%PR_JVM%" goto foundJvm -set PR_JVM=auto -:foundJvm -echo Using JVM: "%PR_JVM%" -"%EXECUTABLE%" //IS//%SERVICE_NAME% --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop -if not errorlevel 1 goto installed -echo Failed installing '%SERVICE_NAME%' service -goto end -:installed -rem Clear the environment variables. They are not needed any more. -set PR_DISPLAYNAME= -set PR_DESCRIPTION= -set PR_INSTALL= -set PR_LOGPATH= -set PR_CLASSPATH= -set PR_JVM= -rem Set extra parameters -"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed" --StartMode jvm --StopMode jvm -rem More extra parameters -set "PR_LOGPATH=%CATALINA_BASE%\logs" -set PR_STDOUTPUT=auto -set PR_STDERROR=auto -"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" --JvmMs 128 --JvmMx 256 -echo The service '%SERVICE_NAME%' has been installed. - -:end -cd "%CURRENT_DIR%" diff --git a/bundledApps/tomcat/bin/setclasspath.bat b/bundledApps/tomcat/bin/setclasspath.bat deleted file mode 100644 index e29b41a6..00000000 --- a/bundledApps/tomcat/bin/setclasspath.bat +++ /dev/null @@ -1,88 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -rem --------------------------------------------------------------------------- -rem Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings -rem are valid and consistent with the selected start-up options and set up the -rem endorsed directory. -rem -rem $Id: setclasspath.bat 1202062 2011-11-15 06:50:02Z mturk $ -rem --------------------------------------------------------------------------- - -rem Make sure prerequisite environment variables are set - -rem In debug mode we need a real JDK (JAVA_HOME) -if ""%1"" == ""debug"" goto needJavaHome - -rem Otherwise either JRE or JDK are fine -if not "%JRE_HOME%" == "" goto gotJreHome -if not "%JAVA_HOME%" == "" goto gotJavaHome -echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined -echo At least one of these environment variable is needed to run this program -goto exit - -:needJavaHome -rem Check if we have a usable JDK -if "%JAVA_HOME%" == "" goto noJavaHome -if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome -if not exist "%JAVA_HOME%\bin\javaw.exe" goto noJavaHome -if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome -if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome -set "JRE_HOME=%JAVA_HOME%" -goto okJava - -:noJavaHome -echo The JAVA_HOME environment variable is not defined correctly. -echo It is needed to run this program in debug mode. -echo NB: JAVA_HOME should point to a JDK not a JRE. -goto exit - -:gotJavaHome -rem No JRE given, use JAVA_HOME as JRE_HOME -set "JRE_HOME=%JAVA_HOME%" - -:gotJreHome -rem Check if we have a usable JRE -if not exist "%JRE_HOME%\bin\java.exe" goto noJreHome -if not exist "%JRE_HOME%\bin\javaw.exe" goto noJreHome -goto okJava - -:noJreHome -rem Needed at least a JRE -echo The JRE_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto exit - -:okJava -rem Don't override the endorsed dir if the user has set it previously -if not "%JAVA_ENDORSED_DIRS%" == "" goto gotEndorseddir -rem Set the default -Djava.endorsed.dirs argument -set "JAVA_ENDORSED_DIRS=%CATALINA_HOME%\endorsed" -:gotEndorseddir - -rem Set standard command for invoking Java. -rem Note that NT requires a window name argument when using start. -rem Also note the quoting as JAVA_HOME may contain spaces. -set _RUNJAVA="%JRE_HOME%\bin\java" -set _RUNJDB="%JAVA_HOME%\bin\jdb" - -goto end - -:exit -exit /b 1 - -:end -exit /b 0 diff --git a/bundledApps/tomcat/bin/setclasspath.sh b/bundledApps/tomcat/bin/setclasspath.sh deleted file mode 100644 index 22f164d2..00000000 --- a/bundledApps/tomcat/bin/setclasspath.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings -# are valid and consistent with the selected start-up options and set up the -# endorsed directory. -# -# $Id: setclasspath.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# Make sure prerequisite environment variables are set -if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then - # Bugzilla 37284 (reviewed). - if $darwin; then - if [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then - export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" - fi - else - JAVA_PATH=`which java 2>/dev/null` - if [ "x$JAVA_PATH" != "x" ]; then - JAVA_PATH=`dirname $JAVA_PATH 2>/dev/null` - JRE_HOME=`dirname $JAVA_PATH 2>/dev/null` - fi - if [ "x$JRE_HOME" = "x" ]; then - # XXX: Should we try other locations? - if [ -x /usr/bin/java ]; then - JRE_HOME=/usr - fi - fi - fi - if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then - echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined" - echo "At least one of these environment variable is needed to run this program" - exit 1 - fi -fi -if [ -z "$JAVA_HOME" -a "$1" = "debug" ]; then - echo "JAVA_HOME should point to a JDK in order to run in debug mode." - exit 1 -fi -if [ -z "$JRE_HOME" ]; then - JRE_HOME="$JAVA_HOME" -fi - -# If we're running under jdb, we need a full jdk. -if [ "$1" = "debug" ] ; then - if [ "$os400" = "true" ]; then - if [ ! -x "$JAVA_HOME"/bin/java -o ! -x "$JAVA_HOME"/bin/javac ]; then - echo "The JAVA_HOME environment variable is not defined correctly" - echo "This environment variable is needed to run this program" - echo "NB: JAVA_HOME should point to a JDK not a JRE" - exit 1 - fi - else - if [ ! -x "$JAVA_HOME"/bin/java -o ! -x "$JAVA_HOME"/bin/jdb -o ! -x "$JAVA_HOME"/bin/javac ]; then - echo "The JAVA_HOME environment variable is not defined correctly" - echo "This environment variable is needed to run this program" - echo "NB: JAVA_HOME should point to a JDK not a JRE" - exit 1 - fi - fi -fi - -# Don't override the endorsed dir if the user has set it previously -if [ -z "$JAVA_ENDORSED_DIRS" ]; then - # Set the default -Djava.endorsed.dirs argument - JAVA_ENDORSED_DIRS="$CATALINA_HOME"/endorsed -fi - -# Set standard commands for invoking Java. -_RUNJAVA="$JRE_HOME"/bin/java -if [ "$os400" != "true" ]; then - _RUNJDB="$JAVA_HOME"/bin/jdb -fi diff --git a/bundledApps/tomcat/bin/shutdown.bat b/bundledApps/tomcat/bin/shutdown.bat deleted file mode 100644 index 0f309511..00000000 --- a/bundledApps/tomcat/bin/shutdown.bat +++ /dev/null @@ -1,59 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Stop script for the CATALINA Server -rem -rem $Id: shutdown.bat 895392 2010-01-03 14:02:31Z kkolinko $ -rem --------------------------------------------------------------------------- - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" - -rem Check that target executable exists -if exist "%EXECUTABLE%" goto okExec -echo Cannot find "%EXECUTABLE%" -echo This file is needed to run this program -goto end -:okExec - -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -call "%EXECUTABLE%" stop %CMD_LINE_ARGS% - -:end diff --git a/bundledApps/tomcat/bin/shutdown.sh b/bundledApps/tomcat/bin/shutdown.sh deleted file mode 100644 index ca243f69..00000000 --- a/bundledApps/tomcat/bin/shutdown.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Stop script for the CATALINA Server -# -# $Id: shutdown.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# Better OS/400 detection: see Bugzilla 31132 -os400=false -case "`uname`" in -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -PRGDIR=`dirname "$PRG"` -EXECUTABLE=catalina.sh - -# Check that target executable exists -if $os400; then - # -x will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - eval -else - if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then - echo "Cannot find $PRGDIR/$EXECUTABLE" - echo "The file is absent or does not have execute permission" - echo "This file is needed to run this program" - exit 1 - fi -fi - -exec "$PRGDIR"/"$EXECUTABLE" stop "$@" diff --git a/bundledApps/tomcat/bin/startup.bat b/bundledApps/tomcat/bin/startup.bat deleted file mode 100644 index d9ce1acd..00000000 --- a/bundledApps/tomcat/bin/startup.bat +++ /dev/null @@ -1,59 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Start script for the CATALINA Server -rem -rem $Id: startup.bat 895392 2010-01-03 14:02:31Z kkolinko $ -rem --------------------------------------------------------------------------- - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" - -rem Check that target executable exists -if exist "%EXECUTABLE%" goto okExec -echo Cannot find "%EXECUTABLE%" -echo This file is needed to run this program -goto end -:okExec - -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -call "%EXECUTABLE%" start %CMD_LINE_ARGS% - -:end diff --git a/bundledApps/tomcat/bin/startup.sh b/bundledApps/tomcat/bin/startup.sh deleted file mode 100755 index 3fd902da..00000000 --- a/bundledApps/tomcat/bin/startup.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Start Script for the CATALINA Server -# -# $Id: startup.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# Better OS/400 detection: see Bugzilla 31132 -os400=false -case "`uname`" in -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -PRGDIR=`dirname "$PRG"` -EXECUTABLE=catalina.sh - -# Check that target executable exists -if $os400; then - # -x will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - eval -else - if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then - echo "Cannot find $PRGDIR/$EXECUTABLE" - echo "The file is absent or does not have execute permission" - echo "This file is needed to run this program" - exit 1 - fi -fi - -exec "$PRGDIR"/"$EXECUTABLE" start "$@" diff --git a/bundledApps/tomcat/bin/tcnative-1.dll b/bundledApps/tomcat/bin/tcnative-1.dll deleted file mode 100644 index 90e3e787..00000000 Binary files a/bundledApps/tomcat/bin/tcnative-1.dll and /dev/null differ diff --git a/bundledApps/tomcat/bin/tomcat-juli.jar b/bundledApps/tomcat/bin/tomcat-juli.jar deleted file mode 100644 index e46bd205..00000000 Binary files a/bundledApps/tomcat/bin/tomcat-juli.jar and /dev/null differ diff --git a/bundledApps/tomcat/bin/tomcat-native.tar.gz b/bundledApps/tomcat/bin/tomcat-native.tar.gz deleted file mode 100644 index d7cf8ab8..00000000 Binary files a/bundledApps/tomcat/bin/tomcat-native.tar.gz and /dev/null differ diff --git a/bundledApps/tomcat/bin/tool-wrapper.bat b/bundledApps/tomcat/bin/tool-wrapper.bat deleted file mode 100644 index 0d4dae61..00000000 --- a/bundledApps/tomcat/bin/tool-wrapper.bat +++ /dev/null @@ -1,97 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Wrapper script for command line tools -rem -rem Environment Variable Prerequisites -rem -rem CATALINA_HOME May point at your Catalina "build" directory. -rem -rem TOOL_OPTS (Optional) Java runtime options. -rem -rem JAVA_HOME Must point at your Java Development Kit installation. -rem Using JRE_HOME instead works as well. -rem -rem JRE_HOME Must point at your Java Runtime installation. -rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME -rem are both set, JRE_HOME is used. -rem -rem JAVA_OPTS (Optional) Java runtime options. -rem -rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories -rem containing some jars in order to allow replacement of APIs -rem created outside of the JCP (i.e. DOM and SAX from W3C). -rem It can also be used to update the XML parser implementation. -rem Defaults to $CATALINA_HOME/endorsed. -rem -rem $Id: tool-wrapper.bat 1138835 2011-06-23 11:27:57Z rjung $ -rem --------------------------------------------------------------------------- - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\tool-wrapper.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome -if exist "%CATALINA_HOME%\bin\tool-wrapper.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -rem Ensure that any user defined CLASSPATH variables are not used on startup, -rem but allow them to be specified in setenv.bat, in rare case when it is needed. -set CLASSPATH= - -rem Get standard environment variables -if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat" - -rem Get standard Java environment variables -if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath -echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat" -echo This file is needed to run this program -goto end -:okSetclasspath -call "%CATALINA_HOME%\bin\setclasspath.bat" %1 -if errorlevel 1 goto end - -rem Add on extra jar files to CLASSPATH -rem Note that there are no quotes as we do not want to introduce random -rem quotes into the CLASSPATH -if "%CLASSPATH%" == "" goto emptyClasspath -set "CLASSPATH=%CLASSPATH%;" -:emptyClasspath -set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_HOME%\bin\tomcat-juli.jar;%CATALINA_HOME%\lib\servlet-api.jar" - -set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager - -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -%_RUNJAVA% %JAVA_OPTS% %TOOL_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.home="%CATALINA_HOME%" org.apache.catalina.startup.Tool %CMD_LINE_ARGS% - -:end diff --git a/bundledApps/tomcat/bin/tool-wrapper.sh b/bundledApps/tomcat/bin/tool-wrapper.sh deleted file mode 100644 index 8979209b..00000000 --- a/bundledApps/tomcat/bin/tool-wrapper.sh +++ /dev/null @@ -1,141 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Wrapper script for command line tools -# -# Environment Variable Prerequisites -# -# CATALINA_HOME May point at your Catalina "build" directory. -# -# TOOL_OPTS (Optional) Java runtime options. -# -# JAVA_HOME Must point at your Java Development Kit installation. -# Using JRE_HOME instead works as well. -# -# JRE_HOME Must point at your Java Runtime installation. -# Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME -# are both set, JRE_HOME is used. -# -# JAVA_OPTS (Optional) Java runtime options. -# -# JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories -# containing some jars in order to allow replacement of APIs -# created outside of the JCP (i.e. DOM and SAX from W3C). -# It can also be used to update the XML parser implementation. -# Defaults to $CATALINA_HOME/endorsed. -# -# $Id: tool-wrapper.sh 1138835 2011-06-23 11:27:57Z rjung $ -# ----------------------------------------------------------------------------- - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false -darwin=false -os400=false -case "`uname`" in -CYGWIN*) cygwin=true;; -Darwin*) darwin=true;; -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -# Get standard environment variables -PRGDIR=`dirname "$PRG"` - -# Only set CATALINA_HOME if not already set -[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` - -# Ensure that any user defined CLASSPATH variables are not used on startup, -# but allow them to be specified in setenv.sh, in rare case when it is needed. -CLASSPATH= - -if [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then - . "$CATALINA_HOME/bin/setenv.sh" -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"` - [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"` - [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For OS400 -if $os400; then - # Set job priority to standard for interactive (interactive - 6) by using - # the interactive priority - 6, the helper threads that respond to requests - # will be running at the same priority as interactive jobs. - COMMAND='chgjob job('$JOBNAME') runpty(6)' - system $COMMAND - - # Enable multi threading - export QIBM_MULTI_THREADED=Y -fi - -# Get standard Java environment variables -if $os400; then - # -r will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - . "$CATALINA_HOME"/bin/setclasspath.sh -else - if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then - . "$CATALINA_HOME"/bin/setclasspath.sh - else - echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh" - echo "This file is needed to run this program" - exit 1 - fi -fi - -# Add on extra jar files to CLASSPATH -if [ ! -z "$CLASSPATH" ] ; then - CLASSPATH="$CLASSPATH": -fi -CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar:"$CATALINA_HOME"/bin/tomcat-juli.jar:"$CATALINA_HOME"/lib/servlet-api.jar - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"` - JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"` - CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"` - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"` -fi - -JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" - -# ----- Execute The Requested Command ----------------------------------------- - -exec "$_RUNJAVA" $JAVA_OPTS $TOOL_OPTS \ - -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ - -Dcatalina.home="$CATALINA_HOME" \ - org.apache.catalina.startup.Tool "$@" diff --git a/bundledApps/tomcat/bin/version.bat b/bundledApps/tomcat/bin/version.bat deleted file mode 100644 index 3a67165b..00000000 --- a/bundledApps/tomcat/bin/version.bat +++ /dev/null @@ -1,59 +0,0 @@ -@echo off -rem Licensed to the Apache Software Foundation (ASF) under one or more -rem contributor license agreements. See the NOTICE file distributed with -rem this work for additional information regarding copyright ownership. -rem The ASF licenses this file to You under the Apache License, Version 2.0 -rem (the "License"); you may not use this file except in compliance with -rem the License. You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. - -if "%OS%" == "Windows_NT" setlocal -rem --------------------------------------------------------------------------- -rem Version script for the CATALINA Server -rem -rem $Id: version.bat 895392 2010-01-03 14:02:31Z kkolinko $ -rem --------------------------------------------------------------------------- - -rem Guess CATALINA_HOME if not defined -set "CURRENT_DIR=%cd%" -if not "%CATALINA_HOME%" == "" goto gotHome -set "CATALINA_HOME=%CURRENT_DIR%" -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -cd .. -set "CATALINA_HOME=%cd%" -cd "%CURRENT_DIR%" -:gotHome -if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome -echo The CATALINA_HOME environment variable is not defined correctly -echo This environment variable is needed to run this program -goto end -:okHome - -set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" - -rem Check that target executable exists -if exist "%EXECUTABLE%" goto okExec -echo Cannot find "%EXECUTABLE%" -echo This file is needed to run this program -goto end -:okExec - -rem Get remaining unshifted command line arguments and save them in the -set CMD_LINE_ARGS= -:setArgs -if ""%1""=="""" goto doneSetArgs -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto setArgs -:doneSetArgs - -call "%EXECUTABLE%" version %CMD_LINE_ARGS% - -:end diff --git a/bundledApps/tomcat/bin/version.sh b/bundledApps/tomcat/bin/version.sh deleted file mode 100644 index c664f750..00000000 --- a/bundledApps/tomcat/bin/version.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# Version Script for the CATALINA Server -# -# $Id: version.sh 1202062 2011-11-15 06:50:02Z mturk $ -# ----------------------------------------------------------------------------- - -# Better OS/400 detection: see Bugzilla 31132 -os400=false -case "`uname`" in -OS400*) os400=true;; -esac - -# resolve links - $0 may be a softlink -PRG="$0" - -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done - -PRGDIR=`dirname "$PRG"` -EXECUTABLE=catalina.sh - -# Check that target executable exists -if $os400; then - # -x will Only work on the os400 if the files are: - # 1. owned by the user - # 2. owned by the PRIMARY group of the user - # this will not work if the user belongs in secondary groups - eval -else - if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then - echo "Cannot find $PRGDIR/$EXECUTABLE" - echo "The file is absent or does not have execute permission" - echo "This file is needed to run this program" - exit 1 - fi -fi - -exec "$PRGDIR"/"$EXECUTABLE" version "$@" diff --git a/bundledApps/tomcat/catalina_start.bat b/bundledApps/tomcat/catalina_start.bat deleted file mode 100644 index 7a44cf87..00000000 --- a/bundledApps/tomcat/catalina_start.bat +++ /dev/null @@ -1,45 +0,0 @@ -@echo off -:::::::::::::::::::::::::::::::::::: -:: Set JAVA_HOME and :: -:::::::::::::::::::::::::::::::::::: - -IF EXIST tomcat\logs\catalina.pid ( - del /F/Q tomcat\logs\catalina.pid -) - -echo. -echo [WAIL]: Searching JDK HOME with reg query ... -set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit - -reg query "%KeyName%" /s -if %ERRORLEVEL% == 1 ( - echo . [WAIL]: Cannot find current JDK installation! - echo . [WAIL]: Cannot set JAVA_HOME. Aborting ... - goto :END -) - -set "CURRENT_DIR=%cd%" -set "CATALINA_HOME=%CURRENT_DIR%" - -:: only for windows 32 bit if you have problems with the tcnative-1.dll -:: set CATALINA_OPTS=-Djava.library.path="%CATALINA_HOME%\bin" - -set Cmd=reg query "%KeyName%" /s -for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j - -echo. -echo [WAIL]: Seems fine! -echo [WAIL]: Set JAVA_HOME : %JAVA_HOME% -echo [WAIL]: Set CATALINA_HOME : %CATALINA_HOME% -echo. - -if %ERRORLEVEL% == 0 ( -echo run > logs\catalina.pid -) - -"%CATALINA_HOME%\bin\catalina.bat" run - - -:END -echo done. -pause diff --git a/bundledApps/tomcat/catalina_stop.bat b/bundledApps/tomcat/catalina_stop.bat deleted file mode 100644 index 3849698e..00000000 --- a/bundledApps/tomcat/catalina_stop.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo off -:::::::::::::::::::::::::::::::::::: -:: Set JAVA_HOME and :: -:::::::::::::::::::::::::::::::::::: - - -echo. -echo [WAIL]: Searching JDK HOME with reg query ... -set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit - -reg query "%KeyName%" /s -if %ERRORLEVEL% == 1 ( - echo . [WAIL]: Cannot find current JDK installation! - echo . [WAIL]: Cannot set JAVA_HOME. Aborting ... - goto :END -) - -set "CURRENT_DIR=%cd%" -set "CATALINA_HOME=%CURRENT_DIR%" - -set Cmd=reg query "%KeyName%" /s -for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j - -echo. -echo [WAIL]: Seems fine! -echo [WAIL]: Using JAVA_HOME : %JAVA_HOME% -echo [WAIL]: Using CATALINA_HOME : %CATALINA_HOME% -echo. - -if %ERRORLEVEL% == 0 { -del /F/Q logs\catalina.pid -} - -"%CATALINA_HOME%\bin\catalina.bat" stop - - -:END -echo done. -pause diff --git a/bundledApps/tomcat/conf/catalina.policy b/bundledApps/tomcat/conf/catalina.policy deleted file mode 100644 index a56dbef4..00000000 --- a/bundledApps/tomcat/conf/catalina.policy +++ /dev/null @@ -1,249 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// ============================================================================ -// catalina.policy - Security Policy Permissions for Tomcat 7 -// -// This file contains a default set of security policies to be enforced (by the -// JVM) when Catalina is executed with the "-security" option. In addition -// to the permissions granted here, the following additional permissions are -// granted to each web application: -// -// * Read access to the web application's document root directory -// * Read, write and delete access to the web application's working directory -// -// $Id: catalina.policy 1347048 2012-06-06 18:47:00Z markt $ -// ============================================================================ - - -// ========== SYSTEM CODE PERMISSIONS ========================================= - - -// These permissions apply to javac -grant codeBase "file:${java.home}/lib/-" { - permission java.security.AllPermission; -}; - -// These permissions apply to all shared system extensions -grant codeBase "file:${java.home}/jre/lib/ext/-" { - permission java.security.AllPermission; -}; - -// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre -grant codeBase "file:${java.home}/../lib/-" { - permission java.security.AllPermission; -}; - -// These permissions apply to all shared system extensions when -// ${java.home} points at $JAVA_HOME/jre -grant codeBase "file:${java.home}/lib/ext/-" { - permission java.security.AllPermission; -}; - - -// ========== CATALINA CODE PERMISSIONS ======================================= - - -// These permissions apply to the daemon code -grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" { - permission java.security.AllPermission; -}; - -// These permissions apply to the logging API -// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home}, -// update this section accordingly. -// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..} -grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" { - permission java.io.FilePermission - "${java.home}${file.separator}lib${file.separator}logging.properties", "read"; - - permission java.io.FilePermission - "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read"; - permission java.io.FilePermission - "${catalina.base}${file.separator}logs", "read, write"; - permission java.io.FilePermission - "${catalina.base}${file.separator}logs${file.separator}*", "read, write"; - - permission java.lang.RuntimePermission "shutdownHooks"; - permission java.lang.RuntimePermission "getClassLoader"; - permission java.lang.RuntimePermission "setContextClassLoader"; - - permission java.util.logging.LoggingPermission "control"; - - permission java.util.PropertyPermission "java.util.logging.config.class", "read"; - permission java.util.PropertyPermission "java.util.logging.config.file", "read"; - permission java.util.PropertyPermission "catalina.base", "read"; - permission java.util.PropertyPermission - "org.apache.juli.logging.UserDataHelper.CONFIG", "read"; - permission java.util.PropertyPermission - "org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME", "read"; - - // Note: To enable per context logging configuration, permit read access to - // the appropriate file. Be sure that the logging configuration is - // secure before enabling such access. - // E.g. for the examples web application (uncomment and unwrap - // the following to be on a single line): - // permission java.io.FilePermission "${catalina.base}${file.separator} - // webapps${file.separator}examples${file.separator}WEB-INF - // ${file.separator}classes${file.separator}logging.properties", "read"; -}; - -// These permissions apply to the server startup code -grant codeBase "file:${catalina.home}/bin/bootstrap.jar" { - permission java.security.AllPermission; -}; - -// These permissions apply to the servlet API classes -// and those that are shared across all class loaders -// located in the "lib" directory -grant codeBase "file:${catalina.home}/lib/-" { - permission java.security.AllPermission; -}; - - -// If using a per instance lib directory, i.e. ${catalina.base}/lib, -// then the following permission will need to be uncommented -// grant codeBase "file:${catalina.base}/lib/-" { -// permission java.security.AllPermission; -// }; - - -// ========== WEB APPLICATION PERMISSIONS ===================================== - - -// These permissions are granted by default to all web applications -// In addition, a web application will be given a read FilePermission -// and JndiPermission for all files and directories in its document root. -grant { - // Required for JNDI lookup of named JDBC DataSource's and - // javamail named MimePart DataSource used to send mail - permission java.util.PropertyPermission "java.home", "read"; - permission java.util.PropertyPermission "java.naming.*", "read"; - permission java.util.PropertyPermission "javax.sql.*", "read"; - - // OS Specific properties to allow read access - permission java.util.PropertyPermission "os.name", "read"; - permission java.util.PropertyPermission "os.version", "read"; - permission java.util.PropertyPermission "os.arch", "read"; - permission java.util.PropertyPermission "file.separator", "read"; - permission java.util.PropertyPermission "path.separator", "read"; - permission java.util.PropertyPermission "line.separator", "read"; - - // JVM properties to allow read access - permission java.util.PropertyPermission "java.version", "read"; - permission java.util.PropertyPermission "java.vendor", "read"; - permission java.util.PropertyPermission "java.vendor.url", "read"; - permission java.util.PropertyPermission "java.class.version", "read"; - permission java.util.PropertyPermission "java.specification.version", "read"; - permission java.util.PropertyPermission "java.specification.vendor", "read"; - permission java.util.PropertyPermission "java.specification.name", "read"; - - permission java.util.PropertyPermission "java.vm.specification.version", "read"; - permission java.util.PropertyPermission "java.vm.specification.vendor", "read"; - permission java.util.PropertyPermission "java.vm.specification.name", "read"; - permission java.util.PropertyPermission "java.vm.version", "read"; - permission java.util.PropertyPermission "java.vm.vendor", "read"; - permission java.util.PropertyPermission "java.vm.name", "read"; - - // Required for OpenJMX - permission java.lang.RuntimePermission "getAttribute"; - - // Allow read of JAXP compliant XML parser debug - permission java.util.PropertyPermission "jaxp.debug", "read"; - - // All JSPs need to be able to read this package - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat"; - - // Precompiled JSPs need access to these packages. - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime"; - permission java.lang.RuntimePermission - "accessClassInPackage.org.apache.jasper.runtime.*"; - - // Precompiled JSPs need access to these system properties. - permission java.util.PropertyPermission - "org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER", "read"; - permission java.util.PropertyPermission - "org.apache.el.parser.COERCE_TO_ZERO", "read"; - - // The cookie code needs these. - permission java.util.PropertyPermission - "org.apache.catalina.STRICT_SERVLET_COMPLIANCE", "read"; - permission java.util.PropertyPermission - "org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING", "read"; - permission java.util.PropertyPermission - "org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR", "read"; - - // Applications using Comet need to be able to access this package - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.comet"; - - // Applications using WebSocket need to be able to access this package - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.websocket"; -}; - - -// The Manager application needs access to the following packages to support the -// session display functionality. These settings support the following -// configurations: -// - default CATALINA_HOME == CATALINA_BASE -// - CATALINA_HOME != CATALINA_BASE, per instance Manager in CATALINA_BASE -// - CATALINA_HOME != CATALINA_BASE, shared Manager in CATALINA_HOME -grant codeBase "file:${catalina.base}/webapps/manager/-" { - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util"; -}; -grant codeBase "file:${catalina.home}/webapps/manager/-" { - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util"; - permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util"; -}; - -// You can assign additional permissions to particular web applications by -// adding additional "grant" entries here, based on the code base for that -// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files. -// -// Different permissions can be granted to JSP pages, classes loaded from -// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/ -// directory, or even to individual jar files in the /WEB-INF/lib/ directory. -// -// For instance, assume that the standard "examples" application -// included a JDBC driver that needed to establish a network connection to the -// corresponding database and used the scrape taglib to get the weather from -// the NOAA web server. You might create a "grant" entries like this: -// -// The permissions granted to the context root directory apply to JSP pages. -// grant codeBase "file:${catalina.base}/webapps/examples/-" { -// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect"; -// permission java.net.SocketPermission "*.noaa.gov:80", "connect"; -// }; -// -// The permissions granted to the context WEB-INF/classes directory -// grant codeBase "file:${catalina.base}/webapps/examples/WEB-INF/classes/-" { -// }; -// -// The permission granted to your JDBC driver -// grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar!/-" { -// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect"; -// }; -// The permission granted to the scrape taglib -// grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/scrape.jar!/-" { -// permission java.net.SocketPermission "*.noaa.gov:80", "connect"; -// }; - diff --git a/bundledApps/tomcat/conf/catalina.properties b/bundledApps/tomcat/conf/catalina.properties deleted file mode 100644 index 9bad3839..00000000 --- a/bundledApps/tomcat/conf/catalina.properties +++ /dev/null @@ -1,138 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -# List of comma-separated packages that start with or equal this string -# will cause a security exception to be thrown when -# passed to checkPackageAccess unless the -# corresponding RuntimePermission ("accessClassInPackage."+package) has -# been granted. -package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. -# -# List of comma-separated packages that start with or equal this string -# will cause a security exception to be thrown when -# passed to checkPackageDefinition unless the -# corresponding RuntimePermission ("defineClassInPackage."+package) has -# been granted. -# -# by default, no packages are restricted for definition, and none of -# the class loaders supplied with the JDK call checkPackageDefinition. -# -package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. - -# -# -# List of comma-separated paths defining the contents of the "common" -# classloader. Prefixes should be used to define what is the repository type. -# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. -# If left as blank,the JVM system loader will be used as Catalina's "common" -# loader. -# Examples: -# "foo": Add this folder as a class repository -# "foo/*.jar": Add all the JARs of the specified folder as class -# repositories -# "foo/bar.jar": Add bar.jar as a class repository -common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar - -# -# List of comma-separated paths defining the contents of the "server" -# classloader. Prefixes should be used to define what is the repository type. -# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. -# If left as blank, the "common" loader will be used as Catalina's "server" -# loader. -# Examples: -# "foo": Add this folder as a class repository -# "foo/*.jar": Add all the JARs of the specified folder as class -# repositories -# "foo/bar.jar": Add bar.jar as a class repository -server.loader= - -# -# List of comma-separated paths defining the contents of the "shared" -# classloader. Prefixes should be used to define what is the repository type. -# Path may be relative to the CATALINA_BASE path or absolute. If left as blank, -# the "common" loader will be used as Catalina's "shared" loader. -# Examples: -# "foo": Add this folder as a class repository -# "foo/*.jar": Add all the JARs of the specified folder as class -# repositories -# "foo/bar.jar": Add bar.jar as a class repository -# Please note that for single jars, e.g. bar.jar, you need the URL form -# starting with file:. -shared.loader= - -# List of JAR files that should not be scanned using the JarScanner -# functionality. This is typically used to scan JARs for configuration -# information. JARs that do not contain such information may be excluded from -# the scan to speed up the scanning process. This is the default list. JARs on -# this list are excluded from all scans. Scan specific lists (to exclude JARs -# from individual scans) follow this. The list must be a comma separated list of -# JAR file names. -# The JARs listed below include: -# - Tomcat Bootstrap JARs -# - Tomcat API JARs -# - Catalina JARs -# - Jasper JARs -# - Tomcat JARs -# - Common non-Tomcat JARs -# - Sun JDK JARs -# - OpenJDK JARs -# - Apple JDK JARs -tomcat.util.scan.DefaultJarScanner.jarsToSkip=\ -bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\ -annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,\ -catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,\ -jasper.jar,jasper-el.jar,ecj-*.jar,\ -tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,\ -tomcat-jni.jar,tomcat-spdy.jar,\ -tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\ -tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\ -tomcat-jdbc.jar,\ -commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\ -commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\ -commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\ -commons-math*.jar,commons-pool*.jar,\ -jstl.jar,\ -geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\ -ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\ -jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\ -xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\ -access-bridge-64.jar,dnsns.jar,jaccess.jar,ldapsec.jar,localedata.jar,\ -sunjce_provider.jar,sunmscapi.jar,sunpkcs11.jar,jhall.jar,tools.jar,\ -sunec.jar,zipfs.jar,\ -gnome-java-bridge.jar,pulse-java.jar,\ -apple_provider.jar,AppleScriptEngine.jar,CoreAudio.jar,dns_sd.jar,\ -j3daudio.jar,j3dcore.jar,j3dutils.jar,jai_core.jar,jai_codec.jar,\ -mlibwrapper_jai.jar,MRJToolkit.jar,vecmath.jar,\ -junit.jar,junit-*.jar,ant-launcher.jar - -# Additional JARs (over and above the default JARs listed above) to skip when -# scanning for Servlet 3.0 pluggability features. These features include web -# fragments, annotations, SCIs and classes that match @HandlesTypes. The list -# must be a comma separated list of JAR file names. -org.apache.catalina.startup.ContextConfig.jarsToSkip= - -# Additional JARs (over and above the default JARs listed above) to skip when -# scanning for TLDs. The list must be a comma separated list of JAR file names. -org.apache.catalina.startup.TldConfig.jarsToSkip= - -# -# String cache configuration. -tomcat.util.buf.StringCache.byte.enabled=true -#tomcat.util.buf.StringCache.char.enabled=true -#tomcat.util.buf.StringCache.trainThreshold=500000 -#tomcat.util.buf.StringCache.cacheSize=5000 - -java.awt.headless=true \ No newline at end of file diff --git a/bundledApps/tomcat/conf/context.xml b/bundledApps/tomcat/conf/context.xml deleted file mode 100644 index e313459f..00000000 --- a/bundledApps/tomcat/conf/context.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - WEB-INF/web.xml - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/conf/logging.properties b/bundledApps/tomcat/conf/logging.properties deleted file mode 100644 index 90d7ea76..00000000 --- a/bundledApps/tomcat/conf/logging.properties +++ /dev/null @@ -1,64 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler - -.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler - -############################################################ -# Handler specific properties. -# Describes specific configuration info for Handlers. -############################################################ - -1catalina.org.apache.juli.FileHandler.level = FINE -1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs -1catalina.org.apache.juli.FileHandler.prefix = catalina. - -2localhost.org.apache.juli.FileHandler.level = FINE -2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs -2localhost.org.apache.juli.FileHandler.prefix = localhost. - -3manager.org.apache.juli.FileHandler.level = FINE -3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs -3manager.org.apache.juli.FileHandler.prefix = manager. - -4host-manager.org.apache.juli.FileHandler.level = FINE -4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs -4host-manager.org.apache.juli.FileHandler.prefix = host-manager. - -java.util.logging.ConsoleHandler.level = FINE -java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter - - -############################################################ -# Facility specific properties. -# Provides extra control for each logger. -############################################################ - -org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO -org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler - -org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO -org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler - -org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO -org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler - -# For example, set the org.apache.catalina.util.LifecycleBase logger to log -# each component that extends LifecycleBase changing state: -#org.apache.catalina.util.LifecycleBase.level = FINE - -# To see debug messages in TldLocationsCache, uncomment the following line: -#org.apache.jasper.compiler.TldLocationsCache.level = FINE diff --git a/bundledApps/tomcat/conf/server.xml b/bundledApps/tomcat/conf/server.xml deleted file mode 100644 index ea56034a..00000000 --- a/bundledApps/tomcat/conf/server.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/conf/tomcat-users.xml b/bundledApps/tomcat/conf/tomcat-users.xml deleted file mode 100644 index b933f965..00000000 --- a/bundledApps/tomcat/conf/tomcat-users.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - diff --git a/bundledApps/tomcat/conf/web.xml b/bundledApps/tomcat/conf/web.xml deleted file mode 100644 index 22caf464..00000000 --- a/bundledApps/tomcat/conf/web.xml +++ /dev/null @@ -1,4238 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - org.apache.catalina.servlets.DefaultServlet - - debug - 0 - - - listings - false - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.apache.jasper.servlet.JspServlet - - fork - false - - - xpoweredBy - false - - - mappedfile - true - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - / - - - - jsp - *.jsp - *.jspx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 - - - - - - - - - 123 - application/vnd.lotus-1-2-3 - - - 3dml - text/vnd.in3d.3dml - - - 3g2 - video/3gpp2 - - - 3gp - video/3gpp - - - 7z - application/x-7z-compressed - - - aab - application/x-authorware-bin - - - aac - audio/x-aac - - - aam - application/x-authorware-map - - - aas - application/x-authorware-seg - - - abs - audio/x-mpeg - - - abw - application/x-abiword - - - ac - application/pkix-attr-cert - - - acc - application/vnd.americandynamics.acc - - - ace - application/x-ace-compressed - - - acu - application/vnd.acucobol - - - acutc - application/vnd.acucorp - - - adp - audio/adpcm - - - aep - application/vnd.audiograph - - - afm - application/x-font-type1 - - - afp - application/vnd.ibm.modcap - - - ahead - application/vnd.ahead.space - - - ai - application/postscript - - - aif - audio/x-aiff - - - aifc - audio/x-aiff - - - aiff - audio/x-aiff - - - aim - application/x-aim - - - air - application/vnd.adobe.air-application-installer-package+zip - - - ait - application/vnd.dvb.ait - - - ami - application/vnd.amiga.ami - - - anx - application/annodex - - - apk - application/vnd.android.package-archive - - - application - application/x-ms-application - - - apr - application/vnd.lotus-approach - - - art - image/x-jg - - - asc - application/pgp-signature - - - asf - video/x-ms-asf - - - asm - text/x-asm - - - aso - application/vnd.accpac.simply.aso - - - asx - video/x-ms-asf - - - atc - application/vnd.acucorp - - - atom - application/atom+xml - - - atomcat - application/atomcat+xml - - - atomsvc - application/atomsvc+xml - - - atx - application/vnd.antix.game-component - - - au - audio/basic - - - avi - video/x-msvideo - - - avx - video/x-rad-screenplay - - - aw - application/applixware - - - axa - audio/annodex - - - axv - video/annodex - - - azf - application/vnd.airzip.filesecure.azf - - - azs - application/vnd.airzip.filesecure.azs - - - azw - application/vnd.amazon.ebook - - - bat - application/x-msdownload - - - bcpio - application/x-bcpio - - - bdf - application/x-font-bdf - - - bdm - application/vnd.syncml.dm+wbxml - - - bed - application/vnd.realvnc.bed - - - bh2 - application/vnd.fujitsu.oasysprs - - - bin - application/octet-stream - - - bmi - application/vnd.bmi - - - bmp - image/bmp - - - body - text/html - - - book - application/vnd.framemaker - - - box - application/vnd.previewsystems.box - - - boz - application/x-bzip2 - - - bpk - application/octet-stream - - - btif - image/prs.btif - - - bz - application/x-bzip - - - bz2 - application/x-bzip2 - - - c - text/x-c - - - c11amc - application/vnd.cluetrust.cartomobile-config - - - c11amz - application/vnd.cluetrust.cartomobile-config-pkg - - - c4d - application/vnd.clonk.c4group - - - c4f - application/vnd.clonk.c4group - - - c4g - application/vnd.clonk.c4group - - - c4p - application/vnd.clonk.c4group - - - c4u - application/vnd.clonk.c4group - - - cab - application/vnd.ms-cab-compressed - - - cap - application/vnd.tcpdump.pcap - - - car - application/vnd.curl.car - - - cat - application/vnd.ms-pki.seccat - - - cc - text/x-c - - - cct - application/x-director - - - ccxml - application/ccxml+xml - - - cdbcmsg - application/vnd.contact.cmsg - - - cdf - application/x-cdf - - - cdkey - application/vnd.mediastation.cdkey - - - cdmia - application/cdmi-capability - - - cdmic - application/cdmi-container - - - cdmid - application/cdmi-domain - - - cdmio - application/cdmi-object - - - cdmiq - application/cdmi-queue - - - cdx - chemical/x-cdx - - - cdxml - application/vnd.chemdraw+xml - - - cdy - application/vnd.cinderella - - - cer - application/pkix-cert - - - cgm - image/cgm - - - chat - application/x-chat - - - chm - application/vnd.ms-htmlhelp - - - chrt - application/vnd.kde.kchart - - - cif - chemical/x-cif - - - cii - application/vnd.anser-web-certificate-issue-initiation - - - cil - application/vnd.ms-artgalry - - - cla - application/vnd.claymore - - - class - application/java - - - clkk - application/vnd.crick.clicker.keyboard - - - clkp - application/vnd.crick.clicker.palette - - - clkt - application/vnd.crick.clicker.template - - - clkw - application/vnd.crick.clicker.wordbank - - - clkx - application/vnd.crick.clicker - - - clp - application/x-msclip - - - cmc - application/vnd.cosmocaller - - - cmdf - chemical/x-cmdf - - - cml - chemical/x-cml - - - cmp - application/vnd.yellowriver-custom-menu - - - cmx - image/x-cmx - - - cod - application/vnd.rim.cod - - - com - application/x-msdownload - - - conf - text/plain - - - cpio - application/x-cpio - - - cpp - text/x-c - - - cpt - application/mac-compactpro - - - crd - application/x-mscardfile - - - crl - application/pkix-crl - - - crt - application/x-x509-ca-cert - - - cryptonote - application/vnd.rig.cryptonote - - - csh - application/x-csh - - - csml - chemical/x-csml - - - csp - application/vnd.commonspace - - - css - text/css - - - cst - application/x-director - - - csv - text/csv - - - cu - application/cu-seeme - - - curl - text/vnd.curl - - - cww - application/prs.cww - - - cxt - application/x-director - - - cxx - text/x-c - - - dae - model/vnd.collada+xml - - - daf - application/vnd.mobius.daf - - - dataless - application/vnd.fdsn.seed - - - davmount - application/davmount+xml - - - dcr - application/x-director - - - dcurl - text/vnd.curl.dcurl - - - dd2 - application/vnd.oma.dd2+xml - - - ddd - application/vnd.fujixerox.ddd - - - deb - application/x-debian-package - - - def - text/plain - - - deploy - application/octet-stream - - - der - application/x-x509-ca-cert - - - dfac - application/vnd.dreamfactory - - - dib - image/bmp - - - dic - text/x-c - - - dir - application/x-director - - - dis - application/vnd.mobius.dis - - - dist - application/octet-stream - - - distz - application/octet-stream - - - djv - image/vnd.djvu - - - djvu - image/vnd.djvu - - - dll - application/x-msdownload - - - dmg - application/octet-stream - - - dmp - application/vnd.tcpdump.pcap - - - dms - application/octet-stream - - - dna - application/vnd.dna - - - doc - application/msword - - - docm - application/vnd.ms-word.document.macroenabled.12 - - - docx - application/vnd.openxmlformats-officedocument.wordprocessingml.document - - - dot - application/msword - - - dotm - application/vnd.ms-word.template.macroenabled.12 - - - dotx - application/vnd.openxmlformats-officedocument.wordprocessingml.template - - - dp - application/vnd.osgi.dp - - - dpg - application/vnd.dpgraph - - - dra - audio/vnd.dra - - - dsc - text/prs.lines.tag - - - dssc - application/dssc+der - - - dtb - application/x-dtbook+xml - - - dtd - application/xml-dtd - - - dts - audio/vnd.dts - - - dtshd - audio/vnd.dts.hd - - - dump - application/octet-stream - - - dv - video/x-dv - - - dvb - video/vnd.dvb.file - - - dvi - application/x-dvi - - - dwf - model/vnd.dwf - - - dwg - image/vnd.dwg - - - dxf - image/vnd.dxf - - - dxp - application/vnd.spotfire.dxp - - - dxr - application/x-director - - - ecelp4800 - audio/vnd.nuera.ecelp4800 - - - ecelp7470 - audio/vnd.nuera.ecelp7470 - - - ecelp9600 - audio/vnd.nuera.ecelp9600 - - - ecma - application/ecmascript - - - edm - application/vnd.novadigm.edm - - - edx - application/vnd.novadigm.edx - - - efif - application/vnd.picsel - - - ei6 - application/vnd.pg.osasli - - - elc - application/octet-stream - - - eml - message/rfc822 - - - emma - application/emma+xml - - - eol - audio/vnd.digital-winds - - - eot - application/vnd.ms-fontobject - - - eps - application/postscript - - - epub - application/epub+zip - - - es3 - application/vnd.eszigno3+xml - - - esf - application/vnd.epson.esf - - - et3 - application/vnd.eszigno3+xml - - - etx - text/x-setext - - - exe - application/octet-stream - - - exi - application/exi - - - ext - application/vnd.novadigm.ext - - - ez - application/andrew-inset - - - ez2 - application/vnd.ezpix-album - - - ez3 - application/vnd.ezpix-package - - - f - text/x-fortran - - - f4v - video/x-f4v - - - f77 - text/x-fortran - - - f90 - text/x-fortran - - - fbs - image/vnd.fastbidsheet - - - fcs - application/vnd.isac.fcs - - - fdf - application/vnd.fdf - - - fe_launch - application/vnd.denovo.fcselayout-link - - - fg5 - application/vnd.fujitsu.oasysgp - - - fgd - application/x-director - - - fh - image/x-freehand - - - fh4 - image/x-freehand - - - fh5 - image/x-freehand - - - fh7 - image/x-freehand - - - fhc - image/x-freehand - - - fig - application/x-xfig - - - flac - audio/flac - - - fli - video/x-fli - - - flo - application/vnd.micrografx.flo - - - flv - video/x-flv - - - flw - application/vnd.kde.kivio - - - flx - text/vnd.fmi.flexstor - - - fly - text/vnd.fly - - - fm - application/vnd.framemaker - - - fnc - application/vnd.frogans.fnc - - - for - text/x-fortran - - - fpx - image/vnd.fpx - - - frame - application/vnd.framemaker - - - fsc - application/vnd.fsc.weblaunch - - - fst - image/vnd.fst - - - ftc - application/vnd.fluxtime.clip - - - fti - application/vnd.anser-web-funds-transfer-initiation - - - fvt - video/vnd.fvt - - - fxp - application/vnd.adobe.fxp - - - fxpl - application/vnd.adobe.fxp - - - fzs - application/vnd.fuzzysheet - - - g2w - application/vnd.geoplan - - - g3 - image/g3fax - - - g3w - application/vnd.geospace - - - gac - application/vnd.groove-account - - - gbr - application/rpki-ghostbusters - - - gdl - model/vnd.gdl - - - geo - application/vnd.dynageo - - - gex - application/vnd.geometry-explorer - - - ggb - application/vnd.geogebra.file - - - ggt - application/vnd.geogebra.tool - - - ghf - application/vnd.groove-help - - - gif - image/gif - - - gim - application/vnd.groove-identity-message - - - gmx - application/vnd.gmx - - - gnumeric - application/x-gnumeric - - - gph - application/vnd.flographit - - - gqf - application/vnd.grafeq - - - gqs - application/vnd.grafeq - - - gram - application/srgs - - - gre - application/vnd.geometry-explorer - - - grv - application/vnd.groove-injector - - - grxml - application/srgs+xml - - - gsf - application/x-font-ghostscript - - - gtar - application/x-gtar - - - gtm - application/vnd.groove-tool-message - - - gtw - model/vnd.gtw - - - gv - text/vnd.graphviz - - - gxt - application/vnd.geonext - - - gz - application/x-gzip - - - h - text/x-c - - - h261 - video/h261 - - - h263 - video/h263 - - - h264 - video/h264 - - - hal - application/vnd.hal+xml - - - hbci - application/vnd.hbci - - - hdf - application/x-hdf - - - hh - text/x-c - - - hlp - application/winhlp - - - hpgl - application/vnd.hp-hpgl - - - hpid - application/vnd.hp-hpid - - - hps - application/vnd.hp-hps - - - hqx - application/mac-binhex40 - - - htc - text/x-component - - - htke - application/vnd.kenameaapp - - - htm - text/html - - - html - text/html - - - hvd - application/vnd.yamaha.hv-dic - - - hvp - application/vnd.yamaha.hv-voice - - - hvs - application/vnd.yamaha.hv-script - - - i2g - application/vnd.intergeo - - - icc - application/vnd.iccprofile - - - ice - x-conference/x-cooltalk - - - icm - application/vnd.iccprofile - - - ico - image/x-icon - - - ics - text/calendar - - - ief - image/ief - - - ifb - text/calendar - - - ifm - application/vnd.shana.informed.formdata - - - iges - model/iges - - - igl - application/vnd.igloader - - - igm - application/vnd.insors.igm - - - igs - model/iges - - - igx - application/vnd.micrografx.igx - - - iif - application/vnd.shana.informed.interchange - - - imp - application/vnd.accpac.simply.imp - - - ims - application/vnd.ms-ims - - - in - text/plain - - - ink - application/inkml+xml - - - inkml - application/inkml+xml - - - iota - application/vnd.astraea-software.iota - - - ipfix - application/ipfix - - - ipk - application/vnd.shana.informed.package - - - irm - application/vnd.ibm.rights-management - - - irp - application/vnd.irepository.package+xml - - - iso - application/octet-stream - - - itp - application/vnd.shana.informed.formtemplate - - - ivp - application/vnd.immervision-ivp - - - ivu - application/vnd.immervision-ivu - - - jad - text/vnd.sun.j2me.app-descriptor - - - jam - application/vnd.jam - - - jar - application/java-archive - - - java - text/x-java-source - - - jisp - application/vnd.jisp - - - jlt - application/vnd.hp-jlyt - - - jnlp - application/x-java-jnlp-file - - - joda - application/vnd.joost.joda-archive - - - jpe - image/jpeg - - - jpeg - image/jpeg - - - jpg - image/jpeg - - - jpgm - video/jpm - - - jpgv - video/jpeg - - - jpm - video/jpm - - - js - application/javascript - - - jsf - text/plain - - - json - application/json - - - jspf - text/plain - - - kar - audio/midi - - - karbon - application/vnd.kde.karbon - - - kfo - application/vnd.kde.kformula - - - kia - application/vnd.kidspiration - - - kml - application/vnd.google-earth.kml+xml - - - kmz - application/vnd.google-earth.kmz - - - kne - application/vnd.kinar - - - knp - application/vnd.kinar - - - kon - application/vnd.kde.kontour - - - kpr - application/vnd.kde.kpresenter - - - kpt - application/vnd.kde.kpresenter - - - ksp - application/vnd.kde.kspread - - - ktr - application/vnd.kahootz - - - ktx - image/ktx - - - ktz - application/vnd.kahootz - - - kwd - application/vnd.kde.kword - - - kwt - application/vnd.kde.kword - - - lasxml - application/vnd.las.las+xml - - - latex - application/x-latex - - - lbd - application/vnd.llamagraphics.life-balance.desktop - - - lbe - application/vnd.llamagraphics.life-balance.exchange+xml - - - les - application/vnd.hhe.lesson-player - - - lha - application/octet-stream - - - link66 - application/vnd.route66.link66+xml - - - list - text/plain - - - list3820 - application/vnd.ibm.modcap - - - listafp - application/vnd.ibm.modcap - - - log - text/plain - - - lostxml - application/lost+xml - - - lrf - application/octet-stream - - - lrm - application/vnd.ms-lrm - - - ltf - application/vnd.frogans.ltf - - - lvp - audio/vnd.lucent.voice - - - lwp - application/vnd.lotus-wordpro - - - lzh - application/octet-stream - - - m13 - application/x-msmediaview - - - m14 - application/x-msmediaview - - - m1v - video/mpeg - - - m21 - application/mp21 - - - m2a - audio/mpeg - - - m2v - video/mpeg - - - m3a - audio/mpeg - - - m3u - audio/x-mpegurl - - - m3u8 - application/vnd.apple.mpegurl - - - m4a - audio/mp4 - - - m4b - audio/mp4 - - - m4r - audio/mp4 - - - m4u - video/vnd.mpegurl - - - m4v - video/mp4 - - - ma - application/mathematica - - - mac - image/x-macpaint - - - mads - application/mads+xml - - - mag - application/vnd.ecowin.chart - - - maker - application/vnd.framemaker - - - man - text/troff - - - mathml - application/mathml+xml - - - mb - application/mathematica - - - mbk - application/vnd.mobius.mbk - - - mbox - application/mbox - - - mc1 - application/vnd.medcalcdata - - - mcd - application/vnd.mcd - - - mcurl - text/vnd.curl.mcurl - - - mdb - application/x-msaccess - - - mdi - image/vnd.ms-modi - - - me - text/troff - - - mesh - model/mesh - - - meta4 - application/metalink4+xml - - - mets - application/mets+xml - - - mfm - application/vnd.mfmp - - - mft - application/rpki-manifest - - - mgp - application/vnd.osgeo.mapguide.package - - - mgz - application/vnd.proteus.magazine - - - mid - audio/midi - - - midi - audio/midi - - - mif - application/x-mif - - - mime - message/rfc822 - - - mj2 - video/mj2 - - - mjp2 - video/mj2 - - - mlp - application/vnd.dolby.mlp - - - mmd - application/vnd.chipnuts.karaoke-mmd - - - mmf - application/vnd.smaf - - - mmr - image/vnd.fujixerox.edmics-mmr - - - mny - application/x-msmoney - - - mobi - application/x-mobipocket-ebook - - - mods - application/mods+xml - - - mov - video/quicktime - - - movie - video/x-sgi-movie - - - mp1 - audio/mpeg - - - mp2 - audio/mpeg - - - mp21 - application/mp21 - - - mp2a - audio/mpeg - - - mp3 - audio/mpeg - - - mp4 - video/mp4 - - - mp4a - audio/mp4 - - - mp4s - application/mp4 - - - mp4v - video/mp4 - - - mpa - audio/mpeg - - - mpc - application/vnd.mophun.certificate - - - mpe - video/mpeg - - - mpeg - video/mpeg - - - mpega - audio/x-mpeg - - - mpg - video/mpeg - - - mpg4 - video/mp4 - - - mpga - audio/mpeg - - - mpkg - application/vnd.apple.installer+xml - - - mpm - application/vnd.blueice.multipass - - - mpn - application/vnd.mophun.application - - - mpp - application/vnd.ms-project - - - mpt - application/vnd.ms-project - - - mpv2 - video/mpeg2 - - - mpy - application/vnd.ibm.minipay - - - mqy - application/vnd.mobius.mqy - - - mrc - application/marc - - - mrcx - application/marcxml+xml - - - ms - text/troff - - - mscml - application/mediaservercontrol+xml - - - mseed - application/vnd.fdsn.mseed - - - mseq - application/vnd.mseq - - - msf - application/vnd.epson.msf - - - msh - model/mesh - - - msi - application/x-msdownload - - - msl - application/vnd.mobius.msl - - - msty - application/vnd.muvee.style - - - mts - model/vnd.mts - - - mus - application/vnd.musician - - - musicxml - application/vnd.recordare.musicxml+xml - - - mvb - application/x-msmediaview - - - mwf - application/vnd.mfer - - - mxf - application/mxf - - - mxl - application/vnd.recordare.musicxml - - - mxml - application/xv+xml - - - mxs - application/vnd.triscape.mxs - - - mxu - video/vnd.mpegurl - - - n-gage - application/vnd.nokia.n-gage.symbian.install - - - n3 - text/n3 - - - nb - application/mathematica - - - nbp - application/vnd.wolfram.player - - - nc - application/x-netcdf - - - ncx - application/x-dtbncx+xml - - - ngdat - application/vnd.nokia.n-gage.data - - - nlu - application/vnd.neurolanguage.nlu - - - nml - application/vnd.enliven - - - nnd - application/vnd.noblenet-directory - - - nns - application/vnd.noblenet-sealer - - - nnw - application/vnd.noblenet-web - - - npx - image/vnd.net-fpx - - - nsf - application/vnd.lotus-notes - - - oa2 - application/vnd.fujitsu.oasys2 - - - oa3 - application/vnd.fujitsu.oasys3 - - - oas - application/vnd.fujitsu.oasys - - - obd - application/x-msbinder - - - oda - application/oda - - - - odb - application/vnd.oasis.opendocument.database - - - - odc - application/vnd.oasis.opendocument.chart - - - - odf - application/vnd.oasis.opendocument.formula - - - odft - application/vnd.oasis.opendocument.formula-template - - - - odg - application/vnd.oasis.opendocument.graphics - - - - odi - application/vnd.oasis.opendocument.image - - - - odm - application/vnd.oasis.opendocument.text-master - - - - odp - application/vnd.oasis.opendocument.presentation - - - - ods - application/vnd.oasis.opendocument.spreadsheet - - - - odt - application/vnd.oasis.opendocument.text - - - oga - audio/ogg - - - ogg - audio/ogg - - - ogv - video/ogg - - - - ogx - application/ogg - - - onepkg - application/onenote - - - onetmp - application/onenote - - - onetoc - application/onenote - - - onetoc2 - application/onenote - - - opf - application/oebps-package+xml - - - oprc - application/vnd.palm - - - org - application/vnd.lotus-organizer - - - osf - application/vnd.yamaha.openscoreformat - - - osfpvg - application/vnd.yamaha.openscoreformat.osfpvg+xml - - - otc - application/vnd.oasis.opendocument.chart-template - - - otf - application/x-font-otf - - - - otg - application/vnd.oasis.opendocument.graphics-template - - - - oth - application/vnd.oasis.opendocument.text-web - - - oti - application/vnd.oasis.opendocument.image-template - - - - otp - application/vnd.oasis.opendocument.presentation-template - - - - ots - application/vnd.oasis.opendocument.spreadsheet-template - - - - ott - application/vnd.oasis.opendocument.text-template - - - oxps - application/oxps - - - oxt - application/vnd.openofficeorg.extension - - - p - text/x-pascal - - - p10 - application/pkcs10 - - - p12 - application/x-pkcs12 - - - p7b - application/x-pkcs7-certificates - - - p7c - application/pkcs7-mime - - - p7m - application/pkcs7-mime - - - p7r - application/x-pkcs7-certreqresp - - - p7s - application/pkcs7-signature - - - p8 - application/pkcs8 - - - pas - text/x-pascal - - - paw - application/vnd.pawaafile - - - pbd - application/vnd.powerbuilder6 - - - pbm - image/x-portable-bitmap - - - pcap - application/vnd.tcpdump.pcap - - - pcf - application/x-font-pcf - - - pcl - application/vnd.hp-pcl - - - pclxl - application/vnd.hp-pclxl - - - pct - image/pict - - - pcurl - application/vnd.curl.pcurl - - - pcx - image/x-pcx - - - pdb - application/vnd.palm - - - pdf - application/pdf - - - pfa - application/x-font-type1 - - - pfb - application/x-font-type1 - - - pfm - application/x-font-type1 - - - pfr - application/font-tdpfr - - - pfx - application/x-pkcs12 - - - pgm - image/x-portable-graymap - - - pgn - application/x-chess-pgn - - - pgp - application/pgp-encrypted - - - pic - image/pict - - - pict - image/pict - - - pkg - application/octet-stream - - - pki - application/pkixcmp - - - pkipath - application/pkix-pkipath - - - plb - application/vnd.3gpp.pic-bw-large - - - plc - application/vnd.mobius.plc - - - plf - application/vnd.pocketlearn - - - pls - audio/x-scpls - - - pml - application/vnd.ctc-posml - - - png - image/png - - - pnm - image/x-portable-anymap - - - pnt - image/x-macpaint - - - portpkg - application/vnd.macports.portpkg - - - pot - application/vnd.ms-powerpoint - - - potm - application/vnd.ms-powerpoint.template.macroenabled.12 - - - potx - application/vnd.openxmlformats-officedocument.presentationml.template - - - ppam - application/vnd.ms-powerpoint.addin.macroenabled.12 - - - ppd - application/vnd.cups-ppd - - - ppm - image/x-portable-pixmap - - - pps - application/vnd.ms-powerpoint - - - ppsm - application/vnd.ms-powerpoint.slideshow.macroenabled.12 - - - ppsx - application/vnd.openxmlformats-officedocument.presentationml.slideshow - - - ppt - application/vnd.ms-powerpoint - - - pptm - application/vnd.ms-powerpoint.presentation.macroenabled.12 - - - pptx - application/vnd.openxmlformats-officedocument.presentationml.presentation - - - pqa - application/vnd.palm - - - prc - application/x-mobipocket-ebook - - - pre - application/vnd.lotus-freelance - - - prf - application/pics-rules - - - ps - application/postscript - - - psb - application/vnd.3gpp.pic-bw-small - - - psd - image/vnd.adobe.photoshop - - - psf - application/x-font-linux-psf - - - pskcxml - application/pskc+xml - - - ptid - application/vnd.pvi.ptid1 - - - pub - application/x-mspublisher - - - pvb - application/vnd.3gpp.pic-bw-var - - - pwn - application/vnd.3m.post-it-notes - - - pya - audio/vnd.ms-playready.media.pya - - - pyv - video/vnd.ms-playready.media.pyv - - - qam - application/vnd.epson.quickanime - - - qbo - application/vnd.intu.qbo - - - qfx - application/vnd.intu.qfx - - - qps - application/vnd.publishare-delta-tree - - - qt - video/quicktime - - - qti - image/x-quicktime - - - qtif - image/x-quicktime - - - qwd - application/vnd.quark.quarkxpress - - - qwt - application/vnd.quark.quarkxpress - - - qxb - application/vnd.quark.quarkxpress - - - qxd - application/vnd.quark.quarkxpress - - - qxl - application/vnd.quark.quarkxpress - - - qxt - application/vnd.quark.quarkxpress - - - ra - audio/x-pn-realaudio - - - ram - audio/x-pn-realaudio - - - rar - application/x-rar-compressed - - - ras - image/x-cmu-raster - - - rcprofile - application/vnd.ipunplugged.rcprofile - - - rdf - application/rdf+xml - - - rdz - application/vnd.data-vision.rdz - - - rep - application/vnd.businessobjects - - - res - application/x-dtbresource+xml - - - rgb - image/x-rgb - - - rif - application/reginfo+xml - - - rip - audio/vnd.rip - - - rl - application/resource-lists+xml - - - rlc - image/vnd.fujixerox.edmics-rlc - - - rld - application/resource-lists-diff+xml - - - rm - application/vnd.rn-realmedia - - - rmi - audio/midi - - - rmp - audio/x-pn-realaudio-plugin - - - rms - application/vnd.jcp.javame.midlet-rms - - - rnc - application/relax-ng-compact-syntax - - - roa - application/rpki-roa - - - roff - text/troff - - - rp9 - application/vnd.cloanto.rp9 - - - rpss - application/vnd.nokia.radio-presets - - - rpst - application/vnd.nokia.radio-preset - - - rq - application/sparql-query - - - rs - application/rls-services+xml - - - rsd - application/rsd+xml - - - rss - application/rss+xml - - - rtf - application/rtf - - - rtx - text/richtext - - - s - text/x-asm - - - saf - application/vnd.yamaha.smaf-audio - - - sbml - application/sbml+xml - - - sc - application/vnd.ibm.secure-container - - - scd - application/x-msschedule - - - scm - application/vnd.lotus-screencam - - - scq - application/scvp-cv-request - - - scs - application/scvp-cv-response - - - scurl - text/vnd.curl.scurl - - - sda - application/vnd.stardivision.draw - - - sdc - application/vnd.stardivision.calc - - - sdd - application/vnd.stardivision.impress - - - sdkd - application/vnd.solent.sdkm+xml - - - sdkm - application/vnd.solent.sdkm+xml - - - sdp - application/sdp - - - sdw - application/vnd.stardivision.writer - - - see - application/vnd.seemail - - - seed - application/vnd.fdsn.seed - - - sema - application/vnd.sema - - - semd - application/vnd.semd - - - semf - application/vnd.semf - - - ser - application/java-serialized-object - - - setpay - application/set-payment-initiation - - - setreg - application/set-registration-initiation - - - sfd-hdstx - application/vnd.hydrostatix.sof-data - - - sfs - application/vnd.spotfire.sfs - - - sgl - application/vnd.stardivision.writer-global - - - sgm - text/sgml - - - sgml - text/sgml - - - sh - application/x-sh - - - shar - application/x-shar - - - shf - application/shf+xml - - - - sig - application/pgp-signature - - - silo - model/mesh - - - sis - application/vnd.symbian.install - - - sisx - application/vnd.symbian.install - - - sit - application/x-stuffit - - - sitx - application/x-stuffitx - - - skd - application/vnd.koan - - - skm - application/vnd.koan - - - skp - application/vnd.koan - - - skt - application/vnd.koan - - - sldm - application/vnd.ms-powerpoint.slide.macroenabled.12 - - - sldx - application/vnd.openxmlformats-officedocument.presentationml.slide - - - slt - application/vnd.epson.salt - - - sm - application/vnd.stepmania.stepchart - - - smf - application/vnd.stardivision.math - - - smi - application/smil+xml - - - smil - application/smil+xml - - - smzip - application/vnd.stepmania.package - - - snd - audio/basic - - - snf - application/x-font-snf - - - so - application/octet-stream - - - spc - application/x-pkcs7-certificates - - - spf - application/vnd.yamaha.smaf-phrase - - - spl - application/x-futuresplash - - - spot - text/vnd.in3d.spot - - - spp - application/scvp-vp-response - - - spq - application/scvp-vp-request - - - spx - audio/ogg - - - src - application/x-wais-source - - - sru - application/sru+xml - - - srx - application/sparql-results+xml - - - sse - application/vnd.kodak-descriptor - - - ssf - application/vnd.epson.ssf - - - ssml - application/ssml+xml - - - st - application/vnd.sailingtracker.track - - - stc - application/vnd.sun.xml.calc.template - - - std - application/vnd.sun.xml.draw.template - - - stf - application/vnd.wt.stf - - - sti - application/vnd.sun.xml.impress.template - - - stk - application/hyperstudio - - - stl - application/vnd.ms-pki.stl - - - str - application/vnd.pg.format - - - stw - application/vnd.sun.xml.writer.template - - - sub - text/vnd.dvb.subtitle - - - sus - application/vnd.sus-calendar - - - susp - application/vnd.sus-calendar - - - sv4cpio - application/x-sv4cpio - - - sv4crc - application/x-sv4crc - - - svc - application/vnd.dvb.service - - - svd - application/vnd.svd - - - svg - image/svg+xml - - - svgz - image/svg+xml - - - swa - application/x-director - - - swf - application/x-shockwave-flash - - - swi - application/vnd.aristanetworks.swi - - - sxc - application/vnd.sun.xml.calc - - - sxd - application/vnd.sun.xml.draw - - - sxg - application/vnd.sun.xml.writer.global - - - sxi - application/vnd.sun.xml.impress - - - sxm - application/vnd.sun.xml.math - - - sxw - application/vnd.sun.xml.writer - - - t - text/troff - - - taglet - application/vnd.mynfc - - - tao - application/vnd.tao.intent-module-archive - - - tar - application/x-tar - - - tcap - application/vnd.3gpp2.tcap - - - tcl - application/x-tcl - - - teacher - application/vnd.smart.teacher - - - tei - application/tei+xml - - - teicorpus - application/tei+xml - - - tex - application/x-tex - - - texi - application/x-texinfo - - - texinfo - application/x-texinfo - - - text - text/plain - - - tfi - application/thraud+xml - - - tfm - application/x-tex-tfm - - - thmx - application/vnd.ms-officetheme - - - tif - image/tiff - - - tiff - image/tiff - - - tmo - application/vnd.tmobile-livetv - - - torrent - application/x-bittorrent - - - tpl - application/vnd.groove-tool-template - - - tpt - application/vnd.trid.tpt - - - tr - text/troff - - - tra - application/vnd.trueapp - - - trm - application/x-msterminal - - - tsd - application/timestamped-data - - - tsv - text/tab-separated-values - - - ttc - application/x-font-ttf - - - ttf - application/x-font-ttf - - - ttl - text/turtle - - - twd - application/vnd.simtech-mindmapper - - - twds - application/vnd.simtech-mindmapper - - - txd - application/vnd.genomatix.tuxedo - - - txf - application/vnd.mobius.txf - - - txt - text/plain - - - u32 - application/x-authorware-bin - - - udeb - application/x-debian-package - - - ufd - application/vnd.ufdl - - - ufdl - application/vnd.ufdl - - - ulw - audio/basic - - - umj - application/vnd.umajin - - - unityweb - application/vnd.unity - - - uoml - application/vnd.uoml+xml - - - uri - text/uri-list - - - uris - text/uri-list - - - urls - text/uri-list - - - ustar - application/x-ustar - - - utz - application/vnd.uiq.theme - - - uu - text/x-uuencode - - - uva - audio/vnd.dece.audio - - - uvd - application/vnd.dece.data - - - uvf - application/vnd.dece.data - - - uvg - image/vnd.dece.graphic - - - uvh - video/vnd.dece.hd - - - uvi - image/vnd.dece.graphic - - - uvm - video/vnd.dece.mobile - - - uvp - video/vnd.dece.pd - - - uvs - video/vnd.dece.sd - - - uvt - application/vnd.dece.ttml+xml - - - uvu - video/vnd.uvvu.mp4 - - - uvv - video/vnd.dece.video - - - uvva - audio/vnd.dece.audio - - - uvvd - application/vnd.dece.data - - - uvvf - application/vnd.dece.data - - - uvvg - image/vnd.dece.graphic - - - uvvh - video/vnd.dece.hd - - - uvvi - image/vnd.dece.graphic - - - uvvm - video/vnd.dece.mobile - - - uvvp - video/vnd.dece.pd - - - uvvs - video/vnd.dece.sd - - - uvvt - application/vnd.dece.ttml+xml - - - uvvu - video/vnd.uvvu.mp4 - - - uvvv - video/vnd.dece.video - - - uvvx - application/vnd.dece.unspecified - - - uvvz - application/vnd.dece.zip - - - uvx - application/vnd.dece.unspecified - - - uvz - application/vnd.dece.zip - - - vcard - text/vcard - - - vcd - application/x-cdlink - - - vcf - text/x-vcard - - - vcg - application/vnd.groove-vcard - - - vcs - text/x-vcalendar - - - vcx - application/vnd.vcx - - - vis - application/vnd.visionary - - - viv - video/vnd.vivo - - - vor - application/vnd.stardivision.writer - - - vox - application/x-authorware-bin - - - vrml - model/vrml - - - vsd - application/vnd.visio - - - vsf - application/vnd.vsf - - - vss - application/vnd.visio - - - vst - application/vnd.visio - - - vsw - application/vnd.visio - - - vtu - model/vnd.vtu - - - vxml - application/voicexml+xml - - - w3d - application/x-director - - - wad - application/x-doom - - - wav - audio/x-wav - - - wax - audio/x-ms-wax - - - - wbmp - image/vnd.wap.wbmp - - - wbs - application/vnd.criticaltools.wbs+xml - - - wbxml - application/vnd.wap.wbxml - - - wcm - application/vnd.ms-works - - - wdb - application/vnd.ms-works - - - weba - audio/webm - - - webm - video/webm - - - webp - image/webp - - - wg - application/vnd.pmi.widget - - - wgt - application/widget - - - wks - application/vnd.ms-works - - - wm - video/x-ms-wm - - - wma - audio/x-ms-wma - - - wmd - application/x-ms-wmd - - - wmf - application/x-msmetafile - - - - wml - text/vnd.wap.wml - - - - wmlc - application/vnd.wap.wmlc - - - - wmls - text/vnd.wap.wmlscript - - - - wmlsc - application/vnd.wap.wmlscriptc - - - wmv - video/x-ms-wmv - - - wmx - video/x-ms-wmx - - - wmz - application/x-ms-wmz - - - woff - application/x-font-woff - - - wpd - application/vnd.wordperfect - - - wpl - application/vnd.ms-wpl - - - wps - application/vnd.ms-works - - - wqd - application/vnd.wqd - - - wri - application/x-mswrite - - - wrl - model/vrml - - - wsdl - application/wsdl+xml - - - wspolicy - application/wspolicy+xml - - - wtb - application/vnd.webturbo - - - wvx - video/x-ms-wvx - - - x32 - application/x-authorware-bin - - - x3d - application/vnd.hzn-3d-crossword - - - xap - application/x-silverlight-app - - - xar - application/vnd.xara - - - xbap - application/x-ms-xbap - - - xbd - application/vnd.fujixerox.docuworks.binder - - - xbm - image/x-xbitmap - - - xdf - application/xcap-diff+xml - - - xdm - application/vnd.syncml.dm+xml - - - xdp - application/vnd.adobe.xdp+xml - - - xdssc - application/dssc+xml - - - xdw - application/vnd.fujixerox.docuworks - - - xenc - application/xenc+xml - - - xer - application/patch-ops-error+xml - - - xfdf - application/vnd.adobe.xfdf - - - xfdl - application/vnd.xfdl - - - xht - application/xhtml+xml - - - xhtml - application/xhtml+xml - - - xhvml - application/xv+xml - - - xif - image/vnd.xiff - - - xla - application/vnd.ms-excel - - - xlam - application/vnd.ms-excel.addin.macroenabled.12 - - - xlc - application/vnd.ms-excel - - - xlm - application/vnd.ms-excel - - - xls - application/vnd.ms-excel - - - xlsb - application/vnd.ms-excel.sheet.binary.macroenabled.12 - - - xlsm - application/vnd.ms-excel.sheet.macroenabled.12 - - - xlsx - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - - - xlt - application/vnd.ms-excel - - - xltm - application/vnd.ms-excel.template.macroenabled.12 - - - xltx - application/vnd.openxmlformats-officedocument.spreadsheetml.template - - - xlw - application/vnd.ms-excel - - - xml - application/xml - - - xo - application/vnd.olpc-sugar - - - xop - application/xop+xml - - - xpi - application/x-xpinstall - - - xpm - image/x-xpixmap - - - xpr - application/vnd.is-xpr - - - xps - application/vnd.ms-xpsdocument - - - xpw - application/vnd.intercon.formnet - - - xpx - application/vnd.intercon.formnet - - - xsl - application/xml - - - xslt - application/xslt+xml - - - xsm - application/vnd.syncml+xml - - - xspf - application/xspf+xml - - - xul - application/vnd.mozilla.xul+xml - - - xvm - application/xv+xml - - - xvml - application/xv+xml - - - xwd - image/x-xwindowdump - - - xyz - chemical/x-xyz - - - yang - application/yang - - - yin - application/yin+xml - - - z - application/x-compress - - - Z - application/x-compress - - - zaz - application/vnd.zzazz.deck+xml - - - zip - application/zip - - - zir - application/vnd.zul - - - zirz - application/vnd.zul - - - zmm - application/vnd.handheld-entertainment+xml - - - - - - - - - - - - - - - - index.html - index.htm - index.jsp - - diff --git a/bundledApps/tomcat/lib/annotations-api.jar b/bundledApps/tomcat/lib/annotations-api.jar deleted file mode 100644 index fbf49b74..00000000 Binary files a/bundledApps/tomcat/lib/annotations-api.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/catalina-ant.jar b/bundledApps/tomcat/lib/catalina-ant.jar deleted file mode 100644 index 22b21546..00000000 Binary files a/bundledApps/tomcat/lib/catalina-ant.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/catalina-ha.jar b/bundledApps/tomcat/lib/catalina-ha.jar deleted file mode 100644 index 2b607bd6..00000000 Binary files a/bundledApps/tomcat/lib/catalina-ha.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/catalina-tribes.jar b/bundledApps/tomcat/lib/catalina-tribes.jar deleted file mode 100644 index 5ca11b44..00000000 Binary files a/bundledApps/tomcat/lib/catalina-tribes.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/catalina.jar b/bundledApps/tomcat/lib/catalina.jar deleted file mode 100644 index 429be93b..00000000 Binary files a/bundledApps/tomcat/lib/catalina.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/ecj-3.7.2.jar b/bundledApps/tomcat/lib/ecj-3.7.2.jar deleted file mode 100644 index 54ae692a..00000000 Binary files a/bundledApps/tomcat/lib/ecj-3.7.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/el-api.jar b/bundledApps/tomcat/lib/el-api.jar deleted file mode 100644 index bc8c2175..00000000 Binary files a/bundledApps/tomcat/lib/el-api.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/jasper-el.jar b/bundledApps/tomcat/lib/jasper-el.jar deleted file mode 100644 index 0a72ef02..00000000 Binary files a/bundledApps/tomcat/lib/jasper-el.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/jasper.jar b/bundledApps/tomcat/lib/jasper.jar deleted file mode 100644 index e1c03499..00000000 Binary files a/bundledApps/tomcat/lib/jasper.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/jsp-api.jar b/bundledApps/tomcat/lib/jsp-api.jar deleted file mode 100644 index 9db6207c..00000000 Binary files a/bundledApps/tomcat/lib/jsp-api.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/servlet-api.jar b/bundledApps/tomcat/lib/servlet-api.jar deleted file mode 100644 index d355a022..00000000 Binary files a/bundledApps/tomcat/lib/servlet-api.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-api.jar b/bundledApps/tomcat/lib/tomcat-api.jar deleted file mode 100644 index 77733853..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-api.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-coyote.jar b/bundledApps/tomcat/lib/tomcat-coyote.jar deleted file mode 100644 index ff5853ec..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-coyote.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-dbcp.jar b/bundledApps/tomcat/lib/tomcat-dbcp.jar deleted file mode 100644 index 54f3e7d5..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-dbcp.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-i18n-es.jar b/bundledApps/tomcat/lib/tomcat-i18n-es.jar deleted file mode 100644 index 23369f7c..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-i18n-es.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-i18n-fr.jar b/bundledApps/tomcat/lib/tomcat-i18n-fr.jar deleted file mode 100644 index 3dd2fef8..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-i18n-fr.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-i18n-ja.jar b/bundledApps/tomcat/lib/tomcat-i18n-ja.jar deleted file mode 100644 index 586db30f..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-i18n-ja.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-jdbc.jar b/bundledApps/tomcat/lib/tomcat-jdbc.jar deleted file mode 100644 index 69a8d323..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-jdbc.jar and /dev/null differ diff --git a/bundledApps/tomcat/lib/tomcat-util.jar b/bundledApps/tomcat/lib/tomcat-util.jar deleted file mode 100644 index c369a199..00000000 Binary files a/bundledApps/tomcat/lib/tomcat-util.jar and /dev/null differ diff --git a/bundledApps/tomcat/tomcat_service_install.bat b/bundledApps/tomcat/tomcat_service_install.bat deleted file mode 100644 index b5d6ec83..00000000 --- a/bundledApps/tomcat/tomcat_service_install.bat +++ /dev/null @@ -1,46 +0,0 @@ -@echo off - -if "%OS%" == "Windows_NT" goto WinNT - -:Win9X -echo Don't be stupid! Win9x don't know Services -goto exit - -:WinNT - -echo [WAIL]: Searching JDK HOME with reg query ... -set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit - -reg query "%KeyName%" /s -if %ERRORLEVEL% == 1 ( - echo . [WAIL]: Cannot find current JDK installation! - echo . [WAIL]: Cannot set JAVA_HOME. Aborting ... - goto :END -) - -set "CURRENT_DIR=%cd%" -set "CATALINA_HOME=%CURRENT_DIR%" - -set Cmd=reg query "%KeyName%" /s -for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j - -echo. -echo [WAIL]: Seems fine! -echo [WAIL]: Using %JAVA_HOME% -echo. - -set JRE_HOME=%JAVA_HOME% - -echo [WAIL]: Using JAVA_HOME=%JAVA_HOME% -echo [WAIL]: Using CATALINA_HOME=%CATALINA_HOME% -echo [WAIL]: Using JRE_HOME=%JRE_HOME% - -echo Installing Tomcat as an Service -.\bin\service.bat install Tomcat7 - - -goto exit - -:END - -:exit diff --git a/bundledApps/tomcat/tomcat_service_uninstall.bat b/bundledApps/tomcat/tomcat_service_uninstall.bat deleted file mode 100644 index fd4ccce1..00000000 --- a/bundledApps/tomcat/tomcat_service_uninstall.bat +++ /dev/null @@ -1,48 +0,0 @@ -@echo off - -if "%OS%" == "Windows_NT" goto WinNT - -:Win9X -echo Don't be stupid! Win9x don't know Services -goto exit - -:WinNT - -echo [WAIL]: Searching JDK HOME with reg query ... -set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit - -reg query "%KeyName%" /s -if %ERRORLEVEL% == 1 ( - echo . [WAIL]: Cannot find current JDK installation! - echo . [WAIL]: Cannot set JAVA_HOME. Aborting ... - goto :END -) - -set "CURRENT_DIR=%cd%" -set "CATALINA_HOME=%CURRENT_DIR%" - -set Cmd=reg query "%KeyName%" /s -for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j - -echo. -echo [WAIL]: Seems fine! -echo [WAIL]: Using %JAVA_HOME% -echo. - -set JRE_HOME=%JAVA_HOME% - -echo [WAIL]: Using JAVA_HOME=%JAVA_HOME% -echo [WAIL]: Using CATALINA_HOME=%CATALINA_HOME% -echo [WAIL]: Using JRE_HOME=%JRE_HOME% - -echo Try to stop Tomcat6 service -net stop Tomcat6 -echo Uninstall Tomcat as an Service -.\bin\service.bat remove Tomcat7 - - -goto exit - -:END - -:exit diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ArchivalUrlReplay.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/ArchivalUrlReplay.xml deleted file mode 100644 index cb5f07df..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ArchivalUrlReplay.xml +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - /WEB-INF/replay/ArchiveCSSComment.jsp - - - - - - - - /WEB-INF/replay/ArchiveCSSComment.jsp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/html - application/xhtml - - - - - - - - - - - - - text/css - - - - - - - - - - text/javascript - application/javascript - application/x-javascript - - - - - - - - - - video/x-ms-asf - - - - - - - - - - .asx - - - - - - - - - - - - - - - - - - - - - - - /WEB-INF/replay/ArchiveComment.jsp - - - - - - - - - - - /WEB-INF/replay/ArchiveComment.jsp - /WEB-INF/replay/ClientSideJSInsert.jsp - /WEB-INF/replay/Disclaimer.jsp - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ArchivalUrlSaxReplay.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/ArchivalUrlSaxReplay.xml deleted file mode 100644 index 694d8bfb..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ArchivalUrlSaxReplay.xml +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/BDBCollection.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/BDBCollection.xml deleted file mode 100644 index 7ff8806a..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/BDBCollection.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/CDXCollection.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/CDXCollection.xml deleted file mode 100644 index dd6a9766..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/CDXCollection.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/CDXServerCollection.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/CDXServerCollection.xml deleted file mode 100644 index f108fd28..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/CDXServerCollection.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - ./sample/cdx/example.cdx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ComplexAccessPoint.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/ComplexAccessPoint.xml deleted file mode 100644 index 3b37be95..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ComplexAccessPoint.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sample Institution - Sample Collection - - - - - - - - - - - - - - 192.168.1.16/24 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/DomainPrefixReplay.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/DomainPrefixReplay.xml deleted file mode 100644 index 7a86ab82..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/DomainPrefixReplay.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - /WEB-INF/replay/ArchiveComment.jsp - /WEB-INF/replay/Disclaimer.jsp - - - - - - - - - - - - - - - - - - - - - - text/html - application/xhtml - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/LiveWeb.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/LiveWeb.xml deleted file mode 100644 index 2c131ce7..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/LiveWeb.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/NutchCollection.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/NutchCollection.xml deleted file mode 100644 index 38bb67a9..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/NutchCollection.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ProxyReplay.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/ProxyReplay.xml deleted file mode 100644 index 467dae31..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/ProxyReplay.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - /WEB-INF/replay/ArchiveComment.jsp - /WEB-INF/replay/Disclaimer.jsp - - - - - - - - - - - - - - - - - text/html - application/xhtml - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/RemoteCollection.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/RemoteCollection.xml deleted file mode 100644 index 4f270a98..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/RemoteCollection.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/SWFReplayRenderer.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/SWFReplayRenderer.xml deleted file mode 100644 index 9c5edc62..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/SWFReplayRenderer.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - application/x-shockwave-flash - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/classes/WaybackUI.properties b/bundledApps/tomcat/webapps/ROOT/WEB-INF/classes/WaybackUI.properties deleted file mode 100644 index 7706e9ad..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/classes/WaybackUI.properties +++ /dev/null @@ -1,265 +0,0 @@ -Exception.wayback.title=OpenWayback Exception -Exception.wayback.message=An unknown exception has occured. {0} -Exception.accessControl.title=Blocked Content -Exception.accessControl.message=Access to this content has been blocked. {0} -Exception.accessRobots.title=Blocked Content -Exception.accessRobots.message=Access to this content has been blocked by the sites robots.txt document. -Exception.accessRobotTimeout.title=We were unable to get the robots.txt document to display this page. -Exception.accessRobotTimeout.message=Our request Timed Out. -Exception.accessWebNotAvailable.title=We were unable to get the robots.txt document to display this page. -Exception.accessWebNotAvailable.message=The gateway to the live web is not available. Please try again later. -Exception.authenticationControl.title=Authentication Control Exception -Exception.authenticationControl.message=This content is not accessible as the current user or from your current location. {0} -Exception.badContent.title=Bad Content Exception -Exception.badContent.message=The content that was archived is not replayable. -Exception.badQuery.title=Bad Query Exception -Exception.badQuery.message=The request is missing information, or is not understood by this server. {0} -Exception.betterRequest.title=Better Request Exception -Exception.betterRequest.message=The request you made can be better expressed with another request. {0} -Exception.configuration.title=Configuration Exception -Exception.configuration.message=This service has not been properly configured. {0} -Exception.liveDocumentNotAvailable.title=Not In Archive -Exception.liveDocumentNotAvailable.message=The document you requested is not in this archive, and is not available from the live web. -Exception.liveWebCacheNotAvailable.title=Internal Service Problem -Exception.liveWebCacheNotAvailable.message=The gateway to the live web is not available. Please try again later. -Exception.resourceIndexNotAvailable.title=Resource Index Not Available Exception -Exception.resourceIndexNotAvailable.message=The Resource Index required to satisfy this request is temporarily unavailable. Please try again later. -Exception.resourceNotAvailable.title=Resource Not Available -Exception.resourceNotAvailable.message=The Resource you have requested is temporarily unavailable. Please try again later. -Exception.resourceNotInArchive.title=Resource Not In Archive -Exception.resourceNotInArchive.message=The Resource you requested is not in this archive. -Exception.anchorWindowTooSmall.title=No Resources within Window Range -Exception.anchorWindowTooSmall.message=The Window Range specified does not match any Resources. You can try expanding the Anchor Window size and repeating the request. - -UIGlobal.fullDate={0,date,H:mm:ss MMM d, yyyy} - -UIGlobal.pageTitle=OpenWayback -UIGlobal.helpLink=Help -UIGlobal.enterWebAddress=Enter Web Address: -UIGlobal.selectYearAll=All -UIGlobal.urlSearchButton=Take Me Back -UIGlobal.advancedSearchLink=Adv. Search -UIGlobal.homeLink=Home -UIGlobal.indexPage=This is OpenWayback. Any URL in ARC or WARC files accessible to this service can be searched above. -UIGlobal.helpPage=Please refer to the OpenWayback documentation. -UIGlobal.helpUrl=https://github.com/iipc/openwayback/wiki/General-Overview -UIGlobal.wrongAccesspoint=You seem to be accessing this OpenWayback via an incorrect URL. Please try one of the following AccessPoints:

- -UIGlobal.loading=Loading... -UIGlobal.impatient=Impatient? -UIGlobal.previous=previous -UIGlobal.next=next -UIGlobal.homePage=Wayback Machine home page - -#Date labels -UIGlobal.DateLabelNone=none -UIGlobal.DateLabelMinute=minute -UIGlobal.DateLabelDay=day -UIGlobal.DateLabelWeek=week -UIGlobal.DateLabelMonth=month -UIGlobal.DateLabelYear=year -UIGlobal.DateLabelYears=years - -MetaReplay.title=Document Metadata -MetaReplay.HTTPHeaders=HTTP Headers -MetaReplay.originalURL=Original URL -MetaReplay.URLKey=URL Key -MetaReplay.captureDate=Capture Date -MetaReplay.captureDateDisplay={0,date,H:mm:ss MMM d, yyyy} -MetaReplay.archiveID=Archive ID -MetaReplay.MIMEType=Mime Type -MetaReplay.digest=Digest - -TimelineView.viewingVersion=Viewing version {0,number,integer} of {1,number,integer} -TimelineView.viewingVersionDate={0,date,H:mm:ss MMM d, yyyy} -TimelineView.timeRange=Time Range -TimelineView.timeRange.years=Years -TimelineView.timeRange.twomonths=Months -TimelineView.timeRange.months=Months -TimelineView.timeRange.days=Days -TimelineView.timeRange.hours=Hours -TimelineView.timeRange.unknown=UNKNOWN -TimelineView.timeRange.auto=Auto({0}) -TimelineView.metaDataCheck=Metadata: -TimelineView.markDateTitle={0,date,H:mm:ss MMM d, yyyy} -TimelineView.firstVersionTitle=First version ({0,date,H:mm:ss MMM d, yyyy}) -TimelineView.prevVersionTitle=Previous version ({0,date,H:mm:ss MMM d, yyyy}) -TimelineView.nextVersionTitle=Next version ({0,date,H:mm:ss MMM d, yyyy}) -TimelineView.lastVersionTitle=Last version ({0,date,H:mm:ss MMM d, yyyy}) -TimelineView.frameSetTitle=WB-Timeline -TimelineView.frameSetNoFramesMessage=You need a browser that supports frames to see this, well not exactly _this_, but what would have been here if you had a frames-capable browser. - -ReplayView.banner=OpenWayback - External links, forms, and search boxes may not function within this collection. Url: {0} time: {1,date,H:mm:ss MMM dd, yyyy} -ReplayView.bannerHideLink=hide -ReplayView.debugBannerRequest=Request Parameters -ReplayView.debugBannerResult=Result Data -ReplayView.debugBannerCookieForm=CookieForm -ReplayView.debugBannerCookieName=Cookie Name: -ReplayView.debugBannerCookieValue=Cookie Value: -ReplayView.debugBannerCookieExpire=Must expire in: -ReplayView.debugBannerCookieDays= days from today -ReplayView.debugBannerCookieSet=Set Cookie -ReplayView.disclaimerText=Note that this document was downloaded, and not saved because it was a duplicate of a \ -previously captured version {0}. HTTP headers presented here are from the original capture. -ReplayView.LiveWebNotCaptured=The Wayback Machine hasn't archived a capture for that URL. -ReplayView.LiveWebCapture=Here's a capture taken {0} minutes ago from the live web that will become part of the permanent archive in the next few months. -ReplayView.noCacheTitle=Wayback Proxy Mode Configuration -ReplayView.noCacheGoto=Go To: -ReplayView.noChacheText=

Your browser is running with Wayback Machine as proxy mode, but it doesn't know which archived collection to use

\ -

When prompted, the Username is the Collection Id or Collection Name for your collection

\ -The password is ignored and may be left blank

\ -

The following collections are available:

- -ReplayVieW.noChacheId=Collection Id - -PathQuery.resultsSummary={0,number,integer} results for {1} -PathQuery.resultRange=between {0,date,MMM dd, yyyy} and {1,date,MMM dd, yyyy} -PathQuery.newVersionIndicator=(new version) -PathQuery.redirectIndicator=(redirect) -PathQuery.classicResultLinkText={0,date,MMM d, yyyy} -PathQuery.anchorWindowText=Set Anchor Window: -PathQuery.firstResults=First results -PathQuery.closeMatchesText=Close Matches: -PathQuery.rssResultsTitle=Wayback OpenSearch Results - -PathPrefixQuery.showingResults=Showing {0,number,integer} to {1,number,integer} of {2,number,integer} results for {3} -PathPrefixQuery.unchangedIndicator=unchanged - -PathQueryClassic.searchedFor=Searched for {0} -PathQueryClassic.searchResults=Search Results for {0,date,MMM d, yyyy} - {1,date,MMM d, yyyy} -PathQueryClassic.resultsSummary={0,choice,0#0 Results|1#1 Result|1<{0,number,integer} Results} -PathQueryClassic.versionsSummary={0,choice,0#(0 Versions)|1#(1 Version)|1<({0,number,integer} Versions)} - - -# 0 = number of unique versions of a page -PathPrefixQuery.versionCount={0,choice,1#1 version|1<{0,number,integer} versions} - -# shown when only a single capture of an URL is found in the index: -# 0 = Date of capture -PathPrefixQuery.singleCaptureDate=1 page from {0,date,MMM d, yyyy} -PathPrefixQuery.captureDate={0,date,MMM d, yyyy} - -# shown when multiple captures of an URL are found in the index: -# 0 = number of captures -# 1 = Date of first capture -# 2 = Date of last capture -PathPrefixQuery.multiCaptureDate={0,choice,1#1 page|1<{0,number,integer} pages} between {1,date,MMM d, yyyy} and {2,date,MMM d, yyyy} - -ResultPartition.columnSummary={0,choice,0#0 pages|1#1 page|1<{0,number,integer} pages} -ResultPartitions.day={0,date,MMM d} -ResultPartitions.hour={0,date,h a} -ResultPartitions.month={0,date,MMM yyyy} -ResultPartitions.twoMonth={0,date,MMM yyyy} - {1,date,MMM yyyy} -ResultPartitions.week={0,date,MMM d} - {1,date,MMM d} -ResultPartitions.year={0,date,yyyy} - -ReplayView.javaScriptComment=\ -// FILE ARCHIVED ON {0,date,H:mm:ss MMM d, yyyy} AND RETRIEVED FROM AN\n\ -// OPENWABACK INSTANCE ON {1,date,H:mm:ss MMM d, yyyy}.\n\ -// JAVASCRIPT APPENDED BY OPENWAYBACK, COPYRIGHT INTERNET ARCHIVE.\n\ -//\n\ -// ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.\n\ -// SECTION 108(a)(3)).\n\ -\n - -AdvancedSearch.url=URL: -AdvancedSearch.exactDate=Exact Date: -AdvancedSearch.earliestDate=Earliest Date: -AdvancedSearch.latestDate=Latest Date: -AdvancedSearch.submitButton=Submit -AdvancedSearch.searchTypeLabel=Show urls -AdvancedSearch.searchTypeExactOption=exactly matching -AdvancedSearch.searchTypePrefixOption=beginning with - - -Partition.columnSummary={0,choice,0#0 pages|1#1 page|1<{0,number,integer} pages} -PartitionSize.dateHeader.day={0,date,MMM d} -PartitionSize.dateHeader.hour={0,date,h a} -PartitionSize.dateHeader.month={0,date,MMM yyyy} -PartitionSize.dateHeader.twomonth={0,date,MMM yyyy} - {1,date,MMM yyyy} -PartitionSize.dateHeader.twoyear={0,date,MMM yyyy} - {1,date,MMM yyyy} -PartitionSize.dateHeader.week={0,date,MMM d} - {1,date,MMM d} -PartitionSize.dateHeader.year={0,date,yyyy} - -GraphTimeline.urlLabel=Url: -GraphTimeline.dateLabel=Date: -GraphTimeline.dateShortFormat={0,date,MMM d, yyyy} -GraphTimeline.dateLongFormat={0,date,H:mm:ss MMM d, yyyy} -GraphTimeline.searchLabel=Search: -GraphTimeline.searchButtonText=Go -GraphTimeline.hideButton=hide - -graph.title=Jump to first record in {0,date,yyyy} : ({0,date,MMM d}) -graph.prevYear= ‹«««Year -graph.prevMonth=«««Month -graph.prevDay=««Day -graph.prevCapture=«Prev -graph.current=See All Versions -graph.nextCapture=Next» -graph.nextDay=Day»» -graph.nextMonth=Month»»» -graph.nextYear=Year»»»» - - -ToolBar.closeTitle=Close the toolbar -ToolBar.closeText=Close -ToolBar.helpTitle=Get some help using OpenWayback -ToolBar.helpText=Help -ToolBar.sparklineTitle=Explore captures for this URL -ToolBar.captureRangeTitle=Timespan for captures of this URL -ToolBar.captureRangeText={0,date,d MMM yy} - {1,date,d MMM yy} -Toolbar.waybackLogoAltTitle=Wayback Machine -Toolbar.alertIconAltTitle=Alert! -ToolBar.numCapturesTitle=See a list of every capture for this URL -ToolBar.numCapturesText={0} captures - -ToolBar.prevTitle={0,date,H:mm:ss MMM d, yyyy} -ToolBar.curDayTitle=You are here: {0,date,H:mm:ss MMM d, yyyy} -ToolBar.curDayText={0,date,d} -ToolBar.nextTitle={0,date,H:mm:ss MMM d, yyyy} - -ToolBar.noPrevMonthText={0,date,MMM} -ToolBar.prevMonthTitle={0,date,d MMM yyyy} -ToolBar.prevMonthText=«{0,date,MMM} -ToolBar.curMonthTitle=You are here: {0,date,H:mm:ss MMM d, yyyy} -ToolBar.curMonthText={0,date,MMM} -ToolBar.noNextMonthText={0,date,MMM} -ToolBar.nextMonthTitle={0,date,d MMM yyyy} -ToolBar.nextMonthText={0,date,MMM} » - -ToolBar.noPrevYearText={0,date,yyyy} -ToolBar.prevYearTitle={0,date,d MMM yyyy} -ToolBar.prevYearText=«{0,date,yyyy} -ToolBar.curYearTitle=You are here: {0,date,H:mm:ss MMM d, yyyy} -ToolBar.curYearText={0,date,yyyy} -ToolBar.noNextYearText={0,date,yyyy} -ToolBar.nextYearTitle={0,date,d MMM yyyy} -ToolBar.nextYearText={0,date,yyyy} » - - - -#3 April 2010 -# 20 May 2010 14:09:56 -PartitionSize.dateHeader.yearGraphLabel={0,date,yyyy} -PartitionSize.dateHeader.monthGraphLabel={0,date,MMM} - -Interstitial.badRequest= Bad Request -Interstitial.welcome=Welcome to OpenWayback. -Interstitial.closeToDate=as close to the date: -Interstitial.available=as is available. - -UrlRedirectNotice.302response=Got an HTTP 302 response at crawl time -UrlRedirectNotice.redirect=Redirecting to... - -HTMLError.tryMatches=Other possible close matches to try: -HTMLError.moreOptions=More options: -HTMLError.trySearching=Try Searching all pages under -HTMLError.likeToTry=Would you like to try the -HTMLError.date=date? - -BubbleCalendar.crawledInfo=has been crawled -BubbleCalendar.crawledInfo2=going all the way back to -BubbleCalendar.crawledInfoDuplicate=A crawl can be a duplicate of the last one. It happens about 25% of the time across 420,000,000 websites. -BubbleCalendar.documentation=Documentation -BubbleCalendar.wbCalNoteTitle=Note -BubbleCalendar.wbCalNote=This calendar view maps the number of times {0} was crawled, not how many times the site was actually updated. More info in the documentation. \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/classes/logging.properties b/bundledApps/tomcat/webapps/ROOT/WEB-INF/classes/logging.properties deleted file mode 100644 index 81ee2d31..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/classes/logging.properties +++ /dev/null @@ -1,26 +0,0 @@ -handlers = java.util.logging.ConsoleHandler -java.util.logging.ConsoleHandler.level = ALL -java.util.logging.ConsoleHandler.formatter= org.archive.util.OneLineSimpleLogger -.level = WARNING -org.archive.wayback.level=WARNING -org.archive.wayback.webapp.AccessPoint.level=INFO -org.archive.wayback.util.webapp.level=ALL - - -# Background thread logging at INFO levels: -org.archive.wayback.accesscontrol.staticmap.StaticMapExclusionFilterFactory.level=INFO -org.archive.wayback.liveweb.URLtoARCCacher.level=INFO -org.archive.wayback.resourceindex.updater.LocalResourceIndexUpdater.level=INFO -org.archive.wayback.resourcestore.indexer.IndexQueueUpdater.level=INFO -org.archive.wayback.resourcestore.indexer.IndexWorker.level=INFO -org.archive.wayback.resourcestore.locationdb.ResourceFileLocationDBUpdater.level=INFO -org.archive.wayback.resourcestore.resourcefile.ResourceFileSourceUpdater.level=INFO - -# HttpClient is too chatty... only want to hear about severe problems -# For more on httpclient logging, -# see http://jakarta.apache.org/commons/httpclient/logging.html -org.apache.commons.httpclient.level = SEVERE - -# PerformanceLogger for timing of query, resource extraction, and replay -#org.archive.wayback.webapp.PerformanceLogger.level=ALL - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/CSSError.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/CSSError.jsp deleted file mode 100644 index 647b97ed..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/CSSError.jsp +++ /dev/null @@ -1,17 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.extractException(request); -WaybackException e = results.getException(); -StringFormatter fmt = results.getWbRequest().getFormatter(); -response.setStatus(e.getStatus()); - -%> -/* CSS wayback retrieval error: - - Title: <%= fmt.format(e.getTitleKey()) %> - Message: <%= fmt.format(e.getMessageKey()) %> - - */ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/HTMLError.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/HTMLError.jsp deleted file mode 100644 index 0c2174d5..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/HTMLError.jsp +++ /dev/null @@ -1,112 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ page import="java.util.List" -%><%@ page import="java.util.Date" -%><%@ page import="java.util.Iterator" -%><%@ page import="org.archive.wayback.exception.WaybackException" -%><%@ page import="org.archive.wayback.ResultURIConverter" -%><%@ page import="org.archive.wayback.exception.ResourceNotInArchiveException" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><%@ page import="org.archive.wayback.util.url.UrlOperations" -%><%@ page import="org.archive.wayback.partition.PartitionsToGraph" -%><%@ page import="org.archive.wayback.util.partition.Partitioner" -%><%@ page import="org.archive.wayback.util.partition.Partition" -%><%@ page import="org.archive.wayback.util.partition.PartitionSize" -%><%@ page import="org.archive.wayback.partition.PartitionPartitionMap" -%><%@page import="org.archive.wayback.exception.SpecificCaptureReplayException" -%><% -UIResults results = UIResults.extractException(request); -WaybackException e = results.getException(); -WaybackRequest wbr = results.getWbRequest(); -e.setupResponse(response); -String staticPrefix = wbr.getAccessPoint().getStaticPrefix(); -String queryPrefix = wbr.getAccessPoint().getQueryPrefix(); -String replayPrefix = wbr.getAccessPoint().getReplayPrefix(); -String requestUrl = wbr.getRequestUrl(); - -StringFormatter fmt = results.getWbRequest().getFormatter(); -%> - - -
-
-
- -

<%= fmt.format(e.getTitleKey()) %>

-

<%=fmt.escapeHtml( fmt.format(e.getMessageKey(),e.getMessage()) )%>

-<% -if(e instanceof ResourceNotInArchiveException) { - ResourceNotInArchiveException niae = (ResourceNotInArchiveException) e; - List closeMatches = niae.getCloseMatches(); - if(closeMatches != null && !closeMatches.isEmpty()) { -%> -

<%= fmt.format("HTMLError.tryMatches") %>

-

-<% - WaybackRequest tmp = wbr.clone(); - for(String closeMatch : closeMatches) { - tmp.setRequestUrl(closeMatch); - String link = queryPrefix + "query?" + - tmp.getQueryArguments(); -%> - <%= closeMatch %>
-<% - } - } - String parentUrl = UrlOperations.getUrlParentDir(requestUrl); - if(parentUrl != null) { - WaybackRequest tmp = wbr.clone(); - tmp.setRequestUrl(parentUrl); - tmp.setUrlQueryRequest(); - String link = queryPrefix + "query?" + - tmp.getQueryArguments(); - String escapedLink = fmt.escapeHtml(link); - String escapedParentUrl = fmt.escapeHtml(parentUrl); - %> -

-

<%= fmt.format("HTMLError.moreOptions") %>

-

<%= fmt.format("HTMLError.trySearching") %> <%= escapedParentUrl %>

- <% - } -} else if(e instanceof SpecificCaptureReplayException) { - %> - - <% -} -%> - -
-
-
- - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/JavaScriptError.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/JavaScriptError.jsp deleted file mode 100644 index d09600fc..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/JavaScriptError.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -UIResults results = UIResults.extractException(request); -WaybackException e = results.getException(); -StringFormatter fmt = results.getWbRequest().getFormatter(); -response.setStatus(e.getStatus()); - -%> -// Javascript wayback retrieval error: -// -// Title: <%= fmt.format(e.getTitleKey()) %> -// Message: <%= fmt.format(e.getMessageKey()) %> diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/OpenSearchError.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/OpenSearchError.jsp deleted file mode 100644 index 68a18040..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/OpenSearchError.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8" -%><%@ - page import="org.archive.wayback.exception.WaybackException" -%><%@ - page import="org.archive.wayback.core.UIResults" -%><%@ - page import="org.archive.wayback.util.StringFormatter" -%><% - -UIResults results = UIResults.extractException(request); -WaybackException e = results.getException(); -StringFormatter fmt = results.getWbRequest().getFormatter(); - -%> - - - Wayback OpenSearch Error - http://archive-access.sourceforge.net/projects/wayback - OpenSearch Error - 1 - 1 - 1 - - <%= UIResults.encodeXMLContent(fmt.format(e.getTitleKey())) %> - <%= UIResults.encodeXMLContent(fmt.format(e.getMessageKey())) %> - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/TimegateError.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/TimegateError.jsp deleted file mode 100644 index 3713ef4e..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/TimegateError.jsp +++ /dev/null @@ -1,18 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8" -%><%@ page import="org.archive.wayback.exception.WaybackException" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><% -response.setHeader("Vary", "negotiate,accept-datetime"); -UIResults results = UIResults.extractException(request); -WaybackException e = results.getException(); -StringFormatter fmt = results.getWbRequest().getFormatter(); -response.setStatus(e.getStatus()); -%> - - - <%= UIResults.encodeXMLContent(fmt.format(e.getTitleKey())) %> - <%= UIResults.encodeXMLContent(fmt.format(e.getMessageKey())) %> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/XMLError.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/XMLError.jsp deleted file mode 100644 index ae68bb42..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/XMLError.jsp +++ /dev/null @@ -1,19 +0,0 @@ - -<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -UIResults results = UIResults.extractException(request); -WaybackException e = results.getException(); -StringFormatter fmt = results.getWbRequest().getFormatter(); -//response.setStatus(e.getStatus()); - -%> - - - <%= UIResults.encodeXMLContent(fmt.format(e.getTitleKey())) %> - <%= UIResults.encodeXMLContent(fmt.format(e.getMessageKey())) %> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/error_image.gif b/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/error_image.gif deleted file mode 100644 index 6878f84a..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/exception/error_image.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/antlr-2.7.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/antlr-2.7.5.jar deleted file mode 100644 index fbe5e3cd..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/antlr-2.7.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/aopalliance-1.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/aopalliance-1.0.jar deleted file mode 100644 index 578b1a0c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/aopalliance-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/arq-2.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/arq-2.2.jar deleted file mode 100644 index b98c060f..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/arq-2.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/arq-extra-2.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/arq-extra-2.2.jar deleted file mode 100644 index 5ef39912..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/arq-extra-2.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/bsh-2.0b4.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/bsh-2.0b4.jar deleted file mode 100644 index 36fe03d7..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/bsh-2.0b4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-cli-1.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-cli-1.0.jar deleted file mode 100644 index 22a004e1..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-cli-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-codec-1.6.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-codec-1.6.jar deleted file mode 100644 index ee1bc49a..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-codec-1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-collections-3.2.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-collections-3.2.1.jar deleted file mode 100644 index c35fa1fe..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-collections-3.2.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-configuration-1.8.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-configuration-1.8.jar deleted file mode 100644 index ae9ae996..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-configuration-1.8.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-dbcp-1.2.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-dbcp-1.2.2.jar deleted file mode 100644 index faea0562..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-dbcp-1.2.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-el-1.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-el-1.0.jar deleted file mode 100644 index 608ed796..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-el-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-httpclient-3.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-httpclient-3.1.jar deleted file mode 100644 index 7c59774a..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-httpclient-3.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-io-2.4.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-io-2.4.jar deleted file mode 100644 index 90035a4f..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-io-2.4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-lang-2.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-lang-2.5.jar deleted file mode 100644 index ae491da8..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-lang-2.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-logging-1.1.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-logging-1.1.1.jar deleted file mode 100644 index 1deef144..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-logging-1.1.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-math3-3.1.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-math3-3.1.1.jar deleted file mode 100644 index 43b52159..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-math3-3.1.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-net-1.4.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-net-1.4.1.jar deleted file mode 100644 index 9666a92c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-net-1.4.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-pool-1.5.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-pool-1.5.5.jar deleted file mode 100644 index 7a96587c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/commons-pool-1.5.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/concurrent-jena-1.3.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/concurrent-jena-1.3.2.jar deleted file mode 100644 index f01955af..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/concurrent-jena-1.3.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/core-3.1.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/core-3.1.1.jar deleted file mode 100644 index ae0b6358..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/core-3.1.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/dsiutils-2.0.12.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/dsiutils-2.0.12.jar deleted file mode 100644 index 18ab6f12..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/dsiutils-2.0.12.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/fastutil-6.5.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/fastutil-6.5.2.jar deleted file mode 100644 index 0b4c0984..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/fastutil-6.5.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/foresite-0.9.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/foresite-0.9.jar deleted file mode 100644 index 077dd479..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/foresite-0.9.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/guava-17.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/guava-17.0.jar deleted file mode 100644 index 661fc747..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/guava-17.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/guava-r09-jarjar.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/guava-r09-jarjar.jar deleted file mode 100644 index 695078e9..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/guava-r09-jarjar.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/hadoop-core-0.20.2-cdh3u4.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/hadoop-core-0.20.2-cdh3u4.jar deleted file mode 100644 index 800ea59d..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/hadoop-core-0.20.2-cdh3u4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/htmlparser-1.6.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/htmlparser-1.6.jar deleted file mode 100644 index 2981ca55..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/htmlparser-1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/httpclient-4.3.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/httpclient-4.3.5.jar deleted file mode 100644 index 1db1225f..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/httpclient-4.3.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/icu4j-3.4.4.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/icu4j-3.4.4.jar deleted file mode 100644 index f5e8c167..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/icu4j-3.4.4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/iri-0.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/iri-0.5.jar deleted file mode 100644 index 3a34d207..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/iri-0.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jackson-core-asl-1.5.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jackson-core-asl-1.5.2.jar deleted file mode 100644 index 24107e68..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jackson-core-asl-1.5.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jackson-mapper-asl-1.5.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jackson-mapper-asl-1.5.2.jar deleted file mode 100644 index ebf9b5ef..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jackson-mapper-asl-1.5.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jdom-1.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jdom-1.0.jar deleted file mode 100644 index 288e64cb..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jdom-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/je-4.1.6.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/je-4.1.6.jar deleted file mode 100644 index 866543a8..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/je-4.1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jedis-2.0.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jedis-2.0.0.jar deleted file mode 100644 index aaf61e78..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jedis-2.0.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jena-2.5.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jena-2.5.5.jar deleted file mode 100644 index 4380e1de..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jena-2.5.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jenatest-2.5.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jenatest-2.5.5.jar deleted file mode 100644 index 80856cfb..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jenatest-2.5.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jets3t-0.6.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jets3t-0.6.1.jar deleted file mode 100644 index e4048dd6..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jets3t-0.6.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jettison-1.0-beta-1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jettison-1.0-beta-1.jar deleted file mode 100644 index 146e0d47..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jettison-1.0-beta-1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/joda-time-1.6.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/joda-time-1.6.jar deleted file mode 100644 index 68068a4b..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/joda-time-1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jsap-2.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jsap-2.1.jar deleted file mode 100644 index 15d1f37a..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jsap-2.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/json-20131018.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/json-20131018.jar deleted file mode 100644 index 394caded..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/json-20131018.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/json-jena-1.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/json-jena-1.0.jar deleted file mode 100644 index 92b6be24..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/json-jena-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/juniversalchardet-1.0.3.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/juniversalchardet-1.0.3.jar deleted file mode 100644 index ef4d7af5..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/juniversalchardet-1.0.3.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-arc-1.0.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-arc-1.0.1.jar deleted file mode 100644 index 01893efc..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-arc-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-archive-common-1.0.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-archive-common-1.0.1.jar deleted file mode 100644 index 4aae191c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-archive-common-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-common-1.0.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-common-1.0.1.jar deleted file mode 100644 index a17358c7..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-common-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-gzip-1.0.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-gzip-1.0.1.jar deleted file mode 100644 index 12adfa79..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-gzip-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-warc-1.0.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-warc-1.0.1.jar deleted file mode 100644 index fd23bc7f..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/jwat-warc-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/libidn-1.15.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/libidn-1.15.jar deleted file mode 100644 index 79a44f92..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/libidn-1.15.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/log4j-1.2.12.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/log4j-1.2.12.jar deleted file mode 100644 index 9b5a7200..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/log4j-1.2.12.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/lucene-core-2.2.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/lucene-core-2.2.0.jar deleted file mode 100644 index 2469481c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/lucene-core-2.2.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-access-control-core-1.0.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-access-control-core-1.0.2.jar deleted file mode 100644 index a312aba5..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-access-control-core-1.0.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-cdx-server-2.3.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-cdx-server-2.3.0.jar deleted file mode 100644 index 54fbfa29..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-cdx-server-2.3.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-core-2.3.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-core-2.3.0.jar deleted file mode 100644 index 91c1b5b7..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/openwayback-core-2.3.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/oro-2.0.8.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/oro-2.0.8.jar deleted file mode 100644 index 23488d26..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/oro-2.0.8.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/rome-0.9.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/rome-0.9.jar deleted file mode 100644 index ba482aec..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/rome-0.9.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/slf4j-api-1.7.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/slf4j-api-1.7.2.jar deleted file mode 100644 index 1a887083..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/slf4j-api-1.7.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar deleted file mode 100644 index 37206d38..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-aop-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-asm-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-asm-3.0.6.RELEASE.jar deleted file mode 100644 index be6a913d..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-asm-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-beans-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-beans-3.0.6.RELEASE.jar deleted file mode 100644 index c4bc8507..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-beans-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-context-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-context-3.0.6.RELEASE.jar deleted file mode 100644 index 57f75703..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-context-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-context-support-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-context-support-3.0.6.RELEASE.jar deleted file mode 100644 index e957f85f..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-context-support-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-core-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-core-3.0.6.RELEASE.jar deleted file mode 100644 index c65358d1..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-core-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-expression-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-expression-3.0.6.RELEASE.jar deleted file mode 100644 index 40648588..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-expression-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-web-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-web-3.0.6.RELEASE.jar deleted file mode 100644 index 761578b0..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-web-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-webmvc-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-webmvc-3.0.6.RELEASE.jar deleted file mode 100644 index 4f041975..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/spring-webmvc-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/stax-api-1.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/stax-api-1.0.jar deleted file mode 100644 index 8687bd31..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/stax-api-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/transform-3.0.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/transform-3.0.2.jar deleted file mode 100644 index f8d82528..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/transform-3.0.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/webarchive-commons-1.1.5.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/webarchive-commons-1.1.5.jar deleted file mode 100644 index 0809d561..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/webarchive-commons-1.1.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/wstx-asl-3.0.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/wstx-asl-3.0.0.jar deleted file mode 100644 index 4bbab210..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/wstx-asl-3.0.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xalan-2.7.0.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xalan-2.7.0.jar deleted file mode 100644 index 007be396..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xalan-2.7.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xercesImpl-2.7.1.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xercesImpl-2.7.1.jar deleted file mode 100644 index 0b100e14..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xercesImpl-2.7.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xml-apis-1.0.b2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xml-apis-1.0.b2.jar deleted file mode 100644 index ad33a5af..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xml-apis-1.0.b2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xmlParserAPIs-2.0.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xmlParserAPIs-2.0.2.jar deleted file mode 100644 index eae78043..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xmlParserAPIs-2.0.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xmlenc-0.52.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xmlenc-0.52.jar deleted file mode 100644 index ec568b4c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xmlenc-0.52.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xpp3_min-1.1.3.4.O.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xpp3_min-1.1.3.4.O.jar deleted file mode 100644 index 640441da..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xpp3_min-1.1.3.4.O.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xstream-1.2.2.jar b/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xstream-1.2.2.jar deleted file mode 100644 index 31721c5f..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/WEB-INF/lib/xstream-1.2.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/BubbleCalendar.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/BubbleCalendar.jsp deleted file mode 100644 index bca1cbbb..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/BubbleCalendar.jsp +++ /dev/null @@ -1,477 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Calendar" %> -<%@ page import="java.util.Date" %> -<%@ page import="java.util.Iterator" %> -<%@ page import="org.archive.wayback.ResultURIConverter" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.partition.BubbleCalendarData" %> -<%@ page import="org.archive.wayback.util.Timestamp" %> -<%@ page import="org.archive.wayback.util.partition.Partition" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> - - -<% -UIResults results = UIResults.extractCaptureQuery(request); - -StringFormatter fmt = results.getWbRequest().getFormatter(); -ResultURIConverter uriConverter = results.getURIConverter(); - -// deployment-specific URL prefixes -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); - -//deployment-specific address for the graph generator: -String graphJspPrefix = results.getContextConfig("graphJspPrefix"); -if(graphJspPrefix == null) { - graphJspPrefix = queryPrefix; -} - -// graph size "constants": These are currently baked-in to the JS logic... -int imgWidth = 0; -int imgHeight = 75; -int yearWidth = 49; -int monthWidth = 5; -int startYear = Timestamp.getStartYear(); - -for (int year = startYear; year <= Calendar.getInstance().get(Calendar.YEAR); year++) - imgWidth += yearWidth; - -BubbleCalendarData data = new BubbleCalendarData(results); - -String yearEncoded = data.getYearsGraphString(imgWidth,imgHeight); -String yearImgUrl = graphJspPrefix + "jsp/graph.jsp?nomonth=1&graphdata=" + yearEncoded; - -// a Calendar object for doing days-in-week, day-of-week,days-in-month math: -Calendar cal = BubbleCalendarData.getUTCCalendar(); - -%> - - - - - - - - - - - -
- - -
- - - -
- -
- - - -
- -
-

<%= data.searchUrlForHTML %> <%= fmt.format("BubbleCalendar.crawledInfo") %><%= fmt.format("{0} times",data.numResults) %> <%= fmt.format("BubbleCalendar.crawledInfo2") %><%= fmt.format("{0,date,MMMM d, yyyy}",data.firstResultDate) %>.

-

<%= fmt.format("BubbleCalendar.crawledInfoDuplicate") %>"><%= fmt.format("BubbleCalendar.documentation") %>

-
-
- -
- -
- -
- -
- -
"> - sparklines - - -
-
- <% - for(int i = startYear; i <= Calendar.getInstance().get(Calendar.YEAR); i++) { - String curClass = "inactiveHighlight"; - if(data.yearNum == i) { - curClass = "activeHighlight"; - } - %> - - <% - } - %> -
-
-
- -
- -
- - - - -<% -// draw 12 months, 0-11 (0=Jan, 11=Dec) -for(int moy = 0; moy < 12; moy++) { - Partition> curMonth = data.monthsByDay.get(moy); - List> monthDays = curMonth.list(); -%> -
- - - - - - - - - -<% - cal.setTime(curMonth.getStart()); - int skipDays = cal.get(Calendar.DAY_OF_WEEK) - 1; - int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - // skip until the 1st: - for(int i = 0; i < skipDays; i++) { - %><% - } - int dow = skipDays; - int dom; - for(dom = 0; dom < daysInMonth; dom++) { - - - int count = monthDays.get(dom).count(); - if(count > 0) { - // one or more captures in this day: - CaptureSearchResult firstCaptureInDay = - monthDays.get(dom).list().get(0); - String replayUrl = uriConverter.makeReplayURI( - firstCaptureInDay.getCaptureTimestamp(), - firstCaptureInDay.getOriginalUrl()); - Date firstCaptureInDayDate = firstCaptureInDay.getCaptureDate(); - String safeUrl = fmt.escapeHtml(replayUrl); - %><% - - } else { - // zero captures in this day: - %><% - - } - - - if(((dom+skipDays+1) % 7) == 0) { - // end of the week, start a new tr: - %><% - } - } - // fill in blank days until the end of the current week: - while(((dom+skipDays) % 7) != 0) { - %><% - dom++; - } -%> - - -
-
-
- -
">
-
-
-
-
-
-
- -<% -} -%> -
-
-<% - -for(int moy = 0; moy < 12; moy++) { - Partition> curMonth = data.monthsByDay.get(moy); - List> monthDays = curMonth.list(); -%> -
- - - - - - - - - -<% - cal.setTime(curMonth.getStart()); - int skipDays = cal.get(Calendar.DAY_OF_WEEK) - 1; - int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - // skip until the 1st: - for(int i = 0; i < skipDays; i++) { - %><% - } - int dow = skipDays; - int dom; - for(dom = 0; dom < daysInMonth; dom++) { - - - int count = monthDays.get(dom).count(); - - if(count > 0) { - // one or more captures in this day: - CaptureSearchResult firstCaptureInDay = - monthDays.get(dom).list().get(0); - String replayUrl = uriConverter.makeReplayURI( - firstCaptureInDay.getCaptureTimestamp(), - firstCaptureInDay.getOriginalUrl()); - Date firstCaptureInDayDate = firstCaptureInDay.getCaptureDate(); - String safeUrl = fmt.escapeHtml(replayUrl); - - %><% - - } else { - // zero captures in this day: - %><% - - } - - - if(((dom+skipDays+1) % 7) == 0) { - // end of the week, start a new tr: - %><% - } - } - // fill in blank days until the end of the current week: - while(((dom+skipDays) % 7) != 0) { - %><% - dom++; - } -%> - - -
<%= fmt.format("{0,date,MMM}",curMonth.getStart()) %>
-
-
-

<%= fmt.format("{0,date,MMMMM d, yyyy}",firstCaptureInDayDate) %>

-

<%= count %> snapshots

-
    - <% - Iterator dayItr = - monthDays.get(dom).iterator(); - while(dayItr.hasNext()) { - CaptureSearchResult c = dayItr.next(); - String replayUrl2 = uriConverter.makeReplayURI( - c.getCaptureTimestamp(),c.getOriginalUrl()); - String safeUrl2 = fmt.escapeHtml(replayUrl2); - %> -
  • <%= fmt.format("{0,date,HH:mm:ss}",c.getCaptureDate()) %>
  • - <% - } - %> -
-
- -
-
-
-
<%= dom + 1 %>
-
-
-
-<% -} -%> -
-
-
-

<%= fmt.format("BubbleCalendar.wbCalNoteTitle") %>

-

<%= fmt.format("BubbleCalendar.wbCalNote", data.searchUrlForHTML, fmt.format("UIGlobal.helpUrl")) %>

-
-
- - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/CalendarResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/CalendarResults.jsp deleted file mode 100644 index 372c2d8a..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/CalendarResults.jsp +++ /dev/null @@ -1,206 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ page import="java.util.List" -%><%@ page import="java.util.ArrayList" -%><%@ page import="java.util.Date" -%><%@ page import="java.util.Iterator" -%><%@ page import="java.text.ParseException" -%><%@ page import="org.archive.wayback.WaybackConstants" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.partition.CaptureSearchResultPartitionMap" -%><%@ page import="org.archive.wayback.util.partition.Partition" -%><%@ page import="org.archive.wayback.util.partition.Partitioner" -%><%@ page import="org.archive.wayback.util.partition.PartitionSize" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%> -<% - -UIResults results = UIResults.extractCaptureQuery(request); - -WaybackRequest wbRequest = results.getWbRequest(); -CaptureSearchResults cResults = results.getCaptureResults(); -StringFormatter fmt = wbRequest.getFormatter(); -String searchString = fmt.escapeHtml(wbRequest.getRequestUrl()); -List closeMatches = cResults.getCloseMatches(); - -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); - -Date searchStartDate = wbRequest.getStartDate(); -Date searchEndDate = wbRequest.getEndDate(); -long firstResult = cResults.getFirstReturned(); -long lastResult = cResults.getReturnedCount() + firstResult; -long resultCount = cResults.getMatchingCount(); - -CaptureSearchResultPartitionMap map = - new CaptureSearchResultPartitionMap(); -Partitioner partitioner = - new Partitioner(map); -PartitionSize size = partitioner.getSize(searchStartDate,searchEndDate,13); -List> partitions = - partitioner.getRange(size,searchStartDate,searchEndDate); - -Iterator it = cResults.iterator(); -partitioner.populate(partitions,it); -int numPartitions = partitions.size(); -%> - - - - - -
- <%= fmt.format("PathQueryClassic.searchedFor",searchString) %> - - <%= fmt.format("PathQuery.anchorWindowText") %> - - <%= fmt.format("PathQueryClassic.resultsSummary",resultCount) %> -
-
- - - - - - - - - -<% - for(int i = 0; i < numPartitions; i++) { - Partition partition = partitions.get(i); -%> - -<% - } -%> - - - - - - - -<% - for(int i = 0; i < numPartitions; i++) { - Partition partition = partitions.get(i); -%> - -<% - } -%> - - - - - - -<% - boolean first = false; - String lastMD5 = null; - - for(int i = 0; i < numPartitions; i++) { - Partition partition = partitions.get(i); - List partitionResults = partition.list(); -%> - -<% - } - -%> - - -
- <%= fmt.format("PathQueryClassic.searchResults",searchStartDate,searchEndDate) %> -
- <%= fmt.format("PartitionSize.dateHeader."+size.name(),partition.getStart(), partition.getEnd()) %> -
- <%= fmt.format("Partition.columnSummary",partition.count()) %> -
-<% - if(partitionResults.size() == 0) { -%> -   -<% - } else { - - for(int j = 0; j < partitionResults.size(); j++) { - - CaptureSearchResult result = partitionResults.get(j); - String url = result.getUrlKey(); - String captureTimestamp = result.getCaptureTimestamp(); - Date captureDate = result.getCaptureDate(); - String prettyDate = fmt.format("PathQuery.classicResultLinkText", - captureDate); - String origHost = result.getOriginalHost(); - String MD5 = result.getDigest(); - String redirectFlag = (0 == result.getRedirectUrl().compareTo("-")) - ? "" : fmt.format("PathPrefixQuery.redirectIndicator"); - String httpResponse = result.getHttpCode(); - String mimeType = result.getMimeType(); - - String arcFile = result.getFile(); - String arcOffset = String.valueOf(result.getOffset()); - - String replayUrl = fmt.escapeHtml(results.resultToReplayUrl(result)); - - boolean updated = false; - if(lastMD5 == null) { - lastMD5 = MD5; - updated = true; - } else if(0 != lastMD5.compareTo(MD5)) { - updated = true; - lastMD5 = MD5; - } - String updateStar = updated ? "*" : ""; -%> - <%= prettyDate %> <%= updateStar %>

-<% - - } - - } -%> -
- - -<% -if(closeMatches != null && !closeMatches.isEmpty()) { - WaybackRequest tmp = wbRequest.clone(); - - - %> - Close Matches:
- <% - for(String closeMatch : closeMatches) { - tmp.setRequestUrl(closeMatch); - String link = fmt.escapeHtml(tmp.getAccessPoint().getQueryPrefix() + - "query?" + tmp.getQueryArguments()); - closeMatch = fmt.escapeHtml(closeMatch); - %> - <%= closeMatch %>
- <% - } -} -// show page indicators: -if(cResults.getNumPages() > 1) { - int curPage = cResults.getCurPageNum(); - %> -
- <% - for(int i = 1; i <= cResults.getNumPages(); i++) { - if(i == curPage) { - %> - <%= i %> - <% - } else { - %> - <%= i %> - <% - } - } -} -%> diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/HTMLCaptureResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/HTMLCaptureResults.jsp deleted file mode 100644 index 48ce766b..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/HTMLCaptureResults.jsp +++ /dev/null @@ -1,116 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ page import="java.util.Iterator" -%><%@ page import="java.util.ArrayList" -%><%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.WaybackConstants" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%> -<% - -UIResults results = UIResults.extractCaptureQuery(request); -WaybackRequest wbRequest = results.getWbRequest(); -CaptureSearchResults cResults = results.getCaptureResults(); -StringFormatter fmt = wbRequest.getFormatter(); - -String searchString = wbRequest.getRequestUrl(); - -long resultCount = cResults.getReturnedCount(); -Date searchStartDate = wbRequest.getStartDate(); -Date searchEndDate = wbRequest.getEndDate(); - -Iterator itr = cResults.iterator(); -%> - <%= fmt.format("PathQuery.resultsSummary",resultCount,searchString) %> -

- <%= fmt.format("PathQuery.resultRange",searchStartDate,searchEndDate) %> - <%= fmt.format("PathQuery.anchorWindowText") %> - -
- <% - boolean first = false; - String lastMD5 = null; - String lastUrl = null; - while(itr.hasNext()) { - CaptureSearchResult result = (CaptureSearchResult) itr.next(); - - String url = result.getUrlKey(); - if(url != lastUrl) { - lastMD5 = null; - } - String prettyDate = result.getCaptureTimestamp(); - String origHost = result.getOriginalHost(); - String MD5 = result.getDigest(); - String redirectFlag = (0 == result.getRedirectUrl().compareTo("-")) - ? "" : fmt.format("PathQuery.redirectIndicator"); - String httpResponse = result.getHttpCode(); - String mimeType = result.getMimeType(); - - String arcFile = result.getFile(); - String arcOffset = String.valueOf(result.getOffset()); - - String replayUrl = results.resultToReplayUrl(result); - - boolean updated = false; - if(lastMD5 == null) { - lastMD5 = MD5; - updated = true; - } else if(0 != lastMD5.compareTo(MD5)) { - updated = true; - lastMD5 = MD5; - } - if(updated) { - %> - <%= prettyDate %> - <%= origHost %> - <%= httpResponse %> - <%= mimeType %> - - <%= redirectFlag %> - <%= fmt.format("PathQuery.newVersionIndicator") %> - -
- <% - } else { - %> -    <%= prettyDate %> - <%= origHost %> - -
- <% - } - } - -// show page indicators: -int curPage = cResults.getCurPageNum(); -if(curPage > cResults.getNumPages()) { - %> -
- First results - <% -} else if(cResults.getNumPages() > 1) { - %> -
- <% - for(int i = 1; i <= cResults.getNumPages(); i++) { - if(i == curPage) { - %> - <%= i %> - <% - } else { - %> - <%= i %> - <% - } - } -} -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/HTMLUrlResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/HTMLUrlResults.jsp deleted file mode 100644 index c95ed08f..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/HTMLUrlResults.jsp +++ /dev/null @@ -1,114 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ page import="java.util.Iterator" -%><%@ page import="java.util.ArrayList" -%><%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.ResultURIConverter" -%><%@ page import="org.archive.wayback.WaybackConstants" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.UrlSearchResult" -%><%@ page import="org.archive.wayback.core.UrlSearchResults" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%> -<% -UIResults results = UIResults.extractUrlQuery(request); -WaybackRequest wbRequest = results.getWbRequest(); -UrlSearchResults uResults = results.getUrlResults(); -ResultURIConverter uriConverter = results.getURIConverter(); -StringFormatter fmt = wbRequest.getFormatter(); - -String searchString = wbRequest.getRequestUrl(); - - - - -Date searchStartDate = wbRequest.getStartDate(); -Date searchEndDate = wbRequest.getEndDate(); - -long firstResult = uResults.getFirstReturned(); -long lastResult = uResults.getReturnedCount() + firstResult; - -long totalCaptures = uResults.getMatchingCount(); - -%> -<%= fmt.format("PathPrefixQuery.showingResults",firstResult + 1,lastResult, - totalCaptures,searchString) %> -
- -
-<% -Iterator itr = uResults.iterator(); -while(itr.hasNext()) { - UrlSearchResult result = itr.next(); - - String urlKey = result.getUrlKey(); - String originalUrl = result.getOriginalUrl(); - String firstDateTSss = result.getFirstCaptureTimestamp(); - String lastDateTSss = result.getLastCaptureTimestamp(); - long numCaptures = result.getNumCaptures(); - long numVersions = result.getNumVersions(); - - Date firstDate = result.getFirstCaptureDate(); - Date lastDate = result.getLastCaptureDate(); - - if(numCaptures == 1) { - String ts = result.getFirstCaptureTimestamp(); - String anchor = uriConverter.makeReplayURI(ts,originalUrl); - %> - - <%= urlKey %> - - - <%= fmt.format("PathPrefixQuery.versionCount",numVersions) %> - -
- - <%= fmt.format("PathPrefixQuery.singleCaptureDate",firstDate) %> - - <% - - } else { - String anchor = results.makeCaptureQueryUrl(originalUrl); - %> - - <%= urlKey %> - - - <%= fmt.format("PathPrefixQuery.versionCount",numVersions) %> - -
- - <%= fmt.format("PathPrefixQuery.multiCaptureDate",numCaptures,firstDate,lastDate) %> - - <% - } - %> -
-
- <% -} - -// show page indicators: -int curPage = uResults.getCurPageNum(); -if(curPage > uResults.getNumPages()) { - %> -
- <%= fmt.format("PathQuery.firstResults") %> - <% -} else if(uResults.getNumPages() > 1) { - %> -
- <% - for(int i = 1; i <= uResults.getNumPages(); i++) { - if(i == curPage) { - %> - <%= i %> - <% - } else { - %> - <%= i %> - <% - } - } -} -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/Memento.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/Memento.jsp deleted file mode 100644 index a329ebcb..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/Memento.jsp +++ /dev/null @@ -1,236 +0,0 @@ -<%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.archivalurl.ArchivalUrl" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.ResultURIConverter" -%><%@ page import="java.text.SimpleDateFormat" -%><%@ page import="org.archive.wayback.util.Timestamp" -%><%@ page import="java.util.Iterator" -%><%@ page import="java.util.List" -%><%@ page import="java.util.ArrayList" -%><%@ page import="org.archive.wayback.ResultURIConverter" -%><%@ page import="java.util.TimeZone" -%><%@ page import="java.io.PrintWriter" -%><%@ page import="org.archive.wayback.archivalurl.ArchivalUrlResultURIConverter" -%><% - //timegate implementation - String method = request.getMethod(); - // may be there is better place to put this peace of code - if (!(method.equals("GET") || method.equals("HEAD"))) { - response.setStatus(405); - response.setHeader("Allow", "GET, HEAD"); - return; - } - - response.setHeader("Vary", "negotiate,accept-datetime"); - SimpleDateFormat httpformatterl = new SimpleDateFormat( - "E, dd MMM yyyy HH:mm:ss z"); - TimeZone tzo = TimeZone.getTimeZone("GMT"); - httpformatterl.setTimeZone(tzo); - SimpleDateFormat formatterk = new SimpleDateFormat("yyyyMMddHHmmss"); - formatterk.setTimeZone(tzo); - Date now = new Date(); - UIResults results = UIResults.extractCaptureQuery(request);//nuzno potom perepisat' - - WaybackRequest wbRequest = results.getWbRequest(); - - String u = wbRequest.getRequestUrl(); - - String dtdate = wbRequest.get("dtconneg"); - - CaptureSearchResults cResults = results.getCaptureResults(); - CaptureSearchResult res = cResults.getClosest(); - - Date closestDate = res.getCaptureDate(); - - String agguri = results.getContextConfig("aggregationPrefix") - + "timebundle/" + u; - String timemap = " , <" - + results.getContextConfig("aggregationPrefix") - + "timemap/link/" + u - + ">;rel=\"timemap\"; type=\"application/link-format\""; - String origlink = ", <" + u + ">;rel=\"original\""; - String uriPrefix = wbRequest.getAccessPoint().getReplayPrefix(); - - ArchivalUrl aUrl = new ArchivalUrl(wbRequest); - String replayUrl = uriPrefix + aUrl.toString(res.getCaptureTimestamp(), - res.getOriginalUrl()); - - StringBuffer sb = new StringBuffer(); - - String memento = ",<" + replayUrl + ">;rel=\"memento\";datetime=\"" - + httpformatterl.format(closestDate) + "\""; - StringFormatter fmt = results.getWbRequest().getFormatter(); - Date f = cResults.getFirstResultDate(); - Date l = cResults.getLastResultDate(); - - String mfl = null; - if ((closestDate.equals(f)) && closestDate.equals(l)) { - mfl = ", <" - + uriPrefix - + formatterk.format(f) - + "/" - + u - + ">;rel=\"first last memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } else if (closestDate.equals(f)) { - mfl = ", <" + uriPrefix + formatterk.format(f) + "/" + u - + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - mfl = mfl + ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - - } else if (closestDate.equals(l)) { - mfl = ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - mfl = mfl + ", <" + uriPrefix + formatterk.format(f) + "/" + u - + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } else { - - mfl = memento; - mfl = mfl + ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - mfl = mfl + ", <" + uriPrefix + formatterk.format(f) + "/" + u - + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } - - sb = new StringBuffer(mfl); - - if (dtdate == null) - dtdate = ""; - - //special handling date unparsable case - if (dtdate.equals("unparsable")) { - String fl = null; - if (f.equals(l)) { - fl = ", <" - + uriPrefix - + formatterk.format(f) - + "/" - + u - + ">;rel=\"last first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - - } else { - fl = ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - fl = fl + ", <" + uriPrefix + formatterk.format(f) + "/" - + u + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } - - response.setStatus(400); - response.setHeader("Link", "<" + agguri - + ">;rel=\"timebundle\"" + origlink + fl + timemap); - - StringBuffer sberr = new StringBuffer(); - sberr.append("400 Bad Request"); - sberr.append("
"); - sberr.append("

"); - sberr.append("
Error: 400
"); - sberr.append("

Bad Date Request.

"); - sberr.append("However, we found archived resources available in the following time-range: "); - sberr.append("
    "); - - sberr.append("
  • Very first available Memento " + " at " - + uriPrefix + formatterk.format(f) + "/" + u - + "
    \n"); - sberr.append("
  • Most recent available Memento " + " at " - + uriPrefix + formatterk.format(f) + "/" + u - + "
    \n"); - - sberr.append("
"); - sberr.append("
"); - sberr.append(""); - PrintWriter pw = response.getWriter(); - response.setContentType("text/html"); - pw.print(sberr.toString()); - pw.flush(); - pw.close(); - return; - } - - // calculate closest values for alternates - CaptureSearchResult closestleft = null; - CaptureSearchResult closestright = null; - long rclosestDistance = 0; - long lclosestDistance = 0; - CaptureSearchResult cur = null; - String anchorDate = null; - - long maxWindow = -1; - long wantTime = closestDate.getTime(); - - Iterator itr = cResults.iterator(); - while (itr.hasNext()) { - cur = itr.next(); - cur.getCaptureDate(); - long curDistance = cur.getCaptureDate().getTime() - wantTime; - // == 0 skip - if (curDistance > 0) { - if ((closestright == null) - || (Math.abs(curDistance) < Math - .abs(rclosestDistance))) { - closestright = cur; - rclosestDistance = Math.abs(curDistance); - } - } - - if (curDistance < 0) { - if ((closestleft == null) - || (Math.abs(curDistance) < Math - .abs(lclosestDistance))) { - closestleft = cur; - lclosestDistance = Math.abs(curDistance); - } - } - - } - - if (closestleft != null) { - if (!(closestleft.getCaptureDate().equals(f))) { - sb.append(", <" - + uriPrefix - + formatterk.format(closestleft.getCaptureDate()) - + "/" - + u - + ">;rel=\"prev memento\"; datetime=\"" - + httpformatterl.format(closestleft - .getCaptureDate()) + "\""); - } else { - int m_index = sb.lastIndexOf("\"first memento\""); - sb.insert(m_index + 1, "prev "); - } - } - if (closestright != null) { - if (!(closestright.getCaptureDate().equals(l))) { - sb.append(", <" - + uriPrefix - + formatterk.format(closestright.getCaptureDate()) - + "/" - + u - + ">;rel=\"next \"; datetime=\"" - + httpformatterl.format(closestright - .getCaptureDate()) + "\""); - } else { - int m_index = sb.lastIndexOf("\"last memento\""); - sb.insert(m_index + 1, "next "); - } - - } - - response.setHeader("Link", "<" + agguri + ">;rel=\"timebundle\"" - + origlink + sb.toString() + timemap); //added timemap - - response.setHeader("Location", replayUrl); - response.sendError(302, "Found"); -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/ORE.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/ORE.jsp deleted file mode 100644 index d99e9ec5..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/ORE.jsp +++ /dev/null @@ -1,285 +0,0 @@ -<%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.ResultURIConverter" -%><%@ page import="java.text.SimpleDateFormat" -%><%@ page import="org.archive.wayback.util.Timestamp" -%><%@ page import="java.util.Iterator" -%><%@ page import="java.util.List" -%><%@ page import="java.util.ArrayList" -%><%@ page import="org.dspace.foresite.Aggregation" -%><%@ page import="org.dspace.foresite.ResourceMap" -%><%@ page import="org.dspace.foresite.Agent" -%><%@ page import="org.dspace.foresite.OREFactory" -%><%@ page import="org.dspace.foresite.AggregatedResource" -%><%@ page import="org.dspace.foresite.ORESerialiser" -%><%@ page import="org.dspace.foresite.ORESerialiserFactory" -%><%@ page import="org.dspace.foresite.ResourceMapDocument" -%><%@ page import="java.io.PrintWriter" -%><%@ page import="java.net.URI" -%><%@ page import="org.dspace.foresite.Predicate" -%><%@ page import="org.archive.wayback.archivalurl.ArchivalUrlResultURIConverter" -%><%@ page import="org.dspace.foresite.Triple" -%><%@ page import="org.dspace.foresite.jena.TripleJena" -%><%@ page import="java.util.UUID" -%><%@ page import="java.util.TimeZone" -%><%@ page import="java.util.Calendar" -%><% - UIResults results = UIResults.extractCaptureQuery(request);//nuzno potom perepisat' - SimpleDateFormat httpformatterl = new SimpleDateFormat( - "E, dd MMM yyyy HH:mm:ss z"); - TimeZone tzo = TimeZone.getTimeZone("GMT"); - httpformatterl.setTimeZone(tzo); - - WaybackRequest wbRequest = results.getWbRequest(); - CaptureSearchResults cResults = results.getCaptureResults(); - CaptureSearchResult res = cResults.getClosest(); - - String replayPrefix = wbRequest.getAccessPoint().getReplayPrefix(); - String queryPrefix = wbRequest.getAccessPoint().getQueryPrefix(); - String u = wbRequest.getRequestUrl(); - String agguri = replayPrefix + "timebundle/" + u; - String format = wbRequest.get("format"); - if(format == null) { - format = "rdf"; - } - Aggregation agg = OREFactory.createAggregation(new URI(agguri)); - ResourceMap rem = agg.createResourceMap(new URI(queryPrefix - + "timemap/" + format + "/" + u)); - - Date now = new Date(); - - rem.setCreated(now); - Predicate pr_type = new Predicate(); - pr_type.setURI(new URI( - "http://www.w3.org/1999/02/22-rdf-syntax-ns#type")); - - rem.setModified(now); - rem.createTriple(pr_type, new URI( - "http://www.mementoweb.org/terms/tb/TimeMap")); - Agent creator = OREFactory.createAgent(); - creator.addName("Foresite Toolkit (Java)"); - - rem.addCreator(creator); - agg.addTitle("Memento Time Bundle for " + u); - - Iterator itr = cResults.iterator(); - SimpleDateFormat formatterk = new SimpleDateFormat("yyyyMMddHHmmss"); - formatterk.setTimeZone(tzo); - Date f = cResults.getFirstResultDate(); - Date l = cResults.getLastResultDate(); - - String ArchiveInterval = formatterk.format(f) + " - " - + formatterk.format(l); - - agg.addType(new URI("http://www.mementoweb.org/terms/tb/TimeBundle")); - //include original into aggregation - - AggregatedResource ar_o = agg.createAggregatedResource(new URI(u)); - ar_o.createTriple(pr_type, new URI( - "http://www.mementoweb.org/terms/tb/OriginalResource")); - //include timegate into aggregation - AggregatedResource ar_tg = agg.createAggregatedResource(new URI( - replayPrefix + "timegate/" + u)); - - Predicate pr_format = new Predicate(); - pr_format.setURI(new URI("http://purl.org/dc/elements/1.1/format")); - ar_tg.createTriple(pr_format, new URI(u)); - ar_tg.createTriple(pr_type, new URI( - "http://www.mementoweb.org/terms/tb/TimeGate")); - - String previos_digest = null; - List previos_blancs = new ArrayList(); - - Predicate pr = new Predicate(); - pr.setURI(new URI("http://www.mementoweb.org/terms/tb/start")); - Predicate pre = new Predicate(); - pre.setURI(new URI("http://www.mementoweb.org/terms/tb/end")); - Calendar cal = Calendar.getInstance(); - AggregatedResource ar = null; - - Date enddate = null; - - // String buffer for special link serialization format - StringBuffer linkbf = new StringBuffer(); - - linkbf.append("<" + u + ">;rel=\"original\"\n"); - linkbf.append(",<" + agguri + ">;rel=\"timebundle\"\n"); - linkbf.append(",<" + replayPrefix - + "timegate/" + u + ">;rel=\"timegate\"\n"); - linkbf.append(",<" + queryPrefix + "timemap/" + format + "/" + u - + ">;rel=\"timemap\";type=\"application/link-format\"\n"); - - String firstmemento = null; - int count = 0; - while (itr.hasNext()) { - CaptureSearchResult cur = itr.next(); - //I am not deduping urls (by digest) for the rdf serialization running out of time, extra efforts for me now ;) - - String resurl = replayPrefix - + formatterk.format(cur.getCaptureDate()) + "/" + u; - - String digest = cur.getDigest(); - if (previos_digest == null) { - previos_digest = digest; - } - - ar = agg.createAggregatedResource(new URI(resurl)); - ar.createTriple(pr_format, cur.getMimeType()); - - Predicate pr_1 = new Predicate(); - pr_1.setURI(new URI( - "http://www.mementoweb.org/terms/tb/mementoFor")); - ar.createTriple(pr_1, new URI(u)); - ar.createTriple(pr_type, new URI( - "http://www.mementoweb.org/terms/tb/Memento")); - - Date startdate = cur.getDuplicateDigestStoredDate(); - enddate = cur.getCaptureDate(); - - // serialiase it in links format only for unique digest - - if (startdate == null) { - if (firstmemento == null) { - linkbf.append(",<" + resurl - + ">;rel=\"first memento\";datetime=\"" - + httpformatterl.format(enddate) + "\"\n"); - firstmemento = "firstmemento"; - - } else { - linkbf.append(",<" + resurl - + ">;rel=\"memento\";datetime=\"" - + httpformatterl.format(enddate) + "\"\n"); - count = count + 1; - } - } - - // Adding blanc node - Triple triple = new TripleJena(); - triple.initialise(new URI(resurl)); - Predicate pred = new Predicate(); - UUID a = UUID.randomUUID(); - String blanc = "urn:uuid:" + a.toString(); - - pred.setURI(new URI( - "http://www.mementoweb.org/terms/tb/observedOver")); - triple.relate(pred, new URI(blanc)); - Triple tr = new TripleJena(); - tr.initialise(new URI(blanc)); - - tr.relate(pr_type, new URI( - "http://www.mementoweb.org/terms/tb/Period")); - - //period difined by [ [ interval [ date first digest recorded and date of next digest recorded [ - - String start = null; - Triple trd = new TripleJena(); - trd.initialise(new URI(blanc)); - - if (startdate != null) { - - cal.setTime(startdate); - trd.relate(pr, cal); - start = httpformatterl.format(startdate); - } else { - cal.setTime(enddate); - trd.relate(pr, cal); - start = httpformatterl.format(enddate); - } - - ar.addTriple(triple); - ar.addTriple(tr); - ar.addTriple(trd); - - if (!digest.equals("previos_digest")) { - - Iterator it = previos_blancs.iterator(); - while (it.hasNext()) { - String blanc_ = (String) it.next(); - Triple tre = new TripleJena(); - tre.initialise(new URI(blanc_)); - - cal.setTime(enddate); - tre.relate(pre, cal); - ar.addTriple(tre); - } - - previos_blancs.clear(); - previos_digest = digest; - } - - previos_blancs.add(blanc); - - } - - Iterator it = previos_blancs.iterator(); - while (it.hasNext()) { - String blanc_ = (String) it.next(); - Triple tre = new TripleJena(); - tre.initialise(new URI(blanc_)); - - cal.setTime(now); //or date of archive stop archiving - tre.relate(pre, cal); - - ar.addTriple(tre); - } - - if (count > 0) { - int m_index = linkbf.lastIndexOf("\"memento\""); - linkbf.insert(m_index + 1, "last "); - } - - ORESerialiser serial = null; - if (format.equals("rdf")) { - serial = ORESerialiserFactory.getInstance("RDF/XML"); - response.setContentType("application/rdf+xml"); - } - //else if (format.equals("atom")) { - // serial = ORESerialiserFactory.getInstance("ATOM-1.0"); - //} - //else if (format.equals ("html")) { - // serial = ORESerialiserFactory.getInstance("RDFa"); - //} - //removed n3 because serialization of the date to the String type - //else if (format.equals("n3")) { - //serial = ORESerialiserFactory.getInstance("N3"); - - //response.setContentType("text/n3"); - //} - else if (format.equals("link")) { - PrintWriter pw = response.getWriter(); - - response.setContentType("application/link-format"); - pw.print(linkbf.toString()); - pw.flush(); - - } else { - // TODO: this should be handled in TimeBundleParser to allow - // usual Exception rendering to happen. - response.sendError(404, "Unknown TimeMap serialization"); - } - if (serial != null) { - ResourceMapDocument doc = serial.serialise(rem); - // TODO: this could get really big. Any way to stream the data out - // so we don't need another copy beyond the ResourceMap, - // and other helper objects? - String serialisation = doc.toString(); - if (format.equals("rdf")) { - //bug in jena? did not serialise date to date type but to string type // stupid fix will need investigate it - serialisation = serialisation - .replaceAll( - "end rdf:datatype=\"http://www.w3.org/2001/XMLSchema#string", - "end rdf:datatype=\"http://www.w3.org/2001/XMLSchema#dateTime"); - serialisation = serialisation - .replaceAll( - "start rdf:datatype=\"http://www.w3.org/2001/XMLSchema#string", - "start rdf:datatype=\"http://www.w3.org/2001/XMLSchema#dateTime"); - } - PrintWriter pw = response.getWriter(); - pw.print(serialisation); - pw.flush(); - } -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OldCalendarResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OldCalendarResults.jsp deleted file mode 100644 index 78a46e71..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OldCalendarResults.jsp +++ /dev/null @@ -1,193 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Date" %> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.text.ParseException" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartitionsFactory" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> - - -<% -UIResults results = UIResults.extractCaptureQuery(request); - -WaybackRequest wbRequest = results.getWbRequest(); -CaptureSearchResults cResults = results.getCaptureResults(); -StringFormatter fmt = wbRequest.getFormatter(); -String searchString = wbRequest.getRequestUrl(); -List closeMatches = cResults.getCloseMatches(); - - -Date searchStartDate = wbRequest.getStartDate(); -Date searchEndDate = wbRequest.getEndDate(); -long firstResult = cResults.getFirstReturned(); -long lastResult = cResults.getReturnedCount() + firstResult; -long resultCount = cResults.getMatchingCount(); - -ArrayList partitions = - ResultsPartitionsFactory.get(cResults, wbRequest); -int numPartitions = partitions.size(); -%> - - - - - -
- <%= fmt.format("PathQueryClassic.searchedFor",searchString) %> - - <%= fmt.format("PathQuery.anchorWindowText") %> - - <%= fmt.format("PathQueryClassic.resultsSummary",resultCount) %> -
-
- - - - - - - - - -<% - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = partitions.get(i); -%> - -<% - } -%> - - - - - - - -<% - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); -%> - -<% - } -%> - - - - - - -<% - boolean first = false; - String lastMD5 = null; - - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); - ArrayList partitionResults = partition.getMatches(); -%> - -<% - } - -%> - - -
- <%= fmt.format("PathQueryClassic.searchResults",searchStartDate,searchEndDate) %> -
- <%= partition.getTitle() %> -
- <%= fmt.format("ResultPartition.columnSummary",partition.resultsCount()) %> -
-<% - if(partitionResults.size() == 0) { -%> -   -<% - } else { - - for(int j = 0; j < partitionResults.size(); j++) { - - CaptureSearchResult result = partitionResults.get(j); - String url = result.getUrlKey(); - String captureTimestamp = result.getCaptureTimestamp(); - Date captureDate = result.getCaptureDate(); - String prettyDate = fmt.format("PathQuery.classicResultLinkText", - captureDate); - String origHost = result.getOriginalHost(); - String MD5 = result.getDigest(); - String redirectFlag = (0 == result.getRedirectUrl().compareTo("-")) - ? "" : fmt.format("PathPrefixQuery.redirectIndicator"); - String httpResponse = result.getHttpCode(); - String mimeType = result.getMimeType(); - - String arcFile = result.getFile(); - String arcOffset = String.valueOf(result.getOffset()); - - String replayUrl = results.resultToReplayUrl(result); - - boolean updated = false; - if(lastMD5 == null) { - lastMD5 = MD5; - updated = true; - } else if(0 != lastMD5.compareTo(MD5)) { - updated = true; - lastMD5 = MD5; - } - String updateStar = updated ? "*" : ""; -%> - <%= prettyDate %> <%= updateStar %>

-<% - - } - - } -%> -
- - -<% -if(closeMatches != null && !closeMatches.isEmpty()) { - WaybackRequest tmp = wbRequest.clone(); - - - %> - <%= fmt.format("PathQuery.closeMatchesText") %>
- <% - for(String closeMatch : closeMatches) { - tmp.setRequestUrl(closeMatch); - String link = fmt.escapeHtml(tmp.getContextPrefix() + "query?" + - tmp.getQueryArguments()); - %> - <%= closeMatch %>
- <% - } -} -// show page indicators: -if(cResults.getNumPages() > 1) { - int curPage = cResults.getCurPageNum(); - %> -
- <% - for(int i = 1; i <= cResults.getNumPages(); i++) { - if(i == curPage) { - %> - <%= i %> - <% - } else { - %> - <%= i %> - <% - } - } -} -%> - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OpenSearchCaptureResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OpenSearchCaptureResults.jsp deleted file mode 100644 index b8a0333b..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OpenSearchCaptureResults.jsp +++ /dev/null @@ -1,83 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8" -%><%@ - page import="java.util.Iterator" -%><%@ - page import="java.util.ArrayList" -%><%@ - page import="java.util.Map" -%><%@ - page import="java.util.Enumeration" -%><%@ - page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ - page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ - page import="org.archive.wayback.core.SearchResults" -%><%@ - page import="org.archive.wayback.core.UIResults" -%><%@ - page import="org.archive.wayback.core.WaybackRequest" -%><%@ - page import="org.archive.wayback.requestparser.OpenSearchRequestParser" -%><%@ - page import="org.archive.wayback.util.StringFormatter" -%><% -UIResults uiResults = UIResults.extractCaptureQuery(request); - -WaybackRequest wbRequest = uiResults.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); -CaptureSearchResults results = uiResults.getCaptureResults(); -Iterator itr = results.iterator(); - -String staticPrefix = uiResults.getStaticPrefix(); -String queryPrefix = uiResults.getQueryPrefix(); -String replayPrefix = uiResults.getReplayPrefix(); - -String searchString = wbRequest.getRequestUrl(); -long firstResult = results.getFirstReturned(); -long shownResultCount = results.getReturnedCount(); -long lastResult = results.getReturnedCount() + firstResult; -long resultCount = results.getMatchingCount(); -String searchTerms = ""; -Map queryMap = request.getParameterMap(); -String arr[] = queryMap.get(OpenSearchRequestParser.SEARCH_QUERY); -if(arr != null && arr.length > 1) { - searchTerms = arr[0]; -} -%> - - - <%= fmt.format("PathQuery.rssResultsTitle") %> - <%= queryPrefix %>> - <%= fmt.format("PathQueryClassic.searchedFor",fmt.escapeHtml(searchString)) %> - <%= resultCount %> - <%= firstResult %> - <%= shownResultCount %> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OpenSearchUrlResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OpenSearchUrlResults.jsp deleted file mode 100644 index deafea38..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/OpenSearchUrlResults.jsp +++ /dev/null @@ -1,101 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8" -%><%@ - page import="java.util.Iterator" -%><%@ - page import="java.util.ArrayList" -%><%@ - page import="java.util.Date" -%><%@ - page import="java.util.Map" -%><%@ - page import="java.util.Enumeration" -%><%@ - page import="org.archive.wayback.core.UrlSearchResult" -%><%@ - page import="org.archive.wayback.core.UrlSearchResults" -%><%@ - page import="org.archive.wayback.core.SearchResults" -%><%@ - page import="org.archive.wayback.core.UIResults" -%><%@ - page import="org.archive.wayback.core.WaybackRequest" -%><%@ - page import="org.archive.wayback.requestparser.OpenSearchRequestParser" -%><%@ - page import="org.archive.wayback.util.StringFormatter" -%><% -UIResults uiResults = UIResults.extractUrlQuery(request); - -WaybackRequest wbRequest = uiResults.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); -UrlSearchResults results = uiResults.getUrlResults(); -Iterator itr = results.iterator(); - -String staticPrefix = uiResults.getStaticPrefix(); -String queryPrefix = uiResults.getQueryPrefix(); -String replayPrefix = uiResults.getReplayPrefix(); - -String searchString = wbRequest.getRequestUrl(); -long firstResult = results.getFirstReturned(); -long shownResultCount = results.getReturnedCount(); -long lastResult = results.getReturnedCount() + firstResult; -long resultCount = results.getMatchingCount(); -String searchTerms = ""; -Map queryMap = request.getParameterMap(); -String arr[] = queryMap.get(OpenSearchRequestParser.SEARCH_QUERY); -if(arr != null && arr.length > 1) { - searchTerms = arr[0]; -} -%> - - - <%= fmt.format("PathQuery.rssResultsTitle") %> - <%= queryPrefix %>> - <%= fmt.format("PathQueryClassic.searchedFor",searchString) %> - <%= resultCount %> - <%= firstResult %> - <%= shownResultCount %> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/XMLCaptureResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/XMLCaptureResults.jsp deleted file mode 100644 index c1aee55a..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/XMLCaptureResults.jsp +++ /dev/null @@ -1,57 +0,0 @@ - -<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Map" %> -<%@ page import="java.util.Enumeration" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> -<%@ page import="org.archive.wayback.core.SearchResults" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<% -UIResults uiResults = UIResults.extractCaptureQuery(request); - -CaptureSearchResults results = uiResults.getCaptureResults(); -Iterator itr = results.iterator(); -%> - - -<% - Map p = results.getFilters(); - Iterator kitr = p.keySet().iterator(); - while(kitr.hasNext()) { - String key = kitr.next(); - String oKey = UIResults.encodeXMLEntity(key); - String oValue = UIResults.encodeXMLContent(p.get(key)); - %> - <<%= oKey %>><%= oValue %>> - <% - } -%> - <<%= SearchResults.RESULTS_TYPE %>><%= SearchResults.RESULTS_TYPE_CAPTURE %>> - - -<% - while(itr.hasNext()) { - %> - - <% - CaptureSearchResult result = itr.next(); - Map p2 = result.toCanonicalStringMap(); - kitr = p2.keySet().iterator(); - - while(kitr.hasNext()) { - String key = kitr.next(); - String oKey = UIResults.encodeXMLEntity(key); - String oValue = UIResults.encodeXMLContent(p2.get(key)); - %> - <<%= oKey %>><%= oValue %>> - <% - } - %> - - <% - } -%> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/XMLUrlResults.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/XMLUrlResults.jsp deleted file mode 100644 index 6c2f38a2..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/query/XMLUrlResults.jsp +++ /dev/null @@ -1,57 +0,0 @@ - -<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Map" %> -<%@ page import="java.util.Enumeration" %> -<%@ page import="org.archive.wayback.core.SearchResults" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.UrlSearchResults" %> -<%@ page import="org.archive.wayback.core.UrlSearchResult" %> -<% -UIResults uiResults = UIResults.extractUrlQuery(request); - -UrlSearchResults results = uiResults.getUrlResults(); -Iterator itr = results.iterator(); -%> - - -<% - Map p = results.getFilters(); - Iterator kitr = p.keySet().iterator(); - while(kitr.hasNext()) { - String key = kitr.next(); - String oKey = UIResults.encodeXMLEntity(key); - String oValue = UIResults.encodeXMLContent(p.get(key)); - %> - <<%= oKey %>><%= oValue %>> - <% - } -%> - <<%= SearchResults.RESULTS_TYPE %>><%= SearchResults.RESULTS_TYPE_URL %>> - - -<% - while(itr.hasNext()) { - %> - - <% - UrlSearchResult result = itr.next(); - Map p2 = result.toCanonicalStringMap(); - kitr = p2.keySet().iterator(); - - while(kitr.hasNext()) { - String key = kitr.next(); - String oKey = UIResults.encodeXMLEntity(key); - String oValue = UIResults.encodeXMLContent(p2.get(key)); - %> - <<%= oKey %>><%= oValue %>> - <% - } - %> - - <% - } -%> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveBrokenCSSComment.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveBrokenCSSComment.jsp deleted file mode 100644 index 48d6008e..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveBrokenCSSComment.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/css;charset=utf-8" -%><%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><% -UIResults results = UIResults.extractReplay(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); -Date exactDate = results.getResult().getCaptureDate(); -Date now = new Date(); -String prettyDateFormat = "{0,date,H:mm:ss MMM d, yyyy}"; -String prettyArchiveString = fmt.format(prettyDateFormat,exactDate); -String prettyRequestString = fmt.format(prettyDateFormat,now); -%> -/* - FILE ARCHIVED ON <%= prettyArchiveString %> AND RETRIEVED FROM - AN OPENWAYBACK INSTANCE ON <%= prettyRequestString %>. - JAVASCRIPT APPENDED BY OPENWAYBACK, COPYRIGHT INTERNET ARCHIVE. - - ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. - SECTION 108(a)(3)). -*/ -intentionally broken stuff here to assist Wayback replay... - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveCSSComment.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveCSSComment.jsp deleted file mode 100644 index b9d46c8e..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveCSSComment.jsp +++ /dev/null @@ -1,21 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/css;charset=utf-8"%> -<%@ page import="java.util.Date" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.extractReplay(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); -Date exactDate = results.getResult().getCaptureDate(); -Date now = new Date(); -String prettyDateFormat = "{0,date,H:mm:ss MMM d, yyyy}"; -String prettyArchiveString = fmt.format(prettyDateFormat,exactDate); -String prettyRequestString = fmt.format(prettyDateFormat,now); -%> -/* - FILE ARCHIVED ON <%= prettyArchiveString %> AND RETRIEVED FROM THE - AN OPENWAYBACK INSTANCE ON <%= prettyRequestString %>. - JAVASCRIPT APPENDED BY OPENWAYBACK, COPYRIGHT INTERNET ARCHIVE. - - ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. - SECTION 108(a)(3)). -*/ diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveComment.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveComment.jsp deleted file mode 100644 index 015c7230..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ArchiveComment.jsp +++ /dev/null @@ -1,21 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Date" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.extractReplay(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); -Date exactDate = results.getResult().getCaptureDate(); -Date now = new Date(); -String prettyDateFormat = "{0,date,H:mm:ss MMM d, yyyy}"; -String prettyArchiveString = fmt.format(prettyDateFormat,exactDate); -String prettyRequestString = fmt.format(prettyDateFormat,now); -%> - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ClientSideJSInsert.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ClientSideJSInsert.jsp deleted file mode 100644 index 0d531600..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ClientSideJSInsert.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Date" %> -<%@ page import="org.archive.wayback.ResultURIConverter" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.extractReplay(request); -String requestDate = results.getResult().getCaptureTimestamp(); -String contextPath = results.getURIConverter().makeReplayURI(requestDate,""); -String staticPrefix = results.getStaticPrefix(); -%> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/DebugBanner.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/DebugBanner.jsp deleted file mode 100644 index 0ba8d294..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/DebugBanner.jsp +++ /dev/null @@ -1,157 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ - page import="java.util.Date" -%><%@ - page import="java.util.Map" -%><%@ - page import="java.util.Set" -%><%@ - page import="java.util.Iterator" -%><%@ - page import="org.archive.wayback.WaybackConstants" -%><%@ - page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ - page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ - page import="org.archive.wayback.core.SearchResult" -%><%@ - page import="org.archive.wayback.core.UIResults" -%><%@ - page import="org.archive.wayback.core.WaybackRequest" -%><%@ - page import="org.archive.wayback.util.StringFormatter" -%><%@ - page import="org.archive.wayback.util.html.SelectHTML" -%><% -UIResults results = UIResults.extractReplay(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); -WaybackRequest wbr = results.getWbRequest(); -Set keys = wbr.keySet(); -Iterator keysItr = keys.iterator(); -Map headers = results.getResource().getHttpHeaders(); -%> - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/DisclaimChooser.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/DisclaimChooser.jsp deleted file mode 100644 index 44ab7b94..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/DisclaimChooser.jsp +++ /dev/null @@ -1,14 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ - page import="org.archive.wayback.core.UIResults" -%><%@ - page import="org.archive.wayback.core.WaybackRequest" -%><% -UIResults results = UIResults.extractReplay(request); -WaybackRequest wbr = results.getWbRequest(); -if(wbr.isLiveWebRequest()) { - %><% -} else { - %><% -}%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Disclaimer.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Disclaimer.jsp deleted file mode 100644 index 866a9a15..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Disclaimer.jsp +++ /dev/null @@ -1,37 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Date" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.extractReplay(request); - -StringFormatter fmt = results.getWbRequest().getFormatter(); -CaptureSearchResult result = results.getResult(); -String dupeMsg = ""; -if(result != null) { - if(result.isDuplicateDigest()) { - Date dupeDate = result.getDuplicateDigestStoredDate(); - String prettyDate = ""; - if(dupeDate != null) { - prettyDate = "(" + - fmt.format("MetaReplay.captureDateDisplay", - dupeDate) + ")"; - } - dupeMsg = fmt.format("ReplayView.disclaimerText", dupeDate); - } -} - -Date resultDate = result.getCaptureDate(); -String resultUrl = result.getOriginalUrl(); - -String wmNotice = fmt.format("ReplayView.banner", resultUrl, resultDate); -String wmHideNotice = fmt.format("ReplayView.bannerHideLink"); -%> - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/GraphDisclaimer.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/GraphDisclaimer.jsp deleted file mode 100644 index 441240a2..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/GraphDisclaimer.jsp +++ /dev/null @@ -1,262 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" - %><%@ - page import="java.util.Iterator" - %><%@ - page import="java.util.ArrayList" - %><%@ - page import="java.util.Date" - %><%@ - page import="java.util.List" - %><%@ - page import="java.text.ParseException" - %><%@ - page import="org.archive.wayback.ResultURIConverter" - %><%@ - page import="org.archive.wayback.WaybackConstants" - %><%@ - page import="org.archive.wayback.core.CaptureSearchResult" - %><%@ - page import="org.archive.wayback.core.CaptureSearchResults" - %><%@ - page import="org.archive.wayback.core.UIResults" - %><%@ - page import="org.archive.wayback.core.WaybackRequest" - %><%@ - page import="org.archive.wayback.partition.CaptureSearchResultPartitionMap" - %><%@ - page import="org.archive.wayback.partition.PartitionPartitionMap" - %><%@ - page import="org.archive.wayback.partition.PartitionsToGraph" - %><%@ - page import="org.archive.wayback.util.graph.Graph" - %><%@ - page import="org.archive.wayback.util.graph.GraphEncoder" - %><%@ - page import="org.archive.wayback.util.graph.GraphRenderer" - %><%@ - page import="org.archive.wayback.util.partition.Partition" - %><%@ - page import="org.archive.wayback.util.partition.Partitioner" - %><%@ - page import="org.archive.wayback.util.partition.PartitionSize" - %><%@ - page import="org.archive.wayback.util.StringFormatter" - %><%@ - page import="org.archive.wayback.util.url.UrlOperations" - %><% -UIResults results = UIResults.extractReplay(request); -WaybackRequest wbRequest = results.getWbRequest(); -ResultURIConverter uriConverter = results.getURIConverter(); - -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); - -StringFormatter fmt = wbRequest.getFormatter(); - -String graphJspPrefix = results.getContextConfig("graphJspPrefix"); -if(graphJspPrefix == null) { - graphJspPrefix = queryPrefix; -} -CaptureSearchResults cResults = results.getCaptureResults(); - -String exactDateStr = results.getResult().getCaptureTimestamp(); -Date exactDate = results.getResult().getCaptureDate(); -String searchUrl = - UrlOperations.stripDefaultPortFromUrl(wbRequest.getRequestUrl()); -String searchUrlSafe = fmt.escapeHtml(searchUrl); -String searchUrlJS = fmt.escapeJavaScript(searchUrl); -String resolution = wbRequest.getTimelineResolution(); - -CaptureSearchResult first = null; -CaptureSearchResult prev = null; -CaptureSearchResult next = null; -CaptureSearchResult last = null; - -Date firstDate = wbRequest.getStartDate(); -Date lastDate = wbRequest.getEndDate(); - -long resultCount = cResults.getReturnedCount(); -int resultIndex = 1; - -CaptureSearchResultPartitionMap monthMap = - new CaptureSearchResultPartitionMap(); -PartitionSize monthSize = Partitioner.monthSize; -Partitioner monthPartitioner = - new Partitioner(monthMap); - -PartitionPartitionMap yearMap = - new PartitionPartitionMap(); -PartitionSize yearSize = Partitioner.yearSize; -Partitioner> yearPartitioner = - new Partitioner>(yearMap); - -List>> yearPartitions = - yearPartitioner.getRange(yearSize,firstDate,lastDate); - -int imgWidth = 500; -int imgHeight = 35; -Date firstYearDate = yearPartitions.get(0).getStart(); -Date lastYearDate = yearPartitions.get(yearPartitions.size()-1).getEnd(); - -List> monthPartitions = - monthPartitioner.getRange(monthSize,firstYearDate,lastYearDate); - -Iterator it = cResults.iterator(); - -monthPartitioner.populate(monthPartitions,it); - -yearPartitioner.populate(yearPartitions,monthPartitions.iterator()); - -String yearFormatKey = "PartitionSize.dateHeader.yearGraphLabel"; -Graph graph = PartitionsToGraph.partsOfPartsToGraph(yearPartitions,fmt,yearFormatKey,imgWidth,imgHeight); -String encodedGraph = GraphEncoder.encode(graph); -String imgUrl = graphJspPrefix + "jsp/graph.jsp?graphdata=" + encodedGraph; -// TODO: this is archivalUrl specific: -String starLink = fmt.escapeHtml(queryPrefix + "*/" + searchUrl); -%> - - - - -
- - - - - - - -
- - - - - - - -
- - - - - -
- <%= fmt.format("GraphTimeline.urlLabel") %> <%= searchUrlSafe %> - - - - - - - - - - -
<%= fmt.format("GraphTimeline.searchLabel") %>">
- -
-
- - - - - - -
" class="wm-disclaim-label"><%= fmt.format("GraphTimeline.dateLabel") %> <%= fmt.spaceToNBSP(fmt.format("GraphTimeline.dateShortFormat",exactDate)) %> - - - -
- <%= fmt.format("GraphTimeline.hideButton") %> -
-
-
-
-
- - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/JSLessTimeline.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/JSLessTimeline.jsp deleted file mode 100644 index b02d6941..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/JSLessTimeline.jsp +++ /dev/null @@ -1,295 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Date" %> -<%@ page import="java.text.ParseException" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" - + request.getServerPort() + request.getContextPath(); - -UIResults results = UIResults.extractReplay(request); -WaybackRequest wbRequest = results.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); -CaptureSearchResults cResults = results.getCaptureResults(); - -String exactDateStr = results.getResult().getCaptureTimestamp(); -Date exactDate = results.getResult().getCaptureDate(); -String searchUrl = wbRequest.getRequestUrl(); -String resolution = wbRequest.getTimelineResolution(); - -if(resolution == null) { - resolution = WaybackRequest.REQUEST_RESOLUTION_AUTO; -} -String metaChecked = ""; -if(wbRequest.isMetaMode()) { - metaChecked = "checked"; -} - -CaptureSearchResult first = null; -CaptureSearchResult prev = null; -CaptureSearchResult next = null; -CaptureSearchResult last = null; - -long resultCount = cResults.getReturnedCount(); -int resultIndex = 1; -Iterator it = cResults.iterator(); -while(it.hasNext()) { - CaptureSearchResult res = it.next(); - Date resDate = res.getCaptureDate(); - - int compared = resDate.compareTo(exactDate); - if(compared < 0) { - resultIndex++; - prev = res; - if(first == null) { - first = res; - } - } else if(compared > 0) { - last = res; - if(next == null) { - next = res; - } - } -} -// string to indicate which select option is currently active -String yearsOptSelected = ""; -String monthsOptSelected = ""; -String daysOptSelected = ""; -String hoursOptSelected = ""; -String autoOptSelected = ""; - -String minResolution = ResultsTimelinePartitionsFactory.getMinResolution(cResults); - -String optimal = ""; -if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { - optimal = fmt.format("TimelineView.timeRange.hours"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { - optimal = fmt.format("TimelineView.timeRange.days"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.months"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.twomonths"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { - optimal = fmt.format("TimelineView.timeRange.years"); -} else { - optimal = fmt.format("TimelineView.timeRange.unknown"); -} -String autoOptString = fmt.format("TimelineView.timeRange.auto",optimal); - -ArrayList partitions; -if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { - hoursOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getHour(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { - daysOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getDay(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getMonth(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getTwoMonth(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { - yearsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getYear(cResults,wbRequest); -} else { - autoOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getAuto(cResults,wbRequest); -} -int numPartitions = partitions.size(); -ResultsPartition firstP = (ResultsPartition) partitions.get(0); -ResultsPartition lastP = (ResultsPartition) partitions.get(numPartitions -1); - -String firstDate = firstP.getTitle(); -String lastDate = lastP.getTitle(); -String titleString = ""; -%> - -
- - - - - - - - - -
- - - - - - - - -
- <%= fmt.format("TimelineView.viewingVersion",resultIndex,resultCount) %>  -
<%= fmt.format("TimelineView.viewingVersionDate",exactDate) %>   
-
- - - - - - - - - - - -
- - - - - - -
<%= firstDate %><%= lastDate %>
-
<% - titleString = ""; - if(first != null) { - titleString = "title=\"" + - fmt.format("TimelineView.firstVersionTitle", - first.getCaptureDate()) + "\""; - %><% - } - %> wmSpecial="1" border=0 width=19 height=20 src="<%= contextRoot %>/images/first.jpg"><% - if(first != null) { - %><% - } - titleString = ""; - if(prev != null) { - titleString = "title=\"" + - fmt.format("TimelineView.prevVersionTitle", - prev.getCaptureDate()) + "\""; - %><% - } - %> wmSpecial="1" border=0 width=13 height=20 src="<%= contextRoot %>/images/prev.jpg"><% - if(first != null) { - %><% - } - %><% - - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); - ArrayList partitionResults = partition.getMatches(); - int numResults = partitionResults.size(); - String imageUrl = contextRoot + "/images/line.jpg"; - String replayUrl = null; - String prettyDateTime = null; - if(numResults == 1) { - imageUrl = contextRoot + "/images/mark_one.jpg"; - CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(0); - replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); - - } else if (numResults > 1) { - imageUrl = contextRoot + "/images/mark_several.jpg"; - CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(numResults - 1); - replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); - - } - if((i > 0) && (i < numPartitions)) { - -%><% - - } - - if(replayUrl == null) { - -%><% - - } else { - -%><% - - } - } - -%><% - titleString = ""; - if(next != null) { - titleString = "title=\"" + - fmt.format("TimelineView.nextVersionTitle", - next.getCaptureDate()) + "\""; - %><% - } - %> border=0 width=13 height=20 src="<%= contextRoot %>/images/next.jpg"><% - if(first != null) { - %><% - } - titleString = ""; - if(last != null) { - titleString = "title=\"" + - fmt.format("TimelineView.lastVersionTitle", - last.getCaptureDate()) + "\""; - %><% - } - %> border=0 width=19 height=20 src="<%= contextRoot %>/images/last.jpg"><% - if(first != null) { - %><% - } - %>
-
- - - <%= - fmt.format("UIGlobal.helpLink") - %> - - -
-
- diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/LiveWebDisclaimer.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/LiveWebDisclaimer.jsp deleted file mode 100644 index f717afa7..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/LiveWebDisclaimer.jsp +++ /dev/null @@ -1,76 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.util.url.UrlOperations" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><% -UIResults results = UIResults.extractReplay(request); -CaptureSearchResult result = results.getResult(); -WaybackRequest wbRequest = results.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); - -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); - -String searchUrl = - UrlOperations.stripDefaultPortFromUrl(wbRequest.getRequestUrl()); -String searchUrlSafe = fmt.escapeHtml(searchUrl); - -Date captureDate = result.getCaptureDate(); -Date now = new Date(); -long capMSSE = captureDate.getTime(); -long nowMSSE = now.getTime(); -long ageMS = nowMSSE - capMSSE; -float mins = ageMS / (60000f); -long ageMins = Math.round(mins); - -String prettyDateTime = - fmt.format("MetaReplay.captureDateDisplay", result.getCaptureDate()); -%> - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/MementoAggregate.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/MementoAggregate.jsp deleted file mode 100644 index 8a694828..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/MementoAggregate.jsp +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/MementoValidity.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/MementoValidity.jsp deleted file mode 100644 index 388de141..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/MementoValidity.jsp +++ /dev/null @@ -1,164 +0,0 @@ -<%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="java.util.Date" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.archivalurl.ArchivalUrlResultURIConverter" -%><%@ page import="java.text.SimpleDateFormat" -%><%@ page import="java.util.TimeZone" -%><%@ page import="java.util.Iterator" -%><% - UIResults results = UIResults.extractCaptureQuery(request); - WaybackRequest wbRequest = results.getWbRequest(); - CaptureSearchResults cResults = results.getCaptureResults(); - CaptureSearchResult res = cResults.getClosest(); - String u = wbRequest.getRequestUrl(); - SimpleDateFormat httpformatterl = new SimpleDateFormat( - "E, dd MMM yyyy HH:mm:ss z"); - TimeZone tzo = TimeZone.getTimeZone("GMT"); - httpformatterl.setTimeZone(tzo); - SimpleDateFormat formatterk = new SimpleDateFormat("yyyyMMddHHmmss"); - formatterk.setTimeZone(tzo); - - ArchivalUrlResultURIConverter uriconverter = (ArchivalUrlResultURIConverter) results - .getURIConverter(); - Date closestDate = res.getCaptureDate(); - String uriPrefix = uriconverter.getReplayURIPrefix(); - String agguri = results.getContextConfig("aggregationPrefix") - + "timebundle/" + u; - String timemap = " , <" - + results.getContextConfig("aggregationPrefix") - + "timemap/link/" + u - + ">;rel=\"timemap\"; type=\"application/link-format\""; - - String timegate = ",<" + uriPrefix + "timegate/" + u - + ">;rel=\"timegate\""; - - Date f = cResults.getFirstResultDate(); - Date l = cResults.getLastResultDate(); - - StringBuffer sb = new StringBuffer(); - - response.setHeader("Memento-Datetime", - httpformatterl.format(res.getCaptureDate())); - - String memento = ",<" + uriPrefix + formatterk.format(closestDate) - + "/" + u + ">;rel=\"memento\";datetime=\"" - + httpformatterl.format(closestDate) + "\""; - String mfl = null; - if ((closestDate.equals(f)) && closestDate.equals(l)) { - mfl = ", <" - + uriPrefix - + formatterk.format(f) - + "/" - + u - + ">;rel=\"first last memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } else if (closestDate.equals(f)) { - mfl = ", <" + uriPrefix + formatterk.format(f) + "/" + u - + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - mfl = mfl + ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - - } else if (closestDate.equals(l)) { - mfl = ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - mfl = mfl + ", <" + uriPrefix + formatterk.format(f) + "/" + u - + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } else { - mfl = memento; - - mfl = mfl + ", <" + uriPrefix + formatterk.format(l) + "/" + u - + ">;rel=\"last memento\"; datetime=\"" - + httpformatterl.format(l) + "\""; - mfl = mfl + ", <" + uriPrefix + formatterk.format(f) + "/" + u - + ">;rel=\"first memento\"; datetime=\"" - + httpformatterl.format(f) + "\""; - } - - sb = new StringBuffer(mfl); - - // calculate closest values for link header - - CaptureSearchResult closestleft = null; - CaptureSearchResult closestright = null; - long rclosestDistance = 0; - long lclosestDistance = 0; - CaptureSearchResult cur = null; - String anchorDate = null; - - long maxWindow = -1; - long wantTime = closestDate.getTime(); - - Iterator itr = cResults.iterator(); - while (itr.hasNext()) { - cur = itr.next(); - cur.getCaptureDate(); - long curDistance = cur.getCaptureDate().getTime() - wantTime; - // == 0 skip - if (curDistance > 0) { - if ((closestright == null) - || (Math.abs(curDistance) < Math - .abs(rclosestDistance))) { - closestright = cur; - rclosestDistance = Math.abs(curDistance); - } - } - - if (curDistance < 0) { - if ((closestleft == null) - || (Math.abs(curDistance) < Math - .abs(lclosestDistance))) { - closestleft = cur; - lclosestDistance = Math.abs(curDistance); - } - } - - } - - if (closestleft != null) { - if (!(closestleft.getCaptureDate().equals(f))) { - - sb.append(", <" - + uriPrefix - + formatterk.format(closestleft.getCaptureDate()) - + "/" - + u - + ">;rel=\"prev memento\"; datetime=\"" - + httpformatterl.format(closestleft - .getCaptureDate()) + "\""); - } else { - int m_index = sb.lastIndexOf("\"first memento\""); - sb.insert(m_index + 1, "prev "); - - } - } - if (closestright != null) { - if (!(closestright.getCaptureDate().equals(l))) { - sb.append(", <" - + uriPrefix - + formatterk.format(closestright.getCaptureDate()) - + "/" - + u - + ">;rel=\"next memento\"; datetime=\"" - + httpformatterl.format(closestright - .getCaptureDate()) + "\""); - } else { - int m_index = sb.lastIndexOf("\"last memento\""); - sb.insert(m_index + 1, "next "); - - } - - } - - String origlink = ", <" + u + ">;rel=\"original\""; - - response.setHeader("Link", "<" + agguri + ">;rel=\"timebundle\"" - + origlink + sb.toString() + timemap + timegate); - - -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/NoCache.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/NoCache.jsp deleted file mode 100644 index 55cf380e..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/NoCache.jsp +++ /dev/null @@ -1,3 +0,0 @@ -<% - response.setHeader("Cache-Control","no-cache"); -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ProxyInfo.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ProxyInfo.jsp deleted file mode 100644 index e84d37f4..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ProxyInfo.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.ArrayList" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<%@ page import="org.archive.wayback.accesspoint.proxy.ProxyAccessPoint" %> -<%@ page import="org.archive.wayback.accesspoint.AccessPointConfigs" %> -<%@ page import="org.archive.wayback.accesspoint.AccessPointConfig" %> -<% -ProxyAccessPoint accessPoint = (ProxyAccessPoint)request.getAttribute("proxyAccessPoint"); -StringFormatter fmt = wbRequest.getFormatter(); - -String contextRoot = accessPoint.getReplayPrefix(); -String referrer = request.getHeader("Referer"); -String logoPath = contextRoot + "images/logo_bw.gif"; -if (referrer == null) { - referrer = "Wayback"; -} -%> - -

<%= fmt.format("ReplayView.noCacheTitle") %>

-

<%= fmt.format("ReplayView.noCacheGoto") %><%= referrer %>

-

-<%= fmt.format("ReplayView.noChacheText") %> - - - - - - -<% - -AccessPointConfigs accessPointConfigs = accessPoint.getAccessPointConfigs(); - -if (accessPointConfigs != null) { - for (AccessPointConfig theConfig : accessPointConfigs.getAccessPointConfigs().values()) { - %> - - - - <% - } -} - -%> - -
<%= fmt.format("ReplayView.noChacheId") %>
- <%= theConfig.getBeanName() %> -
diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ResultMeta.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ResultMeta.jsp deleted file mode 100644 index 7f2c5afd..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/ResultMeta.jsp +++ /dev/null @@ -1,124 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.util.Map" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -UIResults uiResults = UIResults.extractReplay(request); -StringFormatter fmt = uiResults.getWbRequest().getFormatter(); -CaptureSearchResult result = uiResults.getResult(); -String origUrl = result.getOriginalUrl(); -String urlKey = result.getUrlKey(); -String archiveID = result.getFile() + "/" + result.getOffset(); -String captureTS = result.getCaptureTimestamp(); -String capturePrettyDateTime = fmt.format("MetaReplay.captureDateDisplay", - result.getCaptureDate()); -String mimeType = result.getMimeType(); -String digest = result.getDigest(); -Map headers = uiResults.getResource().getHttpHeaders(); - -%> - - - - <%= fmt.format("MetaReplay.title") + urlKey +" / " + - capturePrettyDateTime %> - - - -

- <%= fmt.format("MetaReplay.title") %> -

- - - - - - - - - - - - - - - - - - - - - - - - - -
- <%= fmt.format("MetaReplay.originalURL") %> - - - <%= origUrl %> - -
- <%= fmt.format("MetaReplay.URLKey") %> - - - <%= urlKey %> - -
- <%= fmt.format("MetaReplay.captureDate") %> - - - <%= capturePrettyDateTime %> - -
- <%= fmt.format("MetaReplay.archiveID") %> - - - <%= archiveID %> - -
- <%= fmt.format("MetaReplay.MIMEType") %> - - - <%= mimeType %> - -
- <%= fmt.format("MetaReplay.digest") %> - - - <%= digest %> - -
-

-

- <%= fmt.format("MetaReplay.HTTPHeaders") %> -

- - <% - Iterator itr = headers.keySet().iterator(); - while(itr.hasNext()) { - String key = itr.next(); - String value = headers.get(key); - %> - - - - - <% - } - %> -
- <%= key %> - - - <%= value %> - -
- - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Timeline.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Timeline.jsp deleted file mode 100644 index 0b7968f4..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Timeline.jsp +++ /dev/null @@ -1,322 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Date" %> -<%@ page import="java.text.ParseException" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> - -<% - - -UIResults results = UIResults.extractReplay(request); -String staticPrefix = results.getStaticPrefix(); -WaybackRequest wbRequest = results.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); -CaptureSearchResults cResults = results.getCaptureResults(); - -String exactDateStr = results.getResult().getCaptureTimestamp(); -Date exactDate = results.getResult().getCaptureDate(); -String searchUrl = wbRequest.getRequestUrl(); -String resolution = wbRequest.getTimelineResolution(); - - -if(resolution == null) { - resolution = WaybackRequest.REQUEST_RESOLUTION_AUTO; -} -String metaChecked = ""; -if(wbRequest.isMetaMode()) { - metaChecked = "checked"; -} - -CaptureSearchResult first = null; -CaptureSearchResult prev = null; -CaptureSearchResult next = null; -CaptureSearchResult last = null; - -long resultCount = cResults.getReturnedCount(); -int resultIndex = 1; -Iterator it = cResults.iterator(); -while(it.hasNext()) { - CaptureSearchResult res = it.next(); - String resDateStr = res.getCaptureTimestamp(); - int compared = resDateStr.compareTo(exactDateStr.substring(0,resDateStr.length())); - if(compared < 0) { - resultIndex++; - prev = res; - if(first == null) { - first = res; - } - } else if(compared > 0) { - last = res; - if(next == null) { - next = res; - } - } -} -// string to indicate which select option is currently active -String yearsOptSelected = ""; -String monthsOptSelected = ""; -String daysOptSelected = ""; -String hoursOptSelected = ""; -String autoOptSelected = ""; - -String minResolution = ResultsTimelinePartitionsFactory.getMinResolution(cResults); - -String optimal = ""; -if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { - optimal = fmt.format("TimelineView.timeRange.hours"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { - optimal = fmt.format("TimelineView.timeRange.days"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.months"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.twomonths"); -} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { - optimal = fmt.format("TimelineView.timeRange.years"); -} else { - optimal = fmt.format("TimelineView.timeRange.unknown"); -} -String autoOptString = fmt.format("TimelineView.timeRange.auto",optimal); - -ArrayList partitions; -if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { - hoursOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getHour(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { - daysOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getDay(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getMonth(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getTwoMonth(cResults,wbRequest); -} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { - yearsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getYear(cResults,wbRequest); -} else { - autoOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getAuto(cResults,wbRequest); -} -int numPartitions = partitions.size(); -ResultsPartition firstP = (ResultsPartition) partitions.get(0); -ResultsPartition lastP = (ResultsPartition) partitions.get(numPartitions -1); - -String firstDate = firstP.getTitle(); -String lastDate = lastP.getTitle(); -String titleString = ""; -%> - - -
- - - - - - - - - -
- - - - - - - - -
- <%= fmt.format("TimelineView.viewingVersion",resultIndex,resultCount) %>  -
<%= fmt.format("TimelineView.viewingVersionDate",exactDate) %>   
-
- - - - - - - - - - - -
- - - - - - -
<%= firstDate %><%= lastDate %>
-
<% - titleString = ""; - if(first != null) { - titleString = "title=\"" + - fmt.format("TimelineView.firstVersionTitle", - first.getCaptureDate()) + "\""; - %><% - } - %> wmSpecial="1" border=0 width=19 height=20 src="<%= staticPrefix %>/images/first.jpg"><% - if(first != null) { - %><% - } - titleString = ""; - if(prev != null) { - titleString = "title=\"" + - fmt.format("TimelineView.prevVersionTitle", - prev.getCaptureDate()) + "\""; - %><% - } - %> wmSpecial="1" border=0 width=13 height=20 src="<%= staticPrefix %>/images/prev.jpg"><% - if(first != null) { - %><% - } - %><% - - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); - ArrayList partitionResults = partition.getMatches(); - int numResults = partitionResults.size(); - String imageUrl = staticPrefix + "/images/line.jpg"; - String replayUrl = null; - String prettyDateTime = null; - String ts = null; - if(numResults == 1) { - imageUrl = staticPrefix + "/images/mark_one.jpg"; - CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(0); - replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); - ts = result.getCaptureTimestamp(); - - } else if (numResults > 1) { - imageUrl = staticPrefix + "/images/mark_several.jpg"; - CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(numResults - 1); - replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); - ts = result.getCaptureTimestamp(); - - } - if((i > 0) && (i < numPartitions)) { - -%><% - - } - - if(replayUrl == null) { - -%><% - - } else { - -%><% - - } - } - -%><% - titleString = ""; - if(next != null) { - titleString = "title=\"" + - fmt.format("TimelineView.nextVersionTitle", - next.getCaptureDate()) + "\""; - %><% - } - %> border=0 width=13 height=20 src="<%= staticPrefix %>/images/next.jpg"><% - if(next != null) { - %><% - } - titleString = ""; - if(last != null) { - titleString = "title=\"" + - fmt.format("TimelineView.lastVersionTitle", - last.getCaptureDate()) + "\""; - %><% - } - %> border=0 width=19 height=20 src="<%= staticPrefix %>/images/last.jpg"><% - if(last != null) { - %><% - } - %>
-
- - - <%= - fmt.format("UIGlobal.helpLink") - %> - - -
-
- diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Toolbar.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Toolbar.jsp deleted file mode 100644 index 858f2cd3..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/Toolbar.jsp +++ /dev/null @@ -1,329 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ page import="java.util.Iterator" -%><%@ page import="java.util.ArrayList" -%><%@ page import="java.util.Date" -%><%@ page import="java.util.Calendar" -%><%@ page import="java.util.List" -%><%@ page import="java.text.ParseException" -%><%@ page import="org.archive.wayback.ResultURIConverter" -%><%@ page import="org.archive.wayback.WaybackConstants" -%><%@ page import="org.archive.wayback.core.CaptureSearchResult" -%><%@ page import="org.archive.wayback.core.CaptureSearchResults" -%><%@ page import="org.archive.wayback.core.UIResults" -%><%@ page import="org.archive.wayback.core.WaybackRequest" -%><%@ page import="org.archive.wayback.partition.CaptureSearchResultPartitionMap" -%><%@ page import="org.archive.wayback.partition.PartitionPartitionMap" -%><%@ page import="org.archive.wayback.partition.PartitionsToGraph" -%><%@ page import="org.archive.wayback.partition.ToolBarData" -%><%@ page import="org.archive.wayback.util.Timestamp" -%><%@ page import="org.archive.wayback.util.graph.Graph" -%><%@ page import="org.archive.wayback.util.graph.GraphEncoder" -%><%@ page import="org.archive.wayback.util.graph.GraphRenderer" -%><%@ page import="org.archive.wayback.util.partition.Partition" -%><%@ page import="org.archive.wayback.util.partition.Partitioner" -%><%@ page import="org.archive.wayback.util.partition.PartitionSize" -%><%@ page import="org.archive.wayback.util.StringFormatter" -%><%@ page import="org.archive.wayback.util.url.UrlOperations" -%><% -UIResults results = UIResults.extractReplay(request); -WaybackRequest wbRequest = results.getWbRequest(); -ResultURIConverter uriConverter = results.getURIConverter(); -StringFormatter fmt = wbRequest.getFormatter(); - -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); - -String graphJspPrefix = results.getContextConfig("graphJspPrefix"); -if(graphJspPrefix == null) { - graphJspPrefix = queryPrefix; -} -ToolBarData data = new ToolBarData(results); - -String searchUrl = - UrlOperations.stripDefaultPortFromUrl(wbRequest.getRequestUrl()); -String searchUrlSafe = fmt.escapeHtml(searchUrl); -String searchUrlJS = fmt.escapeJavaScript(searchUrl); -Date firstYearDate = data.yearPartitions.get(0).getStart(); -Date lastYearDate = data.yearPartitions.get(data.yearPartitions.size()-1).getEnd(); - -int resultIndex = 1; -int imgWidth = 0; -int imgHeight = 27; -int monthWidth = 2; -int yearWidth = 25; -int startYear = Timestamp.getStartYear(); - -for (int year = startYear; year <= Calendar.getInstance().get(Calendar.YEAR); year++) - imgWidth += yearWidth; - -String yearFormatKey = "PartitionSize.dateHeader.yearGraphLabel"; -String encodedGraph = data.computeGraphString(yearFormatKey,imgWidth,imgHeight); -String graphImgUrl = graphJspPrefix + "jsp/graph.jsp?graphdata=" + encodedGraph; -// TODO: this is archivalUrl specific: -String starLink = fmt.escapeHtml(queryPrefix + wbRequest.getReplayTimestamp() + - "*/" + searchUrl); -%> - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/UrlRedirectNotice.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/UrlRedirectNotice.jsp deleted file mode 100644 index 7d3cddb1..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/replay/UrlRedirectNotice.jsp +++ /dev/null @@ -1,83 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.Date"%> -<%@ page import="java.util.Map"%> -<%@ page import="java.util.Iterator"%> -<%@ page import="java.lang.StringBuffer"%> -<%@ page import="org.archive.wayback.archivalurl.ArchivalUrlDateRedirectReplayRenderer"%> -<%@ page import="org.archive.wayback.ResultURIConverter"%> -<%@ page import="org.archive.wayback.archivalurl.ArchivalUrl"%> -<%@ page import="org.archive.wayback.core.UIResults"%> -<%@ page import="org.archive.wayback.core.WaybackRequest"%> -<%@ page import="org.archive.wayback.core.CaptureSearchResult"%> -<%@ page import="org.archive.wayback.util.StringFormatter"%> -<%@ page import="org.archive.wayback.util.url.UrlOperations"%> - -<% -UIResults results = UIResults.extractReplay(request); - -WaybackRequest wbr = results.getWbRequest(); -StringFormatter fmt = wbr.getFormatter(); -CaptureSearchResult cResult = results.getResult(); -ResultURIConverter uric = results.getURIConverter(); - -String sourceUrl = cResult.getOriginalUrl(); -String targetUrl = cResult.getRedirectUrl(); -String captureTS = cResult.getCaptureTimestamp(); -Date captureDate = cResult.getCaptureDate(); -if(targetUrl.equals("-")) { - Map headers = results.getResource().getHttpHeaders(); - Iterator headerNameItr = headers.keySet().iterator(); - while(headerNameItr.hasNext()) { - String name = headerNameItr.next(); - if(name.toUpperCase().equals("LOCATION")) { - targetUrl = headers.get(name); - // by the spec, these should be absolute already, but just in case: - targetUrl = UrlOperations.resolveUrl(sourceUrl, targetUrl); - - - } - } -} -// TODO: Handle replay if we still don't have a redirect.. -ArchivalUrl aUrl = new ArchivalUrl(wbr); -String dateSpec = aUrl.getDateSpec(captureTS); - -String targetReplayUrl = uric.makeReplayURI(dateSpec,targetUrl); - -String safeSource = fmt.escapeHtml(sourceUrl); -String safeTarget = fmt.escapeHtml(targetUrl); -String safeTargetJS = fmt.escapeJavaScript(targetUrl); -String safeTargetReplayUrl = fmt.escapeHtml(targetReplayUrl); -String safeTargetReplayUrlJS = fmt.escapeJavaScript(targetReplayUrl); - -String prettyDate = fmt.format("MetaReplay.captureDateDisplay",captureDate); -int secs = 5; - -%> - - -
-
- -
-
-
- -

<%= fmt.format("UIGlobal.loading") %>

-

<%= safeSource %> | <%= prettyDate %>

-

<%= fmt.format("UrlRedirectNotice.302response") %>

-

<%= fmt.format("UrlRedirectNotice.redirect") %>

-

<%= safeTarget %>

-

<%= fmt.format("UIGlobal.impatient") %>

-
-
-
- - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/AnchorWindow.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/AnchorWindow.jsp deleted file mode 100644 index 92736951..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/AnchorWindow.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.core.WaybackRequest"%> -<%@ page import="org.archive.wayback.util.html.SelectHTML"%> -<%@ page import="org.archive.wayback.util.StringFormatter"%> -<%@ page import="org.archive.wayback.core.UIResults"%> -<% -UIResults results = UIResults.getGeneric(request); -WaybackRequest wbRequest = results.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); - -SelectHTML window = new SelectHTML("foo"); -window.setProps("onchange=\"SetAnchorWindow(this.value); location.reload(true);\""); -window.addOption(fmt.format("UIGlobal.DateLabelNone"),"0"); -window.addOption("1 ".concat(fmt.format("UIGlobal.DateLabelMinute")),"60"); -window.addOption("1 ".concat(fmt.format("UIGlobal.DateLabelDay")),"86400"); -window.addOption("1 ".concat(fmt.format("UIGlobal.DateLabelWeek")),"604800"); -window.addOption("1 ".concat(fmt.format("UIGlobal.DateLabelMonth")),"2592000"); -window.addOption("1 ".concat(fmt.format("UIGlobal.DateLabelYear")),"31536000"); -window.addOption("10 ".concat(fmt.format("UIGlobal.DateLabelYears")),"315360000"); - -WaybackRequest wbr = results.getWbRequest(); -window.setActive(wbr.get(WaybackRequest.REQUEST_ANCHOR_WINDOW)); -%><%= window.draw() %> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/CookieJS.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/CookieJS.jsp deleted file mode 100644 index cef393ba..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/CookieJS.jsp +++ /dev/null @@ -1,20 +0,0 @@ -<%@ - page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" -%><%@ - page import="org.archive.wayback.core.WaybackRequest" -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/UI-footer.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/UI-footer.jsp deleted file mode 100644 index e3d2ff7d..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/UI-footer.jsp +++ /dev/null @@ -1,27 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.getGeneric(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); - -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); -%> - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/UI-header.jsp b/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/UI-header.jsp deleted file mode 100644 index 69b691af..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/template/UI-header.jsp +++ /dev/null @@ -1,105 +0,0 @@ - -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<%@ page import="org.archive.wayback.util.Timestamp" %> -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<% -UIResults results = UIResults.getGeneric(request); -WaybackRequest wbRequest = results.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); - -String staticPrefix = results.getStaticPrefix(); -String queryPrefix = results.getQueryPrefix(); -String replayPrefix = results.getReplayPrefix(); - -%> - - - - - - - - <%= fmt.format("UIGlobal.pageTitle") %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
- - - - - - - - - - - - - - - -
- - - - <%= fmt.format("UIGlobal.enterWebAddress") %> - - - -   - - -   - " align="absMiddle"> -   - - <%= fmt.format("UIGlobal.advancedSearchLink") %> - - -
-
-
- diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/wayback.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/wayback.xml deleted file mode 100644 index 0f8df419..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/wayback.xml +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - - - -wayback.basedir.default=/home/john/my-fork-wail/wail/bundledApps/tomcat/webapps/ROOT -wail.basedir=/home/john/my-fork-wail/wail -wayback.url.scheme.default=http -wayback.url.host.default=localhost -wayback.url.port.default=8080 -wayback.basedir=#{ systemEnvironment['WAYBACK_BASEDIR'] ?: '${wayback.basedir.default}' } -wayback.url.scheme=#{ systemEnvironment['WAYBACK_URL_SCHEME'] ?: '${wayback.url.scheme.default}' } -wayback.url.host=#{ systemEnvironment['WAYBACK_URL_HOST'] ?: '${wayback.url.host.default}' } -wayback.url.port=#{ systemEnvironment['WAYBACK_URL_PORT'] ?: '${wayback.url.port.default}' } -wayback.url.prefix.default=${wayback.url.scheme}://${wayback.url.host}:${wayback.url.port} -wayback.url.prefix=#{ systemEnvironment['WAYBACK_URL_PREFIX'] ?: '${wayback.url.prefix.default}' } -wayback.archivedir.1=${wayback.basedir}/files1/ -wayback.archivedir.2=${wayback.basedir}/files2/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/WEB-INF/web.xml b/bundledApps/tomcat/webapps/ROOT/WEB-INF/web.xml deleted file mode 100644 index b1992469..00000000 --- a/bundledApps/tomcat/webapps/ROOT/WEB-INF/web.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - logging-config-path - /WEB-INF/classes/logging.properties - - - config-path - /WEB-INF/wayback.xml - - - RequestFilter - org.archive.wayback.util.webapp.RequestFilter - - - RequestFilter - /* - - - - - - - - diff --git a/bundledApps/tomcat/webapps/ROOT/advanced_search.jsp b/bundledApps/tomcat/webapps/ROOT/advanced_search.jsp deleted file mode 100644 index 2bb6c627..00000000 --- a/bundledApps/tomcat/webapps/ROOT/advanced_search.jsp +++ /dev/null @@ -1,37 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> - -<% - -UIResults results = UIResults.getGeneric(request); -WaybackRequest wbRequest = results.getWbRequest(); -StringFormatter fmt = wbRequest.getFormatter(); - -String staticPrefix = wbRequest.getAccessPoint().getStaticPrefix(); -String queryPrefix = wbRequest.getAccessPoint().getQueryPrefix(); -String replayPrefix = wbRequest.getAccessPoint().getReplayPrefix(); - - -%> -
-<%= fmt.format("AdvancedSearch.searchTypeLabel") %> - - -

-<%= fmt.format("AdvancedSearch.exactDate") %> - -

-<%= fmt.format("AdvancedSearch.earliestDate") %> - -

-<%= fmt.format("AdvancedSearch.latestDate") %> - -

-"> -
- diff --git a/bundledApps/tomcat/webapps/ROOT/css/styles.css b/bundledApps/tomcat/webapps/ROOT/css/styles.css deleted file mode 100644 index 4eb3f733..00000000 --- a/bundledApps/tomcat/webapps/ROOT/css/styles.css +++ /dev/null @@ -1,219 +0,0 @@ -a:link { font-family: Arial, Helvetica, sans-serif; color: #3333FF; text-decoration: underline; line-height: normal} -a:visited { font-family: Arial, Helvetica, sans-serif; color: #993399; text-decoration: underline; line-height: normal} -#nolinelink { font-family: Verdana, Helvetica, sans-serif; font-size: 10px; color: #0000FF; line-height: normal; text-decoration: none} -#orangelink { font-family: Arial, Helvetica, sans-serif; color: #CC6600; text-decoration: underline; line-height: normal} -#blacklink { font-family: Verdana, Helvetica, sans-serif; font-size: 10px;color: #000000 } -#whitelink { font-family: Verdana, Helvetica, sans-serif; font-size: 10px;color: #FFFFFF } - -.mainSmall { font-family: Verdana, Helvetica, sans-serif; font-size: 11px; line-height: normal} -.mainSmallG { font-family: Verdana, Helvetica, sans-serif; font-size: 11px; line-height: normal; color: #666666} -.mainBodyR { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; color: #990000} -.mainBodyW { font-family: Verdana, Helvetica, sans-serif; font-size: 10pt; color: #FFFFFF} -.mainBody { font-family: Verdana, Helvetica, sans-serif; font-size: 10pt} -.mainTitle { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; font-style: normal; font-weight: bold} -.mainTitleW { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; color: #FFFFFF} -.mainSearchTitle { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; font-style: normal; color: #666666} -.mainSearchText { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; color: #666666} -.mainSearchUrls { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt} -.mainCalendar { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; font-style: normal; font-weight: bold} -.mainSecHead { font-family: Arial, Helvetica, sans-serif; font-size: 12pt; font-style: normal; font-weight: bold; color: #000000} -.mainBodyG { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; color: #999999} -.mainBigBody { font-family: Arial, Helvetica, sans-serif; font-size: 12pt} -.mainBigBodyR { font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: #990000} -.mainExample { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; color: #0000FF} -.mainSecHeadW { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: bold; color: #FFFFFF} -.mainSmallTimes { font-family: "Times New Roman", Times, serif; font-size: 10pt} -.mainVerySmall { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px} - -.e2kSmall { font-family: Verdana, Helvetica, sans-serif; font-size: 11px; line-height: normal} -.e2kBodyR { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; color: #990000} -.e2kBodyW { font-family: Verdana, Helvetica, sans-serif; font-size: 10pt; color: #FFFFFF} -.e2kBody { font-family: Verdana, Helvetica, sans-serif; font-size: 10pt} -.e2kTitle { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; font-style: normal; font-weight: bold} -.e2kCalendar { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; font-style: normal; font-weight: bold} -.e2kSecHead { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; font-style: normal; font-weight: bold} -.e2kBodyG { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; color: #999999} -.e2kBigBody { font-family: Arial, Helvetica, sans-serif; font-size: 12pt} -.e2kExample { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; color: #0000FF} -.e2kTitleW { font-family: Arial, Helvetica, sans-serif; font-size: 14pt; color: #FFFFFF} -.e2kSecHeadW { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: bold; color: #FFFFFF} -.e2kSmallTimes { font-family: "Times New Roman", Times, serif; font-size: 10pt} -.e2kVerySmall { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px} - -p {font-family: Verdana, Helvetica, sans-serif; font-size: 10pt} -.mainBColor {background-color: #3EAAB8} -.e2kBColor {background-color: #1D0D71} -.mainSearchBanner {background-color:#F0F0F0} - - -body,div,p,td,th,ul,ol,li {margin:0;padding:0;} -body {background-color:#fff;font-family:"Arial","Helvetica Neue","Helvetica",sans-serif;font-size:100%;} -img {border:none;} -a {color:#069;} -.clearfix{width:100%;clear:both;} -.clearfix:after {content:".";display:block;height:0;clear:both;visibility:hidden;} -#position {padding:0;margin:0 auto;width:990px;background-color:#fff;} -#wbCalendar {position:relative;width:990px;margin-top:25px;} -.calPosition {padding:15px 0 25px 25px;} -#calUnder {overflow:hidden;} -#calOver {position:absolute;top:0;left:0;} -.hidden{display:none;} -.opacity20 { - opacity:.2; --ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; -filter: alpha(opacity=20); -} -.month { - width: 240px; - height: 210px; - float: left; -} -.month table { - border-collapse: collapse; - font-family: "Arial", sans-serif; - border-spacing: 1px; -} -.month table th { - font-size: 0.75em; - font-weight: 700; - text-transform: uppercase; - padding: 6px; -} -.month table span.label { - display: block; - min-height: 20px; -} -.month table td { - padding: 0; - vertical-align: middle; - color: #666; -} -.month table td .day { - width: 30px; - height: 30px; - text-align: center; -} -.month table td .day a, -.month table td .day span { - display: block; - font-size: 0.75em; - width: 30px; - height: 22px; - padding-top: 8px; -} -.month table td .day a { - color: #000; - font-weight: 700; - text-decoration: none; -} -.month table td .day span { - padding-top: 9px; - height: 19px; -} -.month table td .day a:hover { - font-size: 0.95em; - padding-top: 6px; - height: 22px; -} -.month table td .date { - width: 30px; - height: 30px; -} -.month table td .position { - position: relative; - top: 15px; - left: 15px; - width: 1px; - height: 1px; -} -.month table td .measure { - position: absolute; -} -.activeHighlight { - background-color: #000!important; - padding-top: 4px; - font-size: 1.25em!important; - color: #fff300!important; - font-weight: normal!important; - cursor: pointer; -} -.inactiveHighlight { - background-color: #fff!important; - padding-top: 4px; - font-size: .75em!important; - color: #000!important; - font-weight: normal!important; - cursor: pointer; -} - -.bt-content { - text-align: left; -} -.pop {display:none;} -.bt-content h3 {font-size: 1em;font-weight: 700;text-transform: uppercase;margin:0 0 5px;} -.bt-content p {font-size: 0.875em;margin: 5px 0;color:#666;} -.bt-content ul {line-height:1.5em;margin:0 0 0 1em;} -.bt-content em {color:#999;} -.bt-content a:hover {color:#036;} - -#wbSearch {float:left;padding:30px 30px 0;} -#wbSearch #logo {float:left; width:223px;} -#wbSearch #form {float:left;width:707px;} -#wbSearch form {margin:0;padding:0;} -#wbSearch input {font-family:"Arial","Helvetica Neue","Helvetica",sans-serif;font-size:1.125em;} -#wbSearch input[type=text] {width:450px;font-weight:700;} -#wbSearch input[type=submit] {vertical-align: middle;} -#wbMeta {padding:15px 0;} -#wbMeta p {margin:0 0 2px;padding:0;} -#wbMeta p.wbThis {font-size:0.75em;} -#wbMeta p.wbNote {color:#666;font-size: 0.6875em;} -#wbMeta p.wbNote a {color:#666;} -#wbChart {text-align:center;padding:0 30px;} -#wbChartThis {position:relative;margin:0 auto;} -.wbChartThisContainer,.wbChartHover {width: 49px;height:30px;float:left;overflow:visible;} -.wbChartThisTop { - width: 49px; - height: 80px; - border: 1px solid #ccc; -} -.wbGradient { - background: #f3f3f3 -moz-linear-gradient(top,#ffffff,#f3f3f3); - background: #f3f3f3 -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3), color-stop(1.0, #f3f3f3)); - background-color: #f3f3f3; - filter: progid:DXImageTransform.Microsoft.Gradient(enabled='true',startColorstr=#FFFFFFFF, endColorstr=#FFF3F3F3); -} -.wbSelected, #wbSelected { - background: #fff300!important; - border-bottom: 1px solid #000!important; - filter: progid:DXImageTransform.Microsoft.Gradient(enabled='false')!important; - cursor: pointer; -} -#wbSelected { - cursor: default!important; -} -.wbChartThisBtm { - text-align:center; -} -.wbChartSm { - padding-top: 4px; - font-size: 0.625em; - color: #999; - font-weight: 700; -} -.wbChartBig, #wbChartBig { - background-color: #000!important; - padding-top: 4px; - font-size: 1.375em!important; - color: #fff300!important; - font-weight: normal!important; - cursor: pointer; -} -#wbChartBig { - cursor: default!important; -} -#wbChartGraph,#wbChartOver { - position: absolute; - top: 1px; - left: 1px; - cursor: pointer; -} \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/favicon.ico b/bundledApps/tomcat/webapps/ROOT/favicon.ico deleted file mode 100644 index 1f3f7231..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/favicon.ico and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/help.jsp b/bundledApps/tomcat/webapps/ROOT/help.jsp deleted file mode 100644 index dee6d4f2..00000000 --- a/bundledApps/tomcat/webapps/ROOT/help.jsp +++ /dev/null @@ -1,11 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> - -<% -UIResults results = UIResults.getGeneric(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); -String url = fmt.format("UIGlobal.helpUrl"); -%> -<%= fmt.format("UIGlobal.helpPage",url) %> - diff --git a/bundledApps/tomcat/webapps/ROOT/images/OpenWayback-banner.png b/bundledApps/tomcat/webapps/ROOT/images/OpenWayback-banner.png deleted file mode 100644 index 1e0f81c8..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/OpenWayback-banner.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/blueblob-dk.png b/bundledApps/tomcat/webapps/ROOT/images/blueblob-dk.png deleted file mode 100644 index 9c2a692d..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/blueblob-dk.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/blueblob.png b/bundledApps/tomcat/webapps/ROOT/images/blueblob.png deleted file mode 100644 index 6c0557ef..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/blueblob.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/first.jpg b/bundledApps/tomcat/webapps/ROOT/images/first.jpg deleted file mode 100644 index a84783dc..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/first.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/last.jpg b/bundledApps/tomcat/webapps/ROOT/images/last.jpg deleted file mode 100644 index d20311cf..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/last.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/line.jpg b/bundledApps/tomcat/webapps/ROOT/images/line.jpg deleted file mode 100644 index 626c2abf..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/line.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/linemark.jpg b/bundledApps/tomcat/webapps/ROOT/images/linemark.jpg deleted file mode 100644 index 29ebc5d7..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/linemark.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/mark.jpg b/bundledApps/tomcat/webapps/ROOT/images/mark.jpg deleted file mode 100644 index 67f32880..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/mark.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/mark_one.jpg b/bundledApps/tomcat/webapps/ROOT/images/mark_one.jpg deleted file mode 100644 index 4270fc94..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/mark_one.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/mark_several.jpg b/bundledApps/tomcat/webapps/ROOT/images/mark_several.jpg deleted file mode 100644 index fd10bd05..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/mark_several.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/next.jpg b/bundledApps/tomcat/webapps/ROOT/images/next.jpg deleted file mode 100644 index 5e05104c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/next.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/prev.jpg b/bundledApps/tomcat/webapps/ROOT/images/prev.jpg deleted file mode 100644 index 7af24db9..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/prev.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/shim.gif b/bundledApps/tomcat/webapps/ROOT/images/shim.gif deleted file mode 100644 index fc256098..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/shim.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/icon_alert.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/icon_alert.png deleted file mode 100644 index 575fd390..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/icon_alert.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/transp-red-pixel.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/transp-red-pixel.png deleted file mode 100644 index 08aa509d..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/transp-red-pixel.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/transp-yellow-pixel.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/transp-yellow-pixel.png deleted file mode 100644 index 743c5a2d..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/transp-yellow-pixel.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wayback-toolbar-logo.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wayback-toolbar-logo.png deleted file mode 100644 index 876710a2..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wayback-toolbar-logo.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_bk_trns.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_bk_trns.png deleted file mode 100644 index f3fc65fb..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_bk_trns.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_close.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_close.png deleted file mode 100644 index 1a7edfd3..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_close.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_help.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_help.png deleted file mode 100644 index ba81e10e..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_help.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_nxt_off.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_nxt_off.png deleted file mode 100644 index e6ce61fb..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_nxt_off.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_nxt_on.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_nxt_on.png deleted file mode 100644 index e735f47a..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_nxt_on.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_prv_off.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_prv_off.png deleted file mode 100644 index 53b7ea2b..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_prv_off.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_prv_on.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_prv_on.png deleted file mode 100644 index 6157cc2c..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/wm_tb_prv_on.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/toolbar/yellow-pixel.png b/bundledApps/tomcat/webapps/ROOT/images/toolbar/yellow-pixel.png deleted file mode 100644 index da5edc7b..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/toolbar/yellow-pixel.png and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/images/wayback_logo_tr.gif b/bundledApps/tomcat/webapps/ROOT/images/wayback_logo_tr.gif deleted file mode 100644 index 0ea4586e..00000000 Binary files a/bundledApps/tomcat/webapps/ROOT/images/wayback_logo_tr.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/ROOT/index.jsp b/bundledApps/tomcat/webapps/ROOT/index.jsp deleted file mode 100644 index 428630ff..00000000 --- a/bundledApps/tomcat/webapps/ROOT/index.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.ArrayList" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> - -<% -UIResults results = UIResults.getGeneric(request); -StringFormatter fmt = results.getWbRequest().getFormatter(); -Object names = request.getAttribute("AccessPointNames"); -if(names != null) { - if(names instanceof ArrayList) { - ArrayList accessPoints = (ArrayList) names; - if(accessPoints.size() > 0) { - %> - <%= fmt.format("UIGlobal.wrongAccesspoint") %> - <% - } - for(String accessPoint : accessPoints) { - %> - /"><%= accessPoint %>

- <% - } - } -} -%> -

- <%= fmt.format("UIGlobal.indexPage") %> -

- diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/excanvas.js b/bundledApps/tomcat/webapps/ROOT/jflot/excanvas.js deleted file mode 100644 index c40d6f70..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/excanvas.js +++ /dev/null @@ -1,1427 +0,0 @@ -// Copyright 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -// Known Issues: -// -// * Patterns only support repeat. -// * Radial gradient are not implemented. The VML version of these look very -// different from the canvas one. -// * Clipping paths are not implemented. -// * Coordsize. The width and height attribute have higher priority than the -// width and height style values which isn't correct. -// * Painting mode isn't implemented. -// * Canvas width/height should is using content-box by default. IE in -// Quirks mode will draw the canvas using border-box. Either change your -// doctype to HTML5 -// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) -// or use Box Sizing Behavior from WebFX -// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) -// * Non uniform scaling does not correctly scale strokes. -// * Filling very large shapes (above 5000 points) is buggy. -// * Optimize. There is always room for speed improvements. - -// Only add this code if we do not already have a canvas implementation -if (!document.createElement('canvas').getContext) { - -(function() { - - // alias some functions to make (compiled) code shorter - var m = Math; - var mr = m.round; - var ms = m.sin; - var mc = m.cos; - var abs = m.abs; - var sqrt = m.sqrt; - - // this is used for sub pixel precision - var Z = 10; - var Z2 = Z / 2; - - /** - * This funtion is assigned to the elements as element.getContext(). - * @this {HTMLElement} - * @return {CanvasRenderingContext2D_} - */ - function getContext() { - return this.context_ || - (this.context_ = new CanvasRenderingContext2D_(this)); - } - - var slice = Array.prototype.slice; - - /** - * Binds a function to an object. The returned function will always use the - * passed in {@code obj} as {@code this}. - * - * Example: - * - * g = bind(f, obj, a, b) - * g(c, d) // will do f.call(obj, a, b, c, d) - * - * @param {Function} f The function to bind the object to - * @param {Object} obj The object that should act as this when the function - * is called - * @param {*} var_args Rest arguments that will be used as the initial - * arguments when the function is called - * @return {Function} A new function that has bound this - */ - function bind(f, obj, var_args) { - var a = slice.call(arguments, 2); - return function() { - return f.apply(obj, a.concat(slice.call(arguments))); - }; - } - - function encodeHtmlAttribute(s) { - return String(s).replace(/&/g, '&').replace(/"/g, '"'); - } - - function addNamespacesAndStylesheet(doc) { - // create xmlns - if (!doc.namespaces['g_vml_']) { - doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml', - '#default#VML'); - - } - if (!doc.namespaces['g_o_']) { - doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office', - '#default#VML'); - } - - // Setup default CSS. Only add one style sheet per document - if (!doc.styleSheets['ex_canvas_']) { - var ss = doc.createStyleSheet(); - ss.owningElement.id = 'ex_canvas_'; - ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + - // default size is 300x150 in Gecko and Opera - 'text-align:left;width:300px;height:150px}'; - } - } - - // Add namespaces and stylesheet at startup. - addNamespacesAndStylesheet(document); - - var G_vmlCanvasManager_ = { - init: function(opt_doc) { - if (/MSIE/.test(navigator.userAgent) && !window.opera) { - var doc = opt_doc || document; - // Create a dummy element so that IE will allow canvas elements to be - // recognized. - doc.createElement('canvas'); - doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); - } - }, - - init_: function(doc) { - // find all canvas elements - var els = doc.getElementsByTagName('canvas'); - for (var i = 0; i < els.length; i++) { - this.initElement(els[i]); - } - }, - - /** - * Public initializes a canvas element so that it can be used as canvas - * element from now on. This is called automatically before the page is - * loaded but if you are creating elements using createElement you need to - * make sure this is called on the element. - * @param {HTMLElement} el The canvas element to initialize. - * @return {HTMLElement} the element that was created. - */ - initElement: function(el) { - if (!el.getContext) { - el.getContext = getContext; - - // Add namespaces and stylesheet to document of the element. - addNamespacesAndStylesheet(el.ownerDocument); - - // Remove fallback content. There is no way to hide text nodes so we - // just remove all childNodes. We could hide all elements and remove - // text nodes but who really cares about the fallback content. - el.innerHTML = ''; - - // do not use inline function because that will leak memory - el.attachEvent('onpropertychange', onPropertyChange); - el.attachEvent('onresize', onResize); - - var attrs = el.attributes; - if (attrs.width && attrs.width.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setWidth_(attrs.width.nodeValue); - el.style.width = attrs.width.nodeValue + 'px'; - } else { - el.width = el.clientWidth; - } - if (attrs.height && attrs.height.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setHeight_(attrs.height.nodeValue); - el.style.height = attrs.height.nodeValue + 'px'; - } else { - el.height = el.clientHeight; - } - //el.getContext().setCoordsize_() - } - return el; - } - }; - - function onPropertyChange(e) { - var el = e.srcElement; - - switch (e.propertyName) { - case 'width': - el.getContext().clearRect(); - el.style.width = el.attributes.width.nodeValue + 'px'; - // In IE8 this does not trigger onresize. - el.firstChild.style.width = el.clientWidth + 'px'; - break; - case 'height': - el.getContext().clearRect(); - el.style.height = el.attributes.height.nodeValue + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - break; - } - } - - function onResize(e) { - var el = e.srcElement; - if (el.firstChild) { - el.firstChild.style.width = el.clientWidth + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - } - } - - G_vmlCanvasManager_.init(); - - // precompute "00" to "FF" - var decToHex = []; - for (var i = 0; i < 16; i++) { - for (var j = 0; j < 16; j++) { - decToHex[i * 16 + j] = i.toString(16) + j.toString(16); - } - } - - function createMatrixIdentity() { - return [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ]; - } - - function matrixMultiply(m1, m2) { - var result = createMatrixIdentity(); - - for (var x = 0; x < 3; x++) { - for (var y = 0; y < 3; y++) { - var sum = 0; - - for (var z = 0; z < 3; z++) { - sum += m1[x][z] * m2[z][y]; - } - - result[x][y] = sum; - } - } - return result; - } - - function copyState(o1, o2) { - o2.fillStyle = o1.fillStyle; - o2.lineCap = o1.lineCap; - o2.lineJoin = o1.lineJoin; - o2.lineWidth = o1.lineWidth; - o2.miterLimit = o1.miterLimit; - o2.shadowBlur = o1.shadowBlur; - o2.shadowColor = o1.shadowColor; - o2.shadowOffsetX = o1.shadowOffsetX; - o2.shadowOffsetY = o1.shadowOffsetY; - o2.strokeStyle = o1.strokeStyle; - o2.globalAlpha = o1.globalAlpha; - o2.font = o1.font; - o2.textAlign = o1.textAlign; - o2.textBaseline = o1.textBaseline; - o2.arcScaleX_ = o1.arcScaleX_; - o2.arcScaleY_ = o1.arcScaleY_; - o2.lineScale_ = o1.lineScale_; - } - - var colorData = { - aliceblue: '#F0F8FF', - antiquewhite: '#FAEBD7', - aquamarine: '#7FFFD4', - azure: '#F0FFFF', - beige: '#F5F5DC', - bisque: '#FFE4C4', - black: '#000000', - blanchedalmond: '#FFEBCD', - blueviolet: '#8A2BE2', - brown: '#A52A2A', - burlywood: '#DEB887', - cadetblue: '#5F9EA0', - chartreuse: '#7FFF00', - chocolate: '#D2691E', - coral: '#FF7F50', - cornflowerblue: '#6495ED', - cornsilk: '#FFF8DC', - crimson: '#DC143C', - cyan: '#00FFFF', - darkblue: '#00008B', - darkcyan: '#008B8B', - darkgoldenrod: '#B8860B', - darkgray: '#A9A9A9', - darkgreen: '#006400', - darkgrey: '#A9A9A9', - darkkhaki: '#BDB76B', - darkmagenta: '#8B008B', - darkolivegreen: '#556B2F', - darkorange: '#FF8C00', - darkorchid: '#9932CC', - darkred: '#8B0000', - darksalmon: '#E9967A', - darkseagreen: '#8FBC8F', - darkslateblue: '#483D8B', - darkslategray: '#2F4F4F', - darkslategrey: '#2F4F4F', - darkturquoise: '#00CED1', - darkviolet: '#9400D3', - deeppink: '#FF1493', - deepskyblue: '#00BFFF', - dimgray: '#696969', - dimgrey: '#696969', - dodgerblue: '#1E90FF', - firebrick: '#B22222', - floralwhite: '#FFFAF0', - forestgreen: '#228B22', - gainsboro: '#DCDCDC', - ghostwhite: '#F8F8FF', - gold: '#FFD700', - goldenrod: '#DAA520', - grey: '#808080', - greenyellow: '#ADFF2F', - honeydew: '#F0FFF0', - hotpink: '#FF69B4', - indianred: '#CD5C5C', - indigo: '#4B0082', - ivory: '#FFFFF0', - khaki: '#F0E68C', - lavender: '#E6E6FA', - lavenderblush: '#FFF0F5', - lawngreen: '#7CFC00', - lemonchiffon: '#FFFACD', - lightblue: '#ADD8E6', - lightcoral: '#F08080', - lightcyan: '#E0FFFF', - lightgoldenrodyellow: '#FAFAD2', - lightgreen: '#90EE90', - lightgrey: '#D3D3D3', - lightpink: '#FFB6C1', - lightsalmon: '#FFA07A', - lightseagreen: '#20B2AA', - lightskyblue: '#87CEFA', - lightslategray: '#778899', - lightslategrey: '#778899', - lightsteelblue: '#B0C4DE', - lightyellow: '#FFFFE0', - limegreen: '#32CD32', - linen: '#FAF0E6', - magenta: '#FF00FF', - mediumaquamarine: '#66CDAA', - mediumblue: '#0000CD', - mediumorchid: '#BA55D3', - mediumpurple: '#9370DB', - mediumseagreen: '#3CB371', - mediumslateblue: '#7B68EE', - mediumspringgreen: '#00FA9A', - mediumturquoise: '#48D1CC', - mediumvioletred: '#C71585', - midnightblue: '#191970', - mintcream: '#F5FFFA', - mistyrose: '#FFE4E1', - moccasin: '#FFE4B5', - navajowhite: '#FFDEAD', - oldlace: '#FDF5E6', - olivedrab: '#6B8E23', - orange: '#FFA500', - orangered: '#FF4500', - orchid: '#DA70D6', - palegoldenrod: '#EEE8AA', - palegreen: '#98FB98', - paleturquoise: '#AFEEEE', - palevioletred: '#DB7093', - papayawhip: '#FFEFD5', - peachpuff: '#FFDAB9', - peru: '#CD853F', - pink: '#FFC0CB', - plum: '#DDA0DD', - powderblue: '#B0E0E6', - rosybrown: '#BC8F8F', - royalblue: '#4169E1', - saddlebrown: '#8B4513', - salmon: '#FA8072', - sandybrown: '#F4A460', - seagreen: '#2E8B57', - seashell: '#FFF5EE', - sienna: '#A0522D', - skyblue: '#87CEEB', - slateblue: '#6A5ACD', - slategray: '#708090', - slategrey: '#708090', - snow: '#FFFAFA', - springgreen: '#00FF7F', - steelblue: '#4682B4', - tan: '#D2B48C', - thistle: '#D8BFD8', - tomato: '#FF6347', - turquoise: '#40E0D0', - violet: '#EE82EE', - wheat: '#F5DEB3', - whitesmoke: '#F5F5F5', - yellowgreen: '#9ACD32' - }; - - - function getRgbHslContent(styleString) { - var start = styleString.indexOf('(', 3); - var end = styleString.indexOf(')', start + 1); - var parts = styleString.substring(start + 1, end).split(','); - // add alpha if needed - if (parts.length == 4 && styleString.substr(3, 1) == 'a') { - alpha = Number(parts[3]); - } else { - parts[3] = 1; - } - return parts; - } - - function percent(s) { - return parseFloat(s) / 100; - } - - function clamp(v, min, max) { - return Math.min(max, Math.max(min, v)); - } - - function hslToRgb(parts){ - var r, g, b; - h = parseFloat(parts[0]) / 360 % 360; - if (h < 0) - h++; - s = clamp(percent(parts[1]), 0, 1); - l = clamp(percent(parts[2]), 0, 1); - if (s == 0) { - r = g = b = l; // achromatic - } else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hueToRgb(p, q, h + 1 / 3); - g = hueToRgb(p, q, h); - b = hueToRgb(p, q, h - 1 / 3); - } - - return '#' + decToHex[Math.floor(r * 255)] + - decToHex[Math.floor(g * 255)] + - decToHex[Math.floor(b * 255)]; - } - - function hueToRgb(m1, m2, h) { - if (h < 0) - h++; - if (h > 1) - h--; - - if (6 * h < 1) - return m1 + (m2 - m1) * 6 * h; - else if (2 * h < 1) - return m2; - else if (3 * h < 2) - return m1 + (m2 - m1) * (2 / 3 - h) * 6; - else - return m1; - } - - function processStyle(styleString) { - var str, alpha = 1; - - styleString = String(styleString); - if (styleString.charAt(0) == '#') { - str = styleString; - } else if (/^rgb/.test(styleString)) { - var parts = getRgbHslContent(styleString); - var str = '#', n; - for (var i = 0; i < 3; i++) { - if (parts[i].indexOf('%') != -1) { - n = Math.floor(percent(parts[i]) * 255); - } else { - n = Number(parts[i]); - } - str += decToHex[clamp(n, 0, 255)]; - } - alpha = parts[3]; - } else if (/^hsl/.test(styleString)) { - var parts = getRgbHslContent(styleString); - str = hslToRgb(parts); - alpha = parts[3]; - } else { - str = colorData[styleString] || styleString; - } - return {color: str, alpha: alpha}; - } - - var DEFAULT_STYLE = { - style: 'normal', - variant: 'normal', - weight: 'normal', - size: 10, - family: 'sans-serif' - }; - - // Internal text style cache - var fontStyleCache = {}; - - function processFontStyle(styleString) { - if (fontStyleCache[styleString]) { - return fontStyleCache[styleString]; - } - - var el = document.createElement('div'); - var style = el.style; - try { - style.font = styleString; - } catch (ex) { - // Ignore failures to set to invalid font. - } - - return fontStyleCache[styleString] = { - style: style.fontStyle || DEFAULT_STYLE.style, - variant: style.fontVariant || DEFAULT_STYLE.variant, - weight: style.fontWeight || DEFAULT_STYLE.weight, - size: style.fontSize || DEFAULT_STYLE.size, - family: style.fontFamily || DEFAULT_STYLE.family - }; - } - - function getComputedStyle(style, element) { - var computedStyle = {}; - - for (var p in style) { - computedStyle[p] = style[p]; - } - - // Compute the size - var canvasFontSize = parseFloat(element.currentStyle.fontSize), - fontSize = parseFloat(style.size); - - if (typeof style.size == 'number') { - computedStyle.size = style.size; - } else if (style.size.indexOf('px') != -1) { - computedStyle.size = fontSize; - } else if (style.size.indexOf('em') != -1) { - computedStyle.size = canvasFontSize * fontSize; - } else if(style.size.indexOf('%') != -1) { - computedStyle.size = (canvasFontSize / 100) * fontSize; - } else if (style.size.indexOf('pt') != -1) { - computedStyle.size = fontSize / .75; - } else { - computedStyle.size = canvasFontSize; - } - - // Different scaling between normal text and VML text. This was found using - // trial and error to get the same size as non VML text. - computedStyle.size *= 0.981; - - return computedStyle; - } - - function buildStyle(style) { - return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + - style.size + 'px ' + style.family; - } - - function processLineCap(lineCap) { - switch (lineCap) { - case 'butt': - return 'flat'; - case 'round': - return 'round'; - case 'square': - default: - return 'square'; - } - } - - /** - * This class implements CanvasRenderingContext2D interface as described by - * the WHATWG. - * @param {HTMLElement} surfaceElement The element that the 2D context should - * be associated with - */ - function CanvasRenderingContext2D_(surfaceElement) { - this.m_ = createMatrixIdentity(); - - this.mStack_ = []; - this.aStack_ = []; - this.currentPath_ = []; - - // Canvas context properties - this.strokeStyle = '#000'; - this.fillStyle = '#000'; - - this.lineWidth = 1; - this.lineJoin = 'miter'; - this.lineCap = 'butt'; - this.miterLimit = Z * 1; - this.globalAlpha = 1; - this.font = '10px sans-serif'; - this.textAlign = 'left'; - this.textBaseline = 'alphabetic'; - this.canvas = surfaceElement; - - var el = surfaceElement.ownerDocument.createElement('div'); - el.style.width = surfaceElement.clientWidth + 'px'; - el.style.height = surfaceElement.clientHeight + 'px'; - el.style.overflow = 'hidden'; - el.style.position = 'absolute'; - surfaceElement.appendChild(el); - - this.element_ = el; - this.arcScaleX_ = 1; - this.arcScaleY_ = 1; - this.lineScale_ = 1; - } - - var contextPrototype = CanvasRenderingContext2D_.prototype; - contextPrototype.clearRect = function() { - if (this.textMeasureEl_) { - this.textMeasureEl_.removeNode(true); - this.textMeasureEl_ = null; - } - this.element_.innerHTML = ''; - }; - - contextPrototype.beginPath = function() { - // TODO: Branch current matrix so that save/restore has no effect - // as per safari docs. - this.currentPath_ = []; - }; - - contextPrototype.moveTo = function(aX, aY) { - var p = this.getCoords_(aX, aY); - this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); - this.currentX_ = p.x; - this.currentY_ = p.y; - }; - - contextPrototype.lineTo = function(aX, aY) { - var p = this.getCoords_(aX, aY); - this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); - - this.currentX_ = p.x; - this.currentY_ = p.y; - }; - - contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, - aCP2x, aCP2y, - aX, aY) { - var p = this.getCoords_(aX, aY); - var cp1 = this.getCoords_(aCP1x, aCP1y); - var cp2 = this.getCoords_(aCP2x, aCP2y); - bezierCurveTo(this, cp1, cp2, p); - }; - - // Helper function that takes the already fixed cordinates. - function bezierCurveTo(self, cp1, cp2, p) { - self.currentPath_.push({ - type: 'bezierCurveTo', - cp1x: cp1.x, - cp1y: cp1.y, - cp2x: cp2.x, - cp2y: cp2.y, - x: p.x, - y: p.y - }); - self.currentX_ = p.x; - self.currentY_ = p.y; - } - - contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { - // the following is lifted almost directly from - // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes - - var cp = this.getCoords_(aCPx, aCPy); - var p = this.getCoords_(aX, aY); - - var cp1 = { - x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), - y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) - }; - var cp2 = { - x: cp1.x + (p.x - this.currentX_) / 3.0, - y: cp1.y + (p.y - this.currentY_) / 3.0 - }; - - bezierCurveTo(this, cp1, cp2, p); - }; - - contextPrototype.arc = function(aX, aY, aRadius, - aStartAngle, aEndAngle, aClockwise) { - aRadius *= Z; - var arcType = aClockwise ? 'at' : 'wa'; - - var xStart = aX + mc(aStartAngle) * aRadius - Z2; - var yStart = aY + ms(aStartAngle) * aRadius - Z2; - - var xEnd = aX + mc(aEndAngle) * aRadius - Z2; - var yEnd = aY + ms(aEndAngle) * aRadius - Z2; - - // IE won't render arches drawn counter clockwise if xStart == xEnd. - if (xStart == xEnd && !aClockwise) { - xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something - // that can be represented in binary - } - - var p = this.getCoords_(aX, aY); - var pStart = this.getCoords_(xStart, yStart); - var pEnd = this.getCoords_(xEnd, yEnd); - - this.currentPath_.push({type: arcType, - x: p.x, - y: p.y, - radius: aRadius, - xStart: pStart.x, - yStart: pStart.y, - xEnd: pEnd.x, - yEnd: pEnd.y}); - - }; - - contextPrototype.rect = function(aX, aY, aWidth, aHeight) { - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - }; - - contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { - var oldPath = this.currentPath_; - this.beginPath(); - - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.stroke(); - - this.currentPath_ = oldPath; - }; - - contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { - var oldPath = this.currentPath_; - this.beginPath(); - - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.fill(); - - this.currentPath_ = oldPath; - }; - - contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { - var gradient = new CanvasGradient_('gradient'); - gradient.x0_ = aX0; - gradient.y0_ = aY0; - gradient.x1_ = aX1; - gradient.y1_ = aY1; - return gradient; - }; - - contextPrototype.createRadialGradient = function(aX0, aY0, aR0, - aX1, aY1, aR1) { - var gradient = new CanvasGradient_('gradientradial'); - gradient.x0_ = aX0; - gradient.y0_ = aY0; - gradient.r0_ = aR0; - gradient.x1_ = aX1; - gradient.y1_ = aY1; - gradient.r1_ = aR1; - return gradient; - }; - - contextPrototype.drawImage = function(image, var_args) { - var dx, dy, dw, dh, sx, sy, sw, sh; - - // to find the original width we overide the width and height - var oldRuntimeWidth = image.runtimeStyle.width; - var oldRuntimeHeight = image.runtimeStyle.height; - image.runtimeStyle.width = 'auto'; - image.runtimeStyle.height = 'auto'; - - // get the original size - var w = image.width; - var h = image.height; - - // and remove overides - image.runtimeStyle.width = oldRuntimeWidth; - image.runtimeStyle.height = oldRuntimeHeight; - - if (arguments.length == 3) { - dx = arguments[1]; - dy = arguments[2]; - sx = sy = 0; - sw = dw = w; - sh = dh = h; - } else if (arguments.length == 5) { - dx = arguments[1]; - dy = arguments[2]; - dw = arguments[3]; - dh = arguments[4]; - sx = sy = 0; - sw = w; - sh = h; - } else if (arguments.length == 9) { - sx = arguments[1]; - sy = arguments[2]; - sw = arguments[3]; - sh = arguments[4]; - dx = arguments[5]; - dy = arguments[6]; - dw = arguments[7]; - dh = arguments[8]; - } else { - throw Error('Invalid number of arguments'); - } - - var d = this.getCoords_(dx, dy); - - var w2 = sw / 2; - var h2 = sh / 2; - - var vmlStr = []; - - var W = 10; - var H = 10; - - // For some reason that I've now forgotten, using divs didn't work - vmlStr.push(' ' , - '', - ''); - - this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); - }; - - contextPrototype.stroke = function(aFill) { - var W = 10; - var H = 10; - // Divide the shape into chunks if it's too long because IE has a limit - // somewhere for how long a VML shape can be. This simple division does - // not work with fills, only strokes, unfortunately. - var chunkSize = 5000; - - var min = {x: null, y: null}; - var max = {x: null, y: null}; - - for (var j = 0; j < this.currentPath_.length; j += chunkSize) { - var lineStr = []; - var lineOpen = false; - - lineStr.push(''); - - if (!aFill) { - appendStroke(this, lineStr); - } else { - appendFill(this, lineStr, min, max); - } - - lineStr.push(''); - - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); - } - }; - - function appendStroke(ctx, lineStr) { - var a = processStyle(ctx.strokeStyle); - var color = a.color; - var opacity = a.alpha * ctx.globalAlpha; - var lineWidth = ctx.lineScale_ * ctx.lineWidth; - - // VML cannot correctly render a line if the width is less than 1px. - // In that case, we dilute the color to make the line look thinner. - if (lineWidth < 1) { - opacity *= lineWidth; - } - - lineStr.push( - '' - ); - } - - function appendFill(ctx, lineStr, min, max) { - var fillStyle = ctx.fillStyle; - var arcScaleX = ctx.arcScaleX_; - var arcScaleY = ctx.arcScaleY_; - var width = max.x - min.x; - var height = max.y - min.y; - if (fillStyle instanceof CanvasGradient_) { - // TODO: Gradients transformed with the transformation matrix. - var angle = 0; - var focus = {x: 0, y: 0}; - - // additional offset - var shift = 0; - // scale factor for offset - var expansion = 1; - - if (fillStyle.type_ == 'gradient') { - var x0 = fillStyle.x0_ / arcScaleX; - var y0 = fillStyle.y0_ / arcScaleY; - var x1 = fillStyle.x1_ / arcScaleX; - var y1 = fillStyle.y1_ / arcScaleY; - var p0 = ctx.getCoords_(x0, y0); - var p1 = ctx.getCoords_(x1, y1); - var dx = p1.x - p0.x; - var dy = p1.y - p0.y; - angle = Math.atan2(dx, dy) * 180 / Math.PI; - - // The angle should be a non-negative number. - if (angle < 0) { - angle += 360; - } - - // Very small angles produce an unexpected result because they are - // converted to a scientific notation string. - if (angle < 1e-6) { - angle = 0; - } - } else { - var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_); - focus = { - x: (p0.x - min.x) / width, - y: (p0.y - min.y) / height - }; - - width /= arcScaleX * Z; - height /= arcScaleY * Z; - var dimension = m.max(width, height); - shift = 2 * fillStyle.r0_ / dimension; - expansion = 2 * fillStyle.r1_ / dimension - shift; - } - - // We need to sort the color stops in ascending order by offset, - // otherwise IE won't interpret it correctly. - var stops = fillStyle.colors_; - stops.sort(function(cs1, cs2) { - return cs1.offset - cs2.offset; - }); - - var length = stops.length; - var color1 = stops[0].color; - var color2 = stops[length - 1].color; - var opacity1 = stops[0].alpha * ctx.globalAlpha; - var opacity2 = stops[length - 1].alpha * ctx.globalAlpha; - - var colors = []; - for (var i = 0; i < length; i++) { - var stop = stops[i]; - colors.push(stop.offset * expansion + shift + ' ' + stop.color); - } - - // When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - lineStr.push(''); - } else if (fillStyle instanceof CanvasPattern_) { - if (width && height) { - var deltaLeft = -min.x; - var deltaTop = -min.y; - lineStr.push(''); - } - } else { - var a = processStyle(ctx.fillStyle); - var color = a.color; - var opacity = a.alpha * ctx.globalAlpha; - lineStr.push(''); - } - } - - contextPrototype.fill = function() { - this.stroke(true); - }; - - contextPrototype.closePath = function() { - this.currentPath_.push({type: 'close'}); - }; - - /** - * @private - */ - contextPrototype.getCoords_ = function(aX, aY) { - var m = this.m_; - return { - x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, - y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 - }; - }; - - contextPrototype.save = function() { - var o = {}; - copyState(this, o); - this.aStack_.push(o); - this.mStack_.push(this.m_); - this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); - }; - - contextPrototype.restore = function() { - if (this.aStack_.length) { - copyState(this.aStack_.pop(), this); - this.m_ = this.mStack_.pop(); - } - }; - - function matrixIsFinite(m) { - return isFinite(m[0][0]) && isFinite(m[0][1]) && - isFinite(m[1][0]) && isFinite(m[1][1]) && - isFinite(m[2][0]) && isFinite(m[2][1]); - } - - function setM(ctx, m, updateLineScale) { - if (!matrixIsFinite(m)) { - return; - } - ctx.m_ = m; - - if (updateLineScale) { - // Get the line scale. - // Determinant of this.m_ means how much the area is enlarged by the - // transformation. So its square root can be used as a scale factor - // for width. - var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; - ctx.lineScale_ = sqrt(abs(det)); - } - } - - contextPrototype.translate = function(aX, aY) { - var m1 = [ - [1, 0, 0], - [0, 1, 0], - [aX, aY, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), false); - }; - - contextPrototype.rotate = function(aRot) { - var c = mc(aRot); - var s = ms(aRot); - - var m1 = [ - [c, s, 0], - [-s, c, 0], - [0, 0, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), false); - }; - - contextPrototype.scale = function(aX, aY) { - this.arcScaleX_ *= aX; - this.arcScaleY_ *= aY; - var m1 = [ - [aX, 0, 0], - [0, aY, 0], - [0, 0, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), true); - }; - - contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { - var m1 = [ - [m11, m12, 0], - [m21, m22, 0], - [dx, dy, 1] - ]; - - setM(this, matrixMultiply(m1, this.m_), true); - }; - - contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { - var m = [ - [m11, m12, 0], - [m21, m22, 0], - [dx, dy, 1] - ]; - - setM(this, m, true); - }; - - /** - * The text drawing function. - * The maxWidth argument isn't taken in account, since no browser supports - * it yet. - */ - contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) { - var m = this.m_, - delta = 1000, - left = 0, - right = delta, - offset = {x: 0, y: 0}, - lineStr = []; - - var fontStyle = getComputedStyle(processFontStyle(this.font), - this.element_); - - var fontStyleString = buildStyle(fontStyle); - - var elementStyle = this.element_.currentStyle; - var textAlign = this.textAlign.toLowerCase(); - switch (textAlign) { - case 'left': - case 'center': - case 'right': - break; - case 'end': - textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left'; - break; - case 'start': - textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left'; - break; - default: - textAlign = 'left'; - } - - // 1.75 is an arbitrary number, as there is no info about the text baseline - switch (this.textBaseline) { - case 'hanging': - case 'top': - offset.y = fontStyle.size / 1.75; - break; - case 'middle': - break; - default: - case null: - case 'alphabetic': - case 'ideographic': - case 'bottom': - offset.y = -fontStyle.size / 2.25; - break; - } - - switch(textAlign) { - case 'right': - left = delta; - right = 0.05; - break; - case 'center': - left = right = delta / 2; - break; - } - - var d = this.getCoords_(x + offset.x, y + offset.y); - - lineStr.push(''); - - if (stroke) { - appendStroke(this, lineStr); - } else { - // TODO: Fix the min and max params. - appendFill(this, lineStr, {x: -left, y: 0}, - {x: right, y: fontStyle.size}); - } - - var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + - m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0'; - - var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z); - - lineStr.push('', - '', - ''); - - this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); - }; - - contextPrototype.fillText = function(text, x, y, maxWidth) { - this.drawText_(text, x, y, maxWidth, false); - }; - - contextPrototype.strokeText = function(text, x, y, maxWidth) { - this.drawText_(text, x, y, maxWidth, true); - }; - - contextPrototype.measureText = function(text) { - if (!this.textMeasureEl_) { - var s = ''; - this.element_.insertAdjacentHTML('beforeEnd', s); - this.textMeasureEl_ = this.element_.lastChild; - } - var doc = this.element_.ownerDocument; - this.textMeasureEl_.innerHTML = ''; - this.textMeasureEl_.style.font = this.font; - // Don't use innerHTML or innerText because they allow markup/whitespace. - this.textMeasureEl_.appendChild(doc.createTextNode(text)); - return {width: this.textMeasureEl_.offsetWidth}; - }; - - /******** STUBS ********/ - contextPrototype.clip = function() { - // TODO: Implement - }; - - contextPrototype.arcTo = function() { - // TODO: Implement - }; - - contextPrototype.createPattern = function(image, repetition) { - return new CanvasPattern_(image, repetition); - }; - - // Gradient / Pattern Stubs - function CanvasGradient_(aType) { - this.type_ = aType; - this.x0_ = 0; - this.y0_ = 0; - this.r0_ = 0; - this.x1_ = 0; - this.y1_ = 0; - this.r1_ = 0; - this.colors_ = []; - } - - CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { - aColor = processStyle(aColor); - this.colors_.push({offset: aOffset, - color: aColor.color, - alpha: aColor.alpha}); - }; - - function CanvasPattern_(image, repetition) { - assertImageIsValid(image); - switch (repetition) { - case 'repeat': - case null: - case '': - this.repetition_ = 'repeat'; - break - case 'repeat-x': - case 'repeat-y': - case 'no-repeat': - this.repetition_ = repetition; - break; - default: - throwException('SYNTAX_ERR'); - } - - this.src_ = image.src; - this.width_ = image.width; - this.height_ = image.height; - } - - function throwException(s) { - throw new DOMException_(s); - } - - function assertImageIsValid(img) { - if (!img || img.nodeType != 1 || img.tagName != 'IMG') { - throwException('TYPE_MISMATCH_ERR'); - } - if (img.readyState != 'complete') { - throwException('INVALID_STATE_ERR'); - } - } - - function DOMException_(s) { - this.code = this[s]; - this.message = s +': DOM Exception ' + this.code; - } - var p = DOMException_.prototype = new Error; - p.INDEX_SIZE_ERR = 1; - p.DOMSTRING_SIZE_ERR = 2; - p.HIERARCHY_REQUEST_ERR = 3; - p.WRONG_DOCUMENT_ERR = 4; - p.INVALID_CHARACTER_ERR = 5; - p.NO_DATA_ALLOWED_ERR = 6; - p.NO_MODIFICATION_ALLOWED_ERR = 7; - p.NOT_FOUND_ERR = 8; - p.NOT_SUPPORTED_ERR = 9; - p.INUSE_ATTRIBUTE_ERR = 10; - p.INVALID_STATE_ERR = 11; - p.SYNTAX_ERR = 12; - p.INVALID_MODIFICATION_ERR = 13; - p.NAMESPACE_ERR = 14; - p.INVALID_ACCESS_ERR = 15; - p.VALIDATION_ERR = 16; - p.TYPE_MISMATCH_ERR = 17; - - // set up externs - G_vmlCanvasManager = G_vmlCanvasManager_; - CanvasRenderingContext2D = CanvasRenderingContext2D_; - CanvasGradient = CanvasGradient_; - CanvasPattern = CanvasPattern_; - DOMException = DOMException_; -})(); - -} // if diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/excanvas.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/excanvas.min.js deleted file mode 100644 index 12c74f7b..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/excanvas.min.js +++ /dev/null @@ -1 +0,0 @@ -if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" ','","");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AHAL.x){AL.x=Z.x}if(AG.y==null||Z.yAL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('','','');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()}; \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.colorhelpers.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.colorhelpers.js deleted file mode 100644 index fa449612..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.colorhelpers.js +++ /dev/null @@ -1,174 +0,0 @@ -/* Plugin for jQuery for working with colors. - * - * Version 1.0. - * - * Inspiration from jQuery color animation plugin by John Resig. - * - * Released under the MIT license by Ole Laursen, October 2009. - * - * Examples: - * - * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() - * var c = $.color.extract($("#mydiv"), 'background-color'); - * console.log(c.r, c.g, c.b, c.a); - * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" - * - * Note that .scale() and .add() work in-place instead of returning - * new objects. - */ - -(function() { - jQuery.color = {}; - - // construct color object with some convenient chainable helpers - jQuery.color.make = function (r, g, b, a) { - var o = {}; - o.r = r || 0; - o.g = g || 0; - o.b = b || 0; - o.a = a != null ? a : 1; - - o.add = function (c, d) { - for (var i = 0; i < c.length; ++i) - o[c.charAt(i)] += d; - return o.normalize(); - }; - - o.scale = function (c, f) { - for (var i = 0; i < c.length; ++i) - o[c.charAt(i)] *= f; - return o.normalize(); - }; - - o.toString = function () { - if (o.a >= 1.0) { - return "rgb("+[o.r, o.g, o.b].join(",")+")"; - } else { - return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")"; - } - }; - - o.normalize = function () { - function clamp(min, value, max) { - return value < min ? min: (value > max ? max: value); - } - - o.r = clamp(0, parseInt(o.r), 255); - o.g = clamp(0, parseInt(o.g), 255); - o.b = clamp(0, parseInt(o.b), 255); - o.a = clamp(0, o.a, 1); - return o; - }; - - o.clone = function () { - return jQuery.color.make(o.r, o.b, o.g, o.a); - }; - - return o.normalize(); - } - - // extract CSS color property from element, going up in the DOM - // if it's "transparent" - jQuery.color.extract = function (elem, css) { - var c; - do { - c = elem.css(css).toLowerCase(); - // keep going until we find an element that has color, or - // we hit the body - if (c != '' && c != 'transparent') - break; - elem = elem.parent(); - } while (!jQuery.nodeName(elem.get(0), "body")); - - // catch Safari's way of signalling transparent - if (c == "rgba(0, 0, 0, 0)") - c = "transparent"; - - return jQuery.color.parse(c); - } - - // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"), - // returns color object - jQuery.color.parse = function (str) { - var res, m = jQuery.color.make; - - // Look for rgb(num,num,num) - if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)) - return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10)); - - // Look for rgba(num,num,num,num) - if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) - return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4])); - - // Look for rgb(num%,num%,num%) - if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)) - return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55); - - // Look for rgba(num%,num%,num%,num) - if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) - return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4])); - - // Look for #a0b1c2 - if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)) - return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); - - // Look for #fff - if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)) - return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16)); - - // Otherwise, we're most likely dealing with a named color - var name = jQuery.trim(str).toLowerCase(); - if (name == "transparent") - return m(255, 255, 255, 0); - else { - res = lookupColors[name]; - return m(res[0], res[1], res[2]); - } - } - - var lookupColors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0] - }; -})(); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.colorhelpers.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.colorhelpers.min.js deleted file mode 100644 index fafe905c..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.colorhelpers.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return JH?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(); \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.crosshair.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.crosshair.js deleted file mode 100644 index 11be113f..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.crosshair.js +++ /dev/null @@ -1,156 +0,0 @@ -/* -Flot plugin for showing a crosshair, thin lines, when the mouse hovers -over the plot. - - crosshair: { - mode: null or "x" or "y" or "xy" - color: color - lineWidth: number - } - -Set the mode to one of "x", "y" or "xy". The "x" mode enables a -vertical crosshair that lets you trace the values on the x axis, "y" -enables a horizontal crosshair and "xy" enables them both. "color" is -the color of the crosshair (default is "rgba(170, 0, 0, 0.80)"), -"lineWidth" is the width of the drawn lines (default is 1). - -The plugin also adds four public methods: - - - setCrosshair(pos) - - Set the position of the crosshair. Note that this is cleared if - the user moves the mouse. "pos" should be on the form { x: xpos, - y: ypos } (or x2 and y2 if you're using the secondary axes), which - is coincidentally the same format as what you get from a "plothover" - event. If "pos" is null, the crosshair is cleared. - - - clearCrosshair() - - Clear the crosshair. - - - lockCrosshair(pos) - - Cause the crosshair to lock to the current location, no longer - updating if the user moves the mouse. Optionally supply a position - (passed on to setCrosshair()) to move it to. - - Example usage: - var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } }; - $("#graph").bind("plothover", function (evt, position, item) { - if (item) { - // Lock the crosshair to the data point being hovered - myFlot.lockCrosshair({ x: item.datapoint[0], y: item.datapoint[1] }); - } - else { - // Return normal crosshair operation - myFlot.unlockCrosshair(); - } - }); - - - unlockCrosshair() - - Free the crosshair to move again after locking it. -*/ - -(function ($) { - var options = { - crosshair: { - mode: null, // one of null, "x", "y" or "xy", - color: "rgba(170, 0, 0, 0.80)", - lineWidth: 1 - } - }; - - function init(plot) { - // position of crosshair in pixels - var crosshair = { x: -1, y: -1, locked: false }; - - plot.setCrosshair = function setCrosshair(pos) { - if (!pos) - crosshair.x = -1; - else { - var axes = plot.getAxes(); - - crosshair.x = Math.max(0, Math.min(pos.x != null ? axes.xaxis.p2c(pos.x) : axes.x2axis.p2c(pos.x2), plot.width())); - crosshair.y = Math.max(0, Math.min(pos.y != null ? axes.yaxis.p2c(pos.y) : axes.y2axis.p2c(pos.y2), plot.height())); - } - - plot.triggerRedrawOverlay(); - }; - - plot.clearCrosshair = plot.setCrosshair; // passes null for pos - - plot.lockCrosshair = function lockCrosshair(pos) { - if (pos) - plot.setCrosshair(pos); - crosshair.locked = true; - } - - plot.unlockCrosshair = function unlockCrosshair() { - crosshair.locked = false; - } - - plot.hooks.bindEvents.push(function (plot, eventHolder) { - if (!plot.getOptions().crosshair.mode) - return; - - eventHolder.mouseout(function () { - if (crosshair.x != -1) { - crosshair.x = -1; - plot.triggerRedrawOverlay(); - } - }); - - eventHolder.mousemove(function (e) { - if (plot.getSelection && plot.getSelection()) { - crosshair.x = -1; // hide the crosshair while selecting - return; - } - - if (crosshair.locked) - return; - - var offset = plot.offset(); - crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width())); - crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height())); - plot.triggerRedrawOverlay(); - }); - }); - - plot.hooks.drawOverlay.push(function (plot, ctx) { - var c = plot.getOptions().crosshair; - if (!c.mode) - return; - - var plotOffset = plot.getPlotOffset(); - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - if (crosshair.x != -1) { - ctx.strokeStyle = c.color; - ctx.lineWidth = c.lineWidth; - ctx.lineJoin = "round"; - - ctx.beginPath(); - if (c.mode.indexOf("x") != -1) { - ctx.moveTo(crosshair.x, 0); - ctx.lineTo(crosshair.x, plot.height()); - } - if (c.mode.indexOf("y") != -1) { - ctx.moveTo(0, crosshair.y); - ctx.lineTo(plot.width(), crosshair.y); - } - ctx.stroke(); - } - ctx.restore(); - }); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'crosshair', - version: '1.0' - }); -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.crosshair.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.crosshair.min.js deleted file mode 100644 index ce689b19..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.crosshair.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(B){var A={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)",lineWidth:1}};function C(G){var H={x:-1,y:-1,locked:false};G.setCrosshair=function D(J){if(!J){H.x=-1}else{var I=G.getAxes();H.x=Math.max(0,Math.min(J.x!=null?I.xaxis.p2c(J.x):I.x2axis.p2c(J.x2),G.width()));H.y=Math.max(0,Math.min(J.y!=null?I.yaxis.p2c(J.y):I.y2axis.p2c(J.y2),G.height()))}G.triggerRedrawOverlay()};G.clearCrosshair=G.setCrosshair;G.lockCrosshair=function E(I){if(I){G.setCrosshair(I)}H.locked=true};G.unlockCrosshair=function F(){H.locked=false};G.hooks.bindEvents.push(function(J,I){if(!J.getOptions().crosshair.mode){return }I.mouseout(function(){if(H.x!=-1){H.x=-1;J.triggerRedrawOverlay()}});I.mousemove(function(K){if(J.getSelection&&J.getSelection()){H.x=-1;return }if(H.locked){return }var L=J.offset();H.x=Math.max(0,Math.min(K.pageX-L.left,J.width()));H.y=Math.max(0,Math.min(K.pageY-L.top,J.height()));J.triggerRedrawOverlay()})});G.hooks.drawOverlay.push(function(K,I){var L=K.getOptions().crosshair;if(!L.mode){return }var J=K.getPlotOffset();I.save();I.translate(J.left,J.top);if(H.x!=-1){I.strokeStyle=L.color;I.lineWidth=L.lineWidth;I.lineJoin="round";I.beginPath();if(L.mode.indexOf("x")!=-1){I.moveTo(H.x,0);I.lineTo(H.x,K.height())}if(L.mode.indexOf("y")!=-1){I.moveTo(0,H.y);I.lineTo(K.width(),H.y)}I.stroke()}I.restore()})}B.plot.plugins.push({init:C,options:A,name:"crosshair",version:"1.0"})})(jQuery); \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.image.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.image.js deleted file mode 100644 index 90babf62..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.image.js +++ /dev/null @@ -1,237 +0,0 @@ -/* -Flot plugin for plotting images, e.g. useful for putting ticks on a -prerendered complex visualization. - -The data syntax is [[image, x1, y1, x2, y2], ...] where (x1, y1) and -(x2, y2) are where you intend the two opposite corners of the image to -end up in the plot. Image must be a fully loaded Javascript image (you -can make one with new Image()). If the image is not complete, it's -skipped when plotting. - -There are two helpers included for retrieving images. The easiest work -the way that you put in URLs instead of images in the data (like -["myimage.png", 0, 0, 10, 10]), then call $.plot.image.loadData(data, -options, callback) where data and options are the same as you pass in -to $.plot. This loads the images, replaces the URLs in the data with -the corresponding images and calls "callback" when all images are -loaded (or failed loading). In the callback, you can then call $.plot -with the data set. See the included example. - -A more low-level helper, $.plot.image.load(urls, callback) is also -included. Given a list of URLs, it calls callback with an object -mapping from URL to Image object when all images are loaded or have -failed loading. - -Options for the plugin are - - series: { - images: { - show: boolean - anchor: "corner" or "center" - alpha: [0,1] - } - } - -which can be specified for a specific series - - $.plot($("#placeholder"), [{ data: [ ... ], images: { ... } ]) - -Note that because the data format is different from usual data points, -you can't use images with anything else in a specific data series. - -Setting "anchor" to "center" causes the pixels in the image to be -anchored at the corner pixel centers inside of at the pixel corners, -effectively letting half a pixel stick out to each side in the plot. - - -A possible future direction could be support for tiling for large -images (like Google Maps). - -*/ - -(function ($) { - var options = { - series: { - images: { - show: false, - alpha: 1, - anchor: "corner" // or "center" - } - } - }; - - $.plot.image = {}; - - $.plot.image.loadDataImages = function (series, options, callback) { - var urls = [], points = []; - - var defaultShow = options.series.images.show; - - $.each(series, function (i, s) { - if (!(defaultShow || s.images.show)) - return; - - if (s.data) - s = s.data; - - $.each(s, function (i, p) { - if (typeof p[0] == "string") { - urls.push(p[0]); - points.push(p); - } - }); - }); - - $.plot.image.load(urls, function (loadedImages) { - $.each(points, function (i, p) { - var url = p[0]; - if (loadedImages[url]) - p[0] = loadedImages[url]; - }); - - callback(); - }); - } - - $.plot.image.load = function (urls, callback) { - var missing = urls.length, loaded = {}; - if (missing == 0) - callback({}); - - $.each(urls, function (i, url) { - var handler = function () { - --missing; - - loaded[url] = this; - - if (missing == 0) - callback(loaded); - }; - - $('').load(handler).error(handler).attr('src', url); - }); - } - - function draw(plot, ctx) { - var plotOffset = plot.getPlotOffset(); - - $.each(plot.getData(), function (i, series) { - var points = series.datapoints.points, - ps = series.datapoints.pointsize; - - for (var i = 0; i < points.length; i += ps) { - var img = points[i], - x1 = points[i + 1], y1 = points[i + 2], - x2 = points[i + 3], y2 = points[i + 4], - xaxis = series.xaxis, yaxis = series.yaxis, - tmp; - - // actually we should check img.complete, but it - // appears to be a somewhat unreliable indicator in - // IE6 (false even after load event) - if (!img || img.width <= 0 || img.height <= 0) - continue; - - if (x1 > x2) { - tmp = x2; - x2 = x1; - x1 = tmp; - } - if (y1 > y2) { - tmp = y2; - y2 = y1; - y1 = tmp; - } - - // if the anchor is at the center of the pixel, expand the - // image by 1/2 pixel in each direction - if (series.images.anchor == "center") { - tmp = 0.5 * (x2-x1) / (img.width - 1); - x1 -= tmp; - x2 += tmp; - tmp = 0.5 * (y2-y1) / (img.height - 1); - y1 -= tmp; - y2 += tmp; - } - - // clip - if (x1 == x2 || y1 == y2 || - x1 >= xaxis.max || x2 <= xaxis.min || - y1 >= yaxis.max || y2 <= yaxis.min) - continue; - - var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height; - if (x1 < xaxis.min) { - sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1); - x1 = xaxis.min; - } - - if (x2 > xaxis.max) { - sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1); - x2 = xaxis.max; - } - - if (y1 < yaxis.min) { - sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1); - y1 = yaxis.min; - } - - if (y2 > yaxis.max) { - sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1); - y2 = yaxis.max; - } - - x1 = xaxis.p2c(x1); - x2 = xaxis.p2c(x2); - y1 = yaxis.p2c(y1); - y2 = yaxis.p2c(y2); - - // the transformation may have swapped us - if (x1 > x2) { - tmp = x2; - x2 = x1; - x1 = tmp; - } - if (y1 > y2) { - tmp = y2; - y2 = y1; - y1 = tmp; - } - - tmp = ctx.globalAlpha; - ctx.globalAlpha *= series.images.alpha; - ctx.drawImage(img, - sx1, sy1, sx2 - sx1, sy2 - sy1, - x1 + plotOffset.left, y1 + plotOffset.top, - x2 - x1, y2 - y1); - ctx.globalAlpha = tmp; - } - }); - } - - function processRawData(plot, series, data, datapoints) { - if (!series.images.show) - return; - - // format is Image, x1, y1, x2, y2 (opposite corners) - datapoints.format = [ - { required: true }, - { x: true, number: true, required: true }, - { y: true, number: true, required: true }, - { x: true, number: true, required: true }, - { y: true, number: true, required: true } - ]; - } - - function init(plot) { - plot.hooks.processRawData.push(processRawData); - plot.hooks.draw.push(draw); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'image', - version: '1.1' - }); -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.image.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.image.min.js deleted file mode 100644 index eb16cb1a..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.image.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(D){var B={series:{images:{show:false,alpha:1,anchor:"corner"}}};D.plot.image={};D.plot.image.loadDataImages=function(G,F,K){var J=[],H=[];var I=F.series.images.show;D.each(G,function(L,M){if(!(I||M.images.show)){return }if(M.data){M=M.data}D.each(M,function(N,O){if(typeof O[0]=="string"){J.push(O[0]);H.push(O)}})});D.plot.image.load(J,function(L){D.each(H,function(N,O){var M=O[0];if(L[M]){O[0]=L[M]}});K()})};D.plot.image.load=function(H,I){var G=H.length,F={};if(G==0){I({})}D.each(H,function(K,J){var L=function(){--G;F[J]=this;if(G==0){I(F)}};D("").load(L).error(L).attr("src",J)})};function A(H,F){var G=H.getPlotOffset();D.each(H.getData(),function(O,P){var X=P.datapoints.points,I=P.datapoints.pointsize;for(var O=0;OK){N=K;K=M;M=N}if(V>T){N=T;T=V;V=N}if(P.images.anchor=="center"){N=0.5*(K-M)/(Q.width-1);M-=N;K+=N;N=0.5*(T-V)/(Q.height-1);V-=N;T+=N}if(M==K||V==T||M>=W.max||K<=W.min||V>=S.max||T<=S.min){continue}var L=0,U=0,J=Q.width,R=Q.height;if(MW.max){J+=(J-L)*(W.max-K)/(K-M);K=W.max}if(VS.max){U+=(U-R)*(S.max-T)/(T-V);T=S.max}M=W.p2c(M);K=W.p2c(K);V=S.p2c(V);T=S.p2c(T);if(M>K){N=K;K=M;M=N}if(V>T){N=T;T=V;V=N}N=F.globalAlpha;F.globalAlpha*=P.images.alpha;F.drawImage(Q,L,U,J-L,R-U,M+G.left,V+G.top,K-M,T-V);F.globalAlpha=N}})}function C(I,F,G,H){if(!F.images.show){return }H.format=[{required:true},{x:true,number:true,required:true},{y:true,number:true,required:true},{x:true,number:true,required:true},{y:true,number:true,required:true}]}function E(F){F.hooks.processRawData.push(C);F.hooks.draw.push(A)}D.plot.plugins.push({init:E,options:B,name:"image",version:"1.1"})})(jQuery); \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.js deleted file mode 100644 index 6534a468..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.js +++ /dev/null @@ -1,2119 +0,0 @@ -/* Javascript plotting library for jQuery, v. 0.6. - * - * Released under the MIT license by IOLA, December 2007. - * - */ - -// first an inline dependency, jquery.colorhelpers.js, we inline it here -// for convenience - -/* Plugin for jQuery for working with colors. - * - * Version 1.0. - * - * Inspiration from jQuery color animation plugin by John Resig. - * - * Released under the MIT license by Ole Laursen, October 2009. - * - * Examples: - * - * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() - * var c = $.color.extract($("#mydiv"), 'background-color'); - * console.log(c.r, c.g, c.b, c.a); - * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" - * - * Note that .scale() and .add() work in-place instead of returning - * new objects. - */ -(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return JH?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(); - -// the actual Flot code -(function($) { - function Plot(placeholder, data_, options_, plugins) { - // data is on the form: - // [ series1, series2 ... ] - // where series is either just the data as [ [x1, y1], [x2, y2], ... ] - // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... } - - var series = [], - options = { - // the color theme used for graphs - colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"], - legend: { - show: true, - noColumns: 1, // number of colums in legend table - labelFormatter: null, // fn: string -> string - labelBoxBorderColor: "#ccc", // border color for the little label boxes - container: null, // container (as jQuery object) to put legend in, null means default on top of graph - position: "ne", // position of default legend container within plot - margin: 5, // distance from grid edge to default legend container within plot - backgroundColor: null, // null means auto-detect - backgroundOpacity: 0.85 // set to 0 to avoid background - }, - xaxis: { - mode: null, // null or "time" - transform: null, // null or f: number -> number to transform axis - inverseTransform: null, // if transform is set, this should be the inverse function - min: null, // min. value to show, null means set automatically - max: null, // max. value to show, null means set automatically - autoscaleMargin: null, // margin in % to add if auto-setting min/max - ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks - tickFormatter: null, // fn: number -> string - labelWidth: null, // size of tick labels in pixels - labelHeight: null, - - // mode specific options - tickDecimals: null, // no. of decimals, null means auto - tickSize: null, // number or [number, "unit"] - minTickSize: null, // number or [number, "unit"] - monthNames: null, // list of names of months - timeformat: null, // format string to use - twelveHourClock: false // 12 or 24 time in time mode - }, - yaxis: { - autoscaleMargin: 0.02 - }, - x2axis: { - autoscaleMargin: null - }, - y2axis: { - autoscaleMargin: 0.02 - }, - series: { - points: { - show: false, - radius: 3, - lineWidth: 2, // in pixels - fill: true, - fillColor: "#ffffff" - }, - lines: { - // we don't put in show: false so we can see - // whether lines were actively disabled - lineWidth: 2, // in pixels - fill: false, - fillColor: null, - steps: false - }, - bars: { - show: false, - lineWidth: 2, // in pixels - barWidth: 1, // in units of the x axis - fill: true, - fillColor: null, - align: "left", // or "center" - horizontal: false // when horizontal, left is now top - }, - shadowSize: 3 - }, - grid: { - show: true, - aboveData: false, - color: "#545454", // primary color used for outline and labels - backgroundColor: null, // null for transparent, else color - tickColor: "rgba(0,0,0,0.15)", // color used for the ticks - labelMargin: 5, // in pixels - borderWidth: 2, // in pixels - borderColor: null, // set if different from the grid color - markings: null, // array of ranges or fn: axes -> array of ranges - markingsColor: "#f4f4f4", - markingsLineWidth: 2, - // interactive stuff - clickable: false, - hoverable: false, - autoHighlight: true, // highlight in case mouse is near - mouseActiveRadius: 10 // how far the mouse can be away to activate an item - }, - hooks: {} - }, - canvas = null, // the canvas for the plot itself - overlay = null, // canvas for interactive stuff on top of plot - eventHolder = null, // jQuery object that events should be bound to - ctx = null, octx = null, - axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} }, - plotOffset = { left: 0, right: 0, top: 0, bottom: 0}, - canvasWidth = 0, canvasHeight = 0, - plotWidth = 0, plotHeight = 0, - hooks = { - processOptions: [], - processRawData: [], - processDatapoints: [], - draw: [], - bindEvents: [], - drawOverlay: [] - }, - plot = this; - - // public functions - plot.setData = setData; - plot.setupGrid = setupGrid; - plot.draw = draw; - plot.getPlaceholder = function() { return placeholder; }; - plot.getCanvas = function() { return canvas; }; - plot.getPlotOffset = function() { return plotOffset; }; - plot.width = function () { return plotWidth; }; - plot.height = function () { return plotHeight; }; - plot.offset = function () { - var o = eventHolder.offset(); - o.left += plotOffset.left; - o.top += plotOffset.top; - return o; - }; - plot.getData = function() { return series; }; - plot.getAxes = function() { return axes; }; - plot.getOptions = function() { return options; }; - plot.highlight = highlight; - plot.unhighlight = unhighlight; - plot.triggerRedrawOverlay = triggerRedrawOverlay; - plot.pointOffset = function(point) { - return { left: parseInt(axisSpecToRealAxis(point, "xaxis").p2c(+point.x) + plotOffset.left), - top: parseInt(axisSpecToRealAxis(point, "yaxis").p2c(+point.y) + plotOffset.top) }; - }; - - - // public attributes - plot.hooks = hooks; - - // initialize - initPlugins(plot); - parseOptions(options_); - constructCanvas(); - setData(data_); - setupGrid(); - draw(); - bindEvents(); - - - function executeHooks(hook, args) { - args = [plot].concat(args); - for (var i = 0; i < hook.length; ++i) - hook[i].apply(this, args); - } - - function initPlugins() { - for (var i = 0; i < plugins.length; ++i) { - var p = plugins[i]; - p.init(plot); - if (p.options) - $.extend(true, options, p.options); - } - } - - function parseOptions(opts) { - $.extend(true, options, opts); - if (options.grid.borderColor == null) - options.grid.borderColor = options.grid.color; - // backwards compatibility, to be removed in future - if (options.xaxis.noTicks && options.xaxis.ticks == null) - options.xaxis.ticks = options.xaxis.noTicks; - if (options.yaxis.noTicks && options.yaxis.ticks == null) - options.yaxis.ticks = options.yaxis.noTicks; - if (options.grid.coloredAreas) - options.grid.markings = options.grid.coloredAreas; - if (options.grid.coloredAreasColor) - options.grid.markingsColor = options.grid.coloredAreasColor; - if (options.lines) - $.extend(true, options.series.lines, options.lines); - if (options.points) - $.extend(true, options.series.points, options.points); - if (options.bars) - $.extend(true, options.series.bars, options.bars); - if (options.shadowSize) - options.series.shadowSize = options.shadowSize; - - for (var n in hooks) - if (options.hooks[n] && options.hooks[n].length) - hooks[n] = hooks[n].concat(options.hooks[n]); - - executeHooks(hooks.processOptions, [options]); - } - - function setData(d) { - series = parseData(d); - fillInSeriesOptions(); - processData(); - } - - function parseData(d) { - var res = []; - for (var i = 0; i < d.length; ++i) { - var s = $.extend(true, {}, options.series); - - if (d[i].data) { - s.data = d[i].data; // move the data instead of deep-copy - delete d[i].data; - - $.extend(true, s, d[i]); - - d[i].data = s.data; - } - else - s.data = d[i]; - res.push(s); - } - - return res; - } - - function axisSpecToRealAxis(obj, attr) { - var a = obj[attr]; - if (!a || a == 1) - return axes[attr]; - if (typeof a == "number") - return axes[attr.charAt(0) + a + attr.slice(1)]; - return a; // assume it's OK - } - - function fillInSeriesOptions() { - var i; - - // collect what we already got of colors - var neededColors = series.length, - usedColors = [], - assignedColors = []; - for (i = 0; i < series.length; ++i) { - var sc = series[i].color; - if (sc != null) { - --neededColors; - if (typeof sc == "number") - assignedColors.push(sc); - else - usedColors.push($.color.parse(series[i].color)); - } - } - - // we might need to generate more colors if higher indices - // are assigned - for (i = 0; i < assignedColors.length; ++i) { - neededColors = Math.max(neededColors, assignedColors[i] + 1); - } - - // produce colors as needed - var colors = [], variation = 0; - i = 0; - while (colors.length < neededColors) { - var c; - if (options.colors.length == i) // check degenerate case - c = $.color.make(100, 100, 100); - else - c = $.color.parse(options.colors[i]); - - // vary color if needed - var sign = variation % 2 == 1 ? -1 : 1; - c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2) - - // FIXME: if we're getting to close to something else, - // we should probably skip this one - colors.push(c); - - ++i; - if (i >= options.colors.length) { - i = 0; - ++variation; - } - } - - // fill in the options - var colori = 0, s; - for (i = 0; i < series.length; ++i) { - s = series[i]; - - // assign colors - if (s.color == null) { - s.color = colors[colori].toString(); - ++colori; - } - else if (typeof s.color == "number") - s.color = colors[s.color].toString(); - - // turn on lines automatically in case nothing is set - if (s.lines.show == null) { - var v, show = true; - for (v in s) - if (s[v].show) { - show = false; - break; - } - if (show) - s.lines.show = true; - } - - // setup axes - s.xaxis = axisSpecToRealAxis(s, "xaxis"); - s.yaxis = axisSpecToRealAxis(s, "yaxis"); - } - } - - function processData() { - var topSentry = Number.POSITIVE_INFINITY, - bottomSentry = Number.NEGATIVE_INFINITY, - i, j, k, m, length, - s, points, ps, x, y, axis, val, f, p; - - for (axis in axes) { - axes[axis].datamin = topSentry; - axes[axis].datamax = bottomSentry; - axes[axis].used = false; - } - - function updateAxis(axis, min, max) { - if (min < axis.datamin) - axis.datamin = min; - if (max > axis.datamax) - axis.datamax = max; - } - - for (i = 0; i < series.length; ++i) { - s = series[i]; - s.datapoints = { points: [] }; - - executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]); - } - - // first pass: clean and copy data - for (i = 0; i < series.length; ++i) { - s = series[i]; - - var data = s.data, format = s.datapoints.format; - - if (!format) { - format = []; - // find out how to copy - format.push({ x: true, number: true, required: true }); - format.push({ y: true, number: true, required: true }); - - if (s.bars.show) - format.push({ y: true, number: true, required: false, defaultValue: 0 }); - - s.datapoints.format = format; - } - - if (s.datapoints.pointsize != null) - continue; // already filled in - - if (s.datapoints.pointsize == null) - s.datapoints.pointsize = format.length; - - ps = s.datapoints.pointsize; - points = s.datapoints.points; - - insertSteps = s.lines.show && s.lines.steps; - s.xaxis.used = s.yaxis.used = true; - - for (j = k = 0; j < data.length; ++j, k += ps) { - p = data[j]; - - var nullify = p == null; - if (!nullify) { - for (m = 0; m < ps; ++m) { - val = p[m]; - f = format[m]; - - if (f) { - if (f.number && val != null) { - val = +val; // convert to number - if (isNaN(val)) - val = null; - } - - if (val == null) { - if (f.required) - nullify = true; - - if (f.defaultValue != null) - val = f.defaultValue; - } - } - - points[k + m] = val; - } - } - - if (nullify) { - for (m = 0; m < ps; ++m) { - val = points[k + m]; - if (val != null) { - f = format[m]; - // extract min/max info - if (f.x) - updateAxis(s.xaxis, val, val); - if (f.y) - updateAxis(s.yaxis, val, val); - } - points[k + m] = null; - } - } - else { - // a little bit of line specific stuff that - // perhaps shouldn't be here, but lacking - // better means... - if (insertSteps && k > 0 - && points[k - ps] != null - && points[k - ps] != points[k] - && points[k - ps + 1] != points[k + 1]) { - // copy the point to make room for a middle point - for (m = 0; m < ps; ++m) - points[k + ps + m] = points[k + m]; - - // middle point has same y - points[k + 1] = points[k - ps + 1]; - - // we've added a point, better reflect that - k += ps; - } - } - } - } - - // give the hooks a chance to run - for (i = 0; i < series.length; ++i) { - s = series[i]; - - executeHooks(hooks.processDatapoints, [ s, s.datapoints]); - } - - // second pass: find datamax/datamin for auto-scaling - for (i = 0; i < series.length; ++i) { - s = series[i]; - points = s.datapoints.points, - ps = s.datapoints.pointsize; - - var xmin = topSentry, ymin = topSentry, - xmax = bottomSentry, ymax = bottomSentry; - - for (j = 0; j < points.length; j += ps) { - if (points[j] == null) - continue; - - for (m = 0; m < ps; ++m) { - val = points[j + m]; - f = format[m]; - if (!f) - continue; - - if (f.x) { - if (val < xmin) - xmin = val; - if (val > xmax) - xmax = val; - } - if (f.y) { - if (val < ymin) - ymin = val; - if (val > ymax) - ymax = val; - } - } - } - - if (s.bars.show) { - // make sure we got room for the bar on the dancing floor - var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2; - if (s.bars.horizontal) { - ymin += delta; - ymax += delta + s.bars.barWidth; - } - else { - xmin += delta; - xmax += delta + s.bars.barWidth; - } - } - - updateAxis(s.xaxis, xmin, xmax); - updateAxis(s.yaxis, ymin, ymax); - } - - for (axis in axes) { - if (axes[axis].datamin == topSentry) - axes[axis].datamin = null; - if (axes[axis].datamax == bottomSentry) - axes[axis].datamax = null; - } - } - - function constructCanvas() { - function makeCanvas(width, height) { - var c = document.createElement('canvas'); - c.width = width; - c.height = height; - if ($.browser.msie) // excanvas hack - c = window.G_vmlCanvasManager.initElement(c); - return c; - } - - canvasWidth = placeholder.width(); - canvasHeight = placeholder.height(); - placeholder.html(""); // clear placeholder - if (placeholder.css("position") == 'static') - placeholder.css("position", "relative"); // for positioning labels and overlay - - if (canvasWidth <= 0 || canvasHeight <= 0) - throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight; - - if ($.browser.msie) // excanvas hack - window.G_vmlCanvasManager.init_(document); // make sure everything is setup - - // the canvas - canvas = $(makeCanvas(canvasWidth, canvasHeight)).appendTo(placeholder).get(0); - ctx = canvas.getContext("2d"); - - // overlay canvas for interactive features - overlay = $(makeCanvas(canvasWidth, canvasHeight)).css({ position: 'absolute', left: 0, top: 0 }).appendTo(placeholder).get(0); - octx = overlay.getContext("2d"); - octx.stroke(); - } - - function bindEvents() { - // we include the canvas in the event holder too, because IE 7 - // sometimes has trouble with the stacking order - eventHolder = $([overlay, canvas]); - - // bind events - if (options.grid.hoverable) - eventHolder.mousemove(onMouseMove); - - if (options.grid.clickable) - eventHolder.click(onClick); - - executeHooks(hooks.bindEvents, [eventHolder]); - } - - function setupGrid() { - function setTransformationHelpers(axis, o) { - function identity(x) { return x; } - - var s, m, t = o.transform || identity, - it = o.inverseTransform; - - // add transformation helpers - if (axis == axes.xaxis || axis == axes.x2axis) { - // precompute how much the axis is scaling a point - // in canvas space - s = axis.scale = plotWidth / (t(axis.max) - t(axis.min)); - m = t(axis.min); - - // data point to canvas coordinate - if (t == identity) // slight optimization - axis.p2c = function (p) { return (p - m) * s; }; - else - axis.p2c = function (p) { return (t(p) - m) * s; }; - // canvas coordinate to data point - if (!it) - axis.c2p = function (c) { return m + c / s; }; - else - axis.c2p = function (c) { return it(m + c / s); }; - } - else { - s = axis.scale = plotHeight / (t(axis.max) - t(axis.min)); - m = t(axis.max); - - if (t == identity) - axis.p2c = function (p) { return (m - p) * s; }; - else - axis.p2c = function (p) { return (m - t(p)) * s; }; - if (!it) - axis.c2p = function (c) { return m - c / s; }; - else - axis.c2p = function (c) { return it(m - c / s); }; - } - } - - function measureLabels(axis, axisOptions) { - var i, labels = [], l; - - axis.labelWidth = axisOptions.labelWidth; - axis.labelHeight = axisOptions.labelHeight; - - if (axis == axes.xaxis || axis == axes.x2axis) { - // to avoid measuring the widths of the labels, we - // construct fixed-size boxes and put the labels inside - // them, we don't need the exact figures and the - // fixed-size box content is easy to center - if (axis.labelWidth == null) - axis.labelWidth = canvasWidth / (axis.ticks.length > 0 ? axis.ticks.length : 1); - - // measure x label heights - if (axis.labelHeight == null) { - labels = []; - for (i = 0; i < axis.ticks.length; ++i) { - l = axis.ticks[i].label; - if (l) - labels.push('
' + l + '
'); - } - - if (labels.length > 0) { - var dummyDiv = $('
' - + labels.join("") + '
').appendTo(placeholder); - axis.labelHeight = dummyDiv.height(); - dummyDiv.remove(); - } - } - } - else if (axis.labelWidth == null || axis.labelHeight == null) { - // calculate y label dimensions - for (i = 0; i < axis.ticks.length; ++i) { - l = axis.ticks[i].label; - if (l) - labels.push('
' + l + '
'); - } - - if (labels.length > 0) { - var dummyDiv = $('
' - + labels.join("") + '
').appendTo(placeholder); - if (axis.labelWidth == null) - axis.labelWidth = dummyDiv.width(); - if (axis.labelHeight == null) - axis.labelHeight = dummyDiv.find("div").height(); - dummyDiv.remove(); - } - - } - - if (axis.labelWidth == null) - axis.labelWidth = 0; - if (axis.labelHeight == null) - axis.labelHeight = 0; - } - - function setGridSpacing() { - // get the most space needed around the grid for things - // that may stick out - var maxOutset = options.grid.borderWidth; - for (i = 0; i < series.length; ++i) - maxOutset = Math.max(maxOutset, 2 * (series[i].points.radius + series[i].points.lineWidth/2)); - - plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset; - - var margin = options.grid.labelMargin + options.grid.borderWidth; - - if (axes.xaxis.labelHeight > 0) - plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + margin); - if (axes.yaxis.labelWidth > 0) - plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + margin); - if (axes.x2axis.labelHeight > 0) - plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + margin); - if (axes.y2axis.labelWidth > 0) - plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + margin); - - plotWidth = canvasWidth - plotOffset.left - plotOffset.right; - plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top; - } - - var axis; - for (axis in axes) - setRange(axes[axis], options[axis]); - - if (options.grid.show) { - for (axis in axes) { - prepareTickGeneration(axes[axis], options[axis]); - setTicks(axes[axis], options[axis]); - measureLabels(axes[axis], options[axis]); - } - - setGridSpacing(); - } - else { - plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0; - plotWidth = canvasWidth; - plotHeight = canvasHeight; - } - - for (axis in axes) - setTransformationHelpers(axes[axis], options[axis]); - - if (options.grid.show) - insertLabels(); - - insertLegend(); - } - - function setRange(axis, axisOptions) { - var min = +(axisOptions.min != null ? axisOptions.min : axis.datamin), - max = +(axisOptions.max != null ? axisOptions.max : axis.datamax), - delta = max - min; - - if (delta == 0.0) { - // degenerate case - var widen = max == 0 ? 1 : 0.01; - - if (axisOptions.min == null) - min -= widen; - // alway widen max if we couldn't widen min to ensure we - // don't fall into min == max which doesn't work - if (axisOptions.max == null || axisOptions.min != null) - max += widen; - } - else { - // consider autoscaling - var margin = axisOptions.autoscaleMargin; - if (margin != null) { - if (axisOptions.min == null) { - min -= delta * margin; - // make sure we don't go below zero if all values - // are positive - if (min < 0 && axis.datamin != null && axis.datamin >= 0) - min = 0; - } - if (axisOptions.max == null) { - max += delta * margin; - if (max > 0 && axis.datamax != null && axis.datamax <= 0) - max = 0; - } - } - } - axis.min = min; - axis.max = max; - } - - function prepareTickGeneration(axis, axisOptions) { - // estimate number of ticks - var noTicks; - if (typeof axisOptions.ticks == "number" && axisOptions.ticks > 0) - noTicks = axisOptions.ticks; - else if (axis == axes.xaxis || axis == axes.x2axis) - // heuristic based on the model a*sqrt(x) fitted to - // some reasonable data points - noTicks = 0.3 * Math.sqrt(canvasWidth); - else - noTicks = 0.3 * Math.sqrt(canvasHeight); - - var delta = (axis.max - axis.min) / noTicks, - size, generator, unit, formatter, i, magn, norm; - - if (axisOptions.mode == "time") { - // pretty handling of time - - // map of app. size of time units in milliseconds - var timeUnitSize = { - "second": 1000, - "minute": 60 * 1000, - "hour": 60 * 60 * 1000, - "day": 24 * 60 * 60 * 1000, - "month": 30 * 24 * 60 * 60 * 1000, - "year": 365.2425 * 24 * 60 * 60 * 1000 - }; - - - // the allowed tick sizes, after 1 year we use - // an integer algorithm - var spec = [ - [1, "second"], [2, "second"], [5, "second"], [10, "second"], - [30, "second"], - [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], - [30, "minute"], - [1, "hour"], [2, "hour"], [4, "hour"], - [8, "hour"], [12, "hour"], - [1, "day"], [2, "day"], [3, "day"], - [0.25, "month"], [0.5, "month"], [1, "month"], - [2, "month"], [3, "month"], [6, "month"], - [1, "year"] - ]; - - var minSize = 0; - if (axisOptions.minTickSize != null) { - if (typeof axisOptions.tickSize == "number") - minSize = axisOptions.tickSize; - else - minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]]; - } - - for (i = 0; i < spec.length - 1; ++i) - if (delta < (spec[i][0] * timeUnitSize[spec[i][1]] - + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 - && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) - break; - size = spec[i][0]; - unit = spec[i][1]; - - // special-case the possibility of several years - if (unit == "year") { - magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10)); - norm = (delta / timeUnitSize.year) / magn; - if (norm < 1.5) - size = 1; - else if (norm < 3) - size = 2; - else if (norm < 7.5) - size = 5; - else - size = 10; - - size *= magn; - } - - if (axisOptions.tickSize) { - size = axisOptions.tickSize[0]; - unit = axisOptions.tickSize[1]; - } - - generator = function(axis) { - var ticks = [], - tickSize = axis.tickSize[0], unit = axis.tickSize[1], - d = new Date(axis.min); - - var step = tickSize * timeUnitSize[unit]; - - if (unit == "second") - d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize)); - if (unit == "minute") - d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize)); - if (unit == "hour") - d.setUTCHours(floorInBase(d.getUTCHours(), tickSize)); - if (unit == "month") - d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize)); - if (unit == "year") - d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize)); - - // reset smaller components - d.setUTCMilliseconds(0); - if (step >= timeUnitSize.minute) - d.setUTCSeconds(0); - if (step >= timeUnitSize.hour) - d.setUTCMinutes(0); - if (step >= timeUnitSize.day) - d.setUTCHours(0); - if (step >= timeUnitSize.day * 4) - d.setUTCDate(1); - if (step >= timeUnitSize.year) - d.setUTCMonth(0); - - - var carry = 0, v = Number.NaN, prev; - do { - prev = v; - v = d.getTime(); - ticks.push({ v: v, label: axis.tickFormatter(v, axis) }); - if (unit == "month") { - if (tickSize < 1) { - // a bit complicated - we'll divide the month - // up but we need to take care of fractions - // so we don't end up in the middle of a day - d.setUTCDate(1); - var start = d.getTime(); - d.setUTCMonth(d.getUTCMonth() + 1); - var end = d.getTime(); - d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize); - carry = d.getUTCHours(); - d.setUTCHours(0); - } - else - d.setUTCMonth(d.getUTCMonth() + tickSize); - } - else if (unit == "year") { - d.setUTCFullYear(d.getUTCFullYear() + tickSize); - } - else - d.setTime(v + step); - } while (v < axis.max && v != prev); - - return ticks; - }; - - formatter = function (v, axis) { - var d = new Date(v); - - // first check global format - if (axisOptions.timeformat != null) - return $.plot.formatDate(d, axisOptions.timeformat, axisOptions.monthNames); - - var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]]; - var span = axis.max - axis.min; - var suffix = (axisOptions.twelveHourClock) ? " %p" : ""; - - if (t < timeUnitSize.minute) - fmt = "%h:%M:%S" + suffix; - else if (t < timeUnitSize.day) { - if (span < 2 * timeUnitSize.day) - fmt = "%h:%M" + suffix; - else - fmt = "%b %d %h:%M" + suffix; - } - else if (t < timeUnitSize.month) - fmt = "%b %d"; - else if (t < timeUnitSize.year) { - if (span < timeUnitSize.year) - fmt = "%b"; - else - fmt = "%b %y"; - } - else - fmt = "%y"; - - return $.plot.formatDate(d, fmt, axisOptions.monthNames); - }; - } - else { - // pretty rounding of base-10 numbers - var maxDec = axisOptions.tickDecimals; - var dec = -Math.floor(Math.log(delta) / Math.LN10); - if (maxDec != null && dec > maxDec) - dec = maxDec; - - magn = Math.pow(10, -dec); - norm = delta / magn; // norm is between 1.0 and 10.0 - - if (norm < 1.5) - size = 1; - else if (norm < 3) { - size = 2; - // special case for 2.5, requires an extra decimal - if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) { - size = 2.5; - ++dec; - } - } - else if (norm < 7.5) - size = 5; - else - size = 10; - - size *= magn; - - if (axisOptions.minTickSize != null && size < axisOptions.minTickSize) - size = axisOptions.minTickSize; - - if (axisOptions.tickSize != null) - size = axisOptions.tickSize; - - axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec); - - generator = function (axis) { - var ticks = []; - - // spew out all possible ticks - var start = floorInBase(axis.min, axis.tickSize), - i = 0, v = Number.NaN, prev; - do { - prev = v; - v = start + i * axis.tickSize; - ticks.push({ v: v, label: axis.tickFormatter(v, axis) }); - ++i; - } while (v < axis.max && v != prev); - return ticks; - }; - - formatter = function (v, axis) { - return v.toFixed(axis.tickDecimals); - }; - } - - axis.tickSize = unit ? [size, unit] : size; - axis.tickGenerator = generator; - if ($.isFunction(axisOptions.tickFormatter)) - axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); }; - else - axis.tickFormatter = formatter; - } - - function setTicks(axis, axisOptions) { - axis.ticks = []; - - if (!axis.used) - return; - - if (axisOptions.ticks == null) - axis.ticks = axis.tickGenerator(axis); - else if (typeof axisOptions.ticks == "number") { - if (axisOptions.ticks > 0) - axis.ticks = axis.tickGenerator(axis); - } - else if (axisOptions.ticks) { - var ticks = axisOptions.ticks; - - if ($.isFunction(ticks)) - // generate the ticks - ticks = ticks({ min: axis.min, max: axis.max }); - - // clean up the user-supplied ticks, copy them over - var i, v; - for (i = 0; i < ticks.length; ++i) { - var label = null; - var t = ticks[i]; - if (typeof t == "object") { - v = t[0]; - if (t.length > 1) - label = t[1]; - } - else - v = t; - if (label == null) - label = axis.tickFormatter(v, axis); - axis.ticks[i] = { v: v, label: label }; - } - } - - if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) { - // snap to ticks - if (axisOptions.min == null) - axis.min = Math.min(axis.min, axis.ticks[0].v); - if (axisOptions.max == null && axis.ticks.length > 1) - axis.max = Math.max(axis.max, axis.ticks[axis.ticks.length - 1].v); - } - } - - function draw() { - ctx.clearRect(0, 0, canvasWidth, canvasHeight); - - var grid = options.grid; - - if (grid.show && !grid.aboveData) - drawGrid(); - - for (var i = 0; i < series.length; ++i) - drawSeries(series[i]); - - executeHooks(hooks.draw, [ctx]); - - if (grid.show && grid.aboveData) - drawGrid(); - } - - function extractRange(ranges, coord) { - var firstAxis = coord + "axis", - secondaryAxis = coord + "2axis", - axis, from, to, reverse; - - if (ranges[firstAxis]) { - axis = axes[firstAxis]; - from = ranges[firstAxis].from; - to = ranges[firstAxis].to; - } - else if (ranges[secondaryAxis]) { - axis = axes[secondaryAxis]; - from = ranges[secondaryAxis].from; - to = ranges[secondaryAxis].to; - } - else { - // backwards-compat stuff - to be removed in future - axis = axes[firstAxis]; - from = ranges[coord + "1"]; - to = ranges[coord + "2"]; - } - - // auto-reverse as an added bonus - if (from != null && to != null && from > to) - return { from: to, to: from, axis: axis }; - - return { from: from, to: to, axis: axis }; - } - - function drawGrid() { - var i; - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - // draw background, if any - if (options.grid.backgroundColor) { - ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)"); - ctx.fillRect(0, 0, plotWidth, plotHeight); - } - - // draw markings - var markings = options.grid.markings; - if (markings) { - if ($.isFunction(markings)) - // xmin etc. are backwards-compatible, to be removed in future - markings = markings({ xmin: axes.xaxis.min, xmax: axes.xaxis.max, ymin: axes.yaxis.min, ymax: axes.yaxis.max, xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis }); - - for (i = 0; i < markings.length; ++i) { - var m = markings[i], - xrange = extractRange(m, "x"), - yrange = extractRange(m, "y"); - - // fill in missing - if (xrange.from == null) - xrange.from = xrange.axis.min; - if (xrange.to == null) - xrange.to = xrange.axis.max; - if (yrange.from == null) - yrange.from = yrange.axis.min; - if (yrange.to == null) - yrange.to = yrange.axis.max; - - // clip - if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max || - yrange.to < yrange.axis.min || yrange.from > yrange.axis.max) - continue; - - xrange.from = Math.max(xrange.from, xrange.axis.min); - xrange.to = Math.min(xrange.to, xrange.axis.max); - yrange.from = Math.max(yrange.from, yrange.axis.min); - yrange.to = Math.min(yrange.to, yrange.axis.max); - - if (xrange.from == xrange.to && yrange.from == yrange.to) - continue; - - // then draw - xrange.from = xrange.axis.p2c(xrange.from); - xrange.to = xrange.axis.p2c(xrange.to); - yrange.from = yrange.axis.p2c(yrange.from); - yrange.to = yrange.axis.p2c(yrange.to); - - if (xrange.from == xrange.to || yrange.from == yrange.to) { - // draw line - ctx.beginPath(); - ctx.strokeStyle = m.color || options.grid.markingsColor; - ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth; - //ctx.moveTo(Math.floor(xrange.from), yrange.from); - //ctx.lineTo(Math.floor(xrange.to), yrange.to); - ctx.moveTo(xrange.from, yrange.from); - ctx.lineTo(xrange.to, yrange.to); - ctx.stroke(); - } - else { - // fill area - ctx.fillStyle = m.color || options.grid.markingsColor; - ctx.fillRect(xrange.from, yrange.to, - xrange.to - xrange.from, - yrange.from - yrange.to); - } - } - } - - // draw the inner grid - ctx.lineWidth = 1; - ctx.strokeStyle = options.grid.tickColor; - ctx.beginPath(); - var v, axis = axes.xaxis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axes.xaxis.max) - continue; // skip those lying on the axes - - ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0); - ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight); - } - - axis = axes.yaxis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axis.max) - continue; - - ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - } - - axis = axes.x2axis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axis.max) - continue; - - ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5); - ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5); - } - - axis = axes.y2axis; - for (i = 0; i < axis.ticks.length; ++i) { - v = axis.ticks[i].v; - if (v <= axis.min || v >= axis.max) - continue; - - ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2); - } - - ctx.stroke(); - - if (options.grid.borderWidth) { - // draw border - var bw = options.grid.borderWidth; - ctx.lineWidth = bw; - ctx.strokeStyle = options.grid.borderColor; - ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw); - } - - ctx.restore(); - } - - function insertLabels() { - placeholder.find(".tickLabels").remove(); - - var html = ['
']; - - function addLabels(axis, labelGenerator) { - for (var i = 0; i < axis.ticks.length; ++i) { - var tick = axis.ticks[i]; - if (!tick.label || tick.v < axis.min || tick.v > axis.max) - continue; - html.push(labelGenerator(tick, axis)); - } - } - - var margin = options.grid.labelMargin + options.grid.borderWidth; - - addLabels(axes.xaxis, function (tick, axis) { - return '
' + tick.label + "
"; - }); - - - addLabels(axes.yaxis, function (tick, axis) { - return '
' + tick.label + "
"; - }); - - addLabels(axes.x2axis, function (tick, axis) { - return '
' + tick.label + "
"; - }); - - addLabels(axes.y2axis, function (tick, axis) { - return '
' + tick.label + "
"; - }); - - html.push('
'); - - placeholder.append(html.join("")); - } - - function drawSeries(series) { - if (series.lines.show) - drawSeriesLines(series); - if (series.bars.show) - drawSeriesBars(series); - if (series.points.show) - drawSeriesPoints(series); - } - - function drawSeriesLines(series) { - function plotLine(datapoints, xoffset, yoffset, axisx, axisy) { - var points = datapoints.points, - ps = datapoints.pointsize, - prevx = null, prevy = null; - - ctx.beginPath(); - for (var i = ps; i < points.length; i += ps) { - var x1 = points[i - ps], y1 = points[i - ps + 1], - x2 = points[i], y2 = points[i + 1]; - - if (x1 == null || x2 == null) - continue; - - // clip with ymin - if (y1 <= y2 && y1 < axisy.min) { - if (y2 < axisy.min) - continue; // line segment is outside - // compute new intersection point - x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.min; - } - else if (y2 <= y1 && y2 < axisy.min) { - if (y1 < axisy.min) - continue; - x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.min; - } - - // clip with ymax - if (y1 >= y2 && y1 > axisy.max) { - if (y2 > axisy.max) - continue; - x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.max; - } - else if (y2 >= y1 && y2 > axisy.max) { - if (y1 > axisy.max) - continue; - x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.max; - } - - // clip with xmin - if (x1 <= x2 && x1 < axisx.min) { - if (x2 < axisx.min) - continue; - y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.min; - } - else if (x2 <= x1 && x2 < axisx.min) { - if (x1 < axisx.min) - continue; - y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.min; - } - - // clip with xmax - if (x1 >= x2 && x1 > axisx.max) { - if (x2 > axisx.max) - continue; - y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.max; - } - else if (x2 >= x1 && x2 > axisx.max) { - if (x1 > axisx.max) - continue; - y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.max; - } - - if (x1 != prevx || y1 != prevy) - ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset); - - prevx = x2; - prevy = y2; - ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset); - } - ctx.stroke(); - } - - function plotLineArea(datapoints, axisx, axisy) { - var points = datapoints.points, - ps = datapoints.pointsize, - bottom = Math.min(Math.max(0, axisy.min), axisy.max), - top, lastX = 0, areaOpen = false; - - for (var i = ps; i < points.length; i += ps) { - var x1 = points[i - ps], y1 = points[i - ps + 1], - x2 = points[i], y2 = points[i + 1]; - - if (areaOpen && x1 != null && x2 == null) { - // close area - ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom)); - ctx.fill(); - areaOpen = false; - continue; - } - - if (x1 == null || x2 == null) - continue; - - // clip x values - - // clip with xmin - if (x1 <= x2 && x1 < axisx.min) { - if (x2 < axisx.min) - continue; - y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.min; - } - else if (x2 <= x1 && x2 < axisx.min) { - if (x1 < axisx.min) - continue; - y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.min; - } - - // clip with xmax - if (x1 >= x2 && x1 > axisx.max) { - if (x2 > axisx.max) - continue; - y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x1 = axisx.max; - } - else if (x2 >= x1 && x2 > axisx.max) { - if (x1 > axisx.max) - continue; - y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; - x2 = axisx.max; - } - - if (!areaOpen) { - // open area - ctx.beginPath(); - ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom)); - areaOpen = true; - } - - // now first check the case where both is outside - if (y1 >= axisy.max && y2 >= axisy.max) { - ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max)); - ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max)); - lastX = x2; - continue; - } - else if (y1 <= axisy.min && y2 <= axisy.min) { - ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min)); - ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min)); - lastX = x2; - continue; - } - - // else it's a bit more complicated, there might - // be two rectangles and two triangles we need to fill - // in; to find these keep track of the current x values - var x1old = x1, x2old = x2; - - // and clip the y values, without shortcutting - - // clip with ymin - if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) { - x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.min; - } - else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) { - x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.min; - } - - // clip with ymax - if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) { - x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y1 = axisy.max; - } - else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) { - x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; - y2 = axisy.max; - } - - - // if the x value was changed we got a rectangle - // to fill - if (x1 != x1old) { - if (y1 <= axisy.min) - top = axisy.min; - else - top = axisy.max; - - ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top)); - ctx.lineTo(axisx.p2c(x1), axisy.p2c(top)); - } - - // fill the triangles - ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1)); - ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2)); - - // fill the other rectangle if it's there - if (x2 != x2old) { - if (y2 <= axisy.min) - top = axisy.min; - else - top = axisy.max; - - ctx.lineTo(axisx.p2c(x2), axisy.p2c(top)); - ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top)); - } - - lastX = Math.max(x2, x2old); - } - - if (areaOpen) { - ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom)); - ctx.fill(); - } - } - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - ctx.lineJoin = "round"; - - var lw = series.lines.lineWidth, - sw = series.shadowSize; - // FIXME: consider another form of shadow when filling is turned on - if (lw > 0 && sw > 0) { - // draw shadow as a thick and thin line with transparency - ctx.lineWidth = sw; - ctx.strokeStyle = "rgba(0,0,0,0.1)"; - // position shadow at angle from the mid of line - var angle = Math.PI/18; - plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis); - ctx.lineWidth = sw/2; - plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis); - } - - ctx.lineWidth = lw; - ctx.strokeStyle = series.color; - var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight); - if (fillStyle) { - ctx.fillStyle = fillStyle; - plotLineArea(series.datapoints, series.xaxis, series.yaxis); - } - - if (lw > 0) - plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis); - ctx.restore(); - } - - function drawSeriesPoints(series) { - function plotPoints(datapoints, radius, fillStyle, offset, circumference, axisx, axisy) { - var points = datapoints.points, ps = datapoints.pointsize; - - for (var i = 0; i < points.length; i += ps) { - var x = points[i], y = points[i + 1]; - if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) - continue; - - ctx.beginPath(); - ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, circumference, false); - if (fillStyle) { - ctx.fillStyle = fillStyle; - ctx.fill(); - } - ctx.stroke(); - } - } - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - var lw = series.lines.lineWidth, - sw = series.shadowSize, - radius = series.points.radius; - if (lw > 0 && sw > 0) { - // draw shadow in two steps - var w = sw / 2; - ctx.lineWidth = w; - ctx.strokeStyle = "rgba(0,0,0,0.1)"; - plotPoints(series.datapoints, radius, null, w + w/2, Math.PI, - series.xaxis, series.yaxis); - - ctx.strokeStyle = "rgba(0,0,0,0.2)"; - plotPoints(series.datapoints, radius, null, w/2, Math.PI, - series.xaxis, series.yaxis); - } - - ctx.lineWidth = lw; - ctx.strokeStyle = series.color; - plotPoints(series.datapoints, radius, - getFillStyle(series.points, series.color), 0, 2 * Math.PI, - series.xaxis, series.yaxis); - ctx.restore(); - } - - function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal) { - var left, right, bottom, top, - drawLeft, drawRight, drawTop, drawBottom, - tmp; - - if (horizontal) { - drawBottom = drawRight = drawTop = true; - drawLeft = false; - left = b; - right = x; - top = y + barLeft; - bottom = y + barRight; - - // account for negative bars - if (right < left) { - tmp = right; - right = left; - left = tmp; - drawLeft = true; - drawRight = false; - } - } - else { - drawLeft = drawRight = drawTop = true; - drawBottom = false; - left = x + barLeft; - right = x + barRight; - bottom = b; - top = y; - - // account for negative bars - if (top < bottom) { - tmp = top; - top = bottom; - bottom = tmp; - drawBottom = true; - drawTop = false; - } - } - - // clip - if (right < axisx.min || left > axisx.max || - top < axisy.min || bottom > axisy.max) - return; - - if (left < axisx.min) { - left = axisx.min; - drawLeft = false; - } - - if (right > axisx.max) { - right = axisx.max; - drawRight = false; - } - - if (bottom < axisy.min) { - bottom = axisy.min; - drawBottom = false; - } - - if (top > axisy.max) { - top = axisy.max; - drawTop = false; - } - - left = axisx.p2c(left); - bottom = axisy.p2c(bottom); - right = axisx.p2c(right); - top = axisy.p2c(top); - - // fill the bar - if (fillStyleCallback) { - c.beginPath(); - c.moveTo(left, bottom); - c.lineTo(left, top); - c.lineTo(right, top); - c.lineTo(right, bottom); - c.fillStyle = fillStyleCallback(bottom, top); - c.fill(); - } - - // draw outline - if (drawLeft || drawRight || drawTop || drawBottom) { - c.beginPath(); - - // FIXME: inline moveTo is buggy with excanvas - c.moveTo(left, bottom + offset); - if (drawLeft) - c.lineTo(left, top + offset); - else - c.moveTo(left, top + offset); - if (drawTop) - c.lineTo(right, top + offset); - else - c.moveTo(right, top + offset); - if (drawRight) - c.lineTo(right, bottom + offset); - else - c.moveTo(right, bottom + offset); - if (drawBottom) - c.lineTo(left, bottom + offset); - else - c.moveTo(left, bottom + offset); - c.stroke(); - } - } - - function drawSeriesBars(series) { - function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) { - var points = datapoints.points, ps = datapoints.pointsize; - - for (var i = 0; i < points.length; i += ps) { - if (points[i] == null) - continue; - drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal); - } - } - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - // FIXME: figure out a way to add shadows (for instance along the right edge) - ctx.lineWidth = series.bars.lineWidth; - ctx.strokeStyle = series.color; - var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; - var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null; - plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis); - ctx.restore(); - } - - function getFillStyle(filloptions, seriesColor, bottom, top) { - var fill = filloptions.fill; - if (!fill) - return null; - - if (filloptions.fillColor) - return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor); - - var c = $.color.parse(seriesColor); - c.a = typeof fill == "number" ? fill : 0.4; - c.normalize(); - return c.toString(); - } - - function insertLegend() { - placeholder.find(".legend").remove(); - - if (!options.legend.show) - return; - - var fragments = [], rowStarted = false, - lf = options.legend.labelFormatter, s, label; - for (i = 0; i < series.length; ++i) { - s = series[i]; - label = s.label; - if (!label) - continue; - - if (i % options.legend.noColumns == 0) { - if (rowStarted) - fragments.push(''); - fragments.push(''); - rowStarted = true; - } - - if (lf) - label = lf(label, s); - - fragments.push( - '
' + - '' + label + ''); - } - if (rowStarted) - fragments.push(''); - - if (fragments.length == 0) - return; - - var table = '' + fragments.join("") + '
'; - if (options.legend.container != null) - $(options.legend.container).html(table); - else { - var pos = "", - p = options.legend.position, - m = options.legend.margin; - if (m[0] == null) - m = [m, m]; - if (p.charAt(0) == "n") - pos += 'top:' + (m[1] + plotOffset.top) + 'px;'; - else if (p.charAt(0) == "s") - pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;'; - if (p.charAt(1) == "e") - pos += 'right:' + (m[0] + plotOffset.right) + 'px;'; - else if (p.charAt(1) == "w") - pos += 'left:' + (m[0] + plotOffset.left) + 'px;'; - var legend = $('
' + table.replace('style="', 'style="position:absolute;' + pos +';') + '
').appendTo(placeholder); - if (options.legend.backgroundOpacity != 0.0) { - // put in the transparent background - // separately to avoid blended labels and - // label boxes - var c = options.legend.backgroundColor; - if (c == null) { - c = options.grid.backgroundColor; - if (c && typeof c == "string") - c = $.color.parse(c); - else - c = $.color.extract(legend, 'background-color'); - c.a = 1; - c = c.toString(); - } - var div = legend.children(); - $('
').prependTo(legend).css('opacity', options.legend.backgroundOpacity); - } - } - } - - - // interactive features - - var highlights = [], - redrawTimeout = null; - - // returns the data item the mouse is over, or null if none is found - function findNearbyItem(mouseX, mouseY, seriesFilter) { - var maxDistance = options.grid.mouseActiveRadius, - smallestDistance = maxDistance * maxDistance + 1, - item = null, foundPoint = false, i, j; - - for (i = 0; i < series.length; ++i) { - if (!seriesFilter(series[i])) - continue; - - var s = series[i], - axisx = s.xaxis, - axisy = s.yaxis, - points = s.datapoints.points, - ps = s.datapoints.pointsize, - mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster - my = axisy.c2p(mouseY), - maxx = maxDistance / axisx.scale, - maxy = maxDistance / axisy.scale; - - if (s.lines.show || s.points.show) { - for (j = 0; j < points.length; j += ps) { - var x = points[j], y = points[j + 1]; - if (x == null) - continue; - - // For points and lines, the cursor must be within a - // certain distance to the data point - if (x - mx > maxx || x - mx < -maxx || - y - my > maxy || y - my < -maxy) - continue; - - // We have to calculate distances in pixels, not in - // data units, because the scales of the axes may be different - var dx = Math.abs(axisx.p2c(x) - mouseX), - dy = Math.abs(axisy.p2c(y) - mouseY), - dist = dx * dx + dy * dy; // we save the sqrt - - // use <= to ensure last point takes precedence - // (last generally means on top of) - if (dist <= smallestDistance) { - smallestDistance = dist; - item = [i, j / ps]; - } - } - } - - if (s.bars.show && !item) { // no other point can be nearby - var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2, - barRight = barLeft + s.bars.barWidth; - - for (j = 0; j < points.length; j += ps) { - var x = points[j], y = points[j + 1], b = points[j + 2]; - if (x == null) - continue; - - // for a bar graph, the cursor must be inside the bar - if (series[i].bars.horizontal ? - (mx <= Math.max(b, x) && mx >= Math.min(b, x) && - my >= y + barLeft && my <= y + barRight) : - (mx >= x + barLeft && mx <= x + barRight && - my >= Math.min(b, y) && my <= Math.max(b, y))) - item = [i, j / ps]; - } - } - } - - if (item) { - i = item[0]; - j = item[1]; - ps = series[i].datapoints.pointsize; - - return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps), - dataIndex: j, - series: series[i], - seriesIndex: i }; - } - - return null; - } - - function onMouseMove(e) { - if (options.grid.hoverable) - triggerClickHoverEvent("plothover", e, - function (s) { return s["hoverable"] != false; }); - } - - function onClick(e) { - triggerClickHoverEvent("plotclick", e, - function (s) { return s["clickable"] != false; }); - } - - // trigger click or hover event (they send the same parameters - // so we share their code) - function triggerClickHoverEvent(eventname, event, seriesFilter) { - var offset = eventHolder.offset(), - pos = { pageX: event.pageX, pageY: event.pageY }, - canvasX = event.pageX - offset.left - plotOffset.left, - canvasY = event.pageY - offset.top - plotOffset.top; - - if (axes.xaxis.used) - pos.x = axes.xaxis.c2p(canvasX); - if (axes.yaxis.used) - pos.y = axes.yaxis.c2p(canvasY); - if (axes.x2axis.used) - pos.x2 = axes.x2axis.c2p(canvasX); - if (axes.y2axis.used) - pos.y2 = axes.y2axis.c2p(canvasY); - - var item = findNearbyItem(canvasX, canvasY, seriesFilter); - - if (item) { - // fill in mouse pos for any listeners out there - item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left); - item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top); - } - - if (options.grid.autoHighlight) { - // clear auto-highlights - for (var i = 0; i < highlights.length; ++i) { - var h = highlights[i]; - if (h.auto == eventname && - !(item && h.series == item.series && h.point == item.datapoint)) - unhighlight(h.series, h.point); - } - - if (item) - highlight(item.series, item.datapoint, eventname); - } - - placeholder.trigger(eventname, [ pos, item ]); - } - - function triggerRedrawOverlay() { - if (!redrawTimeout) - redrawTimeout = setTimeout(drawOverlay, 30); - } - - function drawOverlay() { - redrawTimeout = null; - - // draw highlights - octx.save(); - octx.clearRect(0, 0, canvasWidth, canvasHeight); - octx.translate(plotOffset.left, plotOffset.top); - - var i, hi; - for (i = 0; i < highlights.length; ++i) { - hi = highlights[i]; - - if (hi.series.bars.show) - drawBarHighlight(hi.series, hi.point); - else - drawPointHighlight(hi.series, hi.point); - } - octx.restore(); - - executeHooks(hooks.drawOverlay, [octx]); - } - - function highlight(s, point, auto) { - if (typeof s == "number") - s = series[s]; - - if (typeof point == "number") - point = s.data[point]; - - var i = indexOfHighlight(s, point); - if (i == -1) { - highlights.push({ series: s, point: point, auto: auto }); - - triggerRedrawOverlay(); - } - else if (!auto) - highlights[i].auto = false; - } - - function unhighlight(s, point) { - if (s == null && point == null) { - highlights = []; - triggerRedrawOverlay(); - } - - if (typeof s == "number") - s = series[s]; - - if (typeof point == "number") - point = s.data[point]; - - var i = indexOfHighlight(s, point); - if (i != -1) { - highlights.splice(i, 1); - - triggerRedrawOverlay(); - } - } - - function indexOfHighlight(s, p) { - for (var i = 0; i < highlights.length; ++i) { - var h = highlights[i]; - if (h.series == s && h.point[0] == p[0] - && h.point[1] == p[1]) - return i; - } - return -1; - } - - function drawPointHighlight(series, point) { - var x = point[0], y = point[1], - axisx = series.xaxis, axisy = series.yaxis; - - if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) - return; - - var pointRadius = series.points.radius + series.points.lineWidth / 2; - octx.lineWidth = pointRadius; - octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString(); - var radius = 1.5 * pointRadius; - octx.beginPath(); - octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, false); - octx.stroke(); - } - - function drawBarHighlight(series, point) { - octx.lineWidth = series.bars.lineWidth; - octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString(); - var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString(); - var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; - drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth, - 0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal); - } - - function getColorOrGradient(spec, bottom, top, defaultColor) { - if (typeof spec == "string") - return spec; - else { - // assume this is a gradient spec; IE currently only - // supports a simple vertical gradient properly, so that's - // what we support too - var gradient = ctx.createLinearGradient(0, top, 0, bottom); - - for (var i = 0, l = spec.colors.length; i < l; ++i) { - var c = spec.colors[i]; - if (typeof c != "string") { - c = $.color.parse(defaultColor).scale('rgb', c.brightness); - c.a *= c.opacity; - c = c.toString(); - } - gradient.addColorStop(i / (l - 1), c); - } - - return gradient; - } - } - } - - $.plot = function(placeholder, data, options) { - var plot = new Plot($(placeholder), data, options, $.plot.plugins); - /*var t0 = new Date(); - var t1 = new Date(); - var tstr = "time used (msecs): " + (t1.getTime() - t0.getTime()) - if (window.console) - console.log(tstr); - else - alert(tstr);*/ - return plot; - }; - - $.plot.plugins = []; - - // returns a string with the date d formatted according to fmt - $.plot.formatDate = function(d, fmt, monthNames) { - var leftPad = function(n) { - n = "" + n; - return n.length == 1 ? "0" + n : n; - }; - - var r = []; - var escape = false; - var hours = d.getUTCHours(); - var isAM = hours < 12; - if (monthNames == null) - monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - - if (fmt.search(/%p|%P/) != -1) { - if (hours > 12) { - hours = hours - 12; - } else if (hours == 0) { - hours = 12; - } - } - for (var i = 0; i < fmt.length; ++i) { - var c = fmt.charAt(i); - - if (escape) { - switch (c) { - case 'h': c = "" + hours; break; - case 'H': c = leftPad(hours); break; - case 'M': c = leftPad(d.getUTCMinutes()); break; - case 'S': c = leftPad(d.getUTCSeconds()); break; - case 'd': c = "" + d.getUTCDate(); break; - case 'm': c = "" + (d.getUTCMonth() + 1); break; - case 'y': c = "" + d.getUTCFullYear(); break; - case 'b': c = "" + monthNames[d.getUTCMonth()]; break; - case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break; - case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break; - } - r.push(c); - escape = false; - } - else { - if (c == "%") - escape = true; - else - r.push(c); - } - } - return r.join(""); - }; - - // round to nearby lower multiple of base - function floorInBase(n, base) { - return base * Math.floor(n / base); - } - -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.min.js deleted file mode 100644 index 31f465b8..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){jQuery.color={};jQuery.color.make=function(G,H,J,I){var A={};A.r=G||0;A.g=H||0;A.b=J||0;A.a=I!=null?I:1;A.add=function(C,D){for(var E=0;E=1){return"rgb("+[A.r,A.g,A.b].join(",")+")"}else{return"rgba("+[A.r,A.g,A.b,A.a].join(",")+")"}};A.normalize=function(){function C(E,D,F){return DF?F:D)}A.r=C(0,parseInt(A.r),255);A.g=C(0,parseInt(A.g),255);A.b=C(0,parseInt(A.b),255);A.a=C(0,A.a,1);return A};A.clone=function(){return jQuery.color.make(A.r,A.b,A.g,A.a)};return A.normalize()};jQuery.color.extract=function(E,F){var A;do{A=E.css(F).toLowerCase();if(A!=""&&A!="transparent"){break}E=E.parent()}while(!jQuery.nodeName(E.get(0),"body"));if(A=="rgba(0, 0, 0, 0)"){A="transparent"}return jQuery.color.parse(A)};jQuery.color.parse=function(A){var F,H=jQuery.color.make;if(F=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(A)){return H(parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10))}if(F=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(A)){return H(parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10),parseFloat(F[4]))}if(F=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(A)){return H(parseFloat(F[1])*2.55,parseFloat(F[2])*2.55,parseFloat(F[3])*2.55)}if(F=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(A)){return H(parseFloat(F[1])*2.55,parseFloat(F[2])*2.55,parseFloat(F[3])*2.55,parseFloat(F[4]))}if(F=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(A)){return H(parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16))}if(F=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(A)){return H(parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16))}var G=jQuery.trim(A).toLowerCase();if(G=="transparent"){return H(255,255,255,0)}else{F=B[G];return H(F[0],F[1],F[2])}};var B={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})();(function(C){function B(l,W,X,E){var O=[],g={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{mode:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02},x2axis:{autoscaleMargin:null},y2axis:{autoscaleMargin:0.02},series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,tickColor:"rgba(0,0,0,0.15)",labelMargin:5,borderWidth:2,borderColor:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},P=null,AC=null,AD=null,Y=null,AJ=null,s={xaxis:{},yaxis:{},x2axis:{},y2axis:{}},e={left:0,right:0,top:0,bottom:0},y=0,Q=0,I=0,t=0,L={processOptions:[],processRawData:[],processDatapoints:[],draw:[],bindEvents:[],drawOverlay:[]},G=this;G.setData=f;G.setupGrid=k;G.draw=AH;G.getPlaceholder=function(){return l};G.getCanvas=function(){return P};G.getPlotOffset=function(){return e};G.width=function(){return I};G.height=function(){return t};G.offset=function(){var AK=AD.offset();AK.left+=e.left;AK.top+=e.top;return AK};G.getData=function(){return O};G.getAxes=function(){return s};G.getOptions=function(){return g};G.highlight=AE;G.unhighlight=x;G.triggerRedrawOverlay=q;G.pointOffset=function(AK){return{left:parseInt(T(AK,"xaxis").p2c(+AK.x)+e.left),top:parseInt(T(AK,"yaxis").p2c(+AK.y)+e.top)}};G.hooks=L;b(G);r(X);c();f(W);k();AH();AG();function Z(AM,AK){AK=[G].concat(AK);for(var AL=0;AL=g.colors.length){AP=0;++AO}}var AQ=0,AW;for(AP=0;APAl.datamax){Al.datamax=Aj}}for(Ac=0;Ac0&&Ab[AZ-AX]!=null&&Ab[AZ-AX]!=Ab[AZ]&&Ab[AZ-AX+1]!=Ab[AZ+1]){for(AV=0;AVAU){AU=Ai}}if(Af.y){if(AiAd){Ad=Ai}}}}if(AR.bars.show){var Ag=AR.bars.align=="left"?0:-AR.bars.barWidth/2;if(AR.bars.horizontal){AY+=Ag;Ad+=Ag+AR.bars.barWidth}else{AS+=Ag;AU+=Ag+AR.bars.barWidth}}AN(AR.xaxis,AS,AU);AN(AR.yaxis,AY,Ad)}for(AK in s){if(s[AK].datamin==AW){s[AK].datamin=null}if(s[AK].datamax==AQ){s[AK].datamax=null}}}function c(){function AK(AM,AL){var AN=document.createElement("canvas");AN.width=AM;AN.height=AL;if(C.browser.msie){AN=window.G_vmlCanvasManager.initElement(AN)}return AN}y=l.width();Q=l.height();l.html("");if(l.css("position")=="static"){l.css("position","relative")}if(y<=0||Q<=0){throw"Invalid dimensions for plot, width = "+y+", height = "+Q}if(C.browser.msie){window.G_vmlCanvasManager.init_(document)}P=C(AK(y,Q)).appendTo(l).get(0);Y=P.getContext("2d");AC=C(AK(y,Q)).css({position:"absolute",left:0,top:0}).appendTo(l).get(0);AJ=AC.getContext("2d");AJ.stroke()}function AG(){AD=C([AC,P]);if(g.grid.hoverable){AD.mousemove(D)}if(g.grid.clickable){AD.click(d)}Z(L.bindEvents,[AD])}function k(){function AL(AT,AU){function AP(AV){return AV}var AS,AO,AQ=AU.transform||AP,AR=AU.inverseTransform;if(AT==s.xaxis||AT==s.x2axis){AS=AT.scale=I/(AQ(AT.max)-AQ(AT.min));AO=AQ(AT.min);if(AQ==AP){AT.p2c=function(AV){return(AV-AO)*AS}}else{AT.p2c=function(AV){return(AQ(AV)-AO)*AS}}if(!AR){AT.c2p=function(AV){return AO+AV/AS}}else{AT.c2p=function(AV){return AR(AO+AV/AS)}}}else{AS=AT.scale=t/(AQ(AT.max)-AQ(AT.min));AO=AQ(AT.max);if(AQ==AP){AT.p2c=function(AV){return(AO-AV)*AS}}else{AT.p2c=function(AV){return(AO-AQ(AV))*AS}}if(!AR){AT.c2p=function(AV){return AO-AV/AS}}else{AT.c2p=function(AV){return AR(AO-AV/AS)}}}}function AN(AR,AT){var AQ,AS=[],AP;AR.labelWidth=AT.labelWidth;AR.labelHeight=AT.labelHeight;if(AR==s.xaxis||AR==s.x2axis){if(AR.labelWidth==null){AR.labelWidth=y/(AR.ticks.length>0?AR.ticks.length:1)}if(AR.labelHeight==null){AS=[];for(AQ=0;AQ'+AP+"
")}}if(AS.length>0){var AO=C('
'+AS.join("")+'
').appendTo(l);AR.labelHeight=AO.height();AO.remove()}}}else{if(AR.labelWidth==null||AR.labelHeight==null){for(AQ=0;AQ'+AP+"
")}}if(AS.length>0){var AO=C('
'+AS.join("")+"
").appendTo(l);if(AR.labelWidth==null){AR.labelWidth=AO.width()}if(AR.labelHeight==null){AR.labelHeight=AO.find("div").height()}AO.remove()}}}if(AR.labelWidth==null){AR.labelWidth=0}if(AR.labelHeight==null){AR.labelHeight=0}}function AM(){var AP=g.grid.borderWidth;for(i=0;i0){e.bottom=Math.max(AP,s.xaxis.labelHeight+AO)}if(s.yaxis.labelWidth>0){e.left=Math.max(AP,s.yaxis.labelWidth+AO)}if(s.x2axis.labelHeight>0){e.top=Math.max(AP,s.x2axis.labelHeight+AO)}if(s.y2axis.labelWidth>0){e.right=Math.max(AP,s.y2axis.labelWidth+AO)}I=y-e.left-e.right;t=Q-e.bottom-e.top}var AK;for(AK in s){K(s[AK],g[AK])}if(g.grid.show){for(AK in s){F(s[AK],g[AK]);p(s[AK],g[AK]);AN(s[AK],g[AK])}AM()}else{e.left=e.right=e.top=e.bottom=0;I=y;t=Q}for(AK in s){AL(s[AK],g[AK])}if(g.grid.show){h()}AI()}function K(AN,AQ){var AM=+(AQ.min!=null?AQ.min:AN.datamin),AK=+(AQ.max!=null?AQ.max:AN.datamax),AP=AK-AM;if(AP==0){var AL=AK==0?1:0.01;if(AQ.min==null){AM-=AL}if(AQ.max==null||AQ.min!=null){AK+=AL}}else{var AO=AQ.autoscaleMargin;if(AO!=null){if(AQ.min==null){AM-=AP*AO;if(AM<0&&AN.datamin!=null&&AN.datamin>=0){AM=0}}if(AQ.max==null){AK+=AP*AO;if(AK>0&&AN.datamax!=null&&AN.datamax<=0){AK=0}}}}AN.min=AM;AN.max=AK}function F(AP,AS){var AO;if(typeof AS.ticks=="number"&&AS.ticks>0){AO=AS.ticks}else{if(AP==s.xaxis||AP==s.x2axis){AO=0.3*Math.sqrt(y)}else{AO=0.3*Math.sqrt(Q)}}var AX=(AP.max-AP.min)/AO,AZ,AT,AV,AW,AR,AM,AL;if(AS.mode=="time"){var AU={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var AY=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var AN=0;if(AS.minTickSize!=null){if(typeof AS.tickSize=="number"){AN=AS.tickSize}else{AN=AS.minTickSize[0]*AU[AS.minTickSize[1]]}}for(AR=0;AR=AN){break}}AZ=AY[AR][0];AV=AY[AR][1];if(AV=="year"){AM=Math.pow(10,Math.floor(Math.log(AX/AU.year)/Math.LN10));AL=(AX/AU.year)/AM;if(AL<1.5){AZ=1}else{if(AL<3){AZ=2}else{if(AL<7.5){AZ=5}else{AZ=10}}}AZ*=AM}if(AS.tickSize){AZ=AS.tickSize[0];AV=AS.tickSize[1]}AT=function(Ac){var Ah=[],Af=Ac.tickSize[0],Ai=Ac.tickSize[1],Ag=new Date(Ac.min);var Ab=Af*AU[Ai];if(Ai=="second"){Ag.setUTCSeconds(A(Ag.getUTCSeconds(),Af))}if(Ai=="minute"){Ag.setUTCMinutes(A(Ag.getUTCMinutes(),Af))}if(Ai=="hour"){Ag.setUTCHours(A(Ag.getUTCHours(),Af))}if(Ai=="month"){Ag.setUTCMonth(A(Ag.getUTCMonth(),Af))}if(Ai=="year"){Ag.setUTCFullYear(A(Ag.getUTCFullYear(),Af))}Ag.setUTCMilliseconds(0);if(Ab>=AU.minute){Ag.setUTCSeconds(0)}if(Ab>=AU.hour){Ag.setUTCMinutes(0)}if(Ab>=AU.day){Ag.setUTCHours(0)}if(Ab>=AU.day*4){Ag.setUTCDate(1)}if(Ab>=AU.year){Ag.setUTCMonth(0)}var Ak=0,Aj=Number.NaN,Ad;do{Ad=Aj;Aj=Ag.getTime();Ah.push({v:Aj,label:Ac.tickFormatter(Aj,Ac)});if(Ai=="month"){if(Af<1){Ag.setUTCDate(1);var Aa=Ag.getTime();Ag.setUTCMonth(Ag.getUTCMonth()+1);var Ae=Ag.getTime();Ag.setTime(Aj+Ak*AU.hour+(Ae-Aa)*Af);Ak=Ag.getUTCHours();Ag.setUTCHours(0)}else{Ag.setUTCMonth(Ag.getUTCMonth()+Af)}}else{if(Ai=="year"){Ag.setUTCFullYear(Ag.getUTCFullYear()+Af)}else{Ag.setTime(Aj+Ab)}}}while(AjAK){AQ=AK}AM=Math.pow(10,-AQ);AL=AX/AM;if(AL<1.5){AZ=1}else{if(AL<3){AZ=2;if(AL>2.25&&(AK==null||AQ+1<=AK)){AZ=2.5;++AQ}}else{if(AL<7.5){AZ=5}else{AZ=10}}}AZ*=AM;if(AS.minTickSize!=null&&AZ0){AO.ticks=AO.tickGenerator(AO)}}else{if(AQ.ticks){var AP=AQ.ticks;if(C.isFunction(AP)){AP=AP({min:AO.min,max:AO.max})}var AN,AK;for(AN=0;AN1){AL=AM[1]}}else{AK=AM}if(AL==null){AL=AO.tickFormatter(AK,AO)}AO.ticks[AN]={v:AK,label:AL}}}}}if(AQ.autoscaleMargin!=null&&AO.ticks.length>0){if(AQ.min==null){AO.min=Math.min(AO.min,AO.ticks[0].v)}if(AQ.max==null&&AO.ticks.length>1){AO.max=Math.max(AO.max,AO.ticks[AO.ticks.length-1].v)}}}function AH(){Y.clearRect(0,0,y,Q);var AL=g.grid;if(AL.show&&!AL.aboveData){S()}for(var AK=0;AKAP){return{from:AP,to:AQ,axis:AN}}return{from:AQ,to:AP,axis:AN}}function S(){var AO;Y.save();Y.translate(e.left,e.top);if(g.grid.backgroundColor){Y.fillStyle=R(g.grid.backgroundColor,t,0,"rgba(255, 255, 255, 0)");Y.fillRect(0,0,I,t)}var AL=g.grid.markings;if(AL){if(C.isFunction(AL)){AL=AL({xmin:s.xaxis.min,xmax:s.xaxis.max,ymin:s.yaxis.min,ymax:s.yaxis.max,xaxis:s.xaxis,yaxis:s.yaxis,x2axis:s.x2axis,y2axis:s.y2axis})}for(AO=0;AOAQ.axis.max||AN.toAN.axis.max){continue}AQ.from=Math.max(AQ.from,AQ.axis.min);AQ.to=Math.min(AQ.to,AQ.axis.max);AN.from=Math.max(AN.from,AN.axis.min);AN.to=Math.min(AN.to,AN.axis.max);if(AQ.from==AQ.to&&AN.from==AN.to){continue}AQ.from=AQ.axis.p2c(AQ.from);AQ.to=AQ.axis.p2c(AQ.to);AN.from=AN.axis.p2c(AN.from);AN.to=AN.axis.p2c(AN.to);if(AQ.from==AQ.to||AN.from==AN.to){Y.beginPath();Y.strokeStyle=AK.color||g.grid.markingsColor;Y.lineWidth=AK.lineWidth||g.grid.markingsLineWidth;Y.moveTo(AQ.from,AN.from);Y.lineTo(AQ.to,AN.to);Y.stroke()}else{Y.fillStyle=AK.color||g.grid.markingsColor;Y.fillRect(AQ.from,AN.to,AQ.to-AQ.from,AN.from-AN.to)}}}Y.lineWidth=1;Y.strokeStyle=g.grid.tickColor;Y.beginPath();var AM,AP=s.xaxis;for(AO=0;AO=s.xaxis.max){continue}Y.moveTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,0);Y.lineTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,t)}AP=s.yaxis;for(AO=0;AO=AP.max){continue}Y.moveTo(0,Math.floor(AP.p2c(AM))+Y.lineWidth/2);Y.lineTo(I,Math.floor(AP.p2c(AM))+Y.lineWidth/2)}AP=s.x2axis;for(AO=0;AO=AP.max){continue}Y.moveTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,-5);Y.lineTo(Math.floor(AP.p2c(AM))+Y.lineWidth/2,5)}AP=s.y2axis;for(AO=0;AO=AP.max){continue}Y.moveTo(I-5,Math.floor(AP.p2c(AM))+Y.lineWidth/2);Y.lineTo(I+5,Math.floor(AP.p2c(AM))+Y.lineWidth/2)}Y.stroke();if(g.grid.borderWidth){var AR=g.grid.borderWidth;Y.lineWidth=AR;Y.strokeStyle=g.grid.borderColor;Y.strokeRect(-AR/2,-AR/2,I+AR,t+AR)}Y.restore()}function h(){l.find(".tickLabels").remove();var AK=['
'];function AM(AP,AQ){for(var AO=0;AOAP.max){continue}AK.push(AQ(AN,AP))}}var AL=g.grid.labelMargin+g.grid.borderWidth;AM(s.xaxis,function(AN,AO){return'
'+AN.label+"
"});AM(s.yaxis,function(AN,AO){return'
'+AN.label+"
"});AM(s.x2axis,function(AN,AO){return'
'+AN.label+"
"});AM(s.y2axis,function(AN,AO){return'
'+AN.label+"
"});AK.push("
");l.append(AK.join(""))}function AA(AK){if(AK.lines.show){a(AK)}if(AK.bars.show){n(AK)}if(AK.points.show){o(AK)}}function a(AN){function AM(AY,AZ,AR,Ad,Ac){var Ae=AY.points,AS=AY.pointsize,AW=null,AV=null;Y.beginPath();for(var AX=AS;AX=Aa&&Ab>Ac.max){if(Aa>Ac.max){continue}AU=(Ac.max-Ab)/(Aa-Ab)*(AT-AU)+AU;Ab=Ac.max}else{if(Aa>=Ab&&Aa>Ac.max){if(Ab>Ac.max){continue}AT=(Ac.max-Ab)/(Aa-Ab)*(AT-AU)+AU;Aa=Ac.max}}if(AU<=AT&&AU=AT&&AU>Ad.max){if(AT>Ad.max){continue}Ab=(Ad.max-AU)/(AT-AU)*(Aa-Ab)+Ab;AU=Ad.max}else{if(AT>=AU&&AT>Ad.max){if(AU>Ad.max){continue}Aa=(Ad.max-AU)/(AT-AU)*(Aa-Ab)+Ab;AT=Ad.max}}if(AU!=AW||Ab!=AV){Y.moveTo(Ad.p2c(AU)+AZ,Ac.p2c(Ab)+AR)}AW=AT;AV=Aa;Y.lineTo(Ad.p2c(AT)+AZ,Ac.p2c(Aa)+AR)}Y.stroke()}function AO(AX,Ae,Ac){var Af=AX.points,AR=AX.pointsize,AS=Math.min(Math.max(0,Ac.min),Ac.max),Aa,AV=0,Ad=false;for(var AW=AR;AW=AT&&AU>Ae.max){if(AT>Ae.max){continue}Ab=(Ae.max-AU)/(AT-AU)*(AZ-Ab)+Ab;AU=Ae.max}else{if(AT>=AU&&AT>Ae.max){if(AU>Ae.max){continue}AZ=(Ae.max-AU)/(AT-AU)*(AZ-Ab)+Ab;AT=Ae.max}}if(!Ad){Y.beginPath();Y.moveTo(Ae.p2c(AU),Ac.p2c(AS));Ad=true}if(Ab>=Ac.max&&AZ>=Ac.max){Y.lineTo(Ae.p2c(AU),Ac.p2c(Ac.max));Y.lineTo(Ae.p2c(AT),Ac.p2c(Ac.max));AV=AT;continue}else{if(Ab<=Ac.min&&AZ<=Ac.min){Y.lineTo(Ae.p2c(AU),Ac.p2c(Ac.min));Y.lineTo(Ae.p2c(AT),Ac.p2c(Ac.min));AV=AT;continue}}var Ag=AU,AY=AT;if(Ab<=AZ&&Ab=Ac.min){AU=(Ac.min-Ab)/(AZ-Ab)*(AT-AU)+AU;Ab=Ac.min}else{if(AZ<=Ab&&AZ=Ac.min){AT=(Ac.min-Ab)/(AZ-Ab)*(AT-AU)+AU;AZ=Ac.min}}if(Ab>=AZ&&Ab>Ac.max&&AZ<=Ac.max){AU=(Ac.max-Ab)/(AZ-Ab)*(AT-AU)+AU;Ab=Ac.max}else{if(AZ>=Ab&&AZ>Ac.max&&Ab<=Ac.max){AT=(Ac.max-Ab)/(AZ-Ab)*(AT-AU)+AU;AZ=Ac.max}}if(AU!=Ag){if(Ab<=Ac.min){Aa=Ac.min}else{Aa=Ac.max}Y.lineTo(Ae.p2c(Ag),Ac.p2c(Aa));Y.lineTo(Ae.p2c(AU),Ac.p2c(Aa))}Y.lineTo(Ae.p2c(AU),Ac.p2c(Ab));Y.lineTo(Ae.p2c(AT),Ac.p2c(AZ));if(AT!=AY){if(AZ<=Ac.min){Aa=Ac.min}else{Aa=Ac.max}Y.lineTo(Ae.p2c(AT),Ac.p2c(Aa));Y.lineTo(Ae.p2c(AY),Ac.p2c(Aa))}AV=Math.max(AT,AY)}if(Ad){Y.lineTo(Ae.p2c(AV),Ac.p2c(AS));Y.fill()}}Y.save();Y.translate(e.left,e.top);Y.lineJoin="round";var AP=AN.lines.lineWidth,AK=AN.shadowSize;if(AP>0&&AK>0){Y.lineWidth=AK;Y.strokeStyle="rgba(0,0,0,0.1)";var AQ=Math.PI/18;AM(AN.datapoints,Math.sin(AQ)*(AP/2+AK/2),Math.cos(AQ)*(AP/2+AK/2),AN.xaxis,AN.yaxis);Y.lineWidth=AK/2;AM(AN.datapoints,Math.sin(AQ)*(AP/2+AK/4),Math.cos(AQ)*(AP/2+AK/4),AN.xaxis,AN.yaxis)}Y.lineWidth=AP;Y.strokeStyle=AN.color;var AL=V(AN.lines,AN.color,0,t);if(AL){Y.fillStyle=AL;AO(AN.datapoints,AN.xaxis,AN.yaxis)}if(AP>0){AM(AN.datapoints,0,0,AN.xaxis,AN.yaxis)}Y.restore()}function o(AN){function AP(AU,AT,Ab,AR,AV,AZ,AY){var Aa=AU.points,AQ=AU.pointsize;for(var AS=0;ASAZ.max||AWAY.max){continue}Y.beginPath();Y.arc(AZ.p2c(AX),AY.p2c(AW)+AR,AT,0,AV,false);if(Ab){Y.fillStyle=Ab;Y.fill()}Y.stroke()}}Y.save();Y.translate(e.left,e.top);var AO=AN.lines.lineWidth,AL=AN.shadowSize,AK=AN.points.radius;if(AO>0&&AL>0){var AM=AL/2;Y.lineWidth=AM;Y.strokeStyle="rgba(0,0,0,0.1)";AP(AN.datapoints,AK,null,AM+AM/2,Math.PI,AN.xaxis,AN.yaxis);Y.strokeStyle="rgba(0,0,0,0.2)";AP(AN.datapoints,AK,null,AM/2,Math.PI,AN.xaxis,AN.yaxis)}Y.lineWidth=AO;Y.strokeStyle=AN.color;AP(AN.datapoints,AK,V(AN.points,AN.color),0,2*Math.PI,AN.xaxis,AN.yaxis);Y.restore()}function AB(AV,AU,Ad,AQ,AY,AN,AL,AT,AS,Ac,AZ){var AM,Ab,AR,AX,AO,AK,AW,AP,Aa;if(AZ){AP=AK=AW=true;AO=false;AM=Ad;Ab=AV;AX=AU+AQ;AR=AU+AY;if(AbAT.max||AXAS.max){return }if(AMAT.max){Ab=AT.max;AK=false}if(ARAS.max){AX=AS.max;AW=false}AM=AT.p2c(AM);AR=AS.p2c(AR);Ab=AT.p2c(Ab);AX=AS.p2c(AX);if(AL){Ac.beginPath();Ac.moveTo(AM,AR);Ac.lineTo(AM,AX);Ac.lineTo(Ab,AX);Ac.lineTo(Ab,AR);Ac.fillStyle=AL(AR,AX);Ac.fill()}if(AO||AK||AW||AP){Ac.beginPath();Ac.moveTo(AM,AR+AN);if(AO){Ac.lineTo(AM,AX+AN)}else{Ac.moveTo(AM,AX+AN)}if(AW){Ac.lineTo(Ab,AX+AN)}else{Ac.moveTo(Ab,AX+AN)}if(AK){Ac.lineTo(Ab,AR+AN)}else{Ac.moveTo(Ab,AR+AN)}if(AP){Ac.lineTo(AM,AR+AN)}else{Ac.moveTo(AM,AR+AN)}Ac.stroke()}}function n(AM){function AL(AS,AR,AU,AP,AT,AW,AV){var AX=AS.points,AO=AS.pointsize;for(var AQ=0;AQ")}AP.push("");AN=true}if(AV){AR=AV(AR,AU)}AP.push('
'+AR+"")}if(AN){AP.push("")}if(AP.length==0){return }var AT=''+AP.join("")+"
";if(g.legend.container!=null){C(g.legend.container).html(AT)}else{var AQ="",AL=g.legend.position,AM=g.legend.margin;if(AM[0]==null){AM=[AM,AM]}if(AL.charAt(0)=="n"){AQ+="top:"+(AM[1]+e.top)+"px;"}else{if(AL.charAt(0)=="s"){AQ+="bottom:"+(AM[1]+e.bottom)+"px;"}}if(AL.charAt(1)=="e"){AQ+="right:"+(AM[0]+e.right)+"px;"}else{if(AL.charAt(1)=="w"){AQ+="left:"+(AM[0]+e.left)+"px;"}}var AS=C('
'+AT.replace('style="','style="position:absolute;'+AQ+";")+"
").appendTo(l);if(g.legend.backgroundOpacity!=0){var AO=g.legend.backgroundColor;if(AO==null){AO=g.grid.backgroundColor;if(AO&&typeof AO=="string"){AO=C.color.parse(AO)}else{AO=C.color.extract(AS,"background-color")}AO.a=1;AO=AO.toString()}var AK=AS.children();C('
').prependTo(AS).css("opacity",g.legend.backgroundOpacity)}}}var w=[],J=null;function AF(AR,AP,AM){var AX=g.grid.mouseActiveRadius,Aj=AX*AX+1,Ah=null,Aa=false,Af,Ad;for(Af=0;AfAL||AT-AZ<-AL||AS-AW>AK||AS-AW<-AK){continue}var AV=Math.abs(AQ.p2c(AT)-AR),AU=Math.abs(AO.p2c(AS)-AP),Ab=AV*AV+AU*AU;if(Ab<=Aj){Aj=Ab;Ah=[Af,Ad/Ac]}}}if(AY.bars.show&&!Ah){var AN=AY.bars.align=="left"?0:-AY.bars.barWidth/2,Ag=AN+AY.bars.barWidth;for(Ad=0;Ad=Math.min(Ai,AT)&&AW>=AS+AN&&AW<=AS+Ag):(AZ>=AT+AN&&AZ<=AT+Ag&&AW>=Math.min(Ai,AS)&&AW<=Math.max(Ai,AS))){Ah=[Af,Ad/Ac]}}}}if(Ah){Af=Ah[0];Ad=Ah[1];Ac=O[Af].datapoints.pointsize;return{datapoint:O[Af].datapoints.points.slice(Ad*Ac,(Ad+1)*Ac),dataIndex:Ad,series:O[Af],seriesIndex:Af}}return null}function D(AK){if(g.grid.hoverable){H("plothover",AK,function(AL){return AL.hoverable!=false})}}function d(AK){H("plotclick",AK,function(AL){return AL.clickable!=false})}function H(AL,AK,AM){var AN=AD.offset(),AS={pageX:AK.pageX,pageY:AK.pageY},AQ=AK.pageX-AN.left-e.left,AO=AK.pageY-AN.top-e.top;if(s.xaxis.used){AS.x=s.xaxis.c2p(AQ)}if(s.yaxis.used){AS.y=s.yaxis.c2p(AO)}if(s.x2axis.used){AS.x2=s.x2axis.c2p(AQ)}if(s.y2axis.used){AS.y2=s.y2axis.c2p(AO)}var AT=AF(AQ,AO,AM);if(AT){AT.pageX=parseInt(AT.series.xaxis.p2c(AT.datapoint[0])+AN.left+e.left);AT.pageY=parseInt(AT.series.yaxis.p2c(AT.datapoint[1])+AN.top+e.top)}if(g.grid.autoHighlight){for(var AP=0;APAQ.max||ARAP.max){return }var AO=AN.points.radius+AN.points.lineWidth/2;AJ.lineWidth=AO;AJ.strokeStyle=C.color.parse(AN.color).scale("a",0.5).toString();var AK=1.5*AO;AJ.beginPath();AJ.arc(AQ.p2c(AL),AP.p2c(AR),AK,0,2*Math.PI,false);AJ.stroke()}function z(AN,AK){AJ.lineWidth=AN.bars.lineWidth;AJ.strokeStyle=C.color.parse(AN.color).scale("a",0.5).toString();var AM=C.color.parse(AN.color).scale("a",0.5).toString();var AL=AN.bars.align=="left"?0:-AN.bars.barWidth/2;AB(AK[0],AK[1],AK[2]||0,AL,AL+AN.bars.barWidth,0,function(){return AM},AN.xaxis,AN.yaxis,AJ,AN.bars.horizontal)}function R(AM,AL,AQ,AO){if(typeof AM=="string"){return AM}else{var AP=Y.createLinearGradient(0,AQ,0,AL);for(var AN=0,AK=AM.colors.length;AN12){K=K-12}else{if(K==0){K=12}}}for(var F=0;F0&&L.which!=M.which)||E(L.target).is(M.not)){return }}switch(L.type){case"mousedown":E.extend(M,E(K).offset(),{elem:K,target:L.target,pageX:L.pageX,pageY:L.pageY});A.add(document,"mousemove mouseup",H,M);G(K,false);F.dragging=null;return false;case !F.dragging&&"mousemove":if(I(L.pageX-M.pageX)+I(L.pageY-M.pageY) zr[1]))) - return; - - axisOptions.min = min; - axisOptions.max = max; - } - - scaleAxis(x1, x2, 'xaxis'); - scaleAxis(x1, x2, 'x2axis'); - scaleAxis(y1, y2, 'yaxis'); - scaleAxis(y1, y2, 'y2axis'); - - plot.setupGrid(); - plot.draw(); - - if (!args.preventEvent) - plot.getPlaceholder().trigger("plotzoom", [ plot ]); - } - - plot.pan = function (args) { - var l = +args.left, t = +args.top, - axes = plot.getAxes(), options = plot.getOptions(); - - if (isNaN(l)) - l = 0; - if (isNaN(t)) - t = 0; - - function panAxis(delta, name) { - var axis = axes[name], - axisOptions = options[name], - min, max; - - if (!axis.used) - return; - - min = axis.c2p(axis.p2c(axis.min) + delta), - max = axis.c2p(axis.p2c(axis.max) + delta); - - var pr = axisOptions.panRange; - if (pr) { - // check whether we hit the wall - if (pr[0] != null && pr[0] > min) { - delta = pr[0] - min; - min += delta; - max += delta; - } - - if (pr[1] != null && pr[1] < max) { - delta = pr[1] - max; - min += delta; - max += delta; - } - } - - axisOptions.min = min; - axisOptions.max = max; - } - - panAxis(l, 'xaxis'); - panAxis(l, 'x2axis'); - panAxis(t, 'yaxis'); - panAxis(t, 'y2axis'); - - plot.setupGrid(); - plot.draw(); - - if (!args.preventEvent) - plot.getPlaceholder().trigger("plotpan", [ plot ]); - } - - plot.hooks.bindEvents.push(bindEvents); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'navigate', - version: '1.1' - }); -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.navigate.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.navigate.min.js deleted file mode 100644 index fb7814e9..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.navigate.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(R){R.fn.drag=function(A,B,C){if(B){this.bind("dragstart",A)}if(C){this.bind("dragend",C)}return !A?this.trigger("drag"):this.bind("drag",B?B:A)};var M=R.event,L=M.special,Q=L.drag={not:":input",distance:0,which:1,dragging:false,setup:function(A){A=R.extend({distance:Q.distance,which:Q.which,not:Q.not},A||{});A.distance=N(A.distance);M.add(this,"mousedown",O,A);if(this.attachEvent){this.attachEvent("ondragstart",J)}},teardown:function(){M.remove(this,"mousedown",O);if(this===Q.dragging){Q.dragging=Q.proxy=false}P(this,true);if(this.detachEvent){this.detachEvent("ondragstart",J)}}};L.dragstart=L.dragend={setup:function(){},teardown:function(){}};function O(A){var B=this,C,D=A.data||{};if(D.elem){B=A.dragTarget=D.elem;A.dragProxy=Q.proxy||B;A.cursorOffsetX=D.pageX-D.left;A.cursorOffsetY=D.pageY-D.top;A.offsetX=A.pageX-A.cursorOffsetX;A.offsetY=A.pageY-A.cursorOffsetY}else{if(Q.dragging||(D.which>0&&A.which!=D.which)||R(A.target).is(D.not)){return }}switch(A.type){case"mousedown":R.extend(D,R(B).offset(),{elem:B,target:A.target,pageX:A.pageX,pageY:A.pageY});M.add(document,"mousemove mouseup",O,D);P(B,false);Q.dragging=null;return false;case !Q.dragging&&"mousemove":if(N(A.pageX-D.pageX)+N(A.pageY-D.pageY)Z[1]))){return }a.min=X;a.max=T}K(G,F,"xaxis");K(G,F,"x2axis");K(P,O,"yaxis");K(P,O,"y2axis");D.setupGrid();D.draw();if(!M.preventEvent){D.getPlaceholder().trigger("plotzoom",[D])}};D.pan=function(I){var F=+I.left,J=+I.top,K=D.getAxes(),H=D.getOptions();if(isNaN(F)){F=0}if(isNaN(J)){J=0}function G(R,M){var O=K[M],Q=H[M],N,L;if(!O.used){return }N=O.c2p(O.p2c(O.min)+R),L=O.c2p(O.p2c(O.max)+R);var P=Q.panRange;if(P){if(P[0]!=null&&P[0]>N){R=P[0]-N;N+=R;L+=R}if(P[1]!=null&&P[1] max? max: value); - } - - function setSelectionPos(pos, e) { - var o = plot.getOptions(); - var offset = plot.getPlaceholder().offset(); - var plotOffset = plot.getPlotOffset(); - pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width()); - pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height()); - - if (o.selection.mode == "y") - pos.x = pos == selection.first? 0: plot.width(); - - if (o.selection.mode == "x") - pos.y = pos == selection.first? 0: plot.height(); - } - - function updateSelection(pos) { - if (pos.pageX == null) - return; - - setSelectionPos(selection.second, pos); - if (selectionIsSane()) { - selection.show = true; - plot.triggerRedrawOverlay(); - } - else - clearSelection(true); - } - - function clearSelection(preventEvent) { - if (selection.show) { - selection.show = false; - plot.triggerRedrawOverlay(); - if (!preventEvent) - plot.getPlaceholder().trigger("plotunselected", [ ]); - } - } - - function setSelection(ranges, preventEvent) { - var axis, range, axes = plot.getAxes(); - var o = plot.getOptions(); - - if (o.selection.mode == "y") { - selection.first.x = 0; - selection.second.x = plot.width(); - } - else { - axis = ranges["xaxis"]? axes["xaxis"]: (ranges["x2axis"]? axes["x2axis"]: axes["xaxis"]); - range = ranges["xaxis"] || ranges["x2axis"] || { from:ranges["x1"], to:ranges["x2"] } - selection.first.x = axis.p2c(Math.min(range.from, range.to)); - selection.second.x = axis.p2c(Math.max(range.from, range.to)); - } - - if (o.selection.mode == "x") { - selection.first.y = 0; - selection.second.y = plot.height(); - } - else { - axis = ranges["yaxis"]? axes["yaxis"]: (ranges["y2axis"]? axes["y2axis"]: axes["yaxis"]); - range = ranges["yaxis"] || ranges["y2axis"] || { from:ranges["y1"], to:ranges["y2"] } - selection.first.y = axis.p2c(Math.min(range.from, range.to)); - selection.second.y = axis.p2c(Math.max(range.from, range.to)); - } - - selection.show = true; - plot.triggerRedrawOverlay(); - if (!preventEvent) - triggerSelectedEvent(); - } - - function selectionIsSane() { - var minSize = 5; - return Math.abs(selection.second.x - selection.first.x) >= minSize && - Math.abs(selection.second.y - selection.first.y) >= minSize; - } - - plot.clearSelection = clearSelection; - plot.setSelection = setSelection; - plot.getSelection = getSelection; - - plot.hooks.bindEvents.push(function(plot, eventHolder) { - var o = plot.getOptions(); - if (o.selection.mode != null) - eventHolder.mousemove(onMouseMove); - - if (o.selection.mode != null) - eventHolder.mousedown(onMouseDown); - }); - - - plot.hooks.drawOverlay.push(function (plot, ctx) { - // draw selection - if (selection.show && selectionIsSane()) { - var plotOffset = plot.getPlotOffset(); - var o = plot.getOptions(); - - ctx.save(); - ctx.translate(plotOffset.left, plotOffset.top); - - var c = $.color.parse(o.selection.color); - - ctx.strokeStyle = c.scale('a', 0.8).toString(); - ctx.lineWidth = 1; - ctx.lineJoin = "round"; - ctx.fillStyle = c.scale('a', 0.4).toString(); - - var x = Math.min(selection.first.x, selection.second.x), - y = Math.min(selection.first.y, selection.second.y), - w = Math.abs(selection.second.x - selection.first.x), - h = Math.abs(selection.second.y - selection.first.y); - - ctx.fillRect(x, y, w, h); - ctx.strokeRect(x, y, w, h); - - ctx.restore(); - } - }); - } - - $.plot.plugins.push({ - init: init, - options: { - selection: { - mode: null, // one of null, "x", "y" or "xy" - color: "#e8cfac" - } - }, - name: 'selection', - version: '1.0' - }); -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.selection.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.selection.min.js deleted file mode 100644 index 2260e8cd..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.selection.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(A){function B(J){var O={first:{x:-1,y:-1},second:{x:-1,y:-1},show:false,active:false};var L={};function D(Q){if(O.active){J.getPlaceholder().trigger("plotselecting",[F()]);K(Q)}}function M(Q){if(Q.which!=1){return }document.body.focus();if(document.onselectstart!==undefined&&L.onselectstart==null){L.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!==undefined&&L.ondrag==null){L.ondrag=document.ondrag;document.ondrag=function(){return false}}C(O.first,Q);O.active=true;A(document).one("mouseup",I)}function I(Q){if(document.onselectstart!==undefined){document.onselectstart=L.onselectstart}if(document.ondrag!==undefined){document.ondrag=L.ondrag}O.active=false;K(Q);if(E()){H()}else{J.getPlaceholder().trigger("plotunselected",[]);J.getPlaceholder().trigger("plotselecting",[null])}return false}function F(){if(!E()){return null}var R=Math.min(O.first.x,O.second.x),Q=Math.max(O.first.x,O.second.x),T=Math.max(O.first.y,O.second.y),S=Math.min(O.first.y,O.second.y);var U={};var V=J.getAxes();if(V.xaxis.used){U.xaxis={from:V.xaxis.c2p(R),to:V.xaxis.c2p(Q)}}if(V.x2axis.used){U.x2axis={from:V.x2axis.c2p(R),to:V.x2axis.c2p(Q)}}if(V.yaxis.used){U.yaxis={from:V.yaxis.c2p(T),to:V.yaxis.c2p(S)}}if(V.y2axis.used){U.y2axis={from:V.y2axis.c2p(T),to:V.y2axis.c2p(S)}}return U}function H(){var Q=F();J.getPlaceholder().trigger("plotselected",[Q]);var R=J.getAxes();if(R.xaxis.used&&R.yaxis.used){J.getPlaceholder().trigger("selected",[{x1:Q.xaxis.from,y1:Q.yaxis.from,x2:Q.xaxis.to,y2:Q.yaxis.to}])}}function G(R,S,Q){return SQ?Q:S)}function C(U,R){var T=J.getOptions();var S=J.getPlaceholder().offset();var Q=J.getPlotOffset();U.x=G(0,R.pageX-S.left-Q.left,J.width());U.y=G(0,R.pageY-S.top-Q.top,J.height());if(T.selection.mode=="y"){U.x=U==O.first?0:J.width()}if(T.selection.mode=="x"){U.y=U==O.first?0:J.height()}}function K(Q){if(Q.pageX==null){return }C(O.second,Q);if(E()){O.show=true;J.triggerRedrawOverlay()}else{P(true)}}function P(Q){if(O.show){O.show=false;J.triggerRedrawOverlay();if(!Q){J.getPlaceholder().trigger("plotunselected",[])}}}function N(R,Q){var T,S,U=J.getAxes();var V=J.getOptions();if(V.selection.mode=="y"){O.first.x=0;O.second.x=J.width()}else{T=R.xaxis?U.xaxis:(R.x2axis?U.x2axis:U.xaxis);S=R.xaxis||R.x2axis||{from:R.x1,to:R.x2};O.first.x=T.p2c(Math.min(S.from,S.to));O.second.x=T.p2c(Math.max(S.from,S.to))}if(V.selection.mode=="x"){O.first.y=0;O.second.y=J.height()}else{T=R.yaxis?U.yaxis:(R.y2axis?U.y2axis:U.yaxis);S=R.yaxis||R.y2axis||{from:R.y1,to:R.y2};O.first.y=T.p2c(Math.min(S.from,S.to));O.second.y=T.p2c(Math.max(S.from,S.to))}O.show=true;J.triggerRedrawOverlay();if(!Q){H()}}function E(){var Q=5;return Math.abs(O.second.x-O.first.x)>=Q&&Math.abs(O.second.y-O.first.y)>=Q}J.clearSelection=P;J.setSelection=N;J.getSelection=F;J.hooks.bindEvents.push(function(R,Q){var S=R.getOptions();if(S.selection.mode!=null){Q.mousemove(D)}if(S.selection.mode!=null){Q.mousedown(M)}});J.hooks.drawOverlay.push(function(T,Y){if(O.show&&E()){var R=T.getPlotOffset();var Q=T.getOptions();Y.save();Y.translate(R.left,R.top);var U=A.color.parse(Q.selection.color);Y.strokeStyle=U.scale("a",0.8).toString();Y.lineWidth=1;Y.lineJoin="round";Y.fillStyle=U.scale("a",0.4).toString();var W=Math.min(O.first.x,O.second.x),V=Math.min(O.first.y,O.second.y),X=Math.abs(O.second.x-O.first.x),S=Math.abs(O.second.y-O.first.y);Y.fillRect(W,V,X,S);Y.strokeRect(W,V,X,S);Y.restore()}})}A.plot.plugins.push({init:B,options:{selection:{mode:null,color:"#e8cfac"}},name:"selection",version:"1.0"})})(jQuery); \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.stack.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.stack.js deleted file mode 100644 index 4dbd29f1..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.stack.js +++ /dev/null @@ -1,152 +0,0 @@ -/* -Flot plugin for stacking data sets, i.e. putting them on top of each -other, for accumulative graphs. Note that the plugin assumes the data -is sorted on x. Also note that stacking a mix of positive and negative -values in most instances doesn't make sense (so it looks weird). - -Two or more series are stacked when their "stack" attribute is set to -the same key (which can be any number or string or just "true"). To -specify the default stack, you can set - - series: { - stack: null or true or key (number/string) - } - -or specify it for a specific series - - $.plot($("#placeholder"), [{ data: [ ... ], stack: true ]) - -The stacking order is determined by the order of the data series in -the array (later series end up on top of the previous). - -Internally, the plugin modifies the datapoints in each series, adding -an offset to the y value. For line series, extra data points are -inserted through interpolation. For bar charts, the second y value is -also adjusted. -*/ - -(function ($) { - var options = { - series: { stack: null } // or number/string - }; - - function init(plot) { - function findMatchingSeries(s, allseries) { - var res = null - for (var i = 0; i < allseries.length; ++i) { - if (s == allseries[i]) - break; - - if (allseries[i].stack == s.stack) - res = allseries[i]; - } - - return res; - } - - function stackData(plot, s, datapoints) { - if (s.stack == null) - return; - - var other = findMatchingSeries(s, plot.getData()); - if (!other) - return; - - var ps = datapoints.pointsize, - points = datapoints.points, - otherps = other.datapoints.pointsize, - otherpoints = other.datapoints.points, - newpoints = [], - px, py, intery, qx, qy, bottom, - withlines = s.lines.show, withbars = s.bars.show, - withsteps = withlines && s.lines.steps, - i = 0, j = 0, l; - - while (true) { - if (i >= points.length) - break; - - l = newpoints.length; - - if (j >= otherpoints.length - || otherpoints[j] == null - || points[i] == null) { - // degenerate cases - for (m = 0; m < ps; ++m) - newpoints.push(points[i + m]); - i += ps; - } - else { - // cases where we actually got two points - px = points[i]; - py = points[i + 1]; - qx = otherpoints[j]; - qy = otherpoints[j + 1]; - bottom = 0; - - if (px == qx) { - for (m = 0; m < ps; ++m) - newpoints.push(points[i + m]); - - newpoints[l + 1] += qy; - bottom = qy; - - i += ps; - j += otherps; - } - else if (px > qx) { - // we got past point below, might need to - // insert interpolated extra point - if (withlines && i > 0 && points[i - ps] != null) { - intery = py + (points[i - ps + 1] - py) * (qx - px) / (points[i - ps] - px); - newpoints.push(qx); - newpoints.push(intery + qy) - for (m = 2; m < ps; ++m) - newpoints.push(points[i + m]); - bottom = qy; - } - - j += otherps; - } - else { - for (m = 0; m < ps; ++m) - newpoints.push(points[i + m]); - - // we might be able to interpolate a point below, - // this can give us a better y - if (withlines && j > 0 && otherpoints[j - ps] != null) - bottom = qy + (otherpoints[j - ps + 1] - qy) * (px - qx) / (otherpoints[j - ps] - qx); - - newpoints[l + 1] += bottom; - - i += ps; - } - - if (l != newpoints.length && withbars) - newpoints[l + 2] += bottom; - } - - // maintain the line steps invariant - if (withsteps && l != newpoints.length && l > 0 - && newpoints[l] != null - && newpoints[l] != newpoints[l - ps] - && newpoints[l + 1] != newpoints[l - ps + 1]) { - for (m = 0; m < ps; ++m) - newpoints[l + ps + m] = newpoints[l + m]; - newpoints[l + 1] = newpoints[l - ps + 1]; - } - } - - datapoints.points = newpoints; - } - - plot.hooks.processDatapoints.push(stackData); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'stack', - version: '1.0' - }); -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.stack.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.stack.min.js deleted file mode 100644 index b5b8943b..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.stack.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(B){var A={series:{stack:null}};function C(F){function D(J,I){var H=null;for(var G=0;G=Y.length){break}U=N.length;if(V>=S.length||S[V]==null||Y[X]==null){for(m=0;ma){if(O&&X>0&&Y[X-T]!=null){I=Q+(Y[X-T+1]-Q)*(a-R)/(Y[X-T]-R);N.push(a);N.push(I+Z);for(m=2;m0&&S[V-T]!=null){M=Z+(S[V-T+1]-Z)*(R-a)/(S[V-T]-a)}N[U+1]+=M;X+=T}}if(U!=N.length&&K){N[U+2]+=M}}if(J&&U!=N.length&&U>0&&N[U]!=null&&N[U]!=N[U-T]&&N[U+1]!=N[U-T+1]){for(m=0;m 0 && origpoints[i - ps] != null) { - var interx = (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]) * (below - y) + x; - prevp.push(interx); - prevp.push(below); - for (m = 2; m < ps; ++m) - prevp.push(origpoints[i + m]); - - p.push(null); // start new segment - p.push(null); - for (m = 2; m < ps; ++m) - p.push(origpoints[i + m]); - p.push(interx); - p.push(below); - for (m = 2; m < ps; ++m) - p.push(origpoints[i + m]); - } - - p.push(x); - p.push(y); - } - - datapoints.points = newpoints; - thresholded.datapoints.points = threspoints; - - if (thresholded.datapoints.points.length > 0) - plot.getData().push(thresholded); - - // FIXME: there are probably some edge cases left in bars - } - - plot.hooks.processDatapoints.push(thresholdData); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'threshold', - version: '1.0' - }); -})(jQuery); diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.threshold.min.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.threshold.min.js deleted file mode 100644 index d8b79dfc..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.flot.threshold.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(B){var A={series:{threshold:null}};function C(D){function E(L,S,M){if(!S.threshold){return }var F=M.pointsize,I,O,N,G,K,H=B.extend({},S);H.datapoints={points:[],pointsize:F};H.label=null;H.color=S.threshold.color;H.threshold=null;H.originSeries=S;H.data=[];var P=S.threshold.below,Q=M.points,R=S.lines.show;threspoints=[];newpoints=[];for(I=0;I0&&Q[I-F]!=null){var J=(O-Q[I-F])/(N-Q[I-F+1])*(P-N)+O;K.push(J);K.push(P);for(m=2;m0){L.getData().push(H)}}D.hooks.processDatapoints.push(E)}B.plot.plugins.push({init:C,options:A,name:"threshold",version:"1.0"})})(jQuery); \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.js b/bundledApps/tomcat/webapps/ROOT/jflot/jquery.js deleted file mode 100644 index 92635743..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jflot/jquery.js +++ /dev/null @@ -1,4376 +0,0 @@ -/*! - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){ - -var - // Will speed up references to window, and allows munging its name. - window = this, - // Will speed up references to undefined, and allows munging its name. - undefined, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - // Map over the $ in case of overwrite - _$ = window.$, - - jQuery = window.jQuery = window.$ = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - // Make sure that a selection was provided - selector = selector || document; - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this[0] = selector; - this.length = 1; - this.context = selector; - return this; - } - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - var match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) - selector = jQuery.clean( [ match[1] ], context ); - - // HANDLE: $("#id") - else { - var elem = document.getElementById( match[3] ); - - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem && elem.id != match[3] ) - return jQuery().find( selector ); - - // Otherwise, we inject the element directly into the jQuery object - var ret = jQuery( elem || [] ); - ret.context = document; - ret.selector = selector; - return ret; - } - - // HANDLE: $(expr, [context]) - // (which is just equivalent to: $(content).find(expr) - } else - return jQuery( context ).find( selector ); - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) - return jQuery( document ).ready( selector ); - - // Make sure that old selector state is passed along - if ( selector.selector && selector.context ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return this.setArray(jQuery.isArray( selector ) ? - selector : - jQuery.makeArray(selector)); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.3.2", - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num === undefined ? - - // Return a 'clean' array - Array.prototype.slice.call( this ) : - - // Return just the object - this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery( elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) - ret.selector = this.selector + (this.selector ? " " : "") + selector; - else if ( name ) - ret.selector = this.selector + "." + name + "(" + selector + ")"; - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - Array.prototype.push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem && elem.jquery ? elem[0] : elem - , this ); - }, - - attr: function( name, value, type ) { - var options = name; - - // Look for the case where we're accessing a style value - if ( typeof name === "string" ) - if ( value === undefined ) - return this[0] && jQuery[ type || "attr" ]( this[0], name ); - - else { - options = {}; - options[ name ] = value; - } - - // Check to see if we're setting style values - return this.each(function(i){ - // Set all the styles - for ( name in options ) - jQuery.attr( - type ? - this.style : - this, - name, jQuery.prop( this, options[ name ], type, i, name ) - ); - }); - }, - - css: function( key, value ) { - // ignore negative width and height values - if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) - value = undefined; - return this.attr( key, value, "curCSS" ); - }, - - text: function( text ) { - if ( typeof text !== "object" && text != null ) - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - - var ret = ""; - - jQuery.each( text || this, function(){ - jQuery.each( this.childNodes, function(){ - if ( this.nodeType != 8 ) - ret += this.nodeType != 1 ? - this.nodeValue : - jQuery.fn.text( [ this ] ); - }); - }); - - return ret; - }, - - wrapAll: function( html ) { - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).clone(); - - if ( this[0].parentNode ) - wrap.insertBefore( this[0] ); - - wrap.map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }).append(this); - } - - return this; - }, - - wrapInner: function( html ) { - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - return this.prevObject || jQuery( [] ); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: [].push, - sort: [].sort, - splice: [].splice, - - find: function( selector ) { - if ( this.length === 1 ) { - var ret = this.pushStack( [], "find", selector ); - ret.length = 0; - jQuery.find( selector, this[0], ret ); - return ret; - } else { - return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ - return jQuery.find( selector, elem ); - })), "find", selector ); - } - }, - - clone: function( events ) { - // Do the clone - var ret = this.map(function(){ - if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - } else - return this.cloneNode(true); - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = this.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) - return; - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - }, - - filter: function( selector ) { - return this.pushStack( - jQuery.isFunction( selector ) && - jQuery.grep(this, function(elem, i){ - return selector.call( elem, i ); - }) || - - jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ - return elem.nodeType === 1; - }) ), "filter", selector ); - }, - - closest: function( selector ) { - var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, - closer = 0; - - return this.map(function(){ - var cur = this; - while ( cur && cur.ownerDocument ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { - jQuery.data(cur, "closest", closer); - return cur; - } - cur = cur.parentNode; - closer++; - } - }); - }, - - not: function( selector ) { - if ( typeof selector === "string" ) - // test special case where just one selector is passed in - if ( isSimple.test( selector ) ) - return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); - else - selector = jQuery.multiFilter( selector, this ); - - var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; - return this.filter(function() { - return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; - }); - }, - - add: function( selector ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - return !!selector && this.is( "." + selector ); - }, - - val: function( value ) { - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if( jQuery.nodeName( elem, 'option' ) ) - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type == "select-one"; - - // Nothing was selected - if ( index < 0 ) - return null; - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) - return value; - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Everything else, we just grab the value - return (elem.value || "").replace(/\r/g, ""); - - } - - return undefined; - } - - if ( typeof value === "number" ) - value += ''; - - return this.each(function(){ - if ( this.nodeType != 1 ) - return; - - if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) - this.checked = (jQuery.inArray(this.value, value) >= 0 || - jQuery.inArray(this.name, value) >= 0); - - else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(value); - - jQuery( "option", this ).each(function(){ - this.selected = (jQuery.inArray( this.value, values ) >= 0 || - jQuery.inArray( this.text, values ) >= 0); - }); - - if ( !values.length ) - this.selectedIndex = -1; - - } else - this.value = value; - }); - }, - - html: function( value ) { - return value === undefined ? - (this[0] ? - this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - return this.after( value ).remove(); - }, - - eq: function( i ) { - return this.slice( i, +i + 1 ); - }, - - slice: function() { - return this.pushStack( Array.prototype.slice.apply( this, arguments ), - "slice", Array.prototype.slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - return this.add( this.prevObject ); - }, - - domManip: function( args, table, callback ) { - if ( this[0] ) { - var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), - scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), - first = fragment.firstChild; - - if ( first ) - for ( var i = 0, l = this.length; i < l; i++ ) - callback.call( root(this[i], first), this.length > 1 || i > 0 ? - fragment.cloneNode(true) : fragment ); - - if ( scripts ) - jQuery.each( scripts, evalScript ); - } - - return this; - - function root( elem, cur ) { - return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } - } -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -function evalScript( i, elem ) { - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); -} - -function now(){ - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) - target = {}; - - // extend jQuery itself if only one argument is passed - if ( length == i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) - // Extend the base object - for ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) - continue; - - // Recurse if we're merging object values - if ( deep && copy && typeof copy === "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - - // Don't bring in undefined values - else if ( copy !== undefined ) - target[ name ] = copy; - - } - - // Return the modified object - return target; -}; - -// exclude the following css properties to add px -var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}, - toString = Object.prototype.toString; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) - window.jQuery = _jQuery; - - return jQuery; - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && /\S/.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - if ( jQuery.support.scriptEval ) - script.appendChild( document.createTextNode( data ) ); - else - script.text = data; - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, length = object.length; - - if ( args ) { - if ( length === undefined ) { - for ( name in object ) - if ( callback.apply( object[ name ], args ) === false ) - break; - } else - for ( ; i < length; ) - if ( callback.apply( object[ i++ ], args ) === false ) - break; - - // A special, fast, case for the most common use of each - } else { - if ( length === undefined ) { - for ( name in object ) - if ( callback.call( object[ name ], name, object[ name ] ) === false ) - break; - } else - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} - } - - return object; - }, - - prop: function( elem, value, type, i, name ) { - // Handle executable functions - if ( jQuery.isFunction( value ) ) - value = value.call( elem, i ); - - // Handle passing in a number to a CSS property - return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? - value + "px" : - value; - }, - - className: { - // internal only, use addClass("class") - add: function( elem, classNames ) { - jQuery.each((classNames || "").split(/\s+/), function(i, className){ - if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) - elem.className += (elem.className ? " " : "") + className; - }); - }, - - // internal only, use removeClass("class") - remove: function( elem, classNames ) { - if (elem.nodeType == 1) - elem.className = classNames !== undefined ? - jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); - }).join(" ") : - ""; - }, - - // internal only, use hasClass("class") - has: function( elem, className ) { - return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var old = {}; - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( var name in options ) - elem.style[ name ] = old[ name ]; - }, - - css: function( elem, name, force, extra ) { - if ( name == "width" || name == "height" ) { - var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - - function getWH() { - val = name == "width" ? elem.offsetWidth : elem.offsetHeight; - - if ( extra === "border" ) - return; - - jQuery.each( which, function() { - if ( !extra ) - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - if ( extra === "margin" ) - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - else - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - }); - } - - if ( elem.offsetWidth !== 0 ) - getWH(); - else - jQuery.swap( elem, props, getWH ); - - return Math.max(0, Math.round(val)); - } - - return jQuery.curCSS( elem, name, force ); - }, - - curCSS: function( elem, name, force ) { - var ret, style = elem.style; - - // We need to handle opacity special in IE - if ( name == "opacity" && !jQuery.support.opacity ) { - ret = jQuery.attr( style, "opacity" ); - - return ret == "" ? - "1" : - ret; - } - - // Make sure we're using the right name for getting the float value - if ( name.match( /float/i ) ) - name = styleFloat; - - if ( !force && style && style[ name ] ) - ret = style[ name ]; - - else if ( defaultView.getComputedStyle ) { - - // Only "float" is needed here - if ( name.match( /float/i ) ) - name = "float"; - - name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle ) - ret = computedStyle.getPropertyValue( name ); - - // We should always get a number back from opacity - if ( name == "opacity" && ret == "" ) - ret = "1"; - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = ret || 0; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } - } - - return ret; - }, - - clean: function( elems, context, fragment ) { - context = context || document; - - // !context.createElement fails in IE with an error but returns typeof 'object' - if ( typeof context.createElement === "undefined" ) - context = context.ownerDocument || context[0] && context[0].ownerDocument || document; - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { - var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); - if ( match ) - return [ context.createElement( match[1] ) ]; - } - - var ret = [], scripts = [], div = context.createElement("div"); - - jQuery.each(elems, function(i, elem){ - if ( typeof elem === "number" ) - elem += ''; - - if ( !elem ) - return; - - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? - all : - front + ">"; - }); - - // Trim whitespace, otherwise indexOf won't work as expected - var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); - - var wrap = - // option or optgroup - !tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
" ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and -

<%= fmt.format("Interstitial.welcome") %>

-

<%= fmt.format("UIGlobal.loading") %>

- <% - if(safeReplayUrl != null && prettyReplayDate != null) { - %> -

<%= safeReplayUrl %>

-

<%= fmt.format("Interstitial.closeToDate") %>

-

<%= prettyReplayDate %>

-

<%= fmt.format("Interstitial.available") %>

- <% - } - %> -

<%= fmt.format("UIGlobal.impatient") %>

-<% -} -%> - - - -
- - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/jsp/QueryUI/Redirect.jsp b/bundledApps/tomcat/webapps/ROOT/jsp/QueryUI/Redirect.jsp deleted file mode 100644 index b6f1160e..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jsp/QueryUI/Redirect.jsp +++ /dev/null @@ -1,15 +0,0 @@ -<%@ page import="org.archive.wayback.util.bdb.BDBMap" %> -<% -String url = request.getParameter("url"); -String time = request.getParameter("time"); - -// Put time-mapping for this id, or if no id, the ip-addr. -String id = request.getHeader("Proxy-Id"); -if(id == null) { - id = request.getRemoteAddr(); -} -BDBMap.addTimestampForId(request.getContextPath(),id, time); - -// Now redirect to the page the user wanted. -response.sendRedirect(url); -%> diff --git a/bundledApps/tomcat/webapps/ROOT/jsp/graph.jsp b/bundledApps/tomcat/webapps/ROOT/jsp/graph.jsp deleted file mode 100644 index f6931dd0..00000000 --- a/bundledApps/tomcat/webapps/ROOT/jsp/graph.jsp +++ /dev/null @@ -1,26 +0,0 @@ -<%@ -page import="java.util.Date" -%><%@ -page import="org.archive.wayback.util.graph.Graph" -%><%@ -page import="org.archive.wayback.util.graph.GraphRenderer" -%><%@ -page import="org.archive.wayback.util.graph.GraphEncoder" -%><% -Date now = new Date(); -String arg = request.getParameter("graphdata"); -String noMonthArg = request.getParameter("nomonth"); -boolean noMonth = (noMonthArg != null); -if(arg == null) { - arg = "(No Data specified)"; -} -GraphRenderer r = new GraphRenderer(); -response.setContentType(GraphRenderer.RENDERED_IMAGE_MIME); -Graph graph = GraphEncoder.decode(arg,noMonth); -try { - r.render(response.getOutputStream(),graph); -} catch(Exception e) { - e.printStackTrace(System.out); - //e.printStackTrace(response.getWriter()); -} -%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/ROOT/opensearchdescription.xml b/bundledApps/tomcat/webapps/ROOT/opensearchdescription.xml deleted file mode 100644 index 71ac4c9f..00000000 --- a/bundledApps/tomcat/webapps/ROOT/opensearchdescription.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - OpenWayback - OpenWayback Search Result RSS feed. - openwayback rss - - diff --git a/bundledApps/tomcat/webapps/bin/bdb-client b/bundledApps/tomcat/webapps/bin/bdb-client deleted file mode 100755 index 4d1581b3..00000000 --- a/bundledApps/tomcat/webapps/bin/bdb-client +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script creates a CDX file for all ARC files in a directory -## PUTs those CDX files into a remote pipeline, and informs a remote -## LocationDB of the locations of all the ARC files. -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.resourceindex.bdb.BDBIndex' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/bdb-client.bat b/bundledApps/tomcat/webapps/bin/bdb-client.bat deleted file mode 100644 index db0f0ebb..00000000 --- a/bundledApps/tomcat/webapps/bin/bdb-client.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.resourceindex.bdb.BDBIndex -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/bin-search b/bundledApps/tomcat/webapps/bin/bin-search deleted file mode 100755 index fcfa286c..00000000 --- a/bundledApps/tomcat/webapps/bin/bin-search +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script creates a CDX file for all ARC files in a directory -## PUTs those CDX files into a remote pipeline, and informs a remote -## LocationDB of the locations of all the ARC files. -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.util.flatfile.FlatFile' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/bin-search.bat b/bundledApps/tomcat/webapps/bin/bin-search.bat deleted file mode 100644 index cae93f07..00000000 --- a/bundledApps/tomcat/webapps/bin/bin-search.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.util.flatfile.FlatFile -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/cdx-indexer b/bundledApps/tomcat/webapps/bin/cdx-indexer deleted file mode 100755 index b0685a42..00000000 --- a/bundledApps/tomcat/webapps/bin/cdx-indexer +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script creates a CDX file for all ARC files in a directory -## PUTs those CDX files into a remote pipeline, and informs a remote -## LocationDB of the locations of all the ARC files. -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.resourcestore.indexer.IndexWorker' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/cdx-indexer.bat b/bundledApps/tomcat/webapps/bin/cdx-indexer.bat deleted file mode 100644 index 94576bec..00000000 --- a/bundledApps/tomcat/webapps/bin/cdx-indexer.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.resourcestore.indexer.IndexWorker -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %1 %2 - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/cdx-sample b/bundledApps/tomcat/webapps/bin/cdx-sample deleted file mode 100755 index 4cc1719e..00000000 --- a/bundledApps/tomcat/webapps/bin/cdx-sample +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; - -my $v = 0; -sub USAGE { - my($msg,$code) = @_; - $msg = "" unless (defined($msg) && length($msg)); - print STDERR <; - while(1) { - my $line = <$fh>; - die "bad line($line) in ($path)" unless length($line); - if($line =~ /^([^:\/]+)[:\/]/) { - print "$1\n"; - last; - } - print STDERR "Skipping wierd line($line)\n"; - } -} -close($fh) or die "FAILED close($path) ($!)"; diff --git a/bundledApps/tomcat/webapps/bin/create-test-arc b/bundledApps/tomcat/webapps/bin/create-test-arc deleted file mode 100755 index 95eb77dd..00000000 --- a/bundledApps/tomcat/webapps/bin/create-test-arc +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script allows querying and updating of a remote LocationDB from the -## command line, including syncronizing the LocationDB with an entire directory -## of ARCs files -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.util.ARCCreator' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/create-test-arc.bat b/bundledApps/tomcat/webapps/bin/create-test-arc.bat deleted file mode 100644 index 65b42086..00000000 --- a/bundledApps/tomcat/webapps/bin/create-test-arc.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.util.ARCCreator -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/location-client b/bundledApps/tomcat/webapps/bin/location-client deleted file mode 100755 index 127b50ba..00000000 --- a/bundledApps/tomcat/webapps/bin/location-client +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script allows querying and updating of a remote LocationDB from the -## command line, including syncronizing the LocationDB with an entire directory -## of ARCs files -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.resourcestore.locationdb.RemoteResourceFileLocationDB' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/location-client.bat b/bundledApps/tomcat/webapps/bin/location-client.bat deleted file mode 100644 index fdc2490a..00000000 --- a/bundledApps/tomcat/webapps/bin/location-client.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.resourcestore.locationdb.RemoteResourceFileLocationDB -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/url-client b/bundledApps/tomcat/webapps/bin/url-client deleted file mode 100755 index 19405cf7..00000000 --- a/bundledApps/tomcat/webapps/bin/url-client +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script allows querying and updating of a remote LocationDB from the -## command line, including syncronizing the LocationDB with an entire directory -## of ARCs files -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.util.url.AggressiveUrlCanonicalizer' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/url-client.bat b/bundledApps/tomcat/webapps/bin/url-client.bat deleted file mode 100644 index 48eadffc..00000000 --- a/bundledApps/tomcat/webapps/bin/url-client.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.util.url.AggressiveUrlCanonicalizer -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/warc-header b/bundledApps/tomcat/webapps/bin/warc-header deleted file mode 100755 index 0fe82bae..00000000 --- a/bundledApps/tomcat/webapps/bin/warc-header +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env sh -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main ArcIndexer class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.util.WARCHeader' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/warc-header.bat b/bundledApps/tomcat/webapps/bin/warc-header.bat deleted file mode 100644 index c075e274..00000000 --- a/bundledApps/tomcat/webapps/bin/warc-header.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.util.WARCHeader -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/zipline-manifest b/bundledApps/tomcat/webapps/bin/zipline-manifest deleted file mode 100755 index 40f37690..00000000 --- a/bundledApps/tomcat/webapps/bin/zipline-manifest +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script allows querying and updating of a remote LocationDB from the -## command line, including syncronizing the LocationDB with an entire directory -## of ARCs files -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.resourceindex.ziplines.ZiplinesChunkIterator' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/zipline-manifest.bat b/bundledApps/tomcat/webapps/bin/zipline-manifest.bat deleted file mode 100644 index c24787f8..00000000 --- a/bundledApps/tomcat/webapps/bin/zipline-manifest.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.resourceindex.ziplines.ZiplinesChunkIterator -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/bin/zl-bin-search b/bundledApps/tomcat/webapps/bin/zl-bin-search deleted file mode 100755 index 1d489289..00000000 --- a/bundledApps/tomcat/webapps/bin/zl-bin-search +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env sh -## -## This script creates a CDX file for all ARC files in a directory -## PUTs those CDX files into a remote pipeline, and informs a remote -## LocationDB of the locations of all the ARC files. -## -## Optional environment variables -## -## JAVA_HOME Point at a JDK install to use. -## -## WAYBACK_HOME Pointer to your wayback install. If not present, we -## make an educated guess based of position relative to this -## script. -## -## JAVA_OPTS Java runtime options. Default setting is '-Xmx256m'. -## - -# Resolve links - $0 may be a softlink -PRG="$0" -while [ -h "$PRG" ]; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '.*/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`/"$link" - fi -done -PRGDIR=`dirname "$PRG"` - -# Set WAYBACK_HOME. -if [ -z "$WAYBACK_HOME" ] -then - WAYBACK_HOME=`cd "$PRGDIR/.." ; pwd` -fi - -# Find JAVA_HOME. -if [ -z "$JAVA_HOME" ] -then - JAVA=`which java` - if [ -z "$JAVA" ] - then - echo "Cannot find JAVA. Please set JAVA_HOME or your PATH." - exit 1 - fi - JAVA_BINDIR=`dirname $JAVA` - JAVA_HOME=$JAVA_BINDIR/.. -fi - -if [ -z "$JAVACMD" ] -then - # It may be defined in env - including flags!! - JAVACMD=$JAVA_HOME/bin/java -fi - -# Ignore previous classpath. Build one that contains heritrix jar and content -# of the lib directory into the variable CP. -for jar in `ls $WAYBACK_HOME/lib/*.jar $WAYBACK_HOME/*.jar 2> /dev/null` -do - CP=${CP}:${jar} -done - -# cygwin path translation -if expr `uname` : 'CYGWIN*' > /dev/null; then - CP=`cygpath -p -w "$CP"` - WAYBACK_HOME=`cygpath -p -w "$WAYBACK_HOME"` -fi - -# Make sure of java opts. -if [ -z "$JAVA_OPTS" ] -then - JAVA_OPTS=" -Xmx256m" -fi - -# Main class. -if [ -z "$CLASS_MAIN" ] -then - CLASS_MAIN='org.archive.wayback.resourceindex.ziplines.ZiplinesSearchResultSource' -fi - -CLASSPATH=${CP} $JAVACMD ${JAVA_OPTS} $CLASS_MAIN "$@" - diff --git a/bundledApps/tomcat/webapps/bin/zl-bin-search.bat b/bundledApps/tomcat/webapps/bin/zl-bin-search.bat deleted file mode 100644 index a9a66b3f..00000000 --- a/bundledApps/tomcat/webapps/bin/zl-bin-search.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo OFF -@setlocal - -set PRGDIR=%cd% -set JAVA_OPTS=-Xmx256m -set main=org.archive.wayback.resourceindex.ziplines.ZiplinesSearchResultSource -set cp= -set "resolveDir=%~dp0..\lib" -set "jh=%~dp0..\..\..\openjdk" -set "jcmd=%~dp0..\..\..\openjdk\bin\java" -set "jreh=%~dp0..\..\..\openjdk\jre" -set "wbh=%~dp0.." - -call :resolve "%resolveDir%" libDir -call :resolve "%jh%" JAVA_HOME -call :resolve "%jcmd%" JAVACMD -call :resolve "%jreh%" JRE_HOME -call :resolve "%wbh%" WAYBACK_HOME - -pushd %libDir% -REM chdir %libDir% -for %%f in (*.jar) do call :addToPath %libDir%\%%f -popd -REM chdir %PRGDIR% - -%JAVACMD% -cp %cp% %main% %* - -goto end - -:addToPath -set cp=%1;%cp% -goto :eof - -:resolve -set "%~2=%~f1" -goto :eof - -:end -exit /B %errorlevel% diff --git a/bundledApps/tomcat/webapps/docs/BUILDING.txt b/bundledApps/tomcat/webapps/docs/BUILDING.txt deleted file mode 100755 index 9c37046b..00000000 --- a/bundledApps/tomcat/webapps/docs/BUILDING.txt +++ /dev/null @@ -1,380 +0,0 @@ -================================================================================ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -================================================================================ - -$Id: BUILDING.txt 1371983 2012-08-11 17:23:27Z kkolinko $ - - ==================================================== - Building The Apache Tomcat 7.0 Servlet/JSP Container - ==================================================== - -This subproject contains the source code for Tomcat 7.0, a container that -implements the Servlet 3.0 and JSP 2.1 specifications from the Java -Community Process . - -Note: If you just need to run Apache Tomcat, it is not necessary to build -it. You may simply download a binary distribution. It is cross-platform. -Read RUNNING.txt for the instruction on how to run it. - -In order to build a binary distribution version of Apache Tomcat from a -source distribution, do the following: - - -(1) Download and Install a Java Development Kit - - 1. If the JDK is already installed, skip to (2). - - 2. Download a version 6 of Java Development Kit (JDK) release (use the - latest update available for your chosen version) from - - http://www.oracle.com/technetwork/java/javase/downloads/index.html - or from another JDK vendor. - - Note regarding later versions of Java: - - As documented elsewhere, one of components in Apache Tomcat includes - a private copy of the Apache Commons DBCP library. The source code - for this library is downloaded, processed by the build script - (renaming the packages) and compiled. - - Due to changes in JDBC interfaces implemented by the library between - versions of Java SE specification, the library has to target specific - version of Java and can be compiled only with the JDK version - implementing this version of specification. - - See Apache Commons DBCP project web site for more details on - available versions of the library and its requirements, - - http://commons.apache.org/dbcp/ - - If you really want to use a later version of JDK to build Tomcat, - several workarounds are possible. One of them is to skip building - the component (tomcat-dbcp.jar). - - 3. Install the JDK according to the instructions included with the release. - - 4. Set an environment variable JAVA_HOME to the pathname of the directory - into which you installed the JDK release. - - -(2) Install Apache Ant 1.8.x on your computer - - 1. If Apache Ant 1.8.x is already installed on your computer, skip to (3). - - 2. Download a binary distribution of Ant 1.8.x from: - - http://ant.apache.org/bindownload.cgi - - 3. Unpack the binary distribution into a convenient location so that the - Ant release resides in its own directory (conventionally named - "apache-ant-[version]"). - - For the purposes of the remainder of this document, the symbolic name - "${ant.home}" is used to refer to the full pathname of the release - directory. - - 4. Create an ANT_HOME environment variable to point the directory - ${ant.home}. - - 5. Modify the PATH environment variable to include the directory - ${ant.home}/bin in its list. This makes the "ant" command line script - available, which will be used to actually perform the build. - - -(3) Building Tomcat 7.0 - -(3.1) Checkout or obtain the source code for Tomcat 7.0 - -Checkout the source using SVN, selecting a tag for released version or -trunk for the current development code, or download and unpack a source -package. - - * Tomcat SVN repository URL: - - http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/ - - * Source packages can be downloaded from: - - http://tomcat.apache.org/download-70.cgi - -The location where the source has been placed will be further referred as -${tomcat.source}. - -(3.2) Building - - 1. The build is controlled by creating a ${tomcat.source}/build.properties - file. - - It is recommended to always create the file, because of unfortunate - default value of base.path property. You may start with the following - content for the file: - - # ----- Default Base Path for Dependent Packages ----- - # Replace this path with the directory path where dependencies binaries - # should be downloaded - base.path=/home/me/some-place-to-download-to - - 2. Configure base.path property by adding it to the - ${tomcat.source}/build.properties file. - - The base.path property specifies the place where Tomcat dependencies - required by the build are downloaded. It is recommended to place this - directory outside of the source tree, so that you do not waste your - time re-downloading the libraries. - -* WARNING: The default value of base.path property makes the build script - to download libraries required to build Tomcat to the /usr/share/java - directory. On a typical Linux or MacOX system an ordinary user will not - have access to write to this directory. Even if you do have access to - that directory, it is likely not appropriate for you to write there. - - On Windows this usually corresponds to the "C:\usr\share\java" - directory, unless Cygwin is used. - -* NOTE: Users accessing the Internet through a proxy must use the properties - file to indicate to Ant the proxy configuration. - - The following properties should be added to the ${tomcat.source}/build.properties - file. - - proxy.use=on - proxy.host=proxy.domain - proxy.port=8080 - proxy.user=username - proxy.password=password - - See Apache Ant documentation for the task for details. - - 3. Go to the sources directory and run Ant: - - cd ${tomcat.source} - ant - - This will execute the "deploy" target in build.xml. - - Once the build has completed successfully, a usable Tomcat installation - will have been produced in the ${tomcat.source}/output/build directory, - and can be started and stopped with the usual scripts. - - Note that the build includes Tomcat documentation, which can be found - in the output/build/webapps/docs directory. - - The path of the output directory can be controlled by specifying the - "tomcat.output" property in the build.properties file. - -* NOTE: Do not run the build as the root user. Building and running Tomcat - does not require root privileges. - - -(4) Updating sources and rebuilding - -It is recommended that you regularly update the downloaded Tomcat 7.0 -sources using your SVN client. - -For a quick rebuild of only modified code you can use: - - cd ${tomcat.source} - ant - - -(5) Special builds - -Some Tomcat components, that are included in the full release, but are not -built during the default "deploy" build, can also be built separately. - -(5.1) Building API documentation (Javadoc) - -The API documentation can be easily built: - - cd ${tomcat.source} - ant javadoc - -The output of this command will be found in the following directories: - - output/dist/webapps/docs/api - output/dist/webapps/docs/elapi - output/dist/webapps/docs/jspapi - output/dist/webapps/docs/servletapi - -(5.2) Building the extras (commons-logging, webservices etc.) - - cd ${tomcat.source} - ant extras - -(5.3) Building the embedded packages - - cd ${tomcat.source} - ant embed - - -(6) Building a full release (as provided via the ASF download pages) - - 1. Configure GPG, if needed - - If the released artifacts have to be cryptographically signed with a - PGP signature, like the official ASF releases are, the following - property can be added to the build.properties file: - - # Location of GPG executable (used only for releases) - gpg.exec=/path/to/gpg - - You do not need it if you do not plan to sign the release. - - If "gpg.exec" property does not point to an existing file, it will be - ignored and this feature will be disabled. - - You will be prompted for the GPG passphrase when the release build - starts, unless "gpg.passphrase" property is set. - - 2. Build the release: - - cd ${tomcat.source} - ant release - - -(7) Tests - -(7.1) Running Tomcat tests - -Tomcat includes a number of junit tests. The tests are not run when a -release is built. There is separate command to run them. - -To run the testsuite use the following command: - - cd ${tomcat.source} - ant test - -It is advisable to redirect output of the above command to a file for later -inspection. - -The JUnit reports generated by the tests will be written to the following -directory: - - output/build/logs - - -By default the testsuite is run three times to test 3 different -implementations of Tomcat connectors: BIO, NIO and APR. (If you are not -familiar with Tomcat connectors, see config/http.html in documentation for -details). - -The 3 runs are enabled and disabled individually by the following -properties, which all are "true" by default: - - execute.test.bio=true - execute.test.nio=true - execute.test.apr=true - -The APR connector can be tested only if Tomcat-Native library binaries are -found by the testsuite. The "test.apr.loc" property specifies the directory -where the library binaries are located. - -By default the "test.apr.loc" property specifies the following location: - - output/build/bin/native/ - -If you are on Windows and want to test the APR connector you can put the -tcnative-1.dll file into ${tomcat.source}/bin/native/ and it will be copied -into the above directory when the build runs. - - -(7.2) Running a single test - -It is possible to run a single JUnit test class by adding the "test.entry" -property to the build.properties file. The property specifies the name of -the test class. - -For example: - - test.entry=org.apache.catalina.util.TestServerInfo - - -(7.3) Other configuration options - - 1. It is possible to enable generation of access log file when the tests - are run. This is off by default and can be enabled by the following - property: - - test.accesslog=true - - The "access_log." file will be written to the same directory as - JUnit reports, - - output/build/logs - - 2. The testsuite respects logging configuration as configured by - ${tomcat.source}/conf/logging.properties - - The log files will be written to the temporary directory used by the - tests, - - output/test-tmp/logs - - 3. It is possible to configure formatter used by JUnit reports. For - example the following property disables generation of separate report - files: - - junit.formatter.usefile=false - - -(8) Source code checks - -(8.1) Checkstyle - -* NOTE: Checkstyle is licensed under LGPL. Using Checkstyle during Tomcat - build is optional and is off by default. - -Tomcat comes with a Checkstyle configuration that tests its source code -for certain conventions, like presence of the license header. - -To enable Checkstyle, add the following property to build.properties file: - - execute.validate=true - -Once Checkstyle is enabled, the check will be performed automatically -during the build. The check is run before compilation of the source code. - -To speed-up repeated runs of this check, a cache is configured. The cache -is located in the following directory: - - output/res/checkstyle - -It is possible to run the check separately by invoking the "validate" -target. The command is: - - cd ${tomcat.source} - ant -Dexecute.validate=true validate - - -(8.2) End-of-line conventions check - -You usually would not need to run this check. You can skip this section. - -Apache Tomcat project has convention that all of its textual source files, -stored in Subversion repository, are marked with Subversion property -"svn:eol-style" with value of "native". This convention makes the editing -of source code on different platforms easier. - -This test is used by developers to check that the source code adheres to -this convention. It verifies that the ends of lines in textual files are -appropriate for the operating system where it is run. The idea is to run -this check regularly on two different platforms and notify developers when -an inconsistency is detected. - -The command to run this test is: - - cd ${tomcat.source} - ant validate-eoln diff --git a/bundledApps/tomcat/webapps/docs/RELEASE-NOTES.txt b/bundledApps/tomcat/webapps/docs/RELEASE-NOTES.txt deleted file mode 100755 index 6fe3c984..00000000 --- a/bundledApps/tomcat/webapps/docs/RELEASE-NOTES.txt +++ /dev/null @@ -1,228 +0,0 @@ -================================================================================ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -================================================================================ - -$Id: RELEASE-NOTES 1189163 2011-10-26 12:19:26Z kkolinko $ - - - Apache Tomcat Version 7.0.30 - Release Notes - - -========= -CONTENTS: -========= - -* Dependency Changes -* API Stability -* JNI Based Applications -* Bundled APIs -* Web application reloading and static fields in shared libraries -* Tomcat on Linux -* Enabling SSI and CGI Support -* Security manager URLs -* Symlinking static resources -* Viewing the Tomcat Change Log -* Cryptographic software notice -* When all else fails - - -=================== -Dependency Changes: -=================== -Tomcat 7.0 is designed to run on Java SE 6 and later. - -In addition, Tomcat 7.0 uses the Eclipse JDT Java compiler for -compiling JSP pages. This means you no longer need to have the complete -Java Development Kit (JDK) to run Tomcat, but a Java Runtime Environment -(JRE) is sufficient. The Eclipse JDT Java compiler is bundled with the -binary Tomcat distributions. Tomcat can also be configured to use the -compiler from the JDK to compile JSPs, or any other Java compiler supported -by Apache Ant. - - -============== -API Stability: -============== -The public interfaces for the following classes are fixed and will not be -changed at all during the remaining lifetime of the 7.x series: -- javax/**/* - -The public interfaces for the following classes may be added to in order to -resolve bugs and/or add new features. No existing interface will be removed or -changed although it may be deprecated. -- org/apache/catalina/* -- org/apache/catalina/comet/* - -Note: As Tomcat 7 matures, the above list will be added to. The list is not - considered complete at this time. - -The remaining classes are considered part of the Tomcat internals and may change -without notice between point releases. - - -======================= -JNI Based Applications: -======================= -Applications that require native libraries must ensure that the libraries have -been loaded prior to use. Typically, this is done with a call like: - - static { - System.loadLibrary("path-to-library-file"); - } - -in some class. However, the application must also ensure that the library is -not loaded more than once. If the above code were placed in a class inside -the web application (i.e. under /WEB-INF/classes or /WEB-INF/lib), and the -application were reloaded, the loadLibrary() call would be attempted a second -time. - -To avoid this problem, place classes that load native libraries outside of the -web application, and ensure that the loadLibrary() call is executed only once -during the lifetime of a particular JVM. - - -============= -Bundled APIs: -============= -A standard installation of Tomcat 7.0 makes all of the following APIs available -for use by web applications (by placing them in "lib"): -* annotations-api.jar (Annotations package) -* catalina.jar (Tomcat Catalina implementation) -* catalina-ant.jar (Tomcat Catalina Ant tasks) -* catalina-ha.jar (High availability package) -* catalina-tribes.jar (Group communication) -* ecj-3.7.2.jar (Eclipse JDT Java compiler) -* el-api.jar (EL 2.2 API) -* jasper.jar (Jasper 2 Compiler and Runtime) -* jasper-el.jar (Jasper 2 EL implementation) -* jsp-api.jar (JSP 2.2 API) -* servlet-api.jar (Servlet 3.0 API) -* tomcat-api.jar (Interfaces shared by Catalina and Jasper) -* tomcat-coyote.jar (Tomcat connectors and utility classes) -* tomcat-dbcp.jar (package renamed database connection pool based on Commons DBCP) - -You can make additional APIs available to all of your web applications by -putting unpacked classes into a "classes" directory (not created by default), -or by placing them in JAR files in the "lib" directory. - -To override the XML parser implementation or interfaces, use the endorsed -mechanism of the JVM. The default configuration defines JARs located in -"endorsed" as endorsed. - - -================================================================ -Web application reloading and static fields in shared libraries: -================================================================ -Some shared libraries (many are part of the JDK) keep references to objects -instantiated by the web application. To avoid class loading related problems -(ClassCastExceptions, messages indicating that the classloader -is stopped, etc.), the shared libraries state should be reinitialized. - -Something which might help is to avoid putting classes which would be -referenced by a shared static field in the web application classloader, -and putting them in the shared classloader instead (JARs should be put in the -"lib" folder, and classes should be put in the "classes" folder). - - -================ -Tomcat on Linux: -================ -GLIBC 2.2 / Linux 2.4 users should define an environment variable: -export LD_ASSUME_KERNEL=2.2.5 - -Redhat Linux 9.0 users should use the following setting to avoid -stability problems: -export LD_ASSUME_KERNEL=2.4.1 - -There are some Linux bugs reported against the NIO sendfile behavior, make sure you -have a JDK that is up to date, or disable sendfile behavior in the Connector.
-6427312: (fc) FileChannel.transferTo() throws IOException "system call interrupted"
-5103988: (fc) FileChannel.transferTo should return -1 for EAGAIN instead throws IOException
-6253145: (fc) FileChannel.transferTo on Linux fails when going beyond 2GB boundary
-6470086: (fc) FileChannel.transferTo(2147483647, 1, channel) cause "Value too large" exception
- - -============================= -Enabling SSI and CGI Support: -============================= -Because of the security risks associated with CGI and SSI available -to web applications, these features are disabled by default. - -To enable and configure CGI support, please see the cgi-howto.html page. - -To enable and configue SSI support, please see the ssi-howto.html page. - - -====================== -Security manager URLs: -====================== -In order to grant security permissions to JARs located inside the -web application repository, use URLs of of the following format -in your policy file: - -file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar - - -============================ -Symlinking static resources: -============================ -By default, Unix symlinks will not work when used in a web application to link -resources located outside the web application root directory. - -This behavior is optional, and the "allowLinking" flag may be used to disable -the check. - - -============================== -Viewing the Tomcat Change Log: -============================== -See changelog.html in this directory. - - -============================= -Cryptographic software notice -============================= -This distribution includes cryptographic software. The country in -which you currently reside may have restrictions on the import, -possession, use, and/or re-export to another country, of -encryption software. BEFORE using any encryption software, please -check your country's laws, regulations and policies concerning the -import, possession, or use, and re-export of encryption software, to -see if this is permitted. See for more -information. - -The U.S. Government Department of Commerce, Bureau of Industry and -Security (BIS), has classified this software as Export Commodity -Control Number (ECCN) 5D002.C.1, which includes information security -software using or performing cryptographic functions with asymmetric -algorithms. The form and manner of this Apache Software Foundation -distribution makes it eligible for export under the License Exception -ENC Technology Software Unrestricted (TSU) exception (see the BIS -Export Administration Regulations, Section 740.13) for both object -code and source code. - -The following provides more details on the included cryptographic -software: - - Tomcat includes code designed to work with JSSE - - Tomcat includes code designed to work with OpenSSL - - -==================== -When all else fails: -==================== -See the FAQ -http://tomcat.apache.org/faq/ diff --git a/bundledApps/tomcat/webapps/docs/RUNNING.txt b/bundledApps/tomcat/webapps/docs/RUNNING.txt deleted file mode 100755 index 7d31b352..00000000 --- a/bundledApps/tomcat/webapps/docs/RUNNING.txt +++ /dev/null @@ -1,454 +0,0 @@ -================================================================================ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -================================================================================ - -$Id: RUNNING.txt 1348594 2012-06-10 14:03:04Z kkolinko $ - - =================================================== - Running The Apache Tomcat 7.0 Servlet/JSP Container - =================================================== - -Apache Tomcat 7.0 requires a Java Standard Edition Runtime -Environment (JRE) version 6.0 or later. - -============================= -Running With JRE 6.0 Or Later -============================= - -(1) Download and Install a Java SE Runtime Environment (JRE) - -(1.1) Download a Java SE Runtime Environment (JRE), - release version 6.0 or later, from - http://www.oracle.com/technetwork/java/javase/downloads/index.html - -(1.2) Install the JRE according to the instructions included with the - release. - - You may also use a full Java Development Kit (JDK) rather than just - a JRE. - - -(2) Download and Install Apache Tomcat - -(2.1) Download a binary distribution of Tomcat from: - - http://tomcat.apache.org/ - -(2.2) Unpack the binary distribution so that it resides in its own - directory (conventionally named "apache-tomcat-[version]"). - - For the purposes of the remainder of this document, the name - "CATALINA_HOME" is used to refer to the full pathname of that - directory. - -NOTE: As an alternative to downloading a binary distribution, you can -create your own from the Tomcat source code, as described in -"BUILDING.txt". You can either - - a) Do the full "release" build and find the created distribution in the - "output/release" directory and then proceed with unpacking as above, or - - b) Do a simple build and use the "output/build" directory as - "CATALINA_HOME". Be warned that there are some differences between the - contents of the "output/build" directory and a full "release" - distribution. - - -(3) Configure Environment Variables - -Tomcat is a Java application and does not use environment variables. The -variables are used by the Tomcat startup scripts. The scripts use the variables -to prepare the command that starts Tomcat. - -(3.1) Set CATALINA_HOME (required) and CATALINA_BASE (optional) - -The CATALINA_HOME and CATALINA_BASE environment variables are used to -specify the location of Apache Tomcat and the location of its active -configuration, respectively. - -The CATALINA_HOME environment variable should be set as defined in (2.2) -above. The Tomcat startup scripts have some logic to set this variable -automatically if it is absent (based on the location of the script in -Unixes and on the current directory in Windows), but this logic might not work -in all circumstances. - -The CATALINA_BASE environment variable is optional and is further described -in the "Multiple Tomcat Instances" section below. If it is absent, it defaults -to be equal to CATALINA_HOME. - - -(3.2) Set JRE_HOME or JAVA_HOME (required) - -The JRE_HOME variable is used to specify location of a JRE that is used to -start Tomcat. - -The JAVA_HOME variable is used to specify location of a JDK. It is used instead -of JRE_HOME. - -Using JAVA_HOME provides access to certain additional startup options that -are not allowed when JRE_HOME is used. - -If both JRE_HOME and JAVA_HOME are specified, JRE_HOME is used. - - -(3.3) Other variables (optional) - -Other environment variables exist, besides the four described above. -See the comments at the top of catalina.bat or catalina.sh scripts for -the list and a description of each of them. - -One frequently used variable is CATALINA_OPTS. It allows specification of -additional options for the java command that starts Tomcat. - -See the Java documentation for the options that affect the Java Runtime -Environment. - -See the "System Properties" page in the Tomcat Configuration Reference for -the system properties that are specific to Tomcat. - -A similar variable is JAVA_OPTS. It is used less frequently. It allows -specification of options that are used both to start and to stop Tomcat as well -as for other commands. - -Do not use JAVA_OPTS to specify memory limits. You do not need much memory -for a small process that is used to stop Tomcat. Those settings belong to -CATALINA_OPTS. - -Another frequently used variable is CATALINA_PID (on *nix platforms only). It -specifies the location of the file where process id of the forked Tomcat java -process will be written. This setting is optional. It will enable the -following features: - - - better protection against duplicate start attempts and - - allows forceful termination of Tomcat process when it does not react to - the standard shutdown command. - - -(3.4) setenv script (optional) - -Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can -be specified in the "setenv" script. - -The script is named setenv.bat (Windows) or setenv.sh (*nix). It can be -placed either into CATALINA_BASE/bin or into CATALINA_HOME/bin. The file -has to be readable. - -By default the setenv script file is absent. If the setenv script is -present both in CATALINA_BASE and in CATALINA_HOME, the one in -CATALINA_BASE is used. - -For example, to configure the JRE_HOME and CATALINA_PID variables you can -create the following script file: - -On Windows, %CATALINA_BASE%\bin\setenv.bat: - - set "JRE_HOME=%ProgramFiles%\Java\jre6" - exit /b 0 - -On Unix, $CATALINA_BASE/bin/setenv.sh: - - JRE_HOME=/usr/java/latest - CATALINA_PID="$CATALINA_BASE/tomcat.pid" - -You cannot configure CATALINA_HOME and CATALINA_BASE variables in the -setenv script, because they are used to find that file. - - -(4) Start Up Tomcat - -(4.1) Tomcat can be started by executing one of the following commands: - - %CATALINA_HOME%\bin\startup.bat (Windows) - - $CATALINA_HOME/bin/startup.sh (Unix) - - or - - %CATALINA_HOME%\bin\catalina.bat start (Windows) - - $CATALINA_HOME/bin/catalina.sh start (Unix) - -(4.2) After startup, the default web applications included with Tomcat will be - available by visiting: - - http://localhost:8080/ - -(4.3) Further information about configuring and running Tomcat can be found in - the documentation included here, as well as on the Tomcat web site: - - http://tomcat.apache.org/ - - -(5) Shut Down Tomcat - -(5.1) Tomcat can be shut down by executing one of the following commands: - - %CATALINA_HOME%\bin\shutdown.bat (Windows) - - $CATALINA_HOME/bin/shutdown.sh (Unix) - - or - - %CATALINA_HOME%\bin\catalina.bat stop (Windows) - - $CATALINA_HOME/bin/catalina.sh stop (Unix) - -================================================== -Advanced Configuration - Multiple Tomcat Instances -================================================== - -In many circumstances, it is desirable to have a single copy of a Tomcat -binary distribution shared among multiple users on the same server. To make -this possible, you can set the CATALINA_BASE environment variable to the -directory that contains the files for your 'personal' Tomcat instance. - -When running with a separate CATALINA_HOME and CATALINA_BASE, the files -and directories are split as following: - -In CATALINA_BASE: - - * bin - Only the following files: - - * setenv.sh (*nix) or setenv.bat (Windows), - * tomcat-juli.jar - - The setenv scripts were described above. The tomcat-juli library - is documented in the Logging chapter in the User Guide. - - * conf - Server configuration files (including server.xml) - - * lib - Libraries and classes, as explained below - - * logs - Log and output files - - * webapps - Automatically loaded web applications - - * work - Temporary working directories for web applications - - * temp - Directory used by the JVM for temporary files (java.io.tmpdir) - - -In CATALINA_HOME: - - * bin - Startup and shutdown scripts - - The following files will be used only if they are absent in - CATALINA_BASE/bin: - - setenv.sh (*nix), setenv.bat (Windows), tomcat-juli.jar - - * lib - Libraries and classes, as explained below - - * endorsed - Libraries that override standard "Endorsed Standards" - libraries provided by JRE. See Classloading documentation - in the User Guide for details. - - By default this "endorsed" directory is absent. - -In the default configuration the JAR libraries and classes both in -CATALINA_BASE/lib and in CATALINA_HOME/lib will be added to the common -classpath, but the ones in CATALINA_BASE will be added first and thus will -be searched first. - -The idea is that you may leave the standard Tomcat libraries in -CATALINA_HOME/lib and add other ones such as database drivers into -CATALINA_BASE/lib. - -In general it is advised to never share libraries between web applications, -but put them into WEB-INF/lib directories inside the applications. See -Classloading documentation in the User Guide for details. - - -It might be useful to note that the values of CATALINA_HOME and -CATALINA_BASE can be referenced in the XML configuration files processed -by Tomcat as ${catalina.home} and ${catalina.base} respectively. - -For example, the standard manager web application can be kept in -CATALINA_HOME/webapps/manager and loaded into CATALINA_BASE by using -the following trick: - - * Copy the CATALINA_HOME/webapps/manager/META-INF/context.xml - file as CATALINA_BASE/conf/Catalina/localhost/manager.xml - - * Add docBase attribute as shown below. - -The file will look like the following: - - - - - -See Deployer chapter in User Guide and Context and Host chapters in the -Configuration Reference for more information on contexts and web -application deployment. - - -================ -Troubleshooting -================ - -There are only really 2 things likely to go wrong during the stand-alone -Tomcat install: - -(1) The most common hiccup is when another web server (or any process for that - matter) has laid claim to port 8080. This is the default HTTP port that - Tomcat attempts to bind to at startup. To change this, open the file: - - $CATALINA_HOME/conf/server.xml - - and search for '8080'. Change it to a port that isn't in use, and is - greater than 1024, as ports less than or equal to 1024 require superuser - access to bind under UNIX. - - Restart Tomcat and you're in business. Be sure that you replace the "8080" - in the URL you're using to access Tomcat. For example, if you change the - port to 1977, you would request the URL http://localhost:1977/ in your - browser. - -(2) The 'localhost' machine isn't found. This could happen if you're behind a - proxy. If that's the case, make sure the proxy configuration for your - browser knows that you shouldn't be going through the proxy to access the - "localhost". - - In Firefox, this is under Tools/Preferences -> Advanced/Network -> - Connection -> Settings..., and in Internet Explorer it is Tools -> - Internet Options -> Connections -> LAN Settings. - - -==================== -Optional Components -==================== - -The following optional components may be included with the Apache Tomcat binary -distribution. If they are not included, you can install them separately. - - 1. Apache Tomcat Native library - - 2. Apache Commons Daemon service launcher - -Both of them are implemented in C language and as such have to be compiled -into binary code. The binary code will be specific for a platform and CPU -architecture and it must match the Java Runtime Environment executables -that will be used to launch Tomcat. - -The Windows-specific binary distributions of Apache Tomcat include binary -files for these components. On other platforms you would have to look for -binary versions elsewhere or compile them yourself. - -If you are new to Tomcat, do not bother with these components to start with. -If you do use them, do not forget to read their documentation. - - -Apache Tomcat Native library ------------------------------ - -It is a library that allows to use the "Apr" variant of HTTP and AJP -protocol connectors in Apache Tomcat. It is built around OpenSSL and Apache -Portable Runtime (APR) libraries. Those are the same libraries as used by -Apache HTTPD Server project. - -This feature was especially important in the old days when Java performance -was poor. It is less important nowadays, but it is still used and respected -by many. See Tomcat documentation for more details. - -For further reading: - - - Apache Tomcat documentation - - * Documentation for APR/Native library in the Tomcat User's Guide - - http://tomcat.apache.org/tomcat-7.0-doc/apr.html - - * Documentation for the HTTP and AJP protocol connectors in the Tomcat - Configuration Reference - - http://tomcat.apache.org/tomcat-7.0-doc/config/http.html - - http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html - - - Apache Tomcat Native project home - - http://tomcat.apache.org/native-doc/ - - - Other projects - - * OpenSSL - - http://openssl.org/ - - * Apache Portable Runtime - - http://apr.apache.org/ - - * Apache HTTP Server - - http://httpd.apache.org/ - -To disable Apache Tomcat Native library: - - - To disable Apache Tomcat Native library when it is installed, or - - To remove the warning that is logged during Tomcat startup when the - library is not installed: - - Edit the "conf/server.xml" file and remove "AprLifecycleListener" from - it. - -The binary file of Apache Tomcat Native library is usually named - - - "tcnative-1.dll" on Windows - - "libtcnative-1.so" on *nix systems - - -Apache Commons Daemon ----------------------- - -Apache Commons Daemon project provides wrappers that can be used to -install Apache Tomcat as a service on Windows or as a daemon on *nix -systems. - -The Windows-specific implementation of Apache Commons Daemon is called -"procrun". The *nix-specific one is called "jsvc". - -For further reading: - - - Apache Commons Daemon project - - http://commons.apache.org/daemon/ - - - Apache Tomcat documentation - - * Installing Apache Tomcat - - http://tomcat.apache.org/tomcat-7.0-doc/setup.html - - * Windows service HOW-TO - - http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html - -The binary files of Apache Commons Daemon in Apache Tomcat distributions -for Windows are named: - - - "tomcat7.exe" - - "tomcat7w.exe" - -These files are renamed copies of "prunsrv.exe" and "prunmgr.exe" from -Apache Commons Daemon distribution. The file names have a meaning: they are -used as the service name to register the service in Windows, as well as the -key name to store distinct configuration for this installation of -"procrun". If you would like to install several instances of Tomcat 7.0 -in parallel, you have to further rename those files, using the same naming -scheme. diff --git a/bundledApps/tomcat/webapps/docs/WEB-INF/web.xml b/bundledApps/tomcat/webapps/docs/WEB-INF/web.xml deleted file mode 100755 index dd51ceb2..00000000 --- a/bundledApps/tomcat/webapps/docs/WEB-INF/web.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Tomcat Documentation - - Tomcat Documentation. - - diff --git a/bundledApps/tomcat/webapps/docs/aio.html b/bundledApps/tomcat/webapps/docs/aio.html deleted file mode 100755 index 88495f24..00000000 --- a/bundledApps/tomcat/webapps/docs/aio.html +++ /dev/null @@ -1,324 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Advanced IO and Tomcat

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Advanced IO and Tomcat

Table of Contents
- -
Introduction
- -

- With usage of APR or NIO APIs as the basis of its connectors, Tomcat is - able to provide a number of extensions over the regular blocking IO - as provided with support for the Servlet API. -

- -

- IMPORTANT NOTE: Usage of these features requires using the APR or NIO - HTTP connectors. The classic java.io HTTP connector and the AJP connectors - do not support them. -

- -
Comet support
- -

- Comet support allows a servlet to process IO asynchronously, receiving - events when data is available for reading on the connection (rather than - always using a blocking read), and writing data back on connections - asynchronously (most likely responding to some event raised from some - other source). -

- -
CometEvent
- -

- Servlets which implement the org.apache.catalina.comet.CometProcessor - interface will have their event method invoked rather than the usual service - method, according to the event which occurred. The event object gives - access to the usual request and response objects, which may be used in the - usual way. The main difference is that those objects remain valid and fully - functional at any time between processing of the BEGIN event until processing - an END or ERROR event. - The following event types exist: -

- -
    -
  • EventType.BEGIN: will be called at the beginning - of the processing of the connection. It can be used to initialize any relevant - fields using the request and response objects. Between the end of the processing - of this event, and the beginning of the processing of the end or error events, - it is possible to use the response object to write data on the open connection. - Note that the response object and dependent OutputStream and Writer are still - not synchronized, so when they are accessed by multiple threads, - synchronization is mandatory. After processing the initial event, the request - is considered to be committed.
  • -
  • EventType.READ: This indicates that input data is available, and that one read can be made - without blocking. The available and ready methods of the InputStream or - Reader may be used to determine if there is a risk of blocking: the servlet - should read while data is reported available. When encountering a read error, - the servlet should report it by propagating the exception properly. Throwing - an exception will cause the error event to be invoked, and the connection - will be closed. - Alternately, it is also possible to catch any exception, perform clean up - on any data structure the servlet may be using, and using the close method - of the event. It is not allowed to attempt reading data from the request - object outside of the execution of this method.
    - On some platforms, like Windows, a client disconnect is indicated by a READ event. - Reading from the stream may result in -1, an IOException or an EOFException. - Make sure you properly handle all these three cases. - If you don't catch the IOException, Tomcat will instantly invoke your event chain with an ERROR as - it catches the error for you, and you will be notified of the error at that time. -
  • -
  • EventType.END: End may be called to end the processing of the request. Fields that have - been initialized in the begin method should be reset. After this event has - been processed, the request and response objects, as well as all their dependent - objects will be recycled and used to process other requests. End will also be - called when data is available and the end of file is reached on the request input - (this usually indicates the client has pipelined a request).
  • -
  • EventType.ERROR: Error will be called by the container in the case where an IO exception - or a similar unrecoverable error occurs on the connection. Fields that have - been initialized in the begin method should be reset. After this event has - been processed, the request and response objects, as well as all their dependent - objects will be recycled and used to process other requests.
  • -
- -

- There are some event subtypes which allow finer processing of events (note: some of these - events require usage of the org.apache.catalina.valves.CometConnectionManagerValve valve): -

- -
    -
  • EventSubType.TIMEOUT: The connection timed out (sub type of ERROR); note that this ERROR - type is not fatal, and the connection will not be closed unless the servlet uses the close - method of the event. -
  • -
  • EventSubType.CLIENT_DISCONNECT: The client connection was closed (sub type of ERROR). -
  • -
  • EventSubType.IOEXCEPTION: An IO exception occurred, such as invalid content, for example, - an invalid chunk block (sub type of ERROR). -
  • -
  • EventSubType.WEBAPP_RELOAD: The web application is being reloaded (sub type of END). -
  • -
  • EventSubType.SESSION_END: The servlet ended the session (sub type of END). -
  • -
- -

- As described above, the typical lifecycle of a Comet request will consist in a series of - events such as: BEGIN -> READ -> READ -> READ -> ERROR/TIMEOUT. At any time, the servlet - may end processing of the request by using the close method of the event object. -

- -
- -
CometFilter
- -

- Similar to regular filters, a filter chain is invoked when comet events are processed. - These filters should implement the CometFilter interface (which works in the same way as - the regular Filter interface), and should be declared and mapped in the deployment - descriptor in the same way as a regular filter. The filter chain when processing an event - will only include filters which match all the usual mapping rules, and also implement - the CometFiler interface. -

- -
- -
Example code
- -

- The following pseudo code servlet implements asynchronous chat functionality using the API - described above: -

- -
-public class ChatServlet
-    extends HttpServlet implements CometProcessor {
-
-    protected ArrayList<HttpServletResponse> connections =
-        new ArrayList<HttpServletResponse>();
-    protected MessageSender messageSender = null;
-
-    public void init() throws ServletException {
-        messageSender = new MessageSender();
-        Thread messageSenderThread =
-            new Thread(messageSender, "MessageSender[" + getServletContext().getContextPath() + "]");
-        messageSenderThread.setDaemon(true);
-        messageSenderThread.start();
-    }
-
-    public void destroy() {
-        connections.clear();
-        messageSender.stop();
-        messageSender = null;
-    }
-
-    /**
-     * Process the given Comet event.
-     *
-     * @param event The Comet event that will be processed
-     * @throws IOException
-     * @throws ServletException
-     */
-    public void event(CometEvent event)
-        throws IOException, ServletException {
-        HttpServletRequest request = event.getHttpServletRequest();
-        HttpServletResponse response = event.getHttpServletResponse();
-        if (event.getEventType() == CometEvent.EventType.BEGIN) {
-            log("Begin for session: " + request.getSession(true).getId());
-            PrintWriter writer = response.getWriter();
-            writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
-            writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">");
-            writer.flush();
-            synchronized(connections) {
-                connections.add(response);
-            }
-        } else if (event.getEventType() == CometEvent.EventType.ERROR) {
-            log("Error for session: " + request.getSession(true).getId());
-            synchronized(connections) {
-                connections.remove(response);
-            }
-            event.close();
-        } else if (event.getEventType() == CometEvent.EventType.END) {
-            log("End for session: " + request.getSession(true).getId());
-            synchronized(connections) {
-                connections.remove(response);
-            }
-            PrintWriter writer = response.getWriter();
-            writer.println("</body></html>");
-            event.close();
-        } else if (event.getEventType() == CometEvent.EventType.READ) {
-            InputStream is = request.getInputStream();
-            byte[] buf = new byte[512];
-            do {
-                int n = is.read(buf); //can throw an IOException
-                if (n > 0) {
-                    log("Read " + n + " bytes: " + new String(buf, 0, n)
-                            + " for session: " + request.getSession(true).getId());
-                } else if (n < 0) {
-                    error(event, request, response);
-                    return;
-                }
-            } while (is.available() > 0);
-        }
-    }
-
-    public class MessageSender implements Runnable {
-
-        protected boolean running = true;
-        protected ArrayList<String> messages = new ArrayList<String>();
-
-        public MessageSender() {
-        }
-
-        public void stop() {
-            running = false;
-        }
-
-        /**
-         * Add message for sending.
-         */
-        public void send(String user, String message) {
-            synchronized (messages) {
-                messages.add("[" + user + "]: " + message);
-                messages.notify();
-            }
-        }
-
-        public void run() {
-
-            while (running) {
-
-                if (messages.size() == 0) {
-                    try {
-                        synchronized (messages) {
-                            messages.wait();
-                        }
-                    } catch (InterruptedException e) {
-                        // Ignore
-                    }
-                }
-
-                synchronized (connections) {
-                    String[] pendingMessages = null;
-                    synchronized (messages) {
-                        pendingMessages = messages.toArray(new String[0]);
-                        messages.clear();
-                    }
-                    // Send any pending message on all the open connections
-                    for (int i = 0; i < connections.size(); i++) {
-                        try {
-                            PrintWriter writer = connections.get(i).getWriter();
-                            for (int j = 0; j < pendingMessages.length; j++) {
-                                writer.println(pendingMessages[j] + "<br>");
-                            }
-                            writer.flush();
-                        } catch (IOException e) {
-                            log("IOExeption sending message", e);
-                        }
-                    }
-                }
-
-            }
-
-        }
-
-    }
-
-}
-  
- -
-
Comet timeouts
-

If you are using the NIO connector, you can set individual timeouts for your different comet connections. - To set a timeout, simply set a request attribute like the following code shows: -

CometEvent event.... event.setTimeout(30*1000);
or -
event.getHttpServletRequest().setAttribute("org.apache.tomcat.comet.timeout", new Integer(30 * 1000));
- This sets the timeout to 30 seconds. - Important note: in order to set this timeout, it has to be done on the BEGIN event. - The default value is soTimeout -

-

If you are using the APR connector, all Comet connections will have the same timeout value. It is soTimeout*50 -

-
- -
Asynchronous writes
- -

- When APR or NIO is enabled, Tomcat supports using sendfile to send large static files. - These writes, as soon as the system load increases, will be performed - asynchronously in the most efficient way. Instead of sending a large response using - blocking writes, it is possible to write content to a static file, and write it - using a sendfile code. A caching valve could take advantage of this to cache the - response data in a file rather than store it in memory. Sendfile support is - available if the request attribute org.apache.tomcat.sendfile.support - is set to Boolean.TRUE. -

- -

- Any servlet can instruct Tomcat to perform a sendfile call by setting the appropriate - request attributes. It is also necessary to correctly set the content length - for the response. When using sendfile, it is best to ensure that neither the - request or response have been wrapped, since as the response body will be sent later - by the connector itself, it cannot be filtered. Other than setting the 3 needed - request attributes, the servlet should not send any response data, but it may use - any method which will result in modifying the response header (like setting cookies). -

- -
    -
  • org.apache.tomcat.sendfile.filename: Canonical filename of the file which will be sent as - a String
  • -
  • org.apache.tomcat.sendfile.start: Start offset as a Long
  • -
  • org.apache.tomcat.sendfile.end: End offset as a Long
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/api/index.html b/bundledApps/tomcat/webapps/docs/api/index.html deleted file mode 100755 index 1918deed..00000000 --- a/bundledApps/tomcat/webapps/docs/api/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - API docs - - - - -Tomcat's internal javadoc is not installed by default. Download and install -the "fulldocs" package to get it. - -You can also access the javadoc online in the Tomcat - -documentation bundle. - - - diff --git a/bundledApps/tomcat/webapps/docs/appdev/build.xml.txt b/bundledApps/tomcat/webapps/docs/appdev/build.xml.txt deleted file mode 100755 index 9ce7d20f..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/build.xml.txt +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/docs/appdev/deployment.html b/bundledApps/tomcat/webapps/docs/appdev/deployment.html deleted file mode 100755 index 850f4a14..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/deployment.html +++ /dev/null @@ -1,215 +0,0 @@ -Application Developer's Guide (7.0.30) - Deployment

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Deployment

Table of Contents
- -
Background
- -

Before describing how to organize your source code directories, -it is useful to examine the runtime organization of a web application. -Prior to the Servlet API Specification, version 2.2, there was little -consistency between server platforms. However, servers that conform -to the 2.2 (or later) specification are required to accept a -Web Application Archive in a standard format, which is discussed -further below.

- -

A web application is defined as a hierarchy of directories and files -in a standard layout. Such a hierarchy can be accessed in its "unpacked" -form, where each directory and file exists in the filesystem separately, -or in a "packed" form known as a Web ARchive, or WAR file. The former format -is more useful during development, while the latter is used when you -distribute your application to be installed.

- -

The top-level directory of your web application hierarchy is also the -document root of your application. Here, you will place the HTML -files and JSP pages that comprise your application's user interface. When the -system administrator deploys your application into a particular server, he -or she assigns a context path to your application (a later section -of this manual describes deployment on Tomcat). Thus, if the -system administrator assigns your application to the context path -/catalog, then a request URI referring to -/catalog/index.html will retrieve the index.html -file from your document root.

- -
Standard Directory Layout
- -

To facilitate creation of a Web Application Archive file in the required -format, it is convenient to arrange the "executable" files of your web -application (that is, the files that Tomcat actually uses when executing -your app) in the same organization as required by the WAR format itself. -To do this, you will end up with the following contents in your -application's "document root" directory:

-
    -
  • *.html, *.jsp, etc. - The HTML and JSP pages, along - with other files that must be visible to the client browser (such as - JavaScript, stylesheet files, and images) for your application. - In larger applications you may choose to divide these files into - a subdirectory hierarchy, but for smaller apps, it is generally - much simpler to maintain only a single directory for these files. -

  • -
  • /WEB-INF/web.xml - The Web Application Deployment - Descriptor for your application. This is an XML file describing - the servlets and other components that make up your application, - along with any initialization parameters and container-managed - security constraints that you want the server to enforce for you. - This file is discussed in more detail in the following subsection. -

  • -
  • /WEB-INF/classes/ - This directory contains any Java - class files (and associated resources) required for your application, - including both servlet and non-servlet classes, that are not combined - into JAR files. If your classes are organized into Java packages, - you must reflect this in the directory hierarchy under - /WEB-INF/classes/. For example, a Java class named - com.mycompany.mypackage.MyServlet - would need to be stored in a file named - /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class. -

  • -
  • /WEB-INF/lib/ - This directory contains JAR files that - contain Java class files (and associated resources) required for your - application, such as third party class libraries or JDBC drivers.
  • -
- -

When you install an application into Tomcat (or any other 2.2 or later -Servlet container), the classes in the WEB-INF/classes/ -directory, as well as all classes in JAR files found in the -WEB-INF/lib/ directory, are made visible to other classes -within your particular web application. Thus, if -you include all of the required library classes in one of these places (be -sure to check licenses for redistribution rights for any third party libraries -you utilize), you will simplify the installation of your web application -- -no adjustment to the system class path (or installation of global library -files in your server) will be necessary.

- -

Much of this information was extracted from Chapter 9 of the Servlet -API Specification, version 2.3, which you should consult for more details.

- -
Shared Library Files
- -

Like most servlet containers, Tomcat also supports mechanisms to install -library JAR files (or unpacked classes) once, and make them visible to all -installed web applications (without having to be included inside the web -application itself. The details of how Tomcat locates and shares such -classes are described in the -Class Loader HOW-TO documentation. -The location commonly used within a Tomcat installation for shared code is -$CATALINA_HOME/lib. JAR files placed here are visible both to -web applications and internal Tomcat code. This is a good place to put JDBC -drivers that are required for both your application or internal Tomcat use -(such as for a JDBCRealm).

- -

Out of the box, a standard Tomcat installation includes a variety -of pre-installed shared library files, including:

-
    -
  • The Servlet 3.0 and JSP 2.1 APIs that are fundamental - to writing servlets and JavaServer Pages.

  • -
  • An XML Parser compliant with the JAXP (version 1.2) APIs, so - your application can perform DOM-based or SAX-based processing of - XML documents.

  • -
- -
Web Application Deployment Descriptor
- -

As mentioned above, the /WEB-INF/web.xml file contains the -Web Application Deployment Descriptor for your application. As the filename -extension implies, this file is an XML document, and defines everything about -your application that a server needs to know (except the context path, -which is assigned by the system administrator when the application is -deployed).

- -

The complete syntax and semantics for the deployment descriptor is defined -in Chapter 13 of the Servlet API Specification, version 2.3. Over time, it -is expected that development tools will be provided that create and edit the -deployment descriptor for you. In the meantime, to provide a starting point, -a basic web.xml file -is provided. This file includes comments that describe the purpose of each -included element.

- -

NOTE - The Servlet Specification includes a Document -Type Descriptor (DTD) for the web application deployment descriptor, and -Tomcat enforces the rules defined here when processing your application's -/WEB-INF/web.xml file. In particular, you must -enter your descriptor elements (such as <filter>, -<servlet>, and <servlet-mapping> in -the order defined by the DTD (see Section 13.3).

- -
Tomcat Context Descriptor
- -

A /META-INF/context.xml file can be used to define Tomcat specific -configuration options, such as loggers, data sources, session manager -configuration and more. This XML file must contain one Context element, which -will be considered as if it was the child of the Host element corresponding -to the Host to which the The Tomcat configuration documentation contains -information on the Context element.

- -
Deployment With Tomcat
- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -

In order to be executed, a web application must be deployed on -a servlet container. This is true even during development. -We will describe using Tomcat to provide the execution environment. -A web application can be deployed in Tomcat by one of the following -approaches:

-
    -
  • Copy unpacked directory hierarchy into a subdirectory in directory - $CATALINA_BASE/webapps/. Tomcat will assign a - context path to your application based on the subdirectory name you - choose. We will use this technique in the build.xml - file that we construct, because it is the quickest and easiest approach - during development. Be sure to restart Tomcat after installing or - updating your application. -

  • -
  • Copy the web application archive file into directory - $CATALINA_BASE/webapps/. When Tomcat is started, it will - automatically expand the web application archive file into its unpacked - form, and execute the application that way. This approach would typically - be used to install an additional application, provided by a third party - vendor or by your internal development staff, into an existing - Tomcat installation. NOTE - If you use this approach, - and wish to update your application later, you must both replace the - web application archive file AND delete the expanded - directory that Tomcat created, and then restart Tomcat, in order to reflect - your changes. -

  • -
  • Use the Tomcat "Manager" web application to deploy and undeploy - web applications. Tomcat includes a web application, deployed - by default on context path /manager, that allows you to - deploy and undeploy applications on a running Tomcat server without - restarting it. See the administrator documentation (TODO: hyperlink) - for more information on using the Manager web application.

  • -
  • Use "Manager" Ant Tasks In Your Build Script. Tomcat - includes a set of custom task definitions for the Ant - build tool that allow you to automate the execution of commands to the - "Manager" web application. These tasks are used in the Tomcat deployer. -

  • -
  • Use the Tomcat Deployer. Tomcat includes a packaged tool - bundling the Ant tasks, and can be used to automatically precompile JSPs - which are part of the web application before deployment to the server. -

  • -
- -

Deploying your app on other servlet containers will be specific to each -container, but all containers compatible with the Servlet API Specification -(version 2.2 or later) are required to accept a web application archive file. -Note that other containers are NOT required to accept an -unpacked directory structure (as Tomcat does), or to provide mechanisms for -shared library files, but these features are commonly available.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/index.html b/bundledApps/tomcat/webapps/docs/appdev/index.html deleted file mode 100755 index fb53f9de..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/index.html +++ /dev/null @@ -1,54 +0,0 @@ -Application Developer's Guide (7.0.30) - Table of Contents

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Table of Contents

Preface
- -

This manual includes contributions from many members of the Tomcat Project -developer community. The following authors have provided significant content: -

- - -
Table of Contents
- -

The information presented is divided into the following sections:

-
    -
  • Introduction - - Briefly describes the information covered here, with - links and references to other sources of information.
  • -
  • Installation - - Covers acquiring and installing the required software - components to use Tomcat for web application development.
  • -
  • Deployment Organization - - Discusses the standard directory layout for a web application - (defined in the Servlet API Specification), the Web Application - Deployment Descriptor, and options for integration with Tomcat - in your development environment.
  • -
  • Source Organization - - Describes a useful approach to organizing the source code - directories for your project, and introduces the - build.xml used by Ant to manage compilation.
  • -
  • Development Processes - - Provides brief descriptions of typical development processes - utilizing the recommended deployment and source organizations.
  • -
  • Example Application - - This directory contains a very simple, but functionally complete, - "Hello, World" application built according to the principles - described in this manual. You can use this application to - practice using the described techniques.
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/installation.html b/bundledApps/tomcat/webapps/docs/appdev/installation.html deleted file mode 100755 index 108f9dc7..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/installation.html +++ /dev/null @@ -1,82 +0,0 @@ -Application Developer's Guide (7.0.30) - Installation

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Installation

Installation
- -

In order to use Tomcat for developing web applications, you must first -install it (and the software it depends on). The required steps are outlined -in the following subsections.

- -
JDK
- -

Tomcat 7.0 was designed to run on Java SE 6. -

- -

Compatible JDKs for many platforms (or links to where they can be found) -are available at -http://www.oracle.com/technetwork/java/javase/downloads/index.html.

- -
- -
Tomcat
- -

Binary downloads of the Tomcat server are available from -http://tomcat.apache.org/. -This manual assumes you are using the most recent release -of Tomcat 7. Detailed instructions for downloading and installing -Tomcat are available here.

- -

In the remainder of this manual, example shell scripts assume that you have -set an environment variable CATALINA_HOME that contains the -pathname to the directory in which Tomcat has been installed. Optionally, if -Tomcat has been configured for multiple instances, each instance will have its -own CATALINA_BASE configured.

- -
- - -
Ant
- -

Binary downloads of the Ant build tool are available from -http://ant.apache.org/. -This manual assumes you are using Ant 1.8 or later. The instructions may -also be compatible with other versions, but this has not been tested.

- -

Download and install Ant. -Then, add the bin directory of the Ant distribution to your -PATH environment variable, following the standard practices for -your operating system platform. Once you have done this, you will be able to -execute the ant shell command directly.

- -
- - -
CVS
- -

Besides the required tools described above, you are strongly encouraged -to download and install a source code control system, such as the -Concurrent Version System (CVS), to maintain historical -versions of the source files that make up your web application. Besides -the server, you will also need appropriate client -tools to check out source code files, and check in modified versions.

- -

Detailed instructions for installing and using source code control -applications is beyond the scope of this manual. However, CVS server and -client tools for many platforms (along with documentation) can be downloaded -from http://www.cvshome.org/.

- -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/introduction.html b/bundledApps/tomcat/webapps/docs/appdev/introduction.html deleted file mode 100755 index b7bb6fe9..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/introduction.html +++ /dev/null @@ -1,75 +0,0 @@ -Application Developer's Guide (7.0.30) - Introduction

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Introduction

Overview
- -

Congratulations! You've decided to (or been told to) learn how to -build web applications using servlets and JSP pages, and picked the -Tomcat server to use for your learning and development. But now what -do you do?

- -

This manual is a primer covering the basic steps of using Tomcat to -set up a development environment, organize your source code, and then -build and test your application. It does not discuss architectures or -recommended coding practices for web application development, -or provide in depth instructions on operating the development -tools that are discussed. References to sources of additional information -are included in the following subsections.

- -

The discussion in this manual is aimed at developers who will be using -a text editor along with command line tools to develop and debug their -applications. As such, the recommendations are fairly generic -- but you -should easily be able to apply them in either a Windows-based or Unix-based -development environment. If you are utilizing an Interactive Development -Environment (IDE) tool, you will need to adapt the advice given here to -the details of your particular environment.

- -
Links
- -

The following links provide access to selected sources of online -information, documentation, and software that is useful in developing -web applications with Tomcat.

-
    -
  • http://java.sun.com/products/jsp/ - - JavaServer Pages (JSP) Specification, Version 2.0. Describes - the programming environment provided by standard implementations - of the JavaServer Pages (JSP) technology. In conjunction with - the Servlet API Specification (see below), this document describes - what a portable API page is allowed to contain. Specific - information on scripting (Chapter 6), tag extensions (Chapter 7), - and packaging JSP pages (Appendix A) is useful. The Javadoc - API Documentation is included in the specification, and with the - Tomcat download.

  • -
  • http://java.sun.com/products/servlet/download.html - - Servlet API Specification, Version 3.0. Describes the - programming environment that must be provided by all servlet - containers conforming to this specification. In particular, you - will need this document to understand the web application - directory structure and deployment file (Chapter 9), methods of - mapping request URIs to servlets (Chapter 11), container managed - security (Chapter 12), and the syntax of the web.xml - Web Application Deployment Descriptor (Chapter 13). The Javadoc - API Documentation is included in the specification, and with the - Tomcat download.

  • -
  • http://java.sun.com/j2ee/blueprints/ - - Sun BluePrints (tm) Design Guidelines for J2EE. Comprehensive - advice and examples on application design for the Java2 Enterprise - Edition (J2EE) platform, which includes servlets and JSP pages. The - chapters on servlet and JSP design are useful even when your application - does not require other J2EE platform components. -

  • -
  • TODO -- Add more entries here!
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/processes.html b/bundledApps/tomcat/webapps/docs/appdev/processes.html deleted file mode 100755 index 6f77409c..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/processes.html +++ /dev/null @@ -1,296 +0,0 @@ -Application Developer's Guide (7.0.30) - Development Processes

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Development Processes

Table of Contents
- -
Development Processes
- -

Although application development can take many forms, this manual proposes -a fairly generic process for creating web applications using Tomcat. The -following sections highlight the commands and tasks that you, as the developer -of the code, will perform. The same basic approach works when you have -multiple programmers involved, as long as you have an appropriate source code -control system and internal team rules about who is working on what parts -of the application at any given time.

- -

The task descriptions below assume that you will be using CVS for source -code control, and that you have already configured access to the appropriate -CVS repository. Instructions for doing this are beyond the scope of this -manual. If you are using a different source code control environment, you -will need to figure out the corresponding commands for your system.

- - -
One-Time Setup of Ant and Tomcat for Development
- -

In order to take advantage of the special Ant tasks that interact with the -Manager web application, you need to perform the following tasks -once (no matter how many web applications you plan to develop).

-
    -
  • Configure the Ant custom tasks. The implementation code for the - Ant custom tasks is in a JAR file named - $CATALINA_HOME/lib/catalina-ant.jar, which must be - copied in to the lib directory of your Ant installation. -

  • -
  • Define one or more Tomcat users. The Manager web - application runs under a security constraint that requires a user to be - logged in, and have the security role manager-script assigned - to him or her. How such users are defined depends on which Realm you have - configured in Tomcat's conf/server.xml file -- see the - Realm Configuration HOW-TO for more - information. You may define any number of users (with any username - and password that you like) with the manager-script role. -

  • -
- -
- - -
Create Project Source Code Directory
- -

The first step is to create a new project source directory, and customize -the build.xml and build.properties files you will -be using. The directory structure is described in the -previous section, or you can use the -sample application as a starting point.

- -

Create your project source directory, and define it within your CVS -repository. This might be done by a series of commands like this, where -{project} is the name under which your project should be -stored in the CVS repository, and {username} is your login username:

-
-cd {my home directory}
-mkdir myapp <-- Assumed "project source directory"
-cd myapp
-mkdir docs
-mkdir src
-mkdir web
-mkdir web/WEB-INF
-cvs import -m "Initial Project Creation" {project} \
-    {username} start
-
- -

Now, to verify that it was created correctly in CVS, we will perform a -checkout of the new project:

-
-cd ..
-mv myapp myapp.bu
-cvs checkout {project}
-
- -

Next, you will need to create and check in an initial version of the -build.xml script to be used for development. For getting -started quickly and easily, base your build.xml on the -basic build.xml file, included with this manual, -or code it from scratch.

-
-cd {my home directory}
-cd myapp
-emacs build.xml     <-- if you want a real editor :-)
-cvs add build.xml
-cvs commit
-
- -

Until you perform the CVS commit, your changes are local to your own -development directory. Committing makes those changes visible to other -developers on your team that are sharing the same CVS repository.

- -

The next step is to customize the Ant properties that are -named in the build.xml script. This is done by creating a -file named build.properties in your project's top-level -directory. The supported properties are listed in the comments inside -the sample build.xml script. At a minimum, you will generally -need to define the catalina.home property defining where -Tomcat is installed, and the manager application username and password. -You might end up with something like this:

-
-# Context path to install this application on
-app.path=/hello
-
-# Tomcat 7 installation directory
-catalina.home=/usr/local/apache-tomcat-7.0
-
-# Manager webapp username and password
-manager.username=myusername
-manager.password=mypassword
-
- -

In general, you will not want to check the -build.properties file in to the CVS repository, because it -is unique to each developer's environment.

- -

Now, create the initial version of the web application deployment -descriptor. You can base web.xml on the -basic web.xml file, or code it from scratch.

-
-cd {my home directory}
-cd myapp/web/WEB-INF
-emacs web.xml
-cvs add web.xml
-cvs commit
-
- -Note that this is only an example web.xml file. The full definition -of the deployment descriptor file is in the -Servlet Specification. - -
- - -
Edit Source Code and Pages
- -

The edit/build/test tasks will generally be your most common activities -during development and maintenance. The following general principles apply. -As described in Source Organization, newly created -source files should be located in the appropriate subdirectory, under your -project source directory.

- -

Whenever you wish to refresh your development directory to reflect the -work performed by other developers, you will ask CVS to do it for you:

-
-cd {my home directory}
-cd myapp
-cvs update -dP
-
- -

To create a new file, go to the appropriate directory, create the file, -and register it with CVS. When you are satisfied with it's contents (after -building and testing is successful), commit the new file to the repository. -For example, to create a new JSP page:

-
-cd {my home directory}
-cd myapp/web        <-- Ultimate destination is document root
-emacs mypage.jsp
-cvs add mypage.jsp
-... build and test the application ...
-cvs commit
-
- -

Java source code that is defined in packages must be organized in a -directory hierarchy (under the src/ subdirectory) that -matches the package names. For example, a Java class named -com.mycompany.mypackage.MyClass.java should be stored in file -src/com/mycompany/mypackage/MyClass.java. -Whenever you create a new subdirectory, don't forget to -register it with CVS.

- -

To edit an existing source file, you will generally just start editing -and testing, then commit the changed file when everything works. Although -CVS can be configured to required you to "check out" or "lock" a file you -are going to be modifying, this is generally not used.

- -
- - -
Build the Web Application
- -

When you are ready to compile the application, issue the following -commands (generally, you will want a shell window open that is set to -the project source directory, so that only the last command is needed):

-
-cd {my home directory}
-cd myapp        <-- Normally leave a window open here
-ant
-
- -

The Ant tool will be execute the default "compile" target in your -build.xml file, which will compile any new or updated Java -code. If this is the first time you compile after a "build clean", -it will cause everything to be recompiled.

- -

To force the recompilation of your entire application, do this instead:

-
-cd {my home directory}
-cd myapp
-ant all
-
- -

This is a very good habit immediately before checking in changes, to -make sure that you have not introduced any subtle problems that Javac's -conditional checking did not catch.

- -
- - -
Test Your Web Application
- -

To test your application, you will want to install it under Tomcat. The -quickest way to do that is to use the custom Ant tasks that are included in -the sample build.xml script. Using these commands might follow -a pattern like this:

-
    -
  • Start Tomcat if needed. If Tomcat is not already running, - you will need to start it in the usual way. -

  • -
  • Compile your application. Use the ant compile - command (or just ant, since this is the default). Make - sure that there are no compilation errors. -

  • -
  • Install the application. Use the ant install - command. This tells Tomcat to immediately start running your app on - the context path defined in the app.path build property. - Tomcat does NOT have to be restarted for this to - take effect.

  • -
  • Test the application. Using your browser or other testing - tools, test the functionality of your application. -

  • -
  • Modify and rebuild as needed. As you discover that changes - are required, make those changes in the original source - files, not in the output build directory, and re-issue the - ant compile command. This ensures that your changes will - be available to be saved (via cvs commit) later on -- - the output build directory is deleted and recreated as necessary. -

  • -
  • Reload the application. Tomcat will recognize changes in - JSP pages automatically, but it will continue to use the old versions - of any servlet or JavaBean classes until the application is reloaded. - You can trigger this by executing the ant reload command. -

  • -
  • Remove the application when you re done. When you are through - working on this application, you can remove it from live execution by - running the ant remove command.
  • -
- -

Do not forget to commit your changes to the source code repository when -you have completed your testing!

- -
- - -
Creating a Release
- -

When you are through adding new functionality, and you've tested everything -(you DO test, don't you :-), it is time to create the distributable version -of your web application that can be deployed on the production server. The -following general steps are required:

-
    -
  • Issue the command ant all from the project source - directory, to rebuild everything from scratch one last time. -

  • -
  • Use the cvs tag command to create an identifier for - all of the source files utilized to create this release. This allows - you to reliably reconstruct a release (from sources) at a later - time.
  • -
  • Issue the command ant dist to create a distributable - web application archive (WAR) file, as well as a JAR file containing - the corresponding source code. -

  • -
  • Package the contents of the dist directory using the - tar or zip utility, according to - the standard release procedures used by your organization.
  • -
- -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/build.xml b/bundledApps/tomcat/webapps/docs/appdev/sample/build.xml deleted file mode 100755 index 9ce7d20f..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/build.xml +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/docs/README.txt b/bundledApps/tomcat/webapps/docs/appdev/sample/docs/README.txt deleted file mode 100755 index e6d7eab7..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/docs/README.txt +++ /dev/null @@ -1,17 +0,0 @@ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -This is a dummy README file for the sample -web application. diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/index.html b/bundledApps/tomcat/webapps/docs/appdev/sample/index.html deleted file mode 100755 index a3db667e..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - -Sample Application - - -

Sample Application

-

- The example app has been packaged as a war file and can be downloaded - here (Note: make sure your browser doesn't - change file extension or append a new one). -

-

- The easiest way to run this application is simply to move the war file - to your CATALINA_HOME/webapps directory. Tomcat will automatically - expand and deploy the application for you. You can view it with the - following URL (assuming that you're running tomcat on port 8080 - as is the default): -
- http://localhost:8080/sample -

-

- If you just want to browse the contents, you can unpack the war file - with the jar command. -

-
-        jar -xvf sample.war
-      
- - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/sample.war b/bundledApps/tomcat/webapps/docs/appdev/sample/sample.war deleted file mode 100755 index 0a127e6b..00000000 Binary files a/bundledApps/tomcat/webapps/docs/appdev/sample/sample.war and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/src/mypackage/Hello.java b/bundledApps/tomcat/webapps/docs/appdev/sample/src/mypackage/Hello.java deleted file mode 100755 index 47bba7c1..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/src/mypackage/Hello.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package mypackage; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - - -/** - * Simple servlet to validate that the Hello, World example can - * execute servlets. In the web application deployment descriptor, - * this servlet must be mapped to correspond to the link in the - * "index.html" file. - * - * @author Craig R. McClanahan - */ - -public final class Hello extends HttpServlet { - - private static final long serialVersionUID = 1L; - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param request The servlet request we are processing - * @param response The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException { - - response.setContentType("text/html"); - PrintWriter writer = response.getWriter(); - - writer.println(""); - writer.println(""); - writer.println("Sample Application Servlet Page"); - writer.println(""); - writer.println(""); - - writer.println(""); - writer.println(""); - writer.println(""); - writer.println(""); - writer.println(""); - writer.println("
"); - writer.println(""); - writer.println(""); - writer.println("

Sample Application Servlet

"); - writer.println("This is the output of a servlet that is part of"); - writer.println("the Hello, World application."); - writer.println("
"); - - writer.println(""); - writer.println(""); - - } - - -} diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/web/WEB-INF/web.xml b/bundledApps/tomcat/webapps/docs/appdev/sample/web/WEB-INF/web.xml deleted file mode 100755 index 7fe1af08..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/web/WEB-INF/web.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Hello, World Application - - This is a simple web application with a source code organization - based on the recommendations of the Application Developer's Guide. - - - - HelloServlet - mypackage.Hello - - - - HelloServlet - /hello - - - diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/web/hello.jsp b/bundledApps/tomcat/webapps/docs/appdev/sample/web/hello.jsp deleted file mode 100755 index de7f0eac..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/web/hello.jsp +++ /dev/null @@ -1,39 +0,0 @@ - - - -Sample Application JSP Page - - - - - - - - -
- - -

Sample Application JSP Page

-This is the output of a JSP page that is part of the Hello, World -application. -
- -<%= new String("Hello!") %> - - - diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/web/images/tomcat.gif b/bundledApps/tomcat/webapps/docs/appdev/sample/web/images/tomcat.gif deleted file mode 100755 index 32f7d809..00000000 Binary files a/bundledApps/tomcat/webapps/docs/appdev/sample/web/images/tomcat.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/appdev/sample/web/index.html b/bundledApps/tomcat/webapps/docs/appdev/sample/web/index.html deleted file mode 100755 index 1cbcd63e..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/sample/web/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - -Sample "Hello, World" Application - - - - - - - - -
- - -

Sample "Hello, World" Application

-

This is the home page for a sample application used to illustrate the -source directory organization of a web application utilizing the principles -outlined in the Application Developer's Guide. -

- -

To prove that they work, you can execute either of the following links:

- - - - diff --git a/bundledApps/tomcat/webapps/docs/appdev/source.html b/bundledApps/tomcat/webapps/docs/appdev/source.html deleted file mode 100755 index 41b6462b..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/source.html +++ /dev/null @@ -1,294 +0,0 @@ -Application Developer's Guide (7.0.30) - Source Organization

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Source Organization

Table of Contents
- -
Directory Structure
- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -

A key recommendation of this manual is to separate the directory -hierarchy containing your source code (described in this section) from -the directory hierarchy containing your deployable application -(described in the preceding section). Maintaining this separation has -the following advantages:

-
    -
  • The contents of the source directories can be more easily administered, - moved, and backed up if the "executable" version of the application - is not intermixed. -

  • -
  • Source code control is easier to manage on directories that contain - only source files. -

  • -
  • The files that make up an installable distribution of your - application are much easier to select when the deployment - hierarchy is separate.
  • -
- -

As we will see, the ant development tool makes the creation -and processing of such directory hierarchies nearly painless.

- -

The actual directory and file hierarchy used to contain the source code -of an application can be pretty much anything you like. However, the -following organization has proven to be quite generally applicable, and is -expected by the example build.xml configuration file that -is discussed below. All of these components exist under a top level -project source directory for your application:

-
    -
  • docs/ - Documentation for your application, in whatever - format your development team is using.

  • -
  • src/ - Java source files that generate the servlets, - beans, and other Java classes that are unique to your application. - If your source code is organized in packages (highly - recommended), the package hierarchy should be reflected as a directory - structure underneath this directory.

  • -
  • web/ - The static content of your web site (HTML pages, - JSP pages, JavaScript files, CSS stylesheet files, and images) that will - be accessible to application clients. This directory will be the - document root of your web application, and any subdirectory - structure found here will be reflected in the request URIs required to - access those files.

  • -
  • web/WEB-INF/ - The special configuration files required - for your application, including the web application deployment descriptor - (web.xml, defined in the - Servlet Specification), - tag library descriptors for custom tag libraries - you have created, and other resource files you wish to include within - your web application. Even though this directory appears to be a - subdirectory of your document root, the Servlet Specification - prohibits serving the contents of this directory (or any file it contains) - directly to a client request. Therefore, this is a good place to store - configuration information that is sensitive (such as database connection - usernames and passwords), but is required for your application to - operate successfully.
  • -
- -

During the development process, two additional directories will be -created on a temporary basis:

-
    -
  • build/ - When you execute a default build - (ant), this directory will contain an exact image - of the files in the web application archive for this application. - Tomcat allows you to deploy an application in an unpacked - directory like this, either by copying it to the - $CATALINA_BASE/webapps directory, or by installing - it via the "Manager" web application. The latter approach is very - useful during development, and will be illustrated below. -

  • -
  • dist/ - When you execute the ant dist - target, this directory will be created. It will create an exact image - of the binary distribution for your web application, including an license - information, documentation, and README files that you have prepared.
  • -
- -

Note that these two directories should NOT be archived in -your source code control system, because they are deleted and recreated (from -scratch) as needed during development. For that reason, you should not edit -any source files in these directories if you want to maintain a permanent -record of the changes, because the changes will be lost the next time that a -build is performed.

- -
External Dependencies
- -

What do you do if your application requires JAR files (or other - resources) from external projects or packages? A common example is that - you need to include a JDBC driver in your web application, in order to - operate.

- -

Different developers take different approaches to this problem. - Some will encourage checking a copy of the JAR files you depend on into - the source code control archives for every application that requires those - JAR files. However, this can cause significant management issues when you - use the same JAR in many applications - particular when faced with a need - to upgrade to a different version of that JAR file.

- -

Therefore, this manual recommends that you NOT store - a copy of the packages you depend on inside the source control archives - of your applications. Instead, the external dependencies should be - integrated as part of the process of building your - application. In that way, you can always pick up the appropriate version - of the JAR files from wherever your development system administrator has - installed them, without having to worry about updating your application - every time the version of the dependent JAR file is changed.

- -

In the example Ant build.xml file, we will demonstrate - how to define build properties that let you configure the locations - of the files to be copied, without having to modify build.xml - when these files change. The build properties used by a particular - developer can be customized on a per-application basis, or defaulted to - "standard" build properties stored in the developer's home directory.

- -

In many cases, your development system administrator will have already - installed the required JAR files into the lib directory of Tomcat. - If this has been done, you need - to take no actions at all - the example build.xml file - automatically constructs a compile classpath that includes these files.

- -
- -
Source Code Control
- -

As mentioned earlier, it is highly recommended that you place all of the -source files that comprise your application under the management of a -source code control system like the Concurrent Version System (CVS). If you -elect to do this, every directory and file in the source hierarchy should be -registered and saved -- but none of the generated files. If you register -binary format files (such as images or JAR libraries), be sure to indicate -this to your source code control system.

- -

We recommended (in the previous section) that you should not store the -contents of the build/ and dist/ directories -created by your development process in the source code control system. An -easy way to tell CVS to ignore these directories is to create a file named -.cvsignore (note the leading period) in your top-level source -directory, with the following contents:

-
-build
-dist
-build.properties
-
- -

The reason for mentioning build.properties here will be -explained in the Processes section.

- -

Detailed instructions for your source code control environment are beyond -the scope of this manual. However, the following steps are followed when -using a command-line CVS client:

-
    -
  • To refresh the state of your source code to that stored in the - the source repository, go to your project source directory, and - execute cvs update -dP. -

  • -
  • When you create a new subdirectory in the source code hierarchy, register - it in CVS with a command like cvs add {subdirname}. -

  • -
  • When you first create a new source code file, navigate to the directory - that contains it, and register the new file with a command like - cvs add {filename}. -

  • -
  • If you no longer need a particular source code file, navigate to the - containing directory and remove the file. Then, deregister it in CVS - with a command like cvs remove {filename}. -

  • -
  • While you are creating, modifying, and deleting source files, changes - are not yet reflected in the server repository. To save your changes in - their current state, go to the project source directory - and execute cvs commit. You will be asked to write a brief - description of the changes you have just completed, which will be stored - with the new version of any updated source file.
  • -
- -

CVS, like other source code control systems, has many additional features -(such as the ability to tag the files that made up a particular release, and -support for multiple development branches that can later be merged). See the -links and references in the Introduction for -more information.

- -
BUILD.XML Configuration File
- -

We will be using the ant tool to manage the compilation of -our Java source code files, and creation of the deployment hierarchy. Ant -operates under the control of a build file, normally called -build.xml, that defines the processing steps required. This -file is stored in the top-level directory of your source code hierarchy, and -should be checked in to your source code control system.

- -

Like a Makefile, the build.xml file provides several -"targets" that support optional development activities (such as creating -the associated Javadoc documentation, erasing the deployment home directory -so you can build your project from scratch, or creating the web application -archive file so you can distribute your application. A well-constructed -build.xml file will contain internal documentation describing -the targets that are designed for use by the developer, versus those targets -used internally. To ask Ant to display the project documentation, change to -the directory containing the build.xml file and type:

-
-ant -projecthelp
-
- -

To give you a head start, a basic build.xml file -is provided that you can customize and install in the project source directory -for your application. This file includes comments that describe the various -targets that can be executed. Briefly, the following targets are generally -provided:

-
    -
  • clean - This target deletes any existing - build and dist directories, so that they - can be reconstructed from scratch. This allows you to guarantee that - you have not made source code modifications that will result in - problems at runtime due to not recompiling all affected classes. -

  • -
  • compile - This target is used to compile any source code - that has been changed since the last time compilation took place. The - resulting class files are created in the WEB-INF/classes - subdirectory of your build directory, exactly where the - structure of a web application requires them to be. Because - this command is executed so often during development, it is normally - made the "default" target so that a simple ant command will - execute it. -

  • -
  • all - This target is a short cut for running the - clean target, followed by the compile target. - Thus, it guarantees that you will recompile the entire application, to - ensure that you have not unknowingly introduced any incompatible changes. -

  • -
  • javadoc - This target creates Javadoc API documentation - for the Java classes in this web application. The example - build.xml file assumes you want to include the API - documentation with your app distribution, so it generates the docs - in a subdirectory of the dist directory. Because you normally - do not need to generate the Javadocs on every compilation, this target is - usually a dependency of the dist target, but not of the - compile target. -

  • -
  • dist - This target creates a distribution directory for - your application, including any required documentation, the Javadocs for - your Java classes, and a web application archive (WAR) file that will be - delivered to system administrators who wish to install your application. - Because this target also depends on the deploy target, the - web application archive will have also picked up any external dependencies - that were included at deployment time.
  • -
- -

For interactive development and testing of your web application using -Tomcat, the following additional targets are defined:

-
    -
  • install - Tell the currently running Tomcat to make - the application you are developing immediately available for execution - and testing. This action does not require Tomcat to be restarted, but - it is also not remembered after Tomcat is restarted the next time. -

  • -
  • reload - Once the application is installed, you can - continue to make changes and recompile using the compile - target. Tomcat will automatically recognize changes made to JSP pages, - but not to servlet or JavaBean classes - this command will tell Tomcat - to restart the currently installed application so that such changes are - recognized. -

  • -
  • remove - When you have completed your development and - testing activities, you can optionally tell Tomcat to remove this - application from service. -
  • -
- -

Using the development and testing targets requires some additional -one-time setup that is described on the next page.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/appdev/web.xml.txt b/bundledApps/tomcat/webapps/docs/appdev/web.xml.txt deleted file mode 100755 index 65747428..00000000 --- a/bundledApps/tomcat/webapps/docs/appdev/web.xml.txt +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - My Web Application - - This is version X.X of an application to perform - a wild and wonderful task, based on servlets and - JSP pages. It was written by Dave Developer - (dave@mycompany.com), who should be contacted for - more information. - - - - - - - webmaster - myaddress@mycompany.com - - The EMAIL address of the administrator to whom questions - and comments about this application should be addressed. - - - - - - - - controller - - This servlet plays the "controller" role in the MVC architecture - used in this application. It is generally mapped to the ".do" - filename extension with a servlet-mapping element, and all form - submits in the app will be submitted to a request URI like - "saveCustomer.do", which will therefore be mapped to this servlet. - - The initialization parameter names for this servlet are the - "servlet path" that will be received by this servlet (after the - filename extension is removed). The corresponding value is the - name of the action class that will be used to process this request. - - com.mycompany.mypackage.ControllerServlet - - listOrders - com.mycompany.myactions.ListOrdersAction - - - saveCustomer - com.mycompany.myactions.SaveCustomerAction - - - 5 - - - - graph - - This servlet produces GIF images that are dynamically generated - graphs, based on the input parameters included on the request. - It is generally mapped to a specific request URI like "/graph". - - - - - - - - controller - *.do - - - - graph - /graph - - - - - - - 30 - - - - diff --git a/bundledApps/tomcat/webapps/docs/apr.html b/bundledApps/tomcat/webapps/docs/apr.html deleted file mode 100755 index 0cf7040c..00000000 --- a/bundledApps/tomcat/webapps/docs/apr.html +++ /dev/null @@ -1,155 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Apache Portable Runtime (APR) based Native library for Tomcat

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Apache Portable Runtime (APR) based Native library for Tomcat

Table of Contents
- -
Introduction
- -

- Tomcat can use the Apache Portable Runtime to - provide superior scalability, performance, and better integration with native server - technologies. The Apache Portable Runtime is a highly portable library that is at - the heart of Apache HTTP Server 2.x. APR has many uses, including access to advanced IO - functionality (such as sendfile, epoll and OpenSSL), OS level functionality (random number - generation, system status, etc), and native process handling (shared memory, NT - pipes and Unix sockets). -

- -

- These features allows making Tomcat a general purpose webserver, will enable much better - integration with other native web technologies, and overall make Java much more viable as - a full fledged webserver platform rather than simply a backend focused technology. -

- -
Installation
- -

- APR support requires three main native components to be installed: -

    -
  • APR library
  • -
  • JNI wrappers for APR used by Tomcat (libtcnative)
  • -
  • OpenSSL libraries
  • -
-

- -
Windows
- -

- Windows binaries are provided for tcnative-1, which is a statically compiled .dll which includes - OpenSSL and APR. It can be downloaded from here - as 32bit or AMD x86-64 binaries. - In security conscious production environments, it is recommended to use separate shared dlls - for OpenSSL, APR, and libtcnative-1, and update them as needed according to security bulletins. - Windows OpenSSL binaries are linked from the Official OpenSSL - website (see related/binaries). -

- -
- -
Linux
- -

- Most Linux distributions will ship packages for APR and OpenSSL. The JNI wrapper (libtcnative) will - then have to be compiled. It depends on APR, OpenSSL, and the Java headers. -

- -

- Requirements: -

    -
  • APR 1.2+ development headers (libapr1-dev package)
  • -
  • OpenSSL 0.9.7+ development headers (libssl-dev package)
  • -
  • JNI headers from Java compatible JDK 1.4+
  • -
  • GNU development environment (gcc, make)
  • -
-

- -

- The wrapper library sources are located in the Tomcat binary bundle, in the - bin/tomcat-native.tar.gz archive. - Once the build environment is installed and the source archive is extracted, the wrapper library - can be compiled using (from the folder containing the configure script): -

./configure && make && make install
-

- -
- -
APR Components
- -

- Once the libraries are properly installed and available to Java (if loading fails, the library path - will be displayed), the Tomcat connectors will automatically use APR. Configuration of the connectors - is similar to the regular connectors, but have a few extra attributes which are used to configure - APR components. Note that the defaults should be well tuned for most use cases, and additional - tweaking shouldn't be required. -

- -

- When APR is enabled, the following features are also enabled in Tomcat: -

    -
  • Secure session ID generation by default on all platforms (platforms other than Linux required - random number generation using a configured entropy)
  • -
  • OS level statistics on memory usage and CPU usage by the Tomcat process are displayed by - the status servlet
  • -
-

- -
APR Lifecycle Listener Configuration
-
AprLifecycleListener
- -

- Name of the SSLEngine to use. off: Do not use SSL, on: Use SSL but no specific ENGINE. - The default value is on. - This initializes the native SSL engine, then enable the use of this engine in the connector - using the SSLEnabled attribute. Example: -

-<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-      
-

-

See the Official OpenSSL - website for more details on SSL hardware engines and manufacturers. -

-
-
-
APR Connectors Configuration
- -
HTTP/HTTPS
- -

For HTTP configuration, see the HTTP - connector configuration documentation.

- -

For HTTPS configuration, see the - HTTPS connector configuration - documentation.

- -

An example SSL Connector declaration is: -

-      <Connector port="443" maxHttpHeaderSize="8192"
-                 maxThreads="150"
-                 enableLookups="false" disableUploadTimeout="true"
-                 acceptCount="100" scheme="https" secure="true"
-                 SSLEnabled="true"
-                 SSLCertificateFile="${catalina.base}/conf/localhost.crt"
-                 SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />
-

- -
- -
AJP
- -

For AJP configuration, see the AJP - connector configuration documentation.

- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/architecture/index.html b/bundledApps/tomcat/webapps/docs/architecture/index.html deleted file mode 100755 index c6f801db..00000000 --- a/bundledApps/tomcat/webapps/docs/architecture/index.html +++ /dev/null @@ -1,44 +0,0 @@ -Apache Tomcat 7 Architecture (7.0.30) - Table of Contents

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Table of Contents

Preface
- -

This section of the Tomcat documentation attempts to explain -the architecture and design of the Tomcat server. It includes significant -contributions from several tomcat developers: -

- - -
Table of Contents
- -

The information presented is divided into the following sections:

-
    -
  • Overview - - An overview of the Tomcat server architecture with key terms - and concepts.
  • -
  • Server Startup - - A detailed description, with sequence diagrams, of how the Tomcat - server starts up.
  • -
  • Request Process Flow - - A detailed description of how Tomcat handles a request.
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/architecture/overview.html b/bundledApps/tomcat/webapps/docs/architecture/overview.html deleted file mode 100755 index 2b7459b9..00000000 --- a/bundledApps/tomcat/webapps/docs/architecture/overview.html +++ /dev/null @@ -1,113 +0,0 @@ -Apache Tomcat 7 Architecture (7.0.30) - Architecture Overview

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Architecture Overview

Overview
-

-This page provides an overview of the Tomcat server architecture. -

-
Terms
- -
Server
-

-In the Tomcat world, a -Server represents the whole container. -Tomcat provides a default implementation of the -Server interface -which is rarely customized by users. -

-
- -
Service
-

-A Service is an intermediate component -which lives inside a Server and ties one or more Connectors to exactly one -Engine. The Service element is rarely customized by users, as the default -implementation is simple and sufficient: -Service interface. -

-
- -
Engine
-

-An -Engine represents request processing -pipeline for a specific Service. As a Service may have multiple Connectors, -the Engine received and processes all requests from these connectors, handing -the response back to the appropriate connector for transmission to the client. -The Engine interface -may be implemented to supply custom Engines, though this is uncommon. -

-

-Note that the Engine may be used for Tomcat server clustering via the -jvmRoute parameter. Read the Clustering documentation for more information. -

-
- -
Host
-

-A Host is an association of a network name, -e.g. www.yourcompany.com, to the Tomcat server. An Engine may contain -multiple hosts, and the Host element also supports network aliases such as -yourcompany.com and abc.yourcompany.com. Users rarely create custom -Hosts -because the -StandardHost -implementation provides significant additional functionality. -

-
- -
Connector
-

-A Connector handles communications with the client. There are multiple -connectors available with Tomcat. These include the -HTTP connector which is used for -most HTTP traffic, especially when running Tomcat as a standalone server, -and the AJP connector which implements -the AJP procotol used when connecting Tomcat to a web server such as -Apache HTTPD server. Creating a customized connector is a significant -effort. -

-
- -
Context
-

-A -Context -represents a web application. A Host may contain multiple -contexts, each with a unique path. The -Context -interface may be implemented to create custom Contexts, but -this is rarely the case because the - -StandardContext provides significant additional functionality. -

-
-
Comments
-

-Tomcat is designed to be a fast and efficient implementation of the -Servlet Specification. Tomcat came about as the reference implementation -of this specification, and has remained rigorous in adhering to the -specification. At the same time, significant attention has been paid -to Tomcat's performance and it is now on par with other servlet containers, -including commercial ones. -

-

-In recent releases of Tomcat, mostly starting with Tomcat 5, -we have begun efforts to make more aspects of Tomcat manageable via -JMX. In addition, the Manager and Admin webapps have been greatly -enhanced and improved. Manageability is a primary area of concern -for us as the product matures and the specification becomes more -stable. -

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/architecture/requestProcess.html b/bundledApps/tomcat/webapps/docs/architecture/requestProcess.html deleted file mode 100755 index 6a08c1d4..00000000 --- a/bundledApps/tomcat/webapps/docs/architecture/requestProcess.html +++ /dev/null @@ -1,47 +0,0 @@ -Apache Tomcat 7 Architecture (7.0.30) - Request Process Flow

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Request Process Flow

Request Process Flow
- -

-This page describes the process used by Tomcat to handle -an incoming request. This process is largely defined by -the Servlet Specification, which outlines the order -of events that must take place. -

- -
description
-

-TODO -

-
- -
diagram
-

-A UML sequence diagram of the request process is available -here. -

-
- -
comments
-

-The Servlet Specification provides many opportunities for -listening in (using Listeners) or modifying (using Filters) -the request handling process even before the request arrives -at the servlet that will handle it. -

- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/architecture/requestProcess/requestProcess.pdf b/bundledApps/tomcat/webapps/docs/architecture/requestProcess/requestProcess.pdf deleted file mode 100755 index 6a171de8..00000000 Binary files a/bundledApps/tomcat/webapps/docs/architecture/requestProcess/requestProcess.pdf and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/architecture/requestProcess/roseModel.mdl b/bundledApps/tomcat/webapps/docs/architecture/requestProcess/roseModel.mdl deleted file mode 100755 index 64ef567c..00000000 --- a/bundledApps/tomcat/webapps/docs/architecture/requestProcess/roseModel.mdl +++ /dev/null @@ -1,12921 +0,0 @@ - -(object Petal - version 45 - _written "Rose 7.6.0109.2314" - charSet 0) - -(object Design "Logical View" - is_unit TRUE - is_loaded TRUE - quid "3DFDF6CE0337" - defaults (object defaults - rightMargin 0.250000 - leftMargin 0.250000 - topMargin 0.250000 - bottomMargin 0.500000 - pageOverlap 0.250000 - clipIconLabels TRUE - autoResize TRUE - snapToGrid TRUE - gridX 16 - gridY 16 - defaultFont (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - showMessageNum 1 - showClassOfObject TRUE - notation "Unified") - root_usecase_package (object Class_Category "Use Case View" - quid "3DFDF6CE0369" - exportControl "Public" - global TRUE - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list - (object UseCaseDiagram "Main" - quid "3DFDF6D201FE" - title "Main" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list)))) - root_category (object Class_Category "Logical View" - quid "3DFDF6CE0338" - exportControl "Public" - global TRUE - subsystem "Component View" - quidu "3DFDF6CE036A" - logical_models (list unit_reference_list - (object Class_Category "org.apache.catalina" - quid "3E42DE8D0082" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E42DEF601EB" - supplier "Logical View::org.apache.tomcat.util" - quidu "3E42DEDF01F2") - (object Visibility_Relationship - quid "3E42DF700060" - supplier "Logical View::org.apache.coyote" - quidu "3E42DE9F0132") - (object Visibility_Relationship - quid "3E43D165039C" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339")) - exportControl "Public" - logical_models (list unit_reference_list - (object Class_Category "ant" - quid "3E42DFBB037F" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43CFF7020F" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "authenticator" - quid "3E42DFC702B4" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D03C0395" - supplier "Logical View::org.apache.catalina::deploy" - quidu "3E42DFDC0340") - (object Visibility_Relationship - quid "3E43D03F01C2" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43D043024A" - supplier "Logical View::org.apache.catalina::valves" - quidu "3E42E02D035B")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "connector" - quid "3E42DFCF036A" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D07E017D" - supplier "Logical View::org.apache.catalina::session" - quidu "3E42E00C026D")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "core" - quid "3E42DFD603BA" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D19E01A9" - supplier "Logical View::org.apache.catalina::deploy" - quidu "3E42DFDC0340") - (object Visibility_Relationship - quid "3E43D1A10185" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43D1CE007C" - supplier "Logical View::org.apache.catalina::connector" - quidu "3E42DFCF036A") - (object Visibility_Relationship - quid "3E43D1D800D0" - supplier "Logical View::org.apache.catalina::security" - quidu "3E42E00100D7") - (object Visibility_Relationship - quid "3E43D25C031F" - supplier "Logical View::org.apache.catalina::mbean" - quidu "3E42DFF10188") - (object Visibility_Relationship - quid "3E43D260028E" - supplier "Logical View::org.apache.catalina::startup" - quidu "3E42E01E00EC") - (object Visibility_Relationship - quid "3E43D26A015C" - supplier "Logical View::org.apache.catalina::session" - quidu "3E42E00C026D") - (object Visibility_Relationship - quid "3E43D2830271" - supplier "Logical View::org.apache.catalina::valves" - quidu "3E42E02D035B") - (object Visibility_Relationship - quid "3E43D2C80248" - supplier "Logical View::org.apache.catalina::net" - quidu "3E42DFF70227") - (object Visibility_Relationship - quid "3E43D2D6002B" - supplier "Logical View::org.apache.catalina::loader" - quidu "3E43D2D002D6") - (object Visibility_Relationship - quid "3E43D3D300F7" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "deploy" - quid "3E42DFDC0340" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D32001B8" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "launcher" - quid "3E42DFE2033F" - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "logger" - quid "3E42DFEC0285" - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "mbean" - quid "3E42DFF10188" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D49101A5" - supplier "Logical View::org.apache.catalina::deploy" - quidu "3E42DFDC0340") - (object Visibility_Relationship - quid "3E43D4C6027D" - supplier "Logical View::org.apache.catalina::core" - quidu "3E42DFD603BA") - (object Visibility_Relationship - quid "3E43D4FB008F" - supplier "Logical View::org.apache.catalina::session" - quidu "3E42E00C026D") - (object Visibility_Relationship - quid "3E43D50000BE" - supplier "Logical View::org.apache.catalina::valves" - quidu "3E42E02D035B") - (object Visibility_Relationship - quid "3E43D5080278" - supplier "Logical View::org.apache.catalina::realm" - quidu "3E42DFFA00AE") - (object Visibility_Relationship - quid "3E43D55A0258" - supplier "Logical View::org.apache.catalina::logger" - quidu "3E42DFEC0285") - (object Visibility_Relationship - quid "3E43D56000D0" - supplier "Logical View::org.apache.catalina::authenticator" - quidu "3E42DFC702B4")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "net" - quid "3E42DFF70227" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D6390371" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "realm" - quid "3E42DFFA00AE" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D69F0133" - supplier "Logical View::org.apache.catalina::core" - quidu "3E42DFD603BA") - (object Visibility_Relationship - quid "3E43D6A10353" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43D70E00E2" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339") - (object Visibility_Relationship - quid "3E43D72302D7" - supplier "Logical View::org.apache.catalina::deploy" - quidu "3E42DFDC0340")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "security" - quid "3E42E00100D7" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D74D007F" - supplier "Logical View::org.apache.catalina::startup" - quidu "3E42E01E00EC") - (object Visibility_Relationship - quid "3E43D76B0371" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "servlets" - quid "3E42E00502DB" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D82702E5" - supplier "Logical View::org.apache.tomcat.util" - quidu "3E42DEDF01F2") - (object Visibility_Relationship - quid "3E43D82A02CC" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43D82D0244" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "session" - quid "3E42E00C026D" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D8770344" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "ssi" - quid "3E42E01002C3" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D8F902B5" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "startup" - quid "3E42E01E00EC" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D9150251" - supplier "Logical View::org.apache.catalina::logger" - quidu "3E42DFEC0285") - (object Visibility_Relationship - quid "3E43D919018F" - supplier "Logical View::org.apache.catalina::security" - quidu "3E42E00100D7") - (object Visibility_Relationship - quid "3E43D946000D" - supplier "Logical View::org.apache.catalina::core" - quidu "3E42DFD603BA") - (object Visibility_Relationship - quid "3E43D95E012A" - supplier "Logical View::org.apache.catalina::loader" - quidu "3E43D2D002D6") - (object Visibility_Relationship - quid "3E43D9960315" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43D99902BF" - supplier "Logical View::org.apache.catalina::valves" - quidu "3E42E02D035B") - (object Visibility_Relationship - quid "3E43D99C0147" - supplier "Logical View::org.apache.catalina::deploy" - quidu "3E42DFDC0340") - (object Visibility_Relationship - quid "3E43D9DA0114" - supplier "Logical View::org.apache.catalina::net" - quidu "3E42DFF70227") - (object Visibility_Relationship - quid "3E43D9F402F2" - supplier "Logical View::org.apache.catalina::realm" - quidu "3E42DFFA00AE")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "user" - quid "3E42E0220174" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43DB240227" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43DB31009F" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "util" - quid "3E42E0260184" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43DB85017C" - supplier "Logical View::org.apache.catalina::core" - quidu "3E42DFD603BA") - (object Visibility_Relationship - quid "3E43DB88016C" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "valves" - quid "3E42E02D035B" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43DC2B0257" - supplier "Logical View::org.apache.catalina::util" - quidu "3E42E0260184") - (object Visibility_Relationship - quid "3E43DD3E0271" - supplier "Logical View::org.apache.catalina::deploy" - quidu "3E42DFDC0340") - (object Visibility_Relationship - quid "3E43DD4102CF" - supplier "Logical View::org.apache.catalina::connector" - quidu "3E42DFCF036A") - (object Visibility_Relationship - quid "3E43DDDE00B8" - supplier "Logical View::org.apache.catalina::core" - quidu "3E42DFD603BA")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "loader" - quid "3E43D2D002D6" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E43D3CF00F2" - supplier "Logical View::org.apache.naming" - quidu "3E43D1580339")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list))) - logical_presentations (list unit_reference_list - (object ClassDiagram "Main" - quid "3E42DFB6010B" - title "Main" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list - (object CategoryView "Logical View::org.apache.catalina::ant" @1 - location (2208, 1504) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @1 - location (2064, 1420) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "ant") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFBB037F" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::authenticator" @2 - location (192, 2000) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @2 - location (48, 1916) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "authenticator") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFC702B4" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::connector" @3 - location (464, 1328) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @3 - location (320, 1244) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "connector") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFCF036A" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::core" @4 - location (2224, 800) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @4 - location (2080, 716) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "core") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFD603BA" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::deploy" @5 - location (240, 160) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @5 - location (96, 76) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "deploy") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFDC0340" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::launcher" @6 - location (1776, 2480) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @6 - location (1632, 2396) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "launcher") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFE2033F" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::logger" @7 - location (752, 128) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @7 - location (608, 44) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "logger") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFEC0285" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::mbean" @8 - location (2208, 1216) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @8 - location (2064, 1132) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "mbean") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFF10188" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::net" @9 - location (1056, 2496) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @9 - location (912, 2412) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "net") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFF70227" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::realm" @10 - location (1248, 112) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @10 - location (1104, 28) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "realm") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DFFA00AE" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::security" @11 - location (304, 2496) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @11 - location (160, 2412) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "security") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E00100D7" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::servlets" @12 - location (2096, 1888) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @12 - location (1952, 1804) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "servlets") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E00502DB" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::session" @13 - location (432, 1696) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @13 - location (288, 1612) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "session") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E00C026D" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::ssi" @14 - location (672, 2480) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @14 - location (528, 2393) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "ssi") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E01002C3" - width 301 - height 187) - (object CategoryView "Logical View::org.apache.catalina::startup" @15 - location (1088, 832) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @15 - location (944, 748) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "startup") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E01E00EC" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::user" @16 - location (1424, 2496) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @16 - location (1280, 2412) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "user") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E0220174" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::util" @17 - location (1312, 1872) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @17 - location (1168, 1788) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "util") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E0260184" - width 300 - height 180) - (object CategoryView "Logical View::org.apache.catalina::valves" @18 - location (304, 704) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @18 - location (160, 620) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "valves") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42E02D035B" - width 300 - height 180) - (object ImportView "" @19 - stereotype TRUE - line_color 3342489 - quidu "3E43CFF7020F" - client @1 - supplier @17 - line_style 0) - (object ImportView "" @20 - stereotype TRUE - line_color 3342489 - quidu "3E43D07E017D" - client @3 - supplier @13 - line_style 0) - (object CategoryView "Logical View::org.apache.catalina::loader" @21 - location (2240, 416) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @21 - location (2096, 332) - fill_color 13434879 - nlines 2 - max_width 288 - justify 0 - label "loader") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E43D2D002D6" - width 300 - height 180) - (object ImportView "" @22 - stereotype TRUE - line_color 3342489 - quidu "3E43D32001B8" - client @5 - supplier @17 - line_style 0) - (object CategoryView "Logical View::org.apache.naming" @23 - location (1872, 96) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @23 - location (1699, 12) - fill_color 13434879 - nlines 2 - max_width 346 - justify 0 - label "org.apache.naming") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E43D1580339" - width 358 - height 180) - (object ImportView "" @24 - stereotype TRUE - line_color 3342489 - quidu "3E43D3CF00F2" - client @21 - supplier @23 - line_style 0) - (object ImportView "" @25 - stereotype TRUE - line_color 3342489 - quidu "3E43D6390371" - client @9 - supplier @17 - line_style 0) - (object ImportView "" @26 - stereotype TRUE - line_color 3342489 - quidu "3E43D69F0133" - client @10 - supplier @4 - line_style 0) - (object ImportView "" @27 - stereotype TRUE - line_color 3342489 - quidu "3E43D6A10353" - client @10 - supplier @17 - line_style 0) - (object ImportView "" @28 - stereotype TRUE - line_color 3342489 - quidu "3E43D70E00E2" - client @10 - supplier @23 - line_style 0) - (object ImportView "" @29 - stereotype TRUE - line_color 3342489 - quidu "3E43D72302D7" - client @10 - supplier @5 - line_style 0) - (object ImportView "" @30 - stereotype TRUE - line_color 3342489 - quidu "3E43D69F0133" - client @10 - supplier @4 - line_style 0) - (object ImportView "" @31 - stereotype TRUE - line_color 3342489 - quidu "3E43D74D007F" - client @11 - supplier @15 - line_style 0) - (object ImportView "" @32 - stereotype TRUE - line_color 3342489 - quidu "3E43D76B0371" - client @11 - supplier @17 - line_style 0) - (object CategoryView "Logical View::org.apache.tomcat.util" @33 - location (2096, 2224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @33 - location (1923, 2140) - fill_color 13434879 - nlines 2 - max_width 346 - justify 0 - label "org.apache.tomcat.util") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DEDF01F2" - width 358 - height 180) - (object ImportView "" @34 - stereotype TRUE - line_color 3342489 - quidu "3E43D8770344" - client @13 - supplier @17 - line_style 0) - (object ImportView "" @35 - stereotype TRUE - line_color 3342489 - quidu "3E43D8F902B5" - client @14 - supplier @17 - line_style 0) - (object ImportView "" @36 - stereotype TRUE - line_color 3342489 - quidu "3E43DB240227" - client @16 - supplier @17 - line_style 0) - (object ImportView "" @37 - stereotype TRUE - line_color 3342489 - quidu "3E43DB31009F" - client @16 - supplier @23 - line_style 0) - (object ImportView "" @38 - stereotype TRUE - line_color 3342489 - quidu "3E43DB85017C" - client @17 - supplier @4 - line_style 0) - (object ImportView "" @39 - stereotype TRUE - line_color 3342489 - quidu "3E43DB88016C" - client @17 - supplier @23 - line_style 0) - (object ImportView "" @40 - stereotype TRUE - line_color 3342489 - quidu "3E43D82702E5" - client @12 - supplier @33 - line_style 0) - (object ImportView "" @41 - stereotype TRUE - line_color 3342489 - quidu "3E43D82A02CC" - client @12 - supplier @17 - line_style 0) - (object ImportView "" @42 - stereotype TRUE - line_color 3342489 - quidu "3E43D82D0244" - client @12 - supplier @23 - vertices (list Points - (2060, 1743) - (1746, 447) - (1838, 186)) - line_style 0) - (object ImportView "" @43 - stereotype TRUE - line_color 3342489 - quidu "3E43D919018F" - client @15 - supplier @11 - line_style 0) - (object ImportView "" @44 - stereotype TRUE - line_color 3342489 - quidu "3E43D946000D" - client @15 - supplier @4 - line_style 0) - (object ImportView "" @45 - stereotype TRUE - line_color 3342489 - quidu "3E43D95E012A" - client @15 - supplier @21 - line_style 0) - (object ImportView "" @46 - stereotype TRUE - line_color 3342489 - quidu "3E43D95E012A" - client @15 - supplier @21 - line_style 0) - (object ImportView "" @47 - stereotype TRUE - line_color 3342489 - quidu "3E43D9960315" - client @15 - supplier @17 - line_style 0) - (object ImportView "" @48 - stereotype TRUE - line_color 3342489 - quidu "3E43D99902BF" - client @15 - supplier @18 - line_style 0) - (object ImportView "" @49 - stereotype TRUE - line_color 3342489 - quidu "3E43D99C0147" - client @15 - supplier @5 - line_style 0) - (object ImportView "" @50 - stereotype TRUE - line_color 3342489 - quidu "3E43D946000D" - client @15 - supplier @4 - line_style 0) - (object ImportView "" @51 - stereotype TRUE - line_color 3342489 - quidu "3E43D9150251" - client @15 - supplier @7 - line_style 0) - (object ImportView "" @52 - stereotype TRUE - line_color 3342489 - quidu "3E43D9DA0114" - client @15 - supplier @9 - line_style 0) - (object ImportView "" @53 - stereotype TRUE - line_color 3342489 - quidu "3E43D9F402F2" - client @15 - supplier @10 - line_style 0) - (object ImportView "" @54 - stereotype TRUE - line_color 3342489 - quidu "3E43D9960315" - client @15 - supplier @17 - line_style 0) - (object ImportView "" @55 - stereotype TRUE - line_color 3342489 - quidu "3E43D946000D" - client @15 - supplier @4 - line_style 0) - (object ImportView "" @56 - stereotype TRUE - line_color 3342489 - quidu "3E43D99C0147" - client @15 - supplier @5 - line_style 0) - (object ImportView "" @57 - stereotype TRUE - line_color 3342489 - quidu "3E43D49101A5" - client @8 - supplier @5 - line_style 0) - (object ImportView "" @58 - stereotype TRUE - line_color 3342489 - quidu "3E43D4C6027D" - client @8 - supplier @4 - line_style 0) - (object ImportView "" @59 - stereotype TRUE - line_color 3342489 - quidu "3E43D4FB008F" - client @8 - supplier @13 - line_style 0) - (object ImportView "" @60 - stereotype TRUE - line_color 3342489 - quidu "3E43D50000BE" - client @8 - supplier @18 - vertices (list Points - (2057, 1216) - (1278, 1216) - (454, 783)) - line_style 0) - (object ImportView "" @61 - stereotype TRUE - line_color 3342489 - quidu "3E43D5080278" - client @8 - supplier @10 - line_style 0) - (object ImportView "" @62 - stereotype TRUE - line_color 3342489 - quidu "3E43D55A0258" - client @8 - supplier @7 - line_style 0) - (object ImportView "" @63 - stereotype TRUE - line_color 3342489 - quidu "3E43D56000D0" - client @8 - supplier @2 - line_style 0) - (object ImportView "" @64 - stereotype TRUE - line_color 3342489 - quidu "3E43D19E01A9" - client @4 - supplier @5 - line_style 0) - (object ImportView "" @65 - stereotype TRUE - line_color 3342489 - quidu "3E43D1A10185" - client @4 - supplier @17 - line_style 0) - (object ImportView "" @66 - stereotype TRUE - line_color 3342489 - quidu "3E43D1CE007C" - client @4 - supplier @3 - line_style 0) - (object ImportView "" @67 - stereotype TRUE - line_color 3342489 - quidu "3E43D1D800D0" - client @4 - supplier @11 - vertices (list Points - (2081, 890) - (959, 1616) - (409, 2351)) - line_style 0) - (object ImportView "" @68 - stereotype TRUE - line_color 3342489 - quidu "3E43D25C031F" - client @4 - supplier @8 - line_style 0) - (object ImportView "" @69 - stereotype TRUE - line_color 3342489 - quidu "3E43D260028E" - client @4 - supplier @15 - line_style 0) - (object ImportView "" @70 - stereotype TRUE - line_color 3342489 - quidu "3E43D26A015C" - client @4 - supplier @13 - line_style 0) - (object ImportView "" @71 - stereotype TRUE - line_color 3342489 - quidu "3E43D2830271" - client @4 - supplier @18 - line_style 0) - (object ImportView "" @72 - stereotype TRUE - line_color 3342489 - quidu "3E43D2C80248" - client @4 - supplier @9 - line_style 0) - (object ImportView "" @73 - stereotype TRUE - line_color 3342489 - quidu "3E43D2D6002B" - client @4 - supplier @21 - line_style 0) - (object ImportView "" @74 - stereotype TRUE - line_color 3342489 - quidu "3E43D3D300F7" - client @4 - supplier @23 - line_style 0) - (object ImportView "" @75 - stereotype TRUE - line_color 3342489 - quidu "3E43D03C0395" - client @2 - supplier @5 - vertices (list Points - (171, 1855) - (16, 766) - (205, 250)) - line_style 0) - (object ImportView "" @76 - stereotype TRUE - line_color 3342489 - quidu "3E43D03F01C2" - client @2 - supplier @17 - line_style 0) - (object ImportView "" @77 - stereotype TRUE - line_color 3342489 - quidu "3E43D043024A" - client @2 - supplier @18 - line_style 0) - (object ImportView "" @78 - stereotype TRUE - line_color 3342489 - quidu "3E43DC2B0257" - client @18 - supplier @17 - line_style 0) - (object ImportView "" @79 - stereotype TRUE - line_color 3342489 - quidu "3E43DD3E0271" - client @18 - supplier @5 - line_style 0) - (object ImportView "" @80 - stereotype TRUE - line_color 3342489 - quidu "3E43DD4102CF" - client @18 - supplier @3 - line_style 0) - (object ImportView "" @81 - stereotype TRUE - line_color 3342489 - quidu "3E43DDDE00B8" - client @18 - supplier @4 - vertices (list Points - (454, 654) - (1293, 381) - (2073, 731)) - line_style 0))))) - (object Class_Category "org.apache.coyote" - quid "3E42DE9F0132" - visible_categories (list visibility_relationship_list - (object Visibility_Relationship - quid "3E42DEFC00B3" - supplier "Logical View::org.apache.tomcat.util" - quidu "3E42DEDF01F2")) - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "org.apache.tomcat.util" - quid "3E42DEDF01F2" - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "org.apache.jasper" - quid "3E42DEFF0270" - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Class_Category "org.apache.naming" - quid "3E43D1580339" - exportControl "Public" - logical_models (list unit_reference_list) - logical_presentations (list unit_reference_list)) - (object Mechanism @82 - logical_models (list unit_reference_list - (object Object "Bootstrap" - quid "3DFDF8FD0345" - collaborators (list link_list - (object Link - quid "3DFDF9210008" - supplier "Bootstrap" - quidu "3DFDF8FD0345" - messages (list Messages - (object Message "initClassLoaders()" - quid "3DFDF9210009" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFDF91A010C" - supplier "Catalina" - quidu "3DFDF90A0330" - messages (list Messages - (object Message "newInstance()" - quid "3DFDF91A010D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 1 - quidu "000000000000" - creation FALSE) - (object Message "setParentClassLoader()" - quid "3DFDF97900C2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 2 - quidu "000000000000" - creation FALSE) - (object Message "load()" - quid "3DFDFA3402F2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "4" - ordinal 3 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Digester" - quid "3DFDFAF201A1" - collaborators (list link_list - (object Link - quid "3DFDFB8400A6" - supplier "ServerLifecycleListener" - quidu "3DFDFB4B0217" - messages (list Messages - (object Message "newInstance()" - quid "3DFDFB8400A7" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "9.1" - ordinal 9 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFDFB920147" - supplier "GlobalResourcesLifecycleListener" - quidu "3DFDFB7A02AB" - messages (list Messages - (object Message "newInstance()" - quid "3DFDFB920148" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "9.2" - ordinal 10 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "ServerLifecycleListener" - quid "3DFDFB4B0217" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "GlobalResourcesLifecycleListener" - quid "3DFDFB7A02AB" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "SecurityConfig" - quid "3DFDFBD802BA" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Catalina" - quid "3DFDF90A0330" - collaborators (list link_list - (object Link - quid "3DFDFA8001D9" - supplier "Catalina" - quidu "3DFDF90A0330" - messages (list Messages - (object Message "initDirs()" - quid "3DFDFA8001DA" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "5" - ordinal 4 - quidu "000000000000" - creation FALSE) - (object Message "initNaming()" - quid "3DFDFA8B0347" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "6" - ordinal 5 - quidu "000000000000" - creation FALSE) - (object Message "initialize()" - quid "3DFDFAAD01AC" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "7" - ordinal 6 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFDFAF800C3" - supplier "Digester" - quidu "3DFDFAF201A1" - messages (list Messages - (object Message "createDigester()" - quid "3DFDFAF800C4" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8" - ordinal 7 - quidu "000000000000" - creation FALSE) - (object Message "parse()" - quid "3DFDFB0100B2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "9" - ordinal 8 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFDFBEA00C1" - supplier "SecurityConfig" - quidu "3DFDFBD802BA" - messages (list Messages - (object Message "newInstance()" - quid "3DFDFBEA00C2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "10" - ordinal 11 - quidu "000000000000" - creation FALSE) - (object Message "setPackageDefinition()" - quid "3DFDFBF401F2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "11" - ordinal 12 - Operation "setPackageDefinition" - quidu "000000000000" - creation FALSE) - (object Message "setPackageAccess()" - quid "3DFDFC1203C2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "12" - ordinal 13 - Operation "setPackageAccess" - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @83 - logical_models (list unit_reference_list - (object Object "Catalina" - quid "3DFDFC8F015F" - collaborators (list link_list - (object Link - quid "3DFDFD1F0075" - supplier "StandardServer" - quidu "3DFDFCCB006B" - messages (list Messages - (object Message "initialize()" - quid "3DFDFD1F0076" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardServer" - quid "3DFDFCCB006B" - collaborators (list link_list - (object Link - quid "3DFDFD3D01C3" - supplier "StandardService" - quidu "3DFDFD370020" - messages (list Messages - (object Message "initialize()" - quid "3DFDFD3D01C4" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 1 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardService" - quid "3DFDFD370020" - collaborators (list link_list - (object Link - quid "3DFDFE990304" - supplier "CoyoteConnector" - quidu "3DFDFE810313" - messages (list Messages - (object Message "initialize()" - quid "3DFDFE990305" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1" - ordinal 2 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "CoyoteConnector" - quid "3DFDFE810313" - collaborators (list link_list - (object Link - quid "3DFE013D0216" - supplier "CoyoteAdapter" - quidu "3DFDFFA00226" - messages (list Messages - (object Message "new()" - quid "3DFE013D0217" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1.1" - ordinal 3 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE0183032F" - supplier "Http11Protocol" - quidu "3DFE016601A6" - messages (list Messages - (object Message "new()" - quid "3DFE01830330" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1.2" - ordinal 4 - quidu "000000000000" - creation FALSE) - (object Message "init()" - quid "3DFE0188032C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1.3" - ordinal 5 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE01BC038B" - supplier "JkCoyoteAdapter" - quidu "3DFE01AD01A8" - messages (list Messages - (object Message "new()" - quid "3DFE01BC038C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1.4" - ordinal 6 - quidu "000000000000" - creation FALSE) - (object Message "init()" - quid "3DFE01C30164" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1.5" - ordinal 7 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "CoyoteAdapter" - quid "3DFDFFA00226" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Http11Protocol" - quid "3DFE016601A6" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "JkCoyoteAdapter" - quid "3DFE01AD01A8" - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @84 - logical_models (list unit_reference_list - (object Object "Bootstrap" - quid "3DFE027700F5" - collaborators (list link_list - (object Link - quid "3DFE02830373" - supplier "Catalina" - quidu "3DFE027D0067" - messages (list Messages - (object Message "start()" - quid "3DFE02830374" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Catalina" - quid "3DFE027D0067" - collaborators (list link_list - (object Link - quid "3DFE02BA0187" - supplier "StandardServer" - quidu "3DFE02B30015" - messages (list Messages - (object Message "start()" - quid "3DFE02BA0188" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1" - ordinal 1 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardServer" - quid "3DFE02B30015" - collaborators (list link_list - (object Link - quid "3DFE02D3006B" - supplier "StandardServer" - quidu "3DFE02B30015" - messages (list Messages - (object Message "fireLifecycleEvent(BEFORE_START_EVENT)" - quid "3DFE02D3006C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.1" - ordinal 2 - quidu "000000000000" - creation FALSE) - (object Message "fireLifecycleEvent(START_EVENT)" - quid "3DFE02DF02DF" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.2" - ordinal 3 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE030C02B2" - supplier "StandardService" - quidu "3DFE030400E3" - messages (list Messages - (object Message "start()" - quid "3DFE030C02B3" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.3" - ordinal 4 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardService" - quid "3DFE030400E3" - collaborators (list link_list - (object Link - quid "3DFE031D0021" - supplier "StandardService" - quidu "3DFE030400E3" - messages (list Messages - (object Message "fireLifecycleEvent(BEFORE_START_EVENT)" - quid "3DFE031D0022" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.3.1" - ordinal 5 - quidu "000000000000" - creation FALSE) - (object Message "fireLifecycleEvent(START_EVENT)" - quid "3DFE0330019B" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.3.2" - ordinal 6 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE03700189" - supplier "StandardEngine" - quidu "3DFE034700C2" - messages (list Messages - (object Message "start()" - quid "3DFE0370018A" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.3.3" - ordinal 7 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardEngine" - quid "3DFE034700C2" - collaborators (list link_list - (object Link - quid "3DFE03750050" - supplier "StandardEngine" - quidu "3DFE034700C2" - messages (list Messages - (object Message "fireLifecycleEvent(BEFORE_START_EVENT)" - quid "3DFE03750051" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 8 - quidu "000000000000" - creation FALSE) - (object Message "addDefaultMapper()" - quid "3DFE0389001C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 9 - quidu "000000000000" - creation FALSE) - (object Message "logger.start()" - quid "3DFE03980281" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "4" - ordinal 10 - quidu "000000000000" - creation FALSE) - (object Message "realm.start()" - quid "3DFE03A80107" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "5" - ordinal 11 - quidu "000000000000" - creation FALSE) - (object Message "findMappers()" - quid "3DFE03BD000D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "6" - ordinal 12 - quidu "000000000000" - creation FALSE) - (object Message "findChildren()" - quid "3DFE03E000A4" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "7" - ordinal 13 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE03FB0279" - supplier "StandardHost" - quidu "3DFE03F2035D" - messages (list Messages - (object Message "start()" - quid "3DFE03FB027A" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8" - ordinal 14 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardHost" - quid "3DFE03F2035D" - collaborators (list link_list - (object Link - quid "3DFE043B02AD" - supplier "StandardHost" - quidu "3DFE03F2035D" - messages (list Messages - (object Message "fireLifecycleEvent(BEFORE_START_EVENT)" - quid "3DFE043B02AE" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.1" - ordinal 15 - quidu "000000000000" - creation FALSE) - (object Message "addDefaultMapper()" - quid "3DFE045C021F" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.2" - ordinal 16 - quidu "000000000000" - creation FALSE) - (object Message "logger.start()" - quid "3DFE049B000C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.3" - ordinal 17 - quidu "000000000000" - creation FALSE) - (object Message "findMapper()" - quid "3DFE04A303BB" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.4" - ordinal 18 - quidu "000000000000" - creation FALSE) - (object Message "findChildren()" - quid "3DFE04A90342" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.5" - ordinal 19 - Operation "findChildren" - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE048E00B8" - supplier "StandardPipeline" - quidu "3DFE047D006D" - messages (list Messages - (object Message "start()" - quid "3DFE048E00B9" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.6" - ordinal 20 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardPipeline" - quid "3DFE047D006D" - collaborators (list link_list - (object Link - quid "3DFE05780137" - supplier "StandardPipeline" - quidu "3DFE047D006D" - messages (list Messages - (object Message "fireLifecycleEvent(BEFORE_START_EVENT)" - quid "3DFE05780138" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.6.1" - ordinal 21 - Operation "fireLifecycleEvent(AFTER_START_EVENT)" - quidu "000000000000" - creation FALSE) - (object Message "fireLifecycleEvent(START_EVENT)" - quid "3DFE05A80398" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.6.2" - ordinal 22 - Operation "fireLifecycleEvent(BEFORE_START_EVENT)" - quidu "000000000000" - creation FALSE) - (object Message "fireLifecycleEvent(AFTER_EVENT)" - quid "3DFE05BA0196" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "8.6.3" - ordinal 23 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @85 - logical_models (list unit_reference_list - (object Object "StandardHost" - quid "3DFE0538017B" - collaborators (list link_list - (object Link - quid "3DFE066C0340" - supplier "StandardHost" - quidu "3DFE0538017B" - messages (list Messages - (object Message "fireLifecycleEvent(START_EVENT)" - quid "3DFE066C0341" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE06D20293" - supplier "HostConfig" - quidu "3DFE06A60131" - messages (list Messages - (object Message "interested[i].lifecycleEvent()" - quid "3DFE06D20294" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 1 - quidu "000000000000" - creation FALSE) - (object Message "install()" - quid "3DFE078B03BB" - frequency "Aperiodic" - synchronization "Simple" - dir "ToClientFromSupplier" - sequence "2.6" - ordinal 7 - quidu "000000000000" - creation FALSE) - (object Message "install()" - quid "3DFE132D0309" - frequency "Aperiodic" - synchronization "Simple" - dir "ToClientFromSupplier" - sequence "5" - ordinal 13 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE07B100BD" - supplier "StandardHostDeployer" - quidu "3DFE079A0055" - messages (list Messages - (object Message "install()" - quid "3DFE07B100BE" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 8 - quidu "000000000000" - creation FALSE) - (object Message "install() // same as above" - quid "3DFE133A036C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "6" - ordinal 17 - Operation "install()" - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "HostConfig" - quid "3DFE06A60131" - collaborators (list link_list - (object Link - quid "3DFE06E9028C" - supplier "HostConfig" - quidu "3DFE06A60131" - messages (list Messages - (object Message "setDeployXML()" - quid "3DFE06E9028D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.1" - ordinal 2 - quidu "000000000000" - creation FALSE) - (object Message "setLiveDeploy()" - quid "3DFE06F300FF" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.2" - ordinal 3 - quidu "000000000000" - creation FALSE) - (object Message "setUnpacksWar()" - quid "3DFE06FB00D9" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.3" - ordinal 4 - quidu "000000000000" - creation FALSE) - (object Message "setXMLValidation()" - quid "3DFE070C0015" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.4" - ordinal 5 - quidu "000000000000" - creation FALSE) - (object Message "deployDescriptors()" - quid "3DFE073B0031" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2.5" - ordinal 6 - quidu "000000000000" - creation FALSE) - (object Message "deployApps()" - quid "3DFE131F0327" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "4" - ordinal 12 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardHostDeployer" - quid "3DFE079A0055" - collaborators (list link_list - (object Link - quid "3DFE07D200EC" - supplier "Digester" - quidu "3DFE07C9034C" - messages (list Messages - (object Message "create()" - quid "3DFE07D200ED" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1" - ordinal 9 - quidu "000000000000" - creation FALSE) - (object Message "parse()" - quid "3DFE07D603D7" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.6" - ordinal 16 - quidu "000000000000" - creation FALSE) - (object Message "add(ContextRuleSet)" - quid "3DFE08FA003D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.3" - ordinal 11 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE087D01E2" - supplier "StandardHostDeployer" - quidu "3DFE079A0055") - (object Link - quid "3DFE08DA029A" - supplier "ContextRuleSet" - quidu "3DFE0834016F" - messages (list Messages - (object Message "new()" - quid "3DFE08DA029B" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.2" - ordinal 10 - quidu "000000000000" - creation FALSE) - (object Message "add(NamingRuleSet())" - quid "3DFE0907015F" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.5" - ordinal 15 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE08E00090" - supplier "NamingRuleSet" - quidu "3DFE08D00173" - messages (list Messages - (object Message "new()" - quid "3DFE08E00091" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.4" - ordinal 14 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Digester" - quid "3DFE07C9034C" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "ContextRuleSet" - quid "3DFE0834016F" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "NamingRuleSet" - quid "3DFE08D00173" - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @86 - logical_models (list unit_reference_list - (object Object "Digester" - quid "3DFE095A0371" - collaborators (list link_list - (object Link - quid "3DFE0E7801DA" - supplier "Digester" - quidu "3DFE095A0371" - messages (list Messages - (object Message "parse" - quid "3DFE0E7801DB" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE) - (object Message "startElement()" - quid "3DFE0F2F03D2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 1 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE0F400213" - supplier "Rule" - quidu "3DFE0E7400D0" - messages (list Messages - (object Message "begin()" - quid "3DFE0F400214" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 2 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Rule" - quid "3DFE0E7400D0" - collaborators (list link_list - (object Link - quid "3DFE0FD30265" - supplier "StandardContext" - quidu "3DFE0FC502A1" - messages (list Messages - (object Message "newInstance()" - quid "3DFE0FD30266" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1" - ordinal 3 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE102002E8" - supplier "SetPropertiesRule" - quidu "3DFE100303A4" - messages (list Messages - (object Message "begin()" - quid "3DFE102002E9" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.2" - ordinal 6 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE127F0024" - supplier "Rule" - quidu "3DFE0E7400D0") - (object Link - quid "3DFE128501C7" - supplier "SetNextRule" - quidu "3DFE12690267" - messages (list Messages - (object Message "end()" - quid "3DFE128501C8" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.3" - ordinal 8 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardContext" - quid "3DFE0FC502A1" - collaborators (list link_list - (object Link - quid "3DFE114A0192" - supplier "StandardPipeline" - quidu "3DFE112F003F" - messages (list Messages - (object Message "setBasic(StandardContextValve)" - quid "3DFE114A0193" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.2" - ordinal 5 - Operation "setBasic" - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE115E001E" - supplier "StandardContextValve" - quidu "3DFE110D0375" - messages (list Messages - (object Message "new()" - quid "3DFE115E001F" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1" - ordinal 4 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "SetPropertiesRule" - quid "3DFE100303A4" - collaborators (list link_list - (object Link - quid "3DFE11D50390" - supplier "StandardContext" - quidu "3DFE0FC502A1" - messages (list Messages - (object Message "//Using BeanUtil, set the object properties (from ex: admin.xml)" - quid "3DFE11D50391" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.2.1" - ordinal 7 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardContextValve" - quid "3DFE110D0375" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardPipeline" - quid "3DFE112F003F" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "SetNextRule" - quid "3DFE12690267" - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @87 - logical_models (list unit_reference_list - (object Object "StandardContext" - quid "3DFE196D00D9" - collaborators (list link_list - (object Link - quid "3DFE200603BD" - supplier "WebappLoader" - quidu "3DFE1FFA0347" - messages (list Messages - (object Message "new" - quid "3DFE200603BE" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.1" - ordinal 5 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE200C0299" - supplier "StandardContext" - quidu "3DFE196D00D9" - messages (list Messages - (object Message "setLoader" - quid "3DFE200C029A" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.2" - ordinal 6 - quidu "000000000000" - creation FALSE) - (object Message "setManager" - quid "3DFE2032001C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.4" - ordinal 8 - quidu "000000000000" - creation FALSE) - (object Message "fireLifecycleEvent(START_EVENT)" - quid "3DFE205B01A2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.5" - ordinal 9 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE202C024F" - supplier "StandardManager" - quidu "3DFE201F0105" - messages (list Messages - (object Message "new" - quid "3DFE202C0250" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.3" - ordinal 7 - quidu "000000000000" - creation FALSE) - (object Message "start()" - quid "3DFE20B600E5" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.7" - ordinal 12 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE20960002" - supplier "ContextConfig" - quidu "3DFE2087028C" - messages (list Messages - (object Message " // Notify interested LifecycleListeners" - quid "3DFE20960003" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6" - ordinal 10 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardHostDeployer" - quid "3DFE1D8A02DC" - collaborators (list link_list - (object Link - quid "3DFE1FAF0014" - supplier "StandardHost" - quidu "3DFE1DF20141" - messages (list Messages - (object Message "addChild" - quid "3DFE1FB60277" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1" - ordinal 3 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardHost" - quid "3DFE1DF20141" - collaborators (list link_list - (object Link - quid "3DFE1FC40227" - supplier "StandardContext" - quidu "3DFE196D00D9" - messages (list Messages - (object Message "start()" - quid "3DFE1FC40228" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1" - ordinal 4 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "WebappLoader" - quid "3DFE1FFA0347" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardManager" - quid "3DFE201F0105" - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "ContextConfig" - quid "3DFE2087028C" - collaborators (list link_list - (object Link - quid "3DFE20CF018B" - supplier "ContextConfig" - quidu "3DFE2087028C" - messages (list Messages - (object Message "start()" - quid "3DFE20CF018C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.1" - ordinal 11 - quidu "000000000000" - creation FALSE) - (object Message "defaultConfig()" - quid "3DFE20E303E2" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.2" - ordinal 13 - quidu "000000000000" - creation FALSE) - (object Message "applicationConfig()" - quid "3DFE211D01A1" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3" - ordinal 14 - Operation "applicationConfig" - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE21B60287" - supplier "Digester" - quidu "3DFE13960364" - messages (list Messages - (object Message "create()" - quid "3DFE21B60288" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3.1" - ordinal 15 - quidu "000000000000" - creation FALSE) - (object Message "createWarpper() // Invoked by a WebWrapperRule (not Directly by the Digester)" - quid "3DFE228B03BA" - frequency "Aperiodic" - synchronization "Simple" - dir "ToClientFromSupplier" - sequence "3.1.1.6.3.1.2" - ordinal 17 - Operation "createWarpper() // Invoked by a Rule (not Directly by the Digester)" - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE22560061" - supplier "StandardWrapper" - quidu "3DFE220C0122" - messages (list Messages - (object Message "new" - quid "3DFE229A0004" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3.1.2.1" - ordinal 18 - quidu "000000000000" - creation FALSE) - (object Message "addInstanceListener()" - quid "3DFE22A700C1" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3.2" - ordinal 19 - Operation "addInstanceListener" - quidu "000000000000" - creation FALSE) - (object Message "addLifecycleListener()" - quid "3DFE22C701CC" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3.3" - ordinal 20 - quidu "000000000000" - creation FALSE) - (object Message "addContainerListener()" - quid "3DFE22E80364" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3.4" - ordinal 21 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj TRUE - multi FALSE) - (object Object "Digester" - quid "3DFE13960364" - collaborators (list link_list - (object Link - quid "3DFE19AE0064" - supplier "Digester" - quidu "3DFE13960364" - messages (list Messages - (object Message "parse" - quid "3DFE19AE0065" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE) - (object Message "startElement()" - quid "3DFE19B102E9" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 1 - quidu "000000000000" - creation FALSE) - (object Message "// Process web.xml * tld.xml" - quid "3DFE21BE021B" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1.1.6.3.1.1" - ordinal 16 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE1DFB0021" - supplier "StandardHostDeployer" - quidu "3DFE1D8A02DC" - messages (list Messages - (object Message "addChild" - quid "3DFE1DFB0022" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 2 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE22190225" - supplier "StandardWrapper" - quidu "3DFE220C0122")) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardWrapper" - quid "3DFE220C0122" - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @88 - logical_models (list unit_reference_list - (object Object "ThreadPool" - quid "3DFE402B02C5" - collaborators (list link_list - (object Link - quid "3DFE40E701AD" - supplier "TcpWorkerThread" - quidu "3DFE403200F8" - messages (list Messages - (object Message "runIt()" - quid "3DFE40E701AE" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "TcpWorkerThread" - quid "3DFE403200F8" - collaborators (list link_list - (object Link - quid "3DFE40FC010D" - supplier "Http11Protocol" - quidu "3DFE40750177" - messages (list Messages - (object Message "processConnection" - quid "3DFE40FC010E" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1" - ordinal 1 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "Http11Protocol" - quid "3DFE40750177" - collaborators (list link_list - (object Link - quid "3DFE4111029E" - supplier "Http11Protocol" - quidu "3DFE40750177" - messages (list Messages - (object Message "process()" - quid "3DFE4111029F" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.1" - ordinal 2 - quidu "000000000000" - creation FALSE) - (object Message "parseHeaders()" - quid "3DFE415C0151" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 3 - quidu "000000000000" - creation FALSE) - (object Message "prepareRequest()" - quid "3DFE41A60161" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 4 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE41D60106" - supplier "CoyoteAdapter" - quidu "3DFE410600DF" - messages (list Messages - (object Message "service()" - quid "3DFE41D60107" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "4" - ordinal 5 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "CoyoteAdapter" - quid "3DFE410600DF" - collaborators (list link_list - (object Link - quid "3DFE422C01F0" - supplier "CoyoteAdapter" - quidu "3DFE410600DF" - messages (list Messages - (object Message "postParseRequest()" - quid "3DFE422C01F1" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "5" - ordinal 6 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE42800237" - supplier "StandardEngine" - quidu "3DFE424B0349" - messages (list Messages - (object Message "invoke()" - quid "3DFE42800238" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "6" - ordinal 7 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardEngine" - quid "3DFE424B0349" - collaborators (list link_list - (object Link - quid "3DFE429A002C" - supplier "StandardPipeline" - quidu "3DFE42900045" - messages (list Messages - (object Message "invoke()" - quid "3DFE429A002D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "6.1" - ordinal 8 - Operation "invoke" - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardPipeline" - quid "3DFE42900045" - collaborators (list link_list - (object Link - quid "3DFE42CE022F" - supplier "StandardValveContext" - quidu "3DFE42C002B1" - messages (list Messages - (object Message "invoke()" - quid "3DFE42CE0230" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "6.1.1" - ordinal 9 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardValveContext" - quid "3DFE42C002B1" - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @89 - logical_models (list unit_reference_list - (object Object "StandardContextValve" - quid "3DFE4307001E" - collaborators (list link_list - (object Link - quid "3DFE434C019A" - supplier "StandardEngineValve" - quidu "3DFE432801F3" - messages (list Messages - (object Message "invoke()" - quid "3DFE434C019B" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE43C203A3" - supplier "ErrorReportValve" - quidu "3DFE438C028D" - messages (list Messages - (object Message "invoke()" - quid "3DFE43C203A4" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3" - ordinal 4 - quidu "000000000000" - creation FALSE) - (object Message "invokeNext()" - quid "3DFE46330293" - frequency "Aperiodic" - synchronization "Simple" - dir "ToClientFromSupplier" - sequence "3.2" - ordinal 6 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE46E70025" - supplier "ErrorDispatcherValve" - quidu "3DFE451F01EC" - messages (list Messages - (object Message "invoke()" - quid "3DFE46E70026" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "4" - ordinal 7 - quidu "000000000000" - creation FALSE) - (object Message "invokeNext" - quid "3DFE475D03A0" - frequency "Aperiodic" - synchronization "Simple" - dir "ToClientFromSupplier" - sequence "4.1" - ordinal 8 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE476503C9" - supplier "StandardHostValve" - quidu "3DFE47310130" - messages (list Messages - (object Message "invoke()" - quid "3DFE476503CA" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "5" - ordinal 9 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardEngineValve" - quid "3DFE432801F3" - collaborators (list link_list - (object Link - quid "3DFE436C009C" - supplier "StandardHost" - quidu "3DFE436503BD" - messages (list Messages - (object Message "map()" - quid "3DFE436C009D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1" - ordinal 1 - quidu "000000000000" - creation FALSE) - (object Message "invoke()" - quid "3DFE43830063" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2" - ordinal 2 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE437F0143" - supplier "StandardEngineValve" - quidu "3DFE432801F3")) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardHost" - quid "3DFE436503BD" - collaborators (list link_list - (object Link - quid "3DFE43B903BE" - supplier "StandardContextValve" - quidu "3DFE4307001E" - messages (list Messages - (object Message "invoke()" - quid "3DFE43B903BF" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "2" - ordinal 3 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "ErrorReportValve" - quid "3DFE438C028D" - collaborators (list link_list - (object Link - quid "3DFE442501B0" - supplier "ErrorReportValve" - quidu "3DFE438C028D" - messages (list Messages - (object Message "report()" - quid "3DFE442501B1" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "3.1" - ordinal 5 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE452A00F7" - supplier "ErrorDispatcherValve" - quidu "3DFE451F01EC")) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "ErrorDispatcherValve" - quid "3DFE451F01EC" - collaborators (list link_list - (object Link - quid "3DFE47500148" - supplier "StandardHostValve" - quidu "3DFE47310130") - (object Link - quid "3DFE47580335" - supplier "ErrorDispatcherValve" - quidu "3DFE451F01EC")) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardHostValve" - quid "3DFE47310130" - collaborators (list link_list - (object Link - quid "3DFE47CD0166" - supplier "StandardHostValve" - quidu "3DFE47310130" - messages (list Messages - (object Message "map() //Context" - quid "3DFE47CD0167" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "5.1" - ordinal 10 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE47D500B3" - supplier "StandardContext" - quidu "3DFE47C100F1" - messages (list Messages - (object Message "invoke()" - quid "3DFE47D500B4" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "5.2" - ordinal 11 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardContext" - quid "3DFE47C100F1" - persistence "Transient" - creationObj FALSE - multi FALSE))) - (object Mechanism @90 - logical_models (list unit_reference_list - (object Object "StandardContext" - quid "3DFE48B001D1" - collaborators (list link_list - (object Link - quid "3DFE48BE0267" - supplier "StandardPipeline" - quidu "3DFE48B80088" - messages (list Messages - (object Message "invoke()" - quid "3DFE48BE0268" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1" - ordinal 0 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardPipeline" - quid "3DFE48B80088" - collaborators (list link_list - (object Link - quid "3DFE48EA0039" - supplier "StandardValveContext" - quidu "3DFE48D000DC" - messages (list Messages - (object Message "invoke()" - quid "3DFE48EA003A" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1" - ordinal 1 - quidu "000000000000" - creation FALSE) - (object Message "invoke()" - quid "3DFE4976015D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2" - ordinal 6 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardValveContext" - quid "3DFE48D000DC" - collaborators (list link_list - (object Link - quid "3DFE491102D5" - supplier "StandardContextValve" - quidu "3DFE490303A7" - messages (list Messages - (object Message "invoke()" - quid "3DFE491102D6" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.1" - ordinal 2 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE4993023B" - supplier "StandardWrapperValve" - quidu "3DFE49890056" - messages (list Messages - (object Message "invoke()" - quid "3DFE4993023C" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2.1" - ordinal 7 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardContextValve" - quid "3DFE490303A7" - collaborators (list link_list - (object Link - quid "3DFE492F033C" - supplier "StandardContextValve" - quidu "3DFE490303A7" - messages (list Messages - (object Message "map //return Wrapper" - quid "3DFE492F033D" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.1.1" - ordinal 3 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE494A0150" - supplier "StandardWrapper" - quidu "3DFE49370351" - messages (list Messages - (object Message "invoke()" - quid "3DFE494A0151" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.1.2" - ordinal 4 - Operation "invoke" - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardWrapper" - quid "3DFE49370351" - collaborators (list link_list - (object Link - quid "3DFE495F0287" - supplier "StandardPipeline" - quidu "3DFE48B80088" - messages (list Messages - (object Message "invoke()" - quid "3DFE495F0288" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.1.1.2.1" - ordinal 5 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "StandardWrapperValve" - quid "3DFE49890056" - collaborators (list link_list - (object Link - quid "3DFE49DB018A" - supplier "StandardWrapperValve" - quidu "3DFE49890056") - (object Link - quid "3DFE49EC004E" - supplier "StandardWrapper" - quidu "3DFE49370351" - messages (list Messages - (object Message "allocate()" - quid "3DFE49EC004F" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2.1.1" - ordinal 8 - quidu "000000000000" - creation FALSE) - (object Message "return servlet" - quid "3DFE4A200067" - frequency "Aperiodic" - synchronization "Return" - dir "ToClientFromSupplier" - sequence "1.2.1.1.1" - ordinal 9 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE4A29027D" - supplier "ApplicationFilterChain" - quidu "3DFE4A1500B2" - messages (list Messages - (object Message "createFilterChain()" - quid "3DFE4A29027E" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2.1.1.1.1" - ordinal 10 - quidu "000000000000" - creation FALSE) - (object Message "doFilter()" - quid "3DFE4A490283" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2.1.2" - ordinal 11 - Operation "doFilter" - quidu "000000000000" - creation FALSE) - (object Message "return" - quid "3DFE4CB4025B" - frequency "Aperiodic" - synchronization "Return" - dir "ToClientFromSupplier" - sequence "1.2.1.2.3" - ordinal 14 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "ApplicationFilterChain" - quid "3DFE4A1500B2" - collaborators (list link_list - (object Link - quid "3DFE4C2701C2" - supplier "ApplicationFilterChain" - quidu "3DFE4A1500B2" - messages (list Messages - (object Message "internalDoFilter()" - quid "3DFE4C2701C3" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2.1.2.1" - ordinal 12 - quidu "000000000000" - creation FALSE))) - (object Link - quid "3DFE4CA502BE" - supplier "$UNNAMED$0" - quidu "3DFE4BAE0056" - messages (list Messages - (object Message "service()" - quid "3DFE4CA502BF" - frequency "Aperiodic" - synchronization "Simple" - dir "FromClientToSupplier" - sequence "1.2.1.2.2" - ordinal 13 - quidu "000000000000" - creation FALSE)))) - persistence "Transient" - creationObj FALSE - multi FALSE) - (object Object "$UNNAMED$0" - quid "3DFE4BAE0056" - stereotype "Servlet" - persistence "Transient" - creationObj TRUE - multi FALSE)))) - logical_presentations (list unit_reference_list - (object ClassDiagram "Main" - quid "3DFDF6D2021B" - title "Main" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list)) - (object ClassDiagram "high level packaging" - quid "3E42DE75004B" - title "high level packaging" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list - (object CategoryView "Logical View::org.apache.catalina" @91 - location (1024, 752) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @91 - location (780, 668) - fill_color 13434879 - nlines 2 - max_width 488 - justify 0 - label "org.apache.catalina") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DE8D0082" - width 500 - height 181) - (object CategoryView "Logical View::org.apache.coyote" @92 - location (512, 1184) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @92 - location (237, 1090) - fill_color 13434879 - nlines 2 - max_width 550 - justify 0 - label "org.apache.coyote") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DE9F0132" - width 563 - height 200) - (object CategoryView "Logical View::org.apache.tomcat.util" @93 - location (1920, 1104) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @93 - location (1670, 1020) - fill_color 13434879 - nlines 2 - max_width 500 - justify 0 - label "org.apache.tomcat.util") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DEDF01F2" - width 512 - height 181) - (object ImportView "" @94 - stereotype TRUE - line_color 3342489 - quidu "3E42DEF601EB" - client @91 - supplier @93 - line_style 0) - (object ImportView "" @95 - stereotype TRUE - line_color 3342489 - quidu "3E42DEFC00B3" - client @92 - supplier @93 - line_style 0) - (object CategoryView "Logical View::org.apache.jasper" @96 - location (1728, 624) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @96 - location (1437, 540) - fill_color 13434879 - nlines 2 - max_width 582 - justify 0 - label "org.apache.jasper") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E42DEFF0270" - width 594 - height 181) - (object ImportView "" @97 - stereotype TRUE - line_color 3342489 - quidu "3E42DF700060" - client @91 - supplier @92 - line_style 0) - (object NoteView @98 - location (1200, 208) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @98 - location (847, 143) - fill_color 13434879 - nlines 2 - max_width 671 - label "High Level package dependencies") - line_color 3342489 - fill_color 13434879 - width 731 - height 143) - (object CategoryView "Logical View::org.apache.naming" @99 - location (352, 304) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @99 - location (83, 220) - fill_color 13434879 - nlines 2 - max_width 538 - justify 0 - label "org.apache.naming") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3E43D1580339" - width 550 - height 181) - (object ImportView "" @100 - stereotype TRUE - line_color 3342489 - quidu "3E43D165039C" - client @91 - supplier @99 - line_style 0))) - (object InteractionDiagram "1. catalina_load" - mechanism_ref @82 - quid "3DFDF8EE0267" - title "1. catalina_load" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 519 - items (list diagram_item_list - (object InterObjView "Bootstrap" @101 - location (224, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @101 - location (224, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Bootstrap") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDF8FD0345" - width 300 - height 1972 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @102 - location (224, 368) - line_color 3342489 - InterObjView @101 - height 1738 - y_coord 1678 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @103 - location (224, 368) - line_color 3342489 - InterObjView @101 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "Digester" @104 - location (896, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @104 - location (896, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Digester") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFAF201A1" - width 300 - height 1972 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @105 - location (896, 1232) - line_color 3342489 - InterObjView @104 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @106 - location (896, 1312) - line_color 3342489 - InterObjView @104 - height 264 - y_coord 204 - Nested FALSE)) - (object InterObjView "ServerLifecycleListener" @107 - location (1232, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @107 - location (1232, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "ServerLifecycleListener") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFB4B0217" - width 300 - height 1972 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @108 - location (1232, 1328) - line_color 3342489 - InterObjView @107 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "GlobalResourcesLifecycleListener" @109 - location (1568, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @109 - location (1568, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 322 - justify 0 - label "GlobalResourcesLifecycleListener") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFB7A02AB" - width 340 - height 1972 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @110 - location (1568, 1456) - line_color 3342489 - InterObjView @109 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "SecurityConfig" @111 - location (1920, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @111 - location (1920, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "SecurityConfig") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFBD802BA" - width 300 - height 1972 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @112 - location (1920, 1600) - line_color 3342489 - InterObjView @111 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @113 - location (1920, 1680) - line_color 3342489 - InterObjView @111 - height 146 - y_coord 86 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @114 - location (1920, 1760) - line_color 3342489 - InterObjView @111 - height 60 - y_coord 0 - Nested TRUE)) - (object SelfMessView "" @115 - location (16, 368) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @116 - Parent_View @115 - location (315, 324) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDF9210009" - anchor_loc 1 - nlines 1 - max_width 340 - justify 0 - label "initClassLoaders()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @101 - supplier @101 - Focus_Src @102 - Focus_Entry @103 - origin (240, 368) - terminus (390, 368) - ordinal 0) - (object NoteView @117 - location (1152, 1072) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @117 - location (1014, 1012) - fill_color 13434879 - nlines 2 - max_width 240 - label "parse server.xml") - line_color 3342489 - fill_color 13434879 - width 300 - height 132) - (object NoteView @118 - location (1376, 80) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @118 - location (1238, 20) - fill_color 13434879 - nlines 2 - max_width 240 - label "MBeans") - line_color 3342489 - fill_color 13434879 - width 300 - height 132) - (object AttachView "" @119 - stereotype TRUE - line_color 3342489 - client @118 - supplier @107 - line_style 0) - (object AttachView "" @120 - stereotype TRUE - line_color 3342489 - client @109 - supplier @118 - line_style 0) - (object NoteView @121 - location (2160, 2176) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @121 - location (1947, 2113) - fill_color 13434879 - nlines 2 - max_width 390 - label "#1Catalina.load()") - line_color 3342489 - fill_color 13434879 - width 450 - height 138) - (object InterObjView "Catalina" @122 - location (560, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @122 - location (560, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Catalina") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDF90A0330" - width 300 - height 1972 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @123 - location (560, 464) - line_color 3342489 - InterObjView @122 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @124 - location (560, 608) - line_color 3342489 - InterObjView @122 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @125 - location (560, 720) - line_color 3342489 - InterObjView @122 - height 1326 - y_coord 1266 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @126 - location (560, 896) - line_color 3342489 - InterObjView @122 - height 194 - y_coord 134 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @127 - location (560, 896) - InterObjView @122 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @128 - location (560, 1024) - line_color 3342489 - InterObjView @122 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @129 - location (560, 1024) - InterObjView @122 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @130 - location (560, 1152) - line_color 3342489 - InterObjView @122 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @131 - location (560, 1152) - InterObjView @122 - height 60 - y_coord 0 - Nested TRUE)) - (object SelfMessView "" @132 - location (16, 896) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @133 - Parent_View @132 - location (651, 852) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFA8001DA" - anchor_loc 1 - nlines 1 - max_width 160 - justify 0 - label "initDirs()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @122 - supplier @122 - Focus_Src @127 - Focus_Entry @126 - origin (576, 896) - terminus (726, 896) - ordinal 4) - (object SelfMessView "" @134 - location (16, 1024) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @135 - Parent_View @134 - location (701, 981) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFA8B0347" - anchor_loc 1 - nlines 1 - max_width 228 - justify 0 - label "initNaming()" - pctDist 0.840000 - height 44 - orientation 0) - line_color 3342489 - client @122 - supplier @122 - Focus_Src @129 - Focus_Entry @128 - origin (576, 1024) - terminus (726, 1024) - ordinal 5) - (object SelfMessView "" @136 - location (16, 1152) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @137 - Parent_View @136 - location (686, 1109) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFAAD01AC" - anchor_loc 1 - nlines 1 - max_width 180 - justify 0 - label "initialize()" - pctDist 0.733333 - height 44 - orientation 0) - line_color 3342489 - client @122 - supplier @122 - Focus_Src @131 - Focus_Entry @130 - origin (576, 1152) - terminus (726, 1152) - ordinal 6) - (object InterMessView "" @138 - location (16, 464) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @139 - Parent_View @138 - location (389, 437) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDF91A010D" - anchor_loc 1 - nlines 1 - max_width 265 - justify 0 - label "newInstance()" - pctDist 0.495082 - height 28 - orientation 0) - line_color 3342489 - client @101 - supplier @122 - Focus_Src @102 - Focus_Entry @123 - origin (239, 464) - terminus (544, 464) - ordinal 1) - (object InterMessView "" @140 - location (16, 608) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @141 - Parent_View @140 - location (456, 565) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDF97900C2" - anchor_loc 1 - nlines 1 - max_width 445 - justify 0 - label "setParentClassLoader()" - pctDist 0.711475 - height 44 - orientation 0) - line_color 3342489 - client @101 - supplier @122 - Focus_Src @102 - Focus_Entry @124 - origin (239, 608) - terminus (544, 608) - ordinal 2) - (object InterMessView "" @142 - location (16, 720) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @143 - Parent_View @142 - location (391, 676) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFA3402F2" - anchor_loc 1 - nlines 1 - max_width 108 - justify 0 - label "load()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @101 - supplier @122 - Focus_Src @102 - Focus_Entry @125 - origin (239, 720) - terminus (544, 720) - ordinal 3) - (object InterMessView "" @144 - location (16, 1232) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @145 - Parent_View @144 - location (727, 1188) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFAF800C4" - anchor_loc 1 - nlines 1 - max_width 302 - justify 0 - label "createDigester()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @122 - supplier @104 - Focus_Src @125 - Focus_Entry @105 - origin (575, 1232) - terminus (880, 1232) - ordinal 7) - (object InterMessView "" @146 - location (16, 1312) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @147 - Parent_View @146 - location (727, 1268) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFB0100B2" - anchor_loc 1 - nlines 1 - max_width 136 - justify 0 - label "parse()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @122 - supplier @104 - Focus_Src @125 - Focus_Entry @106 - origin (575, 1312) - terminus (880, 1312) - ordinal 8) - (object AttachView "" @148 - stereotype TRUE - line_color 3342489 - client @147 - supplier @117 - line_style 0) - (object InterMessView "" @149 - location (16, 1328) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @150 - Parent_View @149 - location (1063, 1284) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFB8400A7" - anchor_loc 1 - nlines 1 - max_width 265 - justify 0 - label "newInstance()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @104 - supplier @107 - Focus_Src @106 - Focus_Entry @108 - origin (911, 1328) - terminus (1216, 1328) - ordinal 9) - (object InterMessView "" @151 - location (16, 1456) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @152 - Parent_View @151 - location (1231, 1412) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFB920148" - anchor_loc 1 - nlines 1 - max_width 265 - justify 0 - label "newInstance()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @104 - supplier @109 - Focus_Src @106 - Focus_Entry @110 - origin (911, 1456) - terminus (1552, 1456) - ordinal 10) - (object InterMessView "" @153 - location (16, 1600) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @154 - Parent_View @153 - location (1239, 1556) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFBEA00C2" - anchor_loc 1 - nlines 1 - max_width 265 - justify 0 - label "newInstance()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @122 - supplier @111 - Focus_Src @125 - Focus_Entry @112 - origin (575, 1600) - terminus (1904, 1600) - ordinal 11) - (object InterMessView "" @155 - location (16, 1680) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @156 - Parent_View @155 - location (1239, 1636) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFBF401F2" - anchor_loc 1 - nlines 1 - max_width 425 - justify 0 - label "setPackageDefinition()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @122 - supplier @111 - Focus_Src @125 - Focus_Entry @113 - origin (575, 1680) - terminus (1904, 1680) - ordinal 12) - (object InterMessView "" @157 - location (16, 1760) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @158 - Parent_View @157 - location (1239, 1716) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFC1203C2" - anchor_loc 1 - nlines 1 - max_width 386 - justify 0 - label "setPackageAccess()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @122 - supplier @111 - Focus_Src @125 - Focus_Entry @114 - origin (575, 1760) - terminus (1904, 1760) - ordinal 13))) - (object InteractionDiagram "2. catalina_initliaze" - mechanism_ref @83 - quid "3DFDFC44002A" - title "2. catalina_initliaze" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 87 - items (list diagram_item_list - (object InterObjView "Catalina" @159 - location (176, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @159 - location (176, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Catalina") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFC8F015F" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @160 - location (176, 400) - line_color 3342489 - InterObjView @159 - height 914 - y_coord 854 - Nested FALSE)) - (object InterObjView "StandardServer" @161 - location (496, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @161 - location (496, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardServer") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFCCB006B" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @162 - location (496, 400) - line_color 3342489 - InterObjView @161 - height 854 - y_coord 794 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @163 - location (496, 480) - line_color 3342489 - InterObjView @161 - height 768 - y_coord 708 - Nested TRUE)) - (object InterObjView "StandardService" @164 - location (832, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @164 - location (832, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardService") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFD370020" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @165 - location (832, 480) - line_color 3342489 - InterObjView @164 - height 708 - y_coord 648 - Nested FALSE)) - (object InterObjView "CoyoteConnector" @166 - location (1168, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @166 - location (1168, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "CoyoteConnector") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFE810313" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @167 - location (1168, 528) - line_color 3342489 - InterObjView @166 - height 600 - y_coord 540 - Nested FALSE)) - (object InterObjView "CoyoteAdapter" @168 - location (1504, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @168 - location (1504, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "CoyoteAdapter") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFDFFA00226" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @169 - location (1504, 576) - line_color 3342489 - InterObjView @168 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "Http11Protocol" @170 - location (1808, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @170 - location (1808, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Http11Protocol") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE016601A6" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @171 - location (1808, 704) - line_color 3342489 - InterObjView @170 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @172 - location (1808, 832) - line_color 3342489 - InterObjView @170 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "JkCoyoteAdapter" @173 - location (2144, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @173 - location (2144, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "JkCoyoteAdapter") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE01AD01A8" - width 300 - height 1180 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @174 - location (2144, 928) - line_color 3342489 - InterObjView @173 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @175 - location (2144, 1008) - line_color 3342489 - InterObjView @173 - height 60 - y_coord 0 - Nested FALSE)) - (object InterMessView "" @176 - location (16, 400) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @177 - Parent_View @176 - location (335, 356) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFD1F0076" - anchor_loc 1 - nlines 1 - max_width 180 - justify 0 - label "initialize()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @159 - supplier @161 - Focus_Src @160 - Focus_Entry @162 - origin (191, 400) - terminus (480, 400) - ordinal 0) - (object InterMessView "" @178 - location (16, 480) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @179 - Parent_View @178 - location (663, 436) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFD3D01C4" - anchor_loc 1 - nlines 1 - max_width 180 - justify 0 - label "initialize()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @161 - supplier @164 - Focus_Src @163 - Focus_Entry @165 - origin (511, 480) - terminus (816, 480) - ordinal 1) - (object InterMessView "" @180 - location (16, 528) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @181 - Parent_View @180 - location (999, 484) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFDFE990305" - anchor_loc 1 - nlines 1 - max_width 180 - justify 0 - label "initialize()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @164 - supplier @166 - Focus_Src @165 - Focus_Entry @167 - origin (847, 528) - terminus (1152, 528) - ordinal 2) - (object InterMessView "" @182 - location (16, 576) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @183 - Parent_View @182 - location (1335, 532) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE013D0217" - anchor_loc 1 - nlines 1 - max_width 106 - justify 0 - label "new()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @166 - supplier @168 - Focus_Src @167 - Focus_Entry @169 - origin (1183, 576) - terminus (1488, 576) - ordinal 3) - (object InterMessView "" @184 - location (1504, 704) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @185 - Parent_View @184 - location (1487, 660) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE01830330" - anchor_loc 1 - nlines 1 - max_width 106 - justify 0 - label "new()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @166 - supplier @170 - Focus_Src @167 - Focus_Entry @171 - origin (1183, 704) - terminus (1792, 704) - ordinal 4) - (object InterMessView "" @186 - location (1504, 832) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @187 - Parent_View @186 - location (1487, 788) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0188032C" - anchor_loc 1 - nlines 1 - max_width 80 - justify 0 - label "init()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @166 - supplier @170 - Focus_Src @167 - Focus_Entry @172 - origin (1183, 832) - terminus (1792, 832) - ordinal 5) - (object InterMessView "" @188 - location (16, 928) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @189 - Parent_View @188 - location (1655, 884) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE01BC038C" - anchor_loc 1 - nlines 1 - max_width 106 - justify 0 - label "new()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @166 - supplier @173 - Focus_Src @167 - Focus_Entry @174 - origin (1183, 928) - terminus (2128, 928) - ordinal 6) - (object InterMessView "" @190 - location (16, 1008) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @191 - Parent_View @190 - location (1655, 964) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE01C30164" - anchor_loc 1 - nlines 1 - max_width 80 - justify 0 - label "init()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @166 - supplier @173 - Focus_Src @167 - Focus_Entry @175 - origin (1183, 1008) - terminus (2128, 1008) - ordinal 7) - (object NoteView @192 - location (2144, 2016) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @192 - location (1947, 1957) - fill_color 13434879 - nlines 2 - max_width 359 - label "#2 Catalina.initialize()") - line_color 3342489 - fill_color 13434879 - width 419 - height 131))) - (object InteractionDiagram "3. catalina_start" - mechanism_ref @84 - quid "3DFE026D02D1" - title "3. catalina_start" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 2481 - items (list diagram_item_list - (object InterObjView "Bootstrap" @193 - location (192, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @193 - location (192, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Bootstrap") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE027700F5" - width 300 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @194 - location (192, 384) - line_color 3342489 - InterObjView @193 - height 2662 - y_coord 2602 - Nested FALSE)) - (object InterObjView "Catalina" @195 - location (480, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @195 - location (480, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Catalina") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE027D0067" - width 300 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @196 - location (480, 384) - line_color 3342489 - InterObjView @195 - height 2602 - y_coord 2542 - Nested FALSE)) - (object InterObjView "StandardServer" @197 - location (784, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @197 - location (784, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardServer") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE02B30015" - width 300 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @198 - location (784, 416) - line_color 3342489 - InterObjView @197 - height 2510 - y_coord 2450 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @199 - location (784, 480) - line_color 3342489 - InterObjView @197 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @200 - location (784, 592) - line_color 3342489 - InterObjView @197 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardService" @201 - location (1088, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @201 - location (1088, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardService") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE030400E3" - width 300 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @202 - location (1088, 704) - line_color 3342489 - InterObjView @201 - height 2162 - y_coord 2102 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @203 - location (1088, 752) - line_color 3342489 - InterObjView @201 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @204 - location (1088, 864) - line_color 3342489 - InterObjView @201 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardEngine" @205 - location (1424, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @205 - location (1424, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 332 - justify 0 - label "StandardEngine") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE034700C2" - width 350 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @206 - location (1424, 976) - line_color 3342489 - InterObjView @205 - height 1830 - y_coord 1770 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @207 - location (1424, 1056) - line_color 3342489 - InterObjView @205 - height 1744 - y_coord 1684 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @208 - location (1424, 1056) - line_color 3342489 - InterObjView @205 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @209 - location (1424, 1168) - line_color 3342489 - InterObjView @205 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @210 - location (1424, 1296) - line_color 3342489 - InterObjView @205 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @211 - location (1424, 1408) - line_color 3342489 - InterObjView @205 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @212 - location (1424, 1536) - line_color 3342489 - InterObjView @205 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @213 - location (1424, 1648) - line_color 3342489 - InterObjView @205 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardHost" @214 - location (1760, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @214 - location (1760, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardHost") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE03F2035D" - width 300 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @215 - location (1760, 1760) - line_color 3342489 - InterObjView @214 - height 980 - y_coord 920 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @216 - location (1760, 1808) - line_color 3342489 - InterObjView @214 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @217 - location (1760, 1920) - line_color 3342489 - InterObjView @214 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @218 - location (1760, 2032) - line_color 3342489 - InterObjView @214 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @219 - location (1760, 2144) - line_color 3342489 - InterObjView @214 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @220 - location (1760, 2256) - line_color 3342489 - InterObjView @214 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardPipeline" @221 - location (2080, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @221 - location (2080, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 326 - justify 0 - label "StandardPipeline") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE047D006D" - width 344 - height 2912 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @222 - location (2080, 2368) - line_color 3342489 - InterObjView @221 - height 312 - y_coord 252 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @223 - location (2080, 2416) - line_color 3342489 - InterObjView @221 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @224 - location (2080, 2480) - line_color 3342489 - InterObjView @221 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @225 - location (2080, 2560) - line_color 3342489 - InterObjView @221 - height 60 - y_coord 0 - Nested TRUE)) - (object InterMessView "" @226 - location (16, 384) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @227 - Parent_View @226 - location (335, 340) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE02830374" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @193 - supplier @195 - Focus_Src @194 - Focus_Entry @196 - origin (207, 384) - terminus (464, 384) - ordinal 0) - (object InterMessView "" @228 - location (16, 416) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @229 - Parent_View @228 - location (631, 372) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE02BA0188" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @195 - supplier @197 - Focus_Src @196 - Focus_Entry @198 - origin (495, 416) - terminus (768, 416) - ordinal 1) - (object SelfMessView "" @230 - location (16, 480) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @231 - Parent_View @230 - location (1244, 437) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE02D3006C" - anchor_loc 1 - nlines 1 - max_width 854 - justify 0 - label "fireLifecycleEvent(BEFORE_START_EVENT)" - pctDist 2.960000 - height 44 - orientation 0) - line_color 3342489 - client @197 - supplier @197 - Focus_Src @198 - Focus_Entry @199 - origin (800, 480) - terminus (950, 480) - ordinal 2) - (object SelfMessView "" @232 - location (16, 592) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @233 - Parent_View @232 - location (1146, 549) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE02DF02DF" - anchor_loc 1 - nlines 1 - max_width 658 - justify 0 - label "fireLifecycleEvent(START_EVENT)" - pctDist 2.313333 - height 44 - orientation 0) - line_color 3342489 - client @197 - supplier @197 - Focus_Src @198 - Focus_Entry @200 - origin (800, 592) - terminus (950, 592) - ordinal 3) - (object InterMessView "" @234 - location (16, 704) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @235 - Parent_View @234 - location (935, 660) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE030C02B3" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @197 - supplier @201 - Focus_Src @198 - Focus_Entry @202 - origin (799, 704) - terminus (1072, 704) - ordinal 4) - (object SelfMessView "" @236 - location (16, 752) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @237 - Parent_View @236 - location (1531, 708) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE031D0022" - anchor_loc 1 - nlines 1 - max_width 854 - justify 0 - label "fireLifecycleEvent(BEFORE_START_EVENT)" - pctDist 2.853333 - height 45 - orientation 0) - line_color 3342489 - client @201 - supplier @201 - Focus_Src @202 - Focus_Entry @203 - origin (1104, 752) - terminus (1254, 752) - ordinal 5) - (object SelfMessView "" @238 - location (16, 864) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @239 - Parent_View @238 - location (1449, 821) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0330019B" - anchor_loc 1 - nlines 1 - max_width 658 - justify 0 - label "fireLifecycleEvent(START_EVENT)" - pctDist 2.306667 - height 44 - orientation 0) - line_color 3342489 - client @201 - supplier @201 - Focus_Src @202 - Focus_Entry @204 - origin (1104, 864) - terminus (1254, 864) - ordinal 6) - (object InterMessView "" @240 - location (16, 976) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @241 - Parent_View @240 - location (1255, 932) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0370018A" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @201 - supplier @205 - Focus_Src @202 - Focus_Entry @206 - origin (1103, 976) - terminus (1408, 976) - ordinal 7) - (object SelfMessView "" @242 - location (16, 1056) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @243 - Parent_View @242 - location (1865, 1014) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE03750051" - anchor_loc 1 - nlines 1 - max_width 854 - justify 0 - label "fireLifecycleEvent(BEFORE_START_EVENT)" - pctDist 2.840000 - height 43 - orientation 0) - line_color 3342489 - client @205 - supplier @205 - Focus_Src @207 - Focus_Entry @208 - origin (1440, 1056) - terminus (1590, 1056) - ordinal 8) - (object SelfMessView "" @244 - location (16, 1168) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @245 - Parent_View @244 - location (1639, 1141) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0389001C" - anchor_loc 1 - nlines 1 - max_width 373 - justify 0 - label "addDefaultMapper()" - pctDist 1.326667 - height 28 - orientation 0) - line_color 3342489 - client @205 - supplier @205 - Focus_Src @207 - Focus_Entry @209 - origin (1440, 1168) - terminus (1590, 1168) - ordinal 9) - (object SelfMessView "" @246 - location (16, 1296) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @247 - Parent_View @246 - location (1592, 1268) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE03980281" - anchor_loc 1 - nlines 1 - max_width 238 - justify 0 - label "logger.start()" - pctDist 1.020000 - height 29 - orientation 0) - line_color 3342489 - client @205 - supplier @205 - Focus_Src @207 - Focus_Entry @210 - origin (1440, 1296) - terminus (1590, 1296) - ordinal 10) - (object SelfMessView "" @248 - location (16, 1408) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @249 - Parent_View @248 - location (1593, 1380) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE03A80107" - anchor_loc 1 - nlines 1 - max_width 226 - justify 0 - label "realm.start()" - pctDist 1.026667 - height 29 - orientation 0) - line_color 3342489 - client @205 - supplier @205 - Focus_Src @207 - Focus_Entry @211 - origin (1440, 1408) - terminus (1590, 1408) - ordinal 11) - (object SelfMessView "" @250 - location (16, 1536) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @251 - Parent_View @250 - location (1608, 1508) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE03BD000D" - anchor_loc 1 - nlines 1 - max_width 259 - justify 0 - label "findMappers()" - pctDist 1.120000 - height 29 - orientation 0) - line_color 3342489 - client @205 - supplier @205 - Focus_Src @207 - Focus_Entry @212 - origin (1440, 1536) - terminus (1590, 1536) - ordinal 12) - (object SelfMessView "" @252 - location (16, 1648) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @253 - Parent_View @252 - location (1515, 1604) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE03E000A4" - anchor_loc 1 - nlines 1 - max_width 251 - justify 0 - label "findChildren()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @205 - supplier @205 - Focus_Src @207 - Focus_Entry @213 - origin (1440, 1648) - terminus (1590, 1648) - ordinal 13) - (object InterMessView "" @254 - location (1664, 1760) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @255 - Parent_View @254 - location (1591, 1716) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE03FB027A" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @205 - supplier @214 - Focus_Src @207 - Focus_Entry @215 - origin (1439, 1760) - terminus (1744, 1760) - ordinal 14) - (object SelfMessView "" @256 - location (16, 1808) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @257 - Parent_View @256 - location (1606, 1784) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE043B02AE" - anchor_loc 1 - nlines 1 - max_width 854 - justify 0 - label "fireLifecycleEvent(BEFORE_START_EVENT)" - pctDist -1.133333 - height 24 - orientation 0) - line_color 3342489 - client @214 - supplier @214 - Focus_Src @215 - Focus_Entry @216 - origin (1776, 1808) - terminus (1926, 1808) - ordinal 15) - (object SelfMessView "" @258 - location (16, 1920) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @259 - Parent_View @258 - location (1963, 1877) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE045C021F" - anchor_loc 1 - nlines 1 - max_width 373 - justify 0 - label "addDefaultMapper()" - pctDist 1.253333 - height 44 - orientation 0) - line_color 3342489 - client @214 - supplier @214 - Focus_Src @215 - Focus_Entry @217 - origin (1776, 1920) - terminus (1926, 1920) - ordinal 16) - (object InterMessView "" @260 - location (2000, 2368) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @261 - Parent_View @260 - location (1919, 2324) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE048E00B9" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @214 - supplier @221 - Focus_Src @215 - Focus_Entry @222 - origin (1775, 2368) - terminus (2064, 2368) - ordinal 20) - (object SelfMessView "" @262 - location (16, 2032) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @263 - Parent_View @262 - location (1916, 2004) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE049B000C" - anchor_loc 1 - nlines 1 - max_width 238 - justify 0 - label "logger.start()" - pctDist 0.933333 - height 29 - orientation 0) - line_color 3342489 - client @214 - supplier @214 - Focus_Src @215 - Focus_Entry @218 - origin (1776, 2032) - terminus (1926, 2032) - ordinal 17) - (object SelfMessView "" @264 - location (16, 2144) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @265 - Parent_View @264 - location (1916, 2117) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE04A303BB" - anchor_loc 1 - nlines 1 - max_width 238 - justify 0 - label "findMapper()" - pctDist 0.933333 - height 28 - orientation 0) - line_color 3342489 - client @214 - supplier @214 - Focus_Src @215 - Focus_Entry @219 - origin (1776, 2144) - terminus (1926, 2144) - ordinal 18) - (object SelfMessView "" @266 - location (16, 2256) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @267 - Parent_View @266 - location (1916, 2228) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE04A90342" - anchor_loc 1 - nlines 1 - max_width 251 - justify 0 - label "findChildren()" - pctDist 0.933333 - height 29 - orientation 0) - line_color 3342489 - client @214 - supplier @214 - Focus_Src @215 - Focus_Entry @220 - origin (1776, 2256) - terminus (1926, 2256) - ordinal 19) - (object NoteView @268 - location (2128, 1488) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @268 - location (1915, 1422) - fill_color 13434879 - nlines 2 - max_width 390 - label "#1 Catalina.start()") - line_color 3342489 - fill_color 13434879 - width 450 - height 144) - (object SelfMessView "" @269 - location (16, 2416) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @270 - Parent_View @269 - location (1644, 2498) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE05780138" - anchor_loc 1 - nlines 1 - max_width 854 - justify 0 - label "fireLifecycleEvent(BEFORE_START_EVENT)" - pctDist -3.020000 - height 45 - orientation 0) - line_color 3342489 - client @221 - supplier @221 - Focus_Src @222 - Focus_Entry @223 - origin (2096, 2416) - terminus (2246, 2416) - ordinal 21) - (object SelfMessView "" @271 - location (16, 2480) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @272 - Parent_View @271 - location (1705, 2582) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE05A80398" - anchor_loc 1 - nlines 1 - max_width 658 - justify 0 - label "fireLifecycleEvent(START_EVENT)" - pctDist -2.613333 - height 45 - orientation 0) - line_color 3342489 - client @221 - supplier @221 - Focus_Src @222 - Focus_Entry @224 - origin (2096, 2480) - terminus (2246, 2480) - ordinal 22) - (object SelfMessView "" @273 - location (16, 2560) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @274 - Parent_View @273 - location (1737, 2423) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE05BA0196" - anchor_loc 1 - nlines 1 - max_width 658 - justify 0 - label "fireLifecycleEvent(AFTER_EVENT)" - pctDist -2.393333 - height 138 - orientation 0) - line_color 3342489 - client @221 - supplier @221 - Focus_Src @222 - Focus_Entry @225 - origin (2096, 2560) - terminus (2246, 2560) - ordinal 23) - (object NoteView @275 - location (960, 1680) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @275 - location (635, 1571) - fill_color 13434879 - nlines 4 - max_width 615 - label "All StandardX will fire these events.") - line_color 3342489 - fill_color 13434879 - width 675 - height 231) - (object AttachView "" @276 - stereotype TRUE - line_color 3342489 - client @275 - supplier @272 - line_style 0) - (object AttachView "" @277 - stereotype TRUE - line_color 3342489 - client @275 - supplier @270 - line_style 0) - (object AttachView "" @278 - stereotype TRUE - line_color 3342489 - client @275 - supplier @274 - line_style 0))) - (object InteractionDiagram "4. catalina_start_2" - mechanism_ref @85 - quid "3DFE050900BF" - title "4. catalina_start_2" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 1087 - items (list diagram_item_list - (object InterObjView "StandardHost" @279 - location (208, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @279 - location (208, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardHost") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE0538017B" - width 300 - height 2114 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @280 - location (208, 384) - line_color 3342489 - InterObjView @279 - height 1864 - y_coord 1804 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @281 - location (208, 384) - line_color 3342489 - InterObjView @279 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @282 - location (208, 1088) - line_color 3342489 - InterObjView @279 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @283 - location (208, 1616) - line_color 3342489 - InterObjView @279 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "HostConfig" @284 - location (544, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @284 - location (544, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "HostConfig") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE06A60131" - width 300 - height 2114 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @285 - location (544, 512) - line_color 3342489 - InterObjView @284 - height 696 - y_coord 636 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @286 - location (544, 576) - line_color 3342489 - InterObjView @284 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @287 - location (544, 688) - line_color 3342489 - InterObjView @284 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @288 - location (544, 784) - line_color 3342489 - InterObjView @284 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @289 - location (544, 896) - line_color 3342489 - InterObjView @284 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @290 - location (544, 1008) - line_color 3342489 - InterObjView @284 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @291 - location (544, 1536) - line_color 3342489 - InterObjView @284 - height 200 - y_coord 140 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @292 - location (544, 1536) - line_color 3342489 - InterObjView @284 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardHostDeployer" @293 - location (944, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @293 - location (944, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 426 - justify 0 - label "StandardHostDeployer") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE079A0055" - width 444 - height 2114 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @294 - location (944, 1280) - line_color 3342489 - InterObjView @293 - height 824 - y_coord 764 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @295 - location (944, 2128) - line_color 3342489 - InterObjView @293 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "Digester" @296 - location (1328, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @296 - location (1328, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Digester") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE07C9034C" - width 300 - height 2114 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @297 - location (1328, 1280) - line_color 3342489 - InterObjView @296 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @298 - location (1328, 1488) - line_color 3342489 - InterObjView @296 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @299 - location (1328, 1984) - line_color 3342489 - InterObjView @296 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "ContextRuleSet" @300 - location (1648, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @300 - location (1648, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "ContextRuleSet") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE0834016F" - width 300 - height 2114 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @301 - location (1648, 1408) - line_color 3342489 - InterObjView @300 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @302 - location (1648, 1888) - line_color 3342489 - InterObjView @300 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "NamingRuleSet" @303 - location (1968, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @303 - location (1968, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "NamingRuleSet") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE08D00173" - width 300 - height 2114 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @304 - location (1968, 1792) - line_color 3342489 - InterObjView @303 - height 60 - y_coord 0 - Nested FALSE)) - (object SelfMessView "" @305 - location (0, 384) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @306 - Parent_View @305 - location (555, 342) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE066C0341" - anchor_loc 1 - nlines 1 - max_width 651 - justify 0 - label "fireLifecycleEvent(START_EVENT)" - pctDist 2.206667 - height 43 - orientation 0) - line_color 3342489 - client @279 - supplier @279 - Focus_Src @280 - Focus_Entry @281 - origin (224, 384) - terminus (374, 384) - ordinal 0) - (object InterMessView "" @307 - location (384, 512) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @308 - Parent_View @307 - location (486, 468) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE06D20294" - anchor_loc 1 - nlines 1 - max_width 507 - justify 0 - label "interested[i].lifecycleEvent()" - pctDist 0.865574 - height 45 - orientation 0) - line_color 3342489 - client @279 - supplier @284 - Focus_Src @280 - Focus_Entry @285 - origin (223, 512) - terminus (528, 512) - ordinal 1) - (object SelfMessView "" @309 - location (16, 576) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @310 - Parent_View @309 - location (713, 537) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE06E9028D" - anchor_loc 1 - nlines 1 - max_width 297 - justify 0 - label "setDeployXML()" - pctDist 1.026667 - height 40 - orientation 0) - line_color 3342489 - client @284 - supplier @284 - Focus_Src @285 - Focus_Entry @286 - origin (560, 576) - terminus (710, 576) - ordinal 2) - (object SelfMessView "" @311 - location (16, 688) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @312 - Parent_View @311 - location (714, 645) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE06F300FF" - anchor_loc 1 - nlines 1 - max_width 288 - justify 0 - label "setLiveDeploy()" - pctDist 1.033333 - height 44 - orientation 0) - line_color 3342489 - client @284 - supplier @284 - Focus_Src @285 - Focus_Entry @287 - origin (560, 688) - terminus (710, 688) - ordinal 3) - (object SelfMessView "" @313 - location (16, 784) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @314 - Parent_View @313 - location (732, 756) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE06FB00D9" - anchor_loc 1 - nlines 1 - max_width 326 - justify 0 - label "setUnpacksWar()" - pctDist 1.153333 - height 29 - orientation 0) - line_color 3342489 - client @284 - supplier @284 - Focus_Src @285 - Focus_Entry @288 - origin (560, 784) - terminus (710, 784) - ordinal 4) - (object SelfMessView "" @315 - location (16, 896) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @316 - Parent_View @315 - location (747, 868) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE070C0015" - anchor_loc 1 - nlines 1 - max_width 350 - justify 0 - label "setXMLValidation()" - pctDist 1.246667 - height 29 - orientation 0) - line_color 3342489 - client @284 - supplier @284 - Focus_Src @285 - Focus_Entry @289 - origin (560, 896) - terminus (710, 896) - ordinal 5) - (object SelfMessView "" @317 - location (16, 1008) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @318 - Parent_View @317 - location (762, 980) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE073B0031" - anchor_loc 1 - nlines 1 - max_width 359 - justify 0 - label "deployDescriptors()" - pctDist 1.346667 - height 29 - orientation 0) - line_color 3342489 - client @284 - supplier @284 - Focus_Src @285 - Focus_Entry @290 - origin (560, 1008) - terminus (710, 1008) - ordinal 6) - (object InterMessView "" @319 - location (16, 1088) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @320 - Parent_View @319 - location (376, 1044) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE078B03BB" - anchor_loc 1 - nlines 1 - max_width 136 - justify 0 - label "install()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @284 - supplier @279 - Focus_Src @285 - Focus_Entry @282 - origin (528, 1088) - terminus (224, 1088) - ordinal 7) - (object InterMessView "" @321 - location (576, 1280) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @322 - Parent_View @321 - location (575, 1236) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE07B100BE" - anchor_loc 1 - nlines 1 - max_width 136 - justify 0 - label "install()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @279 - supplier @293 - Focus_Src @280 - Focus_Entry @294 - origin (223, 1280) - terminus (928, 1280) - ordinal 8) - (object InterMessView "" @323 - location (1152, 1280) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @324 - Parent_View @323 - location (1135, 1236) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE07D200ED" - anchor_loc 1 - nlines 1 - max_width 144 - justify 0 - label "create()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @293 - supplier @296 - Focus_Src @294 - Focus_Entry @297 - origin (959, 1280) - terminus (1312, 1280) - ordinal 9) - (object InterMessView "" @325 - location (1136, 1984) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @326 - Parent_View @325 - location (1135, 1940) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE07D603D7" - anchor_loc 1 - nlines 1 - max_width 136 - justify 0 - label "parse()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @293 - supplier @296 - Focus_Src @294 - Focus_Entry @299 - origin (959, 1984) - terminus (1312, 1984) - ordinal 16) - (object InterMessView "" @327 - location (1296, 1408) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @328 - Parent_View @327 - location (1295, 1364) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE08DA029B" - anchor_loc 1 - nlines 1 - max_width 106 - justify 0 - label "new()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @293 - supplier @300 - Focus_Src @294 - Focus_Entry @301 - origin (959, 1408) - terminus (1632, 1408) - ordinal 10) - (object InterMessView "" @329 - location (1456, 1792) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @330 - Parent_View @329 - location (1455, 1748) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE08E00091" - anchor_loc 1 - nlines 1 - max_width 106 - justify 0 - label "new()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @293 - supplier @303 - Focus_Src @294 - Focus_Entry @304 - origin (959, 1792) - terminus (1952, 1792) - ordinal 14) - (object InterMessView "" @331 - location (16, 1488) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @332 - Parent_View @331 - location (1182, 1445) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE08FA003D" - anchor_loc 1 - nlines 1 - max_width 387 - justify 0 - label "add(ContextRuleSet)" - pctDist 0.631728 - height 44 - orientation 0) - line_color 3342489 - client @293 - supplier @296 - Focus_Src @294 - Focus_Entry @298 - origin (959, 1488) - terminus (1312, 1488) - ordinal 11) - (object InterMessView "" @333 - location (1296, 1888) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @334 - Parent_View @333 - location (1295, 1844) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0907015F" - anchor_loc 1 - nlines 1 - max_width 416 - justify 0 - label "add(NamingRuleSet())" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @293 - supplier @300 - Focus_Src @294 - Focus_Entry @302 - origin (959, 1888) - terminus (1632, 1888) - ordinal 15) - (object NoteView @335 - location (2096, 2384) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @335 - location (1893, 2315) - fill_color 13434879 - nlines 2 - max_width 371 - label "#2 Catalina.start()") - line_color 3342489 - fill_color 13434879 - width 431 - height 150) - (object SelfMessView "" @336 - location (16, 1536) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @337 - Parent_View @336 - location (697, 1493) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE131F0327" - anchor_loc 1 - nlines 1 - max_width 244 - justify 0 - label "deployApps()" - pctDist 0.913333 - height 43 - orientation 0) - line_color 3342489 - client @284 - supplier @284 - Focus_Src @291 - Focus_Entry @292 - origin (560, 1536) - terminus (710, 1536) - ordinal 12) - (object InterMessView "" @338 - location (16, 1616) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @339 - Parent_View @338 - location (376, 1572) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE132D0309" - anchor_loc 1 - nlines 1 - max_width 136 - justify 0 - label "install()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @284 - supplier @279 - Focus_Src @291 - Focus_Entry @283 - origin (528, 1616) - terminus (224, 1616) - ordinal 13) - (object InterMessView "" @340 - location (576, 2128) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @341 - Parent_View @340 - location (575, 2084) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE133A036C" - anchor_loc 1 - nlines 1 - max_width 463 - justify 0 - label "install() // same as above" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @279 - supplier @293 - Focus_Src @280 - Focus_Entry @295 - origin (223, 2128) - terminus (928, 2128) - ordinal 17))) - (object InteractionDiagram "5. catalina_start_3" - mechanism_ref @86 - quid "3DFE094A0346" - title "5. catalina_start_3" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list - (object InterObjView "Digester" @342 - location (176, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @342 - location (176, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Digester") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE095A0371" - width 300 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @343 - location (176, 352) - line_color 3342489 - InterObjView @342 - height 996 - y_coord 936 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @344 - location (176, 352) - line_color 3342489 - InterObjView @342 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @345 - location (176, 448) - line_color 3342489 - InterObjView @342 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "Rule" @346 - location (480, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @346 - location (480, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Rule") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE0E7400D0" - width 300 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @347 - location (480, 560) - line_color 3342489 - InterObjView @346 - height 728 - y_coord 668 - Nested FALSE)) - (object InterObjView "StandardContext" @348 - location (816, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @348 - location (816, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 332 - justify 0 - label "StandardContext") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE0FC502A1" - width 350 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @349 - location (816, 592) - line_color 3342489 - InterObjView @348 - height 264 - y_coord 204 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @350 - location (816, 1008) - line_color 3342489 - InterObjView @348 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "StandardPipeline" @351 - location (1184, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @351 - location (1184, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 363 - justify 0 - label "StandardPipeline") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE112F003F" - width 381 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @352 - location (1184, 736) - line_color 3342489 - InterObjView @351 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "StandardContextValve" @353 - location (1552, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @353 - location (1552, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 300 - justify 0 - label "StandardContextValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE110D0375" - width 318 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @354 - location (1552, 624) - line_color 3342489 - InterObjView @353 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "SetPropertiesRule" @355 - location (1920, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @355 - location (1920, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 363 - justify 0 - label "SetPropertiesRule") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE100303A4" - width 381 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @356 - location (1920, 928) - line_color 3342489 - InterObjView @355 - height 200 - y_coord 140 - Nested FALSE)) - (object InterObjView "SetNextRule" @357 - location (2272, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @357 - location (2272, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "SetNextRule") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE12690267" - width 300 - height 1214 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @358 - location (2272, 1168) - line_color 3342489 - InterObjView @357 - height 60 - y_coord 0 - Nested FALSE)) - (object SelfMessView "" @359 - location (0, 352) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @360 - Parent_View @359 - location (267, 308) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0E7801DB" - anchor_loc 1 - nlines 1 - max_width 108 - justify 0 - label "parse" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @342 - supplier @342 - Focus_Src @343 - Focus_Entry @344 - origin (192, 352) - terminus (342, 352) - ordinal 0) - (object SelfMessView "" @361 - location (16, 448) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @362 - Parent_View @361 - location (345, 420) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0F2F03D2" - anchor_loc 1 - nlines 1 - max_width 267 - justify 0 - label "startElement()" - pctDist 1.020000 - height 28 - orientation 0) - line_color 3342489 - client @342 - supplier @342 - Focus_Src @343 - Focus_Entry @345 - origin (192, 448) - terminus (342, 448) - ordinal 1) - (object InterMessView "" @363 - location (336, 560) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @364 - Parent_View @363 - location (327, 516) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0F400214" - anchor_loc 1 - nlines 1 - max_width 132 - justify 0 - label "begin()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @342 - supplier @346 - Focus_Src @343 - Focus_Entry @347 - origin (191, 560) - terminus (464, 560) - ordinal 2) - (object InterMessView "" @365 - location (16, 592) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @366 - Parent_View @365 - location (647, 548) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE0FD30266" - anchor_loc 1 - nlines 1 - max_width 265 - justify 0 - label "newInstance()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @346 - supplier @348 - Focus_Src @347 - Focus_Entry @349 - origin (495, 592) - terminus (800, 592) - ordinal 3) - (object InterMessView "" @367 - location (864, 928) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @368 - Parent_View @367 - location (1199, 884) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE102002E9" - anchor_loc 1 - nlines 1 - max_width 132 - justify 0 - label "begin()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @346 - supplier @355 - Focus_Src @347 - Focus_Entry @356 - origin (495, 928) - terminus (1904, 928) - ordinal 6) - (object InterMessView "" @369 - location (1008, 736) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @370 - Parent_View @369 - location (1139, 693) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE114A0193" - anchor_loc 1 - nlines 1 - max_width 610 - justify 0 - label "setBasic(StandardContextValve)" - pctDist 0.915014 - height 44 - orientation 0) - line_color 3342489 - client @348 - supplier @351 - Focus_Src @349 - Focus_Entry @352 - origin (831, 736) - terminus (1168, 736) - ordinal 5) - (object InterMessView "" @371 - location (16, 624) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @372 - Parent_View @371 - location (1183, 580) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE115E001F" - anchor_loc 1 - nlines 1 - max_width 106 - justify 0 - label "new()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @348 - supplier @353 - Focus_Src @349 - Focus_Entry @354 - origin (831, 624) - terminus (1536, 624) - ordinal 4) - (object InterMessView "" @373 - location (1440, 1008) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @374 - Parent_View @373 - location (1368, 964) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE11D50391" - anchor_loc 1 - nlines 1 - max_width 1190 - justify 0 - label "//Using BeanUtil, set the object properties (from ex: admin.xml)" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @355 - supplier @348 - Focus_Src @356 - Focus_Entry @350 - origin (1904, 1008) - terminus (832, 1008) - ordinal 7) - (object InterMessView "" @375 - location (1392, 1168) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @376 - Parent_View @375 - location (1375, 1124) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE128501C8" - anchor_loc 1 - nlines 1 - max_width 99 - justify 0 - label "end()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @346 - supplier @357 - Focus_Src @347 - Focus_Entry @358 - origin (495, 1168) - terminus (2256, 1168) - ordinal 8) - (object NoteView @377 - location (1216, 80) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @377 - location (900, 15) - fill_color 13434879 - nlines 2 - max_width 596 - label "HostConfig.deployDescriptor()") - line_color 3342489 - fill_color 13434879 - width 656 - height 143) - (object NoteView @378 - location (2128, 1888) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @378 - location (1947, 1822) - fill_color 13434879 - nlines 2 - max_width 327 - label "#3 Catalina.start()") - line_color 3342489 - fill_color 13434879 - width 387 - height 144))) - (object InteractionDiagram "6. catalina_start_4" - mechanism_ref @87 - quid "3DFE13890008" - title "6. catalina_start_4" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 1818 - items (list diagram_item_list - (object InterObjView "Digester" @379 - location (176, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @379 - location (176, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Digester") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE13960364" - width 300 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @380 - location (176, 336) - line_color 3342489 - InterObjView @379 - height 1228 - y_coord 1168 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @381 - location (176, 336) - line_color 3342489 - InterObjView @379 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @382 - location (176, 480) - line_color 3342489 - InterObjView @379 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @383 - location (176, 1616) - line_color 3342489 - InterObjView @379 - height 580 - y_coord 520 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @384 - location (176, 1728) - line_color 3342489 - InterObjView @379 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardHostDeployer" @385 - location (480, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @385 - location (480, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 301 - justify 0 - label "StandardHostDeployer") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE1D8A02DC" - width 319 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @386 - location (480, 576) - line_color 3342489 - InterObjView @385 - height 928 - y_coord 868 - Nested FALSE)) - (object InterObjView "StandardHost" @387 - location (800, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @387 - location (800, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardHost") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE1DF20141" - width 300 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @388 - location (800, 592) - line_color 3342489 - InterObjView @387 - height 852 - y_coord 792 - Nested FALSE)) - (object InterObjView "StandardContext" @389 - location (1120, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @389 - location (1120, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 295 - justify 0 - label "StandardContext") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE196D00D9" - width 313 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @390 - location (1120, 624) - line_color 3342489 - InterObjView @389 - height 760 - y_coord 700 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @391 - location (1120, 800) - line_color 3342489 - InterObjView @389 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @392 - location (1120, 976) - line_color 3342489 - InterObjView @389 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @393 - location (1120, 1072) - line_color 3342489 - InterObjView @389 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "WebappLoader" @394 - location (1440, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @394 - location (1440, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 295 - justify 0 - label "WebappLoader") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE1FFA0347" - width 313 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @395 - location (1440, 640) - line_color 3342489 - InterObjView @394 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "StandardManager" @396 - location (1760, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @396 - location (1760, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 301 - justify 0 - label "StandardManager") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE201F0105" - width 319 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @397 - location (1760, 832) - line_color 3342489 - InterObjView @396 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @398 - location (1760, 1264) - line_color 3342489 - InterObjView @396 - height 60 - y_coord 0 - Nested FALSE)) - (object InterObjView "ContextConfig" @399 - location (1952, 352) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @399 - location (1952, 352) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "ContextConfig") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE2087028C" - width 300 - height 2318 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @400 - location (1952, 412) - InterObjView @399 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @401 - location (1952, 1136) - line_color 3342489 - InterObjView @399 - height 1444 - y_coord 1384 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @402 - location (1952, 1264) - line_color 3342489 - InterObjView @399 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @403 - location (1952, 1456) - line_color 3342489 - InterObjView @399 - height 1070 - y_coord 1010 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @404 - location (1952, 1568) - line_color 3342489 - InterObjView @399 - height 952 - y_coord 892 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @405 - location (1952, 1984) - line_color 3342489 - InterObjView @399 - height 152 - y_coord 92 - Nested TRUE)) - (object SelfMessView "" @406 - location (16, 336) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @407 - Parent_View @406 - location (267, 292) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE19AE0065" - anchor_loc 1 - nlines 1 - max_width 108 - justify 0 - label "parse" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @379 - supplier @379 - Focus_Src @380 - Focus_Entry @381 - origin (192, 336) - terminus (342, 336) - ordinal 0) - (object SelfMessView "" @408 - location (16, 480) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @409 - Parent_View @408 - location (328, 437) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE19B102E9" - anchor_loc 1 - nlines 1 - max_width 267 - justify 0 - label "startElement()" - pctDist 0.906667 - height 44 - orientation 0) - line_color 3342489 - client @379 - supplier @379 - Focus_Src @380 - Focus_Entry @382 - origin (192, 480) - terminus (342, 480) - ordinal 1) - (object InterMessView "" @410 - location (16, 576) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @411 - Parent_View @410 - location (327, 552) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE1DFB0022" - anchor_loc 1 - nlines 1 - max_width 165 - justify 0 - label "addChild" - pctDist 0.498645 - height 25 - orientation 0) - line_color 3342489 - client @379 - supplier @385 - Focus_Src @380 - Focus_Entry @386 - origin (191, 576) - terminus (464, 576) - ordinal 2) - (object InterMessView "" @412 - location (16, 592) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @413 - Parent_View @412 - location (639, 548) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE1FB60277" - anchor_loc 1 - nlines 1 - max_width 165 - justify 0 - label "addChild" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @385 - supplier @387 - Focus_Src @386 - Focus_Entry @388 - origin (495, 592) - terminus (784, 592) - ordinal 3) - (object InterMessView "" @414 - location (16, 624) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @415 - Parent_View @414 - location (959, 580) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE1FC40228" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @387 - supplier @389 - Focus_Src @388 - Focus_Entry @390 - origin (815, 624) - terminus (1104, 624) - ordinal 4) - (object InterMessView "" @416 - location (16, 640) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @417 - Parent_View @416 - location (1279, 596) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE200603BE" - anchor_loc 1 - nlines 1 - max_width 82 - justify 0 - label "new" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @389 - supplier @394 - Focus_Src @390 - Focus_Entry @395 - origin (1135, 640) - terminus (1424, 640) - ordinal 5) - (object SelfMessView "" @418 - location (16, 800) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @419 - Parent_View @418 - location (1224, 756) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE200C029A" - anchor_loc 1 - nlines 1 - max_width 186 - justify 0 - label "setLoader" - pctDist 0.593333 - height 45 - orientation 0) - line_color 3342489 - client @389 - supplier @389 - Focus_Src @390 - Focus_Entry @391 - origin (1136, 800) - terminus (1286, 800) - ordinal 6) - (object InterMessView "" @420 - location (16, 832) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @421 - Parent_View @420 - location (1439, 788) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE202C0250" - anchor_loc 1 - nlines 1 - max_width 82 - justify 0 - label "new" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @389 - supplier @396 - Focus_Src @390 - Focus_Entry @397 - origin (1135, 832) - terminus (1744, 832) - ordinal 7) - (object SelfMessView "" @422 - location (16, 976) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @423 - Parent_View @422 - location (1260, 933) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE2032001C" - anchor_loc 1 - nlines 1 - max_width 221 - justify 0 - label "setManager" - pctDist 0.833333 - height 44 - orientation 0) - line_color 3342489 - client @389 - supplier @389 - Focus_Src @390 - Focus_Entry @392 - origin (1136, 976) - terminus (1286, 976) - ordinal 8) - (object SelfMessView "" @424 - location (16, 1072) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @425 - Parent_View @424 - location (1481, 1043) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE205B01A2" - anchor_loc 1 - nlines 1 - max_width 658 - justify 0 - label "fireLifecycleEvent(START_EVENT)" - pctDist 2.306667 - height 30 - orientation 0) - line_color 3342489 - client @389 - supplier @389 - Focus_Src @390 - Focus_Entry @393 - origin (1136, 1072) - terminus (1286, 1072) - ordinal 9) - (object InterMessView "" @426 - location (16, 1136) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @427 - Parent_View @426 - location (1535, 1092) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE20960003" - anchor_loc 1 - nlines 1 - max_width 745 - justify 0 - label " // Notify interested LifecycleListeners" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @389 - supplier @399 - Focus_Src @390 - Focus_Entry @401 - origin (1135, 1136) - terminus (1936, 1136) - ordinal 10) - (object SelfMessView "" @428 - location (16, 1264) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @429 - Parent_View @428 - location (2043, 1220) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE20CF018C" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @399 - supplier @399 - Focus_Src @401 - Focus_Entry @402 - origin (1968, 1264) - terminus (2118, 1264) - ordinal 11) - (object SelfMessView "" @430 - location (16, 1456) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @431 - Parent_View @430 - location (2027, 1413) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE20E303E2" - anchor_loc 1 - nlines 1 - max_width 275 - justify 0 - label "defaultConfig()" - pctDist 0.393333 - height 44 - orientation 0) - line_color 3342489 - client @399 - supplier @399 - Focus_Src @401 - Focus_Entry @403 - origin (1968, 1456) - terminus (2118, 1456) - ordinal 13) - (object SelfMessView "" @432 - location (16, 1568) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @433 - Parent_View @432 - location (2043, 1524) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE211D01A1" - anchor_loc 1 - nlines 1 - max_width 349 - justify 0 - label "applicationConfig()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @399 - supplier @399 - Focus_Src @401 - Focus_Entry @404 - origin (1968, 1568) - terminus (2118, 1568) - ordinal 14) - (object InterMessView "" @434 - location (1664, 1264) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @435 - Parent_View @434 - location (1439, 1220) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE20B600E5" - anchor_loc 1 - nlines 1 - max_width 110 - justify 0 - label "start()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @389 - supplier @396 - Focus_Src @390 - Focus_Entry @398 - origin (1135, 1264) - terminus (1744, 1264) - ordinal 12) - (object InterMessView "" @436 - location (16, 1616) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @437 - Parent_View @436 - location (1064, 1572) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE21B60288" - anchor_loc 1 - nlines 1 - max_width 145 - justify 0 - label "create()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @399 - supplier @379 - Focus_Src @404 - Focus_Entry @383 - origin (1936, 1616) - terminus (192, 1616) - ordinal 15) - (object SelfMessView "" @438 - location (16, 1728) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @439 - Parent_View @438 - location (457, 1701) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE21BE021B" - anchor_loc 1 - nlines 1 - max_width 530 - justify 0 - label "// Process web.xml * tld.xml" - pctDist 1.773333 - height 28 - orientation 0) - line_color 3342489 - client @379 - supplier @379 - Focus_Src @383 - Focus_Entry @384 - origin (192, 1728) - terminus (342, 1728) - ordinal 16) - (object InterObjView "StandardWrapper" @440 - location (2208, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @440 - location (2208, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardWrapper") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE220C0122" - width 300 - height 2446 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @441 - location (2208, 2016) - line_color 3342489 - InterObjView @440 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @442 - location (2208, 2176) - line_color 3342489 - InterObjView @440 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @443 - location (2208, 2288) - line_color 3342489 - InterObjView @440 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @444 - location (2208, 2400) - line_color 3342489 - InterObjView @440 - height 60 - y_coord 0 - Nested FALSE)) - (object InterMessView "" @445 - location (16, 1984) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @446 - Parent_View @445 - location (1063, 1940) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE228B03BA" - anchor_loc 1 - nlines 1 - max_width 1478 - justify 0 - label "createWarpper() // Invoked by a WebWrapperRule (not Directly by the Digester)" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @379 - supplier @399 - Focus_Src @383 - Focus_Entry @405 - origin (191, 1984) - terminus (1936, 1984) - ordinal 17) - (object InterMessView "" @447 - location (16, 2016) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @448 - Parent_View @447 - location (2079, 1972) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE229A0004" - anchor_loc 1 - nlines 1 - max_width 82 - justify 0 - label "new" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @399 - supplier @440 - Focus_Src @405 - Focus_Entry @441 - origin (1967, 2016) - terminus (2192, 2016) - ordinal 18) - (object InterMessView "" @449 - location (16, 2176) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @450 - Parent_View @449 - location (2116, 2134) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE22A700C1" - anchor_loc 1 - nlines 1 - max_width 405 - justify 0 - label "addInstanceListener()" - pctDist 0.662295 - height 43 - orientation 0) - line_color 3342489 - client @399 - supplier @440 - Focus_Src @404 - Focus_Entry @442 - origin (1967, 2176) - terminus (2192, 2176) - ordinal 19) - (object InterMessView "" @451 - location (2496, 2288) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @452 - Parent_View @451 - location (2116, 2245) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE22C701CC" - anchor_loc 1 - nlines 1 - max_width 410 - justify 0 - label "addLifecycleListener()" - pctDist 0.662295 - height 44 - orientation 0) - line_color 3342489 - client @399 - supplier @440 - Focus_Src @404 - Focus_Entry @443 - origin (1967, 2288) - terminus (2192, 2288) - ordinal 20) - (object InterMessView "" @453 - location (16, 2400) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @454 - Parent_View @453 - location (2124, 2357) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE22E80364" - anchor_loc 1 - nlines 1 - max_width 428 - justify 0 - label "addContainerListener()" - pctDist 0.701639 - height 44 - orientation 0) - line_color 3342489 - client @399 - supplier @440 - Focus_Src @404 - Focus_Entry @444 - origin (1967, 2400) - terminus (2192, 2400) - ordinal 21) - (object NoteView @455 - location (1216, 80) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @455 - location (825, 14) - fill_color 13434879 - nlines 2 - max_width 746 - label "Deploy App.") - line_color 3342489 - fill_color 13434879 - width 806 - height 144) - (object NoteView @456 - location (2144, 2704) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @456 - location (1953, 2641) - fill_color 13434879 - nlines 2 - max_width 347 - label "#4 Catalina.start()") - line_color 3342489 - fill_color 13434879 - width 407 - height 138))) - (object InteractionDiagram "1. catalina_request" - mechanism_ref @88 - quid "3DFE3B5001C3" - title "1. catalina_request" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list - (object InterObjView "ThreadPool" @457 - location (176, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @457 - location (176, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "ThreadPool") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE402B02C5" - width 300 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @458 - location (176, 384) - line_color 3342489 - InterObjView @457 - height 304 - y_coord 244 - Nested FALSE)) - (object InterObjView "TcpWorkerThread" @459 - location (512, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @459 - location (512, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 332 - justify 0 - label "TcpWorkerThread") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE403200F8" - width 350 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @460 - location (512, 384) - line_color 3342489 - InterObjView @459 - height 244 - y_coord 184 - Nested FALSE)) - (object InterObjView "Http11Protocol" @461 - location (848, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @461 - location (848, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "Http11Protocol") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE40750177" - width 300 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @462 - location (848, 400) - line_color 3342489 - InterObjView @461 - height 168 - y_coord 108 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @463 - location (848, 448) - line_color 3342489 - InterObjView @461 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @464 - location (848, 592) - line_color 3342489 - InterObjView @461 - height 120 - y_coord 60 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @465 - location (848, 592) - line_color 3342489 - InterObjView @461 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @466 - location (848, 736) - line_color 3342489 - InterObjView @461 - height 674 - y_coord 614 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @467 - location (848, 736) - line_color 3342489 - InterObjView @461 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "CoyoteAdapter" @468 - location (1168, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @468 - location (1168, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "CoyoteAdapter") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE410600DF" - width 300 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @469 - location (1168, 848) - line_color 3342489 - InterObjView @468 - height 502 - y_coord 442 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @470 - location (1168, 944) - line_color 3342489 - InterObjView @468 - height 352 - y_coord 292 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @471 - location (1168, 944) - line_color 3342489 - InterObjView @468 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardEngine" @472 - location (1520, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @472 - location (1520, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 363 - justify 0 - label "StandardEngine") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE424B0349" - width 381 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @473 - location (1520, 1008) - line_color 3342489 - InterObjView @472 - height 228 - y_coord 168 - Nested FALSE)) - (object InterObjView "StandardPipeline" @474 - location (1872, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @474 - location (1872, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardPipeline") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE42900045" - width 300 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @475 - location (1872, 1040) - line_color 3342489 - InterObjView @474 - height 136 - y_coord 76 - Nested FALSE)) - (object InterObjView "StandardValveContext" @476 - location (2192, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @476 - location (2192, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardValveContext") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE42C002B1" - width 300 - height 1276 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @477 - location (2192, 1056) - line_color 3342489 - InterObjView @476 - height 60 - y_coord 0 - Nested FALSE)) - (object InterMessView "" @478 - location (16, 384) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @479 - Parent_View @478 - location (343, 340) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE40E701AE" - anchor_loc 1 - nlines 1 - max_width 112 - justify 0 - label "runIt()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @457 - supplier @459 - Focus_Src @458 - Focus_Entry @460 - origin (191, 384) - terminus (496, 384) - ordinal 0) - (object InterMessView "" @480 - location (16, 400) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @481 - Parent_View @480 - location (679, 356) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE40FC010E" - anchor_loc 1 - nlines 1 - max_width 359 - justify 0 - label "processConnection" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @459 - supplier @461 - Focus_Src @460 - Focus_Entry @462 - origin (527, 400) - terminus (832, 400) - ordinal 1) - (object SelfMessView "" @482 - location (16, 448) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @483 - Parent_View @482 - location (969, 405) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4111029F" - anchor_loc 1 - nlines 1 - max_width 175 - justify 0 - label "process()" - pctDist 0.706667 - height 44 - orientation 0) - line_color 3342489 - client @461 - supplier @461 - Focus_Src @462 - Focus_Entry @463 - origin (864, 448) - terminus (1014, 448) - ordinal 2) - (object SelfMessView "" @484 - location (16, 592) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @485 - Parent_View @484 - location (1048, 549) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE415C0151" - anchor_loc 1 - nlines 1 - max_width 291 - justify 0 - label "parseHeaders()" - pctDist 1.226667 - height 44 - orientation 0) - line_color 3342489 - client @461 - supplier @461 - Focus_Src @464 - Focus_Entry @465 - origin (864, 592) - terminus (1014, 592) - ordinal 3) - (object SelfMessView "" @486 - location (16, 736) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @487 - Parent_View @486 - location (1052, 692) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE41A60161" - anchor_loc 1 - nlines 1 - max_width 328 - justify 0 - label "prepareRequest()" - pctDist 1.253333 - height 44 - orientation 0) - line_color 3342489 - client @461 - supplier @461 - Focus_Src @466 - Focus_Entry @467 - origin (864, 736) - terminus (1014, 736) - ordinal 4) - (object InterMessView "" @488 - location (992, 848) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @489 - Parent_View @488 - location (1007, 804) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE41D60107" - anchor_loc 1 - nlines 1 - max_width 162 - justify 0 - label "service()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @461 - supplier @468 - Focus_Src @466 - Focus_Entry @469 - origin (863, 848) - terminus (1152, 848) - ordinal 5) - (object SelfMessView "" @490 - location (16, 944) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @491 - Parent_View @490 - location (1372, 916) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE422C01F1" - anchor_loc 1 - nlines 1 - max_width 373 - justify 0 - label "postParseRequest()" - pctDist 1.253333 - height 28 - orientation 0) - line_color 3342489 - client @468 - supplier @468 - Focus_Src @470 - Focus_Entry @471 - origin (1184, 944) - terminus (1334, 944) - ordinal 6) - (object InterMessView "" @492 - location (1344, 1008) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @493 - Parent_View @492 - location (1343, 964) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE42800238" - anchor_loc 1 - nlines 1 - max_width 149 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @468 - supplier @472 - Focus_Src @470 - Focus_Entry @473 - origin (1183, 1008) - terminus (1504, 1008) - ordinal 7) - (object InterMessView "" @494 - location (16, 1040) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @495 - Parent_View @494 - location (1695, 996) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE429A002D" - anchor_loc 1 - nlines 1 - max_width 149 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @472 - supplier @474 - Focus_Src @473 - Focus_Entry @475 - origin (1535, 1040) - terminus (1856, 1040) - ordinal 8) - (object InterMessView "" @496 - location (16, 1056) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @497 - Parent_View @496 - location (2031, 1012) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE42CE0230" - anchor_loc 1 - nlines 1 - max_width 149 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @474 - supplier @476 - Focus_Src @475 - Focus_Entry @477 - origin (1887, 1056) - terminus (2176, 1056) - ordinal 9) - (object NoteView @498 - location (2000, 2016) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @498 - location (1862, 1956) - fill_color 13434879 - nlines 2 - max_width 240 - label "See next diagram") - line_color 3342489 - fill_color 13434879 - width 300 - height 132) - (object AttachView "" @499 - stereotype TRUE - line_color 3342489 - client @498 - supplier @476 - line_style 0))) - (object InteractionDiagram "2. catalina_request_2" - mechanism_ref @89 - quid "3DFE42F7024C" - title "2. catalina_request_2" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list - (object InterObjView "StandardContextValve" @500 - location (224, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @500 - location (224, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 401 - justify 0 - label "StandardContextValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE4307001E" - width 419 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @501 - location (224, 384) - line_color 3342489 - InterObjView @500 - height 386 - y_coord 326 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @502 - location (224, 704) - line_color 3342489 - InterObjView @500 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @503 - location (224, 896) - line_color 3342489 - InterObjView @500 - height 916 - y_coord 856 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @504 - location (224, 1024) - line_color 3342489 - InterObjView @500 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @505 - location (224, 1280) - line_color 3342489 - InterObjView @500 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardEngineValve" @506 - location (592, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @506 - location (592, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardEngineValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE432801F3" - width 300 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @507 - location (592, 384) - line_color 3342489 - InterObjView @506 - height 264 - y_coord 204 - Nested FALSE)) - (object InterObjView "StandardHost" @508 - location (912, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @508 - location (912, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardHost") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE436503BD" - width 300 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @509 - location (912, 416) - line_color 3342489 - InterObjView @508 - height 431 - y_coord 371 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @510 - location (912, 528) - line_color 3342489 - InterObjView @508 - height 60 - y_coord 0 - Nested TRUE) - Focus_Of_Control (object Focus_Of_Control "" @511 - location (912, 704) - line_color 3342489 - InterObjView @508 - height 120 - y_coord 60 - Nested TRUE)) - (object InterObjView "ErrorReportValve" @512 - location (1264, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @512 - location (1264, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 294 - justify 0 - label "ErrorReportValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE438C028D" - width 312 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @513 - location (1264, 896) - line_color 3342489 - InterObjView @512 - height 248 - y_coord 188 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @514 - location (1264, 944) - line_color 3342489 - InterObjView @512 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "ErrorDispatcherValve" @515 - location (1584, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @515 - location (1584, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 295 - justify 0 - label "ErrorDispatcherValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE451F01EC" - width 313 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @516 - location (1584, 1168) - line_color 3342489 - InterObjView @515 - height 232 - y_coord 172 - Nested FALSE)) - (object InterObjView "StandardHostValve" @517 - location (1904, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @517 - location (1904, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 295 - justify 0 - label "StandardHostValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE47310130" - width 313 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @518 - location (1904, 1472) - line_color 3342489 - InterObjView @517 - height 280 - y_coord 220 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @519 - location (1904, 1536) - line_color 3342489 - InterObjView @517 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardContext" @520 - location (2224, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @520 - location (2224, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardContext") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE47C100F1" - width 300 - height 1678 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @521 - location (2224, 1632) - line_color 3342489 - InterObjView @520 - height 60 - y_coord 0 - Nested FALSE)) - (object InterMessView "" @522 - location (16, 384) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @523 - Parent_View @522 - location (407, 340) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE434C019B" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @500 - supplier @506 - Focus_Src @501 - Focus_Entry @507 - origin (239, 384) - terminus (576, 384) - ordinal 0) - (object InterMessView "" @524 - location (16, 416) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @525 - Parent_View @524 - location (751, 372) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE436C009D" - anchor_loc 1 - nlines 1 - max_width 107 - justify 0 - label "map()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @506 - supplier @508 - Focus_Src @507 - Focus_Entry @509 - origin (607, 416) - terminus (896, 416) - ordinal 1) - (object InterMessView "" @526 - location (800, 528) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @527 - Parent_View @526 - location (751, 484) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE43830063" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @506 - supplier @508 - Focus_Src @507 - Focus_Entry @510 - origin (607, 528) - terminus (896, 528) - ordinal 2) - (object InterMessView "" @528 - location (608, 704) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @529 - Parent_View @528 - location (568, 660) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE43B903BF" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @508 - supplier @500 - Focus_Src @511 - Focus_Entry @502 - origin (896, 704) - terminus (240, 704) - ordinal 3) - (object InterMessView "" @530 - location (752, 896) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @531 - Parent_View @530 - location (743, 852) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE43C203A4" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @500 - supplier @512 - Focus_Src @503 - Focus_Entry @513 - origin (239, 896) - terminus (1248, 896) - ordinal 4) - (object SelfMessView "" @532 - location (16, 944) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @533 - Parent_View @532 - location (1355, 900) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE442501B1" - anchor_loc 1 - nlines 1 - max_width 135 - justify 0 - label "report()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @512 - supplier @512 - Focus_Src @513 - Focus_Entry @514 - origin (1280, 944) - terminus (1430, 944) - ordinal 5) - (object InterMessView "" @534 - location (16, 1024) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @535 - Parent_View @534 - location (744, 980) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE46330293" - anchor_loc 1 - nlines 1 - max_width 230 - justify 0 - label "invokeNext()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @512 - supplier @500 - Focus_Src @513 - Focus_Entry @504 - origin (1248, 1024) - terminus (240, 1024) - ordinal 6) - (object InterMessView "" @536 - location (944, 1168) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @537 - Parent_View @536 - location (903, 1124) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE46E70026" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @500 - supplier @515 - Focus_Src @503 - Focus_Entry @516 - origin (239, 1168) - terminus (1568, 1168) - ordinal 7) - (object InterMessView "" @538 - location (16, 1280) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @539 - Parent_View @538 - location (904, 1236) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE475D03A0" - anchor_loc 1 - nlines 1 - max_width 206 - justify 0 - label "invokeNext" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @515 - supplier @500 - Focus_Src @516 - Focus_Entry @505 - origin (1568, 1280) - terminus (240, 1280) - ordinal 8) - (object InterMessView "" @540 - location (1184, 1472) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @541 - Parent_View @540 - location (1063, 1428) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE476503CA" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @500 - supplier @517 - Focus_Src @503 - Focus_Entry @518 - origin (239, 1472) - terminus (1888, 1472) - ordinal 9) - (object SelfMessView "" @542 - location (16, 1536) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @543 - Parent_View @542 - location (1995, 1492) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE47CD0167" - anchor_loc 1 - nlines 1 - max_width 295 - justify 0 - label "map() //Context" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @517 - supplier @517 - Focus_Src @518 - Focus_Entry @519 - origin (1920, 1536) - terminus (2070, 1536) - ordinal 10) - (object InterMessView "" @544 - location (16, 1632) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @545 - Parent_View @544 - location (2063, 1588) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE47D500B4" - anchor_loc 1 - nlines 1 - max_width 146 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @517 - supplier @520 - Focus_Src @518 - Focus_Entry @521 - origin (1919, 1632) - terminus (2208, 1632) - ordinal 11))) - (object InteractionDiagram "3. catalina_request_3" - mechanism_ref @90 - quid "3DFE48A202AD" - title "3. catalina_request_3" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 612 - origin_y 938 - items (list diagram_item_list - (object InterObjView "StandardContext" @546 - location (160, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @546 - location (160, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardContext") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE48B001D1" - width 300 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @547 - location (160, 400) - line_color 3342489 - InterObjView @546 - height 1960 - y_coord 1900 - Nested FALSE)) - (object InterObjView "StandardPipeline" @548 - location (480, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @548 - location (480, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardPipeline") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE48B80088" - width 300 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @549 - location (480, 400) - line_color 3342489 - InterObjView @548 - height 1900 - y_coord 1840 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @550 - location (480, 1088) - line_color 3342489 - InterObjView @548 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardValveContext" @551 - location (800, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @551 - location (800, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardValveContext") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE48D000DC" - width 300 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @552 - location (800, 736) - line_color 3342489 - InterObjView @551 - height 1510 - y_coord 1450 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @553 - location (800, 1168) - line_color 3342489 - InterObjView @551 - height 1072 - y_coord 1012 - Nested TRUE)) - (object InterObjView "StandardContextValve" @554 - location (1104, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @554 - location (1104, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardContextValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE490303A7" - width 300 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @555 - location (1104, 800) - line_color 3342489 - InterObjView @554 - height 468 - y_coord 408 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @556 - location (1104, 848) - line_color 3342489 - InterObjView @554 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "StandardWrapper" @557 - location (1424, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @557 - location (1424, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 288 - justify 0 - label "StandardWrapper") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE49370351" - width 306 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @558 - location (1424, 944) - line_color 3342489 - InterObjView @557 - height 264 - y_coord 204 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @559 - location (1424, 1520) - line_color 3342489 - InterObjView @557 - height 340 - y_coord 280 - Nested FALSE)) - (object InterObjView "StandardWrapperValve" @560 - location (1744, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @560 - location (1744, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "StandardWrapperValve") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE49890056" - width 300 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @561 - location (1744, 1440) - line_color 3342489 - InterObjView @560 - height 740 - y_coord 680 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @562 - location (1744, 1616) - line_color 3342489 - InterObjView @560 - height 184 - y_coord 124 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @563 - location (1744, 2000) - line_color 3342489 - InterObjView @560 - height 60 - y_coord 0 - Nested TRUE)) - (object InterObjView "ApplicationFilterChain" @564 - location (2064, 224) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @564 - location (2064, 224) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "ApplicationFilterChain") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE4A1500B2" - width 300 - height 2226 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @565 - location (2064, 1680) - line_color 3342489 - InterObjView @564 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @566 - location (2064, 1808) - line_color 3342489 - InterObjView @564 - height 312 - y_coord 252 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @567 - location (2064, 1872) - line_color 3342489 - InterObjView @564 - height 60 - y_coord 0 - Nested TRUE)) - (object InterMessView "" @568 - location (336, 400) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @569 - Parent_View @568 - location (319, 356) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE48BE0268" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @546 - supplier @548 - Focus_Src @547 - Focus_Entry @549 - origin (175, 400) - terminus (464, 400) - ordinal 0) - (object InterMessView "" @570 - location (16, 736) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @571 - Parent_View @570 - location (639, 692) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE48EA003A" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @548 - supplier @551 - Focus_Src @549 - Focus_Entry @552 - origin (495, 736) - terminus (784, 736) - ordinal 1) - (object InterMessView "" @572 - location (16, 800) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @573 - Parent_View @572 - location (951, 756) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE491102D6" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @551 - supplier @554 - Focus_Src @552 - Focus_Entry @555 - origin (815, 800) - terminus (1088, 800) - ordinal 2) - (object SelfMessView "" @574 - location (16, 848) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @575 - Parent_View @574 - location (1322, 821) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE492F033D" - anchor_loc 1 - nlines 1 - max_width 437 - justify 0 - label "map //return Wrapper" - pctDist 1.346667 - height 28 - orientation 0) - line_color 3342489 - client @554 - supplier @554 - Focus_Src @555 - Focus_Entry @556 - origin (1120, 848) - terminus (1270, 848) - ordinal 3) - (object InterMessView "" @576 - location (1264, 944) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @577 - Parent_View @576 - location (1262, 901) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE494A0151" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.498270 - height 44 - orientation 0) - line_color 3342489 - client @554 - supplier @557 - Focus_Src @555 - Focus_Entry @558 - origin (1119, 944) - terminus (1408, 944) - ordinal 4) - (object InterMessView "" @578 - location (960, 1088) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @579 - Parent_View @578 - location (952, 1044) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE495F0288" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @557 - supplier @548 - Focus_Src @558 - Focus_Entry @550 - origin (1408, 1088) - terminus (496, 1088) - ordinal 5) - (object InterMessView "" @580 - location (16, 1168) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @581 - Parent_View @580 - location (639, 1124) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4976015D" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @548 - supplier @551 - Focus_Src @549 - Focus_Entry @553 - origin (495, 1168) - terminus (784, 1168) - ordinal 6) - (object InterMessView "" @582 - location (1296, 1440) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @583 - Parent_View @582 - location (1271, 1396) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4993023C" - anchor_loc 1 - nlines 1 - max_width 147 - justify 0 - label "invoke()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @551 - supplier @560 - Focus_Src @553 - Focus_Entry @561 - origin (815, 1440) - terminus (1728, 1440) - ordinal 7) - (object InterMessView "" @584 - location (1616, 1520) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @585 - Parent_View @584 - location (1584, 1476) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE49EC004F" - anchor_loc 1 - nlines 1 - max_width 175 - justify 0 - label "allocate()" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @560 - supplier @557 - Focus_Src @561 - Focus_Entry @559 - origin (1728, 1520) - terminus (1440, 1520) - ordinal 8) - (object InterMessView "" @586 - location (1616, 1616) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @587 - Parent_View @586 - location (1583, 1572) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4A200067" - anchor_loc 1 - nlines 1 - max_width 242 - justify 0 - label "return servlet" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @557 - supplier @560 - Focus_Src @559 - Focus_Entry @562 - origin (1439, 1616) - terminus (1728, 1616) - ordinal 9) - (object InterMessView "" @588 - location (1936, 1680) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @589 - Parent_View @588 - location (1937, 1636) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4A29027E" - anchor_loc 1 - nlines 1 - max_width 343 - justify 0 - label "createFilterChain()" - pctDist 0.619377 - height 45 - orientation 0) - line_color 3342489 - client @560 - supplier @564 - Focus_Src @562 - Focus_Entry @565 - origin (1759, 1680) - terminus (2048, 1680) - ordinal 10) - (object InterMessView "" @590 - location (16, 1808) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @591 - Parent_View @590 - location (1902, 1764) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4A490283" - anchor_loc 1 - nlines 1 - max_width 170 - justify 0 - label "doFilter()" - pctDist 0.498270 - height 45 - orientation 0) - line_color 3342489 - client @560 - supplier @564 - Focus_Src @561 - Focus_Entry @566 - origin (1759, 1808) - terminus (2048, 1808) - ordinal 11) - (object InterObjView "$UNNAMED$0" @592 - location (2240, 368) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline TRUE - strike FALSE - color 0 - default_color TRUE) - label (object ItemLabel - Parent_View @592 - location (2240, 368) - fill_color 13434879 - anchor_loc 1 - nlines 2 - max_width 282 - justify 0 - label "") - stereotype (object ItemLabel - Parent_View @592 - location (2240, 368) - fill_color 13434879 - anchor 10 - anchor_loc 1 - nlines 1 - max_width 222 - justify 0 - label "<>") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "3DFE4BAE0056" - width 300 - height 2082 - icon_height 0 - icon_width 0 - icon_y_offset 0 - annotation 1 - Focus_Of_Control (object Focus_Of_Control "" @593 - location (2240, 428) - InterObjView @592 - height 60 - y_coord 0 - Nested FALSE) - Focus_Of_Control (object Focus_Of_Control "" @594 - location (2240, 1984) - line_color 3342489 - InterObjView @592 - height 60 - y_coord 0 - Nested FALSE)) - (object SelfMessView "" @595 - location (16, 1872) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @596 - Parent_View @595 - location (2155, 1828) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4C2701C3" - anchor_loc 1 - nlines 1 - max_width 308 - justify 0 - label "internalDoFilter()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @564 - supplier @564 - Focus_Src @566 - Focus_Entry @567 - origin (2080, 1872) - terminus (2230, 1872) - ordinal 12) - (object InterMessView "" @597 - location (2144, 1984) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @598 - Parent_View @597 - location (2151, 1940) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4CA502BF" - anchor_loc 1 - nlines 1 - max_width 162 - justify 0 - label "service()" - pctDist 0.500000 - height 45 - orientation 0) - line_color 3342489 - client @564 - supplier @592 - Focus_Src @566 - Focus_Entry @594 - origin (2079, 1984) - terminus (2224, 1984) - ordinal 13) - (object InterMessView "" @599 - location (16, 2000) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - label (object SegLabel @600 - Parent_View @599 - location (1904, 1956) - font (object Font - size 10 - face "Arial" - bold FALSE - italics FALSE - underline FALSE - strike FALSE - color 0 - default_color TRUE) - quidu "3DFE4CB4025B" - anchor_loc 1 - nlines 1 - max_width 113 - justify 0 - label "return" - pctDist 0.500000 - height 45 - orientation 1) - line_color 3342489 - client @564 - supplier @560 - Focus_Src @566 - Focus_Entry @563 - origin (2048, 2000) - terminus (1760, 2000) - ordinal 14))))) - root_subsystem (object SubSystem "Component View" - quid "3DFDF6CE036A" - physical_models (list unit_reference_list) - physical_presentations (list unit_reference_list - (object Module_Diagram "Main" - quid "3DFDF6D201FD" - title "Main" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list)))) - process_structure (object Processes - quid "3DFDF6CE0373" - ProcsNDevs (list - (object Process_Diagram "Deployment View" - quid "3DFDF6CE0387" - title "Deployment View" - zoom 100 - max_height 28350 - max_width 21600 - origin_x 0 - origin_y 0 - items (list diagram_item_list)))) - properties (object Properties - attributes (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "propertyId" - value "809135966") - (object Attribute - tool "Data Modeler" - name "default__Project" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "project" - value "") - (object Attribute - tool "Data Modeler" - name "TableCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "ViewCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "DomainCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "SPPackageCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "TriggerCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "IndexCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "ConstraintCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "StoreProcedureCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "PrimaryKeyCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "ForeignKeyCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "JoinCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "TableSpaceCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "cONTAINERCounter" - value 0) - (object Attribute - tool "Data Modeler" - name "TablePrefix" - value "") - (object Attribute - tool "Data Modeler" - name "ViewPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "DomainPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "TriggerPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "IndexPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "ConstraintPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "StoreProcedurePrefix" - value "") - (object Attribute - tool "Data Modeler" - name "PrimaryKeyPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "ForeignKeyPrefix" - value "") - (object Attribute - tool "Data Modeler" - name "TableSpacePrefix" - value ""))) - (object Attribute - tool "Data Modeler" - name "default__Module-Spec" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "IsDatabase" - value FALSE) - (object Attribute - tool "Data Modeler" - name "TargetDatabase" - value "") - (object Attribute - tool "Data Modeler" - name "Location" - value "") - (object Attribute - tool "Data Modeler" - name "IsTableSpace" - value FALSE) - (object Attribute - tool "Data Modeler" - name "TableSpaceType" - value "") - (object Attribute - tool "Data Modeler" - name "IsDeault" - value FALSE) - (object Attribute - tool "Data Modeler" - name "BufferPool" - value "") - (object Attribute - tool "Data Modeler" - name "ExtentSize" - value 1) - (object Attribute - tool "Data Modeler" - name "PrefetchSize" - value 1) - (object Attribute - tool "Data Modeler" - name "PageSize" - value 4) - (object Attribute - tool "Data Modeler" - name "ManagedBy" - value "") - (object Attribute - tool "Data Modeler" - name "ContainerList" - value ""))) - (object Attribute - tool "Data Modeler" - name "default__Category" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "dmSchema" - value "") - (object Attribute - tool "Data Modeler" - name "dmDomainPackage" - value "") - (object Attribute - tool "Data Modeler" - name "IsSchema" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsDomainPackage" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsRootSchema" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsRootDomainPackage" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsSchemaPackage" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DatabaseID" - value "") - (object Attribute - tool "Data Modeler" - name "DBMS" - value ""))) - (object Attribute - tool "Data Modeler" - name "default__Class" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "IsTable" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsView" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsDomain" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsSPPackage" - value FALSE) - (object Attribute - tool "Data Modeler" - name "Synonymns" - value "") - (object Attribute - tool "Data Modeler" - name "TableSpaceID" - value "") - (object Attribute - tool "Data Modeler" - name "SourceId" - value "") - (object Attribute - tool "Data Modeler" - name "SourceType" - value "") - (object Attribute - tool "Data Modeler" - name "CorrelationName" - value "") - (object Attribute - tool "Data Modeler" - name "SelectClause" - value "") - (object Attribute - tool "Data Modeler" - name "IsUpdateable" - value TRUE) - (object Attribute - tool "Data Modeler" - name "CheckOption" - value "None") - (object Attribute - tool "Data Modeler" - name "IsSnapShot" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsDistinct" - value FALSE) - (object Attribute - tool "Data Modeler" - name "PersistToServer" - value "") - (object Attribute - tool "Data Modeler" - name "IsPackage" - value FALSE))) - (object Attribute - tool "Data Modeler" - name "default__Attribute" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "Ordinal" - value 0) - (object Attribute - tool "Data Modeler" - name "IsIdentity" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsUnique" - value FALSE) - (object Attribute - tool "Data Modeler" - name "NullsAllowed" - value FALSE) - (object Attribute - tool "Data Modeler" - name "Length" - value 0) - (object Attribute - tool "Data Modeler" - name "Scale" - value 0) - (object Attribute - tool "Data Modeler" - name "ColumnType" - value "Native") - (object Attribute - tool "Data Modeler" - name "ForBitData" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DefaultValueType" - value "") - (object Attribute - tool "Data Modeler" - name "DefaultValue" - value "") - (object Attribute - tool "Data Modeler" - name "SourceId" - value "") - (object Attribute - tool "Data Modeler" - name "SourceType" - value "") - (object Attribute - tool "Data Modeler" - name "OID" - value FALSE))) - (object Attribute - tool "Data Modeler" - name "default__Association" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "IsRelationship" - value FALSE) - (object Attribute - tool "Data Modeler" - name "SourceId" - value "") - (object Attribute - tool "Data Modeler" - name "SourceType" - value "") - (object Attribute - tool "Data Modeler" - name "RIMethod" - value "") - (object Attribute - tool "Data Modeler" - name "ParentUpdateRule" - value "") - (object Attribute - tool "Data Modeler" - name "ParentUpdateRuleName" - value "") - (object Attribute - tool "Data Modeler" - name "ParentDeleteRule" - value "") - (object Attribute - tool "Data Modeler" - name "ParentDeleteRuleName" - value "") - (object Attribute - tool "Data Modeler" - name "ChildInsertRestrict" - value FALSE) - (object Attribute - tool "Data Modeler" - name "ChildInsertRestrictName" - value "") - (object Attribute - tool "Data Modeler" - name "ChildMultiplicity" - value FALSE) - (object Attribute - tool "Data Modeler" - name "ChildMultiplicityName" - value ""))) - (object Attribute - tool "Data Modeler" - name "default__Role" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "ConstraintName" - value ""))) - (object Attribute - tool "Data Modeler" - name "default__Operation" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "IsConstraint" - value FALSE) - (object Attribute - tool "Data Modeler" - name "ConstraintType" - value "") - (object Attribute - tool "Data Modeler" - name "IsIndex" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsTrigger" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsStoredProcedure" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsCluster" - value FALSE) - (object Attribute - tool "Data Modeler" - name "TableSpace" - value "") - (object Attribute - tool "Data Modeler" - name "FillFactor" - value 0) - (object Attribute - tool "Data Modeler" - name "KeyList" - value "") - (object Attribute - tool "Data Modeler" - name "CheckPredicate" - value "") - (object Attribute - tool "Data Modeler" - name "IsUnique" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DeferalMode" - value "") - (object Attribute - tool "Data Modeler" - name "InitialCheckTime" - value "") - (object Attribute - tool "Data Modeler" - name "TriggerType" - value "") - (object Attribute - tool "Data Modeler" - name "IsInsertEvent" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsUpdateEvent" - value FALSE) - (object Attribute - tool "Data Modeler" - name "IsDeleteEvent" - value FALSE) - (object Attribute - tool "Data Modeler" - name "RefOldTable" - value "") - (object Attribute - tool "Data Modeler" - name "RefNewTable" - value "") - (object Attribute - tool "Data Modeler" - name "RefOldRow" - value "") - (object Attribute - tool "Data Modeler" - name "RefNewRow" - value "") - (object Attribute - tool "Data Modeler" - name "IsRow" - value FALSE) - (object Attribute - tool "Data Modeler" - name "WhenClause" - value "") - (object Attribute - tool "Data Modeler" - name "Language" - value "SQL") - (object Attribute - tool "Data Modeler" - name "ProcType" - value "Procedure") - (object Attribute - tool "Data Modeler" - name "IsDeterministic" - value FALSE) - (object Attribute - tool "Data Modeler" - name "ParameterStyle" - value "") - (object Attribute - tool "Data Modeler" - name "ReturnedNull" - value FALSE) - (object Attribute - tool "Data Modeler" - name "ExternalName" - value "") - (object Attribute - tool "Data Modeler" - name "Length" - value "") - (object Attribute - tool "Data Modeler" - name "Scale" - value "") - (object Attribute - tool "Data Modeler" - name "ForBitData" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DefaultValue" - value "") - (object Attribute - tool "Data Modeler" - name "DefaultValueType" - value ""))) - (object Attribute - tool "Data Modeler" - name "default__Parameter" - value (list Attribute_Set - (object Attribute - tool "Data Modeler" - name "dmItem" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DMName" - value "") - (object Attribute - tool "Data Modeler" - name "IsInParameter" - value TRUE) - (object Attribute - tool "Data Modeler" - name "IsOutParameter" - value FALSE) - (object Attribute - tool "Data Modeler" - name "Ordinal" - value "") - (object Attribute - tool "Data Modeler" - name "Length" - value "") - (object Attribute - tool "Data Modeler" - name "Scale" - value "") - (object Attribute - tool "Data Modeler" - name "ForBitData" - value FALSE) - (object Attribute - tool "Data Modeler" - name "DefaultValueType" - value "") - (object Attribute - tool "Data Modeler" - name "DefaultValue" - value "") - (object Attribute - tool "Data Modeler" - name "OperationID" - value ""))) - (object Attribute - tool "Data Modeler" - name "HiddenTool" - value FALSE) - (object Attribute - tool "Data Modeler Communicator" - name "HiddenTool" - value FALSE) - (object Attribute - tool "Deploy" - name "HiddenTool" - value FALSE) - (object Attribute - tool "Rose Model Integrator" - name "HiddenTool" - value FALSE) - (object Attribute - tool "Rose Web Publisher" - name "HiddenTool" - value FALSE) - (object Attribute - tool "Web Modeler" - name "HiddenTool" - value FALSE)) - quid "3DFDF6CE0374")) diff --git a/bundledApps/tomcat/webapps/docs/architecture/startup.html b/bundledApps/tomcat/webapps/docs/architecture/startup.html deleted file mode 100755 index 32394536..00000000 --- a/bundledApps/tomcat/webapps/docs/architecture/startup.html +++ /dev/null @@ -1,51 +0,0 @@ -Apache Tomcat 7 Architecture (7.0.30) - Startup

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Contents

Startup

Server Startup
- -

-This page describes how the Tomcat server starts up. There are several -different ways to start tomcat, including: -

    -
  • From the command line.
  • -
  • From a Java program as an embedded server.
  • -
  • Automatically as a Windows service.
  • -
-

- -
description
-

-A text description of the startup procedure is available -here. -

-
- -
diagram
-

-A UML sequence diagram of the startup procedure is available -here. -

-
- -
comments
-

-The startup process can be customized in many ways, both -by modifying Tomcat code and by implementing your own -LifecycleListeners which are then registered in the server.xml -configuration file. -

- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/architecture/startup/serverStartup.pdf b/bundledApps/tomcat/webapps/docs/architecture/startup/serverStartup.pdf deleted file mode 100755 index 34aa5980..00000000 Binary files a/bundledApps/tomcat/webapps/docs/architecture/startup/serverStartup.pdf and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/architecture/startup/serverStartup.txt b/bundledApps/tomcat/webapps/docs/architecture/startup/serverStartup.txt deleted file mode 100755 index 36981dfb..00000000 --- a/bundledApps/tomcat/webapps/docs/architecture/startup/serverStartup.txt +++ /dev/null @@ -1,138 +0,0 @@ - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -Tomcat 5 Startup Sequence - -Sequence 1. Start from Command Line -Class: org.apache.catalina.startup.Bootstrap -What it does: - a) Set up classloaders - commonLoader (common)-> System Loader - sharedLoader (shared)-> commonLoader -> System Loader - catalinaLoader(server) -> commonLoader -> System Loader - b) Load startup class (reflection) - org.apache.catalina.startup.Catalina - setParentClassloader -> sharedLoader - Thread.contextClassloader -> catalinaLoader - c) Bootstrap.daemon.init() complete - -Sequence 2. Process command line argument (start, startd, stop, stopd) -Class: org.apache.catalina.startup.Bootstrap (assume command->start) -What it does: - a) Catalina.setAwait(true); - b) Catalina.load() - b1) initDirs() -> set properties like - catalina.home - catalina.base == catalina.home (most cases) - b2) initNaming - setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, - org.apache.naming.java.javaURLContextFactory ->default) - b3) createStartDigester() - Configures a digester for the main server.xml elements like - org.apache.catalina.core.StandardServer (can change of course :) - org.apache.catalina.deploy.NamingResources - Stores naming resources in the J2EE JNDI tree - org.apache.catalina.LifecycleListener - implements events for start/stop of major components - org.apache.catalina.core.StandardService - The single entry for a set of connectors, - so that a container can listen to multiple connectors - ie, single entry - org.apache.coyote.tomcat5.CoyoteConnector - Connectors to listen for incoming requests only - It also adds the following rulesets to the digester - NamingRuleSet - EngineRuleSet - HostRuleSet - ContextRuleSet - b4) Load the server.xml and parse it using the digester - Parsing the server.xml using the digester is an automatic - XML-object mapping tool, that will create the objects defined in server.xml - Startup of the actual container has not started yet. - b5) Assigns System.out and System.err to the SystemLogHandler class - b6) Calls initialize on all components, this makes each object register itself with the - JMX agent. - During the process call the Connectors also initialize the adapters. - The adapters are the components that do the request pre-processing. - Typical adapters are HTTP1.1 (default if no protocol is specified, - org.apache.coyote.http11.Http11Protocol) - AJP1.3 for mod_jk etc. - - c) Catalina.start() - c1) Starts the NamingContext and binds all JNDI references into it - c2) Starts the services under which are: - StandardService -> starts Engine (ContainerBase ->Logger,Loader,Realm,Cluster etc) - c3) StandardHost (started by the service) - Configures a ErrorReportValvem to do proper HTML output for different HTTP - errors codes - Starts the Valves in the pipeline (at least the ErrorReportValve) - Configures the StandardHostValve, - this valves ties the Webapp Class loader to the thread context - it also finds the session for the request - and invokes the context pipeline - Starts the HostConfig component - This component deploys all the webapps - (webapps & conf/Catalina/localhost/*.xml) - Webapps are installed using the deployer (StandardHostDeployer) - The deployer will create a Digester for your context, this digester - will then invoke ContextConfig.start() - The ContextConfig.start() will process the default web.xml (conf/web.xml) - and then process the applications web.xml (WEB-INF/web.xml) - - c4) During the lifetime of the container (StandardEngine) there is a background thread that - keeps checking if the context has changed. If a context changes (timestamp of war file, - context xml file, web.xml) then a reload is issued (stop/remove/deploy/start) - - d) Tomcat receives a request on an HTTP port - d1) The request is received by a separate thread which is waiting in the PoolTcpEndPoint - class. It is waiting for a request in a regular ServerSocket.accept() method. - When a request is received, this thread wakes up. - d2) The PoolTcpEndPoint assigns the a TcpConnection to handle the request. - It also supplies a JMX object name to the catalina container (not used I believe) - d3) The processor to handle the request in this case is Coyote Http11Processor, - and the process method is invoked. - This same processor is also continuing to check the input stream of the socket - until the keep alive point is reached or the connection is disconnected. - d4) The HTTP request is parsed using an internal buffer class (Coyote Http11 Internal Buffer) - The buffer class parses the request line, the headers, etc and store the result in a - Coyote request (not an HTTP request) This request contains all the HTTP info, such - as servername, port, scheme, etc. - d5) The processor contains a reference to an Adapter, in this case it is the - Coyote Tomcat 5 Adapter. Once the request has been parsed, the Http11 processor - invokes service() on the adapter. In the service method, the Request contains a - CoyoteRequest and CoyoteRespons (null for the first time) - The CoyoteRequest(Response) implements HttpRequest(Response) and HttpServletRequest(Response) - The adapter parses and associates everything with the request, cookies, the context through a - Mapper, etc - d6) When the parsing is finished, the CoyoteAdapter invokes its container (StandardEngine) - and invokes the invoke(request,response) method. - This initiates the HTTP request into the Catalina container starting at the engine level - d7) The StandardEngine.invoke() simply invokes the container pipeline.invoke() - d8) By default the engine only has one valve the StandardEngineValve, this valve simply - invokes the invoke() method on the Host pipeline (StandardHost.getPipeLine()) - d9) the StandardHost has two valves by default, the StandardHostValve and the ErrorReportValve - d10) The standard host valve associates the correct class loader with the current thread - It also retrieves the Manager and the session associated with the request (if there is one) - If there is a session access() is called to keep the session alive - d11) After that the StandardHostValve invokes the pipeline on the context associated - with the request. - d12) The first valve that gets invoked by the Context pipeline is the FormAuthenticator - valve. Then the StandardContextValve gets invoke. - The StandardContextValve invokes any context listeners associated with the context. - Next it invokes the pipeline on the Wrapper component (StandardWrapperValve) - d13) During the invocation of the StandardWrapperValve, the JSP wrapper (Jasper) gets invoked - This results in the actual compilation of the JSP. - And then invokes the actual servlet. - e) Invocation of the servlet class diff --git a/bundledApps/tomcat/webapps/docs/balancer-howto.html b/bundledApps/tomcat/webapps/docs/balancer-howto.html deleted file mode 100755 index a311ae69..00000000 --- a/bundledApps/tomcat/webapps/docs/balancer-howto.html +++ /dev/null @@ -1,28 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Load Balancer HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Load Balancer HOW-TO

Table of Contents
- -
Using the JK 1.2.x native connector
- -Please refer to the JK 1.2.x documentation. - -
Using Apache HTTP Server 2.x with mod_proxy
- -Please refer to the mod_proxy documentation for Apache HTTP Server 2.2. This supports either -HTTP or AJP load balancing. This new version of mod_proxy is also usable with -Apache HTTP Server 2.0, but mod_proxy will have to be compiled separately using the code -from Apache HTTP Server 2.2. - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/building.html b/bundledApps/tomcat/webapps/docs/building.html deleted file mode 100755 index fdded8b2..00000000 --- a/bundledApps/tomcat/webapps/docs/building.html +++ /dev/null @@ -1,222 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Building Tomcat

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Building Tomcat

Table of Contents
- -
Introduction
- -

-Building Apache Tomcat from source is very easy, and is the first step to contributing to -Tomcat. The following is a step by step guide. -

- -
Download a Java Development Kit (JDK) version 6
- -

-Building Apache Tomcat requires a JDK (version 6) to be installed. You can download one from
-http://www.oracle.com/technetwork/java/javase/downloads/index.html
-or from another JDK vendor. -

- -

-IMPORTANT: Set an environment variable JAVA_HOME to the pathname of the -directory into which you installed the JDK release. -

- -
Install Apache Ant 1.8.1 or later
- -

-Download a binary distribution of Ant 1.8.1 or later from -here. -

- -

-Unpack the binary distribution into a convenient location so that the -Ant release resides in its own directory (conventionally named -apache-ant-1.8.x). For the remainder of this guide, -the symbolic name ${ant.home} is used to refer to the full pathname of - the Ant installation directory directory. -

- -

-IMPORTANT: Create an ANT_HOME environment variable to point the directory ${ant.home}, -and modify the PATH environment variable to include directory -${ant.home}/bin in its list. This makes the ant command line script -available, which will be used to actually perform the build. -

- -
Checkout or obtain the source code for Tomcat 7.0
- -

- Tomcat 7.0 SVN repository URL: - http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/ -

-

- Tomcat source packages: - http://tomcat.apache.org/download-70.cgi. -

- -

- Checkout the source using SVN, selecting a tag for released version or - trunk for the current development code, or download and unpack a - source package. For the remainder of this guide, the symbolic name - ${tomcat.source} is used to refer to the - location where the source has been placed. -

- -
Building Tomcat
- -

-Use the following commands to build Tomcat: -
-
- cd ${tomcat.source}
- ant
-
-

- -

-WARNING: Running this command will download libraries required - to build Tomcat to the /usr/share/java directory by default. - On a typical Linux or MacOX system, an ordinary user - will not have access to write to this directory, and, even if you do, - it is likely not appropriate for you to write there. On Windows - this usually corresponds to the C:\usr\share\java directory, - unless Cygwin is used. Read below to learn how to customize the directory - used to download the binaries. -

- -

-NOTE: Users accessing the Internet through a proxy must use a properties - file to indicate to Ant the proxy configuration. Read below for details. -

- -

- The build can be controlled by creating a ${tomcat.source}/build.properties - file and adding the following content to it: -
-
- # ----- Proxy setup -----
- # Uncomment if using a proxy server.
- #proxy.host=proxy.domain
- #proxy.port=8080
- #proxy.use=on
-
- # ----- Default Base Path for Dependent Packages -----
- # Replace this path with the directory path where
- # dependencies binaries should be downloaded.
- base.path=/home/me/some-place-to-download-to
-
-

- -

-Once the build has completed successfully, a usable Tomcat installation will have been -produced in the ${tomcat.source}/output/build directory, and can be started -and stopped with the usual scripts. -

-
Building with Eclipse
- -

-IMPORTANT: This is not a supported means of building Tomcat; this information is -provided without warranty :-). -The only supported means of building Tomcat is with the Ant build described above. -However, some developers like to work on Java code with a Java IDE, -and the following steps have been used by some developers. -

- -

-NOTE: This will not let you build everything under Eclipse; -the build process requires use of Ant for the many stages that aren't -simple Java compilations. -However, it will allow you to view and edit the Java code, -get warnings, reformat code, perform refactorings, run Tomcat -under the IDE, and so on. -

- -

-WARNING: Do not forget to create and configure - ${tomcat.source}/build.properties file as described above - before running any Ant targets. -

- -

-Sample Eclipse project files and launch targets are provided in the -res/ide-support/eclipse directory of the source tree. -The instructions below will automatically copy these into the required locations. -

-

-An Ant target is provided as a convenience to download all binary dependencies, and to create -the Eclipse project and classpath files in the root of the source tree. -
-
- cd ${tomcat.source}
- ant ide-eclipse
-
-

- -

-Start Eclipse and create a new Workspace. -

- -

-Open the Preferences dialog and then select Java->Build Path->Classpath -Variables to add two new Classpath Variables: -

- -

- - - -
TOMCAT_LIBS_BASEThe same location as the base.path - setting in build.properties, where the binary dependencies have been downloaded
ANT_HOMEthe base path of Ant 1.8.1 or later
-

- -

-Use File->Import and choose Existing Projects into Workspace. -From there choose the root directory of the Tomcat source tree (${tomcat.source}) -and import the Tomcat project located there. -

- -

-start-tomcat and stop-tomcat launch configurations are provided in -res/ide-support/eclipse and will be available in the Run->Run Configurations -dialog. Use these to start and stop Tomcat from Eclipse. -
If you want to configure these yourself (or are using a different IDE) -then use org.apache.catalina.startup.Bootstrap as the main class, -start/stop etc. as program arguments, and specify -Dcatalina.home=... -(with the name of your build directory) as VM arguments. -

- -

-Tweaking a few formatting preferences will make it much easier to keep consistent with Tomcat -coding conventions (and have your contributions accepted): -

-

- - - - - - - -
Java -> Code Style -> Formatter -> Edit...Tab policy: Spaces only
Tab and Indentation size: 4
General -> Editors -> Text EditorsDisplayed tab width: 2
Insert spaces for tabs
Show whitespace characters (optional)
XML -> XML Files -> EditorIndent using spaces
Indentation size: 2
Ant -> Editor -> FormatterTab size: 2
Use tab character instead of spaces: unchecked
-

- -
Building with other IDEs
-

-The same general approach should work for most IDEs; it has been reported -to work in IntelliJ IDEA, for example. -

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/cgi-howto.html b/bundledApps/tomcat/webapps/docs/cgi-howto.html deleted file mode 100755 index ff6024fe..00000000 --- a/bundledApps/tomcat/webapps/docs/cgi-howto.html +++ /dev/null @@ -1,78 +0,0 @@ -Apache Tomcat 7 (7.0.30) - CGI How To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

CGI How To

Table of Contents
- -
Introduction
- -

The CGI (Common Gateway Interface) defines a way for a web server to -interact with external content-generating programs, which are often -referred to as CGI programs or CGI scripts. -

- -

Within Tomcat, CGI support can be added when you are using Tomcat as your -HTTP server and require CGI support. Typically this is done -during development when you don't want to run a web server like -Apache httpd. -Tomcat's CGI support is largely compatible with Apache httpd's, -but there are some limitations (e.g., only one cgi-bin directory). -

- -

CGI support is implemented using the servlet class -org.apache.catalina.servlets.CGIServlet. Traditionally, -this servlet is mapped to the URL pattern "/cgi-bin/*".

- -

By default CGI support is disabled in Tomcat.

-
Installation
- -

CAUTION - CGI scripts are used to execute programs -external to the Tomcat JVM. If you are using the Java SecurityManager this -will bypass your security policy configuration in catalina.policy.

- -

Remove the XML comments from around the CGI servlet and servlet-mapping -configuration in $CATALINA_BASE/conf/web.xml.

- -

Only Contexts which are marked as privileged may use the CGI servlet (see the -privileged property of the Context element).

- -
Configuration
- -

There are several servlet init parameters which can be used to -configure the behaviour of the CGI servlet. -

    -
  • cgiPathPrefix - The CGI search path will start at -the web application root directory + File.separator + this prefix. -The default cgiPathPrefix is WEB-INF/cgi
  • -
  • debug - Debugging detail level for messages logged -by this servlet. Default 0.
  • -
  • executable - The of the executable to be used to -run the script. You may explicitly set this parameter to be an empty string -if your script is itself executable (e.g. an exe file). Default is -perl.
  • -
  • executable-arg-1, executable-arg-2, -and so on - additional arguments for the executable. These precede the -CGI script name. By default there are no additional arguments.
  • -
  • parameterEncoding - Name of the parameter encoding -to be used with the CGI servlet. Default is -System.getProperty("file.encoding","UTF-8").
  • -
  • passShellEnvironment - Should the shell environment -variables (if any) be passed to the CGI script? Default is -false.
  • -
  • stderrTimeout - The time (in milliseconds) to wait for -the reading of stderr to complete before terminating the CGI process. Default -is 2000.
  • -
-

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/changelog.html b/bundledApps/tomcat/webapps/docs/changelog.html deleted file mode 100755 index 372e3772..00000000 --- a/bundledApps/tomcat/webapps/docs/changelog.html +++ /dev/null @@ -1,6011 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Changelog

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Changelog

Tomcat 7.0.30 (markt)
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fix - Automatically delete temporary files used by Servlet 3.0 file - upload (for parts which size is greater than - file-size-threshold option in web.xml) - when request processing completes. (kkolinko) -
fix - 53071: This additional fix for this issue improves the - formatting of Jasper errors (or any exceptions that use a multi-line - message) with the ErrorReportValve. (markt) -
fix - 53469: If a URL passed to - javax.servlet.http.HttpServletResponse.encodeURL() cannot - be made absolute, never encode it and return it unchanged. Previously, - the fix for 53062 meant than an - IllegalArgumentException was thrown. (markt) -
fix - 53481: Added support for SSLHonorCipherOrder to allow - the server to impose its cipher order on the client. Based on a patch - provided by Marcel Šebek. (schultz) -
fix - 53498: Fix atomicity bugs in use of concurrent collections. - Based on a patch by Yu Lin. (markt) -
fix - Correct a regression in the previous fix for 53062 that did - not always correctly normalize redirect URLs when the redirect URL - included a query string or fragment component. (markt) -
fix - Add missing getter and setter for roleSearchAsUser option - on JNDI Realm. (markt) -
update - Add some HTTP status codes registered at IANA. (rjung) -
fix - 53531: Fix ExpandWar.expand to check the return value of - File.mkdir and File.mkdirs. (schultz) -
fix - 53535: Reduce memory footprint when performing class scanning - on Context start. Patch provided by Cedomir Igaly. (markt) -
fix - 53541: Fix JAR scanning when WEB-INF/lib is provided via - VirtualDirContext. Patch provided by Philip Zuev. (markt) -
fix - 53574: Ensure Servlets defined using jsp-file are available - when metadata-complete is true. (markt) -
fix - 53584: Ignore path parameters when comparing URIs for FORM - authentication. This prevents users being prompted twice for passwords - when logging in when session IDs are being encoded as path parameters. - (markt) -
fix - 53623: When performing a asynchronous dispatch after series - of forwards, ensure that the request properties are correct for the - request at each stage. (markt) -
fix - 53624: Ensure that - HttpServletResponse.sendRedirect() works when called after - a dispatch from an AsyncContext. (markt) -
fix - 53641: Correct name of HTTP header used in WebSocket - handshake for listing the preferred protocols. (markt) -
code - Document the constants that were added to the - RequestDispatcher interface in Servlet 3.0. (kkolinko) -
fix - Ensure custom error pages are not truncated if the page that triggered - the error set a content length header. (markt) -
fix - 53677: Ensure that a 500 response rather than no response is - returned if the HTTP headers exceed the size limit. (markt) -
fix - 53702: When merging web.xml fragments, allow for - <jsp-property-group> elements having multiple - <url-pattern> elements. (markt) -
add - Always make the resulting web.xml available even if metadata-complete is - true. (markt) -
fix - 53714: Provide separate system properties to control which - JARs are excluded from which scans when using the JarScanner. This - allows JARs to be excluded from all scans or only from TLD scanning - and/or Servlet 3.0 pluggability scanning. (markt) -
update - Add several JDK libraries to the value of jarsToSkip - property in the catalina.properties file. (markt, kkolinko) -
fix - Fix typos etc. in the code that logs merged web.xml (as enabled by - logEffectiveWebXml option on Context). (kkolinko) -
fix - 53758: When adding filters via - FilterRegistration.Dynamic the filters were added at the - wrong point because the isMatchAfter logic was inverted. - (markt) -
fix - 53783: Correctly handle JARs generated by tools that do not - create specific entries for directories. Patch provided by Violeta - Georgieva. (markt) -
fix - Improvements to DIGEST authenticator including the disabling caching of - authenticated user in session by default, tracking server rather than - client nonces and better handling of stale nonce values. (markt) -
fix - Improve performance of DIGEST authenticator for concurrent requests. - (markt) -
fix - Remove unneeded handling of FORM authentication in RealmBase. (kkolinko) -
fix - 53800: FileDirContext.list() did not provide - correct paths for subdirectories. Patch provided by Kevin Wooten. - (kkolinko) -
fix - 53801: Overlapping URL patterns were sometimes merged - incorrectly in security constraints leading to incorrect 401 responses. - Note: it was possible for access to be denied when it should have been - granted but it was not possible for access to be granted when it should - have been denied. (markt) -
-
-
Coyote
- - - - - - - - -
fix - Remove the socket.soTrafficClass from the BIO and NIO - HTTP and AJP connectors because any use of the option is either ignored - or in some cases (Java 7 with NIO) throws an Exception. (mark) -
fix - Prevent possible NPE when processing Comet requests during Connector - shutdown. (markt) -
fix - 42181: Better handling of edge conditions in chunk header - processing. (kkolinko) -
fix - 53697: Correct a regression in the fix for 51881 - that mean that in some circumstances the comet flag was not - reset on HttpAprProcessor instances. This caused problems - when the Processor was re-used for a new connection that would trigger a - NullPointerException and could result in a JVM crash. - (markt) -
fix - 53725: Fix possible corruption of GZIP'd output. - (markt/kkolinko) -
fix - Better parsing of line-terminators for requests using chunked encoding. - (markt) -
fix - Further improvements to handling of Comet END events when the connector - is stopped. (markt) -
-
-
Jasper
- - - - -
fix - 53545: Ensure buffered data is cleared when using a - jsp:forward action inside a classic custom tag. (markt) -
fix - 53654: Support file:// URLs for JSP - dependencies. Patch provided by Viola Lu. (markt) -
fix - 53792: Support MethodExpressions that include a - method invocation that is not at the end of the expression. (markt) -
-
-
Cluster
- - - -
fix - Fix an issue when running under Java 7 which throws exceptions when - trying to set an invalid option whereas Java 6 silently swallowed them. - The option using the problem was soTrafficClass. - Investigations showed that this option had no effect for Cluster Channel - Receivers so it was removed. (markt) -
fix - 53513: Fix race condition between the processing of session - sync message and transfer complete message. (kfujino) -
-
-
Web applications
- - - - - - -
fix - Update JSTL version information in the JNDI section of the documentation - web application. (markt) -
fix - 53524: Correct a typo in the cluster how-to section of the - documentation web application. Also fix a handful of spelling errors. - (markt) -
fix - 53601: Clarify in documentation that building Apache Tomcat 7 - from sources requires a Java 6 JDK. (kkolinko) -
fix - 53653: Allow for wrapped source code example in - config/context.html. Patch provided by Terence Bandoian. (schultz) -
update - 53793: Change links on the list of applications in the - Manager to point to '/appname/' instead of '/appname'. (kkolinko) -
-
-
Tribes
- - - - -
fix - Avoid potential NPE identified by Find Bugs in - org.apache.catalina.tribes.io.ReplicationStream. (markt) -
fix - 53606: Fix potential NPE in TcpPingInterceptor. - Based on a patch by F. Arnoud. (markt) -
fix - 53607: To avoid NPE, set TCP PING data to ChannelMessage. - Patch provided by F.Arnoud (kfujino) -
-
-
Other
- - - - -
fix - 53701: Javadoc fixes. Patch provided by sebb. (markt) -
code - Remove some unused code from Tomcat's package renamed, cut-down - copy of Commons BCEL used for annotation scanning. (markt) -
add - 53735: Add support for Java 7 byte code to Tomcat's - package renamed, cut-down copy of Commons BCEL used for annotation - scanning. (markt) -
-
-
Tomcat 7.0.29 (markt)released 2012-07-08
-
Catalina
- - - - - - - - - - - -
add - Add support for searching for roles in JNDI/LDAP - using another value than the actual DN or username specified. - Rather it will use a value from the users directory entry. - The new attribute introduced to the JNDIRealm is userRoleAttribute - (fhanik) -
fix - Fix checking of recommended tcnative library version when using the APR - connector. (rjung) -
update - 50306: Improve StuckThreadDetectionValve: add - stuckThreadNames property as a pair for the stuckThreadIds one, - add thread ids to the log messages. (kkolinko) -
add - 52135: Add support for a default error page to be defined in - web.xml by defining an error page with just a nested location element. - It appears this feature was intended to be included in the Servlet 3.0 - specification but was accidently left out. (markt) -
fix - 53450: Correct regression in fix for 52999 that - could easily trigger a deadlock when deploying a ROOT web application. - (markt) -
fix - As per section 1.6.2 of the Servlet 3.0 specification and clarification - from the Servlet Expert Group, the servlet specification version - declared in web.xml no longer controls if Tomcat scans for annotations. - Annotation scanning is now always performed - regardless of the version - declared in web.xml - unless metadata complete is set to true. (markt) -
fix - 53619: As per clarification from the Servlet Expert Group, - JARs will always be scanned for ServletContainerInitializers regardless - of the setting of metadata complete. However, if an absolute ordering is - specified and a JAR is excluded from that ordering it will not be - scanned for ServletContainerInitializers nor will it be scanned for - matches to any HandleTypes annotations. (markt) -
add - 53465: Populate mapped-name property for resources defined in - web.xml. Based on a patch by Violeta Georgieva. (markt) -
add - Make the request available when establishing a WebSocket connection. - (markt) -
fix - 53467: Correct a regression in the fix for 53257 - that introduced problems for JSPs that used characters that must be - encoded if used in a URI. (markt) -
-
-
Coyote
- - -
fix - 53430: Avoid a JVM crash when a connector that requires the - APR/native library is explicitly specified and the library, or a recent - enough version of it, is not available. (markt) -
-
-
Jasper
- - - -
fix - 53421: Provide a more helpful error message if a getter or - setter cannot be found for a bean property when using expression - language. (markt) -
fix - 53460: Allow container to handle errors if the creation of the - PageContext fails rather than swallowing the error. (markt) -
-
-
Web applications
- - - - - - - -
fix - Update the WebSocket examples in the examples web application so that - they work with secure connections (wss) as well as non-secure (ws) - connections. (markt) -
fix - 53456: Minor corrections and improvements to the HTTP - connector configuration reference. Patch provided by sebb. (markt) -
fix - 53459: Correction and clarifications to the SSL Connector - configuration examples in the SSL how-to. (markt) -
fix - 53464: Correct reference to sample init.d script for use with - jsvc in the documentation web application. (markt) -
fix - 53473: Correct the allowed values for the SSI option - isVirtualWebappRelative which are true or - false. (markt) -
fix - Document roleNested property of JNDIRealm - in Configuration Reference. (kkolinko) -
-
-
jdbc-pool
- - - -
fix - 53445 (r1354173): - Allow configurable name for SlowQueryReportJmx (fhanik) -
fix - 53416 (r1354641): - Multiple pools with the same name should register under JMX (fhanik) -
-
-
Other
- - - - - - -
fix - Fix cleanup of temporary files in TestNamingContext test. - (kkolinko) -
fix - Remove a few files from the source distribution that are not required - since they are copied / generated during the build. (markt) -
fix - Add manifest files to the set of files for which the line-ending is - changed to match the OS defaults in the source distributions. (markt) -
code - Align Jk Ant tasks definitions between antlib.xml and catalina.tasks - files, introducing jkupdate as synonym for - jkstatus. The latter one is deprecated. - Simplify bin/catalina-tasks.xml, replacing - taskdef with typedef and adding Ant condition - implementations used with JMX to jmxaccessor.tasks file. - (kkolinko) -
fix - 53454: Return correct content-length header for HEAD requests - when content length is greater than 2GB. (markt) -
-
-
Tomcat 7.0.28 (markt)released 2012-06-19
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fix - 52055: An additional fix to ensure that the - ChunkedInputFilter is correctly recycled. (markt) -
add - 52954: Make DIGEST authentication tolerant of clients (mainly - older Android implementations) that do not follow RFC 2617 exactly. - (markt) -
update - 52955: Implement custom thread factory for container - start-stop thread pool. It allows to use daemon threads and give - them more distinct names. (kfujino) -
fix - 52999: Remove synchronization bottleneck from the firing of - Container events. (markt) -
add - 53008: Additional test cases for BASIC authentication and - RFC2617 compliance. Patch provided by Brian Burch. (markt) -
fix - 53021: Correct WebSocket protocol version detection. (pero) -
add - Add new attributes of allow and deny to - UserConfig. (kfujino) -
fix - 53024: Fix context reloading so requests received during the - reload are paused and processed when reloading completes rather than - receiving 404 responses. (markt) -
add - Improve the handling of watched resources so that changes trigger a - reload rather than a stop followed by a start which allows requests - received to be paused and processed when reloading completes rather than - receiving 404 responses. (markt) -
fix - Remove potential bottleneck on creation of new WebSocket connections. - (markt) -
fix - 53047: If a JDBC Realm or DataSource Realm is configured for - an all roles mode that only requires authorization (and no roles) and no - role table or column is defined, don't populate the Principal's roles. - (markt) -
fix - 53056: Add APR version number to tcnative version INFO log - message. (schultz) -
fix - 53057: Add OpenSSL version number INFO log message when - initializing. (schultz) -
update - Save a bit of memory in annotations cache in - DefaultInstanceManager by trimming annotation lists - to their size. (kkolinko) -
fix - Correctly configure the parser used to process server.xml so that - external entities may be used to include the content of external files - into server.xml. (markt) -
fix - Make sure ContextMBean#findFilterDefs returns correct filter - definitions. (kfujino) -
add - Ensure that maxParameterCount applies to multi-part - requests handled via the Servlet 3 file upload API. (markt) -
fix - 53062: When constructing absolute URLs for redirects from - relative URLs ensure that the resulting URLs are normalized. (markt) -
fix - 53067: Ensure the WebSocket Servlet continues to work when - requests are wrapped. (markt) -
fix - Enable host's xmlBase attribute in ContextConfig. (kfujino) -
fix - 53071: Use the message from the throwable (if there is one) - when generating the report in the ErrorReportValve and no - message has been specified via sendError(). (markt) -
fix - 53074: Switch to an infinite socket timeout by default for - WebSocket connections. (markt) -
fix - 53081: Do not always cache resources loaded by the web - application class loader since they may be very large which in turn - could trigger a memory leak. Calls to the web application class - loader's getResourceAsStream() method will now access - the resource directly rather than via the cache in most cases. (markt) -
fix - 53090: Include superclasses when considering injection - targets. Patch provided by Borislav Kapukaranov. (markt) -
fix - 53161: Provide a better error message if a - ClassFormatException occurs during annotation scanning and - do not prevent the web application from starting in this case. (markt) -
fix - 53180: Improve check for setter method when processing - annotations. Patch provided by Violeta Georgieva. (markt) -
fix - 53225: Fix an IllegalStateException due to the JAR file being - closed when accessing static resources in a JAR file when - urlCacheProtection="false" in the - JreMemoryLeakPreventionListener. (markt) -
fix - 53230: Changed ManagerBase to throw - TooManyActiveSessionsException instead of IllegalStateException - when the maximum number of sessions has been exceeded and a new - session will not be created. (schultz) -
fix - 53257: Ensure that resources, including JSP files, that have - names that include characters with special meanings in URLs (such as - ampersand, semicolon, plus, hash and percent) are correctly handled. - This bug is partially a regression caused by the original fix for - 51584 and partially an existing issue that had not previously - been identified. This fix reverts the original fix for 51584, - correctly fixes that issue and fixes the additional issues identified by - the test cases that were also added as part of this fix. - (markt/kkolinko) -
fix - 53266: If a class specified in a @HandlesTypes - annotation on a ServletContainerInitializer is missing - log a more helpful message and do not prevent the web application from - starting. (markt) -
fix - 53267: Ensure that using the GC Daemon Protection feature of - the JreMemoryLeakPreventionListener does not trigger a - full GC every hour. (markt) -
fix - 53285: Do not require security-role-ref elements - to contain a role-link element. (markt) -
fix - 53301: Prevent double initialization of pre-created Servlet - instances when used in embedded mode. (markt) -
fix - 53322: When processing resource injection, correctly infer - property name from its setter method if the name starts with several - uppercase characters. (kkolinko) -
fix - 53333: When processing JNDI resources, take account of the - types of any specified injection targets to ensure that the resource - definition and the injection target types are consistent. Based on a - patch provided by Violeta Georgieva. (markt) -
fix - 53337: Forwarding via a RequestDispatcher to an - asynchronous Servlet always failed. Includes a test case based on code - by Rossen Stoyanchev. (markt) -
fix - 53339: Ensure WebSocket call backs (onOpen etc.) - are called using the web application's class loader. (markt) -
fix - 53342: To avoid BindException, make startStopThreads into a - demon thread. (kfujino) -
fix - 53353: Make the internal HTTP header parser more tolerant of - Content-Type values that contain invalid parameters by ignoring the - invalid parameters. (markt) -
fix - 53354: Correctly handle @WebFilter annotations - that do not include a mapping. (markt) -
fix - 53356: Add support for servlets mapped explicitly to the - context root of a web application. (markt) -
fix - 53366: Ensure new HTTP header parser works correctly when - running Tomcat under a security manager. (markt/kkolinko) -
fix - 53368: Configure the default security policy to allow web - applications to use WebSocket when running under a security manager. - (markt/kkolinko) -
fix - 53373: Allow whitespace around delimiters in <Context> - aliases for readability. (schultz) -
-
-
Coyote
- - - - - - - - - - - - - - - -
fix - 52858: Correct fix for high CPU load - (fhanik) -
fix - 53138: Broken Sendfile on SSL introduced in 7.0.27 - (fhanik) -
fix - 52055: Additional fix required to ensure that - InputFilters are recycled between requests. (markt) -
fix - 53061: Fix a problem in the NIO connector whereby if the - poller was under low but consistent load (>1 request/per second and - always less than 1 second between requests) timeouts never took place. - (markt) -
fix - 53063: When using an Executor with BIO, use the - executor's maxThreads as the default for maxConnections. (markt) -
fix - 53119: Prevent buffer overflow errors being reported when a - client disconnects before the response has been fully written from an - AJP connection using the APR/native connector. (markt) -
add - 53169: Allow developers to avoid chunked encoding for a - response of unknown length by setting the Connection: close - header. Based on a patch suggested by Philippe Marschall. (markt) -
fix - 53173: Properly count down maxConnections (fhanik) -
update - Update default value of pollerThreadCount for the NIO connector. - The new default value will never go above 2 regardless of - available processors. (fhanik) -
add - Allow to retrieve the current connectionCount - via getter from the endpoint and as JMX attribute of the ThreadPool - mbean. (rjung) -
fix - Correct an edge case where Comet END events were not send to connected - clients when the Tomcat connector was stopped. (markt) -
fix - 53406: Fix possible stack overflow on connection close when - using Comet. (fhanik) -
fix - Improve InternalNioInputBuffer.parseHeaders(). (kkolinko) -
add - Implement maxHeaderCount attribute on Connector. - It is equivalent of LimitRequestFields directive of - Apache HTTPD. - Default value is 100. (kkolinko) -
-
-
Jasper
- - - -
fix - 48097#c7, 53366#c1: If JSP page unexpectedly - fails to initialize PageContext instance, write exception to the logs - instead of silent swallowing. (kkolinko) -
fix - 53032: Modify JspC so it extends - org.apache.tools.ant.Task enabling it to work with features - such as namespaces within build.xml files. (markt) -
-
-
Cluster
- - - - -
fix - Avoid NPE when reload if a state of a BackupManager is FAILED. (kfujino) -
fix - 53087: In order to avoid that a backup node expire a session, - replicate session access time in BackupManager. (kfujino) -
add - Add support for SecureRandom to cluster manager template. (kfujino) -
-
-
Web applications
- - - - - - - - - - -
fix - Remove obsolete bug warning from Windows service - documentation page. (rjung) -
add - 50182: Various improvements to the Compression Filter. Patch - provided by David Becker. (markt) -
fix - 52853: Clarify how Jar Scanner handles directories. (markt) -
fix - 53158: Fix documented defaults for DBCP. - Patch provided by ph.dezanneau at gmail.com. (rjung) -
fix - 53203: Correct documentation for the default value - of connectionTimeout attribute for AJP protocol - connectors. (kkolinko) -
update - 53289: Clarify ResourceLink example that - uses DataSource.getConnection(username, password) method. Not all - data source implementations support it. (kkolinko) -
fix - Fix several HTML markup errors in servlets of examples web application. - (kkolinko) -
fix - 53398: Correct spelling of "received" in the - Manager application's XML output. (markt) -
fix - 53403: Update a reference to the Servlet specification in the - first web applciation section of the documentation web application to - include newer versions of the specificarion. (markt) -
-
-
jdbc-pool
- - - - - - -
fix - 50864 (r1311844): - JMX enable most pool properties (fhanik) -
add - 53254 (r1340160): - Add in the ability to purge connections from the pool (fhanik) -
update - 53367 (r1346691): - Prevent pool from hanging during database failure (fhanik) -
update - When a connection is reconnected due to failed validation - make sure the ConnectionState is reset or it will assume - incorrect values (fhanik) -
fix - 53374 (r1348056): - Add support for the following properties in DataSourceFactory: - commitOnReturn, rollbackOnReturn, - useDisposableConnectionFacade, - logValidationErrors and - propagateInterruptState. - Based on patch proposed by Suresh Avadhanula. (kkolinko) -
-
-
Other
- - - - - - - - -
update - Update to Eclipse JDT Compiler 3.7.2 at maven tomcat-jasper.pom. (pero) -
update - Update the native component of the Tomcat APR/native connector to - 1.1.24. (markt) -
fix - Add missing dependencies in pom files. (markt) -
add - 53034: Add project.url and - project.licenses sections to the POMs for the Maven - artifacts. (markt) -
fix - Properly mention jsp_2_2.xsd in the main LICENSE and - INSTALLLICENSE files. (kkolinko) -
fix - 53115: Fix using the command "catalina.bat run" - when the value of %TEMP% contains spaces. (kkolinko) -
update - Add dependencies and description to "validate" target in - build.xml, so that it could be run separately. - Improve BUILDING.txt and RUNNING.txt. - (kkolinko) -
-
-
Tomcat 7.0.27 (markt)released 2012-04-05
-
Catalina
- - - - - - - - - - - - - - - - - - - - - -
update - Explicitly ignore empty path values in virtualClasspath - attribute of VirtualWebappLoader class. Document that - whitespace around the values is trimmed. Reformat documentation - examples to make them more readable. (kkolinko) -
fix - Further improve fix for 51197 to allow an error reporting - Valve to write a response body if sendError() is called - during an asynchronous request on a container thread. (markt) -
fix - Correct fix for 51741 (r1307600): - If VirtualDirContext class is configured with non-empty - value of extraResourcePaths option (a feature added - in 7.0.24), do not implicitly set allowLinking option to - the value of true. If it is really needed, it should be - set explicitly. (kkolinko) -
add - 52500: Added configurable mechanism to retrieve user names - from X509 client certificates. Based on a patch provided by - Michael Furman. (schultz) -
fix - 52719: Fix a theoretical resource leak in the JAR validation - that checks for non-permitted classes in web application JARs. (markt) -
code - Code clean-up identified by 52723, 52724, - 52726, 52727, 52729, 52731 - and 52732. (markt) -
fix - 52792: Improve error message when a JNDI resource can not be - found. (markt) -
fix - 52830: Correct JNDI lookups when using - javax.naming.Name to identify the resource rather than a - java.lang.String. (markt) -
fix - 52833: Handle the case where the parent class loader for the - Catalina object does not have the system class loader in its hierarchy. - This may happen when embedding. Patch provided by olamy. (markt) -
add - 52839: Add a unit test for DigestAuthenticator and - SingleSignOn. Patch provide by Brian Burch. (markt) -
fix - 52846: Make sure NonLoginAuthenticator registers not - MemoryUser but GenericPrincipal into a session when UserDatabaseRealm - is used. (kfujino) -
add - 52850: Extend memory leak prevention and detection code to - work with IBM as well as Oracle JVMs. Extend unit tests to check direct - and indirect ThreadLocal memory leak detection. Based on a patch - provided by Rohit Kelapure. (markt) -
add - Add support for the WebSocket protocol (RFC6455). Both streaming and - message based APIs are provided and the implementation currently fully - passes the Autobahn test suite. Also included are several examples. - A significant contribution to this new functionality was provided by - Johno Crawford — particularly the examples. Contributions were - also provided by Petr Praus, Jonathan Drake & Slávka. (markt) -
fix - When stopping a Context, ensure that any Servlets registered with JMX - are unregistered. (markt) -
code - Make the implementation of Catalina.getParentClassLoader - consistent with similar methods across the code base and have it return - the system class loader if no parent class loader is set. (markt) -
fix - 52953: Ensure users can authenticate when using DIGEST - authentication with digested passwords if the digested password is - stored using upper case hexadecimal characters since DIGEST - authentication expects digests to use lower case characters. Based on a - patch provided by Neale Rudd. (markt) -
fix - 52957: Ensure that a Valve implements Lifecycle before - calling any Lifecycle methods on that Valve. (markt) -
fix - 52958: Fix MBean descriptors for - org.apache.catalina.realm package. (markt) -
fix - 52974: Fix NameNotFoundException when - field/method is annotated with @Resource annotation. Patch - provided by Violet Agg. (markt) -
add - Add support for multi-thread deployment in UserConfig. (kfujino) -
-
-
Coyote
- - - - - - - - -
fix - Correctly register NIO sockets with poller after processing Comet events - to ensure that no read events are missed. This fixes an intermittent - issue observed in the unit tests. (fhanik/markt) -
fix - 52770: Fix a bug in the highly unlikely circumstance that - an infinite timeout was specified for writing data to a client when - using NIO. (markt) -
fix - 52858: Fix high CPU load with SSL, NIO and sendfile when - client breaks the connection before reading all the requested data. - (markt) -
fix - 52926: Avoid NPE when an NIO Comet connection times out on - one thread at the same time as it is closed on another thread. (markt) -
add - Include port number when known in connector name when logging messages - from connectors that use automatic free port allocation. (markt) -
fix - Don't try an unlock the acceptor thread if it is not locked. This is - unlikely to impact normal usage but it does fix some unit test issues. - (markt) -
fix - When using the APR connector ensure that any connections in a keep-alive - state are closed when the connector is stopped rather than when the - connector is destroyed. This is important when stop() followed by - start() is called on the connector. (markt) -
-
-
Jasper
- - - - - - - - - -
fix - 52725: Use configurable package name for tags rather than - hard-coded value so configuration actually works. (markt) -
code - 52758: Implement additional interface methods in Eclipse JDT - integration required for Jasper to correctly with the latest Eclipse - development code. (markt) -
fix - 52772: Ensure uriRoot is fully validated before it is used. - Patch based on a suggestion by Eugene Chung. (markt) -
fix - 52776: Refactor the code so JspFragment.invoke cleans up - after itself. Patch provided by Karl von Randow. (markt) -
fix - 52970: Take account of coercion rules when invoking methods - via EL. (markt) -
fix - 52998: Partial fix. Remove static references to the EL - expression factory and use per web application references instead. - (markt) -
fix - 52998: Remainder of fix. Cache the class to use for the EL - expression factory per class loader. (kkolinko) -
fix - 53001: Revert the fix for 46915 since the use case - described in the bug is invalid since it breaks the EL specification. - (markt) -
-
-
Cluster
- - -
fix - Replicate principal in ClusterSingleSignOn. (kfujino) -
-
-
Web applications
- - - - - -
fix - 52760: Fix expires filter mime type in javascript examples. - (rjung) -
fix - 52842: Exception in MBeanDumper when dumping MBean for - StandardThreadExecutor. (rjung) -
update - Bring built-in mime types for embedded Tomcat more in line with the - ones defined in the default web.xml configuration file. (rjung) -
add - Add support to the JMXProxyServlet which is part of the Manager - application for fetching a specific key from a - CompositeData value. Updated documentation, so that - the entire 'get' command for the JMX proxy servlet is documented, - including the new optional 'key' parameter. (schultz/markt) -
-
-
jdbc-pool
- - - - - - - - - -
update - Pool cleaner thread should be created using the classloader - that loaded the pool, not the context loader (fhanik) -
fix - 52804: Make pool properties serializable and cloneable. - (fhanik) -
fix - 51237 (r1302902): - Slow Query Report should log using WARN level when queries are slow - and within the threshold of caching it. (fhanik) -
fix - 52002 (r1302948): - Add in configuration option to disallow connection reuse. - (r1305862): - useDisposableConnectionFacade is by default enabled (fhanik) -
fix - 52493 (r1302969): - Java 7 DataSource method addition. (fhanik) -
fix - 51893 (r1302990): - Throw an error and notification when pool is exhausted. (fhanik) -
fix - 50860 (r1303031): - Add in option to configure logging for validation errors. (fhanik) -
fix - 52066 (r1305931): - Add in configuration option, progagateInterruptState, to allow threads to - retain the interrupt state. (fhanik) -
-
-
Other
- - - - - - -
fix - 52750: Fix the way how daemon.sh parses command options so - that more then one can be provided. (mturk) -
update - Rearrange validate-eoln target in build.xml - so that it could be run ahead of compilation. (kkolinko) -
update - Update Apache Commons Daemon to 1.0.10. (mturk) -
update - Update the native component of the Tomcat APR/native connector to - 1.1.23 and take advantage of the simplified distribution. (mturk) -
update - Update to Eclipse JDT Compiler 3.7.2. (markt) -
-
-
Tomcat 7.0.26 (markt)released 2012-02-21
-
Catalina
- - - - - - - - - - - - - - - - - - - - -
code - Provide constants for commonly used Charset objects and use - these constants where appropriate. (markt) -
fix - Refactor the fix for 52184 to correct two issues (a missing - class and incorrect class/method names) when using the extras logging - packages. (markt) -
fix - 52444: Only load classes during HandlesTypes processing if - the class is a match. Previously, every class in the web application was - loaded regardless of whether it was a match or not. (markt) -
fix - 52488: Correct typo: exipre -> expire. (markt) -
add - Add a unit test for SSO authentication. Patch provided by Brian Burch. - (markt) -
fix - 52511: Correct regression in the fix for 51741 - that caused a harmless exception to be logged when scanning for - annotations and WEB-INF/classes did not exist. (markt) -
code - Refactor to remove a circular dependency between - org.apache.catalina and org.apache.naming. - (markt) -
code - Remove some initialisation code from the standard start process (i.e. - via the scripts) that was intended for embedding but is not required - when performing a standard start.(markt) -
add - Add new method to MBeanFactory that allows any Valve to be - created and deprecate the methods to create specific Valves. (markt) -
add - Partial sync of MIME type mapping with mime.types from the Apache web - server. (rjung) -
fix - 52577: Fix a regression in the fix for 52328. - Prevent output truncation when reset() is called on a - response. (mark) -
fix - 52586: Remove an old and now unnecessary hack that modified - the path info reported via the - javax.servlet.forward.path_info request attribute when - forwarding to an error page. (markt) -
fix - 52587: Ensure that if it is necessary to fall back to the - default NullRealm, the NullRealm instance is created early enough for it - to be correctly initialised. (markt) -
fix - Fix millisecond output in AccessLogValve when using a - SimpleDateFormat based time pattern. (rjung) -
fix - 52591: When dumping MBean data, skip attributes where getters - throw UnsupportedOperationException. (markt) -
fix - 52607: Ensure that the extension validator checks the JARs in - the shared and common class loaders for extensions. (markt) -
fix - Correct a threading issue in the generation of the list of standard - authenticators during Context initialization that could lead to a web - application failing to start if Contexts were started in parallel. - (markt) -
fix - 52669: Correct regression that broke annotation processing in - /WEB-INF/classes for web applications deployed as WARs, - packageless classes and some embedding scenarios. The regression was - introduced by the invalid assumptions made in the fix for - 51741. (markt) -
fix - 52671: When dumping MBean data, skip attributes where getters - throw NullPointerException. (markt) -
-
-
Coyote
- - - - - -
add - 51543: Provide a meaningful error message when writing more - response headers than permitted. (markt) -
fix - 52547: Ensure that bytes written (which is used by the access - log) is correctly reset after an HTTP 1.0 request has been processed. - (markt) -
code - Minor refactoring to reduce code duplication in the HTTP connectors. - (markt) -
fix - 52606: Ensure that POST bodies are available for reply after - FORM authentication when using the AJP connectors. (markt) -
-
-
Jasper
- - - - -
fix - 52474: Ensure that leading and trailing white space is - removed from listener class names when parsing TLD files. (markt) -
fix - 52480: When converting class path entries from URLs to - files/directories, ensure that any URL encoded characters are converted. - Fixes JSP compilation with javac when Tomcat is installed at a path that - includes spaces. (markt) -
fix - 52666: Correct coercion order in EL when processing the - equality and inequality operators. (markt) -
-
-
Web applications
- - - - - - -
update - Improve BUILDING.txt. Update instructions for - building. Add instructions for using Checkstyle and running the - tests. (kkolinko) -
add - 38216: Improve handling of null return values in - the JMX proxy servlet which is part of the Manager application. - (kkolinko) -
fix - 52515: Make it clear in the Realm how-to in the documentation - web application that digested password storage when using DIGEST - authentication requires that MD5 digests are used. (markt) -
fix - 52634: Fix typos in JSP examples. Patch provided by - Felix Schumacher. (rjung) -
fix - 52641: Remove mentioning of ldap.jar from docs. - Patch provided by Felix Schumacher. (rjung) -
-
-
jdbc-pool
- - - -
fix - Fix code style issues and enable Checkstyle checks for jdbc-pool when - it is built within Tomcat. (kkolinko) -
fix - 51582 Correct set and reset the query cache to avoid NPE (fhanik) -
-
-
Other
- - - -
fix - Update Commons Daemon to 1.0.9 to resolve 52548 which meant - that services created with service.bat did not set the - catalina.home and catalina.base system - properties. (markt) -
add - Implement check for correct end-of-line characters in the source - files. It is run as separate target in build.xml. - (kkolinko) -
-
-
Tomcat 7.0.25 (markt)released 2012-01-21
-
Web applications
- - -
fix - Restore format of the first line of error message for JMX proxy - servlet in case scripts were depending on it. (markt) -
-
-
Other
- - - - - -
fix - When building a Windows installer do not copy whole "res" folder to - output/dist, but only the files that we need. Apply fixcrlf filter - only after the files are copied, so that INSTALLLICENSE - file had correct line ends. (kkolinko) -
update - Remove res/License.rtf. The file that is actually shown - by the Windows installer is res/INSTALLLICENSE. - (kkolinko) -
add - Automate the OpenPGP signature generation for the release process. - (markt) -
fix - Don't exclude directories named target from the build process. - (rjung) -
-
-
Tomcat 7.0.24 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - -
add - 52184: Provide greater control over the logging of errors - triggered by invalid input data (i.e. data over which Tomcat has no - control). (markt/kkolinko) -
fix - 52225: Fix ClassCastException in an Alias added to - existing host through JMX. (kkolinko) -
fix - Do not throw IllegalArgumentException from parseParameters() call - when chunked POST request is too large, but treat it like an IO error. - The FailedRequestFilter filter can be used to detect this - condition. (kkolinko) -
fix - 52245: Don't allow web applications to package classes from - the javax.el package. Patch provided by pid. (markt) -
fix - 52259: Fix regression caused by the addition of the threaded - component start (46264) that triggered a deadlock on startup - if no Realm was configured. (markt) -
fix - 52293: Correctly handle the case when - antiResourceLocking is enabled at the Context level when - unpackWARs is disabled at the Host level. Based on a patch - by Justin Miller. (markt) -
fix - In ExtendedAccessLogValve when printing %-encoded value of - a parameter, use UTF-8 encoding to convert parameter value to bytes - instead of platform default encoding. (markt/kkolinko) -
fix - 52303: Allow web applications that do not have a login - configuration to participate in a SSO session. Patch provided by Brian - Burch. (markt) -
fix - 52316: When using sendfile, use the number of bytes requested - to be written to the response in the access log valve for bytes written - rather than recording a value of zero. (markt) -
fix - 52326: Reduce log level for class loading errors during - @HandlesTypes processing to debug. (markt) -
fix - 52328: Improve performance when large numbers of single - characters and/or small strings are written to the response via a - Writer. (markt) -
fix - 52384: Do not fail with parameter parsing when debug logging - is enabled. (kkolinko) -
fix - Do not flag extra '&' characters in parameters as parse errors. - (kkolinko) -
fix - Reduce log level for the message about hitting - maxParameterCount limit from WARN to INFO. (kkolinko) -
fix - 52387: Ensure that the correct host is used when configuring - logging when Tomcat is embedded. Patch provided by David Calavera. - (markt) -
update - 52405: Align the Servlet 3.0 implementation with the changes - defined in the first maintenance release (also know as Rev. A). See the - - JCP documentation for a detailed list of changes. (markt) -
fix - Improve JMX names for objects related to Connectors that have the - address attribute set. (markt) -
fix - Remove some stale attributes from MBeans. (rjung) -
code - Move destruction of ContainerBase objects to - ContainerBase to ensure that they are destroyed. (markt) -
fix - 52443: Change the behaviour of the default Realm in the - embedded use case so it is set once on the Engine rather than on every - Context thereby avoiding the Lifecycle issues with having the same Realm - set on multiple Contexts. (markt) -
add - Provide a new Realm implementation, the NullRealm, that does not contain - any users and is used as the default Realm implementation (rather than - the JAAS Realm which was used prior to this change) if no Realm is - specified. (markt) -
fix - 52461: Don't assume file based URLs when checking last - modified times for global and host level web.xml files. Patch provided - by violetagg. (markt) -
add - Add test cases for the BASIC and NonLogin Authenticators when not using - SSO. Patch provided by Brian Burch. (markt) -
-
-
Coyote
- - - - - -
add - 52028: Add support for automatic binding to a free port by a - connector if the special value of zero is used for the port. This is - mainly useful in embedded and testing scenarios. (markt) -
update - Remove obsolete emptySessionPath JMX attribute. (rjung) -
fix - Correct error in fix for 49683. (markt) -
fix - Ensure that the process of unlocking the acceptor thread does not - trigger processing of the connection as if it were a valid request. - (markt) -
-
-
Jasper
- - - - - - -
fix - 52450: Add setter for entityResolver in ParserUtils. - This is mainly useful when jasper and dtds are in different - class loaders. (mturk) -
fix - 52321: Ensure that the order of multiple prelude/coda values - for JSP pages is respected. (markt) -
fix - 52335: Only handle <\% and not - \% as escaped in template text. (markt) -
fix - 52440: Ensure that when using - ValueExpression.getValueReference() if the expression is an - EL variable that the value returned is the ValueReference - for the ValueExpression associated with the EL variable. - (markt) -
fix - 52445: Don't assume that EL method expressions have - exactly three components (identifier, method name, paramaters). (markt) -
-
-
Web applications
- - - - - - - -
add - 38216: Add the ability to invoke MBean operations to the JMX - proxy sevrlet in the Manager application. Based on a patch by - Christopher Hlubek. (markt) -
update - Further clarify the relation between values used by - RemoteIpValve and RemoteIpFilter - and their use by AccessLogValve. (kkolinko) -
fix - 52243: Improve windows service documentation to clarify how - to include # and/or ; in the value of an - environment variable that is passed to the service. (markt) -
fix - 52366: Fix typo in VirtualWebappLoader documentation - (configuration example). (rjung) -
update - Replace Bugzilla search link on ROOT/index.jsp page with - one pointing to the bug reporting page of Tomcat site. (kkolinko) -
update - Move MBean dump code from JMXProxyServlet into a utility class. (rjung) -
-
-
Tribes
- - - -
fix - 52208: Fix threading issue that may lead to harmless NPE - during shutdown that has occasionally been observed when running the - unit tests. (markt) -
fix - 52213, 52354, 52355 and - 52356: Fix some potential concurrency issues in - FastQueue. (markt) -
-
-
jdbc-pool
- - -
add - r1207712: Pool cleaner should be a global thread, not spawn - one thread per connection pool. (fhanik) -
-
-
Other
- - - - - - - - - - - - - - -
update - Update Apache Commons Daemon to 1.0.8. (mturk) -
update - Update Apache Commons Pool to 1.5.7. (kkolinko) -
fix - Fix line ends in .gitignore files contained in source - distributions. (rjung) -
fix - Run Mapper performance test twice if the first run took too long, - to ignore occasional failures. (kkolinko) -
fix - Align .gitignore and build.xml - exclude patterns with svn:ignore. (kkolinko) -
fix - Configure defaultexcludes for Ant 1.8.1/1.8.2. - The .git and .gitignore patterns are - in since Ant 1.8.2, but we include .gitignore in - src distributions. (kkolinko) -
add - 52237: Allow JUnit logs to be generated in formats other than - plain text. Patch provided by M Hasko. (markt/kkolinko) -
fix - Fix build condition for tomcat-dbcp to always rebuild whan a new version - of commons-pool or commons-dbcp is downloaded. (kkolinko) -
update - Add example of configuration for SetCharacterEncodingFilter - to the default web.xml file. (kkolinko) -
update - Switch unit tests to bind Connectors to localhost rather than all - available IP addresses. (markt) -
update - Update to Eclipse JDT Compiler 3.7.1. (markt) -
update - Add Netbeans nbproject folder to svn:ignore - and .gitignore. (rjung) -
update - Align .gitignore with trunk. (rjung) -
-
-
Tomcat 7.0.23 (markt)released 2011-11-25
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
add - 46264: Add the ability to start and stop containers - (primarily Contexts) using a thread pool rather than a single thread. - This can significantly improve start and stop time. Based on patches - by Joe Kislo and Felix Schumacher. (markt) -
fix - 50570: Enable FIPS mode to be set in AprLifecycleListener. - Based upon a patch from Chris Beckey. (schultz/kkolinko) -
fix - 51744: Throw the correct exception if an application attempts - to modify the associated JNDI context. (markt) -
add - 51744: Add an option to the StandardContext that allows - exception throwing when an application attempts to modify the associated - JNDI context to be disabled. (markt) -
fix - 51910: Prevent NPE on connector stop if Comet applications - are being used without the CometConnectionManagerValve. (markt) -
fix - 51940: Do not limit saving of request bodies during FORM - authentication to POST requests since any HTTP method may include a - request body. Based on a patch by Nicholas Sushkin. (markt/kkolinko) -
fix - 51956: RemoteAddrFilter used getRemoteHost instead of - getRemoteAddr when filtering Comet events. (schultz) -
fix - 51952: Make the inclusion of a response body with a redirect - response introduced to address 41718 optional and disabled by - default due to the side-effects of including a body with the response in - this case. (markt) -
fix - 51972: Correctly handle protocol relative URLs when used with - sendRedirect(). (markt) -
code - Simplify the deployment code and use full paths in log messages to - remove any ambiguity in where a context is being deployed from. (markt) -
fix - 52009: Fix a NPE during access log entry recording when an - error occurred during the processing of a Comet request. (markt) -
fix - In OneLineFormatter log formatter in JULI always use - the US locale to format the date (esp. the month names). (rjung) -
add - Cache the results of parsing the global and host level web.xml files to - improve web application start time. (markt) -
fix - 52042: Correct threading issue in annotation caching that - could lead to an NPE if multiple threads were processing the same class - hierarchy for annotations. (markt) -
fix - Correct additional threading and premature clearance issues with the - annotation cache. (markt) -
fix - Correct a regression in the fix for 49779 that - parameters POSTed by an unauthenticated user to a page that required - FORM authentication were lost during the authentication process. - (markt) -
fix - 52055: Ensure that the input and output buffers are correctly - reset between keep-alive requests when using Servlet 3.0 asynchronous - request processing. (markt) -
fix - Ensure changes to the configuration of the RemoteHostValve and the - RemoteAddrValve via JMX are thread-safe. (markt) -
fix - Ensure the the memory leak protection for the HttpClient keep-alive - always operates even if the thread has already stopped. (markt) -
code - Remove the Java 1.2 specific error handling around the adding of the - shutdown hook. (markt) -
fix - Correct errors in i18n resources and resource usage that meant some - messages were either not used or were incorrectly formatted. (markt) -
code - Replace the use of deprecated auth method names from - authenticator.Constants with the auth method names from - HttpServletRequest. (kkolinko) -
add - Make configuration issues for security related Valves and Filters result - in the failure of the valve or filter rather than just a warning - message. (markt) -
add - Improve performance of parameter processing for GET and POST requests. - Also add an option to limit the maximum number of parameters processed - per request. This defaults to 10000. Excessive parameters are ignored. - Note that FailedRequestFilter can be used to reject the - request if some parameters were ignored. (markt/kkolinko) -
fix - 52091: Address performance issues related to lock contention - in StandardWrapper. Patch provided by Taiki Sugawara. (markt) -
code - Switch to using Collections.enumeration() rather than custom code that - does the same thing. (markt) -
fix - 52113: Don't assume presence of context.xml file with JMX - deployment. (markt) -
update - In RequestFilterValve (RemoteAddrValve, - RemoteHostValve): refactor value matching logic into - separate method and expose this new method isAllowed - through JMX. (kkolinko) -
fix - 52156: Ensure that - getServletContext().getResource(path) returns the correct - resource when path contains /../ sequences or any other - sequences that require normalization. (markt) -
add - Report existence of HTTP request parameter parsing errors via new - special ServletRequest attribute, - org.apache.catalina.parameter_parse_failed. (kkolinko) -
add - New filter FailedRequestFilter that will reject a request - if there were errors during HTTP parameter parsing. (kkolinko) -
update - Improve special attributes handling in Request object by using hash - table lookup instead of series of string comparisons. (kkolinko) -
code - Deprecate unused methods in IntrospectionUtils class. - (kkolinko) -
fix - Improve processing of errors that are wrapped in - InvocationTargetException. Rethrow fatal errors that must - be rethrown. (kkolinko) -
fix - Improve handling of failed web application deployments during automatic - deployment. Once deployment of a web application fails in one form (e.g. - WAR), no further attempt (e.g. directory) will be made to deploy that - web application. The base Lifecycle implementation has been improved to - allow failed web applications to be started once the configuration - issues have been resolved. Any changes to a context.xml file (global, - per host or web application specific) will now result in a redeploy - of the affected web application(s) that ensures that any changes are - correctly applied rather than a reload which ignores changes in - context.xml files. (markt/kkolinko) -
fix - 52173: Improve Javadoc for delegate attribute - of WebappClassLoader. Based on a patch by bmargulies. (markt) -
add - Add denyStatus attribute to RequestFilterValve - (RemoteAddrValve, RemoteHostValve valves) and - RequestFilter (RemoteAddrFilter, - RemoteHostFilter filters). It allows to use different - HTTP response code when rejecting denied request. E.g. 404 instead - of 403. (kkolinko) -
fix - Slightly improve performance of UDecoder.convert(). Align - %2f handling between implementations. (kkolinko) -
-
-
Coyote
- - - - - - - - - - -
fix - 51881: Correctly complete Comet requests when the Comet END - event is triggered asynchronously. (markt) -
fix - 51905: Fix infinite loop in AprEndpoint shutdown if - acceptor unlock fails. Reduce timeout before forcefully closing - the socket from 30s to 10s. (kkolinko) -
fix - 51912: Fix HTTP header processing in NIO HTTP connector. - (kkolinko) -
fix - Improve MimeHeaders.toString(). (kkolinko) -
fix - Fix threading issue in NIO connectors during shutdown that meant Comet - connections were not always shut down cleanly. (markt) -
add - In HTTP connectors: self-guard against using a non-recycled input - buffer. Requests will be rejected with response status 400. (kkolinko) -
fix - 52121: Fix possible output corruption when compression is - enabled for a connector and the response is flushed. Includes a test - case provided by David Marcks. (kkolinko/markt) -
fix - Improve multi-byte character handling in Coyote output for HTTP - and AJP. (rjung) -
add - Refactor acceptor unlock code to reduce waiting time during connector - pause and stop. (markt) -
-
-
Jasper
- - - - - -
fix - Correct possible (but very small) memory leak when using maxLoadedJsps - to limit the number of JSPs loaded at any one time. (markt) -
fix - 52051: Better handling of missing resource problems with - non-standard Servlet mappings so that a 404 response is returned to the - client rather than a 500 response. (markt) -
fix - 52091: Address performance issues related to log creation - in TagHandlerPool. Patch provided by Taiki Sugawara. (markt) -
code - Switch to using Collections.enumeration() rather than custom code that - does the same thing. (markt) -
-
-
Cluster
- - - - - - -
fix - Avoid an unnecessary session ID change notice. - Notice of changed session ID by JvmRouteBinderValve is unnecessary to - BackupManager. In BackupManager, change of session ID is replicated by - the call of a setId() method. (kfujino) -
fix - Fix duplicate resetDeltaRequest() call in - DeltaSession.setId(String). (kkolinko) -
fix - Work around a - known JVM bug that is fixed in 1.7.0_01 but still present in - 1.6.0_29 and was triggering intermittent unit test failures for - org.apache.catalina.tribes.group. - TestGroupChannelMemberArrival.testMemberArrival. - The bug affects any components that use NIO although it was more likely - to be observed in the clustering module than the HTTP or AJP NIO - connector. (markt) -
add - When Context manager does not exist, no context manager message is - replied in order to avoid timeout (default 60sec) of - GET_ALL_SESSIONS sync phase. (kfujino) -
fix - Fix setting maxInactiveInterval, sessionIdLength and - processExpiresFrequency for cluster managers. Use setter - when setting maxActiveSessions. (rjung) -
-
-
Web applications
- - - - - - -
add - 50923: Use distinct background color for code - tag in Tomcat documentation, for better readability. (kkolinko) -
fix - 51630: Fix bug in async0 example that triggered an - IllegalStateException in the application log. (markt) -
add - 52025: Add additional information regarding DriverManager, - the service provider mechanism and memory leaks. (markt) -
fix - 52049: Improve setup instructions for running as a Windows - service: remove references to specific Windows operating systems - it - easily becomes dated; correct information on how a JRE is identified and - selected. (markt) -
update - 52172: Clarify Tomcat build instructions. Patch provided - by bmargulies. (kkolinko) -
-
-
jdbc-pool
- - - - - -
fix - 52015: In jdbc-pool: JdbcInterceptor passes not 'this' but - 'proxy' to getNext().invoke. (kfujino) -
fix - In jdbc-pool: Improve handling of Errors that originate from methods - invoked through reflection. In TrapException interceptor: - rethrow Error as is, without wrapping it in a RuntimeException. - (kkolinko) -
fix - In jdbc-pool: Unwrap InvocationTargetException if it is caught in - ResultSetProxy, like we do it elsewhere. (kkolinko) -
fix - When building jdbc-pool from within Tomcat, use Tomcat's - output directory location. This allows to move all build - output away from the source tree. (kkolinko) -
-
-
Other
- - - - - - - - - - - - -
update - Update the package re-named copy of Commons BCEL (formerly Jakarta BCEL) - to the latest code from Commons BCEL trunk. (markt) -
code - Remove some unused code from the packaged renamed Commons BCEL. (markt) -
fix - 52059: In Windows uninstaller: Do not forget to remove - Tomcat keys from 32-bit registry on deinstallation. (kkolinko) -
code - Start the process of deprecating unused and unnecessary code that will - be removed in the next major release (8.0.x). (markt) -
update - Ignore .git directory when building the source - distributive. (markt) -
update - Remove trailing whitespace from the default configuration files. - (kkolinko) -
update - Improve RUNNING.txt. (kkolinko) -
update - Update optional Checkstyle library to 5.5. (kkolinko) -
add - In test suite: add LoggingBaseTest class to allow - use of Tomcat logging configuration in tests that do not start Tomcat. - (kkolinko) -
fix - In test suite: speed up TestGroupChannelSenderConnections. - Remove 48 seconds worth of waits. (kkolinko) -
fix - 52148: Add tomcat-coyote.jar to catalina-tasks.xml as this - JAR is now required by the Ant tasks. Patch provided by Volker Krebs. - (markt) -
-
-
Tomcat 7.0.22 (markt)released 2011-10-01
-
Catalina
- - - - - - - - - - - - - - - - - - -
fix - 51550: An additional change that ensures any exceptions - thrown by an Authenticator (or any other Valve configured for the - Context) will be handled by the custom error pages for the Context if an - appropriate error page is configured. (markt) -
fix - 51580: Added a nicer error message when a WAR file contains - filenames not properly encoded in UTF-8. (schultz) -
fix - 51687: Added (optional) protection against - sun.java2d.Disposer thread pinning a WebappClassLoader into memory - in the JreMemoryLeakPreventionListener. (schultz) -
add - 51741: Fixes a problem with Eclipse WTP "Serve modules - without publishing" feature where applications failed to access - resources when using getResource() on the classloader. (slaurent) -
fix - 51744: Prevent application code from closing the associated - JNDI context while the application is running. (markt) -
fix - Correct a regression with the fix for 51653 that broke custom - error pages for 4xx responses from the Authenticators. Error handling - and request listeners are now handled in the StandardHostValve to ensure - they wrap all Context level activity. (markt) -
fix - 51758: The digester (used for processing XML files) used the - logger name org.apache.commons.digester.Digester rather - than the expected org.apache.tomcat.util.digester.Digester. - The digester has been changed to use the expected logger name. - (markt/kkolinko) -
fix - 51774: Fix incorrect cached method signature that prevented - session tracking modes from being defined in web.xml when running under - a security manager. (markt) -
add - Add an annotation cache to the DefaultInstanceManager that - improves performance for applications that make use of a lot of - non-poolable objects (e.g. tag files) that need to be scanned for - annotations when created. (markt) -
fix - Use the specification compliant request attribute of - javax.servlet.request.ssl_session_id to access the SSL - session ID and deprecated the Tomcat specific request attribute. (markt) -
add - Allow to overwrite the check for distributability - of session attributes by session implementations. (rjung) -
update - Add Java 7 sunec.jar and zipfs.jar to the list of JARs - to skip when scanning for TLDs and web fragments. (rjung) -
add - 51862: Added a classesToInitialize attribute to - JreMemoryLeakPreventionListener to allow pre-loading of configurable - classes to avoid some classloader leaks. (slaurent) -
fix - Reduce visibility of static field ManagerBase.name and - make it final. (kkolinko) -
update - Add thread name to juli OneLineFormatter. (rjung) -
fix - Ensure Servlets that implement ContainerServlet always get treated as - restricted. (markt) -
fix - 51872: Ensure that the access log always uses the correct - value for the remote IP address associated with the request and that - requests with multiple errors do not result in multiple entries in - the access log. (markt) -
-
-
Coyote
- - - - - - - - - - - - - -
code - Remove unused and undocumented socketCloseDelay attribute from NIO - connector. (markt) -
fix - 49683: Support separate connection and keep-alive timeouts - for the APR/native connector HTTP and AJP connectors. (markt) -
code - Further re-factoring of the HTTP connectors to align the BIO, NIO and - APR implementations. (markt) -
fix - 51794: Fix race condition in NioEndpoint. (fhanik) -
fix - 51811: Correct SSL configuration property name from - sslImplemenationName to sslImplementationName. (rjung) -
fix - Fix a timing issue in NIO connector that meant that stopping a connector - did not trigger a Comet END event if the associated processor was - processing a READ event when the connector was stopped. (markt) -
fix - Replace unneeded call that iterated events queue in NioEndpoint.Poller. - (kkolinko) -
fix - 51860: Fix issues if using NIO with a custom - SSLImplementation. Based on a suggestion by Roman Tsirulnikov. (markt) -
fix - Allow the BIO HTTP connector to be used with SSL when running under Java - 7. (markt) -
update - Don't send AJP CPONG if endpoint is already paused. (rjung) -
update - Align APR AJP connector with NIO one. Send 503 if endpoint is paused. - (rjung) -
update - Accept AJP request even if endpoint is paused, if CPING was successful. - (rjung) -
-
-
Jasper
- - - -
fix - When unloading JSPs due to configuration of the - maxLoadedJsps initialisation parameter, the unloading code - was retaining a reference to the to the unloaded JSP preventing the - associated class from being unloaded until the JSP that replaced it was - itself unloaded. (markt) -
fix - 51852: Correct two problems in the handling of varargs - methods with the BeanELResolver. The first meant the wrong method was - sometimes called and the second that an ArrayIndexOutOfBoundsExceptions - could be thrown. Patch (including a test case) provided by Matt Benson. - (markt) -
-
-
Cluster
- - - -
update - Refactor cluster manager configuration: move handling of common - attributes to base class. (kfujino, rjung) -
add - New cluster manager attribute sessionAttributeFilter - allows to filter which session attributes are replicated using a - regular expression applied to the attribute name. (rjung) -
-
-
Web applications
- - - -
fix - Correct the documentation for connectionLinger attribute - for the AJP and HTTP connectors. (markt) -
update - Document caveat of using RemoteAddrValve with IPv6 - addresses. (kkolinko) -
-
-
jdbc-pool
- - - - - - -
fix - In jdbc-pool: Avoid IllegalArgumentException when setting maxActive - less than or equal to 0. - ArrayBlockingQueue doesn't allow capacity of 0 or less. (kfujino) -
fix - 48392 (r1169796): Fix typo in - StatementDecoratorInterceptor. (fhanik) -
fix - 51139: - In jdbc-pool: validatorClassName and suspectTimeout are ignored. - In order to support them correctly, validatorClassName and - suspectTimeout are added to a property list. (kfujino) -
fix - 51786: - In jdbc-pool: Discarded connection is not active in a pool any longer. - It removes from the active connection list. (kfujino) -
fix - 51871: Fix dependency in Maven POM file of - tomcat-jbdc. (kkolinko) -
-
-
Other
- - - - -
update - Update the "test" target in the default build file to report a test - failure only after all available connector variants (bio, nio, apr) - have been tested. Do not stop after first connector that fails. - (kkolinko) -
update - 51887: When running the unit tests, use a fast but insecure - random number source for session ID generation to reduce the delays - caused by waiting for entropy. (kkolinko/markt) -
code - Code clean-up to further reduce the number of warnings reported by - Eclipse, FindBugs and CheckStyle. (markt/kkolinko) -
-
-
Tomcat 7.0.21 (markt)released 2011-09-01
-
Catalina
- - - - - - - - - - - - - -
add - 41718: Include a response body when sending a redirect. - (markt) -
add - 51640: Improve the memory leak prevention for leaks triggered - by java.sql.DriverManager. (markt) -
fix - 51644: Fix annotation scanning for contexts with a - multi-level context path such as /a/b. (markt) -
fix - Unregisters MBean of DataSource when web application stops. (kfujino) -
fix - 51650: Code clean-up. Patch provided by Felix Schumacher. - (markt) -
fix - 51653: Move application level error page handling from the - Host to the Context. This ensures that application error page handling - is completed before the requestDestroyed event of any - ServletRequestListener is fired. (markt) -
fix - 51654: Improve handling of invalid appBase settings for Host - elements. (markt) -
fix - 51658: Fix possible NPE when logging a failed request. Based - on a suggestion by Felix Schumacher. (markt) -
fix - 51688: JreMemoryLeakPreventionListener now protects against - AWT thread creation. (schultz) -
fix - 51712: Ensure cache control headers are sent when appropriate - even if the request is secure. Patch provided by Michael Zampani. - (markt) -
fix - 51713: Improve message that is logged if there is an error - in the value of protocol in a Connector. - (kkolinko) -
fix - 51739: When using a landing page with FORM authentication - ensure that the request has a valid HTTP method. (markt) -
-
-
Coyote
- - - - - - - -
fix - 51641: Use correct key when removing processor instances from - the connections map during clean-up. Patch provided by zhh. (mark) -
fix - More changes to align the code between the different HTTP connectors. - (markt) -
fix - Ensure AjpMessage headers are correct for the direction of the message. - (markt) -
code - Code clean-up and re-factoring to reduce duplicate code in the AJP - processor implementations. (markt) -
add - Detect incomplete AJP messages and reject the associated request if one - is found. (markt) -
fix - 51698: Fix CVE-2011-3190. Prevent AJP message injection. - (markt) -
-
-
Jasper
- - -
fix - 41673: Use platform line-endings when reporting compilation - errors. (markt) -
-
-
Cluster
- - -
add - 51736: Make rpcTimeout configurable in BackupManager. - (kfujino) -
-
-
Web applications
- - -
fix - 51649: Update the documentation web application to include - the ThreadLocal leak prevention listener. (markt) -
-
-
jdbc-pool
- - -
add - 51583 (r1157874, r1162102): Fix - shutdown delay in jdbc-pool. (fhanik/kkolinko) -
-
-
Other
- - - -
fix - 51558: Don't force the use of StandardManager when using - any of the Tomcat#addWebapp() methods. (markt) -
fix - 51704: Make use of File#mkdirs() more robust. - (markt) -
-
-
Tomcat 7.0.20 (markt)released 2011-08-11
-
Catalina
- - - - - - - - - - - - - - - - - - - - -
fix - Corrected missing comma in the value of jarsToSkip - property in conf/catalina.properties file, which - caused tomcat-jdbc.jar and commons-beanutils*.jar to be not - ignored when scanning jars for tag libraries. (kkolinko) -
fix - 41709: Provide exception messages where no message is - provided currently for IllegalStateExcpetions triggered by calling - HttpServletResponse methods when the reponse is committed. (markt) -
fix - 51509: Fix potential concurrency issue in CSRF prevention - filter that may lead to some requests failing that should not. (markt) -
fix - 51518: Correct error in web.xml parsing rules for the - <others/> tag when using absolute ordering. (markt) -
add - Move the SetCharacterEncoding filter from the examples web application - to the org.apache.catalina.filters package so it is - available for all web applications. (markt) -
fix - 51550: Internal errors in Tomcat components that process - requests before they are passed to a web application, such as - Authenticators, now return a 500 response rather than a 200 response. - (markt) -
fix - 51555: Allow destroy() to be called on Lifecycle components - that are in the initialized state. (markt) -
add - Add x-threadname pattern format token to ExtendedAccessLogValve to log - the current request thread name. Based on a patch from Felix Schumacher. - (timw) -
fix - 51584: Ensure file paths are encoded/decoded when translated - to/from URLs when working with resources from a Context so special - characters don't cause issues. (markt) -
fix - 51586: Expand error handling to cover anything that is - recoverable (or might be recoverable) when loading classes during - HandlesTypes processing. (markt) -
fix - 51588: Make it easier to extend the AccessLogValve to add - support for custom elements. (markt) -
fix - Ensure that calls to StandardWrapper methods() that may trigger creation - of a Servlet instance always do so in way that correctly instantiates a - Servlet instance. (markt) -
fix - In JDBCStore: Committing connection if autoCommit is false. - Make sure committed connection is returned to the pool if datasource is - enabled. (kfujino) -
add - Split condition attribute of AccessLogValve into two, - conditionIf and conditionUnless. Implement - conditional logging that logs only if a request attribute is present. - (kkolinko) -
fix - Allow to have several AccessLogValve instances in the same scope (e.g. - in the same Context). (kkolinko) -
fix - 51610: If an unchecked exception occurs during a lifecycle - transition (e.g. web application start) ensure that the component is - put into the failed state. (markt) -
fix - 51614: Avoid calling store.load() and session.expire() - twice in PersistentManager when expiring sessions. (kfujino) -
fix - Prevent spurious log warnings on container stop if a child component has - previously failed. (markt) -
fix - Add missing getter and setter for the alwaysUseSession attribute of the - authenticators. (markt) -
-
-
Coyote
- - - - - - - - - - -
fix - 49595: Prevent JVM crash with the AJP APR connector when - flushing a closed socket. (jfclere) -
fix - 50394: Return -1 instead of throwing an exception when - encountering an EOF while processing an input stream with the HTTP APR - connector. (jfclere) -
fix - Correctly handle a connectionTimeout value of -1 (no timeout) for the - HTTP NIO and AJP NIO connectors. (markt) -
fix - 51503: Add additional validation that prevents a connector - from starting if it does not have a port > 0. (markt) -
fix - 51557: Ignore HTTP headers that do not comply with RFC 2616 - and use header names that are not tokens. (markt) -
add - Improve error handling for HTTP APR if an error occurs while using - sendfile. (markt) -
fix - Ensure that when using sendfile, HTTP APR sockets are not added to - multiple pollers. This may cause errors during shutdown. (markt) -
update - Set reuse flag of final AJP END_RESPONSE - packet to 0 if we plan to close the connection. (rjung) -
update - Correctly indicate if socket is closing when calling recycle for the AJP - NIO processor. Note since the flag is unused in this case there were no - bugs triggered by the re-factoring error. (rjung) -
-
-
Jasper
- - - -
fix - 51532: JSP files with dependencies in JARs were recompiled on - every access leading to poor performance. (markt) -
fix - 51544: Correctly resolve bean methods in EL so accessible - methods that are overridden by inaccessible methods do not cause an - IllegalAccessException. (markt) -
-
-
Web applications
- - - - - - - - - - - -
fix - 41498: Add the allRolesMode attribute to the Realm - configuration page in the documentation web application. (markt) -
fix - 48997: Fixed some typos and correct cross-referencing to the - HTTP Connector documentation with the SSL How-To page of the - documentation web application. (markt) -
fix - 49122: Improvements and fixes for index page for ROOT web - application. Based on a patch provided by pidster. (markt) -
fix - 51516: Correct documentation web application to show correct - system property name for changing the name of the SSO session cookie. - (markt) -
update - Configure the Manager and Host Manager web applications with the Set - Character Encoding Filter to make the default request character encoding - UTF-8 to improve i18n support. Note that best results will be obtained - if the connector is also configured with - URIEncoding="UTF-8".(markt) -
update - Update the documentation web application to be even more explicit about - the implications of setting the path attribute on a Context element in - server.xml. (markt) -
fix - 51561: Update the Realm page within the documentation web - application to recommend the use of digest.[bat|sh] to generate digests - rather than calling RealmBase directly. (markt) -
fix - 51567: Update the class loading page of the documentation - web application to include information on the search order for the - common class loader when separate values are used for $CATALINA_HOME and - $CATALINA_BASE. (markt) -
update - Improve class loading documentation and logging documentation. - (kkolinko) -
add - Add information to the security page of the the documentation web - application for the ciphers attribute of the Connector element. (markt) -
-
-
Other
- - - - - - - - - - - - - - -
fix - 51503: Add additional validation to Windows installer that - ensure that the shutdown port, HTTP port and AJP port are all specified - during the install process. (markt) -
fix - 51531: Update sample Eclipse classpath file to reflect - updated ECJ jar. Patch provided by Ian Brandt. (markt) -
update - Convert Tomcat unit tests to JUnit 4. (kkolinko) -
update - Update optional CheckStyle library to 5.4. (kkolinko) -
update - Remove resolveHosts attribute from AccessLogValve - configuration in the default server.xml. It was documented - in 7.0.19 that it has no effect. (kkolinko) -
update - Simplify mapping for jsp servlet in the default - web.xml. (kkolinko) -
fix - Correctly handle uninstall with the Windows installer if the service is - installed with a name that contains a '-' character. (markt) -
fix - 51598: Prevent direct invocation of the Windows uninstaller - without a service name from executing since the uninstall will not be - complete. (markt) -
fix - Use Tomcat icon (cat) instead of Apache Commons Daemon (feather) one - in the list of uninstallable programs on Windows. (kkolinko) -
update - Update to Apache Commons Daemon 1.0.7. (markt) -
fix - 51621: Add additional required JARs to the deployer - distribution. (markt) -
fix - Fix a small number of warnings reported by FindBugs. (markt) -
update - Update to version 1.1.22 of the native component for the AJP APR/native - and HTTP APR/native connectors. (markt) -
-
-
Tomcat 7.0.19 (markt)released 2011-07-19
-
Catalina
- - - - - - - - - - - -
add - Add option to activate access log for unit tests. (rjung) -
fix - Fix regression in year number formatting for AccessLogValve. (rjung) -
add - 46252: Allow to specify character set to be used to write - the access log in AccessLogValve. (kkolinko) -
fix - 51494: Prevent an NPE when a long running request completes - if the associated web application was destroyed while the request was - processing. (markt) -
update - Allow choosing a locale for timestamp formatting in AccessLogValve. - (rjung) -
fix - When generating access logs for errors, log at the Context/Host level if - a Context or Host can be identified for the failed request. (markt) -
update - Create a directory for access log or error log (in AccessLogValve and - in JULI FileHandler) automatically when it is specified as a part of - the file name, e.g. in the prefix attribute. Earlier this - happened only if it was specified with the directory - attribute. (kkolinko) -
fix - Log a failure if access log file cannot be opened. (kkolinko) -
fix - Use en_US as locale for timestamps in ExtendedAccessLogValve. - (rjung) -
fix - Use en_US as locale for creationdate in WebdavServlet. (rjung) -
-
-
Coyote
- - - - - - - - -
update - 51477: Support all SSL protocol combinations in the - APR/native connector. This only works when using the native library - version 1.1.21 or later, which is not yet released. (rjung) -
update - Various refactorings to reduce code duplication and unnecessary code in - the connectors. (markt) -
fix - Correct regression introduced in 7.0.17 that triggered 400 entries in - the AccessLog when using the AJP/BIO connector. (markt) -
fix - Fix regression producing invalid MBean names when using IPV6 - addresses for connectors. (rjung) -
fix - Add missing thread name in RequestProcessor when Servlet 3 Async - is used. Fixes null thread name in access log and JMX MBean. (rjung) -
fix - Fix CVE-2011-2526. Protect against infinite loops (HTTP NIO) and crashes - (HTTP APR) if sendfile is configured to send more data than is available - in the file. (markt) -
fix - Prevent NPEs when a socket is closed in non-error conditions after - sendfile processing when using the HTTP NIO connector. (markt) -
-
-
Cluster
- - -
update - Remove unnecessary server.xml parsing code for old cluster - implementation that does not ship as part of Tomcat 7. (markt) -
-
-
Web applications
- - - - - -
add - Add additional information to the documentation web application on the - benefits and remaining risks when running under a security manager. - (markt) -
fix - 51490: Correct broken HTML in JSP tag plugin examples and - improve the <c:if> example to make failures more obvious. Based on - suggestions by Charles. (markt) -
add - Document ExtendedAccessLogValve. (rjung) -
fix - Correct default value of enableLookups for connectors - and mention, that resolveHosts for the AccessLogValve - is replaced by enableLookups. (rjung) -
-
-
jdbc-pool
- - -
add - Include jdbc-pool into Tomcat release. (fhanik) -
-
-
Other
- - - -
update - Update to Apache Commons Daemon 1.0.6. (markt) -
update - Update to Eclipse JDT Compiler 3.7. (markt) -
-
-
Tomcat 7.0.18 (markt)not released
-
Catalina
- - - - - - -
fix - Correct regression introduced in 7.0.17 that triggered an NPE if a - CrawlerSessionManagerValve was used without setting crawlerUserAgents. - (markt) -
fix - 51466: Correct comment typos in HostManagerServlet. Patch - provided by Felix Schumacher. (markt) -
fix - 51467: Invoke Thread.start() rather than Thread.run() so that - listeners and filters are stopped in a separate thread rather than the - current thread. Patch provided by Felix Schumacher. (markt) -
fix - 51473: Fix concatenation of values in - SecurityConfig.setSecurityProperty(). (kkolinko) -
fix - Fix response.encodeURL() for the special case of an absolute URL - with no path segment (http://name). (rjung) -
-
-
Coyote
- - - -
fix - Correct regression caused by connector re-factoring that made AJP - APR/native connector very unstable on Windows platforms. (markt) -
fix - Correct regression caused by connector re-factoring that meant that - sendfile data was not reset between pipe-lined HTTP requests. (markt) -
-
-
Tribes
- - - -
update - Re-factor tests to align packages for tests with the classes under test. - Start to convert non-JUnit tests to JUnit. Remove unnecessary code. - (markt) -
fix - Add synchronization to receiver socket binding to prevent test failures - on Linux. (markt) -
-
-
Other
- - - -
fix - More code clean-up to remove unused code and reduce IDE warnings. - (markt/kkolinko) -
update - Further improvements to the Windows installer. (markt/kkolinko) -
-
-
Tomcat 7.0.17 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
add - 48956: Add regular expression support for SSI. (markt) -
add - 49165: Allow any time stamp formats supported by - SimpleDateFormat in AccessLogValve. Support logging begin and/or end of - request. (rjung) -
add - 50677: Allow system property variables to be used in the - values of "common.loader" and other "*.loader" properties in the - catalina.properties file. (kkolinko) -
fix - 51376: When adding a Servlet via - ServletContext#addServlet(String, Servlet), the Servlet was not - initialized when the web application started and a load on startup value - was set. (markt) -
fix - 51386: Correct code for processing @HandlesTypes annotations - so only types of interest are reported to a ServletContainerInitializer. - (markt) -
update - Add the Tomcat extras, ant-junit and Java Help Jars to the list of JARs - to skip when scanning for TLDs and web fragments. (rjung) -
fix - The fix for bug 51310 caused a regression that re-introduced - bug 49957 and deleted the contents of the work directory - when Tomcat was shutdown. This fix ensures that that work directory for - an application is not deleted when Tomcat is shutdown. (markt) -
fix - Correct issues with JULI's OneLineFormatter including: correctly - re-using formatted timestamps when possible; thread-safety issues in - timestamp formatting; correcting the output of any milliseconds to - include leading zeros and formatting any parameters present. - (kkolinko/markt/rjung) -
fix - 51395: Fix memory leak triggered when an application that - includes a SAXParserFactory is the first web application to be loaded. - (markt) -
fix - 51396: Correctly handle jsp-file entries in web.xml when the - JSP servlet has been configured via code when embedding Tomcat. (markt) -
fix - 51400: Avoid known bottleneck in JVM when converting between - Strings and bytes by always providing a Charset rather than an encoding - name. Based on a patch by Dave Engberg. (markt) -
fix - 51401: Correctly initialise shared WebRuleSet instance used - by the digesters that parse web.xml and prevent incorrect warnings about - multiple occurrences of elements that are only allowed to appear once in - web.xml and web-fragment.xml. (kfujino) -
add - 51403: Avoid NPE in JULI FileHandler if formatter is - misconfigured. (kkolinko) -
fix - Previous improvements in JAR scanning performance introduced a start-up - performance penalty for some use cases. This fix addresses those - performance penalties while retaining the original improvements. (markt) -
add - 51418: Provide more control over Context creation when - embedding Tomcat. Based on a patch by Benson Margulies. (markt/kkolinko) -
fix - Remove redundant copy of catalina.properties from o.a.c.startup. - Generate this copy for inclusion in bin and src jars during the - ant "compile" task. (rjung) -
fix - Use system properties loaded from catalina.properties via the class - path in unit tests. (rjung) -
update - Improve JMX unit test. (rjung) -
fix - Fix IllegalStateException for JavaScript files when switching from - Writer to OutputStream. The special handling of this case in the - DefaultServlet was broken due to a MIME type change for JavaScript. - (funkman) -
fix - Fix CVE-2011-2204. Prevent user passwords appearing in log files if a - runtime exception (e.g. OOME) occurs while creating a new user for a - MemoryUserDatabase via JMX. (markt) -
fix - Fix an issue with the CrawlerSessionManagerValve that meant sessions - were not always correctly tracked. (markt) -
fix - 51436: Send 100 (Continue) response earlier to enable - ServletRequestListener implementations to read the request body. Based - on a patch by Simon Olofsson. (markt) -
fix - Ensure an access log entry is made if an error occurs during - asynchronous request processing and the socket is immediately closed. - (markt) -
fix - Ensure that if asyncDispatch() is called during an onTimeout event and - the target Servlet does not call startAsync() or complete() that Tomcat - calls complete() once the target Servlet exits. (markt) -
fix - Improve the handling for Servlets that implement the deprecated - SingleThreadModel when embedding Tomcat. (markt) -
fix - 51445: Correctly initialise all instances of Servlets that - implement SingleThreadModel. Based on a patch by Felix Schumacher. - (markt) -
fix - 51453: Fix a regression in the preemptive authentication - support (enhancement 12428) that could trigger authentication - even if preemptive authentication was disabled. (markt) -
fix - Prevent possible NPE when serving Servlets that implement the - SingleThreadModel interface. (markt) -
fix - In launcher for embedded Tomcat: do not change catalina.home - system property if it had a value. (kkolinko) -
fix - When using Servlets that implement the SingleThreadModel interface, add - the single instance created to the pool when it is determined that a - pool of servlets is required rather than throwing it away. (markt) -
-
-
Coyote
- - - - - - -
fix - Fix unit test for bindOnInit which was failing for APR on some - platforms. (rjung) -
fix - Remove superfluous quotes from thread names for connection pools. - (rjung) -
fix - Fix crash observed during pausing the connector when using APR. - Only add socket to poller if we are sure we don't close it later. - (rjung) -
update - Various refactorings to reduce code duplication and unnecessary code in - the connectors. (markt) -
fix - Correct a regression introduced in Apache Tomcat 7.0.11 that broke - certificate revocation list handling. (markt) -
-
-
Jasper
- - - - - -
update - Improve the message printed by TldLocationsCache and add configuration - example to the logging.properties file. (kkolinko) -
fix - 33453: Recompile JSPs if last modified time of the source or - any of its dependencies changes either forwards or backwards. Note that - this introduces an incompatible change to the code generated for JSPs. - Tomcat will automatically re-compile any JSPs and tag files found in the - work directory when upgrading from 7.0.16 or earlier to 7.0.17 or later. - If you later downgrade from 7.0.17 or later to 7.0.16 or earlier, you - must empty the work directory as part of the downgrade process. (markt) -
fix - 36362: Handle the case where tag file attributes (which can - use any valid XML name) have a name which is not a Java identifier. - (markt/kkolinko) -
add - Broaden the exception handling in the EL Parser so that more failures to - parse an expression include the failed expression in the exception - message. Hopefully, this will help track down the cause of - 51088. (markt) -
-
-
Cluster
- - - - -
fix - 51306: Avoid NPE when handleSESSION_EXPIRED is processed - while handleSESSION_CREATED is being processed. (kfujino) -
fix - Notifications of changes in session ID to other nodes in the cluster - should be controlled by notifySessionListenersOnReplication rather than - notifyListenersOnReplication. (markt) -
fix - The change in session ID is notified to the container event listener on - the backup node in cluster. - This notification is controlled by - notifyContainerListenersOnReplication.(kfujino) -
-
-
Web applications
- - - - - - -
fix - Update Maven repository information in the documentation to reflect - current usage. (markt) -
add - 43538: Add host name and IP address to the HTML Manager - application. Patch by Dennis Lundberg. (markt) -
fix - Add session="false" directive to the index page of the - ROOT web application. (kkolinko) -
fix - 51443: Document the notifySessionListenersOnReplication - attribute for the DeltaManager. (markt) -
fix - 51447: Viewing a back up session in the HTML Manager web - application no longer changes the session to a primary session. Based on - a patch provided by Eiji Takahashi. (markt) -
-
-
Other
- - - - - - - - -
fix - 33262: Install monitor to auto-start for current user only - rather than all users to be consistent with menu item creation. (markt) -
add - 40510: Provide an option to install shortcuts for the current - user or all users. Also ensure registry is correctly cleaned on - uninstall for 64-bit platforms. (markt) -
add - 50949: Provide the ability to specify the AJP port and - service name when installing Tomcat using the Windows installer. This - permits multiple instances of the same Tomcat version to be installed - side-by-side. (markt) -
update - Clean up shell and batch scripts (improve consistency, - clarify comments, add configtest command support for - Windows). (rjung) -
fix - 51206: Make CATALINA_BASE visible for setenv.sh. (rjung) -
update - Remove unnecessary variable BASEDIR from scripts. (rjung) -
fix - 51425, 51450: Update Spanish translations. Based - on patches provided by Jesus Marin. (markt) -
-
-
Tomcat 7.0.16 (markt)released 2011-06-17
-
Catalina
- - - - - - - - - - - -
fix - 51249: Further improve system property replacement code - in ClassLoaderLogManager of Tomcat JULI to cover some corner cases. - (kkolinko) -
fix - 51264: Improve the previous fix for this issue by returning - the connection to the pool when not in use so it does not appear to be - an abandoned connection. Patch provided by Felix Schumacher. (markt) -
fix - 51324: Improve handling of exceptions when flushing the - response buffer to ensure that the doFlush flag does not get stuck in - the enabled state. Patch provided by Jeremy Norris. (markt) -
fix - Correct a regression in the fix for 51278 that prevented any - web application from being marked as distributable. (kfujino/markt) -
fix - Correct a regression in the fix for 51278 that prevented a - web application from overriding the default welcome files. (markt) -
fix - Enable remaining valves for Servlet 3 asynchronous processing support. - (markt) -
fix - Avoid possible NPE when logging requests received during embedded Tomcat - shutdown. (markt) -
fix - 51340: Fix thread-safety issue when parsing multiple web.xml - files in parallel. Apache Tomcat does not do this but products that - embed it may. (markt) -
fix - 51344: Fix problem with Lifecycle re-factoring for deprecated - embedded class that prevented events being triggered. (markt) -
fix - 51348: Prevent possible NPE when processing WebDAV locks. - (markt) -
-
-
Coyote
- - - -
fix - When parsing the port in the HTTP host header, restrict the value to be - base 10 integer digits rather than hexadecimal ones. - (rjung/markt/kkolinko) -
update - Various refactorings to reduce code duplication and unnecessary code in - the connectors. (markt) -
-
-
Jasper
- - -
update - Change JAR scanning log messages where no TLDs are found to DEBUG level - and replace the multiple messages with a single INFO level message that - indicates that at least one JAR was scanned needlessly and how to obtain - more info. (markt) -
-
-
Cluster
- - -
fix - Enable Servlet 3 asynchronous processing support when using clustering. - (markt) -
-
-
Web applications
- - -
fix - Correct the log4j configuration settings when defining conversion - patterns in the documentation web application. (markt) -
-
-
Tomcat 7.0.15 (markt)not released
-
Catalina
- - - - - - - - - - - - -
fix - 27122: Remove a workaround for a very old and since fixed - Mozilla bug and change the default value of the securePagesWithPragma - attribute of the Authenticator Valves to false. These changes should - reduce the likelihood of issues when downloading files with IE. (markt) -
fix - 35054: Check that a file is not specified for a Host's - appBase and log an error if it is. (markt) -
fix - 51197: Fix possible dropped connection when sendError or - sendRedirect are used during async processing. (markt) -
fix - 51221: Correct Spanish translation of text used in a 302 - response. Patch provided by Paco Soberón. (markt) -
fix - 51249: Correct ClassLoaderLogManager system property - replacement code so properties of the form "}${...}" can be used - without error. (markt) -
fix - 51264: Allow the JDBC persistent session store to use a - JNDI datasource to define the database in which sessions are persisted. - Patch provided by Felix Schumacher. (markt) -
fix - 51274: Add missing i18n strings in PersistentManagerBase. - Patch provided by Eiji Takahashi. (markt) -
fix - 51276: Provide an abstraction for accessing content in JARs - so the most efficient method can be selected depending on the type of - URL used to identify the JAR. This improves startup time when JARs are - located in $CATALINA_BASE/lib. (markt) -
fix - 51277: Improve error message if an application is deployed - with an incomplete FORM authentication configuration. (markt) -
fix - 51278: Allow ServletContainerInitializers to override - settings in the global default web.xml and the host web.xml. (markt) -
fix - 51310: When stopping the Server object on shutdown call - destroy() after calling stop(). (markt) -
-
-
Coyote
- - -
add - 51145: Add an AJP-NIO connector. (markt/rjung) -
-
-
Jasper
- - - - -
add - 51220: Add a system property to enable tag pooling with JSPs - that use a custom base class. Based on a patch by Dan Mikusa. (markt) -
add - Include a comment header in generated java files that indicates when the - file was generated and which version of Tomcat generated it. (markt) -
fix - 51240: Ensure that maxConnections limit is enforced when - multiple acceptor threads are configured. (markt) -
-
-
Cluster
- - -
fix - 51230: Add missing attributes to JMX for ReplicationValve and - JvmRouteBinderValve. Patch provided by Eiji Takahashi. (markt) -
-
-
Web applications
- - - - - - - -
add - Add documentation for AJP-NIO connector. (markt/rjung) -
fix - 51182: Document JAAS supported added in 51119. - Patch provided by Neil Laurance. (markt) -
fix - 51225: Fix broken documentation links for non-English locales - in the HTML Manager application. Patch provided by Eiji Takahashi. - (markt) -
fix - 51229: Fix bugs in the Servlet 3.0 asynchronous examples. - Patch provided by Eiji Takahashi. (markt) -
fix - 51251: Add web application version support to the Ant tasks. - Based on a patch provided by Eiji Takahashi. (markt) -
fix - 51294: Clarify behaviour of unpackWAR attribute of - StandardContext components. (markt) -
-
-
Other
- - - -
fix - 46451: Configure svn:bugtraq properties for Tomcat trunk. - Based on a patch provided by Marc Guillemot. (markt) -
fix - 51309: Correct logic in catalina.sh stop when using a PID - file to ensure the correct message is shown. Patch provided by Caio - Cezar. (markt) -
-
-
Tomcat 7.0.14 (markt)released 2011-05-12
-
Catalina
- - - - - - - - -
update - Stylistic improvements to MIME type sync script. - Based on a patch provided by Felix Schumacher. (rjung) -
fix - Ensure that the SSLValve provides the SSL key size as an Integer rather - than a String. (markt) -
fix - Ensure that the RemoteIpValve works correctly with Servlet 3.0 - asynchronous requests. (markt) -
fix - Use safe equality test when determining event type in the - MapperListener. (markt) -
fix - Use correct class loader when loading Servlet classes in - StandardWrapper. (markt) -
add - Provide additional configuration options for the RemoteIpValve and - RemoteIpFilter to allow greater control over the values returned by - ServletRequest#getServerPort() and ServletRequest#getLocalPort() when - Tomcat is behind a reverse proxy. (markt) -
fix - Ensure session cookie paths end in / so that session - cookies created for a context with a path of /foo do not - get returned with requests mapped to a context with a path of - /foobar. (markt) -
-
-
Jasper
- - -
fix - 51177: Ensure Tomcat's MapElResolver always returns - Object.class for getType() as required by the - EL specification. (markt) -
-
-
Tomcat 7.0.13 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - -
fix - Correct mix-up in Realm Javadoc. (markt) -
fix - Fix display of response headers in AccessLogValve. (kkolinko) -
update - Implement display of multiple request headers in AccessLogValve: - print not just the value of the first header, but of the all of them, - separated by commas. (kkolinko) -
add - 50306: New StuckThreadDetectionValve to detect requests that - take a long time to process, which might indicate that their processing - threads are stuck. Based on a patch provided by TomLu. (slaurent) -
fix - 51038: Ensure that asynchronous requests are included in - access logs. (markt) -
fix - 51042: Don't trigger session creation listeners when a - session ID is changed as part of the authentication process. (markt) -
fix - 51050: Add additional common but non-standard file extension - to MIME type mappings for MPEG 4 files. Based on a patch by Cédrik Lime. - (markt) -
add - Add some additional common JARs that do not contain TLDs or web - fragments to the list of JARs to skip when scanning for TLDs and web - fragments. (markt) -
fix - While scanning JARs for TLDs and fragments, avoid using JarFile and use - JarInputStream as in most circumstances where JARs are scanned, JarFile - will create a temporary copy of the JAR rather than using the resource - directly. This change significantly improves startup performance for - applications with lots of JARs to be scanned. (markt) -
fix - Ensure response is committed when AsyncContext#complete() - is called. (markt) -
add - Add a container event that is fired when a session's ID is changed, - e.g. on authentication. (markt) -
fix - 51099: Correctly implement non-default login configurations - (configured via the loginConfigName attribute) for the the SPNEGO - authenticator. (fhanik/markt) -
add - 51119: Add JAAS authentication support to the - JMXRemoteLifecycleListener. Patch provided by Neil Laurance. (markt) -
add - 51136: Provide methods that enable the name of a Context on - Context creation when using Tomcat in an embedded scenario. Based on a - patch provided by David Calavera. (markt) -
fix - 51137: Add additional Microsoft Office MIME type mappings. - (rjung) -
add - Partial sync of MIME type mapping with mime.types from the Apache web - server. About 600 MIME types added, some changed. (rjung) -
fix - Make access logging more robust when logging requests that generate 400 - responses since the request object is unlikely to be fully/correctly - populated in that case. (markt) -
-
-
Coyote
- - - - - - - - - - - -
fix - 50957: Fix regression in HTTP BIO connector that triggered - errors when processing pipe-lined requests. (markt) -
fix - 50158: Ensure the asynchronous requests never timeout if the - timeout is set to zero or less. Based on a patch provided by Chris. - (markt) -
fix - 51073: Throw an exception and do not start the APR connector - if it is configured for SSL and an invalid value is provided for - SSLProtocol. (markt) -
fix - Align all the connector implementations with the documented default - setting for processorCache of 200. This changes the default from -1 - (unlimited) for the AJP-BIO, AJP-APR and HTTP-APR connectors. Additional - information was also added to the documentation on how to select an - appropriate value. -
fix - Take account of time spent waiting for a processing thread when - calculating connection and keep-alive timeouts for the HTTP BIO - connector. (markt) -
fix - 51095: Don't trigger a NullPointerException when the SSL - handshake fails with the HTTP-APR connector. Patch provided by Mike - Glazer. (markt) -
fix - Improve handling in AJP connectors of the case where too large a AJP - packet is received. (markt) -
fix - Restore the automatic disabling of HTTP keep-alive with the BIO - connector once 75% of the processing threads are in use and make the - threshold configurable. (markt) -
fix - Make pollerSize and maxConnections synonyms for the APR connectors since - they perform the same function. (markt) -
fix - Use maxThreads rather than 10000 as the default maxConnections for the - BIO connectors. (markt) -
-
-
Jasper
- - - - - - - -
fix - 47371: Correctly coerce the empty string to zero when used as - an operand in EL arithmetic. Patch provided by gbt. (markt) -
add - Label JSP/tag file line and column numbers when reporting errors since - it may not be immediately obvious what the numbers represent. (markt) -
fix - Correct a regression in the fix for 49916 that resulted in - JSPs being compiled twice rather than just once. (markt) -
add - Log JARs that are scanned for TLDs where no TLD is found so that users - can easily identify JARs that can be added to the list of JARs to skip. - (markt) -
update - Use a single TLD location cache for a web application rather than one - per JSP compilation to speed up JSP compilation. (markt) -
add - 51124: Refactor BodyContentImpl to assist in determining the - root cause of this bug. Based on a patch by Ramiro. (markt) -
-
-
Cluster
- - -
fix - 50950: Correct possible NotSerializableException for an - authenticated session when running with a security manager. (markt) -
-
-
Web applications
- - - - -
update - Configure Security Manager How-To to include a copy of the actual - conf/catalina.policy file when the documentation is built, rather - than maintaining a copy of its content. (kkolinko) -
fix - Fix broken stylesheet URL in XML based manager status output. (rjung) -
fix - 51156: Ensure session expiration option is available in - Manager application was running web applications that were defined in - server.xml. (markt) -
-
-
Other
- - - - - - -
update - Clarify error messages in *.sh files to mention that if a script is - not found it might be because execute permission is needed. (kkolinko) -
update - Update Apache Commons Pool to 1.5.6. (markt) -
fix - 51135: Fix auto-detection of JAVA_HOME for 64-bit Windows - platforms that only have a 32-bit JVM installed. (markt) -
fix - 51154: Remove duplicate @deprecated tags in ServletContext - Javadoc. Patch provided by sebb. (markt) -
fix - 51155: Add comments to @deprecated tags that have none. Patch - provided by sebb. (markt) -
-
-
Tomcat 7.0.12 (markt)released 2011-04-06
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - -
add - Automatically correct invalid paths when specified for Context elements - inside server.xml and log a warning that the configuration has been - corrected. (markt) -
fix - Don't unpack WAR files if they are not located in the Host's - appBase. (markt) -
fix - Don't log to standard out in SSLValve. (markt) -
fix - Handle the case where a web crawler provides an invalid session ID in - the CrawlerSessionManagerValve. (markt) -
update - Update pattern used in CrawlerSessionManagerValve to that used by the - ASF infrastructure team. (markt) -
fix - Remove unnecessary whitespace from MIME mapping entries in global - web.xml file. (markt) -
fix - When using parallel deployment, correctly handle the scenario when the - client sends multiple JSESSIONID cookies. (markt) -
add - 12428: Add support (disabled by default) for preemptive - authentication. This can be configured per context. Based on a patch - suggested by Werner Donn. (markt) -
fix - Make the CSRF nonce cache serializable so that it can be replicated - across a cluster and/or persisted across Tomcat restarts. (markt) -
update - Resolve some refactoring TODOs in the implementation of the new Context - attribute "swallowAbortedUploads". (markt) -
fix - Include the seed time when calculating the time taken to create - SecureRandom instances for session ID generation, report excessive times - (greater than 100ms) at INFO level and provide a value for the message - key so a meaningful message appears in the logs. (markt) -
fix - Don't register Contexts that fail to start with the Mapper. (markt) -
add - 48685: Add initial support for SPNEGO/Kerberos authentication - also referred to as integrated Windows authentication. This includes - user authentication, authorisation via the directory using the - user's delegated credentials and exposing the user's delegated - credentials via a request attribute so applications can make use of them - to impersonate the current user when accessing third-party systems that - use a compatible authentication mechanism. Based on a patch provided by - Michael Osipov. (markt) -
fix - HTTP range requests cannot be reliably served when a Writer is in use so - prevent the DefaultServlet from attempting to do so. (kkolinko) -
fix - Protect the DefaultServlet from Valves, Filters and Wrappers that write - content to the response. Prevent partial responses to partial GET - requests in this case since the range cannot be reliably determined. - Also prevent the DefaultServlet from setting a content length header - since this too cannot be reliably determined. (markt) -
fix - 50929: When wrapping an exception, include the root cause. - Patch provided by sebb. (markt) -
fix - 50991: Fix regression in fix for 25060 that called - close on a JNDI resource while it was still available to the - application. (markt) -
add - Provide a configuration option that lets the close method to be used for - a JNDI Resource to be defined by the user. This change also disables - using the close method unless one is explicitly defined for the - resource and limits it to singleton resources. (markt) -
fix - Correctly track changes to context.xml files and trigger redeployment - when copyXML is set to false. (markt) -
fix - 50997: Relax the requirement that directories must have a - name ending in .jar to be treated as an expanded JAR file - by the default JarScanner. Based on patch by Rodion Zhitomirsky. (markt) -
fix - Don't append the jvmRoute to a session ID if the jvmRoute is a zero - length string. (markt) -
fix - Don't register non-singelton DataSource resources with JMX. (markt) -
add - CVE-2011-1184: Provide additional configuration options for the DIGEST - authenticator. (markt) -
fix - Provide a workaround for Tomcat hanging during shutdown when running the - unit tests. (markt) -
-
-
Coyote
- - - - - -
add - 50887: Add support for configuring the JSSE provider used to - convert client certificates. Based on a patch by pknopp. (markt) -
fix - 50903: When a connector is stopped, ensure that requests that - are currently in a keep-alive state and waiting for client data are not - processed. Requests where processing has started will continue to - completion. (markt) -
fix - 50927: Improve error message when SSLCertificateFile is not - specified when using APR with SSL. Based on a patch provided by sebb. - (markt) -
fix - 50928: Don't ignore keyPass attribute for HTTP BIO and - NIO connectors. Based on a patch provided by sebb. (markt) -
-
-
Cluster
- - -
fix - Securely seed the SecureRandom instance used for UUID generation and - report excessive creation time (greater than 100ms) at INFO level. - (markt) -
-
-
Web applications
- - - - - - - - -
fix - 50924: Clean-up HTTP connector comparison table. (markt) -
add - Slightly expanded the documentation of the Host element to clarify the - relationship between host name and DNS name. (markt) -
fix - 50925: Update SSL how-to to take account of - keyPass connector attribute. (markt) -
update - Improve Tomcat Logging documentation. (kkolinko) -
fix - Align the authenticator documentation and MBean descriptors with the - implementation. (markt) -
fix - Prevent the custom error pages for the Manager and Host Manager - applications from being accessed directly. (markt) -
fix - 50984: When using the Manager application ensure that - undeployment fails if a file cannot be deleted. (markt) -
-
-
Other
- - - - - - -
update - Update Eclipse JDT complier to 3.6.2. (markt) -
update - Update WSDL4J library to 1.6.2 (used by JSR 109 support in the extras - package). (markt) -
update - Update optional CheckStyle library to 5.3. (markt) -
fix - 50911: Reduce noise generated during the build of the Windows - installer so warnings are more obvious. Patch provided by sebb. (markt) -
fix - Further work to reduce compiler and validation warnings across the code - base. (markt) -
-
-
Tomcat 7.0.11 (markt)released 2011-03-11
-
Catalina
- - - - - - - - - -
fix - CVE-2011-1088: Completed fix. Don't ignore @ServletSecurity - annotations. (markt) -
add - 25060: Close Apache Commons DBCP datasources when the - associated JNDI naming context is stopped (e.g. for a non-global - DataSource resource on web application reload) to close remaining - database connections immediately rather than waiting for garbage - collection. (markt) -
add - 26701: Provide a mechanism for users to register their own - URLStreamHandlerFactory objects. (markt) -
fix - 50855: Fix NPE on HttpServletRequest.logout() when debug - logging is enabled. (markt) -
add - New context attribute "swallowAbortedUploads" allows - to make request data swallowing configurable for requests - that are too large. (rjung) -
fix - 50854: Add additional permissions required by the Manager - application when running under a security Manager and support a shared - Manager installation when $CATALINA_HOME != CATALINA_BASE. (markt) -
fix - 50893: Add additional information to the download README for - the extras components. (markt) -
fix - Calling stop() and then destroy() on a - connector incorrectly triggered an exception. (markt) -
-
-
Coyote
- - - -
add - 48208: Allow the configuration of a custom trust manager for - use in CLIENT-CERT authentication. (markt) -
fix - Fix issues that prevented asynchronous servlets from working when used - with the HTTP APR connector on platforms that support TCP_DEFER_ACCEPT. - (markt) -
-
-
Jasper
- - - -
fix - Correct possible threading issue in JSP compilation when development - mode is used. (markt) -
fix - 50895: Don't initialize classes created during the - compilation stage. (markt) -
-
-
Tomcat 7.0.10 (markt)released 2011-03-08
-
Catalina
- - - - - - -
fix - CVE-2011-1088: Partial fix. Don't ignore @ServletSecurity - annotations. (markt) -
fix - 27988: Improve reporting of missing files. (markt) -
fix - 28852: Add URL encoding where missing to parameters in URLs - presented by Ant tasks to the Manager application. Based on a patch by - Stephane Bailliez. (markt) -
fix - Improve handling of SSL renegotiation by failing earlier when the - request body contains more bytes than maxSavePostSize. (markt) -
fix - Improve shut down speed by not renewing threads during shut down when - the ThreadLocalLeakPreventionListener is enabled. (markt) -
-
-
Coyote
- - -
add - 49284: Add SSL re-negotiation support to the HTTP NIO - connector and extend test cases to cover CLIENT-CERT authentication. - (fhanik/markt) -
-
-
Tomcat 7.0.9 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - -
add - 19444: Add an option to the JNDI realm to allow role searches - to be performed by the authenticated user. (markt) -
add - 21669: Add the ability to specify the roleBase for the JNDI - Realm as relative to the users DN. Based on a patch by Art W. (markt) -
add - 22405: Add a new Lifecycle listener, - org.apache.catalina.security.SecurityListener that prevents - Tomcat from starting insecurely. It requires that Tomcat is not started - as root and that a umask at least as restrictive as 0007 is used. This - new listener is not enabled by default. - (markt) -
fix - 48863: Better logging when specifying an invalid directory - for a class loader. Based on a patch by Ralf Hauser. (markt/kkolinko) -
fix - 48870: Refactor to remove use of parallel arrays. (markt) -
add - Enhance the RemoteIpFilter and RemoteIpValve so that the modified remote - address, remote host, protocol and server port may be used in an access - log if desired. (markt) -
fix - Restore access to Environments, Resources and ResourceLinks via JMX - which was lost in early 7.0.x re-factoring. (markt) -
update - Remove ServerLifecycleListener. This was already removed from server.xml - and with the Lifecycle re-factoring is no longer required. (markt) -
add - Add additional checks to ensure that sub-classes of - org.apache.catalina.util.LifecycleBase correctly implement - the expected state transitions. (markt) -
fix - 50189: Once the application has finished writing to the - response, prevent further reads from the request since this causes - various problems in the connectors which do not expect this. (markt) -
fix - 50700: Ensure that the override attribute of context - parameters is correctly followed. (markt) -
fix - 50721: Correctly handle URL decoding where the URL ends in - %nn. Patch provided by Christof Marti. (markt) -
add - 50737: Add additional information when an invalid WAR file is - detected. (markt) -
fix - 50748: Allow the content length header to be set up to the - point the response is committed when a writer is being used. (markt) -
fix - 50751: When authenticating with the JNDI Realm, only attempt - to read user attributes from the directory if attributes are required. - (markt) -
fix - 50752: Fix typo in debug message in deprecated Embedded - class. (markt) -
fix - 50789: Provide an option to enable ServletRequestListeners - for forwards as required by some CDI frameworks. (markt) -
fix - 50793: When processing Servlet 3.0 async requests, ensure - that the requestInitialized and requestDestroyed events are only fired - once per request at the correct times. (markt) -
fix - 50802: Ensure that - ServletContext.getResourcePaths() includes static resources - packaged in JAR files in its output. (markt) -
add - Web crawlers can trigger the creation of many thousands of sessions as - they crawl a site which may result in significant memory consumption. - The new Crawler Session Manager Valve ensures that crawlers are - associated with a single session - just like normal users - regardless - of whether or not they provide a session token with their requests. - (markt) -
fix - Don't attempt to start NamingResources for Contexts multiple times. - (markt) -
fix - 50826: Avoid IllegalArgumentException if an - embedded Tomcat instance that includes at least one Context is destroyed - without ever being started. (markt) -
fix - Ensure a web application is taken out of service if the web.xml file is - not valid. (kkolinko/markt) -
fix - Ensure Servlet 2.2 jspFile elements are correctly converted to use a - leading '/' if missing. (markt) -
fix - 50836: Better documentation of the meaning of - Lifecycle.isAvailable() and correct a couple of cases where - this could incorrectly return true. (markt) -
-
-
Coyote
- - - -
fix - 50780: Fix memory leak in APR implementation of AJP - connector introduced by the refactoring for 49884. (markt) -
fix - If server configuration errors and/or faulty applications caused the - ulimit for open files to be reached, the acceptor threads for all - connectors could enter a tight loop. This loop consumed CPU and also - logged an error message for every iteration of the loop which lead to - large log files being generated. The acceptors have been enhanced to - better handle this situation. (markt) -
-
-
Jasper
- - - - -
fix - 50720: Ensure that the use of non-ISO-8859-1 character sets - for web.xml does not trigger an error when Jasper parses the web.xml - file. (markt) -
fix - 50726: Ensure that the use of the genStringAsCharArray does - not result in String constants that are too long for valid Java code. - (markt) -
fix - 50790: Improve method resolution in EL expressions. (markt) -
-
-
Cluster
- - -
fix - 50771: Ensure HttpServletRequest#getAuthType() returns the - name of the authentication scheme if request has already been - authenticated. (kfujino) -
-
-
Web applications
- - -
fix - 50713: Remove roles command from the Manager application. - (markt) -
-
-
Tribes
- - -
fix - 50667 (r1068549): Allow RPC callers to get - confirmation when sending a reply. (fhanik) -
-
-
Other
- - -
fix - 50743: Cache CheckStyle results between builds to speed up - validation. Patch provided by Oliver. (markt) -
-
-
Tomcat 7.0.8 (markt)released 2011-02-05
-
Catalina
- - - - -
fix - Fix NPE in CoyoteAdapter when postParseRequest() call fails. (kkolinko) -
fix - 50709: Make ApplicationContextFacade non-final to - enable extension. (markt) -
fix - When running under a security manager, user requests may fail with a - security exception. (markt) -
-
-
Coyote
- - - -
fix - Reduce level of log message for invalid URL parameters from WARNING to - INFO. (markt) -
fix - Fix hanging Servlet 3 asynchronous requests when using the APR based AJP - connector. (markt) -
-
-
Other
- - -
fix - Align server.xml installed by the Windows installer with the one - bundled in zip/tar.gz files. The differences are LockOutRealm being - used and AccessLogValve being enabled by default. (kkolinko) -
-
-
Tomcat 7.0.7 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - -
fix - 18462: Don't merge stdout and - stderr internally so users retain the option to treat them - separately. (markt) -
add - 18797: Provide protection against null or zero - length names being provided for users, roles and groups in the - MemoryRealm and UserDatabaseRealm. (markt) -
update - Improve fix for 50205 to trigger an error earlier if invalid - configuration is used. (markt) -
add - Provide additional control over component class loaders, primarily for - use when embedding. (markt) -
fix - Fix NPE in RemoteAddrFilter, RemoteHostFilter. (kkolinko) -
fix - 49711: HttpServletRequest#getParts will work in a filter - or servlet without an @MultipartConfig annotation or - MultipartConfigElement if the new "allowCasualMultipartParsing" - context attribute is set to "true". (schultz) -
fix - 49978: Correct another instance where deployment incorrectly - failed if a directory in the work area already existed. (markt) -
fix - 50582: Refactor access logging so chunked encoding is not - forced for all requests if bytes sent is logged. (markt) -
fix - 50597: Don't instantiate a new instance of a Filter if - an instance was provided via the - ServletContext.addFilter(String, Filter) method. Patch - provided by Ismael Juma. (markt) -
fix - 50598: Correct URL for Manager text interface. (markt) -
fix - 50620: Stop exceptions that occur during - Session.endAccess() from preventing the normal completion - of Request.recycle(). (markt) -
fix - 50629: Make StandardContext.bindThread() and - StandardContext.unbindThread() protected to allow use by - sub-classes. (markt) -
update - Use getName() instead of logName() in error messages in StandardContext. - (kkolinko) -
fix - 50642: Move the sun.net.www.http.HttpClient - keep-alive thread memory leak protection from the - JreMemoryLeakPreventionListener to the WebappClassLoader since the - thread that triggers the memory leak is created on demand. (markt) -
fix - 50673: Improve Catalina shutdown when running as a service. - Do not call System.exit(). (kkolinko) -
fix - 50683: Ensure annotations are scanned when - unpackWARs is set to false in the Host - where a web application is deployed. (markt) -
fix - Improve HTTP specification compliance in support of - Accept-Language header. This protects from known exploit - of the Oracle JVM bug that triggers a DoS, CVE-2010-4476. (kkolinko) -
-
-
Coyote
- - - - - - - - - -
fix - Prevent possible thread exhaustion if a Comet timeout event takes a - while to complete. (markt) -
fix - Prvent multiple Comet END events if the CometServlet calls - event.close() during an END event. (markt) -
fix - 50325: When the JVM indicates support for RFC 5746, disable - Tomcat's allowUnsafeLegacyRenegotiation configuration - attribute and use the JVM configuration to control renegotiation. - (markt) -
fix - 50405: Fix occassional NPE when using NIO connector and - Comet. (markt) -
fix - Ensure correct recycling of NIO input filters when processing Comet - events. (markt) -
fix - 50627: Correct interaction of NIO socket and Poller when - processing Comet events. (markt) -
fix - Correct interaction of APR socket and Poller when processing Comet - events. (markt) -
fix - 50631: InternalNioInputBuffer should honor - maxHttpHeadSize. (kkolinko) -
-
-
Jasper
- - - - - - -
fix - Improve special case handling of - javax.servlet.jsp.el.ScopedAttributeELResolver in - javax.el.CompositeELResolver to handle sub-classes. (markt) -
update - 15688: Use fully-qualified class names in generated jsp files - to avoid naming conflicts with user imports. (markt) -
fix - 46819: Remove redundant object instantiations in - JspRuntimeLibrary. Patch provided by Anthony Whitford. (markt) -
update - Improve error message when EL identifiers are not valid Java identifiers - and use i18n for the error message. (markt) -
fix - 50680: Prevent an NPE when using tag files from an exploded - JAR file, e.g. from within an IDE. Patch provided by Larry Isaacs. - (markt) -
-
-
Cluster
- - - - - - - - -
fix - 50591: Fix NPE in ReplicationValve. (kkolinko) -
add - Internationalise the log messages for the FarmWarDeployer. (markt) -
fix - 50600: Prevent a ConcurrentModificationException - when removing a WAR file via the FarmWarDeployer. (markt) -
fix - Be consistent with locks on sessionCreationTiming, - sessionExpirationTiming in DeltaManager.resetStatistics(). (kkolinko) -
fix - 50648: Correctly set the interrupt status if a thread using - RpcChannel is interrupted waiting for a message reply. - Based on a patch by Olivier Costet. (markt) -
fix - 50646: Ensure larger Tribes messages are fully read. Patch - provided by Olivier Costet. (markt) -
fix - 50679: Update the FarmWarDeployer to support parallel - deployment. (markt) -
-
-
Web applications
- - - - - - - - -
fix - 22278: Add a commented out RemoteAddrValve that - limits access to the Manager and Host Manager applications to localhost. - Based on a patch by Yann Cébron. (markt) -
fix - Correct a handful of Javadoc warnings. (markt) -
add - Provide additional detail about how web application version order is - determined when using parallel deployment. (markt) -
fix - Correct the documentation for the recoveryCount count attribute of the - the default cluster membership. (markt) -
fix - 50441: Clarify when it is valid to set the docBase attribute - in a Context element. (markt) -
fix - 50526: Provide additional documetation on configuring - JavaMail resources. (markt) -
fix - 50599: Use correct names of roles required to access the - Manager application. (markt) -
-
-
Other
- - - - - - -
add - Extend the Checkstyle tests to check for license headers. (markt) -
fix - Modify the build script so a release build always rebuilds the - dependencies to ensure that the correct Tomcat version appears in the - manifest. (markt) -
fix - Code clean-up to remove unused code and reduce IDE warnings. (markt) -
fix - 50601: Code clean-up. Patch provided by sebb. (markt) -
fix - 50606: Improve CGIServlet: Provide support for specifying - empty value for the executable init-param. Provide support - for explicit additional arguments for the executable. Those were - broken when implementing fix for bug 49657. (kkolinko) -
-
-
Tomcat 7.0.6 (markt)released 2011-01-14
-
General
- - -
update - Update to Apache Commons Daemon 1.0.5. (mturk) -
-
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fix - 8705: org.apache.catalina.SessionListener now - extends java.util.EventListener. (markt) -
add - 10526: Add an option to the Authenticators to - force the creation of a session on authentication which may offer some - performance benefits. (markt) -
update - 10972: Improve error message if the className attribute is - missing on an element in server.xml where it is required. (markt) -
update - 48692: Provide option to parse - application/x-www-form-urlencoded PUT requests. (schultz) -
update - 48822: Include context name in case of error while stopping - or starting a context during its reload. Patch provided by Marc - Guillemot. (slaurent) -
add - 48837: Extend thread local memory leak detection to include - classes loaded by subordinate class loaders to the web - application's class loader such as the Jasper class loader. Based - on a patch by Sylvain Laurent. (markt) -
add - 48973: Avoid creating a SESSIONS.ser file when stopping an - application if there's no session. Patch provided by Marc Guillemot. - (slaurent) -
fix - 49000: No longer accept specification invalid name only - cookies by default. This behaviour can be restored using a system - property. (markt) -
add - 49159: Improve memory leak protection by renewing threads of - the pool when a web application is stopped. (slaurent) -
fix - 49372: Re-fix after connector re-factoring. If connector - initialisation fails (e.g. if a port is alreasy in use) do not trigger - an LifecycleException for an invalid state transition. - (markt) -
fix - 49543: Allow Tomcat to use shared data sources with per - application credentials. (fhanik) -
fix - 49650: Remove unnecessary entries package.access property - defined in catalina.properties. Patch provided by Owen Farrell. (markt) -
fix - 50106: Correct several MBean descriptors. Patch provided by - Eiji Takahashi. (markt) -
update - Further performance improvements to session ID generation. Remove legacy - configuration options that are no longer required. Provide additional - options to control the SecureRandom instances used to - generate session IDs. (markt) -
fix - 50201: Update the access log reference in - StandardEngine when the ROOT web application is redeployed, - started, stopped or defaultHost is changed. (markt/kkolinko) -
add - 50282: Load - javax.security.auth.login.Configuration with - JreMemoryLeakPreventionListener to avoid memory leak when - stopping a web application that would use JAAS. (slaurent) -
fix - 50351: Fix the regression that broke BeanFactory resources - caused by the previous fix for 50159. (markt) -
fix - 50352: Ensure that AsyncListener.onComplete() is - fired when AsyncContext.complete() is called. (markt) -
fix - 50358: Set the correct LifecycleState when stopping instances - of the deprecated Embedded class. (markt) -
fix - Further Lifecycle refactoring for Connectors and associated components. - (markt) -
fix - Correct handling of versioned web applications in deployer. (markt) -
fix - Correct removal of LifeCycleListeners from - Containers via JMX. (markt) -
fix - Don't use nulls to construct log messages. (markt) -
fix - Code clean-up. Replace use of inefficient constructors with more - efficient alternatives. (markt) -
fix - 50411: Ensure sessions are removed from the - Store associated with a PersistentManager. - (markt) -
fix - 50413: Ensure 304 responses are not returned when using - static files as error pages. (markt/kkolinko) -
fix - 50448: Fix possible IllegalStateException - caused by recent session management refactoring. (markt) -
fix - Ensure aliases settings for a context are retained after a context is - reloaded. (markt) -
fix - Log a warning if context.xml files define values for properties that do - not exist (e.g. if there is a typo in a property name). (markt) -
fix - 50453: Correctly handle multiple X-Forwarded-For - headers in the RemoteIpFilter and RemoteIpValve. Patch provided by Jim - Riggs. (markt) -
add - 50541: Add support for setting the size limit and time limit - for LDAP seaches when using the JNDI Realm with userSearch. - (markt) -
update - All configuration options that use regular expression now require a - single regular expression (using java.util.regex) rather - than a list of comma-separated or semi-colon-separated expressions. - (markt) -
fix - 50496: Bytes sent in the access log are now counted after - compression, chunking etc rather than before. (markt) -
fix - 50550: When a new directory is created (e.g. via WebDAV) - ensure that a subsequent request for that directory does not result in a - 404 response. (markt) -
fix - 50554: Code clean up. (markt) -
add - 50556: Improve JreMemoryLeakPreventionListener to prevent - a potential class loader leak caused by a thread spawned when the class - com.sun.jndi.ldap.LdapPoolManager is initialized and the - system property com.sun.jndi.ldap.connect.pool.timeout is - set to a value greater than 0. (slaurent) -
-
-
Coyote
- - - - - - -
fix - 47319: Return the client's IP address rather than null - for calls to getRemoteHost() when the APR connector is - used with enableLookups="true" but the IP address - is not resolveable. (markt) -
add - 50108: Add get/set methods for Connector property - minSpareThreads. Patch provided by Eiji Takahashi. (markt) -
fix - 50360: Provide an option to control when the socket - associated with a connector is bound. By default, the socket is bound on - Connector.init() and released on - Connector.destroy() as per the current behaviour but this - can be changed so that the socket is bound on - Connector.start() and released on - Connector.stop(). This fix also includes further Lifecycle - refactoring for Connectors and associated components. (markt) -
fix - Remove a huge memory leak in the NIO connector introduced by the fix - for 49884. (markt) -
fix - 50467: Protected against NPE triggered by a race condition - that causes the NIO poller to fail, preventing the processing of further - requests. (markt) -
-
-
Jasper
- - - - - -
add - 13731: Make variables in _jspService() method - final where possible. (markt) -
fix - 50408: Fix NoSuchMethodException when using - scoped variables with EL method invocation. (markt) -
fix - 50460: Avoid a memory leak caused by using a cached exception - instance in JspDocumentParser and - ProxyDirContext. (kkolinko) -
fix - 50500: Use correct coercions (as per the EL spec) for - arithmetic operations involving string values containing '.', - 'e' or 'E'. Based on a patch by Brian Weisleder. - (markt) -
-
-
Cluster
- - - - - -
add - 50185: Add additional trace level logging to Tribes to assist - with fault diagnosis. Based on a patch by Ariel. (markt) -
fix - Don't try and obtain session data from the cluster if the current - node is the only node in the cluster. Log requesting session data as - INFO rather than WARNING. (markt) -
fix - 50503: When web application has a version, Engine level - Clustering works correctly. (kfujino) -
fix - 50547: Add time stamp for CHANGE_SESSION_ID message and - SESSION_EXPIRED message. (kfujino) -
-
-
Web applications
- - - - - - - -
fix - 21157: Ensure cookies are written before the response is - commited in the Cookie example. Patch provided by Stefan Radzom. (markt) -
add - 50294: Add more information to documentation regarding format - of configuration files. Patch provided by Luke Meyer. (markt) -
fix - Correctly validate provided context path so sessions for the ROOT web - application can be viewed through the HTML Manager. (markt) -
update - Improve documentation of database connection factory. (rjung) -
fix - 50488: Update classpath required when using jsvc and add a - note regarding server VMs. (markt) -
fix - Further filtering of Manager display output. (kkolinko) -
-
-
Other
- - - - - -
fix - Don't configure Windows installer to use PID file since it is not - removed when the service stops which prevents the service from starting. - (markt) -
fix - 14416: Make TagLibraryInfo.getTag() more robust - at handling nulls. (markt) -
fix - 50552: Avoid NPE that hides error message when using Ant - tasks. (schultz) -
add - Provide two alternative locations for the libraries downloaded from - the ASF web site at build time. Use the main distribution site as - default and the archive one as fallback. (kkolinko) -
-
-
Tomcat 7.0.5 (markt)beta, 2010-12-01
-
General
- - -
update - Update to Apache Commons Daemon 1.0.4. (mturk) -
-
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - -
fix - 3839: Provide a mechanism to gracefully handle the case where - users book-mark the form login page or otherwise misuse the FORM - authentication process. Based on a suggestion by Mark Morris. (markt) -
fix - 49180: Add option to disable log rotation in - juli FileHandler. Patch provided by Pid (pidster at apache). (funkman) -
fix - 49991: Ensure servlet request listeners are fired for - the login and error pages during FORM authentication. (markt) -
fix - 50107: When removing a Host via JMX, do not attempt to - destroy the host's pipeline twice. Patch provided by Eiji - Takahashi. (markt) -
fix - 50138: Fix threading issues in - org.apache.catalina.security.SecurityUtil. (markt) -
fix - 50157: Ensure MapperListener is only added to a container - object once. (markt) -
fix - 50159: Add a new attribute for <Resource> - elements, singleton, that controls whether or not a new - object is created every time a JNDI lookup is performed to obtain the - resource. The default value is true, which will return the - same instance of the resource in every JNDI lookup. (markt) -
fix - 50168: Separate the Lifecycle.DESTROY_EVENT into - Lifecycle.BEFORE_DESTROY_EVENT and - Lifecycle.AFTER_DESTROY_EVENT. Use the additional state to - ensure that Context objects are only destroyed once. - (markt) -
fix - 50169: Ensure that when a Container is started that it - doesn't try and register with the mapper unless its parent has - already started. Patch provided by Eiji Takahashi. (markt) -
add - 50222: Modify memory leak prevention code so it pins the - system class loader in memory rather than than the common class loader, - which is better for embedded systems. Patch provided by Christopher - Schultz. (markt) -
add - Improve debug logging for MapperListener registration. (markt) -
add - Expose names of LifecycleListeners and ContainerListeners for - StandardContext via JMX. (markt) -
add - Add a new option, resourceOnlyServlets, to Context elements - that provides a mechanism for working around the issues caused by new - requirements for welcome file mapping introduced in Servlet 3.0. By - default, the existing Tomcat 6.0.x welcome file handling is used. - (markt) -
fix - Make Tomcat more tolerant of null when generating JMX names - for Valves. (markt) -
fix - Make AccessLogValve attribute enabled changeable via JMX. - (pero) -
fix - Correct infinite loop if ServletRequest.startAsync(ServletRequest, - ServletResponse) was called. (markt) -
fix - 50232: Remove dependency between StoreBase and - PersistentManager and associated code clean-up. Patch provided by - Tiago Batista. (markt) -
fix - 50252: Prevent ClassCastException when using a - <ResourceLink>. Patch provided by Eiji Takahashi. (markt) -
add - Reduce synchronization in session managers to improve performance of - session creation. (markt) -
fix - If starting children automatically when adding them to a container (e.g. - when adding a Context to a Host) don't lock the parent's set - of children whilst the new child is being started since this can block - other threads and cause issues such as lost cluster messages. (markt) -
add - Implement support for parallel deployment. This allows multiple versions - of the same web application to be deployed to the same context path at - the same time. Users without a current session will be mapped to the - latest version of the web application. Users with a current session will - continue to use the version of the web application with which the - session is associated until the session expires. (markt) -
fix - 50308: Allow asynchronous request processing to call - AsyncContext.dispatch() once the asynchronous request has - timed out. (markt) -
add - Make memory leak prevention code that clears ThreadLocal instances more - robust against objects with toString() methods that throw exceptions. - (markt) -
-
-
Coyote
- - - - -
fix - 49860: Complete support for handling trailing headers in - chunked HTTP requests. (markt) -
add - Impose a limit on the length of the trailing headers. The limit - is configurable with a system property and is 8192 - by default. (kkolinko) -
fix - 50207: Ensure Comet timeout events are triggered. This bug - was a regression triggered by the fix for 49884. (markt) -
-
-
Jasper
- - - - - - - - - - -
fix - 49297: Enforce the rules in the JSP specification for parsing - the attributes of custom and standard actions that require that - the attribute names are unique within an element and that there is - whitespace before the attribute name. The whitespace test can be - disabled by setting the system property - org.apache.jasper.compiler.Parser.STRICT_WHITESPACE to - false. Attributes of the page directive have slightly - different rules. The implementation of that part of the fix is based on - a patch by genspring. (markt) -
fix - 50105: When processing composite EL expressions use - Enum.name() rather than Enum.toString() as - required by the EL specification. (markt) -
fix - Fix minor thread-safety and performance issues in the implementation - of maxLoadedJsps. (rjung) -
add - Add support for unloading JSPs that have not been requested for a - long time using the new parameter jspIdleTimeout. (rjung) -
add - Add logging and JMX support to JSP unloading. (rjung) -
fix - 50192: Improve performance for EL when running under a - security manager. Based on a patch by Robert Goff. (markt) -
fix - 50228: Improve recycling of BodyContentImpl. - This avoids keeping a cached reference to a webapp-provided Writer - used in JspFragment.invoke() calls. (kkolinko) -
add - 50273: Provide a workaround for an HP-UX issue that can - result in large numbers of SEVERE log messages appearing in the logs as - a result of normal operation. (markt) -
fix - 50293: Increase the size of internal ELResolver array from 2 - to 8 since in typical usage there are at least 5 resolvers. Based on a - patch by Robert Goff. (markt) -
-
-
Cluster
- - - - - - -
fix - Add support for maxActiveSessions attribute to BackupManager. (kfujino) -
fix - Improve sending an access message in DeltaManager. - maxInactiveInterval of not Manager but the session is used. - If maxInactiveInterval is negative, an access message is not sending. - (kfujino) -
fix - 50183: BIO sender was not scheduling tasks to the executor - during normal operation. Patch provided by Ariel. (markt) -
fix - 50184: Add an option to the RpcChannel to enable the Channel - send options to be set for the reply message. Based on a patch by Ariel. - (markt) -
fix - Ensure that a new Context waiting for session data from other nodes in - the cluster does not block the processing of clustering messages for - other Contexts. (markt) -
-
-
Web applications
- - - - - - - - - - - - - - - - -
fix - 49426: Localize messages in the Manager application based on - the Locale of the user rather than the default Locale of the server. - (markt) -
fix - Localize messages in the Host Manager application based on the Locale of - the user rather than the default Locale of the server. (markt) -
add - 50242: Provide a sample log4j configuration that more - closely matches the default JULI configuration. Patch provided by - Christopher Schultz. (markt) -
add - Restore the ability to edit the contents of /WEB-INF and /META-INF via - WebDAV via the provision of a new configuration option, - allowSpecialPaths. (markt) -
fix - Correct broken links for on-line JavaDocs. (markt) -
fix - 50230: Add new DistributedManager interface that is - implemented by the Backup Manager to remove circular dependency between - tomcat-catalina-ha and tomcat-catalina modules. Also allows third-party - distributed Manager implementations to report full session information - through the HTML Manager. (markt) -
update - Improve Tomcat Logging documentation. (kkolinko) -
fix - 50303: Update JNDI how-to to reflect the new JavaMail - download location and that JAF is now included in Java SE 6. (markt) -
fix - Fix ordering functionality on sessions page for the HTML Manager - application. (markt) -
fix - Fix primary sessions not always being treated as such in the HTML - Manager application. (markt) -
fix - Fix message not being displayed after session attribute removal in the - HTML Manager application. (markt) -
fix - 50310: Fix display of Servlet information in the Manager - application. (markt) -
fix - CVE-2010-4172: Multiple XSS in the Manager application. (markt/kkolinko) -
fix - 50316: Fix display of negative values in the Manager - application. (kkolinko) -
fix - 50318: Avoid NPE when trying to view session detail for an - expired session in the Manager application. (markt) -
-
-
Other
- - - - - - - - - - - - - -
fix - Correct a handful of Javadoc warnings. (markt) -
fix - 22965: Fix some typos and formatting issues in the global - web.xml file. Based on a patch by Yann Cébron. (markt) -
add - Extend Checkstyle validation checks to check for unused imports. (markt) -
fix - General code clean-up to reduce (not eliminate) the number of warnings - reported by IDEs. (markt) -
fix - 50140: Don't ignore a user specified installation - directory when performing a silent install with the Windows installer on - 64-bit platforms. (markt) -
update - Reimplemented Windows installer dialogs, using modern libraries - (nsDialogs, MUI2). (kkolinko) -
add - When installing with the Windows installer on 64-bit platforms, allow - the user to select either a 32-bit JDK or a 64-bit JDK. If a 32-bit JDK - is selected, the 32-bit service wrapper and the 32-bit native DLL will - be installed. If a 64-bit JDK is selected, the 64-bit service wrapper - and the 64-bit native DLL will be installed. (markt/kkolinko) -
add - Create Windows shortcuts for the Manager and Host Manager webapps. - (kkolinko) -
add - Support /? command line option in the Windows Installer. (kkolinko) -
add - Display and allow to change roles for the Tomcat admin user in the - Windows installer. (kkolinko) -
fix - In the Windows installer: do not leave stale server.xml - and tomcat-users.xml fragments in the $TEMP folder. - (kkolinko) -
update - 49819: Redesign of home page by Pid (pidster at apache). - (timw) -
-
-
Tomcat 7.0.4 (markt)beta, 2010-10-21
-
Catalina
- - - - - - - - - - - - - - - - - - - - -
fix - 49428: Re-implement the fix for bug 49428 – - namespace issues for some Microsoft WebDAV clients. (kkolinko) -
fix - 49669: Fix memory leak triggered by using the deprecated - javax.security.auth.Policy class. (markt) -
fix - 49922: Don't add filter twice to filter chain if the - filter matches more than one URL pattern and/or Servlet name. Patch - provided by heyoulin. (markt) -
fix - 49937: Use an InstanceManager when creating an AsyncListener - through the AsyncContext to ensure annotations are processed. Based on a - patch by David Jencks. (markt) -
fix - To avoid NoSuchMethodException, xmlValidation and xmlNamespaceAware are - removed from the createStandardHost definition - of mbeans-descriptors.xml. (kfujino) -
fix - 49945: Continue improvements to JMX. Fix a handful of - attributes that were showing as Unavailable in JConsole. Patch provided - by Chamith Buddhika. (markt) -
fix - 49952: Allow ServletContainerInitializers to add listeners to - a web application. Patch provided by David Jencks. (markt) -
fix - 49956: Handle case when @Resource annotation uses the full - JNDI name for a resource. Based on a patch by Gurkan Erdogdu. (markt) -
fix - 49557: Correct regression due to Lifecycle refactoring that - cleared all work directories (with compiled JSPs and persisted sessions) - when Tomcat was stopped. (markt) -
fix - 49978: Correctly handle the case when a directory expected - to be created during web application start is already present. Rather - than throwing an exception and failing to start, allow the web - application to start normally. (markt) -
fix - 49987: Fix thread safety issue with population of servlet - context initialization parameters. (markt) -
fix - 49994: As per the Java EE 6 specification, return a new - object instance for each JNDI look up of a resource reference. (markt) -
fix - 50015: Re-factor dynamic servlet security implementation to - make extensions, such as JACC implementations, simpler. Patch provided - by David Jencks. (markt) -
fix - 50016: Re-factor isUserInRole() and - login()/logout() methods to support JACC implementations - and to improve encapsulation. Patch provided by David Jencks. (markt) -
update - 50017: Code clean-up. No functional change. Patch provided by - sebb. (markt) -
fix - 50027: Avoid NPE on start when a Context is defined in - server.xml with one or more JNDI resources. (markt) -
fix - 50059: JARs should always be searched for static resources - even if the web application is marked as meta-data complete. (markt) -
fix - 50063: Correct regression in fix for 50059 that - causes applications marked as meta-data complete to return 404s for all - requests. Patch provided by heyoulin. (markt) -
fix - 50087: Catch ClassFormatErrors when scanning for annotations. - (markt) -
-
-
Coyote
- - - - - - - -
fix - 49923: Avoid using negative timeouts during acceptor unlock - to ensure APR connector shuts down properly. (mturk) -
fix - 49972: Fix potential thread safe issue when formatting dates - for use in HTTP headers. (markt) -
fix - 50003: Set not maxThreads but minSpareThreads to - corePoolSize, if AbstractEndpoint.setMinSpareThreads is called. - (kfujino) -
fix - 50044: Fix issue when using comet where socket remained in - long poll after the comet request has ended. (markt) -
fix - 50054: Correctly handle the setting of minSpareThreads in - AJP connector. (kfujino) -
fix - 50072: Fix issues when using a non-blocking read for the - request line with the NIO connector that could result in the request - line being mis-read. (markt) -
-
-
Jasper
- - - - - - - - -
fix - 49986: Fix thread safety issue for JSP reload. (timw) -
fix - 49998: Make jsp:root detection work with single quoted - attributes as well. (timw) -
fix - Correctly handle the setting of primitive bean values via expression - language. (markt) -
fix - Don't swallow exceptions when processing TLD files and handle the - case when there is no web.xml file. (markt) -
fix - 50066: Fix building of recursive tag files when the file - depends on a JAR file. Patch provided by Sylvain Laurent. (markt) -
fix - 50078: Fix threading problem in EL caches. Patch provided by - Takayoshi Kimura. (markt) -
add - Make EL cache sizes configurable. (markt) -
-
-
Web applications
- - -
fix - Apply filters to default home page so copyright year is correctly - displayed. (markt) -
-
-
Other
- - - -
update - 48716: Do not call reset if the default LogManager is in use. - (markt) -
fix - 50013: Correctly package classes from - org.apache.tomcat.util.file and add the tomcat-util.jar to - the class path for the Ant tasks. Based on a patch provided by - Sylvain Laurent. (markt) -
-
-
Tomcat 7.0.3 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fix - 48644: Review all instances of catching Throwable and - re-throw where appropriate. (markt) -
update - Allow glob patterns in the jarsToSkip configuration and add - some debug logging to the jar scanner. (rjung) -
fix - 48738: Workaround a couple of long standing JDK bugs to - enable GZIP compressed output streams to be flushed. Based on a patch - provided by Jiong Wang. (markt) -
update - 48967: Replace strings "catalina.base" and "catalina.home" - by globally defined constants. Patch provided by Marc Guillemot. (rjung) -
fix - 49195: Don't report an error when shutting down a Windows - service for a Tomcat instance that has a disabled shutdown port. (markt) -
fix - 49209: Prevent possible AccessControlException during - undeployment when running with a security manager. Patch provided by - Sylvain Laurent. (markt) -
fix - 49657: Handle CGI executables with spaces in the path. - (markt) -
fix - 49667: Ensure that using the JDBC driver memory leak - prevention code does not cause a one of the memory leaks it is meant to - avoid. (markt) -
fix - 49670: Restore SSO functionality that was broken by Lifecycle - refactoring. (markt) -
fix - 49698: Allow a listener to complete an asynchronous request - if it times out. (markt) -
fix - 49714: The annotation process of Jar doesn't influence - distributable element of web.xml. (kfujino) -
fix - 49721: Alls JAR in a web application should be searched for - resources, not just those with a web-fragment.xml that is going to be - processed. (markt) -
fix - 49728: Improve PID file handling when another process is - managing the PID file and Tomcat does not have write access. (markt) -
fix - 49730: Fix a race condition in StandardThreadExector that can - cause requests to experience large delays. Patch provided by Sylvain - Laurent. (markt) -
fix - 49749: Single sign on cookies should have httpOnly flag set - using same rules as session cookies. (markt) -
fix - 49750: Align WebappClassLoader.validate() - implementation with Javadoc and ensure that javax.servlet.* - classes can not be loaded by a WebappClassLoader instance. - Patch provided by pid. (markt) -
fix - 49757: Correct some generics warnings. Based on a patch - provided by Gábor. (markt) -
fix - 49779: Improve handling of POST requests and FORM - authentication, particularly when the user agent responds to the 302 - response by repeating the POST request including a request body. Any - request body provided at this point is now swallowed. (markt) -
fix - CSRF prevention filter did not correctly handle URLs that used anchors. - (markt) -
fix - Fix memory leak on web application stopped caused by failed to - de-register the web application's Servlets with the MBean server. - (markt) -
update - More tweaks to the Lifecycle refactoring to ensure that when a component - is being destroyed, the destroy method is only called once on each - child component. (markt) -
fix - Keep the MBean names for web applications consistent between Tomcat 6 - and Tomcat 7. (markt) -
fix - 49856: Add an executorName attribute to Connectors so it is - possible to trace ThreadPool to Connector to Executor via the JMX - interface. (markt) -
fix - 49865: Tomcat failed to start if catalina.properties was not - present. (markt) -
fix - 49876: Fix the generics warnings in the copied Apache Jakarta - BCEL code. Based on a patch by Gábor. (markt) -
fix - 49883: Ensure that the CombinedRealm and LockOutRealm return - a name for use in log messages rather than throwing an - UnsupportedOperationException. (markt) -
fix - 49884: Fix occassional NullPointerException on async - complete(). This resulted in a major refactoring of the async - implementation to address a number of threading issues. (markt) -
fix - Update the version numbers in ServerInfo defaults to Tomcat 7.0.x. - (markt) -
fix - 49892: Correct JNDI name for method resource injections. - Based on a patch by Gurkan Erdogdu. (markt) -
fix - Ensure that Context elements defined in server.xml use any configClass - setting specified in the parent Host element. (markt) -
fix - GSOC 2010. Enable the creation of Services, Engines, Connectors, Hosts - and Contexts via JMX from a minimal server.xml that contains only a - Server element. Based on a patch by Chamith Buddhika. (markt) -
fix - 49909: Fix a regression introduced with the fix for - 47950 that prevented JSTL classes being loaded. (markt) -
fix - 49915: Make error more obvious, particularly when accessed - via JConsole, if StandardServer.storeConfig() is called when there is - no StoreConfig implementation present. (markt) -
fix - 50018: Fix some minor Javadoc errors in Jasper source. - Based on a patch by sebb. (timw) -
fix - 50021: Correct a regression in the fix for 46844 - that may have caused additional problems during a failure at start up. - (markt) -
fix - 50026: Prevent serving of resources from WEB-INF and - META-INF directories when DefaultServlet or WebdavServlet is mapped - to a sub-path of the context. This changes DefaultServlet to always - serve resources with paths relative to the root of the context - regardless of where it is mapped, which is a breaking change for - current servlet-mappings that map the default servlet to a subpath. - (timw) -
fix - 50689: Provide 100 Continue responses at appropriate points - during FORM authentication if client indicates that they are expected. - (markt) -
-
-
Coyote
- - - - - - - - - - - -
update - Wait for the connectors to exit before closing them down. (mturk) -
add - Follow up to 48545. Make JSSE connectors more tolerant of a - incorrect trust store password. (markt) -
fix - Fix some edge cases in the NIO connector when handling requests that are - not received all at the same time and the socket needs to be returned to - the poller. (markt) -
update - Further work to reduce the code duplication in the HTTP connectors. - (markt) -
fix - Make sure acceptor threads are stopped when the connector is stopped. - (markt) -
fix - Make sure async timeout thread is stopped when the connector is stopped. - (markt) -
fix - 49625: Ensure Vary header is set if response may be - compressed rather than only setting it if it is compressed. (markt) -
fix - 49802: Re-factor connector pause, stop and destroy methods so - that calling any of those methods has the expected results. (markt) -
update - Various refactorings to reduce code duplication and unnecessary code in - the connectors. (markt) -
fix - 49860: Add partial support for trailing headers in chunked - HTTP requests. (markt) -
-
-
Jasper
- - - - - - -
fix - 49665: Provide better information including JSP file name and - location when a missing file is detected during TLD handling. Patch - provided by Ted Leung. (markt) -
fix - 49726: Specifying a default content type via a JSP property - group should not prevent a page from setting some other content type. - (markt) -
fix - 49799: The new omit attribute for - jsp:attribute elements now supports the use of expressions - and expression language. (markt) -
fix - 49916: Switch to using an initialisation parameter to pass - JSP file information from Catalina to Jasper. This simplifies the - Catalina code as well as making it easier for Geronimo and others to - integrate Jasper. Patch provided by David Jencks. (markt) -
fix - 49985: Fix thread safety issue in EL parser. (markt) -
-
-
Cluster
- - - - - - - -
fix - Remove domainReplication attribute from ClusterManager. - If you send session to only same domain, use DomainFilterInterceptor. - (kfujino) -
fix - Add Null check when CHANGE_SESSION_ID message received. (kfujino) -
fix - Add support for LAST_ACCESS_AT_START system property to DeltaSession. - (kfujino) -
fix - Avoid a NPE in the DeltaManager when a parallel request invalidates the - session before the current request has a chance to send the replication - message. (markt) -
fix - 49905: Prevent memory leak when using asynchronous session - replication. (markt) -
fix - 49924: When non-primary node changes into a primary node, - make sure isPrimarySession is changed to true. (kfujino) -
-
-
Web applications
- - - - - -
fix - Correct the class name of the default JAR scanner in the documentation - web application. (rjung) -
fix - 49585: Update JSVC documentation to reflect new packaging - of Commons Daemon. (markt) -
update - Update the Servlet, JSP and EL Javadoc links to link to the - specifications and the relevant part of the Java EE 6 Javadoc. (markt) -
fix - Update a few places in the docs where the Manager documentation referred - to the old role name of manager rather than than the new manager-script. - (markt) -
-
-
Extras
- - -
fix - 49861: Don't log RMI ports formatted with commas for the - JMX remote listener. (markt) -
-
-
Other
- - - - - - - -
fix - Correct the user names created by the Windows installer for the Manager - and Host Manager applications. (mturk) -
fix - Correct the Eclipse compiler dependency in the Jasper POM. (markt) -
add - Extend Checkstyle validation checks to check import order. (markt) -
fix - 49758: Fix generics warnings exposed by a fix in Eclipse 3.6. - Patch provided by sebb. (markt) -
update - Update Apache Commons Pool to 1.5.5. (markt) -
update - 49955: Improvement and correction of Building Tomcat guide. - Based on a patch from Wesley Acheson. (timw) -
-
-
Tomcat 7.0.2 (markt)beta, 2010-08-11
-
Catalina
- - -
fix - Fix regression that prevented running with a security manager enabled. - (markt) -
-
-
Web applications
- - - - -
fix - Correct Javadoc errors. (markt) -
add - Provide Javadoc for Servlet 3.0 API, JSP 2.2 API and EL 2.2 API. - (markt) -
fix - Remove second copy of RUNNING.txt from the full-docs distribution. Some - unpacking utilities can't handle multiple copies of a file with the same - name in a directory. (markt) -
-
-
Other
- - - - -
add - Extend Checkstyle validation checks to check for tabs in nearly all text - files. (markt) -
update - Update Apache Commons Daemon from 1.0.2 to 1.0.3. (markt) -
update - Update Eclipse JDT Core Batch Compiler (ecj.jar) from 3.5.1 to 3.6. - (markt) -
-
-
Tomcat 7.0.1 (markt)not released
-
Catalina
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fix - GSOC 2010. Continue work to align MBean descriptors with reality. Patch - provided by Chamith Buddhika. (markt) -
fix - When running under a security manager, enforce package access and - package definition restrictions defined in the catalina.properties file. - (markt) -
fix - When using a Loader configured with - searchExternalFirst="true" failure to find the - class in an external repository should not prevent searching of the - local repositories. (markt) -
add - Add entryPoint support to the CSRF prevention filter. (markt) -
fix - 48297: Correctly initialise handler chain for web services - resources. (markt) -
add - 48960: Add a new option to the SSI Servlet and SSI Filter to - allow the disabling of the exec command. This is now - disabled by default. Based on a patch by Yair Lenga. (markt) -
add - 48998, 49617: Add the ExpiresFilter, a port of the - httpd mod_expires module. Patch provided by Cyrille Le Clerc. (markt) -
fix - 49030: When initializing/starting/stopping connectors and - one of them fails, do not ignore the others. (markt/kkolinko) -
fix - 49128: Don't swallow exceptions unnecessarily in - WebappClassLoader.start(). (markt) -
fix - 49182: Align comments in setclasspath.[sh|bat] with - behaviour. Based on a patch provided by sebb. (markt) -
fix - 49230: Enhance JRE leak prevention listener with protection - for the keep-alive thread started by - sun.net.www.http.HttpClient. Based on a patch provided by - Rob Kooper. (markt) -
fix - 49414: When reporting threads that may have triggered a - memory leak on web application stop, attempt to differentiate between - request processing threads and threads started by the application. - (markt) -
fix - 49428: Add a work-around for the known namespace issues for - some Microsoft WebDAV clients. Patch provided by Panagiotis Astithas. - (markt) -
add - Add support for *.jar pattern in VirtualWebappLoader. - (kkolinko) -
add - Use a LockOutRealm in the default configuration to prevent attempts to - guess user passwords by brute-force. (markt) -
add - 49478: Add support for user specified character sets to the - AddDefaultCharsetFilter. Based on a patch by Felix - Schumacher. (markt) -
fix - 49503: Make sure connectors bind to their associated ports - sufficiently early to allow jsvc and the - org.apache.catalina.startup.EXIT_ON_INIT_FAILURE system property to - operate correctly. (markt) -
fix - 49525: Ensure cookies for the ROOT context have a path of / - rather than an empty string. (markt) -
fix - 49528, 49567: Ensure that - AsyncContext.isAsyncStarted() returns the correct value - after AsyncContext.start() and that if - AsyncContext.complete() is called on a separate thread that - it is handled correctly. (markt) -
fix - 49530: Contexts and Servlets not stopped when Tomcat is shut - down. (markt) -
fix - 49536: If no ROOT context is deployed, ensure a 404 rather - than a 200 is returned for requests that don't map to any other context. - (markt) -
add - Additional debug logging in StandardContext to provide information on - Manager selection. (markt) -
fix - 49550: Supress deprecation warning where deprecated code is - required to be used. No functional change. Patch provided by Sebb. - (markt) -
fix - 49551: Allow default context.xml location to be specified - using an absolute path. (markt) -
add - Improve logging of unhandled exceptions in servlets by including the - path of the context where the error occurred. (markt) -
add - Include session ID in error message logged when trying to set an - attribute on an invalid session. (markt) -
fix - Improve the CSRF protection filter by using SecureRandom rather than - Random to generate nonces. Also make the implementation class used user - configurable. (markt) -
fix - Avoid NullPointerException, when copyXML=true and META-INF/context.xml - does not exist. (kfujino) -
fix - 49598: When session is changed and the session cookie is - replaced, ensure that the new Set-Cookie header overwrites the old - Set-Cookie header. (markt) -
fix - Create a thread to trigger asynchronous timeouts when using the BIO - connector, change the default timeout to 10s (was infinite) and make the - default timeout configurable using the asyncTimeout - attribute on the connector. (pero/markt) -
fix - 49600: Make exceptions returned by the - ProxyDirContext consistent for resources that weren't found - by checking the DirContext or the cache. Test case based on - a patch provided by Marc Guillemot. (markt) -
fix - 49613: Improve performance when using SSL for applications - that make multiple class to Request.getAttributeNames(). - Patch provided by Sampo Savolainen. (markt) -
fix - Handle the edge cases where resources packaged in JARs have names that - start with a single quote character or a double quote character. (markt) -
fix - Correct copy and paste typo in web.xml parsing rules that mixed up - local-ejb-ref and resource-env-ref. (markt) -
update - Refactor session managers to remove unused code and to reduce code - duplication. Also, all session managers used for session replication now - extend org.apache.catalina.ha.session.ClusterManagerBase. - (markt) -
-
-
Jasper
- - - - - - - -
update - Remove references to Jikes since it does not support Java 6. (markt) -
fix - Correct over zealous type checking for EL in attributes that broke the - use of JSF converters. (markt) -
fix - Correct algorithm used to identify correct method to use when a - MethodExpressions is used in EL. (markt) -
fix - 49217: Ensure that identifiers used in EL meet the - requirements of the Java Language Specification. (markt) -
add - Improve logging of JSP exceptions by including JSP snippet (if enabled) - rather than just the root cause in the host log. (markt) -
fix - 49555: Correctly handled Tag Libraries where functions are - defined in static inner classes. (markt) -
-
-
Cluster
- - - - -
fix - 49127: Don't swallow exceptions unnecessarily in - SimpleTcpReplicationManager.startInternal(). (markt) -
fix - 49407: Change the BackupManager so it is consistent with - DeltaManager and reports both primary and backup sessions when active - sessions are requested. (markt) -
fix - 49445: When session ID is changed after authentication, - ensure the DeltaManager replicates the change in ID to the other nodes - in the cluster. (kfujino) -
-
-
Web applications
- - - - - - - - - - - - - -
fix - 49112: Update the ROOT web application's index page. Patch - provided by pid. (markt) -
fix - 49213: Add the permissions necessary to enable the Manager - application to operate currently when running with a security manager. - (markt) -
fix - 49436: Correct documented default for readonly attribute of - the UserDatabase component. (markt) -
fix - 49475: Use new role name for manager application access on - the ROOT web application's index page. (markt) -
fix - 49476: CSRF protection was preventing access to the session - expiration features. Also switch the manager application to the generic - CSRF protection filter. (markt) -
fix - Better handle failure to create directories required for new hosts in - the Host Manager application. (markt) -
fix - Switch the Host Manager application to the generic CSRF protection for - the HTML interface and prevent started hosts from being started and - stopped hosts from being stopped. (markt) -
fix - 49518: Fix typo in extras documentation. (markt) -
fix - 49522: Fix regression due to change of name for MBeans for - naming resources that broke the complete server status page in the - manager application. Note these MBeans now have a new name. (markt) -
fix - 49570: When using the example compression filter, set the - Vary header on compressed responses. (markt) -
add - Add redirects for the root of the manager and host-manager web - applications that redirect users to the html interface rather than - returning a 404. (markt) -
add - Provide the HTML Manager application with the ability to differentiate - between primary, backup and proxy sessions. Note that proxy sessions are - only shown if enabled in web.xml. (markt) -
-
-
Other
- - - - - - - -
fix - 49130: Better describe the core package in the Windows - installer, making it clear that the service will be installed. Patch - provided by sebb. (markt) -
add - Re-factor unit tests to enable them to be run once with each of the HTTP - connector implementations (BIO, NIO and APR/native). (markt) -
add - 49268: Add the necessary plumbing to include CheckStyle in - the build process. Start with no checks. Additional checks will be - added as they are agreed. (markt) -
update - Updated to Ant 1.8.1. The build now requires a minimum of Ant 1.8.x. - (markt) -
update - Update the re-packaged version of commons-fileupload from 1.2.1 to - 1.2.2. The layout of re-packaged version was also restored to the - original commons-fileupload layout to make merging of future updates - easier. (markt) -
update - Update the re-packaged version of Jakarta BCEL from trunk revision - 880760 to trunk revision 978831. (markt) -
-
-
Tomcat 7.0.0 (markt)beta, 2010-06-29
-
Catalina
- - - - - - - - - - - - - - - - - - - -
update - Update Servlet support to the Servlet 3.0 specification. (all) -
update - Improve and document VirtualWebappLoader. (rjung) -
add - 43642: Add prestartminSpareThreads attribute for Executor. - (jfclere) -
update - Switch from AnnotationProcessor to InstanceManager. Patch provided by - David Jecks with modifications by Remy. (remm/fhanik) -
update - r620845 and r669119. Make shutdown address - configurable. (jfclere) -
fix - r651977 Add some missing control checks to - ThreadWithAttributes. (markt) -
add - r677640 Add a startup class that does not require any - configuration files. (costin) -
fix - r700532 Log if temporary file operations within the CGI - servlet fail. Make sure header Reader is closed on failure. (markt) -
fix - r708541 Delete references to DefaultContext which was removed - in 6.0.x. (markt) -
add - r709018 Initial implementation of an asynchronous file handler - for JULI. (fhanik) -
fix - Give session thisAccessedTime and lastAccessedTime clear semantics. - (rjung) -
add - Expose thisAccessedTime via Session interface. (rjung) -
add - Provide a log format for JULI that provides the same information as the - default but on a single line. (markt) -
add - r723889 Provide the ability to configure the Executor job - queue size and a timeout for adding jobs to the queue. (fhanik) -
add - Add support for aliases to StandardContext. This allows content from - other directories and/or WAR files to be mapped to paths within the - context. (markt) -
update - Provide clearer definition of Lifecycle interface, particularly start - and stop, and align components that implement Lifecycle with this - definition. (markt) -
add - 48662: Provide a new option to control the copying of context - XML descriptors from web applications to the host's xmlBase. Copying of - XML descriptors is now disabled by default. (markt) -
fix - Move comet classes from the org.apache.catalina package to the - org.apache.catalina.comet package to allow comet to work under a - security manager. (markt) -
-
-
Coyote
- - - - - - - - - -
update - Port SSLInsecureRenegotiation from mod_ssl. This requires - to use tomcat-native 1.2.21 that have option to detect this - support from OpenSSL library. (mturk) -
update - Allow bigger AJP packets also for request bodies and responses - using the packetSize attribute of the Connector. (rjung) -
updater703017 Make Java socket options consistent between NIO - and JIO connector. Expose all the socket options available on - java.net.Socket (fhanik) -
fix - 46051: The writer returned by getWriter() now - conforms to the PrintWriter specification and uses platform - dependent line endings rather than always using \r\n. - (markt) -
update - Use tc-native 1.2.x which is based on APR 1.3.3+ (mturk) -
update - r724239 NIO connector now always uses an Executor. (fhanik) -
update - r724393 Implement keepAliveCount for NIO connector in a thread - safe manner. (fhanik) -
update - r724849 Implement keep alive timeout for NIO connector. - (fhanik) -
-
-
Jasper
- - - - - - -
update - Update JSP support to the JSP 2.2 specification. (markt) -
update - Update EL support to the EL 2.2 specification. (markt) -
update - r787978 Use "1.6" as the default value for compilerSourceVM - and compilerTargetVM options of Jasper. (kkolinko) -
add - 48358: Add support for limiting the number of JSPs that are - loaded at any one time. Based on a patch by Isabel Drost. (markt) -
add - 48689: Access TLD files through a new JarResource interface - to make extending Jasper simpler, particularly in OSGi environments. - Patch provided by Jarek Gawor. (markt) -
-
-
High Availability
- - - - - - - - -
add - Add support for UDP and secure communication to tribes. (fhanik) -
add - Add versioning to the tribes communication protocol to support future - developments. (fhanik) -
add - Add a demo on how to use the payload. (fhanik) -
add - Started to add JMX support to the cluster implementation. (markt) -
fix - r609778 Minor fixes to the throughput interceptor and the - NIO receiver. (fhanik) -
fix - r630234 Additional checks for the NIO receiver. (fhanik) -
update - r671650 Improve error message when multicast is not enabled. - (fhanik) -
-
-
Web applications
- - - - - -
update - r631321 Update changelog to support the <rev> element - in the documentation. (fhanik) -
add - A number of additional roles were added to the Manager and Host Manager - applications to separate out permissions for the HTML interface, the - text interface and the JMX proxy. (markt) -
add - CSRF protection was added to the Manager and Host Manager applications. - (markt) -
add - List array elements in the JMX proxy output of the Manager application. - (rjung) -
-
-
Extras
- - -
add - A new JmxRemoteLifecycleListener that can be used to fix the ports used - for remote JMX connections, eg when using JConsole. (markt) -
-
-
Other
- - - - -
fix - Numerous code clean-up changes including the use of generics and - removing unused imports, fields, parameters and methods. (markt) -
fix - All deprecated internal code has been removed. Warning: If you - have custom components for a previous Tomcat version that extend - internal Tomcat classes and override deprecated methods it is highly - likely that they will no longer work. (markt) -
update - Parameterize version number throughout build scripts and source. (rjung) -
-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/class-loader-howto.html b/bundledApps/tomcat/webapps/docs/class-loader-howto.html deleted file mode 100755 index 0a95f5af..00000000 --- a/bundledApps/tomcat/webapps/docs/class-loader-howto.html +++ /dev/null @@ -1,206 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Class Loader HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Class Loader HOW-TO

Table of Contents
- -
Overview
- -

Like many server applications, Tomcat installs a variety of class loaders -(that is, classes that implement java.lang.ClassLoader) to allow -different portions of the container, and the web applications running on the -container, to have access to different repositories of available classes and -resources. This mechanism is used to provide the functionality defined in the -Servlet Specification, version 2.4 — in particular, Sections 9.4 -and 9.6.

- -

In a Java environment, class loaders are -arranged in a parent-child tree. Normally, when a class loader is asked to -load a particular class or resource, it delegates the request to a parent -class loader first, and then looks in its own repositories only if the parent -class loader(s) cannot find the requested class or resource. Note, that the -model for web application class loaders differs slightly from this, -as discussed below, but the main principles are the same.

- -

When Tomcat is started, it creates a set of class loaders that are -organized into the following parent-child relationships, where the parent -class loader is above the child class loader:

- -
-      Bootstrap
-          |
-       System
-          |
-       Common
-       /     \
-  Webapp1   Webapp2 ...
-
- -

The characteristics of each of these class loaders, including the source -of classes and resources that they make visible, are discussed in detail in -the following section.

- -
Class Loader Definitions
- -

As indicated in the diagram above, Tomcat creates the following class -loaders as it is initialized:

-
    -
  • Bootstrap — This class loader contains the basic - runtime classes provided by the Java Virtual Machine, plus any classes from - JAR files present in the System Extensions directory - ($JAVA_HOME/jre/lib/ext). Note: some JVMs may - implement this as more than one class loader, or it may not be visible - (as a class loader) at all.

  • -
  • System — This class loader is normally initialized - from the contents of the CLASSPATH environment variable. All - such classes are visible to both Tomcat internal classes, and to web - applications. However, the standard Tomcat startup scripts - ($CATALINA_HOME/bin/catalina.sh or - %CATALINA_HOME%\bin\catalina.bat) totally ignore the contents - of the CLASSPATH environment variable itself, and instead - build the System class loader from the following repositories: -

    -
      -
    • $CATALINA_HOME/bin/bootstrap.jar — Contains the - main() method that is used to initialize the Tomcat server, and the - class loader implementation classes it depends on.

    • -
    • $CATALINA_BASE/bin/tomcat-juli.jar or - $CATALINA_HOME/bin/tomcat-juli.jar — Logging - implementation classes. These include enhancement classes to - java.util.logging API, known as Tomcat JULI, - and a package-renamed copy of Apache Commons Logging library - used internally by Tomcat. - See logging documentation for more - details.

      -

      If tomcat-juli.jar is present in - $CATALINA_BASE/bin, it is used instead of the one in - $CATALINA_HOME/bin. It is useful in certain logging - configurations

    • -
    • $CATALINA_HOME/bin/commons-daemon.jar — The classes - from Apache Commons - Daemon project. - This JAR file is not present in the CLASSPATH built by - catalina.bat|.sh scripts, but is referenced - from the manifest file of bootstrap.jar.

    • -
    -
  • -
  • Common — This class loader contains additional - classes that are made visible to both Tomcat internal classes and to all - web applications.

    -

    Normally, application classes should NOT - be placed here. The locations searched by this class loader are defined by - the common.loader property in - $CATALINA_BASE/conf/catalina.properties. The default setting will search the - following locations in the order they are listed:

    -
      -
    • unpacked classes and resources in $CATALINA_BASE/lib
    • -
    • JAR files in $CATALINA_BASE/lib
    • -
    • unpacked classes and resources in $CATALINA_HOME/lib
    • -
    • JAR files in $CATALINA_HOME/lib
    • -
    -

    By default, this includes the following:

    -
      -
    • annotations-api.jar — JavaEE annotations classes.
    • -
    • catalina.jar — Implementation of the Catalina servlet - container portion of Tomcat.
    • -
    • catalina-ant.jar — Tomcat Catalina Ant tasks.
    • -
    • catalina-ha.jar — High availability package.
    • -
    • catalina-tribes.jar — Group communication package.
    • -
    • ecj-*.jar — Eclipse JDT Java compiler.
    • -
    • el-api.jar — EL 2.2 API.
    • -
    • jasper.jar — Tomcat Jasper JSP Compiler and Runtime.
    • -
    • jasper-el.jar — Tomcat Jasper EL implementation.
    • -
    • jsp-api.jar — JSP 2.2 API.
    • -
    • servlet-api.jar — Servlet 3.0 API.
    • -
    • tomcat-api.jar — Several interfaces defined by Tomcat.
    • -
    • tomcat-coyote.jar — Tomcat connectors and utility classes.
    • -
    • tomcat-dbcp.jar — Database connection pool - implementation based on package-renamed copy of Apache Commons Pool - and Apache Commons DBCP.
    • -
    • tomcat-i18n-**.jar — Optional JARs containing resource bundles - for other languages. As default bundles are also included in each - individual JAR, they can be safely removed if no internationalization - of messages is needed.
    • -
    • tomcat-jdbc.jar — An alternative database connection pool - implementation, known as Tomcat JDBC pool. See - documentation for more details.
    • -
    • tomcat-util.jar — Common classes used by various components of - Apache Tomcat.
    • -
  • -
  • WebappX — A class loader is created for each web - application that is deployed in a single Tomcat instance. All unpacked - classes and resources in the /WEB-INF/classes directory of - your web application, plus classes and resources in JAR files - under the /WEB-INF/lib directory of your web application, - are made visible to this web application, but not to other ones.

  • -
- -

As mentioned above, the web application class loader diverges from the -default Java delegation model (in accordance with the recommendations in the -Servlet Specification, version 2.4, section 9.7.2 Web Application Classloader). -When a request to load a -class from the web application's WebappX class loader is processed, -this class loader will look in the local repositories first, -instead of delegating before looking. There are exceptions. Classes which are -part of the JRE base classes cannot be overridden. For some classes (such as -the XML parser components in J2SE 1.4+), the J2SE 1.4 endorsed feature can be -used. -Last, any JAR file that contains Servlet API classes will be explicitly -ignored by the classloader — Do not include such JARs in your web -application. -All other class loaders in Tomcat follow the usual delegation pattern.

- -

Therefore, from the perspective of a web application, class or resource -loading looks in the following repositories, in this order:

-
    -
  • Bootstrap classes of your JVM
  • -
  • System class loader classes (described above)
  • -
  • /WEB-INF/classes of your web application
  • -
  • /WEB-INF/lib/*.jar of your web application
  • -
  • Common class loader classes (described above)
  • -
- -
XML Parsers and Java
- -

Starting with Java 1.4 a copy of JAXP APIs and an XML parser are packed -inside the JRE. This has impacts on applications that wish to use their own -XML parser.

- -

In old versions of Tomcat, you could simply replace the XML parser -in the Tomcat libraries directory to change the parser -used by all web applications. However, this technique will not be effective -when you are running modern versions of Java, because the usual class loader -delegation process will always choose the implementation inside the JDK in -preference to this one.

- -

Java supports a mechanism called the "Endorsed Standards Override -Mechanism" to allow replacement of APIs created outside of the JCP -(i.e. DOM and SAX from W3C). It can also be used to update the XML parser -implementation. For more information, see: - -http://docs.oracle.com/javase/1.5.0/docs/guide/standards/index.html.

- -

Tomcat utilizes this mechanism by including the system property setting --Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS in the -command line that starts the container. The default value of this option is -$CATALINA_HOME/endorsed. This endorsed directory is not -created by default.

- -
Running under a security manager
- -

When running under a security manager the locations from which classes -are permitted to be loaded will also depend on the contents of your policy -file. See Security Manager HOW-TO -for further information.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/cluster-howto.html b/bundledApps/tomcat/webapps/docs/cluster-howto.html deleted file mode 100755 index 0d29927e..00000000 --- a/bundledApps/tomcat/webapps/docs/cluster-howto.html +++ /dev/null @@ -1,654 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Clustering/Session Replication HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Clustering/Session Replication HOW-TO

Important Note
-

You can also check the configuration reference documentation. -

-
Table of Contents
- -
For the impatient
-

- Simply add

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
- to your <Engine> or your <Host> element to enable clustering. -

-

- Using the above configuration will enable all-to-all session replication - using the DeltaManager to replicate session deltas. By all-to-all we mean that the session gets replicated to all the other - nodes in the cluster. This works great for smaller cluster but we don't recommend it for larger clusters(a lot of Tomcat nodes). - Also when using the delta manager it will replicate to all nodes, even nodes that don't have the application deployed.
- To get around this problem, you'll want to use the BackupManager. This manager only replicates the session data to one backup - node, and only to nodes that have the application deployed. Downside of the BackupManager: not quite as battle tested as the delta manager. -
- Here are some of the important default values:
- 1. Multicast address is 228.0.0.4
- 2. Multicast port is 45564 (the port and the address together determine cluster membership.
- 3. The IP broadcasted is java.net.InetAddress.getLocalHost().getHostAddress() (make sure you don't broadcast 127.0.0.1, this is a common error)
- 4. The TCP port listening for replication messages is the first available server socket in range 4000-4100
- 5. Two listeners are configured ClusterSessionListener and JvmRouteSessionIDBinderListener
- 6. Two interceptors are configured TcpFailureDetector and MessageDispatch15Interceptor
- The following is the default cluster configuration:
-

-        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-                 channelSendOptions="8">
-
-          <Manager className="org.apache.catalina.ha.session.DeltaManager"
-                   expireSessionsOnShutdown="false"
-                   notifyListenersOnReplication="true"/>
-
-          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
-            <Membership className="org.apache.catalina.tribes.membership.McastService"
-                        address="228.0.0.4"
-                        port="45564"
-                        frequency="500"
-                        dropTime="3000"/>
-            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-                      address="auto"
-                      port="4000"
-                      autoBind="100"
-                      selectorTimeout="5000"
-                      maxThreads="6"/>
-
-            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
-              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
-            </Sender>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
-          </Channel>
-
-          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
-                 filter=""/>
-          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
-
-          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
-                    tempDir="/tmp/war-temp/"
-                    deployDir="/tmp/war-deploy/"
-                    watchDir="/tmp/war-listen/"
-                    watchEnabled="false"/>
-
-          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
-          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
-        </Cluster>
-    
-

-

Will cover this section in more detail later in this document.

-
Cluster Basics
- -

To run session replication in your Tomcat 7.0 container, the following steps -should be completed:

-
    -
  • All your session attributes must implement java.io.Serializable
  • -
  • Uncomment the Cluster element in server.xml
  • -
  • If you have defined custom cluster valves, make sure you have the ReplicationValve defined as well under the Cluster element in server.xml
  • -
  • If your Tomcat instances are running on the same machine, make sure the tcpListenPort - attribute is unique for each instance, in most cases Tomcat is smart enough to resolve this on it's own by autodetecting available ports in the range 4000-4100
  • -
  • Make sure your web.xml has the - <distributable/> element
  • -
  • If you are using mod_jk, make sure that jvmRoute attribute is set at your Engine <Engine name="Catalina" jvmRoute="node01" > - and that the jvmRoute attribute value matches your worker name in workers.properties
  • -
  • Make sure that all nodes have the same time and sync with NTP service!
  • -
  • Make sure that your loadbalancer is configured for sticky session mode.
  • -
-

Load balancing can be achieved through many techniques, as seen in the -Load Balancing chapter.

-

Note: Remember that your session state is tracked by a cookie, so your URL must look the same from the out - side otherwise, a new session will be created.

-

Note: Clustering support currently requires the JDK version 1.5 or later.

-

The Cluster module uses the Tomcat JULI logging framework, so you can configure logging - through the regular logging.properties file. To track messages, you can enable logging on the key:org.apache.catalina.tribes.MESSAGES

-
Overview
- -

To enable session replication in Tomcat, three different paths can be followed to achieve the exact same thing:

-
    -
  1. Using session persistence, and saving the session to a shared file system (PersistenceManager + FileStore)
  2. -
  3. Using session persistence, and saving the session to a shared database (PersistenceManager + JDBCStore)
  4. -
  5. Using in-memory-replication, using the SimpleTcpCluster that ships with Tomcat (lib/catalina-tribes.jar + lib/catalina-ha.jar)
  6. -
- -

In this release of session replication, Tomcat can perform an all-to-all replication of session state using the DeltaManager or - perform backup replication to only one node using the BackupManager. - The all-to-all replication is an algorithm that is only efficient when the clusters are small. For larger clusters, to use - a primary-secondary session replication where the session will only be stored at one backup server simply setup the BackupManager.
- Currently you can use the domain worker attribute (mod_jk > 1.2.8) to build cluster partitions - with the potential of having a more scalable cluster solution with the DeltaManager(you'll need to configure the domain interceptor for this). - In order to keep the network traffic down in an all-to-all environment, you can split your cluster - into smaller groups. This can be easily achieved by using different multicast addresses for the different groups. - A very simple setup would look like this: -

- -
-        DNS Round Robin
-               |
-         Load Balancer
-          /           \
-      Cluster1      Cluster2
-      /     \        /     \
-  Tomcat1 Tomcat2  Tomcat3 Tomcat4
-
- -

What is important to mention here, is that session replication is only the beginning of clustering. - Another popular concept used to implement clusters is farming, i.e., you deploy your apps only to one - server, and the cluster will distribute the deployments across the entire cluster. - This is all capabilities that can go into with the FarmWarDeployer (s. cluster example at server.xml)

-

In the next section will go deeper into how session replication works and how to configure it.

- -
Cluster Information
-

Membership is established using multicast heartbeats. - Hence, if you wish to subdivide your clusters, you can do this by - changing the multicast IP address or port in the <Membership> element. -

-

- The heartbeat contains the IP address of the Tomcat node and the TCP port that - Tomcat listens to for replication traffic. All data communication happens over TCP. -

-

- The ReplicationValve is used to find out when the request has been completed and initiate the - replication, if any. Data is only replicated if the session has changed (by calling setAttribute or removeAttribute - on the session). -

-

- One of the most important performance considerations is the synchronous versus asynchronous replication. - In a synchronous replication mode the request doesn't return until the replicated session has been - sent over the wire and reinstantiated on all the other cluster nodes. - Synchronous vs. asynchronous is configured using the channelSendOptions - flag and is an integer value. The default value for the SimpleTcpCluster/DeltaManager combo is - 8, which is asynchronous. You can read more on the send flag(overview) or the - send flag(javadoc). - During async replication, the request is returned before the data has been replicated. async replication yields shorter - request times, and synchronous replication guarantees the session to be replicated before the request returns. -

-
Bind session after crash to failover node
-

- If you are using mod_jk and not using sticky sessions or for some reasons sticky session don't - work, or you are simply failing over, the session id will need to be modified as it previously contained - the worker id of the previous tomcat (as defined by jvmRoute in the Engine element). - To solve this, we will use the JvmRouteBinderValve. -

-

- The JvmRouteBinderValve rewrites the session id to ensure that the next request will remain sticky - (and not fall back to go to random nodes since the worker is no longer available) after a fail over. - The valve rewrites the JSESSIONID value in the cookie with the same name. - Not having this valve in place, will make it harder to ensure stickiness in case of a failure for the mod_jk module. -

-

- By default, if no valves are configured, the JvmRouteBinderValve is added on. - The cluster message listener called JvmRouteSessionIDBinderListener is also defined by default and is used to actually rewrite the - session id on the other nodes in the cluster once a fail over has occurred. - Remember, if you are adding your own valves or cluster listeners in server.xml then the defaults are no longer valid, - make sure that you add in all the appropriate valves and listeners as defined by the default. -

-

- Hint:
- With attribute sessionIdAttribute you can change the request attribute name that included the old session id. - Default attribute name is org.apache.catalina.cluster.session.JvmRouteOrignalSessionID. -

-

- Trick:
- You can enable this mod_jk turnover mode via JMX before you drop a node to all backup nodes! - Set enable true on all JvmRouteBinderValve backups, disable worker at mod_jk - and then drop node and restart it! Then enable mod_jk Worker and disable JvmRouteBinderValves again. - This use case means that only requested session are migrated. -

- - -
Configuration Example
-
-        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-                 channelSendOptions="6">
-
-          <Manager className="org.apache.catalina.ha.session.BackupManager"
-                   expireSessionsOnShutdown="false"
-                   notifyListenersOnReplication="true"
-                   mapSendOptions="6"/>
-          <!--
-          <Manager className="org.apache.catalina.ha.session.DeltaManager"
-                   expireSessionsOnShutdown="false"
-                   notifyListenersOnReplication="true"/>
-          -->
-          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
-            <Membership className="org.apache.catalina.tribes.membership.McastService"
-                        address="228.0.0.4"
-                        port="45564"
-                        frequency="500"
-                        dropTime="3000"/>
-            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-                      address="auto"
-                      port="5000"
-                      selectorTimeout="100"
-                      maxThreads="6"/>
-
-            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
-              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
-            </Sender>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
-          </Channel>
-
-          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
-                 filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
-
-          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
-                    tempDir="/tmp/war-temp/"
-                    deployDir="/tmp/war-deploy/"
-                    watchDir="/tmp/war-listen/"
-                    watchEnabled="false"/>
-
-          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
-        </Cluster>
-    
-

- Break it down!! -

-
-        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-                 channelSendOptions="6">
-    
-

- The main element, inside this element all cluster details can be configured. - The channelSendOptions is the flag that is attached to each message sent by the - SimpleTcpCluster class or any objects that are invoking the SimpleTcpCluster.send method. - The description of the send flags is available at - our javadoc site - The DeltaManager sends information using the SimpleTcpCluster.send method, while the backup manager - sends it itself directly through the channel. -
For more info, Please visit the reference documentation -

-
-          <Manager className="org.apache.catalina.ha.session.BackupManager"
-                   expireSessionsOnShutdown="false"
-                   notifyListenersOnReplication="true"
-                   mapSendOptions="6"/>
-          <!--
-          <Manager className="org.apache.catalina.ha.session.DeltaManager"
-                   expireSessionsOnShutdown="false"
-                   notifyListenersOnReplication="true"/>
-          -->
-    
-

- This is a template for the manager configuration that will be used if no manager is defined in the <Context> - element. In Tomcat 5.x each webapp marked distributable had to use the same manager, this is no longer the case - since Tomcat you can define a manager class for each webapp, so that you can mix managers in your cluster. - Obviously the managers on one node's application has to correspond with the same manager on the same application on the other node. - If no manager has been specified for the webapp, and the webapp is marked <distributable/> Tomcat will take this manager configuration - and create a manager instance cloning this configuration. -
For more info, Please visit the reference documentation -

-
-          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
-    
-

- The channel element is Tribes, the group communication framework - used inside Tomcat. This element encapsulates everything that has to do with communication and membership logic. -
For more info, Please visit the reference documentation -

-
-            <Membership className="org.apache.catalina.tribes.membership.McastService"
-                        address="228.0.0.4"
-                        port="45564"
-                        frequency="500"
-                        dropTime="3000"/>
-    
-

- Membership is done using multicasting. Please note that Tribes also supports static memberships using the - StaticMembershipInterceptor if you want to extend your membership to points beyond multicasting. - The address attribute is the multicast address used and the port is the multicast port. These two together - create the cluster separation. If you want a QA cluster and a production cluster, the easiest config is to - have the QA cluster be on a separate multicast address/port combination than the production cluster.
- The membership component broadcasts TCP address/port of itself to the other nodes so that communication between - nodes can be done over TCP. Please note that the address being broadcasted is the one of the - Receiver.address attribute. -
For more info, Please visit the reference documentation -

-
-            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-                      address="auto"
-                      port="5000"
-                      selectorTimeout="100"
-                      maxThreads="6"/>
-    
-

- In tribes the logic of sending and receiving data has been broken into two functional components. The Receiver, as the name suggests - is responsible for receiving messages. Since the Tribes stack is thread less, (a popular improvement now adopted by other frameworks as well), - there is a thread pool in this component that has a maxThreads and minThreads setting.
- The address attribute is the host address that will be broadcasted by the membership component to the other nodes. -
For more info, Please visit the reference documentation -

-
-
-            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
-              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
-            </Sender>
-    
-

- The sender component, as the name indicates is responsible for sending messages to other nodes. - The sender has a shell component, the ReplicationTransmitter but the real stuff done is done in the - sub component, Transport. - Tribes support having a pool of senders, so that messages can be sent in parallel and if using the NIO sender, - you can send messages concurrently as well.
- Concurrently means one message to multiple senders at the same time and Parallel means multiple messages to multiple senders - at the same time. -
For more info, Please visit the reference documentation -

-
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
-            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
-          </Channel>
-    
-

- Tribes uses a stack to send messages through. Each element in the stack is called an interceptor, and works much like the valves do - in the Tomcat servlet container. - Using interceptors, logic can be broken into more manageable pieces of code. The interceptors configured above are:
- TcpFailureDetector - verifies crashed members through TCP, if multicast packets get dropped, this interceptor protects against false positives, - ie the node marked as crashed even though it still is alive and running.
- MessageDispatch15Interceptor - dispatches messages to a thread (thread pool) to send message asynchrously.
- ThroughputInterceptor - prints out simple stats on message traffic.
- Please note that the order of interceptors is important. the way they are defined in server.xml is the way they are represented in the - channel stack. Think of it as a linked list, with the head being the first most interceptor and the tail the last. -
For more info, Please visit the reference documentation -

-
-          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
-                 filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
-    
-

- The cluster uses valves to track requests to web applications, we've mentioned the ReplicationValve and the JvmRouteBinderValve above. - The <Cluster> element itself is not part of the pipeline in Tomcat, instead the cluster adds the valve to its parent container. - If the <Cluster> elements is configured in the <Engine> element, the valves get added to the engine and so on. -
For more info, Please visit the reference documentation -

-
-          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
-                    tempDir="/tmp/war-temp/"
-                    deployDir="/tmp/war-deploy/"
-                    watchDir="/tmp/war-listen/"
-                    watchEnabled="false"/>
-    
-

- The default tomcat cluster supports farmed deployment, ie, the cluster can deploy and undeploy applications on the other nodes. - The state of this component is currently in flux but will be addressed soon. There was a change in the deployment algorithm - between Tomcat 5.0 and 5.5 and at that point, the logic of this component changed to where the deploy dir has to match the - webapps directory. -
For more info, Please visit the reference documentation -

-
-          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
-        </Cluster>
-    
-

- Since the SimpleTcpCluster itself is a sender and receiver of the Channel object, components can register themselves as listeners to - the SimpleTcpCluster. The listener above ClusterSessionListener listens for DeltaManager replication messages - and applies the deltas to the manager that in turn applies it to the session. -
For more info, Please visit the reference documentation -

- -
Cluster Architecture
- -

Component Levels: -

-         Server
-           |
-         Service
-           |
-         Engine
-           |  \
-           |  --- Cluster --*
-           |
-         Host
-           |
-         ------
-        /      \
-     Cluster    Context(1-N)
-        |             \
-        |             -- Manager
-        |                   \
-        |                   -- DeltaManager
-        |                   -- BackupManager
-        |
-     ---------------------------
-        |                       \
-      Channel                    \
-    ----------------------------- \
-        |                          \
-     Interceptor_1 ..               \
-        |                            \
-     Interceptor_N                    \
-    -----------------------------      \
-     |          |         |             \
-   Receiver    Sender   Membership       \
-                                         -- Valve
-                                         |      \
-                                         |       -- ReplicationValve
-                                         |       -- JvmRouteBinderValve
-                                         |
-                                         -- LifecycleListener
-                                         |
-                                         -- ClusterListener
-                                         |      \
-                                         |       -- ClusterSessionListener
-                                         |       -- JvmRouteSessionIDBinderListener
-                                         |
-                                         -- Deployer
-                                                \
-                                                 -- FarmWarDeployer
-
-
-
-

- -
How it Works
-

To make it easy to understand how clustering works, We are gonna take you through a series of scenarios. - In the scenario we only plan to use two tomcat instances TomcatA and TomcatB. - We will cover the following sequence of events:

- -
    -
  1. TomcatA starts up
  2. -
  3. TomcatB starts up (Wait that TomcatA start is complete)
  4. -
  5. TomcatA receives a request, a session S1 is created.
  6. -
  7. TomcatA crashes
  8. -
  9. TomcatB receives a request for session S1
  10. -
  11. TomcatA starts up
  12. -
  13. TomcatA receives a request, invalidate is called on the session (S1)
  14. -
  15. TomcatB receives a request, for a new session (S2)
  16. -
  17. TomcatA The session S2 expires due to inactivity.
  18. -
- -

Ok, now that we have a good sequence, we will take you through exactly what happens in the session repliction code

- -
    -
  1. TomcatA starts up -

    - Tomcat starts up using the standard start up sequence. When the Host object is created, a cluster object is associated with it. - When the contexts are parsed, if the distributable element is in place in web.xml - Tomcat asks the Cluster class (in this case SimpleTcpCluster) to create a manager - for the replicated context. So with clustering enabled, distributable set in web.xml - Tomcat will create a DeltaManager for that context instead of a StandardManager. - The cluster class will start up a membership service (multicast) and a replication service (tcp unicast). - More on the architecture further down in this document. -

    -
  2. -
  3. TomcatB starts up -

    - When TomcatB starts up, it follows the same sequence as TomcatA did with one exception. - The cluster is started and will establish a membership (TomcatA,TomcatB). - TomcatB will now request the session state from a server that already exists in the cluster, - in this case TomcatA. TomcatA responds to the request, and before TomcatB starts listening - for HTTP requests, the state has been transferred from TomcatA to TomcatB. - In case TomcatA doesn't respond, TomcatB will time out after 60 seconds, and issue a log - entry. The session state gets transferred for each web application that has distributable in - its web.xml. Note: To use session replication efficiently, all your tomcat instances should be - configured the same. -

    -
  4. -
  5. TomcatA receives a request, a session S1 is created. -

    - The request coming in to TomcatA is treated exactly the same way as without session replication. - The action happens when the request is completed, the ReplicationValve will intercept - the request before the response is returned to the user. - At this point it finds that the session has been modified, and it uses TCP to replicata the - session to TomcatB. Once the serialized data has been handed off to the operating systems TCP logic, - the request returns to the user, back through the valve pipeline. - For each request the entire session is replicated, this allows code that modifies attributes - in the session without calling setAttribute or removeAttribute to be replicated. - a useDirtyFlag configuration parameter can be used to optimize the number of times - a session is replicated. -

    - -
  6. -
  7. TomcatA crashes -

    - When TomcatA crashes, TomcatB receives a notification that TomcatA has dropped out - of the cluster. TomcatB removes TomcatA from its membership list, and TomcatA will no longer - be notified of any changes that occurs in TomcatB. - The load balancer will redirect the requests from TomcatA to TomcatB and all the sessions - are current. -

    -
  8. -
  9. TomcatB receives a request for session S1 -

    Nothing exciting, TomcatB will process the request as any other request. -

    -
  10. -
  11. TomcatA starts up -

    Upon start up, before TomcatA starts taking new request and making itself - available to it will follow the start up sequence described above 1) 2). - It will join the cluster, contact TomcatB for the current state of all the sessions. - And once it receives the session state, it finishes loading and opens its HTTP/mod_jk ports. - So no requests will make it to TomcatA until it has received the session state from TomcatB. -

    -
  12. -
  13. TomcatA receives a request, invalidate is called on the session (S1) -

    The invalidate is call is intercepted, and the session is queued with invalidated sessions. - When the request is complete, instead of sending out the session that has changed, it sends out - an "expire" message to TomcatB and TomcatB will invalidate the session as well. -

    - -
  14. -
  15. TomcatB receives a request, for a new session (S2) -

    Same scenario as in step 3) -

    - - -
  16. -
  17. TomcatA The session S2 expires due to inactivity. -

    The invalidate is call is intercepted the same was as when a session is invalidated by the user, - and the session is queued with invalidated sessions. - At this point, the invalidet session will not be replicated across until - another request comes through the system and checks the invalid queue. -

    -
  18. -
- -

Phuuuhh! :)

- -

Membership - Clustering membership is established using very simple multicast pings. - Each Tomcat instance will periodically send out a multicast ping, - in the ping message the instance will broad cast its IP and TCP listen port - for replication. - If an instance has not received such a ping within a given timeframe, the - member is considered dead. Very simple, and very effective! - Of course, you need to enable multicasting on your system. -

- -

TCP Replication - Once a multicast ping has been received, the member is added to the cluster - Upon the next replication request, the sending instance will use the host and - port info and establish a TCP socket. Using this socket it sends over the serialized data. - The reason I choose TCP sockets is because it has built in flow control and guaranteed delivery. - So I know, when I send some data, it will make it there :) -

- -

Distributed locking and pages using frames - Tomcat does not keep session instances in sync across the cluster. - The implementation of such logic would be to much overhead and cause all - kinds of problems. If your client accesses the same session - simultanously using multiple requests, then the last request - will override the other sessions in the cluster. -

- -
Monitoring your Cluster with JMX
-

Monitoring is a very important question when you use a cluster. Some of the cluster objects are JMX MBeans

-

Add the following parameter to your startup script with Java 5: -

-set CATALINA_OPTS=\
--Dcom.sun.management.jmxremote \
--Dcom.sun.management.jmxremote.port=%my.jmx.port% \
--Dcom.sun.management.jmxremote.ssl=false \
--Dcom.sun.management.jmxremote.authenticate=false
-
-

-

Activate JMX with JDK 1.4: -

    -
  1. Install the compat package
  2. -
  3. Install the mx4j-tools.jar at common/lib (use the same mx4j version as your tomcat release)
  4. -
  5. Configure a MX4J JMX HTTP Adaptor at your AJP Connector

    -
    -<Connector port="${AJP.PORT}"
    -   handler.list="mx"
    -   mx.enabled="true"
    -   mx.httpHost="${JMX.HOST}"
    -   mx.httpPort="${JMX.PORT}"
    -   protocol="AJP/1.3" />
    -
    -
  6. -
  7. Start your tomcat and look with your browser to http://${JMX.HOST}:${JMX.PORT}
  8. -
  9. With the connector parameter mx.authMode="basic" mx.authUser="tomcat" mx.authPassword="strange" you can control the access!
  10. -
-

-

-List of Cluster Mbeans
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionMBean ObjectName - EngineMBean ObjectName - Host
ClusterThe complete cluster elementtype=Clustertype=Cluster,host=${HOST}
DeltaManagerThis manager control the sessions and handle session replication type=Manager,context=${APP.CONTEXT.PATH}, host=${HOST}type=Manager,context=${APP.CONTEXT.PATH}, host=${HOST}
ReplicationValveThis valve control the replication to the backup nodestype=Valve,name=ReplicationValvetype=Valve,name=ReplicationValve,host=${HOST}
JvmRouteBinderValveThis is a cluster fallback valve to change the Session ID to the current tomcat jvmroute.type=Valve,name=JvmRouteBinderValve, - context=${APP.CONTEXT.PATH}type=Valve,name=JvmRouteBinderValve,host=${HOST}, - context=${APP.CONTEXT.PATH}
-

-
FAQ
-

Please see the clustering section of the FAQ.

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/ajp.html b/bundledApps/tomcat/webapps/docs/config/ajp.html deleted file mode 100755 index 4357fcbc..00000000 --- a/bundledApps/tomcat/webapps/docs/config/ajp.html +++ /dev/null @@ -1,533 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The AJP Connector

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The AJP Connector

Table of Contents
- -
Introduction
- -

The AJP Connector element represents a - Connector component that communicates with a web - connector via the AJP protocol. This is used for cases - where you wish to invisibly integrate Tomcat into an existing (or new) - Apache installation, and you want Apache to handle the static content - contained in the web application, and/or utilize Apache's SSL - processing.

- -

This connector supports load balancing when used in conjunction with - the jvmRoute attribute of the - Engine.

- -

The native connectors supported with this Tomcat release are: -

    -
  • JK 1.2.x with any of the supported servers. See - the JK docs - for details.
  • -
  • mod_proxy on Apache httpd 2.x (included by default in Apache HTTP - Server 2.2), with AJP enabled: see - the - httpd docs for details.
  • -
-

- -

Other native connectors supporting AJP may work, but are no longer - supported.

- -
Attributes
- -
Common Attributes
- -

All implementations of Connector - support the following attributes:

- -
AttributeDescription
allowTrace -

A boolean value which can be used to enable or disable the TRACE - HTTP method. If not specified, this attribute is set to false.

-
asyncTimeout -

The default timeout for asynchronous requests in milliseconds. If not - specified, this attribute is set to 10000 (10 seconds).

-
enableLookups -

Set to true if you want calls to - request.getRemoteHost() to perform DNS lookups in - order to return the actual host name of the remote client. Set - to false to skip the DNS lookup and return the IP - address in String form instead (thereby improving performance). - By default, DNS lookups are disabled.

-
maxHeaderCount -

The maximum number of headers in a request that are allowed by the - container. A request that contains more headers than the specified limit - will be rejected. A value of less than 0 means no limit. - If not specified, a default of 100 is used.

-
maxParameterCount -

The maximum number of parameter and value pairs (GET plus POST) which - will be automatically parsed by the container. Parameter and value pairs - beyond this limit will be ignored. A value of less than 0 means no limit. - If not specified, a default of 10000 is used. Note that - FailedRequestFilter filter can be - used to reject requests that hit the limit.

-
maxPostSize -

The maximum size in bytes of the POST which will be handled by - the container FORM URL parameter parsing. The limit can be disabled by - setting this attribute to a value less than or equal to 0. - If not specified, this attribute is set to 2097152 (2 megabytes).

-
maxSavePostSize -

The maximum size in bytes of the POST which will be saved/buffered by - the container during FORM or CLIENT-CERT authentication. For both types - of authentication, the POST will be saved/buffered before the user is - authenticated. For CLIENT-CERT authentication, the POST is buffered for - the duration of the SSL handshake and the buffer emptied when the request - is processed. For FORM authentication the POST is saved whilst the user - is re-directed to the login form and is retained until the user - successfully authenticates or the session associated with the - authentication request expires. The limit can be disabled by setting this - attribute to -1. Setting the attribute to zero will disable the saving of - POST data during authentication. If not specified, this attribute is set - to 4096 (4 kilobytes).

-
parseBodyMethods -

A comma-separated list of HTTP methods for which request - bodies will be parsed for request parameters identically - to POST. This is useful in RESTful applications that want to - support POST-style semantics for PUT requests. - Note that any setting other than POST causes Tomcat - to behave in a way that goes against the intent of the servlet - specification. - The HTTP method TRACE is specifically forbidden here in accordance - with the HTTP specification. - The default is POST

-
port -

The TCP port number on which this Connector - will create a server socket and await incoming connections. Your - operating system will allow only one server application to listen - to a particular port number on a particular IP address. If the special - value of 0 (zero) is used, then Tomcat will select a free port at random - to use for this connector. This is typically only useful in embedded and - testing applications.

-
protocol -

Sets the protocol to handle incoming traffic. To configure an AJP - connector this must be specified. If no value for protocol is provided, - an HTTP connector rather than an AJP connector - will be configured.
- The standard protocol value for an AJP connector is AJP/1.3 - which uses an auto-switching mechanism to select either a Java based - connector or an APR/native based connector. If the - PATH (Windows) or LD_LIBRARY_PATH (on most unix - systems) environment variables contain the Tomcat native library, the - native/APR connector will be used. If the native library cannot be - found, the Java based connector will be used.
- To use an explicit protocol rather than rely on the auto-switching - mechanism described above, the following values may be used:
- org.apache.coyote.ajp.AjpProtocol - - blocking Java connector
- org.apache.coyote.ajp.AjpNioProtocol - - non blocking Java connector.
- org.apache.coyote.ajp.AjpAprProtocol - - the APR/native connector.
- Custom implementations may also be used.
- Take a look at our Connector - Comparison chart. -

-
proxyName -

If this Connector is being used in a proxy - configuration, configure this attribute to specify the server name - to be returned for calls to request.getServerName(). - See Proxy Support for more - information.

-
proxyPort -

If this Connector is being used in a proxy - configuration, configure this attribute to specify the server port - to be returned for calls to request.getServerPort(). - See Proxy Support for more - information.

-
redirectPort -

If this Connector is supporting non-SSL - requests, and a request is received for which a matching - <security-constraint> requires SSL transport, - Catalina will automatically redirect the request to the port - number specified here.

-
scheme -

Set this attribute to the name of the protocol you wish to have - returned by calls to request.getScheme(). For - example, you would set this attribute to "https" - for an SSL Connector. The default value is "http". -

-
secure -

Set this attribute to true if you wish to have - calls to request.isSecure() to return true - for requests received by this Connector. You would want this on an - SSL Connector or a non SSL connector that is receiving data from a - SSL accelerator, like a crypto card, a SSL appliance or even a webserver. - The default value is false.

-
URIEncoding -

This specifies the character encoding used to decode the URI bytes, - after %xx decoding the URL. If not specified, ISO-8859-1 will be used. -

-
useBodyEncodingForURI -

This specifies if the encoding specified in contentType should be used - for URI query parameters, instead of using the URIEncoding. This - setting is present for compatibility with Tomcat 4.1.x, where the - encoding specified in the contentType, or explicitly set using - Request.setCharacterEncoding method was also used for the parameters from - the URL. The default value is false. -

-
useIPVHosts -

Set this attribute to true to cause Tomcat to use - the IP address passed by the native web server to determine the Host - to send the request to. The default value is false.

-
xpoweredBy -

Set this attribute to true to cause Tomcat to advertise - support for the Servlet specification using the header recommended in the - specification. The default value is false.

-
- -
- -
Standard Implementations
- -

To use AJP, you must specify the protocol attribute (see above).

- -

The standard AJP connectors (BIO, NIO and APR/native) all support the - following attributes in addition to the common Connector attributes listed - above.

- -

WARNING: The NIO connector for - AJP is experimental.

- -
AttributeDescription
acceptCount -

The maximum queue length for incoming connection requests when - all possible request processing threads are in use. Any requests - received when the queue is full will be refused. The default - value is 100.

-
acceptorThreadCount -

The number of threads to be used to accept connections. Increase this - value on a multi CPU machine, although you would never really need more - than 2. Also, with a lot of non keep alive connections, you - might want to increase this value as well. Default value is - 1.

-
acceptorThreadPriority -

The priority of the acceptor threads. The threads used to accept - new connections. The default value is - java.lang.Thread#NORM_PRIORITY. See the JavaDoc for the - java.lang.Thread class for more details on what this priority means.

-
address -

For servers with more than one IP address, this attribute - specifies which address will be used for listening on the specified - port. By default, this port will be used on all IP addresses - associated with the server. A value of 127.0.0.1 - indicates that the Connector will only listen on the loopback - interface.

-
bindOnInit -

Controls when the socket used by the connector is bound. By default it - is bound when the connector is initiated and unbound when the connector is - destroyed. If set to false, the socket will be bound when the - connector is started and unbound when it is stopped.

-
clientCertProvider -

When client certificate information is presented in a form other than - instances of java.security.cert.X509Certificate it needs to - be converted before it can be used and this property controls which JSSE - provider is used to perform the conversion. For example it is used with - the AJP connectors, the HTTP APR connector and - with the - org.apache.catalina.valves.SSLValve.If not specified, the default - provider will be used.

-
connectionLinger -

The number of seconds during which the sockets used by this - Connector will linger when they are closed. - If not specified, the JVM default will be used.

-
connectionTimeout -

The number of milliseconds this Connector will wait, - after accepting a connection, for the request URI line to be - presented. The default value for AJP protocol connectors - is -1 (i.e. infinite).

-
executor -

A reference to the name in an Executor - element. If this attribute is set, and the named executor exists, the - connector will use the executor, and all the other thread attributes will - be ignored. Note that if a shared executor is not specified for a - connector then the connector will use a private, internal executor to - provide the thread pool.

-
keepAliveTimeout -

The number of milliseconds this Connector will wait for - another AJP request before closing the connection. - The default value is to use the value that has been set for the - connectionTimeout attribute.

-
maxConnections -

The maximum number of connections that the server will accept and - process at any given time. When this number has been reached, the server - will not accept any more connections until the number of connections - falls below this value. The operating system may still accept - connections based on the acceptCount setting. Default value - varies by connector type. For BIO the default is the value of - maxThreads unless an Executor - is used in which case the default will be the value of maxThreads from the - executor. For NIO the default is 10000. - For APR/native, the default is 8192.

-

Note that for APR/native on Windows, the configured value will be - reduced to the highest multiple of 1024 that is less than or equal to - maxConnections. This is done for performance reasons.
- If set to a value of -1, the maxConnections feature is disabled - and connections are not counted.

-
maxThreads -

The maximum number of request processing threads to be created - by this Connector, which therefore determines the - maximum number of simultaneous requests that can be handled. If - not specified, this attribute is set to 200. If an executor is associated - with this connector, this attribute is ignored as the connector will - execute tasks using the executor rather than an internal thread pool.

-
minSpareThreads -

The minimum number of threads always kept running. If not specified, - the default of 10 is used.

-
packetSize -

This attribute sets the maximum AJP packet size in Bytes. The maximum - value is 65536. It should be the same as the max_packet_size - directive configured for mod_jk. Normally it is not necessary to change - the maximum packet size. Problems with the default value have been - reported when sending certificates or certificate chains. The default - value is 8192. If set to less than 8192 then the setting will ignored and - the default value of 8192 used.

-
processorCache -

The protocol handler caches Processor objects to speed up performance. - This setting dictates how many of these objects get cached. - -1 means unlimited, default is 200. If not using - Servlet 3.0 asynchronous processing, a good default is to use the same as - the maxThreads setting. If using Servlet 3.0 asynchronous processing, a - good default is to use the larger of maxThreads and the maximum number of - expected concurrent requests (synchronous and asynchronous).

-
requiredSecret -

Only requests from workers with this secret keyword will be accepted. -

-
tcpNoDelay -

If set to true, the TCP_NO_DELAY option will be - set on the server socket, which improves performance under most - circumstances. This is set to true by default.

-
threadPriority -

The priority of the request processing threads within the JVM. - The default value is java.lang.Thread#NORM_PRIORITY. - See the JavaDoc for the java.lang.Thread class for more details on - what this priority means. -

-
tomcatAuthentication -

If set to true, the authentication will be done in Tomcat. - Otherwise, the authenticated principal will be propagated from the native - webserver and used for authorization in Tomcat. - The default value is true.

-
- -
- -
Java TCP socket attributes
- -

The BIO and NIO implementation support the following Java TCP socket - attributes in addition to the common Connector and HTTP attributes listed - above.

- -
AttributeDescription
socket.rxBufSize -

(int)The socket receive buffer (SO_RCVBUF) size in bytes. JVM default - used if not set.

-
socket.txBufSize -

(int)The socket send buffer (SO_SNDBUF) size in bytes. JVM default - used if not set.

-
socket.tcpNoDelay -

(bool)This is equivalent to standard attribute - tcpNoDelay.

-
socket.soKeepAlive -

(bool)Boolean value for the socket's keep alive setting - (SO_KEEPALIVE). JVM default used if not set.

-
socket.ooBInline -

(bool)Boolean value for the socket OOBINLINE setting. JVM default - used if not set.

-
socket.soReuseAddress -

(bool)Boolean value for the sockets reuse address option - (SO_REUSEADDR). JVM default used if not set.

-
socket.soLingerOn -

(bool)Boolean value for the sockets so linger option (SO_LINGER). - A value for the standard attribute connectionLinger - that is >=0 is equivalent to setting this to true. - A value for the standard attribute connectionLinger - that is <0 is equivalent to setting this to false. - Both this attribute and soLingerTime must be set else the - JVM defaults will be used for both.

-
socket.soLingerTime -

(int)Value in seconds for the sockets so linger option (SO_LINGER). - This is equivalent to standard attribute - connectionLinger. - Both this attribute and soLingerOn must be set else the - JVM defaults will be used for both.

-
socket.soTimeout -

This is equivalent to standard attribute - connectionTimeout.

-
socket.performanceConnectionTime -

(int)The first value for the performance settings. See - Socket Performance Options - All three performance attributes must be set else the JVM defaults will - be used for all three.

-
socket.performanceLatency -

(int)The second value for the performance settings. See - Socket Performance Options - All three performance attributes must be set else the JVM defaults will - be used for all three.

-
socket.performanceBandwidth -

(int)The third value for the performance settings. See - Socket Performance Options - All three performance attributes must be set else the JVM defaults will - be used for all three.

-
socket.unlockTimeout -

(int) The timeout for a socket unlock. When a connector is stopped, it will try to release the acceptor thread by opening a connector to itself. - The default value is 250 and the value is in milliseconds

-
-
- -
NIO specific configuration
- -

The following attributes are specific to the NIO connector.

- -
AttributeDescription
socket.directBuffer -

(bool)Boolean value, whether to use direct ByteBuffers or java mapped - ByteBuffers. Default is false.
- When you are using direct buffers, make sure you allocate the - appropriate amount of memory for the direct memory space. On Sun's JDK - that would be something like -XX:MaxDirectMemorySize=256m. -

-
socket.appReadBufSize -

(int)Each connection that is opened up in Tomcat get associated with - a read ByteBuffer. This attribute controls the size of this buffer. By - default this read buffer is sized at 8192 bytes. For lower - concurrency, you can increase this to buffer more data. For an extreme - amount of keep alive connections, decrease this number or increase your - heap size.

-
socket.appWriteBufSize -

(int)Each connection that is opened up in Tomcat get associated with - a write ByteBuffer. This attribute controls the size of this buffer. By - default this write buffer is sized at 8192 bytes. For low - concurrency you can increase this to buffer more response data. For an - extreme amount of keep alive connections, decrease this number or - increase your heap size.
- The default value here is pretty low, you should up it if you are not - dealing with tens of thousands concurrent connections.

-
socket.bufferPool -

(int)The NIO connector uses a class called NioChannel that holds - elements linked to a socket. To reduce garbage collection, the NIO - connector caches these channel objects. This value specifies the size of - this cache. The default value is 500, and represents that - the cache will hold 500 NioChannel objects. Other values are - -1 for unlimited cache and 0 for no cache.

-
socket.bufferPoolSize -

(int)The NioChannel pool can also be size based, not used object - based. The size is calculated as follows:
- NioChannel - buffer size = read buffer size + write buffer size
- SecureNioChannel buffer size = application read buffer size + - application write buffer size + network read buffer size + - network write buffer size
- The value is in bytes, the default value is 1024*1024*100 - (100MB).

-
socket.processorCache -

(int)Tomcat will cache SocketProcessor objects to reduce garbage - collection. The integer value specifies how many objects to keep in the - cache at most. The default is 500. Other values are - -1 for unlimited cache and 0 for no cache.

-
socket.keyCache -

(int)Tomcat will cache KeyAttachment objects to reduce garbage - collection. The integer value specifies how many objects to keep in the - cache at most. The default is 500. Other values are - -1 for unlimited cache and 0 for no cache.

-
socket.eventCache -

(int)Tomcat will cache PollerEvent objects to reduce garbage - collection. The integer value specifies how many objects to keep in the - cache at most. The default is 500. Other values are - -1 for unlimited cache and 0 for no cache.

-
selectorPool.maxSelectors -

(int)The max selectors to be used in the pool, to reduce selector - contention. Use this option when the command line - org.apache.tomcat.util.net.NioSelectorShared value is set - to false. Default value is 200.

-
selectorPool.maxSpareSelectors -

(int)The max spare selectors to be used in the pool, to reduce - selector contention. When a selector is returned to the pool, the system - can decide to keep it or let it be GC'd. Use this option when the - command line org.apache.tomcat.util.net.NioSelectorShared - value is set to false. Default value is -1 (unlimited).

-
command-line-options -

The following command line options are available for the NIO - connector:
- -Dorg.apache.tomcat.util.net.NioSelectorShared=true|false - - default is true. Set this value to false if you wish to - use a selector for each thread. When you set it to false, you can - control the size of the pool of selectors by using the - selectorPool.maxSelectors attribute.

-
-
- -
APR/native specific configuration
- -

The APR/native implementation supports the following attributes in - addition to the common Connector and AJP attributes listed above.

- -
AttributeDescription
pollTime -

Duration of a poll call in microseconds. Lowering this value will - slightly decrease latency of connections being kept alive in some cases - , but will use more CPU as more poll calls are being made. The default - value is 2000 (2ms). -

-
pollerSize -

Amount of sockets that the poller responsible for polling kept alive - connections can hold at a given time. Extra connections will be closed - right away. The default value is 8192, corresponding to 8192 keep-alive - connections.

-
- -
- -
Nested Components
- -

None at this time.

- -
Special Features
- -
Proxy Support
- -

The proxyName and proxyPort attributes can - be used when Tomcat is run behind a proxy server. These attributes - modify the values returned to web applications that call the - request.getServerName() and request.getServerPort() - methods, which are often used to construct absolute URLs for redirects. - Without configuring these attributes, the values returned would reflect - the server name and port on which the connection from the proxy server - was received, rather than the server name and port to whom the client - directed the original request.

- -

For more information, see the - Proxy Support HOW-TO.

- -
- -
Connector Comparison
- -

Below is a small chart that shows how the connectors differentiate.

-
-                       Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector
-                                 BIO                         NIO                       APR
-    Classname                AjpProtocol               AjpNioProtocol           AjpAprProtocol
-    Tomcat Version           3.x onwards                 7.x onwards              5.5.x onwards
-    Support Polling              NO                          YES                       YES
-    Polling Size                 N/A                   maxConnections             maxConnections
-    Read Request Headers      Blocking                  Sim Blocking                   Blocking
-    Read Request Body         Blocking                  Sim Blocking                   Blocking
-    Write Response            Blocking                  Sim Blocking                   Blocking
-    Wait for next Request     Blocking                  Non Blocking               Non Blocking
-    Max Connections        maxConnections              maxConnections             maxConnections
-
-    
- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-channel.html b/bundledApps/tomcat/webapps/docs/config/cluster-channel.html deleted file mode 100755 index 508752ff..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-channel.html +++ /dev/null @@ -1,72 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster Channel object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster Channel object

Table of Contents
- -
Introduction
- The cluster channel is the main component of a small framework we've nicknamed Apache Tribes.
- The channel manages a set of sub components and together they create a group communication framework.
- This framework is then used internally by the components that need to send messages between different Tomcat instances. -
- A few examples of these components would be the SimpleTcpCluster that does the messaging for the DeltaManager, - or the BackupManager that uses a different replication strategy. The ReplicatedContext object does also - use the channel object to communicate context attribute changes. -
Nested Components
-

Channel/Membership:
- The Membership component is responsible for auto discovering new nodes in the cluster - and also to provide for notifications for any nodes that have not responded with a heartbeat. - The default implementation uses multicast.
- In the membership component you configure how your nodes, aka. members, are to be discovered and/or - divided up. - You can always find out more about Apache Tribes -

-

Channel/Sender:
- The Sender component manages all outbound connections and data messages that are sent - over the network from one node to another. - This component allows messages to be sent in parallel. - The default implementation uses TCP client sockets, and socket tuning for outgoing messages are - configured here.
- You can always find out more about Apache Tribes -

-

Channel/Sender/Transport:
- The Transport component is the bottom IO layer for the sender component. - The default implementation uses non-blocking TCP client sockets.
- You can always find out more about Apache Tribes -

-

Channel/Receiver:
- The receiver component listens for messages from other nodes. - Here you will configure the cluster thread pool, as it will dispatch incoming - messages to a thread pool for faster processing. - The default implementation uses non-blocking TCP server sockets.
- You can always find out more about Apache Tribes -

-

Channel/Interceptor:
- The channel will send messages through an interceptor stack. Because of this, you have the ability to - customize the way messages are sent and received, and even how membership is handled.
- You can always find out more about Apache Tribes -

-
Attributes
- -
Common Attributes
- -
AttributeDescription
className - The default value here is org.apache.catalina.tribes.group.GroupChannel and is - currently the only implementation available. -
- - -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-deployer.html b/bundledApps/tomcat/webapps/docs/config/cluster-deployer.html deleted file mode 100755 index 92cb5e24..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-deployer.html +++ /dev/null @@ -1,33 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster Deployer object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster Deployer object

Table of Contents
- -
Introduction
-

TODO - Complete documentation

- - -
Attributes
- -
Common Attributes
- -
AttributeDescription
className - -
- - -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-interceptor.html b/bundledApps/tomcat/webapps/docs/config/cluster-interceptor.html deleted file mode 100755 index b82ca604..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-interceptor.html +++ /dev/null @@ -1,144 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Channel Interceptor object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Channel Interceptor object

Table of Contents
- -
Introduction
-

- Apache Tribes supports an interceptor architecture to intercept both messages and membership notifications. - This architecture allows decoupling of logic and opens the way for some very kewl feature add ons. -

-
Available Interceptors
-

-

    -
  • org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
  • -
  • org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator
  • -
  • org.apache.catalina.tribes.group.interceptors.OrderInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.SimpleCoordinator
  • -
  • org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor
  • -
  • org.apache.catalina.tribes.group.interceptors.GzipInterceptor
  • -
-

-
Static Membership
-

- In addition to dynamic discovery, Apache Tribes also supports static membership, with membership verification. - To achieve this add the org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor - underneath the org.apache.catalina.tribes.group.interceptors.TcpFailureDetector interceptor. - Inside the StaticMembershipInterceptor you can add the static members you wish to have. - The TcpFailureDetector will do a health check on the static members,and also monitor them for crashes - so they will have the same level of notification mechanism as the members that are automatically discovered. -

-     <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
-       <Member className="org.apache.catalina.tribes.membership.StaticMember"
-                  port="5678"
-                  securePort="-1"
-                  host="tomcat01.mydomain.com"
-                  domain="staging-cluster"
-                  uniqueId="{0,1,2,3,4,5,6,7,8,9}"/>
-     </Interceptor>
-
-   
-

-
Attributes
- -
Common Attributes
-
AttributeDescription
className - Required, as there is no default -
optionFlag - If you want the interceptor to trigger on certain message depending on the message's option flag, - you can setup the interceptors flag here. - The default value is 0, meaning this interceptor will trigger on all messages. -
-
- -
org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor Attributes
-
AttributeDescription
domain - The logical cluster domain that this Interceptor accepts. - Two different type of values are possible:
- 1. Regular string values like "staging-domain" or "tomcat-cluster" will be converted into bytes - using ISO-8859-1 encoding.
- 2. byte array in string form, for example {216,123,12,3}
-
-
-
org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor Attributes
-
AttributeDescription
className - Required, This dispatcher uses JDK 1.5 java.util.concurrent package -
optionFlag - The default and hard coded value is 8 (org.apache.catalina.tribes.Channel.SEND_OPTIONS_ASYNCHRONOUS). - The dispatcher will trigger on this value only, as it is predefined by Tribes. - The other attributes are inherited from its base class org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor. -
-
-
org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor Attributes
-
AttributeDescription
className - Required, Same implementation as MessageDispatch15Interceptor, but with JDK 1.4 compliance. -
optionFlag - The default and hard coded value is 8 (org.apache.catalina.tribes.Channel.SEND_OPTIONS_ASYNCHRONOUS). - The dispatcher will trigger on this value only, as it is predefined by Tribes. -
alwaysSend - What behavior should be executed when the dispatch queue is full. If true (default), then the message is - is sent synchronously, if false an error is thrown. -
maxQueueSize - Size in bytes of the dispatch queue, the default value is 1024*1024*64 (64MB) sets the maximum queue size for the dispatch queue - if the queue fills up, one can trigger the behavior, if alwaysSend is set to true, the message will be sent synchronously - if the flag is false, an error is thrown -
-
-
org.apache.catalina.tribes.group.interceptors.TcpFailureDetector Attributes
-
AttributeDescription
-
-
org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor Attributes
-
AttributeDescription
interval - Defines the interval in number of messages when we are to report the throughput statistics. - The report is logged to the org.apache.juli.logging.LogFactory.getLog(ThroughputInterceptor.class) - logger under the INFO level. - Default value is to report every 10000 messages. -
-
- -
Nested element StaticMember Attributes
-
AttributeDescription
className - Only one implementation available:org.apache.catalina.tribes.membership.StaticMember -
port - The port that this static member listens to for cluster messages -
securePort - The secure port this static member listens to for encrypted cluster messages - default value is -1, this value means the member is not listening on a secure port -
host - The host (or network interface) that this static member listens for cluster messages. - Three different type of values are possible:
- 1. IP address in the form of "216.123.1.23"
- 2. Hostnames like "tomcat01.mydomain.com" or "tomcat01" as long as they resolve correctly
- 3. byte array in string form, for example {216,123,12,3}
-
domain - The logical cluster domain for this this static member listens for cluster messages. - Two different type of values are possible:
- 1. Regular string values like "staging-domain" or "tomcat-cluster" will be converted into bytes - using ISO-8859-1 encoding. - 2. byte array in string form, for example {216,123,12,3}
-
uniqueId - A universally uniqueId for this static member. - The values must be 16 bytes in the following form:
- 1. byte array in string form, for example {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
-
-
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-listener.html b/bundledApps/tomcat/webapps/docs/config/cluster-listener.html deleted file mode 100755 index 1124a671..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-listener.html +++ /dev/null @@ -1,47 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The ClusterListener object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The ClusterListener object

Table of Contents
- -
Introduction
-

- The org.apache.catalina.ha.ClusterListener base class - lets you listen in on messages that are received by the Cluster component. -

- -
org.apache.catalina.ha.session.ClusterSessionListener
-

- When using the DeltaManager, the messages are received by the Cluster object and are propagated to the - to the manager through this listener. -

-
org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener
-

- Listens for session Id changes. This listener is only used if you are using mod_jk - along with the jvmRoute attribute where the session Id can change. - In the event of a change, the JvmRouteBinderValve will broadcast the - session change and it will get picked up by this listener. -

-
Attributes
- -
Common Attributes
- -
AttributeDescription
className - -
- - -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-manager.html b/bundledApps/tomcat/webapps/docs/config/cluster-manager.html deleted file mode 100755 index 01010118..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-manager.html +++ /dev/null @@ -1,112 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The ClusterManager object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The ClusterManager object

Table of Contents
- -
Introduction
-

A cluster manager is an extension to Tomcat's session manager interface, - org.apache.catalina.Manager. - A cluster manager must implement the - org.apache.catalina.ha.ClusterManager and is solely responsible - for how the session is replicated.
- There are currently two different managers, the - org.apache.catalina.ha.session.DeltaManager replicates deltas of - session data to all members in the cluster. This implementation is proven and - works very well, but has a limitation as it requires the cluster members to be - homogeneous, all nodes must deploy the same applications and be exact - replicas. The org.apache.catalina.ha.session.BackupManager also - replicates deltas but only to one backup node. The location of the backup node - is known to all nodes in the cluster. It also supports heterogeneous - deployments, so the manager knows at what locations the web application is - deployed.

-
The <Manager>
-

The <Manager> element defined inside the - <Cluster> element is the template defined for all web - applications that are marked <distributable/> in their - web.xml file. However, you can still override the manager - implementation on a per web application basis, by putting the - <Manager> inside the <Context> element - either in the context.xml file or the - server.xml file.

-
Attributes
-
Common Attributes
-
AttributeDescription
className -
name - The name of this cluster manager, the name is used to identify a - session manager on a node. The name might get modified by the - Cluster element to make it unique in the container. -
notifyListenersOnReplication - Set to true if you wish to have session listeners notified - when session attributes are being replicated or removed across Tomcat - nodes in the cluster. -
expireSessionsOnShutdown - When a web application is being shutdown, Tomcat issues an expire call - to each session to notify all the listeners. If you wish for all - sessions to expire on all nodes when a shutdown occurs on one node, set - this value to true. Default value is false. -
sessionAttributeFilter - A regular expression used to filter, which session attributes will - be replicated. An attribute will only be replicated, if its name - matches this pattern. If the pattern is not set (default), all - attributes are eligible for replication. As an example, the value - ^(userName|sessionHistory)$ will only replicate the two - session attributes named userName and - sessionHistory. -
-
-
org.apache.catalina.ha.session.DeltaManager Attributes
-
AttributeDescription
expireSessionsOnShutdown - When a web application is being shutdown, Tomcat issues an expire call - to each session to notify all the listeners. If you wish for all - sessions to expire on all nodes when a shutdown occurs on one node, set - this value to true. - Default value is false. -
maxActiveSessions - The maximum number of active sessions that will be created by this - Manager, or -1 (the default) for no limit. For this manager, all - sessions are counted as active sessions irrespective if whether or not - the current node is the primary node for the session. -
notifySessionListenersOnReplication - Set to true if you wish to have session listeners notified - when sessions are created and expired across Tomcat nodes in the - cluster. -
notifyContainerListenersOnReplication - Set to true if you wish to have container listeners notified - across Tomcat nodes in the cluster. -
stateTransferTimeout - The time in seconds to wait for a session state transfer to complete - from another node when a node is starting up. - Default value is 60 seconds. -
-
-
org.apache.catalina.ha.session.BackupManager Attributes
-
AttributeDescription
mapSendOptions - The backup manager uses a replicated map, this map is sending and - receiving messages. You can setup the flag for how this map is sending - messages, the default value is 6(synchronous).
- Note that if you use asynchronous messaging it is possible for update - messages for a session to be processed by the receiving node in a - different order to the order in which they were sent. -
maxActiveSessions - The maximum number of active sessions that will be created by this - Manager, or -1 (the default) for no limit. For this manager, only - sessions where the current node is the primary node for the session are - considered active sessions. -
rpcTimeout - Timeout for RPC message used for broadcast and transfer state from - another map. - Default value is 15000 milliseconds. -
-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-membership.html b/bundledApps/tomcat/webapps/docs/config/cluster-membership.html deleted file mode 100755 index 336be01a..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-membership.html +++ /dev/null @@ -1,127 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster Membership object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster Membership object

Table of Contents
- -
Introduction
-

- The membership component in the Apache Tribes Channel is responsible - for dynamic discovery of other members(nodes) in the cluster. -

-
Default Implementation
-

- The default implementation of the cluster group notification is built on top of multicast heartbeats - sent using UDP packets to a multicast IP address. - Cluster members are grouped together by using the same multicast address/port combination. - Each member sends out a heartbeat with a given interval (frequency), and this - heartbeat is used for dynamic discovery. - In a similar fashion, if a heartbeat has not been received in a timeframe specified by dropTime - ms. a member is considered suspect and the channel and any membership listener will be notified. -

-
Attributes
- -
Multicast Attributes
- -
AttributeDescription
className -

- The default value is org.apache.catalina.tribes.membership.McastService - and is currently the only implementation. - This implementation uses multicast heartbeats for member discovery. -

-
address -

- The multicast address that the membership will broadcast its presence and listen - for other heartbeats on. The default value is 228.0.0.4 - Make sure your network is enabled for multicast traffic.
- The multicast address, in conjunction with the port is what - creates a cluster group. To divide up your farm into several different group, or to - split up QA from production, change the port or the address -
Previously known as mcastAddr. -

-
port -

- The multicast port, the default value is 45564
- The multicast port, in conjunction with the address is what - creates a cluster group. To divide up your farm into several different group, or to - split up QA from production, change the port or the address -

-
frequency -

- The frequency in milliseconds in which heartbeats are sent out. The default value is 500 ms.
- In most cases the default value is sufficient. Changing this value, simply changes the interval in between heartbeats. -

-
dropTime -

- The membership component will time out members and notify the Channel if a member fails to send a heartbeat within - a give time. The default value is 3000 ms. This means, that if a heartbeat is not received from a - member in that timeframe, the membership component will notify the cluster of this.
- On a high latency network you may wish to increase this value, to protect against false positives.
- Apache Tribes also provides a TcpFailureDetector that will - verify a timeout using a TCP connection when a heartbeat timeout has occurred. This protects against false positives. -

-
bind -

- Use this attribute if you wish to bind your multicast traffic to a specific network interface. - By default, or when this attribute is unset, it tries to bind to 0.0.0.0 and sometimes on multihomed hosts - this becomes a problem. -

-
ttl -

- The time-to-live setting for the multicast heartbeats. - This setting should be a value between 0 and 255. The default value is VM implementation specific. -

-
domain -

- Apache Tribes has the ability to logically group members into domains, by using this domain attribute. - The org.apache.catalina.tribes.Member.getDomain() method returns the value specified here. -

-
soTimeout -

- The sending and receiving of heartbeats is done on a single thread, hence to avoid blocking this thread forever, - you can control the SO_TIMEOUT value on this socket.
- If a value smaller or equal to 0 is presented, the code will default this value to frequency -

-
recoveryEnabled -

- In case of a network failure, Java multicast socket don't transparently fail over, instead the socket will continuously - throw IOException upon each receive request. When recoveryEnabled is set to true, this will close the multicast socket - and open a new socket with the same properties as defined above.
- The default is true.
-

-
recoveryCounter -

- When recoveryEnabled==true this value indicates how many - times an error has to occur before recovery is attempted. The default is - 10.
-

-
recoverySleepTime -

- When recoveryEnabled==true this value indicates how long time (in milliseconds) - the system will sleep in between recovery attempts, until we either recovered successfully or we have reached the - recoveryCounter limit. - The default is 5000 (5 seconds).
-

-
localLoopbackDisabled -

- Membership uses multicast, it will call java.net.MulticastSocket.setLoopbackMode(localLoopbackDisabled). - When localLoopbackDisabled==true multicast messages will not reach other nodes on the same local machine. - The default is false.
-

-
- - -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-receiver.html b/bundledApps/tomcat/webapps/docs/config/cluster-receiver.html deleted file mode 100755 index a71516a9..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-receiver.html +++ /dev/null @@ -1,120 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster Receiver object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster Receiver object

Table of Contents
- -
Introduction
-

- The receiver component is responsible for receiving cluster messages. - As you might notice through the configuration, is that the receiving of messages - and sending of messages are two different components, this is different from many other - frameworks, but there is a good reason for it, to decouple the logic for how messages are sent from - how messages are received.
- The receiver is very much like the Tomcat Connector, its the base of the thread pool - for incoming cluster messages. The receiver is straight forward, but all the socket settings - for incoming traffic are managed here. -

-
Blocking vs Non-Blocking Receiver
-

- The receiver supports both a non blocking, org.apache.catalina.tribes.transport.nio.NioReceiver, and a - blocking, org.apache.catalina.tribes.transport.bio.BioReceiver. It is preferred to use the non blocking receiver - to be able to grow your cluster without running into thread starvation.
- Using the non blocking receiver allows you to with a very limited thread count to serve a large number of messages. - Usually the rule is to use 1 thread per node in the cluster for small clusters, and then depending on your message frequency - and your hardware, you'll find an optimal number of threads peak out at a certain number. -

-
Attributes
-
Common Attributes
-
AttributeDescription
className - The implementation of the receiver component. Two implementations available, - org.apache.catalina.tribes.transport.nio.NioReceiver and - org.apache.catalina.tribes.transport.bio.BioReceiver.
- The org.apache.catalina.tribes.transport.nio.NioReceiver is the - preferred implementation -
address - The address (network interface) to listen for incoming traffic. - Same as the bind address. The default value is auto and translates to - java.net.InetAddress.getLocalHost().getHostAddress(). -
direct - Possible values are true or false. - Set to true if you want the receiver to use direct bytebuffers when reading data - from the sockets. -
port - The listen port for incoming data. The default value is 4000. - To avoid port conflicts the receiver will automatically bind to a free port within the range of - port <= bindPort <= port+autoBind - So for example, if port is 4000, and autoBind is set to 10, then the receiver will open up - a server socket on the first available port in the range 4000-4100. -
autoBind - Default value is 100. - Use this value if you wish to automatically avoid port conflicts the cluster receiver will try to open a - server socket on the port attribute port, and then work up autoBind number of times. -
securePort - The secure listen port. This port is SSL enabled. If this attribute is omitted no SSL port is opened up. - There default value is unset, meaning there is no SSL socket available. -
udpPort - The UDP listen port. If this attribute is omitted no UDP port is opened up. - There default value is unset, meaning there is no UDP listener available. -
selectorTimeout - The value in milliseconds for the polling timeout in the NioReceiver. On older versions of the JDK - there have been bugs, that should all now be cleared out where the selector never woke up. - The default value is a very high 5000 milliseconds. -
maxThreads - The maximum number of threads in the receiver thread pool. The default value is 6 - Adjust this value relative to the number of nodes in the cluster, the number of messages being exchanged and - the hardware you are running on. A higher value doesn't mean more efficiency, tune this value according to your - own test results. -
minThreads - Minimum number of threads to be created when the receiver is started up. Default value is 6 -
ooBInline - Boolean value for the socket OOBINLINE option. Possible values are true or false. -
rxBufSize - The receiver buffer size on the receiving sockets. Value is in bytes, the default value is 43800 bytes. -
txBufSize - The sending buffer size on the receiving sockets. Value is in bytes, the default value is 25188 bytes. -
udpRxBufSize - The receive buffer size on the datagram socket. - Default value is 25188 bytes. -
udpTxBufSize - The send buffer size on the datagram socket. - Default value is 43800 bytes. -
soKeepAlive - Boolean value for the socket SO_KEEPALIVE option. Possible values are true or false. -
soLingerOn - Boolean value to determine whether to use the SO_LINGER socket option. - Possible values are true or false. Default value is true. -
soLingerTime - Sets the SO_LINGER socket option time value. The value is in seconds. - The default value is 3 seconds. -
soReuseAddress - Boolean value for the socket SO_REUSEADDR option. Possible values are true or false. -
tcpNoDelay - Boolean value for the socket TCP_NODELAY option. Possible values are true or false. - The default value is true -
timeout - Sets the SO_TIMEOUT option on the socket. The value is in milliseconds and the default value is 3000 - milliseconds. -
useBufferPool - Boolean value whether to use a shared buffer pool of cached org.apache.catalina.tribes.io.XByteBuffer - objects. If set to true, the XByteBuffer that is used to pass a message up the channel, will be recycled at the end - of the requests. This means that interceptors in the channel must not maintain a reference to the object - after the org.apache.catalina.tribes.ChannelInterceptor#messageReceived method has exited. -
-
-
NioReceiver
-
-
BioReceiver
-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-sender.html b/bundledApps/tomcat/webapps/docs/config/cluster-sender.html deleted file mode 100755 index c7f048b9..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-sender.html +++ /dev/null @@ -1,126 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster Sender object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster Sender object

Table of Contents
- -
Introduction
-

- The channel sender component is responsible for delivering outgoing cluster messages over the network. - In the default implementation, org.apache.catalina.tribes.transport.ReplicationTransmitter, - the sender is a fairly empty shell with not much logic around a fairly complex <Transport> - component the implements the actual delivery mechanism. -

-
Concurrent Parallel Delivery
-

- In the default transport implementation, org.apache.catalina.tribes.transport.nio.PooledParallelSender, - Apache Tribes implements what we like to call "Concurrent Parallel Delivery". - This means that we can send a message to more than one destination at the same time(parallel), and - deliver two messages to the same destination at the same time(concurrent). Combine these two and we have - "Concurrent Parallel Delivery". -

-

- When is this useful? The simplest example we can think of is when part of your code is sending a 10MB message, - like a war file being deployed, and you need to push through a small 10KB message, say a session being replicated, - you don't have to wait for the 10MB message to finish, as a separate thread will push in the small message - transmission at the same time. Currently there is no interrupt, pause or priority mechanism available, but check back soon. -

-
Nested Elements
-

- The nested element <Transport> is is not required, by encouraged, as this is where - you would set all the socket options for the outgoing messages. Please see its attributes below. - There are two implementations, in a similar manner to the receiver, one is non-blocking - based and the other is built using blocking IO.
- org.apache.catalina.tribes.transport.bio.PooledMultiSender is the blocking implementation and - org.apache.catalina.tribes.transport.nio.PooledParallelSender. - Parallel delivery is not available for the blocking implementation due to the fact that it is blocking a thread on sending data. -

-
Attributes
-
Common Sender Attributes
-
AttributeDescription
className - Required, only available implementation is org.apache.catalina.tribes.transport.ReplicationTransmitter -
-
-
Common Transport Attributes
-
AttributeDescription
className - Required, an implementation of the org.apache.catalina.tribes.transport.MultiPointSender.
- Non-blocking implementation is org.apache.catalina.tribes.transport.nio.PooledParallelSender
- Blocking implementation is org.apache.catalina.tribes.transport.bio.PooledMultiSender -
rxBufSize - The receive buffer size on the socket. - Default value is 25188 bytes. -
txBufSize - The send buffer size on the socket. - Default value is 43800 bytes. -
udpRxBufSize - The receive buffer size on the datagram socket. - Default value is 25188 bytes. -
udpTxBufSize - The send buffer size on the datagram socket. - Default value is 43800 bytes. -
directBuffer - Possible values are true or false. - Set to true if you want the receiver to use direct bytebuffers when writing data - to the sockets. Default value is false -
keepAliveCount - The number of requests that can go through the socket before the socket is closed, and reopened - for the next request. The default value is -1, which is unlimited. -
keepAliveTime - The number of milliseconds a connection is kept open after its been opened. - The default value is -1, which is unlimited. -
timeout - Sets the SO_TIMEOUT option on the socket. The value is in milliseconds and the default value is 3000 - milliseconds.(3 seconds) This timeout starts when a message send attempt is starting, until the transfer has been completed. - For the NIO sockets, this will mean, that the caller can guarantee that we will not attempt sending the message - longer than this timeout value. For the blocking IO implementation, this translated directly to the soTimeout.
- A timeout will not spawn a retry attempt, in order to guarantee the return of the application thread. -
maxRetryAttempts - How many times do we retry a failed message, that received a IOException at the socket level. - The default value is 1, meaning we will retry a message that has failed once. - In other words, we will attempt a message send no more than twice. One is the original send, and one is the - maxRetryAttempts. -
ooBInline - Boolean value for the socket OOBINLINE option. Possible values are true or false. -
soKeepAlive - Boolean value for the socket SO_KEEPALIVE option. Possible values are true or false. -
soLingerOn - Boolean value to determine whether to use the SO_LINGER socket option. - Possible values are true or false. Default value is true. -
soLingerTime - Sets the SO_LINGER socket option time value. The value is in seconds. - The default value is 3 seconds. -
soReuseAddress - Boolean value for the socket SO_REUSEADDR option. Possible values are true or false. -
soTrafficClass - Sets the traffic class level for the socket, the value is between 0 and 255. - Default value is int soTrafficClass = 0x04 | 0x08 | 0x010; - Different values are defined in - java.net.Socket#setTrafficClass(int). -
tcpNoDelay - Boolean value for the socket TCP_NODELAY option. Possible values are true or false. - The default value is true -
throwOnFailedAck - Boolean value, default value is true. - If set to true, the sender will throw a org.apache.catalina.tribes.RemoteProcessException - when we receive a negative ack from the remote member. - Set to false, and Tribes will treat a positive ack the same way as a negative ack, that the message was received. -
-
-
PooledParallelSender Attributes
-
AttributeDescription
poolSize - The maximum number of concurrent connections from A to B. - The value is based on a per-destination count. - The default value is 25 -
-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster-valve.html b/bundledApps/tomcat/webapps/docs/config/cluster-valve.html deleted file mode 100755 index 23f05a35..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster-valve.html +++ /dev/null @@ -1,69 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster Valve object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster Valve object

Table of Contents
- -
Introduction
-

- A cluster valve is no different from any other Tomcat Valve. - The cluster valves are interceptors in the invocation chain for HTTP requests, and the clustering implementation - uses these valves to make intelligent decision around data and when data should be replicated. -

-

- A cluster valve must implement the org.apache.catalina.ha.ClusterValve interface. - This is a simple interface that extends the org.apache.catalina.Valve interface. -

-
org.apache.catalina.ha.tcp.ReplicationValve
- The ReplicationValve will notify the cluster at the end of a HTTP request - so that the cluster can make a decision whether there is data to be replicated or not. -
Attributes
-
AttributeDescription
className - Set value to org.apache.catalina.ha.tcp.ReplicationValve -
filter - For known file extensions or urls, you can use this Valve to notify the - cluster that the session has not been modified during this request and - the cluster doesn't have to probe the session managers for changes. If - the request matches this filter pattern, the cluster assumes there has - been no session change. An example filter would look like - filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt" - . The filter is a regular expression using - java.util.regex. -
primaryIndicator - Boolean value, so to true, and the replication valve will insert a request attribute with the name - defined by the primaryIndicatorName attribute. - The value inserted into the request attribute is either Boolean.TRUE or - Boolean.FALSE -
primaryIndicatorName - Default value is org.apache.catalina.ha.tcp.isPrimarySession - The value defined here is the name of the request attribute that contains the boolean value - if the session is primary on this server or not. -
statistics - Boolean value. Set to true if you want the valve to collect request statistics. - Default value is false -
-
-
org.apache.catalina.ha.session.JvmRouteBinderValve
- In case of a mod_jk failover, the JvmRouteBinderValve will replace the - jvmWorker attribute in the session Id, to make future requests stick to this - node. If you want failback capability, don't enable this valve, but if you want your failover to stick, - and for mod_jk not to have to keep probing the node that went down, you use this valve. -
Attributes
-
AttributeDescription
className - org.apache.catalina.ha.session.JvmRouteBinderValve -
enabled - Default value is true - Runtime attribute to turn on and off turn over of the session's jvmRoute value. -
-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/cluster.html b/bundledApps/tomcat/webapps/docs/config/cluster.html deleted file mode 100755 index df8aad20..00000000 --- a/bundledApps/tomcat/webapps/docs/config/cluster.html +++ /dev/null @@ -1,132 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Cluster object

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Cluster object

Table of Contents
- -
Introduction
-

- The tomcat cluster implementation provides session replication, context attribute replication and - cluster wide WAR file deployment. - While the Cluster configuration is fairly complex, the default configuration will work - for most people out of the box.

- The Tomcat Cluster implementation is very extensible, and hence we have exposed a myriad of options, - making the configuration seem like a lot, but don't lose faith, instead you have a tremendous control - over what is going on.

-
Engine vs Host placement
-

- You can place the <Cluster> element inside either the <Engine> - container or the <Host> container.
- Placing it in the engine, means that you will support clustering in all virtual hosts of Tomcat, - and share the messaging component. When you place the <Cluster> inside the <Engine> - element, the cluster will append the host name of each session manager to the managers name so that two contexts with - the same name but sitting inside two different hosts will be distinguishable. -

-
Context Attribute Replication
-

To configure context attribute replication, simply do this by swapping out the context implementation - used for your application context. -

<Context className="org.apache.catalina.ha.context.ReplicatedContext"/>
- This context extends the Tomcat StandardContext - so all the options from the base implementation are valid. -

-
Nested Components
-

Manager:
- The session manager element identifies what kind of session manager is used in this cluster implementation. - This manager configuration is identical to the one you would use in a regular <Context> configuration. -
The default value is the org.apache.catalina.ha.session.DeltaManager that is closely coupled with - the SimpleTcpCluster implementation. Other managers like the org.apache.catalina.ha.session.BackupManager - are/could be loosely coupled and don't rely on the SimpleTcpCluster for its data replication. -

-

Channel:
- The Channel and its sub components are all part of the IO layer - for the cluster group, and is a module in it's own that we have nick named "Tribes" -
- Any configuring and tuning of the network layer, the messaging and the membership logic - will be done in the channel and its nested components. - You can always find out more about Apache Tribes -

-

Valve:
- The Tomcat Cluster implementation uses Tomcat Valves to - track when requests enter and exit the servlet container. It uses these valves to be able to make - intelligent decisions on when to replicate data, which is always at the end of a request. -

-

Deployer:
- The Deployer component is the Tomcat Farm Deployer. It allows you to deploy and undeploy applications - cluster wide. -

-

ClusterListener:
- ClusterListener's are used to track messages sent and received using the SimpleTcpCluster. - If you wish to track messages, you can add a listener here, or you can add a valve to the channel object. -

-
Deprecated configuration options
-

- Deprecated settings: In the previous version of Tomcat you were able to control session - manager settings using manager.<property>=value. - This has been discontinued, as the way it was written interferes with - the ability to support multiple different manager classes under one cluster implementation, - as the same properties might have the different effect on different managers. -

-
Attributes
-
SimpleTcpCluster Attributes
-
AttributeDescription
className -

The main cluster class, currently only one is available, - org.apache.catalina.ha.tcp.SimpleTcpCluster -

-
channelSendOptions -

The Tribes channel send options, default is 8.
- This option is used to set the flag that all messages sent through the - SimpleTcpCluster uses. The flag decides how the messages are sent, and is a simple logical OR.
- -

-        int options= Channel.SEND_OPTIONS_ASYNCHRONOUS |
-                     Channel.SEND_OPTIONS_SYNCHRONIZED_ACK |
-                     Channel.SEND_OPTIONS_USE_ACK;
-      
- Some of the values are:
- Channel.SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0004
- Channel.SEND_OPTIONS_ASYNCHRONOUS = 0x0008
- Channel.SEND_OPTIONS_USE_ACK = 0x0002
- So to use ACK and ASYNC messaging, the flag would be 10 (8+2) or 0x000B
- Note that if you use ASYNC messaging it is possible for update messages - for a session to be processed by the receiving nodes in a different order - to the order in which they were sent. -

-
channelStartOptions -

Sets the start and stop flags for the <Channel> object used by the cluster. - The default is Channel.DEFAULT which starts all the channel services, such as - sender, receiver, multicast sender and multicast receiver. - The following flags are available today: -

-           Channel.DEFAULT = Channel.SND_RX_SEQ (1)| Channel.SND_TX_SEQ (2)| Channel.MBR_RX_SEQ (4)| Channel.MBR_TX_SEQ (8);
-         
- To start a channel without multicasting, you would want to use the value Channel.SND_RX_SEQ | Channel.SND_TX_SEQ - that equals to 3. -

-
heartbeatBackgroundEnabled -

Enable this flag don't forget to disable the channel heartbeat thread. -

-
doClusterLog -

Deprecated since 6.0.0

-

Possible values are true or false
- Value is inherited from Tomcat 5.5 and has no official meaning. - to configure logging, use the standard tomcat logging configuration. -

-
clusterLogName -

Deprecated since 6.0.0

-

- Value is inherited from Tomcat 5.5 and has no official meaning. - to configure logging, use the standard tomcat logging configuration. -

-
-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/context.html b/bundledApps/tomcat/webapps/docs/config/context.html deleted file mode 100755 index 3c40f800..00000000 --- a/bundledApps/tomcat/webapps/docs/config/context.html +++ /dev/null @@ -1,1180 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Context Container

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Context Container

Table of Contents
- -
Introduction
- -

- The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat. -

- -

The Context element represents a web - application, which is run within a particular virtual host. - Each web application is based on a Web Application Archive - (WAR) file, or a corresponding directory containing the corresponding - unpacked contents, as described in the Servlet Specification (version - 2.2 or later). For more information about web application archives, - you can download the - Servlet - Specification, and review the Tomcat - Application Developer's Guide.

- -

The web application used to process each HTTP request is selected - by Catalina based on matching the longest possible prefix of the - Request URI against the context path of each defined Context. - Once selected, that Context will select an appropriate servlet to - process the incoming request, according to the servlet mappings defined - by the web application deployment.

- -

You may define as many Context elements as you - wish. Each such Context MUST have a unique context name. In - addition, a Context must be present with a context path equal to - a zero-length string. This Context becomes the default - web application for this virtual host, and is used to process all - requests that do not match any other Context's context path.

- -
Parallel deployment
-

You may deploy multiple versions of a web application with the same - context path at the same time. The rules used to match requests to a - context version are as follows: -

-
    -
  • If no session information is present in the request, use the latest - version.
  • -
  • If session information is present in the request, check the session - manager of each version for a matching session and if one is found, use that - version.
  • -
  • If session information is present in the request but no matching session - can be found, use the latest version.
  • -
-
- -
Naming
-

When autoDeploy or deployOnStartup is used then there is a close - relationship between the context name, context path, - context version and the base file name used for the WAR - and/or directory that contains the web application when the WAR or directory - is located in the Host's appBase. When no version is specified, the rules - are: -

    -
  • contextName = contextPath
  • -
  • If the contextPath is a zero length string, the base name is ROOT
  • -
  • If the contextPath is not a zero length string, the base name is the - contextPath with the leading '/' removed and any remaining '/' - characters in the path replaced with '#'.
  • -
- When a version is specified, ##version is added to the contextName and base - name. To help clarify these rules, some examples are given in the following - table.

- - - - - - - - - -
Context PathContext VersionContext NameBase filename
/fooNone/foofoo
/foo/barNone/foo/barfoo#bar
Empty StringNoneEmpty StringROOT
/foo42/foo##42foo##42
/foo/bar42/foo/bar##42foo#bar##42
Empty String42##42ROOT##42
- -

The version component is treated as a String both for - performance reasons and to allow flexibility in versioning schemes. String - comparisons are used to determine version order. If version is not specified, - it is treated as the empty string. - Therefore, - foo.war will be treated as an earlier version than - foo##11.war and - foo##11.war will be treated as an earlier version than - foo##2.war. If using a purely numerical versioning scheme it is - recommended that zero padding is used so that foo##002.war is - treated as an earlier version than foo##011.war. -

- -

If you want to deploy a WAR file or a directory using a context path that - is not related to the base file name then one of the following options must - be used to prevent double-deployment: -

-
    -
  • Disable autoDeploy and deployOnStartup and define all - Contexts in server.xml
  • -
  • Locate the WAR and/or directory outside of the Host's appBase and use - a context.xml file with a docBase attribute to define it.
  • -
-
- -
Defining a context
-

It is NOT recommended to place <Context> elements directly in the - server.xml file. This is because it makes modifying the - Context configuration more invasive since the main - conf/server.xml file cannot be reloaded without restarting - Tomcat.

- -

Individual Context elements may be explicitly defined: -

-
    -
  • In an individual file at /META-INF/context.xml inside the - application files. Optionally (based on the Host's copyXML attribute) - this may be copied to - $CATALINA_BASE/conf/[enginename]/[hostname]/ and renamed to - application's base file name plus a ".xml" extension.
  • -
  • In individual files (with a ".xml" extension) in the - $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. - The context path and version will be derived from the base name of the file - (the file name less the .xml extension). This file will always take precedence - over any context.xml file packaged in the web application's META-INF - directory.
  • -
  • Inside a Host element in the main - conf/server.xml.
  • -
- -

Default Context elements may be defined that apply to - multiple web applications. Configuration for an individual web application - will override anything configured in one of these defaults. Any nested - elements, e.g. <Resource> elements, that are defined in a default - Context will be created once for each - Context to which the default applies. They will not be - shared between Context elements. -

-
    -
  • In the $CATALINA_BASE/conf/context.xml file: - the Context element information will be loaded by all webapps.
  • -
  • In the - $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default - file: the Context element information will be loaded by all webapps of that - host.
  • -
- -

With the exception of server.xml, files that define Context - elements may only define a single Context element. -

- -

In addition to explicitly specified Context elements, there are - several techniques by which Context elements can be created automatically - for you. See - Automatic Application Deployment and - User Web Applications - for more information.

- -

To define multiple Contexts that use a single WAR file or - directory, use one of the options described above for creating a - Context that has a path that is not related to the base file - name and create multiple Context definitions. -

-
-
Attributes
- -
Common Attributes
- -

All implementations of Context - support the following attributes:

- -
AttributeDescription
allowCasualMultipartParsing -

Set to true if Tomcat should automatically parse - multipart/form-data request bodies when HttpServletRequest.getPart* - or HttpServletRequest.getParameter* is called, even when the - target servlet isn't marked with the @MultipartConfig annotation - (See Servlet Specification 3.0, Section 3.2 for details). - Note that any setting other than false causes Tomcat - to behave in a way that is not technically spec-compliant. - The default is false

-
backgroundProcessorDelay -

This value represents the delay in seconds between the - invocation of the backgroundProcess method on this context and - its child containers, including all wrappers. - Child containers will not be invoked if their delay value is not - negative (which would mean they are using their own processing - thread). Setting this to a positive value will cause - a thread to be spawn. After waiting the specified amount of time, - the thread will invoke the backgroundProcess method on this host - and all its child containers. A context will use background - processing to perform session expiration and class monitoring for - reloading. If not specified, the default value for this attribute is - -1, which means the context will rely on the background processing - thread of its parent host.

-
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Context interface. - If not specified, the standard value (defined below) will be used.

-
cookies -

Set to true if you want cookies to be used for - session identifier communication if supported by the client (this - is the default). Set to false if you want to disable - the use of cookies for session identifier communication, and rely - only on URL rewriting by the application.

-
crossContext -

Set to true if you want calls within this application - to ServletContext.getContext() to successfully return a - request dispatcher for other web applications running on this virtual - host. Set to false (the default) in security - conscious environments, to make getContext() always - return null.

-
docBase -

The Document Base (also known as the Context - Root) directory for this web application, or the pathname - to the web application archive file (if this web application is - being executed directly from the WAR file). You may specify - an absolute pathname for this directory or WAR file, or a pathname - that is relative to the appBase directory of the - owning Host.

-

The value of this field must not be set unless the Context element is - defined in server.xml or the docBase is not located under - the Host's appBase.

-

If a symbolic link is used for docBase then changes to the - symbolic link will only be effective after a Tomcat restart or - by undeploying and redeploying the context. A context reload is not - sufficient.

-
fireRequestListenersOnForwards -

Set to true to fire any configured - ServletRequestListeners when Tomcat forwards a request. This is - primarily of use to users of CDI frameworks that use - ServletRequestListeners to configure the necessary environment for a - request. If not specified, the default value of false is - used.

-
logEffectiveWebXml -

Set to true if you want the effective web.xml used for a - web application to be logged (at INFO level) when the application - starts. The effective web.xml is the result of combining the - application's web.xml with any defaults configured by Tomcat and any - web-fragment.xml files and annotations discovered. If not specified, the - default value of false is used.

-
override -

Set to true to ignore any settings in both the global - or Host default contexts. By default, settings - from a default context will be used but may be overridden by a setting - the same attribute explicitly for the Context.

-
path -

The context path of this web application, which is - matched against the beginning of each request URI to select the - appropriate web application for processing. All of the context paths - within a particular Host must be unique. - If you specify a context path of an empty string (""), you are - defining the default web application for this Host, which - will process all requests not assigned to other Contexts.

-

This attribute must only be used when statically defining a Context - in server.xml. In all other circumstances, the path will be inferred - from the filenames used for either the .xml context file or the docBase. -

-

Even when statically defining a Context in server.xml, this attribute - must not be set unless either the docBase is not located under the - Host's appBase or both - deployOnStartup and autoDeploy are false. If - this rule is not followed, double deployment is likely to result.

-
preemptiveAuthentication -

When set to true and the user presents credentials for a - resource that is not protected by a security constraint, if the - authenticator supports preemptive authentication (the standard - authenticators provided with Tomcat do) then the user' credentials - will be processed. If not specified, the default of falseis - used. -

-
privileged -

Set to true to allow this context to use container - servlets, like the manager servlet. Use of the privileged - attribute will change the context's parent class loader to be the - Server class loader rather than the Shared class - loader. Note that in a default installation, the Common class - loader is used for both the Server and the Shared - class loaders.

-
reloadable -

Set to true if you want Catalina to monitor classes in - /WEB-INF/classes/ and /WEB-INF/lib for - changes, and automatically reload the web application if a change - is detected. This feature is very useful during application - development, but it requires significant runtime overhead and is - not recommended for use on deployed production applications. That's - why the default setting for this attribute is false. You - can use the Manager web - application, however, to trigger reloads of deployed applications - on demand.

-
resourceOnlyServlets -

Comma separated list of Servlet names (as used in - /WEB-INF/web.xml) that expect a resource to be present. - Ensures that welcome files associated with Servlets that expect a - resource to be present (such as the JSP Servlet) are not used when there - is no resource present. This prevents issues caused by the clarification - of welcome file mapping in section 10.10 of the Servlet 3.0 - specification. If the - org.apache.catalina.STRICT_SERVLET_COMPLIANCE - system property is set to - true, the default value of this attribute will be the empty - string, else the default value will be jsp.

-
sendRedirectBody -

If true, redirect responses will include a short - response body that includes details of the redirect as recommended by - RFC 2616. This is disabled by default since including a response body - may cause problems for some application component such as compression - filters.

-
sessionCookieDomain -

The domain to be used for all session cookies created for this - context. If set, this overrides any domain set by the web application. - If not set, the value specified by the web application, if any, will be - used.

-
sessionCookieName -

The name to be used for all session cookies created for this - context. If set, this overrides any name set by the web application. - If not set, the value specified by the web application, if any, will be - used, or the name JSESSIONID if the web application does - not explicitly set one.

-
sessionCookiePath -

The path to be used for all session cookies created for this - context. If set, this overrides any path set by the web application. - If not set, the value specified by the web application will be used, or - the context path used if the web application does not explicitly set - one. To configure all web application to use an empty path (this can be - useful for portlet specification implementations) set this attribute to - / in the global CATALINA_BASE/conf/context.xml - file.

-
sessionCookiePathUsesTrailingSlash -

Some browsers, such as IE, will send a session cookie for a context - with a path of /foo with a request to /foobar. To prevent this, Tomcat - will add a trailing slash to the path associated with the session cookie - so, in the above example, the cookie path becomes /foo/. However, with a - cookie path of /foo/, IE will no longer send the cookie with a request - to /foo. This should not be a problem unless there is a servlet mapped - to /*. In this case this feature will need to be disabled. The default - value for this attribute is true. To disable this feature, - set the attribute to false.

-
swallowAbortedUploads -

Set to false if Tomcat should not read any additional request - body data for aborted uploads and instead abort the client connection. - This setting is used in the following situations: -

-
    -
  • the size of the request body is larger than the - maxPostSize configured in the connector
  • -
  • the size limit of a MultiPart upload is reached
  • -
  • the servlet sets the response status to 413 (Request Entity Too - Large)
  • -
-

- Not reading the additional data will free the request processing thread - more quickly. Unfortunately most HTTP clients will not read the response - if they can not write the full request.

-

The default is true, so additional data will be - read.

-

Note if an error occurs during the request processing that triggers - a 5xx response, any unread request data will always be ignored and the - client connection will be closed once the error response has been - written.

-
swallowOutput -

If the value of this flag is true, the bytes output to - System.out and System.err by the web application will be redirected to - the web application logger. If not specified, the default value - of the flag is false.

-
tldNamespaceAware -

If the value of this flag is true, the TLD files - XML validation will be namespace-aware. If you turn this flag on, - you should probably also turn tldValidation on. If the - org.apache.catalina.STRICT_SERVLET_COMPLIANCE - system property is set to - true, the default value of this attribute will be - true, else the default value will be false. - Setting this attribute to true will incur a performance - penalty.

-
tldValidation -

If the value of this flag is true, the TLD files - will be XML validated on context startup. If the - org.apache.catalina.STRICT_SERVLET_COMPLIANCE - system property is set to - true, the default value of this attribute will be - true, else the default value will be false. - Setting this attribute to true will incur a performance - penalty.

-
useHttpOnly -

Should the HttpOnly flag be set on session cookies to prevent client - side script from accessing the session ID? Defaults to - true.

-
wrapperClass -

Java class name of the org.apache.catalina.Wrapper - implementation class that will be used for servlets managed by this - Context. If not specified, a standard default value will be used.

-
xmlNamespaceAware -

If the value of this flag is true, the validation of - XML files will be namespace-aware. If you turn this flag on, - you should probably also turn xmlValidation on. If - the org.apache.catalina.STRICT_SERVLET_COMPLIANCE - system property is set to - true, the default value of this attribute will be - true, else the default value will be false. - Setting this attribute to true will incur a performance - penalty.

-
xmlValidation -

If the value of this flag is true, the XML files - will be validated on context startup. If the - org.apache.catalina.STRICT_SERVLET_COMPLIANCE - system property is set to - true, the default value of this attribute will be - true, else the default value will be false. - Setting this attribute to true will incur a performance - penalty.

-
- -
- - -
Standard Implementation
- -

The standard implementation of Context is - org.apache.catalina.core.StandardContext. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
addWebinfClassesResources -

This attribute controls if, in addition to static resources being - served from META-INF/resources inside web application JAR - files, static resources are also served from - WEB-INF/classes/META-INF/resources. This only applies to - web applications with a major version of 3 or higher. Since this is a - proprietary extension to the Servlet 3 specification, it is disabled by - default. To enable this feature, set the attribute to true. -

-
aliases -

This attribute provides a list of external locations from which to - load resources for this context. The list of aliases should be of - the form "/aliasPath1=docBase1,/aliasPath2=docBase2" where - aliasPathN must include a leading '/' and - docBaseN must be an absolute path to either a .war file or - a directory.

-

Whitespace is permitted around both the , and - = delimiters, and will be trimmed. Therefore, an aliases - attribute with the value "/aliasPath1 = docBase1,
- /aliasPath2= docBase2"
is equivalent to - "/aliasPath1=docBase1,/aliasPath2=docBase2"

-

A resource will be searched for in the first docBaseN - for which aliasPathN is a leading path segment of the - resource. If there is no such alias, then the resource will be searched - in the usual way.

-

Using '/' as an aliasPath is not allowed. Consider using - docBase instead.

-

These external locations will not be emptied if the context - is un-deployed.

-

A more powerful feature (for development only) is - Virtual webapp.

-
allowLinking -

If the value of this flag is true, symlinks will be - allowed inside the web application, pointing to resources outside the - web application base path. If not specified, the default value - of the flag is false.

-

NOTE: This flag MUST NOT be set to true on the Windows platform - (or any other OS which does not have a case sensitive filesystem), - as it will disable case sensitivity checks, allowing JSP source code - disclosure, among other security problems.

-
antiJARLocking -

If true, the Tomcat classloader will take extra measures to avoid - JAR file locking when resources are accessed inside JARs through URLs. - This will impact startup time of applications, but could prove to be - useful on platforms or configurations where file locking can occur. - If not specified, the default value is false.

- -

antiJARLocking is a subset of - antiResourceLocking and therefore, to prevent duplicate - work and possible issues, only one of these attributes should be set - to true at any one time.

-
antiResourceLocking -

If true, Tomcat will prevent any file locking. - This will significantly impact startup time of applications, - but allows full webapp hot deploy and undeploy on platforms - or configurations where file locking can occur. - If not specified, the default value is false.

- -

antiJARLocking is a subset of - antiResourceLocking and therefore, to prevent duplicate - work and possible issues, only one of these attributes should be set - to true at any one time.

- -

Please note that setting this to true has some side - effects, including the disabling of JSP reloading in a running server: - see - Bugzilla 37668.

- -

Please note that setting this flag to true in applications that are - outside the appBase for the Host (the webapps directory - by default) will cause the application to be deleted on - Tomcat shutdown. You probably don't want to do this, so think twice - before setting antiResourceLocking=true on a webapp that's outside the - appBase for its Host.

-
cacheMaxSize -

Maximum size of the static resource cache in kilobytes. - If not specified, the default value is 10240 - (10 megabytes).

-
cacheObjectMaxSize -

Maximum size of the static resource that will be placed in the cache. - If not specified, the default value is 512 - (512 kilobytes). If this value is greater than - cacheMaxSize/20 it will be reduced to - cacheMaxSize/20.

-
cacheTTL -

Amount of time in milliseconds between cache entries revalidation. - If not specified, the default value is 5000 - (5 seconds).

-
cachingAllowed -

If the value of this flag is true, the cache for static - resources will be used. If not specified, the default value - of the flag is true.

-
clearReferencesHttpClientKeepAliveThread -

If true and an sun.net.www.http.HttpClient - keep-alive timer thread has been started by this web application and is - still running, Tomcat will change the context class loader for that - thread from the current WebappClassLoader to - WebappClassLoader#parent to prevent a memory leak. Note - that the keep-alive timer thread will stop on its own once the - keep-alives all expire however, on a busy system that might not happen - for some time. If not specified, the default value of - true will be used.

-
clearReferencesStatic -

If true, Tomcat attempts to null out any static or final - fields from loaded classes when a web application is stopped as a work - around for apparent garbage collection bugs and application coding - errors. There have been some issues reported with log4j when this - is true. Applications without memory leaks using recent - JVMs should operate correctly with this attribute set to - false. If not specified, the default value of - false will be used.

-
clearReferencesStopThreads -

If true, Tomcat attempts to terminate threads that have - been started by the web application. Stopping threads is performed via - the deprecated (for good reason) Thread.stop() method and - is likely to result in instability. As such, enabling this should be - viewed as an option of last resort in a development environment and is - not recommended in a production environment. If not specified, the - default value of false will be used.

-
clearReferencesStopTimerThreads -

If true, Tomcat attempts to terminate - java.util.Timer threads that have been started by the web - application. Unlike standard threads, timer threads can be stopped - safely although there may still be side-effects for the application. If - not specified, the default value of false will be used.

-
jndiExceptionOnFailedWrite -

If true, any attempt by an application to modify the - provided JNDI context with a call to bind(), unbind(), - createSubContext(), destroySubContext() or close() will trigger a - javax.naming.OperationNotSupportedException as required by - section EE.5.3.4 of the Java EE specification. This exception can be - disabled by setting this attribute to true in which case any calls to - modify the JNDI context will return without making any changes - and methods that return values will return null. If not - specified, the specification compliant default of true will - be used.

-
processTlds -

Whether the context should process TLDs on startup. The default - is true. The false setting is intended for special cases - that know in advance TLDs are not part of the webapp.

-
renewThreadsWhenStoppingContext -

If true, when this context is stopped, Tomcat renews all - the threads from the thread pool that was used to serve this context. - This also requires that the - ThreadLocalLeakPreventionListener be configured in - server.xml and that the threadRenewalDelay - property of the Executor be >=0. If not specified, the - default value of true will be used.

-
unloadDelay -

Number of ms that the container will wait for servlets to unload. - If not specified, the default value is 2000 ms.

-
unpackWAR -

If false, the unpackWARs attribute of - the owning Host will be overridden and the WAR - file will not be unpacked. If true, the value of the owning - Host's unpackWARs - attribute will determine if the WAR is unpacked. If not specified, the - default value is true. Note that WAR files located outside - of a Host's appBase are - never unpacked.

-
useNaming -

Set to true (the default) to have Catalina enable a - JNDI InitialContext for this web application that is - compatible with Java2 Enterprise Edition (J2EE) platform - conventions.

-
workDir -

Pathname to a scratch directory to be provided by this Context - for temporary read-write use by servlets within the associated web - application. This directory will be made visible to servlets in the - web application by a servlet context attribute (of type - java.io.File) named - javax.servlet.context.tempdir as described in the - Servlet Specification. If not specified, a suitable directory - underneath $CATALINA_BASE/work will be provided.

-
- -
- - -
Nested Components
- -

You can nest at most one instance of the following utility components - by nesting a corresponding element inside your Context - element:

-
    -
  • Loader - - Configure the web application class loader that will be used to load - servlet and bean classes for this web application. Normally, the - default configuration of the class loader will be sufficient.
  • -
  • Manager - - Configure the session manager that will be used to create, destroy, - and persist HTTP sessions for this web application. Normally, the - default configuration of the session manager will be sufficient.
  • -
  • Realm - - Configure a realm that will allow its - database of users, and their associated roles, to be utilized solely - for this particular web application. If not specified, this web - application will utilize the Realm associated with the owning - Host or Engine.
  • -
  • Resources - - Configure the resource manager that will be used to access the static - resources associated with this web application. Normally, the - default configuration of the resource manager will be sufficient.
  • -
  • WatchedResource - The auto deployer will monitor the - specified static resource of the web application for updates, and will - reload the web application if it is updated. The content of this element - must be a string.
  • -
- -
Special Features
- - -
Logging
- -

A context is associated with the - org.apache.catalina.core.ContainerBase.[enginename].[hostname].[path] - log category. Note that the brackets are actually part of the name, don't omit them.

- -
- - -
Access Logs
- -

When you run a web server, one of the output files normally generated - is an access log, which generates one line of information for - each request processed by the server, in a standard format. Catalina - includes an optional Valve implementation that - can create access logs in the same standard format created by web servers, - or in any number of custom formats.

- -

You can ask Catalina to create an access log for all requests - processed by an Engine, - Host, or Context - by nesting a Valve element like this:

- -
-<Context>
-  ...
-  <Valve className="org.apache.catalina.valves.AccessLogValve"
-         prefix="localhost_access_log." suffix=".txt"
-         pattern="common"/>
-  ...
-</Context>
-
- -

See Access Log Valve - for more information on the configuration attributes that are - supported.

- -
- - -
Automatic Context Configuration
- -

If you use the standard Context implementation, - the following configuration steps occur automatically when Catalina - is started, or whenever this web application is reloaded. No special - configuration is required to enable this feature.

- -
    -
  • If you have not declared your own Loader - element, a standard web application class loader will be configured. -
  • -
  • If you have not declared your own Manager - element, a standard session manager will be configured.
  • -
  • If you have not declared your own Resources - element, a standard resources manager will be configured.
  • -
  • The web application properties listed in conf/web.xml - will be processed as defaults for this web application. This is used - to establish default mappings (such as mapping the *.jsp - extension to the corresponding JSP servlet), and other standard - features that apply to all web applications.
  • -
  • The web application properties listed in the - /WEB-INF/web.xml resource for this web application - will be processed (if this resource exists).
  • -
  • If your web application has specified security constraints that might - require user authentication, an appropriate Authenticator that - implements the login method you have selected will be configured.
  • -
- -
- - -
Context Parameters
- -

You can configure named values that will be made visible to the - web application as servlet context initialization parameters by nesting - <Parameter> elements inside this element. For - example, you can create an initialization parameter like this:

-
-<Context>
-  ...
-  <Parameter name="companyName" value="My Company, Incorporated"
-         override="false"/>
-  ...
-</Context>
-
- -

This is equivalent to the inclusion of the following element in the - web application deployment descriptor (/WEB-INF/web.xml): -

-
-<context-param>
-  <param-name>companyName</param-name>
-  <param-value>My Company, Incorporated</param-value>
-</context-param>
-
-

but does not require modification of the deployment descriptor - to customize this value.

- -

The valid attributes for a <Parameter> element - are as follows:

- -
AttributeDescription
description -

Optional, human-readable description of this context - initialization parameter.

-
name -

The name of the context initialization parameter to be created.

-
override -

Set this to false if you do not want - a <context-param> for the same parameter name, - found in the web application deployment descriptor, to override the - value specified here. By default, overrides are allowed.

-
value -

The parameter value that will be presented to the application - when requested by calling - ServletContext.getInitParameter().

-
- -
- - -
Environment Entries
- -

You can configure named values that will be made visible to the - web application as environment entry resources, by nesting - <Environment> entries inside this element. For - example, you can create an environment entry like this:

-
-<Context>
-  ...
-  <Environment name="maxExemptions" value="10"
-         type="java.lang.Integer" override="false"/>
-  ...
-</Context>
-
- -

This is equivalent to the inclusion of the following element in the - web application deployment descriptor (/WEB-INF/web.xml): -

-
-<env-entry>
-  <env-entry-name>maxExemptions</env-entry-name>
-  <env-entry-value>10</env-entry-value>
-  <env-entry-type>java.lang.Integer</env-entry-type>
-</env-entry>
-
-

but does not require modification of the deployment descriptor - to customize this value.

- -

The valid attributes for an <Environment> element - are as follows:

- -
AttributeDescription
description -

Optional, human-readable description of this environment entry.

-
name -

The name of the environment entry to be created, relative to the - java:comp/env context.

-
override -

Set this to false if you do not want - an <env-entry> for the same environment entry name, - found in the web application deployment descriptor, to override the - value specified here. By default, overrides are allowed.

-
type -

The fully qualified Java class name expected by the web application - for this environment entry. Must be one of the legal values for - <env-entry-type> in the web application deployment - descriptor: java.lang.Boolean, - java.lang.Byte, java.lang.Character, - java.lang.Double, java.lang.Float, - java.lang.Integer, java.lang.Long, - java.lang.Short, or java.lang.String.

-
value -

The parameter value that will be presented to the application - when requested from the JNDI context. This value must be convertable - to the Java type defined by the type attribute.

-
- -
- - -
Lifecycle Listeners
- -

If you have implemented a Java object that needs to know when this - Context is started or stopped, you can declare it by - nesting a Listener element inside this element. The - class name you specify must implement the - org.apache.catalina.LifecycleListener interface, and - the class must be packaged in a jar and placed in the - $CATALINA_HOME/lib directory. - It will be notified about the occurrence of the corresponding - lifecycle events. Configuration of such a listener looks like this:

- -
-<Context>
-  ...
-  <Listener className="com.mycompany.mypackage.MyListener" ... >
-  ...
-</Context>
-
- -

Note that a Listener can have any number of additional properties - that may be configured from this element. Attribute names are matched - to corresponding JavaBean property names using the standard property - method naming patterns.

- -
- - -
Request Filters
- -

You can ask Catalina to check the IP address, or host name, on every - incoming request directed to the surrounding - Engine, Host, or - Context element. The remote address or name - will be checked against configured "accept" and/or "deny" - filters, which are defined using java.util.regex Regular - Expression syntax. Requests that come from locations that are - not accepted will be rejected with an HTTP "Forbidden" error. - Example filter declarations:

- -
-<Context>
-  ...
-  <Valve className="org.apache.catalina.valves.RemoteHostValve"
-         allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
-  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
-         deny="192\.168\.1\.\d+"/>
-  ...
-</Context>
-
- -

See Remote Address Filter - and Remote Host Filter for - more information about the configuration options that are supported.

- -
- - -
Resource Definitions
- -

You can declare the characteristics of the resource - to be returned for JNDI lookups of <resource-ref> and - <resource-env-ref> elements in the web application - deployment descriptor. You MUST also define - the needed resource parameters as attributes of the Resource - element, to configure the object factory to be used (if not known to Tomcat - already), and the properties used to configure that object factory.

- -

For example, you can create a resource definition like this:

-
-<Context>
-  ...
-  <Resource name="jdbc/EmployeeDB" auth="Container"
-            type="javax.sql.DataSource"
-     description="Employees Database for HR Applications"/>
-  ...
-</Context>
-
- -

This is equivalent to the inclusion of the following element in the - web application deployment descriptor (/WEB-INF/web.xml):

-
-<resource-ref>
-  <description>Employees Database for HR Applications</description>
-  <res-ref-name>jdbc/EmployeeDB</res-ref-name>
-  <res-ref-type>javax.sql.DataSource</res-ref-type>
-  <res-auth>Container</res-auth>
-</resource-ref>
-
- -

but does not require modification of the deployment - descriptor to customize this value.

- -

The valid attributes for a <Resource> element - are as follows:

- -
AttributeDescription
auth -

Specify whether the web Application code signs on to the - corresponding resource manager programatically, or whether the - Container will sign on to the resource manager on behalf of the - application. The value of this attribute must be - Application or Container. This - attribute is required if the web application - will use a <resource-ref> element in the web - application deployment descriptor, but is optional if the - application uses a <resource-env-ref> instead.

-
closeMethod -

Name of the zero-argument method to call on a singleton resource when - it is no longer required. This is intended to speed up clean-up of - resources that would otherwise happen as part of garbage collection. - This attribute is ignored if the singleton attribute is - false. If not specificed, no default is defined and no close method will - be called.

-
description -

Optional, human-readable description of this resource.

-
name -

The name of the resource to be created, relative to the - java:comp/env context.

-
scope -

Specify whether connections obtained through this resource - manager can be shared. The value of this attribute must be - Shareable or Unshareable. By default, - connections are assumed to be shareable.

-
singleton -

Specify whether this resource definition is for a singleton resource, - i.e. one where there is only a single instance of the resource. If this - attribute is true, multiple JNDI lookups for this resource - will return the same object. If this attribute is false, - multiple JNDI lookups for this resource will return different objects. - This attribute must be true for - javax.sql.DataSource resources to enable JMX registration - of the DataSource. The value of this attribute must be true - or false. By default, this attribute is true. -

-
type -

The fully qualified Java class name expected by the web - application when it performs a lookup for this resource.

-
- - -
- - -
Resource Links
- -

This element is used to create a link to a global JNDI resource. Doing - a JNDI lookup on the link name will then return the linked global - resource.

- -

For example, you can create a resource link like this:

-
-<Context>
-  ...
-  <ResourceLink name="linkToGlobalResource"
-            global="simpleValue"
-            type="java.lang.Integer"
-  ...
-</Context>
-
- -

The valid attributes for a <ResourceLink> element - are as follows:

- -
AttributeDescription
global -

The name of the linked global resource in the - global JNDI context.

-
name -

The name of the resource link to be created, relative to the - java:comp/env context.

-
type -

The fully qualified Java class name expected by the web - application when it performs a lookup for this resource link.

-
factory -

The fully qualified Java class name for the class creating these objects. - This class should implement the javax.naming.spi.ObjectFactory interface.

-
- -

When the attribute factory="org.apache.naming.factory.DataSourceLinkFactory" the resource link can be used with - two additional attributes to allow a shared data source to be used with different credentials. - When these two additional attributes are used in combination with the javax.sql.DataSource - type, different contexts can share a global data source with different credentials. - Under the hood, what happens is that a call to getConnection() - is simply translated to a call - getConnection(username, password) on the global data source. This is an easy way to get code to be transparent to what schemas are being used, - yet be able to control connections (or pools) in the global configuration. -

-
AttributeDescription
username -

username value for the getConnection(username, password) - call on the linked global DataSource. -

-
password -

password value for the getConnection(username, password) - call on the linked global DataSource. -

-
-

Shared Data Source Example:

-

Warning: This feature works only if the global DataSource -supports getConnection(username, password) method. -Apache Commons DBCP pool that -Tomcat uses by default does not support it. See its Javadoc for -BasicDataSource class. -Apache Tomcat JDBC pool does support it, -but by default this support is disabled and can be enabled by -alternateUsernameAllowed attribute. See its documentation -for details.

-
-<GlobalNamingResources>
-  ...
-  <Resource name="sharedDataSource"
-            global="sharedDataSource"
-            type="javax.sql.DataSource"
-            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
-            alternateUsernameAllowed="true"
-            username="bar"
-            password="barpass"
-            ...
-  ...
-</GlobalNamingResources>
-
-<Context path="/foo"...>
-  ...
-  <ResourceLink
-            name="appDataSource"
-            global="sharedDataSource"
-            type="javax.sql.DataSource"
-            factory="org.apache.naming.factory.DataSourceLinkFactory"
-            username="foo"
-            password="foopass"
-  ...
-</Context>
-<Context path="/bar"...>
-  ...
-  <ResourceLink
-            name="appDataSource"
-            global="sharedDataSource"
-            type="javax.sql.DataSource"
-  ...
-</Context>
-
-

When a request for getConnection() is made in the - /foo context, the request is translated into - getConnection("foo","foopass"), - while a request in the /bar gets passed straight through.

-
- -
Transaction
- -

You can declare the characteristics of the UserTransaction - to be returned for JNDI lookup for java:comp/UserTransaction. - You MUST define an object factory class to instantiate - this object as well as the needed resource parameters as attributes of the - Transaction - element, and the properties used to configure that object factory.

- -

The valid attributes for the <Transaction> element - are as follows:

- -
AttributeDescription
factory -

The class name for the JNDI object factory.

-
- -
- -
Virtual webapp
-

During development it may be more productive to avoid copying files (static - resources, JSPs, classes, jars...) and configure tomcat to use files from their - source locations. To do that, several customisations of the context configuration are - required:

-
    -
  • The VirtualDirContext implementation of - Resources
  • -
  • The VirtualWebappLoader implementation of - Loader
  • -
  • scanAllDirectories="true" on the JarScanner
  • -
-

To illustrate this feature, here is an example of a standard maven webapp source tree:

-
-mywebapp/
-         src/
-             main/
-                  java/
-                  resources/
-                  webapp/
-                         WEB-INF/
-                                 classes/
-         target/
-                classes/
-
-

To deploy such an application (assuming it also uses the log4j maven artefact), - the context configuration looks like:

-
-<Context path="/mywebapp" docBase="/Users/theuser/mywebapp/src/main/webapp" >
-  <Resources className="org.apache.naming.resources.VirtualDirContext"
-    extraResourcePaths=
-      "/WEB-INF/classes=/Users/theuser/mywebapp/target/classes" />
-  <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
-    virtualClasspath="/Users/theuser/mywebapp/target/classes;
-      /Users/theuser/.m2/repository/log4j/log4j/1.2.15/log4j-1.2.15.jar" />
-  <JarScanner scanAllDirectories="true" />
-</Context>
-
- -

Here is another example where the webapp serves pictures under /pictures and movies - under /movies and also depends on another maven project mylib that would normally - produce a jar to be packaged in WEB-INF/lib:

-
-mylib/
-      src/
-          main/
-               java/
-               resources/
-                         META-INF/
-                                  resources/
-      target/
-             classes/
-mymovies/
-mypictures/
-mywebapp/
-         src/
-             main/
-                  java/
-                  resources/
-                  webapp/
-                         WEB-INF/
-                                 classes/
-         target/
-                classes/
-
-

The configuration is:

- -
-<Context path="/mywebapp" docBase="/Users/theuser/mywebapp/src/main/webapp" > -
- <Resources className="org.apache.naming.resources.VirtualDirContext" -

extraResourcePaths="/WEB-INF/classes=/Users/theuser/mywebapp/target/classes,/pictures=/Users/theuser/mypictures,/movies=/Users/theuser/mymovies"

-
/>
-
-
- <Loader className="org.apache.catalina.loader.VirtualWebappLoader" -

virtualClasspath="/Users/theuser/mywebapp/target/classes;/Users/theuser/mylib/target/classes;/Users/theuser/.m2/repository/log4j/log4j/1.2.15/log4j-1.2.15.jar"

-
/>
-
-
- <JarScanner scanAllDirectories="true" /> -
-</Context> -
- -

Note that resources in mylib/target/classes/META-INF/resources/ are mapped to / as - required by servlet 3 specification.

-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/engine.html b/bundledApps/tomcat/webapps/docs/config/engine.html deleted file mode 100755 index 4f38924f..00000000 --- a/bundledApps/tomcat/webapps/docs/config/engine.html +++ /dev/null @@ -1,218 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Engine Container

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Engine Container

Table of Contents
- -
Introduction
- -

The Engine element represents the entire request - processing machinery associated with a particular Catalina - Service. It receives and processes - all requests from one or more Connectors, - and returns the completed response to the Connector for ultimate - transmission back to the client.

- -

Exactly one Engine element MUST be nested inside - a Service element, following all of the - corresponding Connector elements associated with this Service.

- -
Attributes
- -
Common Attributes
- -

All implementations of Engine - support the following attributes:

- -
AttributeDescription
backgroundProcessorDelay -

This value represents the delay in seconds between the - invocation of the backgroundProcess method on this engine and - its child containers, including all hosts and contexts. - Child containers will not be invoked if their delay value is not - negative (which would mean they are using their own processing - thread). Setting this to a positive value will cause - a thread to be spawn. After waiting the specified amount of time, - the thread will invoke the backgroundProcess method on this engine - and all its child containers. If not specified, the default value for - this attribute is 10, which represent a 10 seconds delay.

-
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Engine interface. - If not specified, the standard value (defined below) will be used.

-
defaultHost -

The default host name, which identifies the - Host that will process requests directed - to host names on this server, but which are not configured in - this configuration file. This name MUST match the name - attributes of one of the Host elements - nested immediately inside.

-
jvmRoute -

Identifier which must be used in load balancing scenarios to enable - session affinity. The identifier, which must be unique across all - Tomcat servers which participate in the cluster, will be appended to - the generated session identifier, therefore allowing the front end - proxy to always forward a particular session to the same Tomcat - instance.

-
name -

Logical name of this Engine, used in log and error messages. When - using multiple Service elements in the same - Server, each Engine MUST be assigned a unique - name.

-
startStopThreads -

The number of threads this Engine will use to start - child Host elements in parallel. The special - value of 0 will result in the value of - Runtime.getRuntime().availableProcessors() being used. - Negative values will result in - Runtime.getRuntime().availableProcessors() + value being - used unless this is less than 1 in which case 1 thread will be used. If - not specified, the default value of 1 will be used.

-
- -
- - -
Standard Implementation
- -

The standard implementation of Engine is - org.apache.catalina.core.StandardEngine. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
- -
- - -
Nested Components
- -

You can nest one or more Host elements inside - this Engine element, each representing a different virtual - host associated with this server. At least one Host - is required, and one of the nested Hosts MUST - have a name that matches the name specified for the - defaultHost attribute, listed above.

- -

You can nest at most one instance of the following utility components - by nesting a corresponding element inside your Engine - element:

-
    -
  • Realm - - Configure a realm that will allow its - database of users, and their associated roles, to be shared across all - Hosts and Contexts - nested inside this Engine, unless overridden by a - Realm configuration at a lower level.
  • -
- -
Special Features
- - -
Logging
- -

An engine is associated with the - org.apache.catalina.core.ContainerBase.[enginename] - log category. Note that the brackets are actually part of the name, - don't omit them.

- -
- - -
Access Logs
- -

When you run a web server, one of the output files normally generated - is an access log, which generates one line of information for - each request processed by the server, in a standard format. Catalina - includes an optional Valve implementation that - can create access logs in the same standard format created by web servers, - or in any number of custom formats.

- -

You can ask Catalina to create an access log for all requests - processed by an Engine, - Host, or Context - by nesting a Valve element like this:

- -
-<Engine name="Standalone" ...>
-  ...
-  <Valve className="org.apache.catalina.valves.AccessLogValve"
-         prefix="catalina_access_log." suffix=".txt"
-         pattern="common"/>
-  ...
-</Engine>
-
- -

See Access Log Valve - for more information on the configuration attributes that are - supported.

- -
- - -
Lifecycle Listeners
- -

If you have implemented a Java object that needs to know when this - Engine is started or stopped, you can declare it by - nesting a Listener element inside this element. The - class name you specify must implement the - org.apache.catalina.LifecycleListener interface, and - it will be notified about the occurrence of the corresponding - lifecycle events. Configuration of such a listener looks like this:

- -
-<Engine name="Standalone" ...>
-  ...
-  <Listener className="com.mycompany.mypackage.MyListener" ... >
-  ...
-</Engine>
-
- -

Note that a Listener can have any number of additional properties - that may be configured from this element. Attribute names are matched - to corresponding JavaBean property names using the standard property - method naming patterns.

- -
- - -
Request Filters
- -

You can ask Catalina to check the IP address, or host name, on every - incoming request directed to the surrounding - Engine, Host, or - Context element. The remote address or name - will be checked against configured "accept" and/or "deny" - filters, which are defined using java.util.regex Regular - Expression syntax. Requests that come from locations that are - not accepted will be rejected with an HTTP "Forbidden" error. - Example filter declarations:

- -
-<Engine name="Standalone" ...>
-  ...
-  <Valve className="org.apache.catalina.valves.RemoteHostValve"
-         allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
-  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
-         deny="192\.168\.1\.\d+"/>
-  ...
-</Engine>
-
- -

See Remote Address Filter - and Remote Host Filter for - more information about the configuration options that are supported.

- -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/executor.html b/bundledApps/tomcat/webapps/docs/config/executor.html deleted file mode 100755 index e2e1b516..00000000 --- a/bundledApps/tomcat/webapps/docs/config/executor.html +++ /dev/null @@ -1,83 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Executor (thread pool)

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Executor (thread pool)

Table of Contents
- -
Introduction
- -

The Executor represents a thread pool that can be shared - between components in Tomcat. Historically there has been a thread pool per - connector created but this allows you to share a thread pool, between (primarly) connector - but also other components when those get configured to support executors

- - -

The executor has to implement the org.apache.catalina.Executor interface.

- -

The executor is a nested element to the Service element. - And in order for it to be picked up by the connectors, the Executor element has to appear - prior to the Connector element in server.xml

-
Attributes
- -
Common Attributes
- -

All implementations of Executor - support the following attributes:

- -
AttributeDescription
className -

The class of the implementation. The implementation has to implement the - org.apache.catalina.Executor interface. - This interface ensures that the object can be referenced through its name attribute - and that implements Lifecycle, so that it can be started and stopped with the container. - The default value for the className is org.apache.catalina.core.StandardThreadExecutor

-
name -

The name used to reference this pool in other places in server.xml. - The name is required and must be unique.

-
- -
- -
Standard Implementation
- -

- The default implementation supports the following attributes:

- -
AttributeDescription
threadPriority -

(int) The thread priority for threads in the executor, the default is Thread.NORM_PRIORITY

-
daemon -

(boolean) Whether the threads should be daemon threads or not, the default is true

-
namePrefix -

(String) The name prefix for each thread created by the executor. - The thread name for an individual thread will be namePrefix+threadNumber

-
maxThreads -

(int) The max number of active threads in this pool, default is 200

-
minSpareThreads -

(int) The minimum number of threads always kept alive, default is 25

-
maxIdleTime -

(int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less - or equal to minSpareThreads. Default value is 60000(1 minute)

-
maxQueueSize -

(int) The maximum number of runnable tasks that can queue up awaiting - execution before we reject them. Default value is Integer.MAX_VALUE

-
prestartminSpareThreads -

(boolean) Whether minSpareThreads should be started when starting the Executor or not, - the default is false

-
threadRenewalDelay -

After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time, - this delay is observed between 2 threads being renewed. Value is in ms, default value is 1000ms. - If negative, threads are not renewed.

-
- - -
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/filter.html b/bundledApps/tomcat/webapps/docs/config/filter.html deleted file mode 100755 index efbe861b..00000000 --- a/bundledApps/tomcat/webapps/docs/config/filter.html +++ /dev/null @@ -1,1192 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - Container Provided Filters

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

Container Provided Filters

Table of Contents
- -
Introduction
- -

Tomcat provides a number of Filters which may be - configured for use with all web applications using - $CATALINA_BASE/conf/web.xml or may be configured for individual - web applications by configuring them in the application's - WEB-INF/web.xml. Each filter is described below.

- -
-

This description uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -
Add Default Character Set Filter
- -
Introduction
- -

The HTTP specification is clear that if no character set is specified for - media sub-types of the "text" media type, the ISO-8859-1 character set must - be used. However, browsers may attempt to auto-detect the character set. - This may be exploited by an attacker to perform an XSS attack. Internet - Explorer has this behaviour by default. Other browsers have an option to - enable it.

- -

This filter prevents the attack by explicitly setting a character set. - Unless the provided character set is explicitly overridden by the user the - browser will adhere to the explicitly set character set, thus preventing the - XSS attack.

- -
- -
Filter Class Name
- -

The filter class name for the Add Default Character Set Filter is - org.apache.catalina.filters.AddDefaultCharsetFilter - .

- -
- -
Initialisation parameters
- -

The Add Default Character Set Filter supports the following initialization - parameters:

- -
AttributeDescription
encoding -

Name of the character set which should be set, if no other character set - was set explicitly by a Servlet. This parameter has two special values - default and system. A value of system - uses the JVM wide default character set, which is usually set by locale. - A value of default will use ISO-8859-1.

-
- -
- -
CSRF Prevention Filter
- -
Introduction
- -

This filter provides basic CSRF protection for a web application. The - filter assumes that it is mapped to /* and that all URLs - returned to the client are encoded via a call to - HttpServletResponse#encodeRedirectURL(String) or - HttpServletResponse#encodeURL(String).

- -

This filter prevents CSRF by generating a nonce and storing it in the - session. URLs are also encoded with the same nonce. When the next request is - received the nonce in the request is compared to the nonce in the session - and only if they are the same is the request allowed to continue.

- -
- -
Filter Class Name
- -

The filter class name for the CSRF Prevention Filter is - org.apache.catalina.filters.CsrfPreventionFilter - .

- -
- -
Initialisation parameters
- -

The CSRF Prevention Filter supports the following initialisation - parameters:

- -
AttributeDescription
entryPoints -

A comma separated list of URLs that will not be tested for the - presence of a valid nonce. They are used to provide a way to navigate - back to a protected application after having navigated away from it. - Entry points will be limited to HTTP GET requests and should not trigger - any security sensitive actions.

-
nonceCacheSize -

The number of previously issued nonces that will be cached on a LRU - basis to support parallel requests, limited use of the refresh and back - in the browser and similar behaviors that may result in the submission - of a previous nonce rather than the current one. If not set, the default - value of 5 will be used.

-
randomClass -

The name of the class to use to generate nonces. The class must be an - instance of java.util.Random. If not set, the default value - of java.security.SecureRandom will be used.

-
- -
- -
Expires Filter
- -
Introduction
- -

- ExpiresFilter is a Java Servlet API port of Apache - mod_expires. - This filter controls the setting of the Expires HTTP header and the - max-age directive of the Cache-Control HTTP header in - server responses. The expiration date can set to be relative to either the - time the source file was last modified, or to the time of the client access. -

- -

- These HTTP headers are an instruction to the client about the document's - validity and persistence. If cached, the document may be fetched from the - cache rather than from the source until this time has passed. After that, the - cache copy is considered "expired" and invalid, and a new copy must - be obtained from the source. -

-

- To modify Cache-Control directives other than max-age (see - RFC - 2616 section 14.9), you can use other servlet filters or Apache Httpd - mod_headers module. -

- -
- -
Basic configuration sample
-

- Basic configuration to add 'Expires' and 'Cache-Control: max-age=' - headers to images, css and javascript. -

- -
-<filter>
- <filter-name>ExpiresFilter</filter-name>
- <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
- <init-param>
-    <param-name>ExpiresByType image</param-name>
-    <param-value>access plus 10 minutes</param-value>
- </init-param>
- <init-param>
-    <param-name>ExpiresByType text/css</param-name>
-    <param-value>access plus 10 minutes</param-value>
- </init-param>
- <init-param>
-    <param-name>ExpiresByType application/javascript</param-name>
-    <param-value>access plus 10 minutes</param-value>
- </init-param>
-</filter>
-...
-<filter-mapping>
- <filter-name>ExpiresFilter</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
-</filter-mapping>
-
-    
- -
- -
Alternate Syntax
-

- The ExpiresDefault and ExpiresByType directives can also be - defined in a more readable syntax of the form: -

- -
-<init-param>
- <param-name>ExpiresDefault</param-name>
- <param-value><base> [plus] {<num>   <type>}*</param-value>
-</init-param>
-
-<init-param>
- <param-name>ExpiresByType type</param-name>
- <param-value><base> [plus]   {<num> <type>}*</param-value>
-</init-param>
-
-<init-param>
- <param-name>ExpiresByType type;encoding</param-name>
- <param-value><base> [plus]   {<num> <type>}*</param-value>
-</init-param>
-    
-

- where <base> is one of: -

    -
  • access
  • -
  • now (equivalent to 'access')
  • -
  • modification
  • -
-

-

- The plus keyword is optional. <num> should be an - integer value (acceptable to Integer.parseInt()), and - <type> is one of: -

    -
  • years
  • -
  • months
  • -
  • weeks
  • -
  • days
  • -
  • hours
  • -
  • minutes
  • -
  • seconds
  • -
- For example, any of the following directives can be used to make documents - expire 1 month after being accessed, by default: -

- -
-<init-param>
- <param-name>ExpiresDefault</param-name>
- <param-value>access plus 1 month</param-value>
-</init-param>
-
-<init-param>
- <param-name>ExpiresDefault</param-name>
- <param-value>access plus 4 weeks</param-value>
-</init-param>
-
-<init-param>
- <param-name>ExpiresDefault</param-name>
- <param-value>access plus 30 days</param-value>
-</init-param>
-
-

-The expiry time can be fine-tuned by adding several ' -<num> <type>' clauses: -

- -
-<init-param>
- <param-name>ExpiresByType text/html</param-name>
- <param-value>access plus 1 month 15   days 2 hours</param-value>
-</init-param>
-
-<init-param>
- <param-name>ExpiresByType image/gif</param-name>
- <param-value>modification plus 5 hours 3   minutes</param-value>
-</init-param>
-    
-

- Note that if you use a modification date based setting, the Expires - header will not be added to content that does not come from - a file on disk. This is due to the fact that there is no modification time - for such content. -

-
- -
Expiration headers generation eligibility
-

- A response is eligible to be enriched by ExpiresFilter if : -

    -
  1. no expiration header is defined (Expires header or the - max-age directive of the Cache-Control header),
  2. -
  3. the response status code is not excluded by the directive - ExpiresExcludedResponseStatusCodes,
  4. -
  5. the Content-Type of the response matches one of the types - defined the in ExpiresByType directives or the - ExpiresDefault directive is defined.
  6. -
-

-

- Note : If Cache-Control header contains other directives than - max-age, they are concatenated with the max-age directive - that is added by the ExpiresFilter. -

- -
- -
Expiration configuration selection
-

- The expiration configuration if elected according to the following algorithm: -

    -
  1. ExpiresByType matching the exact content-type returned by - HttpServletResponse.getContentType() possibly including the charset - (e.g. 'text/xml;charset=UTF-8'),
  2. -
  3. ExpiresByType matching the content-type without the charset if - HttpServletResponse.getContentType() contains a charset (e.g. ' - text/xml;charset=UTF-8' -> 'text/xml'),
  4. -
  5. ExpiresByType matching the major type (e.g. substring before - '/') of HttpServletResponse.getContentType() - (e.g. 'text/xml;charset=UTF-8' -> 'text - '),
  6. -
  7. ExpiresDefault
  8. -
-

-
- -
Filter Class Name
- -

The filter class name for the Expires Filter is - org.apache.catalina.filters.ExpiresFilter - .

- -
- -
Initialisation parameters
- -

The Expires Filter supports the following - initialisation parameters:

- -
AttributeDescription
ExpiresExcludedResponseStatusCodes -

- This directive defines the http response status codes for which the - ExpiresFilter will not generate expiration headers. By default, the - 304 status code ("Not modified") is skipped. The - value is a comma separated list of http status codes. -

-

- This directive is useful to ease usage of ExpiresDefault directive. - Indeed, the behavior of 304 Not modified (which does specify a - Content-Type header) combined with Expires and - Cache-Control:max-age= headers can be unnecessarily tricky to - understand. -

-

See sample below the table

-
ExpiresByType <content-type> -

- This directive defines the value of the Expires header and the - max-age directive of the Cache-Control header generated for - documents of the specified type (e.g., text/html). The second - argument sets the number of seconds that will be added to a base time to - construct the expiration date. The Cache-Control: max-age is - calculated by subtracting the request time from the expiration date and - expressing the result in seconds. -

-

- The base time is either the last modification time of the file, or the time - of the client's access to the document. Which should be used is - specified by the <code> field; M means that the - file's last modification time should be used as the base time, and - A means the client's access time should be used. The duration - is expressed in seconds. A2592000 stands for - access plus 30 days in alternate syntax. -

-

- The difference in effect is subtle. If M (modification in - alternate syntax) is used, all current copies of the document in all caches - will expire at the same time, which can be good for something like a weekly - notice that's always found at the same URL. If A ( - access or now in alternate syntax) is used, the date of - expiration is different for each client; this can be good for image files - that don't change very often, particularly for a set of related - documents that all refer to the same images (i.e., the images will be - accessed repeatedly within a relatively short timespan). -

-

- Note: When the content type includes a charset (e.g. - 'ExpiresByType text/xml;charset=utf-8'), Tomcat removes blank chars - between the ';' and the 'charset' keyword. Due to this, - configuration of an expiration with a charset must not include - such a space character. -

-

See sample below the table

-

- It overrides, for the specified MIME type only, any - expiration date set by the ExpiresDefault directive. -

-

- You can also specify the expiration time calculation using an alternate - syntax, described earlier in this document. -

-
ExpiresDefault -

- This directive sets the default algorithm for calculating the - expiration time for all documents in the affected realm. It can be - overridden on a type-by-type basis by the ExpiresByType directive. See the - description of that directive for details about the syntax of the - argument, and the "alternate syntax" - description as well. -

-
- -

Sample : exclude response status codes 302, 500 and 503

- -
-<init-param>
- <param-name>ExpiresExcludedResponseStatusCodes</param-name>
- <param-value>302, 500, 503</param-value>
-</init-param>
-
- -

Sample for ExpiresByType initialization parameter

- -
-<init-param>
-   <param-name>ExpiresByType text/html</param-name>
-   <param-value>access plus 1 month 15   days 2 hours</param-value>
-</init-param>
-
-<init-param>
-   <!-- 2592000 seconds = 30 days -->
-   <param-name>ExpiresByType image/gif</param-name>
-   <param-value>A2592000</param-value>
-</init-param>
-         
- -
- -
Troubleshooting
-

- To troubleshoot, enable logging on the - org.apache.catalina.filters.ExpiresFilter. -

-

- Extract of logging.properties -

- -
-org.apache.catalina.filters.ExpiresFilter.level = FINE
-    
-

- Sample of initialization log message: -

- -
-Mar 26, 2010 2:01:41 PM org.apache.catalina.filters.ExpiresFilter init
-FINE: Filter initialized with configuration ExpiresFilter[
- excludedResponseStatusCode=[304],
- default=null,
- byType={
-    image=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]],
-    text/css=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]],
-    text/javascript=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]]}]
-    
-

- Sample of per-request log message where ExpiresFilter adds an - expiration date is below. The message is on one line and is wrapped here - for better readability. -

- -
-Mar 26, 2010 2:09:47 PM org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody
-FINE: Request "/tomcat.gif" with response status "200"
- content-type "image/gif", set expiration date 3/26/10 2:19 PM
-    
-

- Sample of per-request log message where ExpiresFilter does not add - an expiration date: -

- -
-Mar 26, 2010 2:10:27 PM org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody
-FINE: Request "/docs/config/manager.html" with response status "200"
- content-type "text/html", no expiration configured
-    
-
- -
Remote Address Filter
- -
Introduction
- -

The Remote Address Filter allows you to compare the - IP address of the client that submitted this request against one or more - regular expressions, and either allow the request to continue - or refuse to process the request from this client.

- -

The syntax for regular expressions is different than that for - 'standard' wildcard matching. Tomcat uses the java.util.regex - package. Please consult the Java documentation for details of the - expressions supported.

- -

Note: There is a caveat when using this filter with - IPv6 addresses. Format of the IP address that this valve is processing - depends on the API that was used to obtain it. If the address was obtained - from Java socket using Inet6Address class, its format will be - x:x:x:x:x:x:x:x. That is, the IP address for localhost - will be 0:0:0:0:0:0:0:1 instead of the more widely used - ::1. Consult your access logs for the actual value.

- -

See also: Remote Host Filter.

-
- -
Filter Class Name
- -

The filter class name for the Remote Address Filter is - org.apache.catalina.filters.RemoteAddrFilter - .

- -
- -
Initialisation parameters
- -

The Remote Address Filter supports the following - initialisation parameters:

- -
AttributeDescription
allow -

A regular expression (using java.util.regex) that the - remote client's IP address is compared to. If this attribute - is specified, the remote address MUST match for this request to be - accepted. If this attribute is not specified, all requests will be - accepted UNLESS the remote address matches a deny - pattern.

-
deny -

A regular expression (using java.util.regex) that the - remote client's IP address is compared to. If this attribute - is specified, the remote address MUST NOT match for this request to be - accepted. If this attribute is not specified, request acceptance is - governed solely by the accept attribute.

-
denyStatus -

HTTP response status code that is used when rejecting denied - request. The default value is 403. For example, - it can be set to the value 404.

-
- -
- -
Example
-

To allow access only for the clients connecting from localhost:

-
-    <filter>
-      <filter-name>Remote Address Filter</filter-name>
-      <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
-      <init-param>
-        <param-name>allow</param-name>
-        <param-value>127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1</param-value>
-      </init-param>
-    </filter>
-    <filter-mapping>
-      <filter-name>Remote Address Filter</filter-name>
-      <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-
- -
Remote Host Filter
- -
Introduction
- -

The Remote Host Filter allows you to compare the - hostname of the client that submitted this request against one or more - regular expressions, and either allow the request to continue - or refuse to process the request from this client.

- -

The syntax for regular expressions is different than that for - 'standard' wildcard matching. Tomcat uses the java.util.regex - package. Please consult the Java documentation for details of the - expressions supported.

- -

Note: This filter processes the value returned by - method ServletRequest.getRemoteHost(). To allow the method - to return proper host names, you have to enable "DNS lookups" feature on - a Connector.

- -

See also: Remote Address Filter, - HTTP Connector configuration.

-
- -
Filter Class Name
- -

The filter class name for the Remote Address Filter is - org.apache.catalina.filters.RemoteHostFilter - .

- -
- -
Initialisation parameters
- -

The Remote Host Filter supports the following - initialisation parameters:

- -
AttributeDescription
allow -

A regular expression (using java.util.regex) that the - remote client's hostname is compared to. If this attribute - is specified, the remote hostname MUST match for this request to be - accepted. If this attribute is not specified, all requests will be - accepted UNLESS the remote hostname matches a deny - pattern.

-
deny -

A regular expression (using java.util.regex) that the - remote client's hostname is compared to. If this attribute - is specified, the remote hostname MUST NOT match for this request to be - accepted. If this attribute is not specified, request acceptance is - governed solely by the accept attribute.

-
denyStatus -

HTTP response status code that is used when rejecting denied - request. The default value is 403. For example, - it can be set to the value 404.

-
- -
- -
Remote IP Filter
- -
Introduction
- -

Tomcat port of - mod_remoteip, - this filter replaces the apparent client remote IP address and hostname for - the request with the IP address list presented by a proxy or a load balancer - via a request headers (e.g. "X-Forwarded-For").

- -

Another feature of this filter is to replace the apparent scheme - (http/https), server port and request.secure with the scheme presented - by a proxy or a load balancer via a request header - (e.g. "X-Forwarded-Proto").

- -

If used in conjunction with Remote Address/Host filters then this filter - should be defined first to ensure that the correct client IP address is - presented to the Remote Address/Host filters.

- -

Note: By default this filter has no effect on the - values that are written into access log. The original values are restored - when request processing leaves the filter and that always happens earlier - than access logging. To pass the remote address, remote host, server port - and protocol values set by this filter to the access log, - they are put into request attributes. Publishing these values here - is enabled by default, but AccessLogValve should be explicitly - configured to use them. See documentation for - requestAttributesEnabled attribute of - AccessLogValve.

- -

The names of request attributes that are set by this filter - and can be used by access logging are the following:

- -
    -
  • org.apache.catalina.AccessLog.RemoteAddr
  • -
  • org.apache.catalina.AccessLog.RemoteHost
  • -
  • org.apache.catalina.AccessLog.Protocol
  • -
  • org.apache.catalina.AccessLog.ServerPort
  • -
- -
- -
Filter Class Name
- -

The filter class name for the Remote IP Filter is - org.apache.catalina.filters.RemoteIpFilter - .

- -
- -
Basic configuration to handle 'x-forwarded-for'
-

- The filter will process the x-forwarded-for http header. -

-
-      <filter>
-        <filter-name>RemoteIpFilter</filter-name>
-        <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
-      </filter>
-
-      <filter-mapping>
-        <filter-name>RemoteIpFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-        <dispatcher>REQUEST</dispatcher>
-      </filter-mapping>
-    
-
- -
Basic configuration to handle 'x-forwarded-for' and 'x-forwarded-proto'
- -

- The filter will process x-forwarded-for and - x-forwarded-proto http headers. Expected value for the - x-forwarded-proto header in case of SSL connections is - https (case insensitive).

-
-      <filter>
-        <filter-name>RemoteIpFilter</filter-name>
-        <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
-        <init-param>
-          <param-name>protocolHeader</param-name>
-          <param-value>x-forwarded-proto</param-value>
-        </init-param>
-      </filter>
-
-      <filter-mapping>
-        <filter-name>RemoteIpFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-        <dispatcher>REQUEST</dispatcher>
-      </filter-mapping>
-    
-
- -
Advanced configuration with internal proxies
-

RemoteIpFilter configuration:

-
-     <filter>
-       <filter-name>RemoteIpFilter</filter-name>
-       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
-       <init-param>
-         <param-name>allowedInternalProxies</param-name>
-         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpHeader</param-name>
-         <param-value>x-forwarded-for</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpProxiesHeader</param-name>
-         <param-value>x-forwarded-by</param-value>
-       </init-param>
-       <init-param>
-         <param-name>protocolHeader</param-name>
-         <param-value>x-forwarded-proto</param-value>
-       </init-param>
-     </filter>
-    
-

Request values: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyValue Before RemoteIpFilterValue After RemoteIpFilter
request.remoteAddr 192.168.0.10 140.211.11.130
request.header['x-forwarded-for'] 140.211.11.130, 192.168.0.10 null
request.header['x-forwarded-by'] null null
request.header['x-forwarded-proto'] https https
request.scheme http https
request.secure false true
request.serverPort 80 443
-

-

- Note : x-forwarded-by header is null because only - internal proxies has been traversed by the request. - x-forwarded-for is null because all the proxies are - trusted or internal. -

-
- - -
Advanced configuration with trusted proxies
-

RemoteIpFilter configuration:

-
-     <filter>
-       <filter-name>RemoteIpFilter</filter-name>
-       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
-       <init-param>
-         <param-name>allowedInternalProxies</param-name>
-         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpHeader</param-name>
-         <param-value>x-forwarded-for</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpProxiesHeader</param-name>
-         <param-value>x-forwarded-by</param-value>
-       </init-param>
-       <init-param>
-         <param-name>trustedProxies</param-name>
-         <param-value>proxy1|proxy2</param-value>
-       </init-param>
-     </filter>
-    
-

Request values: - - - - - - - - - - - - - - - - - - - - -
PropertyValue Before RemoteIpFilterValue After RemoteIpFilter
request.remoteAddr 192.168.0.10 140.211.11.130
request.header['x-forwarded-for'] 140.211.11.130, proxy1, proxy2 null
request.header['x-forwarded-by'] null proxy1, proxy2
-

-

- Note : proxy1 and proxy2 are both trusted proxies that - come in x-forwarded-for header, they both are migrated in - x-forwarded-by header. x-forwarded-for is null - because all the proxies are trusted or internal. -

-
- -
Advanced configuration with internal and trusted proxies
-

RemoteIpFilter configuration:

-
-     <filter>
-       <filter-name>RemoteIpFilter</filter-name>
-       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
-       <init-param>
-         <param-name>allowedInternalProxies</param-name>
-         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpHeader</param-name>
-         <param-value>x-forwarded-for</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpProxiesHeader</param-name>
-         <param-value>x-forwarded-by</param-value>
-       </init-param>
-       <init-param>
-         <param-name>trustedProxies</param-name>
-         <param-value>proxy1|proxy2</param-value>
-       </init-param>
-     </filter>
-    
-

Request values: - - - - - - - - - - - - - - - - - - - - -
PropertyValue Before RemoteIpFilterValue After RemoteIpFilter
request.remoteAddr 192.168.0.10 140.211.11.130
request.header['x-forwarded-for'] 140.211.11.130, proxy1, proxy2, 192.168.0.10 null
request.header['x-forwarded-by'] null proxy1, proxy2
-

-

- Note : proxy1 and proxy2 are both trusted proxies that - come in x-forwarded-for header, they both are migrated in - x-forwarded-by header. As 192.168.0.10 is an internal - proxy, it does not appear in x-forwarded-by. - x-forwarded-for is null because all the proxies are - trusted or internal. -

-
- -
Advanced configuration with an untrusted proxy
- -

RemoteIpFilter configuration:

-
-     <filter>
-       <filter-name>RemoteIpFilter</filter-name>
-       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
-       <init-param>
-         <param-name>allowedInternalProxies</param-name>
-         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpHeader</param-name>
-         <param-value>x-forwarded-for</param-value>
-       </init-param>
-       <init-param>
-         <param-name>remoteIpProxiesHeader</param-name>
-         <param-value>x-forwarded-by</param-value>
-       </init-param>
-       <init-param>
-         <param-name>trustedProxies</param-name>
-         <param-value>proxy1|proxy2</param-value>
-       </init-param>
-     </filter>
-    
-

Request values: - - - - - - - - - - - - - - - - - - - - -
PropertyValue Before RemoteIpFilterValue After RemoteIpFilter
request.remoteAddr 192.168.0.10 untrusted-proxy
request.header['x-forwarded-for'] 140.211.11.130, untrusted-proxy, proxy1 140.211.11.130
request.header['x-forwarded-by'] null proxy1
-

-

- Note : x-forwarded-by holds the trusted proxy proxy1. - x-forwarded-by holds 140.211.11.130 because - untrusted-proxy is not trusted and thus, we can not trust that - untrusted-proxy is the actual remote ip. - request.remoteAddr is untrusted-proxy that is an IP - verified by proxy1. -

-
- -
Initialisation parameters
- -

The Remote IP Filter supports the - following initialisation parameters:

- -
AttributeDescription
remoteIpHeader -

Name of the HTTP Header read by this valve that holds the list of - traversed IP addresses starting from the requesting client. If not - specified, the default of x-forwarded-for is used.

-
internalProxies -

Regular expression (using java.util.regex) that a - proxy's IP address must match to be considered an internal proxy. - Internal proxies that appear in the remoteIpHeader will - be trusted and will not appear in the proxiesHeader - value. If not specified the default value of - 10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3} - will be used.

-
proxiesHeader -

Name of the HTTP header created by this valve to hold the list of - proxies that have been processed in the incoming - remoteIpHeader. If not specified, the default of - x-forwarded-by is used.

-
requestAttributesEnabled -

Set to true to set the request attributes used by - AccessLog implementations to override the values returned by the - request for remote address, remote host, server port and protocol. - If not set, the default value of true will be used.

-
trustedProxies -

Regular expression (using java.util.regex) that a - proxy's IP address must match to be considered an trusted proxy. - Trusted proxies that appear in the remoteIpHeader will - be trusted and will appear in the proxiesHeader value. - If not specified, no proxies will be trusted.

-
protocolHeader -

Name of the HTTP Header read by this valve that holds the protocol - used by the client to connect to the proxy. If not specified, the - default of null is used.

-
portHeader -

Name of the HTTP Header read by this valve that holds the port - used by the client to connect to the proxy. If not specified, the - default of null is used.

-
protocolHeaderHttpsValue -

Value of the protocolHeader to indicate that it is - an HTTPS request. If not specified, the default of https is - used.

-
httpServerPort -

Value returned by ServletRequest.getServerPort() - when the protocolHeader indicates http - protocol and no portHeader is present. If not - specified, the default of 80 is used.

-
httpsServerPort -

Value returned by ServletRequest.getServerPort() - when the protocolHeader indicates https - protocol and no portHeader is present. If not - specified, the default of 443 is used.

-
changeLocalPort -

If true, the value returned by - ServletRequest.getLocalPort() and - ServletRequest.getServerPort() is modified by the this - filter. If not specified, the default of false is used.

-
- - -
- -
Request Dumper Filter
- -
Introduction
- -

The Request Dumper Filter logs information from the request and response - objects and is intended to be used for debugging purposes. When using this - Filter, it is recommended that the - org.apache.catalina.filter.RequestDumperFilter logger is - directed to a dedicated file and that the - org.apache.juli.VerbatimFormmater is used.

- -

WARNING: Using this filter has side-effects. The - output from this filter includes any parameters included with the request. - The parameters will be decoded using the default platform encoding. Any - subsequent calls to request.setCharacterEncoding() within - the web application will have no effect.

- -
- -
Filter Class Name
- -

The filter class name for the Request Dumper Filter is - org.apache.catalina.filters.RequestDumperFilter - .

- -
- -
Initialisation parameters
- -

The Request Dumper Filter does not support any initialization - parameters.

- -
- -
Sample Configuration
- -

The following entries in a web application's web.xml would enable the - Request Dumper filter for all requests for that web application. If the - entries were added to CATALINA_BASE/conf/web.xml, the Request - Dumper Filter would be enabled for all web applications.

-
-<filter>
-    <filter-name>requestdumper</filter-name>
-    <filter-class>
-        org.apache.catalina.filters.RequestDumperFilter
-    </filter-class>
-</filter>
-<filter-mapping>
-    <filter-name>requestdumper</filter-name>
-    <url-pattern>*</url-pattern>
-</filter-mapping>
-    
- -

The following entries in CATALINA_BASE/conf/logging.properties would - create a separate log file for the Request Dumper Filter output.

-
-# To this configuration below, 1request-dumper.org.apache.juli.FileHandler
-# also needs to be added to the handlers property near the top of the file
-1request-dumper.org.apache.juli.FileHandler.level = INFO
-1request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
-1request-dumper.org.apache.juli.FileHandler.prefix = request-dumper.
-1request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
-org.apache.catalina.filters.RequestDumperFilter.level = INFO
-org.apache.catalina.filters.RequestDumperFilter.handlers = \
-  1request-dumper.org.apache.juli.FileHandler
-    
-
-
Set Character Encoding Filter
- -
Introduction
- -

User agents don't always include character encoding information in - requests. Depending on the how the request is processed, usually the - default encoding of ISO-8859-1 is used. This is not always - desirable. This filter provides options for setting that encoding or - forcing it to a particular value. Essentially this filter calls - ServletRequest.setCharacterEncoding() method.

- -

Effectively the value set by this filter is used when parsing parameters - in a POST request, if parameter parsing occurs later than this filter. Thus - the order of filter mappings is important. Note that the encoding for GET - requests is not set here, but on a Connector. See - CharacterEncoding page in the FAQ for details.

- -
- -
Filter Class Name
- -

The filter class name for the Set Character Encoding Filter is - org.apache.catalina.filters.SetCharacterEncodingFilter - .

- -
- -
Initialisation parameters
- -

The Set Character Encoding Filter supports the following initialization - parameters:

- -
AttributeDescription
encoding -

Name of the character encoding which should be set.

-
ignore -

Determines if any character encoding specified by the user agent is - ignored. If this attribute is true, any value provided by - the user agent is ignored. If false, the encoding is only - set if the user agent did not specify an encoding. The default value - is false.

-
- -
- -
WebDAV Fix Filter
- -
Introduction
- -

Microsoft operating systems have two WebDAV clients. One is used with - port 80, the other is used for all other ports. The implementation used with - port 80 does not adhere to the WebDAV specification and fails when trying to - communicate with the Tomcat WebDAV Servlet. This Filter provides a fix for - this by forcing the use of the WebDAV implementation that works, even when - connecting via port 80.

- -
- -
Filter Class Name
- -

The filter class name for the WebDAV Fix Filter is - org.apache.catalina.filters.WebdavFixFilter - .

- -
- -
Initialisation parameters
- -

The WebDAV Fix Filter does not support any initialization parameters.

- -
- -
Failed Request Filter
- -
Introduction
- -

This filter triggers parameters parsing in a request and rejects the - request if some parameters were skipped during parameter parsing because - of parsing errors or request size limitations (such as - maxParameterCount attribute in a - Connector). - This filter can be used to ensure that none parameter values submitted by - client are lost.

- -

Note that parameter parsing may consume the body of an HTTP request, so - caution is needed if the servlet protected by this filter uses - request.getInputStream() or request.getReader() - calls. In general the risk of breaking a web application by adding this - filter is not so high, because parameter parsing does check content type - of the request before consuming the request body.

- -

Note, that for the POST requests to be parsed correctly, a - SetCharacterEncodingFilter filter must be configured above - this one. See CharacterEncoding page in the FAQ for details.

- -

The request is rejected with HTTP status code 400 (Bad Request).

- -
- -
Filter Class Name
- -

The filter class name for the Failed Request Filter is - org.apache.catalina.filters.FailedRequestFilter - .

- -
- -
Initialisation parameters
- -

The Failed Request Filter does not support any initialization parameters.

- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/globalresources.html b/bundledApps/tomcat/webapps/docs/config/globalresources.html deleted file mode 100755 index 0b59631e..00000000 --- a/bundledApps/tomcat/webapps/docs/config/globalresources.html +++ /dev/null @@ -1,209 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The GlobalNamingResources Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The GlobalNamingResources Component

Table of Contents
- -
Introduction
- -

The GlobalNamingResources element defines the global - JNDI resources for the Server.

- -

These resources are listed in the server's global JNDI resource context. - This context is distinct from the per-web-application JNDI contexts - described in - the JNDI Resources HOW-TO. - The resources defined in this element are not visible in - the per-web-application contexts unless you explicitly link them with - <ResourceLink> elements. -

- -
Attributes
- -
Nested Components
- -
Special Features
- - -
Environment Entries
- -

You can configure named values that will be made visible to all - web applications as environment entry resources by nesting - <Environment> entries inside this element. For - example, you can create an environment entry like this:

-
-<GlobalNamingResources ...>
-  ...
-  <Environment name="maxExemptions" value="10"
-         type="java.lang.Integer" override="false"/>
-  ...
-</GlobalNamingResources>
-
- -

This is equivalent to the inclusion of the following element in the - web application deployment descriptor (/WEB-INF/web.xml): -

-
-<env-entry>
-  <env-entry-name>maxExemptions</env-entry-name>
-  <env-entry-value>10</env-entry-value>
-  <env-entry-type>java.lang.Integer</env-entry-type>
-</env-entry>
-
-

but does not require modification of the deployment descriptor - to customize this value.

- -

The valid attributes for an <Environment> element - are as follows:

- -
AttributeDescription
description -

Optional, human-readable description of this environment entry.

-
name -

The name of the environment entry to be created, relative to the - java:comp/env context.

-
override -

Set this to false if you do not want - an <env-entry> for the same environment entry name, - found in the web application deployment descriptor, to override the - value specified here. By default, overrides are allowed.

-
type -

The fully qualified Java class name expected by the web application - for this environment entry. Must be one of the legal values for - <env-entry-type> in the web application deployment - descriptor: java.lang.Boolean, - java.lang.Byte, java.lang.Character, - java.lang.Double, java.lang.Float, - java.lang.Integer, java.lang.Long, - java.lang.Short, or java.lang.String.

-
value -

The parameter value that will be presented to the application - when requested from the JNDI context. This value must be convertable - to the Java type defined by the type attribute.

-
- -
- - -
Resource Definitions
- -

You can declare the characteristics of resources - to be returned for JNDI lookups of <resource-ref> and - <resource-env-ref> elements in the web application - deployment descriptor by defining them in this element and then linking - them with <ResourceLink> - elements - in the <Context> element. - - You MUST also define any other needed parameters using - attributes on the Resource element, to configure - the object factory to be used (if not known to Tomcat already), and - the properties used to configure that object factory.

- -

For example, you can create a resource definition like this:

-
-<GlobalNamingResources ...>
-  ...
-  <Resource name="jdbc/EmployeeDB" auth="Container"
-            type="javax.sql.DataSource"
-     description="Employees Database for HR Applications"/>
-  ...
-</GlobalNamingResources>
-
- -

This is equivalent to the inclusion of the following element in the - web application deployment descriptor (/WEB-INF/web.xml):

-
-<resource-ref>
-  <description>Employees Database for HR Applications</description>
-  <res-ref-name>jdbc/EmployeeDB</res-ref-name>
-  <res-ref-type>javax.sql.DataSource</res-ref-type>
-  <res-auth>Container</res-auth>
-</resource-ref>
-
- -

but does not require modification of the deployment - descriptor to customize this value.

- -

The valid attributes for a <Resource> element - are as follows:

- -
AttributeDescription
auth -

Specify whether the web Application code signs on to the - corresponding resource manager programmatically, or whether the - Container will sign on to the resource manager on behalf of the - application. The value of this attribute must be - Application or Container. This - attribute is required if the web application - will use a <resource-ref> element in the web - application deployment descriptor, but is optional if the - application uses a <resource-env-ref> instead.

-
description -

Optional, human-readable description of this resource.

-
name -

The name of the resource to be created, relative to the - java:comp/env context.

-
scope -

Specify whether connections obtained through this resource - manager can be shared. The value of this attribute must be - Shareable or Unshareable. By default, - connections are assumed to be shareable.

-
type -

The fully qualified Java class name expected by the web - application when it performs a lookup for this resource.

-
- - -
- -
Resource Links
-

Use <ResourceLink> - elements to link resources from the global context into - per-web-application contexts. Here is an example of making a custom - factory available to an application, based on the example definition in the - - JNDI Resource HOW-TO: -

- -
-      
-        <Context>
-          <ResourceLink
-            name="bean/MyBeanFactory"
-            global="bean/MyBeanFactory"
-            type="com.mycompany.MyBean"
-          />
-        </Context>
-      
-    
- -
- -
Transaction
- -

You can declare the characteristics of the UserTransaction - to be returned for JNDI lookup for java:comp/UserTransaction. - You MUST define an object factory class to instantiate - this object as well as the needed resource parameters as attributes of the - Transaction - element, and the properties used to configure that object factory.

- -

The valid attributes for the <Transaction> element - are as follows:

- -
AttributeDescription
factory -

The class name for the JNDI object factory.

-
- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/host.html b/bundledApps/tomcat/webapps/docs/config/host.html deleted file mode 100755 index 1d4cce29..00000000 --- a/bundledApps/tomcat/webapps/docs/config/host.html +++ /dev/null @@ -1,614 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Host Container

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Host Container

Table of Contents
- -
Introduction
- -

The Host element represents a virtual host, - which is an association of a network name for a server (such as - "www.mycompany.com" with the particular server on which Tomcat is running. - For clients to be able to connect to a Tomcat server using its network name, - this name must be registered in the Domain Name Service (DNS) server - that manages the Internet domain you belong to - contact your Network - Administrator for more information.

- -

In many cases, System Administrators wish to associate more than - one network name (such as www.mycompany.com and - company.com) with the same virtual host and applications. - This can be accomplished using the Host - Name Aliases feature discussed below.

- -

One or more Host elements are nested inside an - Engine element. Inside the Host element, you - can nest Context elements for the web - applications associated with this virtual host. Exactly one of the Hosts - associated with each Engine MUST have a name matching the - defaultHost attribute of that Engine.

- -

Clients normally use host names to identify the server they wish to connect - to. This host name is also included in the HTTP request headers. Tomcat - extracts the host name from the HTTP headers and looks for a - Host with a matching name. If no match is found, the request - is routed to the default host. The name of the default host does not have to - match a DNS name (although it can) since any request where the DNS name does - not match the name of a Host element will be routed to the - default host.

- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -
Attributes
- -
Common Attributes
- -

All implementations of Host - support the following attributes:

- -
AttributeDescription
appBase -

The Application Base directory for this virtual host. - This is the pathname of a directory that may contain web applications - to be deployed on this virtual host. You may specify an - absolute pathname, or a pathname that is relative to the - $CATALINA_BASE directory. See - Automatic Application - Deployment for more information on automatic recognition and - deployment of web applications. If not specified, the default of - webapps will be used.

-
xmlBase -

The XML Base directory for this virtual host. - This is the pathname of a directory that may contain context XML - descriptors to be deployed on this virtual host. You may specify an - absolute pathname for this directory, or a pathname that is relative - to the $CATALINA_BASE directory. See - Automatic Application - Deployment for more information on automatic recognition and - deployment of web applications. If not specified the default of - conf/<engine_name>/<host_name> will be used.

-
createDirs -

If set to true, Tomcat will attempt to create the directories defined - by the attributes appBase and xmlBase during - the startup phase. The default value is true. If set to - true, and directory creation fails, an error message will be printed out - but will not halt the startup sequence.

-
autoDeploy -

This flag value indicates if Tomcat should check periodically for new - or updated web applications while Tomcat is running. If true, Tomcat - periodically checks the appBase and xmlBase - directories and deploys any new web applications or context XML - descriptors found. Updated web applications or context XML descriptors - will trigger a reload of the web application. The flag's value defaults - to true. See - Automatic Application - Deployment for more information.

-
backgroundProcessorDelay -

This value represents the delay in seconds between the - invocation of the backgroundProcess method on this host and - its child containers, including all contexts. - Child containers will not be invoked if their delay value is not - negative (which would mean they are using their own processing - thread). Setting this to a positive value will cause - a thread to be spawn. After waiting the specified amount of time, - the thread will invoke the backgroundProcess method on this host - and all its child containers. A host will use background processing to - perform live web application deployment related tasks. If not - specified, the default value for this attribute is -1, which means - the host will rely on the background processing thread of its parent - engine.

-
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Host interface. - If not specified, the standard value (defined below) will be used.

-
deployIgnore -

A regular expression defining paths to ignore when - autoDeploy and deployOnStartup are set. This - allows you to keep your configuration in a version control system, for - example, and not deploy a .svn or CVS folder that happens to be in the - appBase.

-

This regular expression is relative to appBase. It is - also anchored, meaning the match is performed against the - entire file/directory name. So, foo matches only a file or - directory named foo but not foo.war, - foobar, or myfooapp. To match anything with - "foo", you could use .*foo.*.

-

See Automatic Application - Deployment for more information.

-
deployOnStartup -

This flag value indicates if web applications from this host should - be automatically deployed when Tomcat starts. The flag's value defaults - to true. See - Automatic Application - Deployment for more information.

-
name -

Usually the network name of this virtual host, as registered in your - Domain Name Service server. Regardless of the case used to - specify the host name, Tomcat will convert it to lower case internally. - One of the Hosts nested within an Engine MUST - have a name that matches the defaultHost setting for that - Engine. See Host Name Aliases for - information on how to assign more than one network name to the same - virtual host.

-
startStopThreads -

The number of threads this Host will use to start - child Context elements in parallel. The same - thread pool will be used to deploy new - Contexts if automatic deployment is being - used. The special value of 0 will result in the value of - Runtime.getRuntime().availableProcessors() being used. - Negative values will result in - Runtime.getRuntime().availableProcessors() + value being - used unless this is less than 1 in which case 1 thread will be used. If - not specified, the default value of 1 will be used.

-
- -
- - -
Standard Implementation
- -

The standard implementation of Host is - org.apache.catalina.core.StandardHost. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
copyXML -

Set to true if you want a context XML descriptor - embedded inside the application (located at - /META-INF/context.xml) to be copied to xmlBase - when the application is deployed. On subsequent starts, the copied - context XML descriptor will be used in preference to any context XML - descriptor embedded inside the application even if the descriptor - embedded inside the application is more recent. The flag's value - defaults to false. Note if deployXML - is false, this attribute will have no effect.

-
deployXML -

Set to false if you want to disable parsing the context - XML descriptor embedded inside the application (located at - /META-INF/context.xml). Security conscious environments - should set this to false to prevent applications from - interacting with the container's configuration. The administrator will - then be responsible for providing an external context configuration - file, and putting it in the location defined by the - xmlBase attribute. The flag's value defaults to - true.

-
errorReportValveClass -

Java class name of the error reporting valve which will be used - by this Host. The responsibility of this valve is to output error - reports. Setting this property allows to customize the look of the - error pages which will be generated by Tomcat. This class must - implement the - org.apache.catalina.Valve interface. If none is specified, - the value org.apache.catalina.valves.ErrorReportValve - will be used by default.

-
unpackWARs -

Set to true if you want web applications that are - placed in the appBase directory as web application - archive (WAR) files to be unpacked into a corresponding disk directory - structure, false to run such web applications directly - from a WAR file. WAR files located outside of the Host's - appBase will not be expanded. See - Automatic Application - Deployment for more information.

-
workDir -

Pathname to a scratch directory to be used by applications for - this Host. Each application will have its own sub directory with - temporary read-write use. Configuring a Context workDir will override - use of the Host workDir configuration. This directory will be made - visible to servlets in the web application by a servlet context - attribute (of type java.io.File) named - javax.servlet.context.tempdir as described in the - Servlet Specification. If not specified, a suitable directory - underneath $CATALINA_BASE/work will be provided.

-
- -
- - -
Nested Components
- -

You can nest one or more Context elements - inside this Host element, each representing a different web - application associated with this virtual host.

- -

You can nest at most one instance of the following utility components - by nesting a corresponding element inside your Host - element:

-
    -
  • Realm - - Configure a realm that will allow its - database of users, and their associated roles, to be shared across all - Contexts nested inside this Host (unless - overridden by a Realm configuration - at a lower level).
  • -
- -
Special Features
- - -
Logging
- -

A host is associated with the - org.apache.catalina.core.ContainerBase.[engine_name].[host_name] - log category. Note that the brackets are part of the name, - don't omit them.

- -
- - -
Access Logs
- -

When you run a web server, one of the output files normally generated - is an access log, which generates one line of information for - each request processed by the server, in a standard format. Catalina - includes an optional Valve implementation that - can create access logs in the same standard format created by web servers, - or in any number of custom formats.

- -

You can ask Catalina to create an access log for all requests - processed by an Engine, - Host, or Context - by nesting a Valve element like this:

- -
-<Host name="localhost" ...>
-  ...
-  <Valve className="org.apache.catalina.valves.AccessLogValve"
-         prefix="localhost_access_log." suffix=".txt"
-         pattern="common"/>
-  ...
-</Host>
-
- -

See Access Log Valve - for more information on the configuration attributes that are - supported.

- -
- - -
Automatic Application Deployment
- -

If you are using the standard Host implementation, - the following actions take place automatically when Catalina is first - started, if the deployOnStartup property is set to - true (which is the default value):

-
    -
  • Any XML file in the Host's xmlBase directory (by - default $CATALINA_BASE/conf/[engine_name]/[host_name]) is - assumed to be a context XML descriptor containing a - Context element (and its associated - sub-elements) for a single web application. The web applications - associated with each of these context XML descriptor files will be - deployed first.
    - The docBase attribute of this <Context> - element must only be set if the docBase is outside the Host's - appBase. For web applications located inside the Host's - appBase, the docBase will be the name of the - XML file with ".xml" replaced with ".war" for a web application archive - or the name of the XML file with ".xml" removed for a directory.
    - The path attribute must not be set. The context path used - will be a slash character ("/") followed by the name of the XML file - (less the .xml extension). Multi-level context paths may be defined - using #, e.g. foo#bar.xml for a context path of - /foo/bar. The default web application that has a context - path of / may be defined by using a file called - ROOT.xml.
  • -
  • Any web application archive file within the Host's appBase - directory that has not already been deployed as a result of a context - XML descriptor, does not have a corresponding directory of the same - name (without the ".war" extension), and is not excluded by - deployIgnore will be deployed next. The context path - used will be a slash character ("/") followed by the web application - archive name less the ".war" extension. The one exception to this rule - is that a web application archive named "ROOT.war" will be deployed with - a context path of /. Multi-level contexts may be defined by - using #, e.g. use a WAR named foo#bar.war for a context - path of /foo/bar.
    - If the unpackWARs attribute is true, the web - application archive file will be expanded to a directory of the same - name (without the ".war" extension".
    - Note: If you re-deploy an updated WAR file while Tomcat is stopped, be - sure to delete the associated expanded directory before restarting - Tomcat, so that the updated WAR file will be re-expanded when Tomcat - restarts.
    - If copyXML is true (it is false - by default), any web application archive file within the Hosts's - appBase directory that does not have a corresponding - context XML descriptor (with a ".xml" extension rather than a ".war" - extension) in the Host's xmlBase will be scanned to see - if it contains a context XML descriptor (located at - /META-INF/context.xml) and if one is found the descriptor - will be copied to the xmlBase directory and renamed. -
  • -
  • Finally, any sub-directory within the Host's appBase that - has not already been deployed as a result of a context XML descriptor - and is not excluded by deployIgnore will be deployed. - The context path used will be a slash character ("/") followed by the - directory name, unless the directory name is ROOT, in which case the - context path will /. Multi-level contexts may be defined by - using #, e.g. use a directory named foo#bar for a context - path of /foo/bar.
    - If copyXML is true (it is false - by default), any directory within the Hosts's appBase - directory that does not have a corresponding context XML descriptor in - the Host's xmlBase will be scanned to see if it contains - a context XML descriptor (located at /META-INF/context.xml) - and if one is found the descriptor will be copied to the - xmlBase directory and renamed. -
  • -
- -

In addition to the automatic deployment that occurs at startup time, - you can also request that new XML configuration files, WAR files, or - sub-directories that are dropped in to the appBase (or - xmlBase in the case of an XML configuration file) directory - while Tomcat is running will be automatically deployed, according to the - rules described above. The auto deployer will also track web applications - for the following changes: -

    -
  • An update to the WEB-INF/web.xml file will trigger a reload of the - web application
  • -
  • Deleting a WAR file will trigger an undeploy of the application with - the removal of any associated expanded directory, context file and - work directory. Any current user sessions will not be persisted.
  • -
  • Deleting a directory will trigger an undeploy of the application - with the removal of any associated context file and work directory. - Any current user sessions will not be persisted. If there is an - associated WAR file, it will not be deleted and the application will - be redeployed from the WAR file the next time the auto deployer checks - for changes.
  • -
  • Deleting a context file will trigger an undeploy of the application - with the removal of any associated work directory. Any current user - sessions will not be persisted. If there is an associated WAR file - and/or directory, they will not be deleted and the application will be - redeployed from the WAR file (or from directory if there is no WAR - file) the next time the auto deployer checks for changes.
  • -
  • Updating a WAR file will trigger an undeploy of the application with - the removal of any associated expanded directory, context file and - work directory. Any current user sessions will not be persisted.
  • -
  • Updating a directory (not the directory contents) will trigger an - undeploy of the application with the removal of any associated context - file and work directory. Any current user sessions will not be - persisted. The application will be redeployed the next time the auto - deployer checks for changes.
  • -
  • Updating a context file will trigger an undeploy of the application - with the removal of any associated work directory. Any current user - sessions will not be persisted. The application will be redeployed the - next time the auto deployer checks for changes.
  • -
-

- -

When using automatic deployment, the docBase defined by - an XML Context file should be outside of the - appBase directory. If this is not the case, difficulties - may be experienced deploying the web application or the application may - be deployed twice. The deployIgnore attribute can be used - to avoid this situation.

- -

Finally, note that if you are defining contexts explicitly in server.xml, - you should probably turn off automatic application deployment or specify - deployIgnore carefully. Otherwise, the web applications - will each be deployed twice, and that may cause problems for the - applications.

- -
- - -
Host Name Aliases
- -

In many server environments, Network Administrators have configured - more than one network name (in the Domain Name Service (DNS) - server), that resolve to the IP address of the same server. Normally, - each such network name would be configured as a separate - Host element in conf/server.xml, each - with its own set of web applications.

- -

However, in some circumstances, it is desirable that two or more - network names should resolve to the same virtual host, - running the same set of applications. A common use case for this - scenario is a corporate web site, where it is desirable that users - be able to utilize either www.mycompany.com or - company.com to access exactly the same content and - applications.

- -

This is accomplished by utilizing one or more Alias - elements nested inside your Host element. For - example:

-
-<Host name="www.mycompany.com" ...>
-  ...
-  <Alias>mycompany.com</Alias>
-  ...
-</Host>
-
- -

In order for this strategy to be effective, all of the network names - involved must be registered in your DNS server to resolve to the - same computer that is running this instance of Catalina.

- -
- - -
Lifecycle Listeners
- -

If you have implemented a Java object that needs to know when this - Host is started or stopped, you can declare it by - nesting a Listener element inside this element. The - class name you specify must implement the - org.apache.catalina.LifecycleListener interface, and - it will be notified about the occurrence of the corresponding - lifecycle events. Configuration of such a listener looks like this:

- -
-<Host name="localhost" ...>
-  ...
-  <Listener className="com.mycompany.mypackage.MyListener" ... >
-  ...
-</Host>
-
- -

Note that a Listener can have any number of additional properties - that may be configured from this element. Attribute names are matched - to corresponding JavaBean property names using the standard property - method naming patterns.

- -
- - -
Request Filters
- -

You can ask Catalina to check the IP address, or host name, on every - incoming request directed to the surrounding - Engine, Host, or - Context element. The remote address or name - will be checked against configured "accept" and/or "deny" - filters, which are defined using java.util.regex Regular - Expression syntax. Requests that come from locations that are - not accepted will be rejected with an HTTP "Forbidden" error. - Example filter declarations:

- -
-<Host name="localhost" ...>
-  ...
-  <Valve className="org.apache.catalina.valves.RemoteHostValve"
-         allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
-  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
-         deny="192\.168\.1\.\d+"/>
-  ...
-</Host>
-
- -

See Remote Address Filter - and Remote Host Filter for - more information about the configuration options that are supported.

- -
- - -
Single Sign On
- -

In many environments, but particularly in portal environments, it - is desireable to have a user challenged to authenticate themselves only - once over a set of web applications deployed on a particular virtual - host. This can be accomplished by nesting an element like this inside - the Host element for this virtual host:

- -
-<Host name="localhost" ...>
-  ...
-  <Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
-  ...
-</Host>
-
- -

The Single Sign On facility operates according to the following rules: -

-
    -
  • All web applications configured for this virtual host must share the - same Realm. In practice, that means you can - nest the Realm element inside this Host element (or the surrounding - Engine element), but not inside a - Context element for one of the involved - web applications.
  • -
  • As long as the user accesses only unprotected resources in any of the - web applications on this virtual host, they will not be challenged - to authenticate themselves.
  • -
  • As soon as the user accesses a protected resource in - any web application associated with this virtual - host, the user will be challenged to authenticate himself or herself, - using the login method defined for the web application currently - being accessed.
  • -
  • Once authenticated, the roles associated with this user will be - utilized for access control decisions across all - of the associated web applications, without challenging the user - to authenticate themselves to each application individually.
  • -
  • As soon as the user logs out of one web application (for example, - by invalidating the corresponding session if form - based login is used), the user's sessions in all - web applications will be invalidated. Any subsequent attempt to - access a protected resource in any application will require the - user to authenticate himself or herself again.
  • -
  • The Single Sign On feature utilizes HTTP cookies to transmit a token - that associates each request with the saved user identity, so it can - only be utilized in client environments that support cookies.
  • -
- -
- - -
User Web Applications
- -

Many web servers can automatically map a request URI starting with - a tilde character ("~") and a username to a directory (commonly named - public_html) in that user's home directory on the server. - You can accomplish the same thing in Catalina by using a special - Listener element like this (on a Unix system that - uses the /etc/passwd file to identify valid users):

- -
-<Host name="localhost" ...>
-  ...
-  <Listener className="org.apache.catalina.startup.UserConfig"
-            directoryName="public_html"
-            userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
-  ...
-</Host>
-
- -

On a server where /etc/passwd is not in use, you can - request Catalina to consider all directories found in a specified base - directory (such as c:\Homes in this example) to be - considered "user home" directories for the purposes of this directive:

- -
-<Host name="localhost" ...>
-  ...
-  <Listener className="org.apache.catalina.startup.UserConfig"
-            directoryName="public_html"
-            homeBase=c:\Homes"
-            userClass="org.apache.catalina.startup.HomesUserDatabase"/>
-  ...
-</Host>
-
- -

If a user home directory has been set up for a user named - craigmcc, then its contents will be visible from a - client browser by making a request to a URL like:

- -
-http://www.mycompany.com:8080/~craigmcc
-
- -

Successful use of this feature requires recognition of the following - considerations:

-
    -
  • Each user web application will be deployed with characteristics - established by the global and host level default context settings.
  • -
  • It is legal to include more than one instance of this Listener - element. This would only be useful, however, in circumstances - where you wanted to configure more than one "homeBase" directory.
  • -
  • The operating system username under which Catalina is executed - MUST have read access to each user's web application directory, - and all of its contents.
  • -
- -
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/http.html b/bundledApps/tomcat/webapps/docs/config/http.html deleted file mode 100755 index e3041798..00000000 --- a/bundledApps/tomcat/webapps/docs/config/http.html +++ /dev/null @@ -1,950 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The HTTP Connector

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The HTTP Connector

Table of Contents
- -
Introduction
- -

The HTTP Connector element represents a - Connector component that supports the HTTP/1.1 protocol. - It enables Catalina to function as a stand-alone web server, in addition - to its ability to execute servlets and JSP pages. A particular instance - of this component listens for connections on a specific TCP port number - on the server. One or more such Connectors can be - configured as part of a single Service, each - forwarding to the associated Engine to perform - request processing and create the response.

- -

If you wish to configure the Connector that is used - for connections to web servers using the AJP protocol (such as the - mod_jk 1.2.x connector for Apache 1.3), please refer to the - AJP Connector documentation.

- -

Each incoming request requires - a thread for the duration of that request. If more simultaneous requests - are received than can be handled by the currently available request - processing threads, additional threads will be created up to the - configured maximum (the value of the maxThreads attribute). - If still more simultaneous requests are received, they are stacked up - inside the server socket created by the Connector, up to - the configured maximum (the value of the acceptCount - attribute). Any further simultaneous requests will receive "connection - refused" errors, until resources are available to process them.

- -
Attributes
- -
Common Attributes
- -

All implementations of Connector - support the following attributes:

- -
AttributeDescription
allowTrace -

A boolean value which can be used to enable or disable the TRACE - HTTP method. If not specified, this attribute is set to false.

-
asyncTimeout -

The default timeout for asynchronous requests in milliseconds. If not - specified, this attribute is set to 10000 (10 seconds).

-
enableLookups -

Set to true if you want calls to - request.getRemoteHost() to perform DNS lookups in - order to return the actual host name of the remote client. Set - to false to skip the DNS lookup and return the IP - address in String form instead (thereby improving performance). - By default, DNS lookups are disabled.

-
maxHeaderCount -

The maximum number of headers in a request that are allowed by the - container. A request that contains more headers than the specified limit - will be rejected. A value of less than 0 means no limit. - If not specified, a default of 100 is used.

-
maxParameterCount -

The maximum number of parameter and value pairs (GET plus POST) which - will be automatically parsed by the container. Parameter and value pairs - beyond this limit will be ignored. A value of less than 0 means no limit. - If not specified, a default of 10000 is used. Note that - FailedRequestFilter filter can be - used to reject requests that hit the limit.

-
maxPostSize -

The maximum size in bytes of the POST which will be handled by - the container FORM URL parameter parsing. The limit can be disabled by - setting this attribute to a value less than or equal to 0. - If not specified, this attribute is set to 2097152 (2 megabytes).

-
maxSavePostSize -

The maximum size in bytes of the POST which will be saved/buffered by - the container during FORM or CLIENT-CERT authentication. For both types - of authentication, the POST will be saved/buffered before the user is - authenticated. For CLIENT-CERT authentication, the POST is buffered for - the duration of the SSL handshake and the buffer emptied when the request - is processed. For FORM authentication the POST is saved whilst the user - is re-directed to the login form and is retained until the user - successfully authenticates or the session associated with the - authentication request expires. The limit can be disabled by setting this - attribute to -1. Setting the attribute to zero will disable the saving of - POST data during authentication. If not specified, this attribute is set - to 4096 (4 kilobytes).

-
parseBodyMethods -

A comma-separated list of HTTP methods for which request - bodies will be parsed for request parameters identically - to POST. This is useful in RESTful applications that want to - support POST-style semantics for PUT requests. - Note that any setting other than POST causes Tomcat - to behave in a way that goes against the intent of the servlet - specification. - The HTTP method TRACE is specifically forbidden here in accordance - with the HTTP specification. - The default is POST

-
port -

The TCP port number on which this Connector - will create a server socket and await incoming connections. Your - operating system will allow only one server application to listen - to a particular port number on a particular IP address. If the special - value of 0 (zero) is used, then Tomcat will select a free port at random - to use for this connector. This is typically only useful in embedded and - testing applications.

-
protocol -

Sets the protocol to handle incoming traffic. The default value is - HTTP/1.1 which uses an auto-switching mechanism to select - either a blocking Java based connector or an APR/native based connector. - If the PATH (Windows) or LD_LIBRARY_PATH (on - most unix systems) environment variables contain the Tomcat native - library, the APR/native connector will be used. If the native library - cannot be found, the blocking Java based connector will be used. Note - that the APR/native connector has different settings for HTTPS than the - Java connectors.
- To use an explicit protocol rather than rely on the auto-switching - mechanism described above, the following values may be used:
- org.apache.coyote.http11.Http11Protocol - - blocking Java connector
- org.apache.coyote.http11.Http11NioProtocol - - non blocking Java connector
- org.apache.coyote.http11.Http11AprProtocol - - the APR/native connector.
- Custom implementations may also be used.
- Take a look at our Connector - Comparison chart. The configuration for both Java connectors is - identical, for http and https.
- For more information on the APR connector and APR specific SSL settings - please visit the APR documentation -

-
proxyName -

If this Connector is being used in a proxy - configuration, configure this attribute to specify the server name - to be returned for calls to request.getServerName(). - See Proxy Support for more - information.

-
proxyPort -

If this Connector is being used in a proxy - configuration, configure this attribute to specify the server port - to be returned for calls to request.getServerPort(). - See Proxy Support for more - information.

-
redirectPort -

If this Connector is supporting non-SSL - requests, and a request is received for which a matching - <security-constraint> requires SSL transport, - Catalina will automatically redirect the request to the port - number specified here.

-
scheme -

Set this attribute to the name of the protocol you wish to have - returned by calls to request.getScheme(). For - example, you would set this attribute to "https" - for an SSL Connector. The default value is "http". -

-
secure -

Set this attribute to true if you wish to have - calls to request.isSecure() to return true - for requests received by this Connector. You would want this on an - SSL Connector or a non SSL connector that is receiving data from a - SSL accelerator, like a crypto card, a SSL appliance or even a webserver. - The default value is false.

-
URIEncoding -

This specifies the character encoding used to decode the URI bytes, - after %xx decoding the URL. If not specified, ISO-8859-1 will be used. -

-
useBodyEncodingForURI -

This specifies if the encoding specified in contentType should be used - for URI query parameters, instead of using the URIEncoding. This - setting is present for compatibility with Tomcat 4.1.x, where the - encoding specified in the contentType, or explicitly set using - Request.setCharacterEncoding method was also used for the parameters from - the URL. The default value is false. -

-
useIPVHosts -

Set this attribute to true to cause Tomcat to use - the IP address that the request was received on to determine the Host - to send the request to. The default value is false.

-
xpoweredBy -

Set this attribute to true to cause Tomcat to advertise - support for the Servlet specification using the header recommended in the - specification. The default value is false.

-
- -
- -
Standard Implementation
- -

The standard HTTP connectors (BIO, NIO and APR/native) all support the - following attributes in addition to the common Connector attributes listed - above.

- -
AttributeDescription
acceptCount -

The maximum queue length for incoming connection requests when - all possible request processing threads are in use. Any requests - received when the queue is full will be refused. The default - value is 100.

-
acceptorThreadCount -

The number of threads to be used to accept connections. Increase this - value on a multi CPU machine, although you would never really need more - than 2. Also, with a lot of non keep alive connections, you - might want to increase this value as well. Default value is - 1.

-
acceptorThreadPriority -

The priority of the acceptor threads. The threads used to accept - new connections. The default value is - java.lang.Thread#NORM_PRIORITY. See the JavaDoc for the - java.lang.Thread class for more details on what this priority means.

-
address -

For servers with more than one IP address, this attribute - specifies which address will be used for listening on the specified - port. By default, this port will be used on all IP addresses - associated with the server.

-
bindOnInit -

Controls when the socket used by the connector is bound. By default it - is bound when the connector is initiated and unbound when the connector is - destroyed. If set to false, the socket will be bound when the - connector is started and unbound when it is stopped.

-
compressableMimeType -

The value is a comma separated list of MIME types for which HTTP - compression may be used. - The default value is text/html,text/xml,text/plain.

-
compression -

The Connector may use HTTP/1.1 GZIP compression in - an attempt to save server bandwidth. The acceptable values for the - parameter is "off" (disable compression), "on" (allow compression, which - causes text data to be compressed), "force" (forces compression in all - cases), or a numerical integer value (which is equivalent to "on", but - specifies the minimum amount of data before the output is compressed). If - the content-length is not known and compression is set to "on" or more - aggressive, the output will also be compressed. If not specified, this - attribute is set to "off".

-

Note: There is a tradeoff between using compression (saving - your bandwidth) and using the sendfile feature (saving your CPU cycles). - If the connector supports the sendfile feature, e.g. the NIO connector, - using sendfile will take precedence over compression. The symptoms will - be that static files greater that 48 Kb will be sent uncompressed. - You can turn off sendfile by setting useSendfile attribute - of the connector, as documented below, or change the sendfile usage - threshold in the configuration of the - DefaultServlet in the default - conf/web.xml or in the web.xml of your web - application. -

-
compressionMinSize -

If compression is set to "on" then this attribute - may be used to specify the minimum amount of data before the output is - compressed. If not specified, this attribute is defaults to "2048".

-
connectionLinger -

The number of seconds during which the sockets used by this - Connector will linger when they are closed. - If not specified, the JVM default will be used.

-
connectionTimeout -

The number of milliseconds this Connector will wait, - after accepting a connection, for the request URI line to be - presented. Use a value of -1 to indicate no (i.e. infinite) timeout. - The default value is 60000 (i.e. 60 seconds) but note that the standard - server.xml that ships with Tomcat sets this to 20000 (i.e. 20 seconds). -

-
connectionUploadTimeout -

Specifies the timeout, in milliseconds, to use while a data upload is - in progress. This only takes effect if - disableUploadTimeout is set to false. -

-
disableUploadTimeout -

This flag allows the servlet container to use a different, usually - longer connection timeout during data upload. If not specified, this - attribute is set to true which disables this longer timeout. -

-
executor -

A reference to the name in an Executor - element. If this attribute is set, and the named executor exists, the - connector will use the executor, and all the other thread attributes will - be ignored. Note that if a shared executor is not specified for a - connector then the connector will use a private, internal executor to - provide the thread pool.

-
keepAliveTimeout -

The number of milliseconds this Connector will wait - for another HTTP request before closing the connection. The default value - is to use the value that has been set for the - connectionTimeout attribute. - Use a value of -1 to indicate no (i.e. infinite) timeout.

-
maxConnections -

The maximum number of connections that the server will accept and - process at any given time. When this number has been reached, the server - will not accept any more connections until the number of connections - falls below this value. The operating system may still accept - connections based on the acceptCount setting. Default value - varies by connector type. For BIO the default is the value of - maxThreads unless an Executor - is used in which case the default will be the value of maxThreads from the - executor. For NIO the default is 10000. - For APR/native, the default is 8192.

-

Note that for APR/native on Windows, the configured value will be - reduced to the highest multiple of 1024 that is less than or equal to - maxConnections. This is done for performance reasons.
- If set to a value of -1, the maxConnections feature is disabled - and connections are not counted.

-
maxHttpHeaderSize -

The maximum size of the request and response HTTP header, specified - in bytes. If not specified, this attribute is set to 8192 (8 KB).

-
maxKeepAliveRequests -

The maximum number of HTTP requests which can be pipelined until - the connection is closed by the server. Setting this attribute to 1 will - disable HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and - pipelining. Setting this to -1 will allow an unlimited amount of - pipelined or keep-alive HTTP requests. - If not specified, this attribute is set to 100.

-
maxThreads -

The maximum number of request processing threads to be created - by this Connector, which therefore determines the - maximum number of simultaneous requests that can be handled. If - not specified, this attribute is set to 200. If an executor is associated - with this connector, this attribute is ignored as the connector will - execute tasks using the executor rather than an internal thread pool.

-
maxTrailerSize -

Limits the total length of trailing headers in the last chunk of - a chunked HTTP request. If the value is -1, no limit will be - imposed. If not specified, the default value of 8192 will be - used.

-
minSpareThreads -

The minimum number of threads always kept running. If not specified, - the default of 10 is used.

-
noCompressionUserAgents -

The value is a regular expression (using java.util.regex) - matching the user-agent header of HTTP clients for which - compression should not be used, - because these clients, although they do advertise support for the - feature, have a broken implementation. - The default value is an empty String (regexp matching disabled).

-
processorCache -

The protocol handler caches Processor objects to speed up performance. - This setting dictates how many of these objects get cached. - -1 means unlimited, default is 200. If not using - Servlet 3.0 asynchronous processing, a good default is to use the same as - the maxThreads setting. If using Servlet 3.0 asynchronous processing, a - good default is to use the larger of maxThreads and the maximum number of - expected concurrent requests (synchronous and asynchronous).

-
restrictedUserAgents -

The value is a regular expression (using java.util.regex) matching - matching the user-agent header of HTTP clients for which - HTTP/1.1 or HTTP/1.0 keep alive should not be used, even if the clients - advertise support for these features. - The default value is an empty String (regexp matching disabled).

-
server -

Overrides the Server header for the http response. If set, the value - for this attribute overrides the Tomcat default and any Server header set - by a web application. If not set, any value specified by the application - is used. If the application does not specify a value then - Apache-Coyote/1.1 is used. Unless you are paranoid, you won't - need this feature. -

-
socketBuffer -

The size (in bytes) of the buffer to be provided for socket - output buffering. -1 can be specified to disable the use of a buffer. - By default, a buffers of 9000 bytes will be used.

-
SSLEnabled -

Use this attribute to enable SSL traffic on a connector. - To turn on SSL handshake/encryption/decryption on a connector - set this value to true. - The default value is false. - When turning this value true you will want to set the - scheme and the secure attributes as well - to pass the correct request.getScheme() and - request.isSecure() values to the servlets - See SSL Support for more information. -

-
tcpNoDelay -

If set to true, the TCP_NO_DELAY option will be - set on the server socket, which improves performance under most - circumstances. This is set to true by default.

-
threadPriority -

The priority of the request processing threads within the JVM. - The default value is java.lang.Thread#NORM_PRIORITY. - See the JavaDoc for the java.lang.Thread class for more details on - what this priority means. -

-
- -
- -
Java TCP socket attributes
- -

The BIO and NIO implementation support the following Java TCP socket - attributes in addition to the common Connector and HTTP attributes listed - above.

- -
AttributeDescription
socket.rxBufSize -

(int)The socket receive buffer (SO_RCVBUF) size in bytes. JVM default - used if not set.

-
socket.txBufSize -

(int)The socket send buffer (SO_SNDBUF) size in bytes. JVM default - used if not set.

-
socket.tcpNoDelay -

(bool)This is equivalent to standard attribute - tcpNoDelay.

-
socket.soKeepAlive -

(bool)Boolean value for the socket's keep alive setting - (SO_KEEPALIVE). JVM default used if not set.

-
socket.ooBInline -

(bool)Boolean value for the socket OOBINLINE setting. JVM default - used if not set.

-
socket.soReuseAddress -

(bool)Boolean value for the sockets reuse address option - (SO_REUSEADDR). JVM default used if not set.

-
socket.soLingerOn -

(bool)Boolean value for the sockets so linger option (SO_LINGER). - A value for the standard attribute connectionLinger - that is >=0 is equivalent to setting this to true. - A value for the standard attribute connectionLinger - that is <0 is equivalent to setting this to false. - Both this attribute and soLingerTime must be set else the - JVM defaults will be used for both.

-
socket.soLingerTime -

(int)Value in seconds for the sockets so linger option (SO_LINGER). - This is equivalent to standard attribute - connectionLinger. - Both this attribute and soLingerOn must be set else the - JVM defaults will be used for both.

-
socket.soTimeout -

This is equivalent to standard attribute - connectionTimeout.

-
socket.performanceConnectionTime -

(int)The first value for the performance settings. See - Socket Performance Options - All three performance attributes must be set else the JVM defaults will - be used for all three.

-
socket.performanceLatency -

(int)The second value for the performance settings. See - Socket Performance Options - All three performance attributes must be set else the JVM defaults will - be used for all three.

-
socket.performanceBandwidth -

(int)The third value for the performance settings. See - Socket Performance Options - All three performance attributes must be set else the JVM defaults will - be used for all three.

-
socket.unlockTimeout -

(int) The timeout for a socket unlock. When a connector is stopped, it will try to release the acceptor thread by opening a connector to itself. - The default value is 250 and the value is in milliseconds

-
-
- -
BIO specific configuration
- -

The following attributes are specific to the BIO connector.

- -
AttributeDescription
disableKeepAlivePercentage -

The percentage of processing threads that have to be in use before - HTTP keep-alives are disabled to improve scalability. Values less than - 0 will be changed to 0 and values greater than - 100 will be changed to 100. If not specified, - the default value is 75.

-
- -
- -
NIO specific configuration
- -

The following attributes are specific to the NIO connector.

- -
AttributeDescription
pollerThreadCount -

(int)The number of threads to be used to run for the polling events. - Default value is 1 per processor up to and including version 7.0.27. - Default value as of version 7.0.28 is 1 per processor but not more than 2.
- When accepting a socket, the operating system holds a global lock. So the benefit of - going above 2 threads diminishes rapidly. Having more than one thread is for - system that need to accept connections very rapidly. However usually just - increasing acceptCount will solve that problem. - Increasing this value may also be beneficial when a large amount of send file - operations are going on. -

-
pollerThreadPriority -

(int)The priority of the poller threads. The default value is - java.lang.Thread#NORM_PRIORITY. See the JavaDoc for the - java.lang.Thread class for more details on what this priority means.

-
selectorTimeout -

(int)The time in milliseconds to timeout on a select() for the - poller. This value is important, since connection clean up is done on - the same thread, so do not set this value to an extremely high one. The - default value is 1000 milliseconds.

-
useComet -

(bool)Whether to allow comet servlets or not. Default value is - true.

-
useSendfile -

(bool)Use this attribute to enable or disable sendfile capability. - The default value is true.

-
socket.directBuffer -

(bool)Boolean value, whether to use direct ByteBuffers or java mapped - ByteBuffers. Default is false.
- When you are using direct buffers, make sure you allocate the - appropriate amount of memory for the direct memory space. On Sun's JDK - that would be something like -XX:MaxDirectMemorySize=256m. -

-
socket.appReadBufSize -

(int)Each connection that is opened up in Tomcat get associated with - a read ByteBuffer. This attribute controls the size of this buffer. By - default this read buffer is sized at 8192 bytes. For lower - concurrency, you can increase this to buffer more data. For an extreme - amount of keep alive connections, decrease this number or increase your - heap size.

-
socket.appWriteBufSize -

(int)Each connection that is opened up in Tomcat get associated with - a write ByteBuffer. This attribute controls the size of this buffer. By - default this write buffer is sized at 8192 bytes. For low - concurrency you can increase this to buffer more response data. For an - extreme amount of keep alive connections, decrease this number or - increase your heap size.
- The default value here is pretty low, you should up it if you are not - dealing with tens of thousands concurrent connections.

-
socket.bufferPool -

(int)The NIO connector uses a class called NioChannel that holds - elements linked to a socket. To reduce garbage collection, the NIO - connector caches these channel objects. This value specifies the size of - this cache. The default value is 500, and represents that - the cache will hold 500 NioChannel objects. Other values are - -1 for unlimited cache and 0 for no cache.

-
socket.bufferPoolSize -

(int)The NioChannel pool can also be size based, not used object - based. The size is calculated as follows:
- NioChannel - buffer size = read buffer size + write buffer size
- SecureNioChannel buffer size = application read buffer size + - application write buffer size + network read buffer size + - network write buffer size
- The value is in bytes, the default value is 1024*1024*100 - (100MB).

-
socket.processorCache -

(int)Tomcat will cache SocketProcessor objects to reduce garbage - collection. The integer value specifies how many objects to keep in the - cache at most. The default is 500. Other values are - -1 for unlimited cache and 0 for no cache.

-
socket.keyCache -

(int)Tomcat will cache KeyAttachment objects to reduce garbage - collection. The integer value specifies how many objects to keep in the - cache at most. The default is 500. Other values are - -1 for unlimited cache and 0 for no cache.

-
socket.eventCache -

(int)Tomcat will cache PollerEvent objects to reduce garbage - collection. The integer value specifies how many objects to keep in the - cache at most. The default is 500. Other values are - -1 for unlimited cache and 0 for no cache.

-
selectorPool.maxSelectors -

(int)The max selectors to be used in the pool, to reduce selector - contention. Use this option when the command line - org.apache.tomcat.util.net.NioSelectorShared value is set - to false. Default value is 200.

-
selectorPool.maxSpareSelectors -

(int)The max spare selectors to be used in the pool, to reduce - selector contention. When a selector is returned to the pool, the system - can decide to keep it or let it be GC'd. Use this option when the - command line org.apache.tomcat.util.net.NioSelectorShared - value is set to false. Default value is -1 (unlimited).

-
command-line-options -

The following command line options are available for the NIO - connector:
- -Dorg.apache.tomcat.util.net.NioSelectorShared=true|false - - default is true. Set this value to false if you wish to - use a selector for each thread. When you set it to false, you can - control the size of the pool of selectors by using the - selectorPool.maxSelectors attribute.

-
oomParachute -

(int)The NIO connector implements an OutOfMemoryError strategy called - parachute. It holds a chunk of data as a byte array. In case of an OOM, - this chunk of data is released and the error is reported. This will give - the VM enough room to clean up. The oomParachute represents - the size in bytes of the parachute(the byte array). The default value is - 1024*1024(1MB). Please note, this only works for OOM errors - regarding the Java Heap space, and there is absolutely no guarantee - that you will be able to recover at all. If you have an OOM outside of - the Java Heap, then this parachute trick will not help. -

-
-
- -
APR/native specific configuration
- -

The following attributes are specific to the APR/native connector.

- -
AttributeDescription
deferAccept -

Sets the TCP_DEFER_ACCEPT flag on the listening socket - for this connector. The default value is true where - TCP_DEFER_ACCEPT is supported by the operating system, - otherwise it is false.

-
pollerSize -

Amount of sockets that the poller responsible for polling kept alive - connections can hold at a given time. Extra connections will be closed - right away. The default value is 8192, corresponding to 8192 keep-alive - connections. This is a synonym for maxConnections.

-
pollerThreadCount -

Number of threads used to poll kept alive connections. On Windows the - default is chosen so that the sockets managed by each thread is - less than 1024. For Linux the default is 1. Changing the default on - Windows is likely to have a negative performance impact.

-
pollTime -

Duration of a poll call in microseconds. Lowering this value will - slightly decrease latency of connections being kept alive in some cases, - but will use more CPU as more poll calls are being made. The default - value is 2000 (2ms).

-
sendfileSize -

Amount of sockets that the poller responsible for sending static - files asynchronously can hold at a given time. Extra connections will be - closed right away without any data being sent (resulting in a zero - length file on the client side). Note that in most cases, sendfile is a - call that will return right away (being taken care of "synchronously" by - the kernel), and the sendfile poller will not be used, so the amount of - static files which can be sent concurrently is much larger than the - specified amount. The default value is 1024.

-
sendfileThreadCount -

Number of threads used service sendfile sockets. On Windows the - default is chosen so that the sockets managed by each thread is - less than 1024. For Linux the default is 1. Changing the default on - Windows is likely to have a negative performance impact.

-
threadPriority -

(int)The priority of the acceptor and poller threads. The default - value is java.lang.Thread#NORM_PRIORITY. See the JavaDoc - for the java.lang.Thread class for more details on what this priority - means.

-
useComet -

(bool)Whether to allow comet servlets or not. Default value is - true.

-
useSendfile -

(bool)Use this attribute to enable or disable sendfile capability. - The default value is true.

-
- -
- -
Nested Components
- -

None at this time.

- -
Special Features
- - -
HTTP/1.1 and HTTP/1.0 Support
- -

This Connector supports all of the required features - of the HTTP/1.1 protocol, as described in RFC 2616, including persistent - connections, pipelining, expectations and chunked encoding. If the client - (typically a browser) supports only HTTP/1.0, the - Connector will gracefully fall back to supporting this - protocol as well. No special configuration is required to enable this - support. The Connector also supports HTTP/1.0 - keep-alive.

- -

RFC 2616 requires that HTTP servers always begin their responses with - the highest HTTP version that they claim to support. Therefore, this - Connector will always return HTTP/1.1 at - the beginning of its responses.

- -
- - -
Proxy Support
- -

The proxyName and proxyPort attributes can - be used when Tomcat is run behind a proxy server. These attributes - modify the values returned to web applications that call the - request.getServerName() and request.getServerPort() - methods, which are often used to construct absolute URLs for redirects. - Without configuring these attributes, the values returned would reflect - the server name and port on which the connection from the proxy server - was received, rather than the server name and port to whom the client - directed the original request.

- -

For more information, see the - Proxy Support HOW-TO.

- -
- - - -
SSL Support
- -

You can enable SSL support for a particular instance of this - Connector by setting the SSLEnabled attribute to - true.

- -

You will also need to set the scheme and secure - attributes to the values https and true - respectively, to pass correct information to the servlets.

- -

The BIO and NIO connectors use the JSSE SSL whereas the APR/native - connector uses OpenSSL. Therefore, in addition to using different attributes - to configure SSL, the APR/native connector also requires keys and certificates - to be provided in a different format.

- -

For more information, see the - SSL Configuration HOW-TO.

- -
SSL Support - BIO and NIO
- -

The BIO and NIO connectors use the following attributes to configure SSL: -

- -
AttributeDescription
algorithm -

The certificate encoding algorithm to be used. This defaults to - KeyManagerFactory.getDefaultAlgorithm() which returns - SunX509 for Sun JVMs. IBM JVMs return - IbmX509. For other vendors, consult the JVM - documentation for the default value.

-
allowUnsafeLegacyRenegotiation -

Is unsafe legacy TLS renegotiation allowed which is likely to expose - users to CVE-2009-3555, a man-in-the-middle vulnerability in the TLS - protocol that allows an attacker to inject arbitrary data into the user's - request. If not specified, a default of false is used. This - attribute only has an effect if the JVM does not support RFC 5746 as - indicated by the presence of the pseudo-ciphersuite - TLS_EMPTY_RENEGOTIATION_INFO_SCSV. This is available JRE/JDK 6 update 22 - onwards. Where RFC 5746 is supported the renegotiation - including support - for unsafe legacy renegotiation - is controlled by the JVM configuration. -

-
ciphers -

The comma separated list of encryption ciphers that this socket is - allowed to use. By default, the default ciphers for the JVM will be used. - Note that this usually means that the weak export grade ciphers will be - included in the list of available ciphers. The ciphers are specified using - the JSSE cipher naming convention. The special value of ALL - will enable all supported ciphers. This will include many that are not - secure. ALL is intended for testing purposes only.

-
clientAuth -

Set to true if you want the SSL stack to require a - valid certificate chain from the client before accepting a connection. - Set to want if you want the SSL stack to request a client - Certificate, but not fail if one isn't presented. A false - value (which is the default) will not require a certificate chain - unless the client requests a resource protected by a security - constraint that uses CLIENT-CERT authentication.

-
clientCertProvider -

When client certificate information is presented in a form other than - instances of java.security.cert.X509Certificate it needs to - be converted before it can be used and this property controls which JSSE - provider is used to perform the conversion. For example it is used with - the AJP connectors, the HTTP APR connector and - with the - org.apache.catalina.valves.SSLValve. If not specified, the default - provider will be used.

-
crlFile -

The certificate revocation list to be used to verify client - certificates. If not defined, client certificates will not be checked - against a certificate revocation list.

-
keyAlias -

The alias used to for the server certificate in the keystore. If not - specified the first key read in the keystore will be used.

-
keyPass -

The password used to access the server certificate from the - specified keystore file. The default value is "changeit". -

-
keystoreFile -

The pathname of the keystore file where you have stored the - server certificate to be loaded. By default, the pathname is - the file ".keystore" in the operating system home - directory of the user that is running Tomcat. If your - keystoreType doesn't need a file use "" - (empty string) for this parameter.

-
keystorePass -

The password used to access the specified keystore file. The default - value is the value of the keyPass attribute. -

-
keystoreProvider -

The name of the keystore provider to be used for the server - certificate. If not specified, the list of registered providers is - traversed in preference order and the first provider that supports the - keystoreType is used. -

-
keystoreType -

The type of keystore file to be used for the server certificate. - If not specified, the default value is "JKS".

-
sessionCacheSize -

The number of SSL sessions to maintain in the session cache. Use 0 to - specify an unlimited cache size. If not specified, a default of 0 is - used.

-
sessionTimeout -

The time, in seconds, after the creation of an SSL session that it will - timeout. Use 0 to specify an unlimited timeout. If not specified, a - default of 86400 (24 hours) is used.

-
sslEnabledProtocols -

The list of SSL protocols to use. If not specified, the JVM default is - used.

-
sslImplementationName -

The class name of the SSL implementation to use. If not specified, the - default of org.apache.tomcat.util.net.jsse.JSSEImplementation - will be used which wraps JVM's default JSSE provider. Note that the - JVM can be configured to use a different JSSE provider as the default.

-
sslProtocol -

The version of the SSL protocol to use. If not specified, - the default is "TLS".

-
trustManagerClassName -

The name of a custom trust manager class to use to validate client - certificates. The class must have a zero argument constructor and must - also implement javax.net.ssl.X509TrustManager. If this - attribute is set, the trust store attributes may be ignored. -

-
trustMaxCertLength -

The maximum number of intermediate certificates that will be allowed - when validating client certificates. If not specified, the default value - of 5 will be used.

-
truststoreAlgorithm -

The algorithm to use for truststore. If not specified, the default - value returned by - javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm() is - used.

-
truststoreFile -

The trust store file to use to validate client certificates. The - default is the value of the javax.net.ssl.trustStore system - property. If neither this attribute nor the default system property is - set, no trust store will be configured.

-
truststorePass -

The password to access the trust store. The default is the value of the - javax.net.ssl.trustStorePassword system property. If that - property is null, no trust store password will be configured. If an - invalid trust store password is specified, a warning will be logged and an - attempt will be made to access the trust store without a password which - will skip validation of the trust store contents.

-
truststoreProvider -

The name of the truststore provider to be used for the server - certificate. The default is the value of the - javax.net.ssl.trustStoreProvider system property. If - that property is null, the value of keystoreProvider is used - as the default. If neither this attribute, the default system property nor - keystoreProvideris set, the list of registered providers is - traversed in preference order and the first provider that supports the - truststoreType is used. -

-
truststoreType -

The type of key store used for the trust store. The default is the - value of the javax.net.ssl.trustStoreType system property. If - that property is null, the value of keystoreType is used as - the default.

-
- -
- -
SSL Support - APR/Native
- -

When APR/native is enabled, the HTTPS connector will use a socket poller - for keep-alive, increasing scalability of the server. It also uses OpenSSL, - which may be more optimized than JSSE depending on the processor being used, - and can be complemented with many commercial accelerator components. Unlike - the HTTP connector, the HTTPS connector cannot use sendfile to optimize static - file processing.

- -

The HTTPS APR/native connector has the same attributes than the HTTP - APR/native connector, but adds OpenSSL specific ones. For the full details on - using OpenSSL, please refer to OpenSSL documentations and the many books - available for it (see the Official OpenSSL - website). The SSL specific attributes for the APR/native connector are: -

- -
AttributeDescription
SSLCACertificateFile -

See - the mod_ssl documentation.

-
SSLCACertificatePath -

See - the mod_ssl documentation.

-
SSLCARevocationFile -

See - the mod_ssl documentation.

-
SSLCARevocationPath -

See - the mod_ssl documentation.

-
SSLCertificateChainFile -

See - the mod_ssl documentation.

-
SSLCACertificateFile -

Name of the file that contains the concatenated certificates for the - trusted certificate authorities. The format is PEM-encoded.

-
SSLCACertificatePath -

Name of the directory that contains the certificates for the trusted - certificate authorities. The format is PEM-encoded.

-
SSLCARevocationFile -

Name of the file that contains the concatenated certificate revocation - lists for the certificate authorities. The format is PEM-encoded.

-
SSLCARevocationPath -

Name of the directory that contains the certificate revocation lists - for the certificate authorities. The format is PEM-encoded.

-
SSLCertificateChainFile -

Name of the file that contains concatenated certifcates for the - certificate authorities which form the certifcate chain for the server - certificate. The format is PEM-encoded.

-
SSLCertificateFile -

Name of the file that contains the server certificate. The format is - PEM-encoded.

-
SSLCertificateKeyFile -

Name of the file that contains the server private key. The format is - PEM-encoded. The default value is the value of "SSLCertificateFile" and in - this case both certificate and private key have to be in this file (NOT - RECOMMENDED).

-
SSLCipherSuite -

Ciphers which may be used for communicating with clients. The default - is "ALL", with other acceptable values being a list of ciphers, with ":" - used as the delimiter (see OpenSSL documentation for the list of ciphers - supported).

-
SSLHonorCipherOrder -

Set to true to enforce the server's cipher order - (from the SSLCipherSuite setting) instead of allowing - the client to choose the cipher (which is the default).

-
SSLPassword -

Pass phrase for the encrypted private key. If "SSLPassword" is not - provided, the callback function should prompt for the pass phrase.

-
SSLProtocol -

Protocol which may be used for communicating with clients. The default - value is all, which is equivalent to SSLv3+TLSv1 - with other acceptable values being SSLv2, - SSLv3, TLSv1 and any combination of the three - protocols concatenated with a plus sign. Note that the protocol - SSLv2 is inherently unsafe.

-
SSLVerifyClient -

Ask client for certificate. The default is "none", meaning the client - will not have the opportunity to submit a certificate. Other acceptable - values include "optional", "require" and "optionalNoCA".

-
SSLVerifyDepth -

Maximum verification depth for client certificates. The default is - "10".

-
- -
- -
-
Connector Comparison
- -

Below is a small chart that shows how the connectors differentiate.

-
-                       Java Blocking Connector   Java Non Blocking Connector   APR/native Connector
-                                 BIO                         NIO                       APR
-    Classname              Http11Protocol             Http11NioProtocol         Http11AprProtocol
-    Tomcat Version           3.x onwards                 6.x onwards              5.5.x onwards
-    Support Polling              NO                          YES                       YES
-    Polling Size                 N/A                   maxConnections             maxConnections
-    Read HTTP Request         Blocking                  Non Blocking                 Blocking
-    Read HTTP Body            Blocking                  Sim Blocking                 Blocking
-    Write HTTP Response       Blocking                  Sim Blocking                 Blocking
-    Wait for next Request     Blocking                  Non Blocking               Non Blocking
-    SSL Support               Java SSL                    Java SSL                   OpenSSL
-    SSL Handshake             Blocking                  Non blocking                 Blocking
-    Max Connections        maxConnections              maxConnections             maxConnections
-
-
-    
- -
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/index.html b/bundledApps/tomcat/webapps/docs/config/index.html deleted file mode 100755 index c37914e0..00000000 --- a/bundledApps/tomcat/webapps/docs/config/index.html +++ /dev/null @@ -1,74 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - Overview

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

Overview

Overview
- -

This manual contains reference information about all of the configuration -directives that can be included in a conf/server.xml file to -configure the behavior of the Tomcat 7 Servlet/JSP container. It does not -attempt to describe which configuration directives should be used to perform -specific tasks - for that, see the various HOW-TO documents on the -main index page.

- -

Tomcat configuration files are formatted as schemaless XML; elements and -attributes are case-sensitive. Apache Ant-style variable substitution -is supported; a system property with the name propname may be -used in a configuration file using the syntax ${propname}. All -system properties are available including those set using the -D -syntax, those automatically made available by the JVM and those configured in -the $CATALINA_BASE/conf/catalina.properties file. -

- -

The configuration element descriptions are organized into the following -major categories:

-
    -
  • Top Level Elements - <Server> is the - root element of the entire configuration file, while - <Service> represents a group of Connectors that is - associated with an Engine.
  • -
  • Connectors - Represent the interface between external - clients sending requests to (and receiving responses from) a particular - Service.
  • -
  • Containers - Represent components whose function is to - process incoming requests, and create the corresponding responses. - An Engine handles all requests for a Service, a Host handles all requests - for a particular virtual host, and a Context handles all requests for a - specific web application.
  • -
  • Nested Components - Represent elements that can be - nested inside the element for a Container. Some elements can be nested - inside any Container, while others can only be nested inside a - Context.
  • -
- -

For each element, the corresponding documentation follows this general -outline:

-
    -
  • Introduction - Overall description of this particular - component. There will be a corresponding Java interface (in - the org.apache.catalina package) that is implemented by one - or more standard implementations.
  • -
  • Attributes - The set of attributes that are legal for - this element. Generally, this will be subdivided into Common - attributes that are supported by all implementations of the corresponding - Java interface, and Standard Implementation attributes that are - specific to a particular Java class that implements this interface. - The names of required attributes are bolded.
  • -
  • Nested Components - Enumerates which of the Nested - Components can be legally nested within this element.
  • -
  • Special Features - Describes the configuration of a large - variety of special features (specific to each element type) that are - supported by the standard implementation of this interface.
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/jar-scanner.html b/bundledApps/tomcat/webapps/docs/config/jar-scanner.html deleted file mode 100755 index 0b5042ea..00000000 --- a/bundledApps/tomcat/webapps/docs/config/jar-scanner.html +++ /dev/null @@ -1,78 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Jar Scanner Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Jar Scanner Component

Table of Contents
- -
Introduction
- -

The Jar Scanner element represents the component that is - used to scan the web application for JAR files. It is typically used during - web application start to identify configuration files such as TLDs or - web-fragment.xml files that must be processed as part of the web application - initialisation.

- -

A Jar Scanner element MAY be nested inside a - Context component. If it is not included, - a default Jar Scanner configuration will be created automatically, which - is sufficient for most requirements.

- -
Attributes
- -
Common Attributes
- -

All implementations of Jar Scanner - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.tomcat.JarScanner interface. - If not specified, the standard value (defined below) will be used.

-
- -
- - -
Standard Implementation
- -

The standard implementation of Jar Scanner is - org.apache.tomcat.util.scan.StandardJarScanner. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
scanClassPath -

If true, the full web application classpath, including the shared and - common classloaders will be scanned for Jar files in addition to the - web application. The default is true.

-
scanAllFiles -

If true, any files found on the classpath will be checked to see if - they are Jar files rather than relying on the file extension being - .jar. The default is false

-
scanAllDirectories -

If true, any directories found on the classpath will be checked to see - if are expanded Jar files. The default is false. Tomcat - determines if directory is an expanded JAR file by looking for a META-INF - sub-directory. Only if the META-INF sub-directory exists, is the - directory to be an expanded JAR file.

-
- -
- - -
Nested Components
-

No components may be nested inside a Jar Scanner element. -

-
Special Features
-

No special features are associated with a Jar Scanner - element.

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/listeners.html b/bundledApps/tomcat/webapps/docs/config/listeners.html deleted file mode 100755 index 8a020880..00000000 --- a/bundledApps/tomcat/webapps/docs/config/listeners.html +++ /dev/null @@ -1,419 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The LifeCycle Listener Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The LifeCycle Listener Component

Table of Contents
- -
Introduction
- -

A Listener element defines a component that performs - actions when specific events occur, usually Tomcat starting or Tomcat - stopping.

- -

Listeners may be nested inside a Server, - Engine, Host or - Context. Some Listeners are only intended to be - nested inside specific elements. These constraints are noted in the - documentation below.

- -
Attributes
- -
Common Attributes
- -

All implementations of Listener - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.LifecycleListener - interface.

-
- -
- -
Nested Components
- -

No element may be nested inside a Listener.

- -
Standard Implementations
- -

Unlike most Catalina components, there are several standard - Listener implementations available. As a result, - the className attribute MUST be used to select the - implementation you wish to use.

- -
APR Lifecycle Listener - org.apache.catalina.core.AprLifecycleListener
- -

The APR Lifecycle Listener checks for the presence of - the APR/native library and loads the library if it is present. For more - information see the APR/native guide.

- -

This listener must only be nested within Server - elements.

- -

The following additional attributes are supported by the APR - Lifecycle Listener:

- -
AttributeDescription
SSLEngine -

Name of the SSLEngine to use. off: do not use SSL, - on: use SSL but no specific ENGINE.

-

The default value is on. This initializes the - native SSL engine, which must be enabled in the APR/native connector by - the use of the SSLEnabled attribute.

-

See the Official OpenSSL website - for more details on supported SSL hardware engines and manufacturers. -

-
SSLRandomSeed -

Entropy source used to seed the SSLEngine's PRNG. The default value - is builtin. On development systems, you may want to set - this to /dev/urandom to allow quicker start times.

-
FIPSMode -

Set to on to instruct OpenSSL to go into FIPS mode. - FIPS mode requires you to have a FIPS-capable OpenSSL library which - you must build yourself. - FIPS mode also requires Tomcat native library version 1.1.23 or later, - which must be built against the FIPS-compatible OpenSSL library. - If this attribute is "on", SSLEngine must be enabled as well. - The default value is off.

-
- -
- -
Jasper Listener - org.apache.catalina.core.JasperListener
- -

The Jasper Listener initializes the Jasper 2 JSP engine - before any web applications that may use it are loaded. For more - information on the Jasper 2 JSP engine see the - Jasper How To.

- -

This listener must only be nested within Server - elements.

- -

No additional attributes are supported by the Jasper Listener - .

- -
- -
Global Resources Lifecycle Listener - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener
- -

The Global Resources Lifecycle Listener initializes the - Global JNDI resources defined in server.xml as part of the Global Resources element. Without this - listener, none of the Global Resources will be available.

- -

This listener must only be nested within Server - elements.

- -

No additional attributes are supported by the Global Resources - Lifecycle Listener.

- -
- -
JRE Memory Leak Prevention Listener - org.apache.catalina.core.JreMemoryLeakPreventionListener
- -

The JRE Memory Leak Prevention Listener provides - work-arounds for known places where the Java Runtime environment uses - the context class loader to load a singleton as this will cause a memory - leak if a web application class loader happens to be the context class - loader at the time. The work-around is to initialise these singletons when - this listener starts as Tomcat's common class loader is the context class - loader at that time. It also provides work-arounds for known issues that - can result in locked JAR files.

- -

This listener must only be nested within Server - elements.

- -

The following additional attributes are supported by the JRE - Memory Leak Prevention Listener:

- -
AttributeDescription
appContextProtection -

Enables protection so that calls to - sun.awt.AppContext.getAppContext() triggered by a web - application do not result in a memory leak. Note that a call to this - method will be triggered as part of the web application stop process so - it is strongly recommended that this protection is enabled. The default - is true.

-
AWTThreadProtection -

Enables protection so that calls to - java.awt.Toolkit.getDefaultToolkit() triggered by a web - application do not result in a memory leak. - Defaults to false because an AWT thread is launched.

-
classesToInitialize -

List of comma-separated fully qualified class names to load and initialize - during the startup of this Listener. This allows to pre-load classes that are - known to provoke classloader leaks if they are loaded during a request - processing. Non-JRE classes may be referenced, like - oracle.jdbc.driver.OracleTimeoutThreadPerVM. - The default value is empty, but specific JRE classes are loaded by other leak - protection features managed by other attributes of this Listener.

-
driverManagerProtection -

The first use of java.sql.DriverManager will trigger the - loading of JDBC Driver in the the current class loader. The web - application level memory leak protection can take care of this in most - cases but triggering the loading here has fewer side-effects. The - default is true.

-
gcDaemonProtection -

Enables protection so that calls to - sun.misc.GC.requestLatency(long) triggered by a web - application do not result in a memory leak. Use of RMI is likely to - trigger a call to this method. A side effect of enabling this protection - is the creation of a thread named "GC Daemon". The protection uses - reflection to access internal Sun classes and may generate errors on - startup on non-Sun JVMs. The default is true.

-
java2DDisposerProtection -

Enables protection so that loading the - sun.java2d.Disposer class by a web application does not - result in a memory leak. - Defaults to false because a thread is launched.

-
ldapPoolProtection -

Enables protection so that the PoolCleaner thread started by - com.sun.jndi.ldap.LdapPoolManager does not result in a - memory leak. The thread is started the first time the - LdapPoolManager class is used if the system property - com.sun.jndi.ldap.connect.pool.timeout is set to a value - greater than 0. Without this protection, if a web application uses this - class the PoolCleaner thread will be configured with the thread's - context class loader set to the web application class loader which in - turn will trigger a memory leak on reload. Defaults to - true.

-
securityLoginConfigurationProtection -

Enables protection so that usage of the - javax.security.auth.login.Configuration class by a web - application does not provoke a memory leak. The first access of this - class will trigger the initializer that will retain a static reference - to the context class loader. The protection loads the class with the - system class loader to ensure that the static initializer is not - triggered by a web application. Defaults to true.

-
securityPolicyProtection -

Enables protection so that usage of the deprecated - javax.security.auth.Policy class by a web application does not - result in a memory leak. The first access of this class will trigger the - static initializer that will retain a static reference to the context - class loader. The protection calls the getPolicy() method - of this class to ensure that the static initializer is not triggered by - a web application. Defaults to true.

-
tokenPollerProtection -

Enables protection so that any token poller thread initialized by - sun.security.pkcs11.SunPKCS11.initToken() does not - result in a memory leak. The thread is started depending on various - conditions as part of the initialization of the Java Cryptography - Architecture. Without the protection this can happen during Webapp - deployment when the MessageDigest for generating session IDs is - initialized. As a result the thread has the Webapp class loader as its - thread context class loader. Enabling the protection initializes JCA - early during Tomcat startup. Defaults to true.

-
urlCacheProtection -

Enables protection so that reading resources from JAR files using - java.net.URLConnections does not result in the JAR file - being locked. Note that enabling this protection disables caching by - default for all resources obtained via - java.net.URLConnections. Caching may be re-enabled on a - case by case basis as required. Defaults to true.

-
xmlParsingProtection -

Enables protection so that parsing XML files within a web application - does not result in a memory leak. Note that memory profilers may not - display the GC root associated with this leak making it particularly - hard to diagnose. Defaults to true.

-
- -
- -
Security Lifecycle Listener - org.apache.catalina.security.SecurityListener
- -

The Security Lifecycle Listener performs a number of - security checks when Tomcat starts and prevents Tomcat from starting if they - fail. The listener is not enabled by default. To enabled it uncomment the - listener in $CATALINA_BASE/conf/server.xml. If the operating system supports - umask then the line in $CATALINA_HOME/bin/catalina.sh that obtains the umask - also needs to be uncommented.

- -

This listener must only be nested within Server - elements.

- -

The following additional attributes are supported by the Security - Lifecycle Listener:

- -
AttributeDescription
checkedOsUsers -

A comma separated list of OS users that must not be used to start - Tomcat. If not specified, the default value of root is used. To - disable this check, set the attribute to the empty string. Usernames - are checked in a case-insensitive manner.

-
minimumUmask -

The least rectrictive umask that must be configured before Tomcat - will start. If not specified, the default value of 0007 is used. - To disable this check, set the attribute to the empty string. The check - is not performed on Windows platforms.

-
- -
- -
ThreadLocal Leak Prevention Listener - org.apache.catalina.core.ThreadLocalLeakPreventionListener
- -

The ThreadLocal Leak Prevention Listener triggers the - renewal of threads in Executor pools when a - Context is being stopped to avoid thread-local - related memory leaks. Active threads will be renewed one by one when they - come back to the pool after executing their task.

- -

This listener must only be nested within Server - elements.

- -

No additional attributes are supported by the ThreadLocal Leak - Prevention Listener.

- -
- -
UserConfig - org.apache.catalina.startup.UserConfig
- -

The UserConfig provides feature of User Web Applications. - User Web Applications map a request URI starting with a tilde character ("~") - and a username to a directory (commonly named public_html) in that user's - home directory on the server.

- -

See the User Web Applications - special feature on the Host element for more information.

- -

The following additional attributes are supported by the - UserConfig:

- -
AttributeDescription
directoryName -

The directory name to be searched for within each user home directory. - The default is public_html.

-
userClass -

The class name of the user database class. - There are currently two user database, the - org.apache.catalina.startup.PasswdUserDatabase is used on a - Unix system that uses the /etc/passwd file to identify valid users. - The org.apache.catalina.startup.HomesUserDatabase is used on - a server where /etc/passwd is not in use. HomesUserDatabase deploy all - directories found in a specified base directory.

-
homeBase -

The base directory containing user home directories.This is effective - only when org.apache.catalina.startup.HomesUserDatabase is - used.

-
allow -

A regular expression defining user who deployment is allowed. If this - attribute is specified, the user to deploy must match for this pattern. - If this attribute is not specified, all users will be deployed unless the - user matches a deny pattern.

-
deny -

A regular expression defining user who deployment is denied. If this - attribute is specified, the user to deploy must not match for this - pattern. If this attribute is not specified, deployment of user will be - governed by a allow attribute.

-
- -
- -
Additional Implementations
- -
JMX Remote Lifecycle Listener - org.apache.catalina.mbeans.JmxRemoteLifecycleListener
- -

This listener requires catalina-jmx-remote.jar to be placed - in $CATALINA_HOME/lib. This jar may be found in the extras - directory of the binary download area.

- -

The JMX Remote Lifecycle Listener fixes the ports used by - the JMX/RMI Server making things much simpler if you need to connect - jconsole or a similar tool to a remote Tomcat instance that is running - behind a firewall. Only these ports are configured via the listener. The - remainder of the configuration is via the standard system properties for - configuring JMX. For further information on configuring JMX see - - Monitoring and Management Using JMX included with the Java SDK - documentation.

- -

This listener must only be nested within a Server - element.

- -

The following additional attributes are supported by the JMX Remote - Lifecycle Listener:

- -
AttributeDescription
rmiRegistryPortPlatform -

The port to be used by the JMX/RMI registry for the Platform MBeans. - This replaces the use of the - com.sun.management.jmxremote.port system property that - should not be set when using this valve.

-
rmiServerPortPlatform -

The port to be used by the Platform JMX/RMI server.

-
useLocalPorts -

Should any clients using these ports be forced to use local ports to - connect to the the JMX/RMI server. This is useful when tunnelling - connections over SSH or similar. Defaults to false.

-
- -

Using file-based Authentication and Authorisation

- -

If this listener was configured in server.xml as: -

-  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
-          rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
-  
- with the following system properties set (e.g. in setenv.sh): -
-  -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
-  -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
-  -Dcom.sun.management.jmxremote.ssl=false
-  
- $CATALINA_BASE/conf/jmxremote.password containing: -
-  admin letmein
-  
- $CATALINA_BASE/conf/jmxremote.access containing: -
-  admin readwrite
-  
- then opening ports 10001 (RMI Registry) and 10002 (JMX/RMI Server) in your - firewall would enable jconsole to connect to a Tomcat instance running - behind a firewall using a connection string of the form: -
-  service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi
-  
- with a user name of admin and a password of - letmein. -

- -

Using JAAS

- -

If we use the following system properties instead: -

-  -Dcom.sun.management.jmxremote.login.config=Tomcat
-  -Djava.security.auth.login.config=$CATALINA_BASE/conf/login.config
-  -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
-  -Dcom.sun.management.jmxremote.ssl=false
-  
- $CATALINA_BASE/conf/login.config containing your choice of JAAS LoginModule implementation, for example: -
-  Tomcat { /* should match to the com.sun.management.jmxremote.login.config property */
-
-    /* for illustration purposes only */
-    com.sun.security.auth.module.LdapLoginModule REQUIRED
-      userProvider="ldap://ldap-svr/ou=people,dc=example,dc=com"
-      userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
-      authzIdentity="admin"
-      debug=true;
-  };
-  
- $CATALINA_BASE/conf/jmxremote.access containing: -
-  admin readwrite
-  
- then we would need to provide LDAP credentials instead. -

- -

Note that the examples above do not use SSL. JMX access should - be considered equivalent to administrative access and secured accordingly. -

- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/loader.html b/bundledApps/tomcat/webapps/docs/config/loader.html deleted file mode 100755 index 3565994b..00000000 --- a/bundledApps/tomcat/webapps/docs/config/loader.html +++ /dev/null @@ -1,150 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Loader Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Loader Component

Table of Contents
- -
Introduction
- -

The Loader element represents the web - application class loader that will be used to load Java - classes and resources for your web application. Such - a class loader must follow the requirements of the Servlet - Specification, and load classes from the following locations:

-
    -
  • From the /WEB-INF/classes directory inside your - web application.
  • -
  • From JAR files in the /WEB-INF/lib directory - inside your web application.
  • -
  • From resources made available by Catalina to all web - applications globally.
  • -
- -

A Loader element MAY be nested inside a Context - component. If it is not included, a default Loader configuration will be - created automatically, which is sufficient for most requirements.

- -

For a more in-depth description of the class loader hierarchy - that is implemented by Catalina, see the ClassLoader HowTo.

- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -
Attributes
- -
Common Attributes
- -

All implementations of Loader - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Loader interface. - If not specified, the standard value (defined below) will be used.

-
delegate -

Set to true if you want the class loader to follow - the standard Java2 delegation model, and attempt to load classes from - parent class loaders before looking inside the web - application. Set to false (the default) to have the - class loader look inside the web application first, before asking - parent class loaders to find requested classes or resources.

-
reloadable -

Set to true if you want Catalina to monitor classes in - /WEB-INF/classes/ and /WEB-INF/lib for - changes, and automatically reload the web application if a change - is detected. This feature is very useful during application - development, but it requires significant runtime overhead and is - not recommended for use on deployed production applications. You - can use the Manager web - application, however, to trigger reloads of deployed applications - on demand.

- -

NOTE - The value for this property will be - inherited from the reloadable attribute you set on - the surrounding Context component, - and any value you explicitly set here will be replaced.

-
- -
- - -
Standard Implementation
- -

The standard implementation of Loader is - org.apache.catalina.loader.WebappLoader. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
loaderClass -

Java class name of the java.lang.ClassLoader - implementation class to use. If not specified, the default value is - org.apache.catalina.loader.WebappClassLoader. Custom - loaderClass implementations must extend - org.apache.catalina.loader.WebappClassLoader.

-
searchExternalFirst -

Set to true if you want repositories outside - of WEB-INF/classes and WEB-INF/lib to - be searched first. Default value is false.

-
- -
- -
VirtualWebappLoader Implementation
- -

This implementation of Loader is - org.apache.catalina.loader.VirtualWebappLoader. - It extends WebappLoader and supports the following - additional attributes

- -
AttributeDescription
virtualClasspath -

Additional repositories to search for resources. - Multiple values can be joined using ; - as a separator.

-

Leading and trailing whitespaces in values are ignored. - If a value does not point to an existing directory or - *.jar file, it is silently skipped. - Diagnostic messages can be seen if you enable debug logging for - the VirtualWebappLoader class. -

-

Example: virtualClasspath="${catalina.base}/myapp_config"

-
searchVirtualFirst -

Set to true if you want the virtual - class path to be searched before - WEB-INF/classes and WEB-INF/lib. - Default value is false.

-

If searched before, resources located in the virtual - class path take precendence over resources with the same - name contained in the webapp.

-
- -
- - -
Nested Components
- -

No components may be nested inside a Loader element.

- -
Special Features
- -
Logging
- -

A loader is associated with the log category based on its classname.

- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/manager.html b/bundledApps/tomcat/webapps/docs/config/manager.html deleted file mode 100755 index a9cddf3f..00000000 --- a/bundledApps/tomcat/webapps/docs/config/manager.html +++ /dev/null @@ -1,380 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Manager Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Manager Component

Table of Contents
- -
Introduction
- -

The Manager element represents the session - manager that will be used to create and maintain HTTP sessions - as requested by the associated web application.

- -

A Manager element MAY be nested inside a - Context component. If it is not included, - a default Manager configuration will be created automatically, which - is sufficient for most requirements, — see - Standard Manager Implementation below for the details - of this configuration.

- -
Attributes
- -
Common Attributes
- -

All implementations of Manager - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Manager interface. - If not specified, the standard value (defined below) will be used.

-
distributable -

Set to true to ask the session manager to enforce - the restrictions described in the Servlet Specification on - distributable applications (primarily, this would mean that all - session attributes must implement java.io.Serializable). - Set to false (the default) to not enforce these - restrictions.

- -

NOTE - The value for this property is inherited - automatically based on the presence or absence of the - <distributable> element in the web application - deployment descriptor (/WEB-INF/web.xml).

-
maxActiveSessions -

The maximum number of active sessions that will be created by - this Manager, or -1 (the default) for no limit.

- -

When the limit is reached, any attempt to create a new session - (e.g. with HttpServletRequest.getSession() call) - will fail with an IllegalStateException.

-
maxInactiveInterval -

The initial maximum time interval, in seconds, - between client requests before a session is invalidated. A negative value - will result in sessions never timing out. If the attribute is not provided, - a default of 1800 seconds (30 minutes) is used.

- -

This attribute provides the initial value whenever a - new session is created, but the interval may be dynamically - varied by a servlet via the - setMaxInactiveInterval method of the HttpSession object.

-
sessionIdLength -

The length of session ids created by this Manager, measured in bytes, - excluding subsequent conversion to a hexadecimal string and - excluding any JVM route information used for load balancing. - The default is 16.

-
- -
- - -
Standard Implementation
- -

Tomcat provides two standard implementations of Manager - for use — the default one stores active sessions, while the optional one - stores active sessions that have been swapped out (in addition to saving - sessions across a restart of Tomcat) in a storage location that is selected - via the use of an appropriate Store nested element.

- -

Standard Manager Implementation

- -

The standard implementation of Manager is - org.apache.catalina.session.StandardManager. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
pathname -

Absolute or relative (to the work directory for this Context) - pathname of the file in which session state will be preserved - across application restarts, if possible. The default is - "SESSIONS.ser".
See - Persistence Across Restarts - for more information. This persistence may be - disabled by setting this attribute to an empty string.

-
processExpiresFrequency -

Frequency of the session expiration, and related manager operations. - Manager operations will be done once for the specified amount of - backgroundProcess calls (i.e., the lower the amount, the more often the - checks will occur). The minimum value is 1, and the default value is 6. -

-
secureRandomClass -

Name of the Java class that extends - java.security.SecureRandom to use to generate session IDs. - If not specified, the default value is - java.security.SecureRandom.

-
secureRandomProvider -

Name of the provider to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the Manager - will use the platform default provider and the default algorithm. If not - specified, the platform default provider will be used.

-
secureRandomAlgorithm -

Name of the algorithm to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the Manager - will use the platform default provider and the default algorithm. If not - specified, the default algorithm of SHA1PRNG will be used. If the - default algorithm is not supported, the platform default will be used. - To specify that the platform default should be used, do not set the - secureRandomProvider attribute and set this attribute to the empty - string.

-
- -

Persistent Manager Implementation

- -

NOTE: You must set either the - org.apache.catalina.session.StandardSession.ACTIVITY_CHECK or - org.apache.catalina.STRICT_SERVLET_COMPLIANCE - system properties to true for - the persistent manager to work correctly.

- -

The persistent implementation of Manager is - org.apache.catalina.session.PersistentManager. In - addition to the usual operations of creating and deleting sessions, a - PersistentManager has the capability to swap active (but - idle) sessions out to a persistent storage mechanism, as well as to save - all sessions across a normal restart of Tomcat. The actual persistent - storage mechanism used is selected by your choice of a - Store element nested inside the Manager - element - this is required for use of PersistentManager.

- -

This implementation of Manager supports the following attributes in - addition to the Common Attributes - described earlier.

- -
AttributeDescription
className -

It has the same meaning as described in the - Common Attributes above. - You must specify - org.apache.catalina.session.PersistentManager to use - this manager implementation.

-
maxIdleBackup -

The time interval (in seconds) since the last access to a session - before it is eligible for being persisted to the session store, or - -1 to disable this feature. By default, this feature is - disabled.

-
maxIdleSwap -

The time interval (in seconds) since the last access to a session - before it should be persisted to the session store, and - passivated out of the server's memory, or -1 to disable - this feature. If this feature is enabled, the time interval specified - here should be equal to or longer than the value specified for - maxIdleBackup. By default, this feature is disabled.

-
minIdleSwap -

The time interval (in seconds) since the last access to a session - before it will be eligible to be persisted to the session store, and - passivated out of the server's memory, or -1 for this - swapping to be available at any time. If specified, this value should - be less than that specified by maxIdleSwap. By default, - this value is set to -1.

-
processExpiresFrequency -

It is the same as described above for the - org.apache.catalina.session.StandardManager class. -

-
saveOnRestart -

Should all sessions be persisted and reloaded when Tomcat is shut - down and restarted (or when this application is reloaded)? By default, - this attribute is set to true.

-
secureRandomClass -

It is the same as described above for the - org.apache.catalina.session.StandardManager class. -

-
secureRandomProvider -

It is the same as described above for the - org.apache.catalina.session.StandardManager class. -

-
secureRandomAlgorithm -

It is the same as described above for the - org.apache.catalina.session.StandardManager class. -

-
- -

In order to successfully use a PersistentManager, you must nest inside - it a <Store> element, as described below.

- -
- - -
Nested Components
- -

Standard Manager Implementation

- -

If you are using the Standard Manager Implementation - as described above, no elements may be nested inside your - <Manager> element.

- -

Persistent Manager Implementation

- -

If you are using the Persistent Manager Implementation - as described above, you MUST nest a - <Store> element inside, which defines the - characteristics of the persistent data storage. Two implementations - of the <Store> element are currently available, - with different characteristics, as described below.

- -
File Based Store
- -

The File Based Store implementation saves swapped out - sessions in individual files (named based on the session identifier) - in a configurable directory. Therefore, you are likely to encounter - scalability problems as the number of active sessions increases, and - this should primarily be considered a means to easily experiment.

- -

To configure this, add a <Store> nested inside - your <Manager> element with the following attributes: -

- -
AttributeDescription
checkInterval -

The interval (in seconds) between checks for expired sessions - among those sessions that are currently swapped out. By default, - this interval is set to 60 seconds (one minute).

-
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Store interface. You - must specify - org.apache.catalina.session.FileStore - to use this implementation.

-
directory -

Absolute or relative (to the temporary work directory for this web - application) pathname of the directory into which individual session - files are written. If not specified, the temporary work directory - assigned by the container is utilized.

-
- - -
JDBC Based Store
- -

The JDBC Based Store implementation saves swapped out - sessions in individual rows of a preconfigured table in a database - that is accessed via a JDBC driver. With large numbers of swapped out - sessions, this implementation will exhibit improved performance over - the File Based Store described above.

- -

To configure this, add a <Store> nested inside - your <Manager> element with the following attributes: -

- -
AttributeDescription
checkInterval -

The interval (in seconds) between checks for expired sessions - among those sessions that are currently swapped out. By default, - this interval is set to 60 seconds (one minute).

-
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Store interface. You - must specify - org.apache.catalina.session.JDBCStore - to use this implementation.

-
connectionURL -

The connection URL that will be handed to the configured JDBC - driver to establish a connection to the database containing our - session table.

-
dataSourceName -

Name of the JNDI resource for a JDBC DataSource-factory. If this option - is given and a valid JDBC resource can be found, it will be used and any - direct configuration of a JDBC connection via connectionURL - and driverName will be ignored. Since this code uses prepared - statements, you might want to configure pooled prepared statements as - shown in the JNDI resources - HOW-TO.

-
driverName -

Java class name of the JDBC driver to be used.

-
sessionAppCol -

Name of the database column, contained in the specified session - table, that contains the Engine, Host, and Web Application Context - name in the format /Engine/Host/Context.

-
sessionDataCol -

Name of the database column, contained in the specified - session table, that contains the serialized form of all session - attributes for a swapped out session. The column type must accept - a binary object (typically called a BLOB).

-
sessionIdCol -

Name of the database column, contained in the specified - session table, that contains the session identifier of the - swapped out session. The column type must accept character - string data of at least as many characters as are contained - in session identifiers created by Tomcat (typically 32).

-
sessionLastAccessedCol -

Name of the database column, contained in the specified - session table, that contains the lastAccessedTime - property of this session. The column type must accept a - Java long (64 bits).

-
sessionMaxInactiveCol -

Name of the database column, contained in the specified - session table, that contains the maxInactiveInterval - property of this session. The column type must accept a - Java integer (32 bits).

-
sessionTable -

Name of the database table to be used for storing swapped out - sessions. This table must contain (at least) the database columns - that are configured by the other attributes of this element.

-
sessionValidCol -

Name of the database column, contained in the specified - session table, that contains a flag indicating whether this - swapped out session is still valid or not. The column type - must accept a single character.

-
- -

Before attempting to use the JDBC Based Store for the first time, - you must create the table that will be used to store swapped out sessions. - Detailed SQL commands vary depending on the database you are using, but - a script like this will generally be required:

- -
-create table tomcat_sessions (
-  session_id     varchar(100) not null primary key,
-  valid_session  char(1) not null,
-  max_inactive   int not null,
-  last_access    bigint not null,
-  app_name       varchar(255),
-  session_data   mediumblob,
-  KEY kapp_name(app_name)
-);
-
- -

In order for the JDBC Based Store to successfully connect to your - database, the JDBC driver you configure must be visible to Tomcat's - internal class loader. Generally, that means you must place the JAR - file containing this driver into the $CATALINA_HOME/lib - directory.

- -
Special Features
- - -
Persistence Across Restarts
- -

Whenever Apache Tomcat is shut down normally and restarted, or when an - application reload is triggered, the standard Manager implementation - will attempt to serialize all currently active sessions to a disk - file located via the pathname attribute. All such saved - sessions will then be deserialized and activated (assuming they have - not expired in the mean time) when the application reload is completed.

- -

In order to successfully restore the state of session attributes, - all such attributes MUST implement the java.io.Serializable - interface. You MAY cause the Manager to enforce this restriction by - including the <distributable> element in your web - application deployment descriptor (/WEB-INF/web.xml).

- -
- -
Disable Session Persistence
- -

As documented above, every web application by default has - standard manager implementation configured, and it performs session - persistence across restarts. To disable this persistence feature, create - a Context configuration file for your web - application and add the following element there:

- -
<Manager pathname="" />
-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/realm.html b/bundledApps/tomcat/webapps/docs/config/realm.html deleted file mode 100755 index d1903ae6..00000000 --- a/bundledApps/tomcat/webapps/docs/config/realm.html +++ /dev/null @@ -1,805 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Realm Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Realm Component

Table of Contents
- -
Introduction
- -

A Realm element represents a "database" of usernames, - passwords, and roles (similar to Unix groups) assigned - to those users. Different implementations of Realm allow Catalina to be - integrated into environments where such authentication information is already - being created and maintained, and then utilize that information to implement - Container Managed Security as described in the Servlet - Specification.

- -

You may nest a Realm inside any Catalina container - Engine, Host, or - Context). In addition, Realms associated with - an Engine or a Host are automatically inherited by lower-level - containers, unless explicitly overridden.

- -

For more in-depth information about container managed security in web - applications, as well as more information on configuring and using the - standard realm component implementations, please see the - Container-Managed Security Guide. -

- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -
Attributes
- -
Common Attributes
- -

All implementations of Realm - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Realm interface.

-
- -

Unlike most Catalina components, there are several standard - Realm implementations available. As a result, - the className attribute MUST be used to select the - implementation you wish to use.

- -
- - -
JDBC Database Realm - org.apache.catalina.realm.JDBCRealm
- -

The JDBC Database Realm connects Tomcat to - a relational database, accessed through an appropriate JDBC driver, - to perform lookups of usernames, passwords, and their associated - roles. Because the lookup is done each time that it is required, - changes to the database will be immediately reflected in the - information used to authenticate new logins.

- -

A rich set of additional attributes lets you configure the required - connection to the underlying database, as well as the table and - column names used to retrieve the required information:

- -
AttributeDescription
allRolesMode -

This attribute controls how the special role name * is - handled when processing authorization constraints in web.xml. By - default, the specification compliant value of strict is - used which means that the user must be assigned one of the roles defined - in web.xml. The alternative values are authOnly which means - that the user must be authenticated but no check is made for assigned - roles and strictAuthOnly which means that the user must be - authenticated and no check will be made for assigned roles unless roles - are defined in web.xml in which case the user must be assigned at least - one of those roles.

-

When this attribute has the value of authOnly or - strictAuthOnly, the roleNameCol and - userRoleTable attributes become optional. If those two - attributes are omitted, the user's roles will not be loaded by this - Realm.

-
connectionName -

The database username to use when establishing the JDBC - connection.

-
connectionPassword -

The database password to use when establishing the JDBC - connection.

-
connectionURL -

The connection URL to be passed to the JDBC driver when - establishing a database connection.

-
digest -

The name of the MessageDigest algorithm used - to encode user passwords stored in the database. If not specified, - user passwords are assumed to be stored in clear-text.

-
digestEncoding -

The charset for encoding digests. If not specified, the platform - default will be used.

-
driverName -

Fully qualified Java class name of the JDBC driver to be - used to connect to the authentication database.

-
roleNameCol -

Name of the column, in the "user roles" table, which contains - a role name assigned to the corresponding user.

-

This attribute is required in majority of - configurations. See allRolesMode attribute for - a rare case when it can be omitted.

-
stripRealmForGss -

When processing users authenticated via the GSS-API, this attribute - controls if any "@..." is removed from the end of the user - name. If not specified, the default is true.

-
userCredCol -

Name of the column, in the "users" table, which contains - the user's credentials (i.e. password). If a value for the - digest attribute is specified, this component - will assume that the passwords have been encoded with the - specified algorithm. Otherwise, they will be assumed to be - in clear text.

-
userNameCol -

Name of the column, in the "users" and "user roles" table, - that contains the user's username.

-
userRoleTable -

Name of the "user roles" table, which must contain columns - named by the userNameCol and roleNameCol - attributes.

-

This attribute is required in majority of - configurations. See allRolesMode attribute for - a rare case when it can be omitted.

-
userTable -

Name of the "users" table, which must contain columns named - by the userNameCol and userCredCol - attributes.

-
X509UsernameRetrieverClassName -

When using X509 client certificates, this specifies the class name - that will be used to retrieve the user name from the certificate. - The class must implement the - org.apache.catalina.realm.X509UsernameRetriever - interface. The default is to use the certificate's SubjectDN - as the username.

-
- -

See the Container-Managed Security Guide for more - information on setting up container managed security using the - JDBC Database Realm component.

- -
- - -
DataSource Database Realm - org.apache.catalina.realm.DataSourceRealm
- -

The DataSource Database Realm connects Tomcat to - a relational database, accessed through a JNDI named JDBC DataSource - to perform lookups of usernames, passwords, and their associated - roles. Because the lookup is done each time that it is required, - changes to the database will be immediately reflected in the - information used to authenticate new logins.

- -

The JDBC Realm uses a single db connection. This requires that - realm based authentication be synchronized, i.e. only one authentication - can be done at a time. This could be a bottleneck for applications - with high volumes of realm based authentications.

- -

The DataSource Database Realm supports simultaneous realm based - authentications and allows the underlying JDBC DataSource to - handle optimizations like database connection pooling.

- -

A rich set of additional attributes lets you configure the name - of the JNDI JDBC DataSource, as well as the table and - column names used to retrieve the required information:

- -
AttributeDescription
allRolesMode -

This attribute controls how the special role name * is - handled when processing authorization constraints in web.xml. By - default, the specification compliant value of strict is - used which means that the user must be assigned one of the roles defined - in web.xml. The alternative values are authOnly which means - that the user must be authenticated but no check is made for assigned - roles and strictAuthOnly which means that the user must be - authenticated and no check will be made for assigned roles unless roles - are defined in web.xml in which case the user must be assigned at least - one of those roles.

-

When this attribute has the value of authOnly or - strictAuthOnly, the roleNameCol and - userRoleTable attributes become optional. If those two - attributes are omitted, the user's roles will not be loaded by this - Realm.

-
dataSourceName -

The name of the JNDI JDBC DataSource for this Realm.

-
digest -

The name of the MessageDigest algorithm used - to encode user passwords stored in the database. If not specified, - user passwords are assumed to be stored in clear-text.

-
localDataSource -

When the realm is nested inside a Context element, this allows the - realm to use a DataSource defined for the Context rather than a global - DataSource. If not specified, the default is false: use a - global DataSource.

-
roleNameCol -

Name of the column, in the "user roles" table, which contains - a role name assigned to the corresponding user.

-

This attribute is required in majority of - configurations. See allRolesMode attribute for - a rare case when it can be omitted.

-
stripRealmForGss -

When processing users authenticated via the GSS-API, this attribute - controls if any "@..." is removed from the end of the user - name. If not specified, the default is true.

-
userCredCol -

Name of the column, in the "users" table, which contains - the user's credentials (i.e. password). If a value for the - digest attribute is specified, this component - will assume that the passwords have been encoded with the - specified algorithm. Otherwise, they will be assumed to be - in clear text.

-
userNameCol -

Name of the column, in the "users" and "user roles" table, - that contains the user's username.

-
userRoleTable -

Name of the "user roles" table, which must contain columns - named by the userNameCol and roleNameCol - attributes.

-

This attribute is required in majority of - configurations. See allRolesMode attribute for - a rare case when it can be omitted.

-
userTable -

Name of the "users" table, which must contain columns named - by the userNameCol and userCredCol - attributes.

-
X509UsernameRetrieverClassName -

When using X509 client certificates, this specifies the class name - that will be used to retrieve the user name from the certificate. - The class must implement the - org.apache.catalina.realm.X509UsernameRetriever - interface. The default is to use the certificate's SubjectDN - as the username.

-
- -

See the - DataSource Realm HOW-TO for more information on setting up container - managed security using the DataSource Database Realm component.

- -
- - -
JNDI Directory Realm - org.apache.catalina.realm.JNDIRealm
- -

The JNDI Directory Realm connects Tomcat to - an LDAP Directory, accessed through an appropriate JNDI driver, - that stores usernames, passwords, and their associated - roles. Changes to the directory are immediately reflected in the - information used to authenticate new logins.

- - -

The directory realm supports a variety of approaches to using - LDAP for authentication:

- -
    -
  • The realm can either use a pattern to determine the - distinguished name (DN) of the user's directory entry, or search - the directory to locate that entry. -
  • - -
  • The realm can authenticate the user either by binding to the - directory with the DN of the user's entry and the password - presented by the user, or by retrieving the password from the - user's entry and performing a comparison locally. -
  • - -
  • Roles may be represented in the directory as explicit entries - found by a directory search (e.g. group entries of which the user - is a member), as the values of an attribute in the user's entry, - or both. -
  • -
- -

A rich set of additional attributes lets you configure the - required behaviour as well as the connection to the underlying - directory and the element and attribute names used to retrieve - information from the directory:

- -
AttributeDescription
adCompat -

Microsoft Active Directory often returns referrals. - When iterating over NamingEnumerations these lead to - PartialResultExceptions. If you want us to ignore those exceptions, - set this attribute to "true". Unfortunately there's no stable way - to detect, if the Exceptions really come from an AD referral. - The default value is "false".

-
allRolesMode -

This attribute controls how the special role name * is - handled when processing authorization constraints in web.xml. By - default, the specification compliant value of strict is - used which means that the user must be assigned one of the roles defined - in web.xml. The alternative values are authOnly which means - that the user must be authenticated but no check is made for assigned - roles and strictAuthOnly which means that the user must be - authenticated and no check will be made for assigned roles unless roles - are defined in web.xml in which case the user must be assigned at least - one of those roles.

-
alternateURL -

If a socket connection can not be made to the provider at - the connectionURL an attempt will be made to use the - alternateURL.

-
authentication -

A string specifying the type of authentication to use. - "none", "simple", "strong" or a provider specific definition - can be used. If no value is given the providers default is used.

-
commonRole -

A role name assigned to each successfully authenticated user in - addition to the roles retrieved from LDAP. If not specified, only - the roles retrieved via LDAP are used.

-
connectionName -

The directory username to use when establishing a - connection to the directory for LDAP search operations. If not - specified an anonymous connection is made, which is often - sufficient unless you specify the userPassword - property.

-
connectionPassword -

The directory password to use when establishing a - connection to the directory for LDAP search operations. If not - specified an anonymous connection is made, which is often - sufficient unless you specify the userPassword - property.

-
connectionTimeout -

The timeout in milliseconds to use when establishing the connection - to the LDAP directory. If not specified, a value of 5000 (5 seconds) is - used.

-
connectionURL -

The connection URL to be passed to the JNDI driver when - establishing a connection to the directory.

-
contextFactory -

Fully qualified Java class name of the factory class used - to acquire our JNDI InitialContext. By default, - assumes that the standard JNDI LDAP provider will be utilized.

-
derefAliases -

A string specifying how aliases are to be dereferenced during - search operations. The allowed values are "always", "never", - "finding" and "searching". If not specified, "always" is used.

-
digest -

The digest algorithm to apply to the plaintext password offered - by the user before comparing it with the value retrieved from the - directory. Valid values are those accepted for the algorithm name - by the java.security.MessageDigest class. If not - specified the plaintext password is assumed to be retrieved. Not - required unless userPassword is specified

-
protocol -

A string specifying the security protocol to use. If not given - the providers default is used.

-
referrals -

How do we handle JNDI referrals? Allowed values are - "ignore", "follow", or "throw" (see javax.naming.Context.REFERRAL - for more information). - Microsoft Active Directory often returns referrals. - If you need to follow them set referrals to "follow". - Caution: if your DNS is not part of AD, the LDAP client lib might try - to resolve your domain name in DNS to find another LDAP server.

-
roleBase -

The base directory entry for performing role searches. If not - specified the top-level element in the directory context will be used. - If specified it may optionally include pattern replacements - "{0}".."{n}" corresponding to the name parts of the - user's distinguished name (as returned by - javax.naming.Name.get()).

-
roleName -

The name of the attribute that contains role names in the - directory entries found by a role search. In addition you can - use the userRoleName property to specify the name - of an attribute, in the user's entry, containing additional - role names.

-

If roleName is not specified a role - search does not take place, and roles are taken only from the - user's entry.

-
roleNested -

Set to true if you want to nest roles into roles. - When a role search is performed and the value of this property is - true, the search will be repeated recursively to find - all the roles that belong to the user either directly or indirectly. - If not specified, the default value of false is used.

-
roleSearch -

The LDAP filter expression used for performing role - searches.

- -

Use {0} to substitute the distinguished name (DN) - of the user, and/or {1} to substitute the username, - and/or {2} for the value of an attribute from the - user's directory entry, of the authenticated user. - The name of the attribute that provides the value for {2} - is configured by the userRoleAttribute property.

- -

When roleNested property is true, - this filter expression will be also used to recursively search for - other roles, which indirectly belong to this user. To find the - roles that match the newly found role, the following values - are used: - {0} is substituted by the distinguished name of the newly - found role, and both {1} and {2} are - substituted by the name of the role (see the roleName - property). The userRoleAttribute property is not - applicable to this search.

- -

If this property is not specified, a role search does not take - place and roles are taken only from the attribute in the user's entry - specified by the userRoleName property.

-
roleSearchAsUser -

When searching for user roles, should the search be performed as the - user currently being authenticated? If false, - connectionName and connectionPassword will be - used if specified, else an anonymous. If not specified, the default - value of false is used. Note that when accessing the - directory using delegated credentials, this attribute is always ignored - and the search is performed using the delegated credentials.

-
roleSubtree -

Set to true if you want to search the entire - subtree of the element specified by the roleBase - property for role entries associated with the user. The - default value of false causes only the top level - to be searched.

-
sizeLimit -

Specifies the maximum number of records to return when using the - userSearch attribute. If not specified, the default of - 0 is used which indicates no limit.

-
stripRealmForGss -

When processing users authenticated via the GSS-API, this attribute - controls if any "@..." is removed from the end of the user - name. If not specified, the default is true.

-
timeLimit -

Specifies the time (in milliseconds) to wait for records to be - returned when using the userSearch attribute. If not - specified, the default of 0 is used which indicates no - limit.

-
useDelegatedCredential -

When the JNIRealm is used with the SPNEGO authenticator, delegated - credentials for the user may be available. If such credentials are - present, this attribute controls whether are not they are used to - connect to the directory. If not specified, the default value of - true is used.

-
userBase -

The base element for user searches performed using the - userSearch expression. Not used if you are using - the userPattern expression.

-
userPassword -

Name of the attribute in the user's entry containing the - user's password. If you specify this value, JNDIRealm will - bind to the directory using the values specified by - connectionName and - connectionPassword properties, and retrieve the - corresponding attribute for comparison to the value specified - by the user being authenticated. If you do - not specify this value, JNDIRealm will - attempt a simple bind to the directory using the DN of the - user's entry and the password presented by the user, with a - successful bind being interpreted as an authenticated - user.

-
userPattern -

Pattern for the distinguished name (DN) of the user's - directory entry, with {0} marking where the - actual username should be inserted. You can use this property - instead of userSearch, userSubtree - and userBase when the distinguished name contains - the username and is otherwise the same for all users. Note that - when accessing the directory using delegated credentials, this - attribute is always ignored and userSearch, - userSubtree and userBase are always - used instead.

-
userRoleName -

The name of an attribute in the user's directory entry - containing zero or more values for the names of roles assigned - to this user. In addition you can use the - roleName property to specify the name of an - attribute to be retrieved from individual role entries found - by searching the directory. If userRoleName is - not specified all the roles for a user derive from the role - search.

-
userRoleAttribute -

The name of an attribute in the user's directory entry - containing the value that you wish to use when you search for - roles. This is especially useful for RFC 2307 where - the role memberUid can be the uid or the - uidNumber of the user. This value will be - marked as {2} in your role search filter expression. - This value will NOT be available for nested role searches.

-
userSearch -

The LDAP filter expression to use when searching for a - user's directory entry, with {0} marking where - the actual username should be inserted. Use this property - (along with the userBase and - userSubtree properties) instead of - userPattern to search the directory for the - user's entry.

-
userSubtree -

Set to true if you want to search the entire - subtree of the element specified by the userBase - property for the user's entry. The default value of - false causes only the top level to be searched. - Not used if you are using the userPattern - expression.

-
X509UsernameRetrieverClassName -

When using X509 client certificates, this specifies the class name - that will be used to retrieve the user name from the certificate. - The class must implement the - org.apache.catalina.realm.X509UsernameRetriever - interface. The default is to use the certificate's SubjectDN - as the username.

-
- -

See the Container-Managed Security Guide for more - information on setting up container managed security using the - JNDI Directory Realm component.

- -
- - -
UserDatabase Realm - org.apache.catalina.realm.UserDatabaseRealm
- -

The UserDatabase Realm is a Realm implementation - that is based on a UserDatabase resource made available through the global - JNDI resources configured for this Tomcat instance.

- -

The UserDatabase Realm implementation supports the following - additional attributes:

- -
AttributeDescription
allRolesMode -

This attribute controls how the special role name * is - handled when processing authorization constraints in web.xml. By - default, the specification compliant value of strict is - used which means that the user must be assigned one of the roles defined - in web.xml. The alternative values are authOnly which means - that the user must be authenticated but no check is made for assigned - roles and strictAuthOnly which means that the user must be - authenticated and no check will be made for assigned roles unless roles - are defined in web.xml in which case the user must be assigned at least - one of those roles.

-
resourceName -

The name of the global UserDatabase resource - that this realm will use for user, password and role information.

-
X509UsernameRetrieverClassName -

When using X509 client certificates, this specifies the class name - that will be used to retrieve the user name from the certificate. - The class must implement the - org.apache.catalina.realm.X509UsernameRetriever - interface. The default is to use the certificate's SubjectDN - as the username.

-
- -

See the - Container-Managed Security Guide for more - information on setting up container managed security using the UserDatabase - Realm component and the - JNDI resources how-to for more - information on how to configure a UserDatabase resource.

- -
- - -
Memory Based Realm - org.apache.catalina.realm.MemoryRealm
- -

The Memory Based Realm is a simple Realm implementation - that reads user information from an XML format, and represents it as a - collection of Java objects in memory. This implementation is intended - solely to get up and running with container managed security - it is NOT - intended for production use. As such, there are no mechanisms for - updating the in-memory collection of users when the content of the - underlying data file is changed.

- -

The Memory Based Realm implementation supports the following - additional attributes:

- -
AttributeDescription
allRolesMode -

This attribute controls how the special role name * is - handled when processing authorization constraints in web.xml. By - default, the specification compliant value of strict is - used which means that the user must be assigned one of the roles defined - in web.xml. The alternative values are authOnly which means - that the user must be authenticated but no check is made for assigned - roles and strictAuthOnly which means that the user must be - authenticated and no check will be made for assigned roles unless roles - are defined in web.xml in which case the user must be assigned at least - one of those roles.

-
digest -

The digest algorithm used to store passwords in non-plaintext - formats. Valid values are those accepted for the algorithm name by the - java.security.MessageDigest class. If not specified, - passwords are stored in clear text.

-
pathname -

Absolute or relative (to $CATALINA_BASE) pathname to the XML file - containing our user information. See below for details on the - XML element format required. If no pathname is specified, the - default value is conf/tomcat-users.xml.

-
stripRealmForGss -

When processing users authenticated via the GSS-API, this attribute - controls if any "@..." is removed from the end of the user - name. If not specified, the default is true.

-
X509UsernameRetrieverClassName -

When using X509 client certificates, this specifies the class name - that will be used to retrieve the user name from the certificate. - The class must implement the - org.apache.catalina.realm.X509UsernameRetriever - interface. The default is to use the certificate's SubjectDN - as the username.

-
- -

The XML document referenced by the pathname attribute must - conform to the following requirements:

-
    -
  • The root (outer) element must be <tomcat-users>. -
  • -
  • Each authorized user must be represented by a single XML element - <user>, nested inside the root element.
  • -
  • Each <user> element must have the following - attributes: -
      -
    • name - Username of this user (must be unique - within this file).
    • -
    • password - Password of this user (in - clear text).
    • -
    • roles - Comma-delimited list of the role names - assigned to this user.
    • -
  • -
- -

See the Container-Managed Security Guide for more - information on setting up container managed security using the - Memory Based Realm component.

- -
- - -
JAAS Realm - org.apache.catalina.realm.JAASRealm
- -

JAASRealm is an implementation of the Tomcat - Realm interface that authenticates users through the Java - Authentication & Authorization Service (JAAS) framework which is now - provided as part of the standard J2SE API.

- -

Using JAASRealm gives the developer the ability to combine practically - any conceivable security realm with Tomcat's CMA.

- -

JAASRealm is prototype for Tomcat of the JAAS-based J2EE authentication - framework for J2EE v1.4, based on the JCP Specification Request - 196 to enhance container-managed security and promote 'pluggable' - authentication mechanisms whose implementations would be - container-independent.

- -

Based on the JAAS login module and principal - (see javax.security.auth.spi.LoginModule and - javax.security.Principal), you can develop your own security - mechanism or wrap another third-party mechanism for integration with the CMA - as implemented by Tomcat.

- -

The JAAS Realm implementation supports the following additional - attributes:

- -
AttributeDescription
allRolesMode -

This attribute controls how the special role name * is - handled when processing authorization constraints in web.xml. By - default, the specification compliant value of strict is - used which means that the user must be assigned one of the roles defined - in web.xml. The alternative values are authOnly which means - that the user must be authenticated but no check is made for assigned - roles and strictAuthOnly which means that the user must be - authenticated and no check will be made for assigned roles unless roles - are defined in web.xml in which case the user must be assigned at least - one of those roles.

-
appName -

The name of the application as configured in your login configuration - file - (JAAS LoginConfig).

-
userClassNames -

A comma-separated list of the names of the classes that you have made - for your user Principals.

-
roleClassNames -

A comma-separated list of the names of the classes that you have made - for your role Principals.

-
stripRealmForGss -

When processing users authenticated via the GSS-API, this attribute - controls if any "@..." is removed from the end of the user - name. If not specified, the default is true.

-
useContextClassLoader -

Instructs JAASRealm to use the context class loader for loading the - user-specified LoginModule class and associated - Principal classes. The default value is true, - which is backwards-compatible with the way Tomcat 5 works. To load - classes using the container's classloader, specify - false.

-
X509UsernameRetrieverClassName -

When using X509 client certificates, this specifies the class name - that will be used to retrieve the user name from the certificate. - The class must implement the - org.apache.catalina.realm.X509UsernameRetriever - interface. The default is to use the certificate's SubjectDN - as the username.

-
- -

See the Container-Managed Security - Guide for more information on setting up container managed security - using the JAAS Realm component.

- -
- - -
Combined Realm - org.apache.catalina.realm.CombinedRealm
- -

CombinedRealm is an implementation of the Tomcat - Realm interface that authenticates users through one or more - sub-Realms.

- -

Using CombinedRealm gives the developer the ability to combine multiple - Realms of the same or different types. This can be used to authenticate - against different sources, provide fall back in case one Realm fails or for - any other purpose that requires multiple Realms.

- -

Sub-realms are defined by nesting Realm elements inside the - Realm element that defines the CombinedRealm. Authentication - will be attempted against each Realm in the order they are - listed. Authentication against any Realm will be sufficient to authenticate - the user.

- -

The CombinedRealm implementation does not support any additional - attributes.

- -

See the Container-Managed Security - Guide for more information on setting up container managed security - using the CombinedRealm component.

- -
- - -
LockOut Realm - org.apache.catalina.realm.LockOutRealm
- -

LockOutRealm is an implementation of the Tomcat - Realm interface that extends the CombinedRealm to provide lock - out functionality to provide a user lock out mechanism if there are too many - failed authentication attempts in a given period of time.

- -

To ensure correct operation, there is a reasonable degree of - synchronization in this Realm.

- -

This Realm does not require modification to the underlying Realms or the - associated user storage mechanisms. It achieves this by recording all failed - logins, including those for users that do not exist. To prevent a DOS by - deliberating making requests with invalid users (and hence causing this - cache to grow) the size of the list of users that have failed authentication - is limited.

- -

Sub-realms are defined by nesting Realm elements inside the - Realm element that defines the LockOutRealm. Authentication - will be attempted against each Realm in the order they are - listed. Authentication against any Realm will be sufficient to authenticate - the user.

- -

The LockOutRealm implementation supports the following additional - attributes.

- -
AttributeDescription
cacheRemovalWarningTime -

If a failed user is removed from the cache because the cache is too - big before it has been in the cache for at least this period of time (in - seconds) a warning message will be logged. Defaults to 3600 (1 hour).

-
cacheSize -

Number of users that have failed authentication to keep in cache. Over - time the cache will grow to this size and may not shrink. Defaults to - 1000.

-
failureCount -

The number of times in a row a user has to fail authentication to be - locked out. Defaults to 5.

-
lockOutTime -

The time (in seconds) a user is locked out for after too many - authentication failures. Defaults to 300 (5 minutes).

-
- -

See the Container-Managed Security - Guide for more information on setting up container managed security - using the LockOutRealm component.

- -
- -
Nested Components
- -

CombinedRealm Implementation

- -

If you are using the CombinedRealm Implementation or a Realm - that extends the CombinedRealm, e.g. the LockOutRealm, - <Realm> elements may be nested inside it.

- -

Other Realm Implementations

- -

No other Realm implementation supports nested components.

- -
Special Features
- -

See Single Sign On for information about - configuring Single Sign On support for a virtual host.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/resources.html b/bundledApps/tomcat/webapps/docs/config/resources.html deleted file mode 100755 index 8087f6d2..00000000 --- a/bundledApps/tomcat/webapps/docs/config/resources.html +++ /dev/null @@ -1,100 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Resources Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Resources Component

Table of Contents
- -
Introduction
- -

The Resources element represents the web - application static resources, from which classes will be loaded, - HTML, JSP and the other static files will be served. This allows the webapp - to reside on various mediums other than the filesystem, like compressed - in a WAR file, in a JDBC database, or in a more advanced versioning - repository.

- -

A unified caching engine is provided for all accesses to the webapp - resources made by the servlet container and web applications which use the - container provided mechanisms to access such resources, such as classloader - access, access through the ServletContext interface, or native - access through the DirectoryContext interface.

- -

Note: Running a webapp with non-filesystem based - Resources implementations is only possible when the webapp does not - rely on direct filesystem access to its own resources, and uses the methods - in the ServletContext interface to access them.

- -

A Resources element MAY be nested inside a - Context component. If it is not included, - a default filesystem based Resources will be created automatically, - which is sufficient for most requirements.

- -
Attributes
- -
Common Attributes
- -

All implementations of Resources - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the javax.naming.directory.DirContext interface. - It is recommended for optimal functionality and performance, - but not mandatory, that the class extend - org.apache.naming.resources.BaseDirContext, as well as - use the special object types provided in the - org.apache.naming.resources for returned objects. - If not specified, the standard value (defined below) will be used.

-
- -
- - -
Standard Implementation
- -

The standard implementation of Resources is - org.apache.naming.resources.FileDirContext, and - is configured by its parent Context element.

- -
- -
VirtualDirContext implementation
-

This implementation of Resources is - org.apache.naming.resources.VirtualDirContext and is aimed to be used - during development to deploy a webapp without copying files to a webapp compliant - directory structure. - It extends FileDirContext and supports the following - additional attributes

- -
AttributeDescription
extraResourcePaths -

Allows to map a path of the filesystem to a path in the webapp. Multiple - filesystem paths can be mapped to the same path in the webapp. Filesystem - path and virtual path must be separated by an equal signe (=). Pairs of paths - must be separated by a column.

- Example: /=/Users/jdoe/mywebapp/src/main/webapp,/=/Users/jdoe/mywebapp/src/main/webapp2,/pictures=/Users/jdoe/sharedpictures -

The path to the docBase (as declared in the Context) must not be added here.

-

This attribute enhances the feature provided by the aliases - attribute of the StandardContext.

-
-
- -
Nested Components
- -

No components may be nested inside a Resources element.

- -
Special Features
- -

No special features are associated with a Resources - element.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/server.html b/bundledApps/tomcat/webapps/docs/config/server.html deleted file mode 100755 index f1992c57..00000000 --- a/bundledApps/tomcat/webapps/docs/config/server.html +++ /dev/null @@ -1,82 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Server Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Server Component

Table of Contents
- -
Introduction
- -

A Server element represents the entire Catalina - servlet container. Therefore, it must be the single outermost element - in the conf/server.xml configuration file. Its attributes - represent the characteristics of the servlet container as a whole.

- -
Attributes
- -
Common Attributes
- -

All implementations of Server - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Server interface. - If no class name is specified, the standard implementation will - be used.

-
address -

The TCP/IP address on which this server waits for a shutdown - command. If no address is specified, localhost is used.

-
port -

The TCP/IP port number on which this server waits for a shutdown - command. Set to -1 to disable the shutdown port.

-

Note: Disabling the shutdown port works well when Tomcat is started - using Apache Commons Daemon - (running as a service on Windows or with jsvc on un*xes). It cannot be - used when running Tomcat with the standard shell scripts though, as it - will prevent shutdown.bat|.sh and catalina.bat|.sh from stopping it - gracefully.

-
shutdown -

The command string that must be received via a TCP/IP connection - to the specified port number, in order to shut down Tomcat.

-
- -
- -
Standard Implementation
- -

The standard implementation of Server is - org.apache.catalina.core.StandardServer. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
- -
- -
Nested Components
- -

The following components may be nested inside a Server - element:

- - -
Special Features
- -

There are no special features associated with a Server. -

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/service.html b/bundledApps/tomcat/webapps/docs/config/service.html deleted file mode 100755 index 87868bb8..00000000 --- a/bundledApps/tomcat/webapps/docs/config/service.html +++ /dev/null @@ -1,69 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Service Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Service Component

Table of Contents
- -
Introduction
- -

A Service element represents the combination of one or - more Connector components that share a single - Engine component for processing incoming - requests. One or more Service elements may be nested - inside a Server element.

- -
Attributes
- -
Common Attributes
- -

All implementations of Service - support the following attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This class must - implement the org.apache.catalina.Service interface. - If no class name is specified, the standard implementation will - be used.

-
name -

The display name of this Service, which will - be included in log messages if you utilize standard Catalina - components. The name of each Service that is - associated with a particular Server - must be unique.

-
- -
- -
Standard Implementation
- -

The standard implementation of Service is - org.apache.catalina.core.StandardService. - It supports the following additional attributes (in addition to the - common attributes listed above):

- -
AttributeDescription
- -
- -
Nested Components
- -

The only components that may be nested inside a Service - element are one or more Connector elements, - followed by exactly one Engine element.

- -
Special Features
- -

There are no special features associated with a Service. -

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/systemprops.html b/bundledApps/tomcat/webapps/docs/config/systemprops.html deleted file mode 100755 index d2be168f..00000000 --- a/bundledApps/tomcat/webapps/docs/config/systemprops.html +++ /dev/null @@ -1,448 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - System Properties

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

System Properties

Table of Contents
- -
Introduction
-

The following sections list the system properties that may be set to modify - the default Tomcat behaviour.

-
Property replacements
-
PropertyDescription
org.apache.tomcat.util.digester. PROPERTY_SOURCE -

Set this to a fully qualified name of a class that implements - org.apache.tomcat.util.IntrospectionUtils.PropertySource. - Required to have a public constructor with no arguments.

-

Use this to add a property source, that will be invoked when ${parameter} - denoted parameters are found in the XML files that Tomcat parses.

-
- -
Clustering
-
PropertyDescription
org.apache.catalina. tribes.dns_lookups -

If true, the clustering module will attempt to use DNS to - resolve any host names provided in the cluster configuration.

-

If not specified, the default value of false will be used.

-
- -
Expression Language
-
PropertyDescription
org.apache.el.BeanELResolver. CACHE_SIZE -

The number of javax.el.BeanELResolver.BeanProperties objects that will - be cached by the EL Parser.

-

If not specified, the default of 1000 will be used.

-
org.apache.el.ExpressionBuilder. CACHE_SIZE -

The number of parsed EL expressions that will be cached by the EL - Parser.

-

If not specified, the default of 5000 will be used.

-
org.apache.el.parser. COERCE_TO_ZERO -

If true, when coercing expressions to numbers - "" and null will be coerced to zero as required - by the specification.

-

If not specified, the default value of true will be used.

-
org.apache.el.parser. SKIP_IDENTIFIER_CHECK -

If true, when parsing expressions, identifiers will not be - checked to ensure that they conform to the Java Language Specification for - Java identifiers.

-

If not specified, the default value of false will be used.

-
-
Jasper
-
PropertyDescription
org.apache.jasper.compiler. Generator.POOL_TAGS_WITH_EXTENDS -

By default, JSPs that use their own base class via the extends - attribute of the page directive, will have Tag pooling disabled since - Jasper cannot guarantee that the necessary initialisation will have taken - place. This can have a negative impact on performance. Providing the - alternative base class calls _jspInit() from Servlet.init(), setting this - property to true will enable pooling with an alternative base - class. If the alternative base class does not call _jspInit() and this - property is true, NPEs will occur when attempting to use - tags.

-

If not specified, the default value of false will be used. -

-
org.apache.jasper.compiler. Generator.STRICT_GET_PROPERTY -

If true, the requirement to have the object referenced in - jsp:getProperty action to be previously "introduced" - to the JSP processor, as specified in the chapter JSP.5.3 of JSP 2.0 and - later specifications, is enforced.

-

If not specified, the specification compliant default of - true will be used.

-
org.apache.jasper.compiler. Generator.VAR_EXPRESSIONFACTORY -

The name of the variable to use for the expression language expression - factory.

-

If not specified, the default value of _el_expressionfactory - will be used.

-
org.apache.jasper.compiler. Generator.VAR_INSTANCEMANAGER -

The name of the variable to use for the instance manager factory.

-

If not specified, the default value of _jsp_instancemanager - will be used.

-
org.apache.jasper.compiler. Parser.STRICT_QUOTE_ESCAPING -

If false the requirements for escaping quotes in JSP - attributes will be relaxed so that an unescaped quote will not - cause an error.

-

If not specified, the specification compliant default of - true will be used.

-
org.apache.jasper.compiler. Parser.STRICT_WHITESPACE -

If false the requirements for whitespace before an - attribute name will be relaxed so that the lack of whitespace will not - cause an error.

-

If not specified, the specification compliant default of - true will be used.

-
org.apache.jasper.runtime. BodyContentImpl.LIMIT_BUFFER -

If true, any tag buffer that expands beyond - org.apache.jasper.Constants.DEFAULT_TAG_BUFFER_SIZE will be - destroyed and a new buffer created of the default size.

-

If not specified, the default value of false will be used.

-
org.apache.jasper.runtime. JspFactoryImpl.USE_POOL -

If true, a ThreadLocal PageContext pool will - be used.

-

If not specified, the default value of true will be used.

-
org.apache.jasper.runtime. JspFactoryImpl.POOL_SIZE -

The size of the ThreadLocal PageContext.

-

If not specified, the default value of 8 will be used.

-
org.apache.jasper.Constants. JSP_SERVLET_BASE -

The base class of the Servlets generated from the JSPs.

-

If not specified, the default value of - org.apache.jasper.runtime.HttpJspBase will be used.

-
org.apache.jasper.Constants. SERVICE_METHOD_NAME -

The name of the service method called by the base class.

-

If not specified, the default value of _jspService - will be used.

-
org.apache.jasper.Constants. SERVLET_CLASSPATH -

The name of the ServletContext attribute that provides the classpath - for the JSP.

-

If not specified, the default value of - org.apache.catalina.jsp_classpath will be used.

-
org.apache.jasper.Constants. JSP_FILE -

The name of the request attribute for <jsp-file> - element of a servlet definition. If present on a request, this overrides - the value returned by request.getServletPath() to select the - JSP page to be executed.

-

If not specified, the default value of - org.apache.catalina.jsp_file will be used.

-
org.apache.jasper.Constants. PRECOMPILE -

The name of the query parameter that causes the JSP engine to just - pregenerate the servlet but not invoke it.

-

If not specified, the default value of jsp_precompile - will be used, as defined by JSP specification (JSP.11.4.2).

-
org.apache.jasper.Constants. JSP_PACKAGE_NAME -

The default package name for compiled jsp pages.

-

If not specified, the default value of org.apache.jsp - will be used.

-
org.apache.jasper.Constants. TAG_FILE_PACKAGE_NAME -

The default package name for tag handlers generated from tag files.

-

If not specified, the default value of org.apache.jsp.tag - will be used.

-
org.apache.jasper.Constants. ALT_DD_ATTR -

The servlet context attribute under which the alternate deployment - descriptor for this web application is stored.

-

If not specified, the default value of - org.apache.catalina.deploy.alt_dd will be used.

-
org.apache.jasper.Constants. TEMP_VARIABLE_NAME_PREFIX -

Prefix to use for generated temporary variable names.

-

If not specified, the default value of _jspx_temp - will be used.

-
org.apache.jasper.Constants. USE_INSTANCE_MANAGER_FOR_TAGS -

If true, the instance manager is used to obtain tag - handler instances.

-

If not specified, the default value of false will be used.

-
- -
Security
- -
PropertyDescription
org.apache.catalina.connector. RECYCLE_FACADES -

If this is true or if a security manager is in use a new - facade object will be created for each request.

-

If not specified, the default value of false will be used.

-
org.apache.catalina.connector. CoyoteAdapter.ALLOW_BACKSLASH -

If this is true the '\' character will be permitted as a - path delimiter.

-

If not specified, the default value of false will be used.

-
org.apache.tomcat.util.buf. UDecoder.ALLOW_ENCODED_SLASH -

If this is true '%2F' and '%5C' will be permitted as path - delimiters.

-

If not specified, the default value of false will be used.

-
- -
Specification
- -
PropertyDescription
org.apache.catalina. STRICT_SERVLET_COMPLIANCE -

The default value of this system property is false.

-

If this is true the default values will be changed for: -

    -
  • org.apache.catalina.core.ApplicationContext.GET_RESOURCE_REQUIRE_SLASH
  • -
  • org.apache.catalina.core.ApplicationDispatcher.WRAP_SAME_OBJECT
  • -
  • org.apache.catalina.core.StandardHostValve.ACCESS_SESSION
  • -
  • org.apache.catalina.session.StandardSession.ACTIVITY_CHECK
  • -
  • org.apache.catalina.session.StandardSession.LAST_ACCESS_AT_START
  • -
  • org.apache.tomcat.util.http.ServerCookie.ALWAYS_ADD_EXPIRES
  • -
  • org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR
  • -
  • org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING
  • -
  • The resourceOnlyServlets attribute of any - Context element.
  • -
  • The tldNamespaceAware attribute of any - Context element.
  • -
  • The tldValidation attribute of any - Context element.
  • -
  • The xmlNamespaceAware attribute of any - Context element.
  • -
  • The xmlValidation attribute of any - Context element.
  • -
-

-

Note that changing a number of the above defaults is likely to break - the majority of systems as some browsers are unable to correctly handle - the cookie headers that result from a strict adherence to the - specifications. Defaults, regardless of whether or not they have been - changed by setting - org.apache.catalina.STRICT_SERVLET_COMPLIANCE can always be - overridden by explicitly setting the appropriate system property or element - attribute.

-
org.apache.catalina.connector. Response.ENFORCE_ENCODING_IN_GET_WRITER -

If this is true then - a call to Response.getWriter() if no character encoding - has been specified will result in subsequent calls to - Response.getCharacterEncoding() returning - ISO-8859-1 and the Content-Type response header - will include a charset=ISO-8859-1 component. (SRV.15.2.22.1)

-

If not specified, the default specification compliant value of - true will be used.

-
org.apache.catalina.core.ApplicationContext .GET_RESOURCE_REQUIRE_SLASH -

If this is true then the path passed to - ServletContext.getResource() or - ServletContext.getResourceAsStream() must start with - "/". If false, code like - getResource("myfolder/myresource.txt") will work.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
org.apache.catalina.core. ApplicationDispatcher.WRAP_SAME_OBJECT -

If this is true then any wrapped request or response - object passed to an application dispatcher will be checked to ensure that - it has wrapped the original request or response.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
org.apache.tomcat.util.http. ServerCookie.ALLOW_EQUALS_IN_VALUE -

If this is true Tomcat will allow '=' - characters when parsing unquoted cookie values. If false, - cookie values containing '=' will be terminated when the - '=' is encountered and the remainder of the cookie value will - be dropped.

-

If not specified, the default value specification compliant value of - false will be used.

-
org.apache.tomcat.util.http. ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0 -

If this is true Tomcat will allow HTTP separators in - cookie names and values.

-

If not specified, the default specification compliant value of - false will be used.

-
org.apache.tomcat.util.http. ServerCookie.ALWAYS_ADD_EXPIRES -

If this is true Tomcat will always add an expires - parameter to a SetCookie header even for cookies with version greater than - zero. This is to work around a known IE6 and IE7 bug that causes IE to - ignore the Max-Age parameter in a SetCookie header.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be false, - else the default value will be true.

-
org.apache.tomcat.util.http. ServerCookie.FWD_SLASH_IS_SEPARATOR -

If this is true then the / (forward slash) character will - be treated as a separator. Note that this character is frequently used in - cookie path attributes and some browsers will fail to process a cookie if - the path attribute is quoted as is required by a strict adherence to the - specifications. This is highly likely to break session tracking using - cookies.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
org.apache.tomcat.util.http. ServerCookie.STRICT_NAMING -

If this is true then the requirements of the Servlet specification - that Cookie names must adhere to RFC2109 (no use of separators) will be - enforced.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
org.apache.tomcat.util.http. ServerCookie.ALLOW_NAME_ONLY -

If this is true then the requirements of the cookie specifications - that cookies must have values will be enforced and cookies consisting only - of a name but no value will be ignored.

-

If not specified, the default specification compliant value of - false will be used.

-
- -
Sessions
- -
PropertyDescription
org.apache.catalina.authenticator. Constants.SSO_SESSION_COOKIE_NAME -

An alternative name for the single sign on session cookie. Defaults to - JSESSIONIDSSO.

-
org.apache.catalina.core. StandardHostValve.ACCESS_SESSION -

If this is true, every request that is associated with a - session will cause the session's last accessed time to be updated - regardless of whether or not the request explicitly accesses the session.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
org.apache.catalina.session. StandardSession.ACTIVITY_CHECK -

If this is true, Tomcat will track the number of active - requests for each session. When determining if a session is valid, any - session with at least one active request will always be considered valid.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
org.apache.catalina.session. StandardSession.LAST_ACCESS_AT_START -

If this is true, the last accessed time for sessions will - be calculated from the beginning of the previous request. If - false, the last accessed time for sessions will be calculated - from the end of the previous request. This also affects how the idle time - is calculated.

-

If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to - true, the default of this setting will be true, - else the default value will be false.

-
- -
Logging
- -
PropertyDescription
org.apache.juli.formatter -

If no logging configuration file is specified and no logging configuration class is specified - using the java.util.logging.config.class and java.util.logging.config.file - properties the default logging framework org.apache.juli will use the default - java.util.logging.SimpleFormatter for all console output. - To simply override the console output formatter, one can use the described property. Example: - -Dorg.apache.juli.formatter=org.apache.juli.OneLineFormatter

-
org.apache.juli.AsyncOverflowDropType -

When the memory limit of records has been reached the system needs to determine what action to take. - Currently there are three actions that can be taken: -

-
    -
  • int OVERFLOW_DROP_LAST = 1 - the record that caused the overflow will be dropped and not logged
  • -
  • int OVERFLOW_DROP_FIRST = 2 - the record that is next in line to be logged will be dropped to make room for the latest record on the queue
  • -
  • int OVERFLOW_DROP_FLUSH = 3 - suspend the thread while the queue empties out and flushes the entries to the write buffer
  • -
  • int OVERFLOW_DROP_CURRENT = 4 - drop the current log entry
  • -
-

The default value is 1 (OVERFLOW_DROP_LAST).

-
org.apache.juli.AsyncMaxRecordCount -

The max number of log records that the async logger will keep in memory. When this limit is reached and a new record is being logged by the - JULI framework the system will take an action based on the org.apache.juli.AsyncOverflowDropType setting.

-

The default value is 10000 records. - This number represents the global number of records, not on a per handler basis. -

-
org.apache.juli.AsyncLoggerPollInterval -

The poll interval in milliseconds for the asynchronous logger thread in milliseconds. - If the log queue is empty, the async thread will issue a poll(poll interval) - in order to not wake up to often.

-

The default value is 1000 milliseconds.

-
org.apache.juli.logging.UserDataHelper.CONFIG -

The type of logging to use for errors generated by invalid input data. - The options are: DEBUG_ALL, INFO_THEN_DEBUG, - INFO_ALL and NONE. When - INFO_THEN_DEBUG is used, the period for which errors are - logged at DEBUG rather than INFO is controlled by the system property - org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME. -

-

The default value is INFO_THEN_DEBUG.

-

The errors currently logged using this system are: -

    -
  • invalid cookies;
  • -
  • invalid parameters.
  • -
- Other errors triggered by invalid input data may be added to this - system in later versions.

-
org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME -

When using INFO_THEN_DEBUG for - org.apache.juli.logging.UserDataHelper.CONFIG this system - property controls how long messages are logged at DEBUG after a message - has been logged at INFO. Once this period has elapsed, the next message - will be logged at INFO followed by a new suppression period where - messages are logged at DEBUG and so on. The value is measured - in seconds.

-

A value of 0 is equivalent to using INFO_ALL - for org.apache.juli.logging.UserDataHelper.CONFIG.

-

A negative value means an infinite suppression period.

-

The default value is 86400 (24 hours).

-
- -
Other
- -
PropertyDescription
org.apache.coyote. USE_CUSTOM_STATUS_MSG_IN_HEADER

If this is - true, custom HTTP status messages will be used within HTTP - headers. If a custom message is specified that is not valid for use in an - HTTP header (as defined by RFC2616) then the custom message will be - ignored and the default message used.

-

If not specified, the default value of false will be used.

-
catalina.useNaming -

If this is false it will override the - useNaming attribute for all - Context elements.

-
javax.sql.DataSource.Factory -

The class name of the factory to use to create resources of type - javax.sql.DataSource. If not specified the default of - org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory is used - which is a package renamed (to avoid conflictions) copy of - Apache Commons DBCP.

-
javax.mail.Session.Factory -

The class name of the factory to use to create resources of type - javax.mail.Session. If not specified the default of - org.apache.naming.factory.MailSessionFactory is used.

-
jvmRoute -

Provides a default value for the jvmRoute attribute of the - Engine element. It does not override the value - configured on the Engine element.

-
catalina.config -

The URL for the catalina.properties configuration file.

-
tomcat.util.buf.StringCache.byte.enabled -

If true, the String cache is enabled for - ByteChunk.

-

If not specified, the default value of false will be used.

-
tomcat.util.buf.StringCache.char.enabled -

If true, the String cache is enabled for - CharChunk.

-

If not specified, the default value of false will be used.

-
tomcat.util.buf.StringCache.trainThreshold -

The number of times toString() must be called before the - cache is activated.

-

If not specified, the default value of 20000 will be used.

-
tomcat.util.buf.StringCache.cacheSize -

The size of the String cache.

-

If not specified, the default value of 200 will be used.

-
tomcat.util.buf.StringCache.maxStringSize -

The maximum length of String that will be cached.

-

If not specified, the default value of 128 will be used.

-
org.apache.tomcat.util. http.FastHttpDateFormat.CACHE_SIZE -

The size of the cache to use parsed and formatted date value.

-

If not specified, the default value of 1000 will be used.

-
org.apache.tomcat.util. net.NioSelectorShared -

If true, use a shared selector for servlet write/read.

-

If not specified, the default value of true will be used.

-
org.apache.catalina.startup. EXIT_ON_INIT_FAILURE -

If true, the server will exit if an exception happens - during the server initialization phase.

-

If not specified, the default value of false will be used.

-
tomcat.util.scan. DefaultJarScanner.jarsToSkip -

The comma-separated list of filenames of JARs that Tomcat will not scan - for configuration information when using the - JarScanner functionality. Note that - there are additional system properties that enable JARs to be excluded - from specific scans rather than all scans.

-

The coded default is that no JARs are skipped however the system - property is set in a default Tomcat installation via the - $CATALINA_BASE/catalina.properties file.

-
org.apache.catalina.startup. ContextConfig.jarsToSkip -

The comma-separated list of additional filenames of JARs that Tomcat - will not scan for Servlet 3.0 pluggability features.

-

The coded default is that no JARs are skipped however the system - property is set in a default Tomcat installation via the - $CATALINA_BASE/catalina.properties file.

-
org.apache.catalina.startup. TldConfig.jarsToSkip -

The comma-separated list of additional filenames of JARs that Tomcat - will not scan for TLDs.

-

The coded default is that no JARs are skipped however the system - property is set in a default Tomcat installation via the - $CATALINA_BASE/catalina.properties file.

-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/config/valve.html b/bundledApps/tomcat/webapps/docs/config/valve.html deleted file mode 100755 index 12d5361c..00000000 --- a/bundledApps/tomcat/webapps/docs/config/valve.html +++ /dev/null @@ -1,1183 +0,0 @@ -Apache Tomcat 7 Configuration Reference (7.0.30) - The Valve Component

-    The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Top Level Elements

Executors

Connectors

Containers

Nested Components

Cluster Elements

Other

The Valve Component

Table of Contents
- -
Introduction
- -

A Valve element represents a component that will be - inserted into the request processing pipeline for the associated - Catalina container (Engine, - Host, or Context). - Individual Valves have distinct processing capabilities, and are - described individually below.

- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -
Access Log Valve
- -
Introduction
- -

The Access Log Valve creates log files in the same - format as those created by standard web servers. These logs can later - be analyzed by standard log analysis tools to track page hit counts, - user session activity, and so on. The files produces by this Valve - are rolled over nightly at midnight. This Valve - may be associated with any Catalina container (Context, - Host, or Engine), and - will record ALL requests processed by that container.

- -

Some requests may be handled by Tomcat before they are passed to a - container. These include redirects from /foo to /foo/ and the rejection of - invalid requests. Where Tomcat can identify the Context that - would have handled the request, the request/response will be logged in the - AccessLog(s) associated Context, Host - and Engine. Where Tomcat cannot identify the - Context that would have handled the request, e.g. in cases - where the URL is invalid, Tomcat will look first in the Engine, - then the default Host for the Engine and finally - the ROOT (or default) Context for the default Host - for an AccessLog implementation. Tomcat will use the first - AccessLog implementation found to log those requests that are - rejected before they are passed to a container.

- -

If sendfile is used, the response bytes will be written asynchronously - in a separate thread and the access log valve will not know how many bytes - were actually written. In this case, the number of bytes that was passed to - the sendfile thread for writing will be recorded in the access log valve. -

-
- -
Attributes
- -

The Access Log Valve supports the following - configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.AccessLogValve to use the - default access log valve.

-
directory -

Absolute or relative pathname of a directory in which log files - created by this valve will be placed. If a relative path is - specified, it is interpreted as relative to $CATALINA_BASE. If - no directory attribute is specified, the default value is "logs" - (relative to $CATALINA_BASE).

-
encoding -

Character set used to write the log file. An empty string means - to use the system default character set. Default value: use the - system default character set. -

-
locale -

The locale used to format timestamps in the access log - lines. Any timestamps configured using an - explicit SimpleDateFormat pattern (%{xxx}t) - are formatted in this locale. By default the - default locale of the Java process is used. Switching the - locale after the AccessLogValve is initialized is not supported. - Any timestamps using the common log format - (CLF) are always formatted in the locale - en_US. -

-
pattern -

A formatting layout identifying the various information fields - from the request and response to be logged, or the word - common or combined to select a - standard format. See below for more information on configuring - this attribute.

-
prefix -

The prefix added to the start of each log file's name. If not - specified, the default value is "access_log.".

-
requestAttributesEnabled -

Set to true to check for the existence of request - attributes (typically set by the RemoteIpValve and similar) that should - be used to override the values returned by the request for remote - address, remote host, server port and protocol. If the attributes are - not set, or this attribute is set to false then the values - from the request will be used. If not set, the default value of - false will be used.

-
resolveHosts -

This attribute is no longer supported. Use the connector - attribute enableLookups instead.

-

If you have enableLookups on the connector set to - true and want to ignore it, use %a instead of - %h in the value of pattern.

-
suffix -

The suffix added to the end of each log file's name. If not - specified, the default value is "" (a zero-length string), - meaning that no suffix will be added.

-
rotatable -

Flag to determine if log rotation should occur. - If set to false, then this file is never rotated and - fileDateFormat is ignored. Use with caution! - Default value: true -

-
conditionIf -

Turns on conditional logging. If set, requests will be - logged only if ServletRequest.getAttribute() is - not null. For example, if this value is set to - important, then a particular request will only be logged - if ServletRequest.getAttribute("important") != null. - The use of Filters is an easy way to set/unset the attribute - in the ServletRequest on many different requests. -

-
conditionUnless -

Turns on conditional logging. If set, requests will be - logged only if ServletRequest.getAttribute() is - null. For example, if this value is set to - junk, then a particular request will only be logged - if ServletRequest.getAttribute("junk") == null. - The use of Filters is an easy way to set/unset the attribute - in the ServletRequest on many different requests. -

-
condition -

The same as conditionUnless. This attribute is - provided for backwards compatibility. -

-
fileDateFormat -

Allows a customized date format in the access log file name. - The date format also decides how often the file is rotated. - If you wish to rotate every hour, then set this value - to: yyyy-MM-dd.HH. The default value is - yyyy-MM-dd. The date format will always be localized - using the locale en_US. -

-
buffered -

Flag to determine if logging will be buffered. - If set to false, then access logging will be written after each - request. Default value: true -

-
- -

Values for the pattern attribute are made up of literal - text strings, combined with pattern identifiers prefixed by the "%" - character to cause replacement by the corresponding variable value from - the current request and response. The following pattern codes are - supported:

-
    -
  • %a - Remote IP address
  • -
  • %A - Local IP address
  • -
  • %b - Bytes sent, excluding HTTP headers, or '-' if zero
  • -
  • %B - Bytes sent, excluding HTTP headers
  • -
  • %h - Remote host name (or IP address if - enableLookups for the connector is false)
  • -
  • %H - Request protocol
  • -
  • %l - Remote logical username from identd (always returns - '-')
  • -
  • %m - Request method (GET, POST, etc.)
  • -
  • %p - Local port on which this request was received
  • -
  • %q - Query string (prepended with a '?' if it exists)
  • -
  • %r - First line of the request (method and request URI)
  • -
  • %s - HTTP status code of the response
  • -
  • %S - User session ID
  • -
  • %t - Date and time, in Common Log Format
  • -
  • %u - Remote user that was authenticated (if any), else '-'
  • -
  • %U - Requested URL path
  • -
  • %v - Local server name
  • -
  • %D - Time taken to process the request, in millis
  • -
  • %T - Time taken to process the request, in seconds
  • -
  • %I - Current request thread name (can compare later with stacktraces)
  • -
- -

- There is also support to write information incoming or outgoing - headers, cookies, session or request attributes and special - timestamp formats. - It is modeled after the - Apache HTTP Server log configuration - syntax: -

    -
  • %{xxx}i for incoming headers
  • -
  • %{xxx}o for outgoing response headers
  • -
  • %{xxx}c for a specific cookie
  • -
  • %{xxx}r xxx is an attribute in the ServletRequest
  • -
  • %{xxx}s xxx is an attribute in the HttpSession
  • -
  • %{xxx}t xxx is an enhanced SimpleDateFormat pattern
  • -
-

- -

All formats supported by SimpleDateFormat are allowed in %{xxx}t. - In addition the following extensions have been added:

-
    -
  • sec - number of seconds since the epoch
  • -
  • msec - number of milliseconds since the epoch
  • -
  • msec_frac - millisecond fraction
  • -
-

These formats can not be mixed with SimpleDateFormat formats in the same format - token.

- -

Furthermore one can define whether to log the timestamp for the request start - time or the response finish time:

-
    -
  • begin or prefix begin: chooses - the request start time
  • -
  • end or prefix end: chooses - the response finish time
  • -
-

By adding multiple %{xxx}t tokens to the pattern, one can - also log both timestamps.

- -

The shorthand pattern pattern="common" - corresponds to the Common Log Format defined by - '%h %l %u %t "%r" %s %b'.

- -

The shorthand pattern pattern="combined" - appends the values of the Referer and User-Agent - headers, each in double quotes, to the common pattern.

- -
- -
Extended Access Log Valve
- -
Introduction
- -

The Extended Access Log Valve is a variant of - the Access Log Valve. It is not a real extension of the standard - Access Log valve, instead it supports the so-called - Extended Log File Format - defined by the W3C. The main difference to the standard - AccessLogValve are the supported pattern values.

- -
- -
Attributes
- -

The Extended Access Log Valve supports the following - configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.ExtendedAccessLogValve to - use the extended access log valve.

-
directory -

Absolute or relative pathname of a directory in which log files - created by this valve will be placed. If a relative path is - specified, it is interpreted as relative to $CATALINA_BASE. If - no directory attribute is specified, the default value is "logs" - (relative to $CATALINA_BASE).

-
encoding -

Character set used to write the log file. An empty string means - to use the system default character set. Default value: use the - system default character set. -

-
pattern -

A formatting layout identifying the various information fields - from the request and response to be logged. - See below for more information on configuring this attribute.

-
prefix -

The prefix added to the start of each log file's name. If not - specified, the default value is "access_log.".

-
requestAttributesEnabled -

Set to true to check for the existence of request - attributes (typically set by the RemoteIpValve and similar) that should - be used to override the values returned by the request for remote - address, remote host, server port and protocol. If the attributes are - not set, or this attribute is set to false then the values - from the request will be used. If not set, the default value of - false will be used.

-
resolveHosts -

This attribute is no longer supported. Use the connector - attribute enableLookups instead.

-
suffix -

The suffix added to the end of each log file's name. If not - specified, the default value is "" (a zero-length string), - meaning that no suffix will be added.

-
rotatable -

Flag to determine if log rotation should occur. - If set to false, then this file is never rotated and - fileDateFormat is ignored. Use with caution! - Default value: true -

-
conditionIf -

Turns on conditional logging. If set, requests will be - logged only if ServletRequest.getAttribute() is - not null. For example, if this value is set to - important, then a particular request will only be logged - if ServletRequest.getAttribute("important") != null. - The use of Filters is an easy way to set/unset the attribute - in the ServletRequest on many different requests. -

-
conditionUnless -

Turns on conditional logging. If set, requests will be - logged only if ServletRequest.getAttribute() is - null. For example, if this value is set to - junk, then a particular request will only be logged - if ServletRequest.getAttribute("junk") == null. - The use of Filters is an easy way to set/unset the attribute - in the ServletRequest on many different requests. -

-
condition -

The same as conditionUnless. This attribute is - provided for backwards compatibility. -

-
fileDateFormat -

Allows a customized date format in the access log file name. - The date format also decides how often the file is rotated. - If you wish to rotate every hour, then set this value - to: yyyy-MM-dd.HH. The default value is - yyyy-MM-dd. The date format will always be localized - using the locale en_US. -

-
buffered -

Flag to determine if logging will be buffered. - If set to false, then access logging will be written after each - request. Default value: true -

-
- -

Values for the pattern attribute are made up of - format tokens. Some of the tokens need an additional prefix. Possible - prefixes are c for "client", s for "server", - cs for "client to server", sc for - "server to client" or x for "application specific". - Furthermore some tokens are completed by an additional selector. - See the W3C specification - for more information about the format.

- -

The following format tokens are supported:

-
    -
  • bytes - Bytes sent, excluding HTTP headers, or '-' if zero
  • -
  • c-dns - Remote host name (or IP address if - enableLookups for the connector is false)
  • -
  • c-ip - Remote IP address
  • -
  • cs-method - Request method (GET, POST, etc.)
  • -
  • cs-uri - Request URI
  • -
  • cs-uri-query - Query string (prepended with a '?' if it exists)
  • -
  • cs-uri-stem - Requested URL path
  • -
  • date - The date in yyyy-mm-dd format for GMT
  • -
  • s-dns - Local host name
  • -
  • s-ip - Local IP address
  • -
  • sc-status - HTTP status code of the response
  • -
  • time - Time the request was served in HH:mm:ss format for GMT
  • -
  • time-taken - Time (in seconds as floating point) taken to serve the request
  • -
  • x-threadname - Current request thread name (can compare later with stacktraces)
  • -
- -

For any of the x-H(XXX) the following method will be called from the - HttpServletRequest object:

-
    -
  • x-H(authType): getAuthType
  • -
  • x-H(characterEncoding): getCharacterEncoding
  • -
  • x-H(contentLength): getContentLength
  • -
  • x-H(locale): getLocale
  • -
  • x-H(protocol): getProtocol
  • -
  • x-H(remoteUser): getRemoteUser
  • -
  • x-H(requestedSessionId): getRequestedSessionId
  • -
  • x-H(requestedSessionIdFromCookie): - isRequestedSessionIdFromCookie
  • -
  • x-H(requestedSessionIdValid): - isRequestedSessionIdValid
  • -
  • x-H(scheme): getScheme
  • -
  • x-H(secure): isSecure
  • -
- -

- There is also support to write information about headers - cookies, context, request or session attributes and request - parameters. -

-
    -
  • cs(XXX) for incoming request headers with name XXX
  • -
  • sc(XXX) for outgoing response headers with name XXX
  • -
  • x-A(XXX) for the servlet context attribute with name XXX
  • -
  • x-C(XXX) for the first cookie with name XXX
  • -
  • x-O(XXX) for a concatenation of all outgoing response headers with name XXX
  • -
  • x-P(XXX) for the URL encoded (using UTF-8) request parameter with name XXX
  • -
  • x-R(XXX) for the request attribute with name XXX
  • -
  • x-S(XXX) for the session attribute with name XXX
  • -
- -
- -
Remote Address Filter
- -
Introduction
- -

The Remote Address Filter allows you to compare the - IP address of the client that submitted this request against one or more - regular expressions, and either allow the request to continue - or refuse to process the request from this client. A Remote Address - Filter can be associated with any Catalina container - (Engine, Host, or - Context), and must accept any request - presented to this container for processing before it will be passed on.

- -

The syntax for regular expressions is different than that for - 'standard' wildcard matching. Tomcat uses the java.util.regex - package. Please consult the Java documentation for details of the - expressions supported.

- -

Note: There is a caveat when using this valve with - IPv6 addresses. Format of the IP address that this valve is processing - depends on the API that was used to obtain it. If the address was obtained - from Java socket using Inet6Address class, its format will be - x:x:x:x:x:x:x:x. That is, the IP address for localhost - will be 0:0:0:0:0:0:0:1 instead of the more widely used - ::1. Consult your access logs for the actual value.

- -

See also: Remote Host Filter, - Remote IP Valve.

-
- -
Attributes
- -

The Remote Address Filter supports the following - configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.RemoteAddrValve.

-
allow -

A regular expression (using java.util.regex) that the - remote client's IP address is compared to. If this attribute - is specified, the remote address MUST match for this request to be - accepted. If this attribute is not specified, all requests will be - accepted UNLESS the remote address matches a deny - pattern.

-
deny -

A regular expression (using java.util.regex) that the - remote client's IP address is compared to. If this attribute - is specified, the remote address MUST NOT match for this request to be - accepted. If this attribute is not specified, request acceptance is - governed solely by the accept attribute.

-
denyStatus -

HTTP response status code that is used when rejecting denied - request. The default value is 403. For example, - it can be set to the value 404.

-
- -
- -
Example
-

To allow access only for the clients connecting from localhost:

-
-    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
-       allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
-
-
- -
Remote Host Filter
- -
Introduction
- -

The Remote Host Filter allows you to compare the - hostname of the client that submitted this request against one or more - regular expressions, and either allow the request to continue - or refuse to process the request from this client. A Remote Host - Filter can be associated with any Catalina container - (Engine, Host, or - Context), and must accept any request - presented to this container for processing before it will be passed on.

- -

The syntax for regular expressions is different than that for - 'standard' wildcard matching. Tomcat uses the java.util.regex - package. Please consult the Java documentation for details of the - expressions supported.

- -

Note: This filter processes the value returned by - method ServletRequest.getRemoteHost(). To allow the method - to return proper host names, you have to enable "DNS lookups" feature on - a Connector.

- -

See also: Remote Address Filter, - HTTP Connector configuration.

-
- -
Attributes
- -

The Remote Host Filter supports the following - configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.RemoteHostValve.

-
allow -

A regular expression (using java.util.regex) that the - remote client's hostname is compared to. If this attribute - is specified, the remote hostname MUST match for this request to be - accepted. If this attribute is not specified, all requests will be - accepted UNLESS the remote hostname matches a deny - pattern.

-
deny -

A regular expression (using java.util.regex) that the - remote client's hostname is compared to. If this attribute - is specified, the remote hostname MUST NOT match for this request to be - accepted. If this attribute is not specified, request acceptance is - governed solely by the accept attribute.

-
denyStatus -

HTTP response status code that is used when rejecting denied - request. The default value is 403. For example, - it can be set to the value 404.

-
- -
- -
Single Sign On Valve
- -
Introduction
- -

The Single Sign On Vale is utilized when you wish to give users - the ability to sign on to any one of the web applications associated with - your virtual host, and then have their identity recognized by all other - web applications on the same virtual host.

- -

See the Single Sign On special - feature on the Host element for more information.

- -
- - -
Attributes
- -

The Single Sign On Valve supports the following - configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.authenticator.SingleSignOn.

-
requireReauthentication -

Default false. Flag to determine whether each request needs to be - reauthenticated to the security Realm. If "true", this - Valve uses cached security credentials (username and password) to - reauthenticate to the Realm each request associated - with an SSO session. If "false", the Valve can itself authenticate - requests based on the presence of a valid SSO cookie, without - rechecking with the Realm.

-
cookieDomain -

Sets the host domain to be used for sso cookies.

-
- -
- - -
Basic Authenticator Valve
- -
Introduction
- -

The Basic Authenticator Valve is automatically added to - any Context that is configured to use BASIC - authentication.

- -

If any non-default settings are required, the valve may be configured - within Context element with the required - values.

- -
- -
Attributes
- -

The Basic Authenticator Valve supports the following - configuration attributes:

- -
AttributeDescription
alwaysUseSession -

Should a session always be used once a user is authenticated? This - may offer some performance benefits since the session can then be used - to cache the authenticated Principal, hence removing the need to - authenticate the user via the Realm on every request. This may be of - help for combinations such as BASIC authentication used with the - JNDIRealm or DataSourceRealms. However there will also be the - performance cost of creating and GC'ing the session. If not set, the - default value of false will be used.

-
cache -

Should we cache authenticated Principals if the request is part of an - HTTP session? If not specified, the default value of true - will be used.

-
changeSessionIdOnAuthentication -

Controls if the session ID is changed if a session exists at the - point where users are authenticated. This is to prevent session fixation - attacks. If not set, the default value of true will be - used.

-
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.authenticator.BasicAuthenticator.

-
disableProxyCaching -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers but will also cause secured pages to be - cached by proxies which will almost certainly be a security issue. - securePagesWithPragma offers an alternative, secure, - workaround for browser caching issues. If not set, the default value of - true will be used.

-
securePagesWithPragma -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers by using - Cache-Control: private rather than the default of - Pragma: No-cache and Cache-control: No-cache. - If not set, the default value of false will be used.

-
secureRandomAlgorithm -

Name of the algorithm to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the platform - default provider and the default algorithm will be used. If not - specified, the default algorithm of SHA1PRNG will be used. If the - default algorithm is not supported, the platform default will be used. - To specify that the platform default should be used, do not set the - secureRandomProvider attribute and set this attribute to the empty - string.

-
secureRandomClass -

Name of the Java class that extends - java.security.SecureRandom to use to generate SSO session - IDs. If not specified, the default value is - java.security.SecureRandom.

-
secureRandomProvider -

Name of the provider to use to create the - java.security.SecureRandom instances that generate SSO - session IDs. If an invalid algorithm and/or provider is specified, the - platform default provider and the default algorithm will be used. If not - specified, the platform default provider will be used.

-
- -
- -
Digest Authenticator Valve
- -
Introduction
- -

The Digest Authenticator Valve is automatically added to - any Context that is configured to use DIGEST - authentication.

- -

If any non-default settings are required, the valve may be configured - within Context element with the required - values.

- -
- -
Attributes
- -

The Digest Authenticator Valve supports the following - configuration attributes:

- -
AttributeDescription
alwaysUseSession -

Should a session always be used once a user is authenticated? This - may offer some performance benefits since the session can then be used - to cache the authenticated Principal, hence removing the need to - authenticate the user via the Realm on every request. This may be of - help for combinations such as BASIC authentication used with the - JNDIRealm or DataSourceRealms. However there will also be the - performance cost of creating and GC'ing the session. If not set, the - default value of false will be used.

-
cache -

Should we cache authenticated Principals if the request is part of an - HTTP session? If not specified, the default value of false - will be used.

-
changeSessionIdOnAuthentication -

Controls if the session ID is changed if a session exists at the - point where users are authenticated. This is to prevent session fixation - attacks. If not set, the default value of true will be - used.

-
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.authenticator.DigestAuthenticator.

-
disableProxyCaching -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers but will also cause secured pages to be - cached by proxies which will almost certainly be a security issue. - securePagesWithPragma offers an alternative, secure, - workaround for browser caching issues. If not set, the default value of - true will be used.

-
key -

The secret key used by digest authentication. If not set, a secure - random value is generated. This should normally only be set when it is - necessary to keep key values constant either across server restarts - and/or across a cluster.

-
nonceCacheSize -

To protect against replay attacks, the DIGEST authenticator tracks - server nonce and nonce count values. This attribute controls the size - of that cache. If not specified, the default value of 1000 is used.

-
nonceValidity -

The time, in milliseconds, that a server generated nonce will be - considered valid for use in authentication. If not specified, the - default value of 300000 (5 minutes) will be used.

-
opaque -

The opaque server string used by digest authentication. If not set, a - random value is generated. This should normally only be set when it is - necessary to keep opaque values constant either across server restarts - and/or across a cluster.

-
securePagesWithPragma -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers by using - Cache-Control: private rather than the default of - Pragma: No-cache and Cache-control: No-cache. - If not set, the default value of false will be used.

-
secureRandomAlgorithm -

Name of the algorithm to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the platform - default provider and the default algorithm will be used. If not - specified, the default algorithm of SHA1PRNG will be used. If the - default algorithm is not supported, the platform default will be used. - To specify that the platform default should be used, do not set the - secureRandomProvider attribute and set this attribute to the empty - string.

-
secureRandomClass -

Name of the Java class that extends - java.security.SecureRandom to use to generate SSO session - IDs. If not specified, the default value is - java.security.SecureRandom.

-
secureRandomProvider -

Name of the provider to use to create the - java.security.SecureRandom instances that generate SSO - session IDs. If an invalid algorithm and/or provider is specified, the - platform default provider and the default algorithm will be used. If not - specified, the platform default provider will be used.

-
validateUri -

Should the URI be validated as required by RFC2617? If not specified, - the default value of true will be used. This should - normally only be set when Tomcat is located behind a reverse proxy and - the proxy is modifying the URI passed to Tomcat such that DIGEST - authentication always fails.

-
- -
- -
Form Authenticator Valve
- -
Introduction
- -

The Form Authenticator Valve is automatically added to - any Context that is configured to use FORM - authentication.

- -

If any non-default settings are required, the valve may be configured - within Context element with the required - values.

- -
- -
Attributes
- -

The Form Authenticator Valve supports the following - configuration attributes:

- -
AttributeDescription
changeSessionIdOnAuthentication -

Controls if the session ID is changed if a session exists at the - point where users are authenticated. This is to prevent session fixation - attacks. If not set, the default value of true will be - used.

-
characterEncoding -

Character encoding to use to read the username and password parameters - from the request. If not set, the encoding of the request body will be - used.

-
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.authenticator.FormAuthenticator.

-
disableProxyCaching -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers but will also cause secured pages to be - cached by proxies which will almost certainly be a security issue. - securePagesWithPragma offers an alternative, secure, - workaround for browser caching issues. If not set, the default value of - true will be used.

-
landingPage -

Controls the behavior of the FORM authentication process if the - process is misused, for example by directly requesting the login page - or delaying logging in for so long that the session expires. If this - attribute is set, rather than returning an error response code, Tomcat - will redirect the user to the specified landing page if the login form - is submitted with valid credentials. For the login to be processed, the - landing page must be a protected resource (i.e. one that requires - authentication). If the landing page does not require authentication - then the user will not be logged in and will be prompted for their - credentials again when they access a protected page.

-
securePagesWithPragma -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers by using - Cache-Control: private rather than the default of - Pragma: No-cache and Cache-control: No-cache. - If not set, the default value of false will be used.

-
secureRandomAlgorithm -

Name of the algorithm to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the platform - default provider and the default algorithm will be used. If not - specified, the default algorithm of SHA1PRNG will be used. If the - default algorithm is not supported, the platform default will be used. - To specify that the platform default should be used, do not set the - secureRandomProvider attribute and set this attribute to the empty - string.

-
secureRandomClass -

Name of the Java class that extends - java.security.SecureRandom to use to generate SSO session - IDs. If not specified, the default value is - java.security.SecureRandom.

-
secureRandomProvider -

Name of the provider to use to create the - java.security.SecureRandom instances that generate SSO - session IDs. If an invalid algorithm and/or provider is specified, the - platform default provider and the default algorithm will be used. If not - specified, the platform default provider will be used.

-
- -
- -
SSL Authenticator Valve
- -
Introduction
- -

The SSL Authenticator Valve is automatically added to - any Context that is configured to use SSL - authentication.

- -

If any non-default settings are required, the valve may be configured - within Context element with the required - values.

- -
- -
Attributes
- -

The SSL Authenticator Valve supports the following - configuration attributes:

- -
AttributeDescription
cache -

Should we cache authenticated Principals if the request is part of an - HTTP session? If not specified, the default value of true - will be used.

-
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.authenticator.SSLAuthenticator.

-
changeSessionIdOnAuthentication -

Controls if the session ID is changed if a session exists at the - point where users are authenticated. This is to prevent session fixation - attacks. If not set, the default value of true will be - used.

-
disableProxyCaching -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers but will also cause secured pages to be - cached by proxies which will almost certainly be a security issue. - securePagesWithPragma offers an alternative, secure, - workaround for browser caching issues. If not set, the default value of - true will be used.

-
securePagesWithPragma -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers by using - Cache-Control: private rather than the default of - Pragma: No-cache and Cache-control: No-cache. - If not set, the default value of false will be used.

-
secureRandomAlgorithm -

Name of the algorithm to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the platform - default provider and the default algorithm will be used. If not - specified, the default algorithm of SHA1PRNG will be used. If the - default algorithm is not supported, the platform default will be used. - To specify that the platform default should be used, do not set the - secureRandomProvider attribute and set this attribute to the empty - string.

-
secureRandomClass -

Name of the Java class that extends - java.security.SecureRandom to use to generate SSO session - IDs. If not specified, the default value is - java.security.SecureRandom.

-
secureRandomProvider -

Name of the provider to use to create the - java.security.SecureRandom instances that generate SSO - session IDs. If an invalid algorithm and/or provider is specified, the - platform default provider and the default algorithm will be used. If not - specified, the platform default provider will be used.

-
- -
- -
SPNEGO Valve
- -
Introduction
- -

The SPNEGO Authenticator Valve is automatically added to - any Context that is configured to use SPNEGO - authentication.

- -

If any non-default settings are required, the valve may be configured - within Context element with the required - values.

- -
- -
Attributes
- -

The SPNEGO Authenticator Valve supports the following - configuration attributes:

- -
AttributeDescription
cache -

Should we cache authenticated Principals if the request is part of an - HTTP session? If not specified, the default value of true - will be used.

-
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.authenticator.SpnegoAuthenticator. -

-
changeSessionIdOnAuthentication -

Controls if the session ID is changed if a session exists at the - point where users are authenticated. This is to prevent session fixation - attacks. If not set, the default value of true will be - used.

-
disableProxyCaching -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers but will also cause secured pages to be - cached by proxies which will almost certainly be a security issue. - securePagesWithPragma offers an alternative, secure, - workaround for browser caching issues. If not set, the default value of - true will be used.

-
loginConfigName -

The name of the JAAS login configuration to be used to login as the - service. If not specified, the default of - com.sun.security.jgss.krb5.accept is used.

-
securePagesWithPragma -

Controls the caching of pages that are protected by security - constraints. Setting this to false may help work around - caching issues in some browsers by using - Cache-Control: private rather than the default of - Pragma: No-cache and Cache-control: No-cache. - If not set, the default value of false will be used.

-
secureRandomAlgorithm -

Name of the algorithm to use to create the - java.security.SecureRandom instances that generate session - IDs. If an invalid algorithm and/or provider is specified, the platform - default provider and the default algorithm will be used. If not - specified, the default algorithm of SHA1PRNG will be used. If the - default algorithm is not supported, the platform default will be used. - To specify that the platform default should be used, do not set the - secureRandomProvider attribute and set this attribute to the empty - string.

-
secureRandomClass -

Name of the Java class that extends - java.security.SecureRandom to use to generate SSO session - IDs. If not specified, the default value is - java.security.SecureRandom.

-
secureRandomProvider -

Name of the provider to use to create the - java.security.SecureRandom instances that generate SSO - session IDs. If an invalid algorithm and/or provider is specified, the - platform default provider and the default algorithm will be used. If not - specified, the platform default provider will be used.

-
storeDelegatedCredential -

Controls if the user' delegated credential will be stored in - the user Principal. If available, the delegated credential will be - available to applications (e.g. for onward authentication to external - services) via the org.apache.catalina.realm.GSS_CREDENTIAL - request attribute. If not set, the default value of true - will be used.

-
- -
- -
Remote IP Valve
- -
Introduction
- -

Tomcat port of - mod_remoteip, - this valve replaces the apparent client remote IP address and hostname for - the request with the IP address list presented by a proxy or a load balancer - via a request headers (e.g. "X-Forwarded-For").

- -

Another feature of this valve is to replace the apparent scheme - (http/https), server port and request.secure with the scheme presented - by a proxy or a load balancer via a request header - (e.g. "X-Forwarded-Proto").

- -

This Valve may be used at the Engine, Host or - Context level as required. Normally, this Valve would be used - at the Engine level.

- -

If used in conjunction with Remote Address/Host valves then this valve - should be defined first to ensure that the correct client IP address is - presented to the Remote Address/Host valves.

- -

Note: By default this valve has no effect on the - values that are written into access log. The original values are restored - when request processing leaves the valve and that always happens earlier - than access logging. To pass the remote address, remote host, server port - and protocol values set by this valve to the access log, - they are put into request attributes. Publishing these values here - is enabled by default, but AccessLogValve should be explicitly - configured to use them. See documentation for - requestAttributesEnabled attribute of - AccessLogValve.

- -

The names of request attributes that are set by this valve - and can be used by access logging are the following:

- -
    -
  • org.apache.catalina.AccessLog.RemoteAddr
  • -
  • org.apache.catalina.AccessLog.RemoteHost
  • -
  • org.apache.catalina.AccessLog.Protocol
  • -
  • org.apache.catalina.AccessLog.ServerPort
  • -
- -
- -
Attributes
- -

The Remote IP Valve supports the - following configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.RemoteIpValve.

-
remoteIpHeader -

Name of the HTTP Header read by this valve that holds the list of - traversed IP addresses starting from the requesting client. If not - specified, the default of x-forwarded-for is used.

-
internalProxies -

Regular expression (using java.util.regex) that a - proxy's IP address must match to be considered an internal proxy. - Internal proxies that appear in the remoteIpHeader will - be trusted and will not appear in the proxiesHeader - value. If not specified the default value of - 10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3} - will be used.

-
proxiesHeader -

Name of the HTTP header created by this valve to hold the list of - proxies that have been processed in the incoming - remoteIpHeader. If not specified, the default of - x-forwarded-by is used.

-
requestAttributesEnabled -

Set to true to set the request attributes used by - AccessLog implementations to override the values returned by the - request for remote address, remote host, server port and protocol. - If not set, the default value of true will be used.

-
trustedProxies -

Regular expression (using java.util.regex) that a - proxy's IP address must match to be considered an trusted proxy. - Trusted proxies that appear in the remoteIpHeader will - be trusted and will appear in the proxiesHeader value. - If not specified, no proxies will be trusted.

-
protocolHeader -

Name of the HTTP Header read by this valve that holds the protocol - used by the client to connect to the proxy. If not specified, the - default of null is used.

-
portHeader -

Name of the HTTP Header read by this valve that holds the port - used by the client to connect to the proxy. If not specified, the - default of null is used.

-
protocolHeaderHttpsValue -

Value of the protocolHeader to indicate that it is - an HTTPS request. If not specified, the default of https is - used.

-
httpServerPort -

Value returned by ServletRequest.getServerPort() - when the protocolHeader indicates http - protocol and no portHeader is present. If not - specified, the default of 80 is used.

-
httpsServerPort -

Value returned by ServletRequest.getServerPort() - when the protocolHeader indicates https - protocol and no portHeader is present. If not - specified, the default of 443 is used.

-
changeLocalPort -

If true, the value returned by - ServletRequest.getLocalPort() and - ServletRequest.getServerPort() is modified by the this - valve. If not specified, the default of false is used.

-
- -
- -
Crawler Session Manager Valve
- -
Introduction
- -

Web crawlers can trigger the creation of many thousands of sessions as - they crawl a site which may result in significant memory consumption. This - Valve ensures that crawlers are associated with a single session - just like - normal users - regardless of whether or not they provide a session token - with their requests.

- -

This Valve may be used at the Engine, Host or - Context level as required. Normally, this Valve would be used - at the Engine level.

- -

If used in conjunction with Remote IP valve then the Remote IP valve - should be defined before this valve to ensure that the correct client IP - address is presented to this valve.

- -
- -
Attributes
- -

The Crawler Session Manager Valve supports the - following configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.CrawlerSessionManagerValve. -

-
crawlerUserAgents -

Regular expression (using java.util.regex) that the user - agent HTTP request header is matched against to determine if a request - is from a web crawler. If not set, the default of - .*[bB]ot.*|.*Yahoo! Slurp.*|.*Feedfetcher-Google.* is used.

-
sessionInactiveInterval -

The minimum time in seconds that the Crawler Session Manager Valve - should keep the mapping of client IP to session ID in memory without any - activity from the client. The client IP / session cache will be - periodically purged of mappings that have been inactive for longer than - this interval. If not specified the default value of 60 - will be used.

-
- -
- -
Stuck Thread Detection Valve
- -
Introduction
- -

This valve allows to detect requests that take a long time to process, which might - indicate that the thread that is processing it is stuck.

-

When such a request is detected, the current stack trace of its thread is written - to Tomcat log with a WARN level.

-

The IDs and names of the stuck threads are available through JMX in the - stuckThreadIds and stuckThreadNames attributes. - The IDs can be used with the standard Threading JVM MBean - (java.lang:type=Threading) to retrieve other information - about each stuck thread.

- -
- -
Attributes
- -

The Stuck Thread Detection Valve supports the - following configuration attributes:

- -
AttributeDescription
className -

Java class name of the implementation to use. This MUST be set to - org.apache.catalina.valves.StuckThreadDetectionValve. -

-
threshold -

Minimum duration in seconds after which a thread is considered stuck. - Default is 600 seconds. If set to 0, the detection is disabled.

-

Note: since the detection is done in the background thread of the Container - (Engine, Host or Context) declaring this Valve, the threshold should be higher - than the backgroundProcessorDelay of this Container.

-
- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/connectors.html b/bundledApps/tomcat/webapps/docs/connectors.html deleted file mode 100755 index 1708d4e4..00000000 --- a/bundledApps/tomcat/webapps/docs/connectors.html +++ /dev/null @@ -1,54 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Connectors How To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Connectors How To

Table of Contents
- -
Introduction
- -

Choosing a connector to use with Tomcat can be difficult. This page will -list the connectors which are supported with this Tomcat release, and will -hopefully help you make the right choice according to your needs.

- -
HTTP
- -

The HTTP connector is setup by default with Tomcat, and is ready to use. This -connector features the lowest latency and best overall performance.

- -

For clustering, a HTTP load balancer with support for web sessions stickiness -must be installed to direct the traffic to the Tomcat servers. Tomcat supports mod_proxy -(on Apache HTTP Server 2.x, and included by default in Apache HTTP Server 2.2) as the load balancer. -It should be noted that the performance of HTTP proxying is usually lower than the -performance of AJP, so AJP clustering is often preferable.

- -
AJP
- -

When using a single server, the performance when using a native webserver in -front of the Tomcat instance is most of the time significantly worse than a -standalone Tomcat with its default HTTP connector, even if a large part of the web -application is made of static files. If integration with the native webserver is -needed for any reason, an AJP connector will provide faster performance than -proxied HTTP. AJP clustering is the most efficient from the Tomcat perspective. -It is otherwise functionally equivalent to HTTP clustering.

- -

The native connectors supported with this Tomcat release are: -

    -
  • JK 1.2.x with any of the supported servers
  • -
  • mod_proxy on Apache HTTP Server 2.x (included by default in Apache HTTP Server 2.2), -with AJP enabled
  • -
-

- -

Other native connectors supporting AJP may work, but are no longer supported.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/default-servlet.html b/bundledApps/tomcat/webapps/docs/default-servlet.html deleted file mode 100755 index 2ab5b592..00000000 --- a/bundledApps/tomcat/webapps/docs/default-servlet.html +++ /dev/null @@ -1,289 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Default Servlet Reference

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Default Servlet Reference

Table of Contents
- -
What is the DefaultServlet
-The default servlet is the servlet which serves static resources as well -as serves the directory listings (if directory listings are enabled). - -
Where is it declared?
-It is declared globally in $CATALINA_BASE/conf/web.xml. -By default here is it's declaration: -
-    <servlet>
-        <servlet-name>default</servlet-name>
-        <servlet-class>
-          org.apache.catalina.servlets.DefaultServlet
-        </servlet-class>
-        <init-param>
-            <param-name>debug</param-name>
-            <param-value>0</param-value>
-        </init-param>
-        <init-param>
-            <param-name>listings</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-...
-
-    <servlet-mapping>
-        <servlet-name>default</servlet-name>
-        <url-pattern>/</url-pattern>
-    </servlet-mapping>
-
-
- -So by default, the default servlet is loaded at webapp startup and -directory listings are disabled and debugging is turned off. -
What can I change?
-The DefaultServlet allows the following initParamters: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
debug - Debugging level. It is not very useful unless you are a tomcat - developer. As - of this writing, useful values are 0, 1, 11, 1000. [0] -
listings - If no welcome file is present, can a directory listing be - shown? - value may be true or false [false] -
- Welcome files are part of the servlet api. -
- WARNING: Listings of directories containing many entries are - expensive. Multiple requests for large directory listings can consume - significant proportions of server resources. -
readmeFile - If a directory listing is presented, a readme file may also - be presented with the listing. This file is inserted as is - so it may contain HTML. -
globalXsltFile - If you wish to customize your directory listing, you - can use an XSL transformation. This value is an absolute - file name which be used for all directory listings. - This can be overridden per context and/or per directory. See - contextXsltFile and localXsltFile - below. The format of the xml is shown below. -
contextXsltFile - You may also customize your directory listing by context by - configuring contextXsltFile. This should be a context - relative path (e.g.: /path/to/context.xslt). This - overrides globalXsltFile. If this value is present but a - file does not exist, then globalXsltFile will be used. If - globalXsltFile does not exist, then the default - directory listing will be shown. -
localXsltFile - You may also customize your directory listing by directory by - configuring localXsltFile. This should be a relative - file name in the directory where the listing will take place. - This overrides globalXsltFile and - contextXsltFile. If this value is present but a file - does not exist, then contextXsltFile will be used. If - contextXsltFile does not exist, then - globalXsltFile will be used. If - globalXsltFile does not exist, then the default - directory listing will be shown. -
input - Input buffer size (in bytes) when reading - resources to be served. [2048] -
output - Output buffer size (in bytes) when writing - resources to be served. [2048] -
readonly - Is this context "read only", so HTTP commands like PUT and - DELETE are rejected? [true] -
fileEncoding - File encoding to be used when reading static resources. - [platform default] -
sendfileSize - If the connector used supports sendfile, this represents the minimal - file size in KB for which sendfile will be used. Use a negative value - to always disable sendfile. [48] -
useAcceptRanges - If true, the Accept-Ranges header will be set when appropriate for the - response. [true] -
-
How do I customize directory listings?
-

You can override DefaultServlet with you own implementation and use that -in your web.xml declaration. If you -can understand what was just said, we will assume you can read the code -to DefaultServlet servlet and make the appropriate adjustments. (If not, -then that method isn't for you) -

-

-You can use either localXsltFile or -globalXsltFile and DefaultServlet will create -an xml document and run it through an xsl transformation based -on the values provided in localXsltFile and -globalXsltFile. localXsltFile is first -checked, followed by globalXsltFile, then default -behaviors takes place. -

- -

-Format: -

-    <listing>
-     <entries>
-      <entry type='file|dir' urlPath='aPath' size='###' date='gmt date'>
-        fileName1
-      </entry>
-      <entry type='file|dir' urlPath='aPath' size='###' date='gmt date'>
-        fileName2
-      </entry>
-      ...
-     </entries>
-     <readme></readme>
-    </listing>
-
-
    -
  • size will be missing if type='dir'
  • -
  • Readme is a CDATA entry
  • -
-

-The following is a sample xsl file which mimics the default tomcat behavior: -
-<?xml version="1.0"?>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-  version="1.0">
-
-  <xsl:output method="xhtml" encoding="iso-8859-1" indent="no"/>
-
-  <xsl:template match="listing">
-   <html>
-    <head>
-      <title>
-        Sample Directory Listing For
-        <xsl:value-of select="@directory"/>
-      </title>
-      <style>
-        h1{color : white;background-color : #0086b2;}
-        h3{color : white;background-color : #0086b2;}
-        body{font-family : sans-serif,Arial,Tahoma;
-             color : black;background-color : white;}
-        b{color : white;background-color : #0086b2;}
-        a{color : black;} HR{color : #0086b2;}
-      </style>
-    </head>
-    <body>
-      <h1>Sample Directory Listing For
-            <xsl:value-of select="@directory"/>
-      </h1>
-      <hr size="1" />
-      <table cellspacing="0"
-                  width="100%"
-            cellpadding="5"
-                  align="center">
-        <tr>
-          <th align="left">Filename</th>
-          <th align="center">Size</th>
-          <th align="right">Last Modified</th>
-        </tr>
-        <xsl:apply-templates select="entries"/>
-        </table>
-      <xsl:apply-templates select="readme"/>
-      <hr size="1" />
-      <h3>Apache Tomcat/7.0</h3>
-    </body>
-   </html>
-  </xsl:template>
-
-
-  <xsl:template match="entries">
-    <xsl:apply-templates select="entry"/>
-  </xsl:template>
-
-  <xsl:template match="readme">
-    <hr size="1" />
-    <pre><xsl:apply-templates/></pre>
-  </xsl:template>
-
-  <xsl:template match="entry">
-    <tr>
-      <td align="left">
-        <xsl:variable name="urlPath" select="@urlPath"/>
-        <a href="{$urlPath}">
-          <tt><xsl:apply-templates/></tt>
-        </a>
-      </td>
-      <td align="right">
-        <tt><xsl:value-of select="@size"/></tt>
-      </td>
-      <td align="right">
-        <tt><xsl:value-of select="@date"/></tt>
-      </td>
-    </tr>
-  </xsl:template>
-
-</xsl:stylesheet>
-
- -
How do I secure directory listings?
-Use web.xml in each individual webapp. See the security section of the -Servlet specification. - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/deployer-howto.html b/bundledApps/tomcat/webapps/docs/deployer-howto.html deleted file mode 100755 index 70df282c..00000000 --- a/bundledApps/tomcat/webapps/docs/deployer-howto.html +++ /dev/null @@ -1,306 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Tomcat Web Application Deployment

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Tomcat Web Application Deployment

Table of Contents
- -
Introduction
-

- Deployment is the term used for the process of installing a web - application (either a 3rd party WAR or your own custom web application) - into the Tomcat server. -

-

- Web application deployment may be accomplished in a number of ways - within the Tomcat server.

-
    -
  • Statically; the web application is setup before Tomcat is started
  • -
  • - Dynamically; in conjunction with the Tomcat Manager web application or - manipulating already deployed web applications -
  • -
-

- The Tomcat Manager is a tool that allows URL-based web application - deployment features. There is also a tool called the Client Deployer, - which is a command shell based script that interacts with the Tomcat - Manager but provides additional functionality such as compiling and - validating web applications as well as packaging web application into - web application resource (WAR) files. -

-
Installation
-

- There is no installation required for static deployment of web - applications as this is provided out of the box by Tomcat. Nor is any - installation required for deployment functions with the Tomcat Manager, - although some configuration is required as detailed in the - Tomcat Manager manual. An installation is however required if you wish - to use the Tomcat Client Deployer (TCD). -

-

- The TCD is not packaged with the Tomcat core - distribution, and must therefore be downloaded separately from - the Downloads area. The download is usually labelled - apache-tomcat-7.0.x-deployer. -

-

- TCD has prerequisites of Apache Ant 1.6.2+ and a Java installation. - Your environment should define an ANT_HOME environment value pointing to - the root of your Ant installation, and a JAVA_HOME value pointing to - your Java installation. Additionally, you should ensure Ant's ant - command, and the Java javac compiler command run from the command shell - that your operating system provides. -

-
    -
  1. Download the TCD distribution
  2. -
  3. - The TCD package need not be extracted into any existing Tomcat - installation, it can be extracted to any location. -
  4. -
  5. Read Using the - Tomcat Client Deployer
  6. -
-
A word on Contexts
-

- In talking about deployment of web applications, the concept of a - Context is required to be understood. A Context is what Tomcat - calls a web application. -

-

- In order to configure a Context within Tomcat a Context Descriptor - is required. A Context Descriptor is simply an XML file that contains - Tomcat related configuration for a Context, e.g naming resources or - session manager configuration. In earlier versions of - Tomcat the content of a Context Descriptor configuration was often stored within - Tomcat's primary configuration file server.xml but this is now - discouraged (although it currently still works). -

-

- Context Descriptors not only help Tomcat to know how to configure - Contexts but other tools such as the Tomcat Manager and TCD often use - these Context Descriptors to perform their roles properly. -

-

- The locations for Context Descriptors are: -

-
    -
  1. $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml
  2. -
  3. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
  4. -
-

- Files in (1) are named [webappname].xml but files in (2) are named - context.xml. If a Context Descriptor is not provided for a Context, - Tomcat configures the Context using default values. -

-
Deployment on Tomcat startup
-

- If you are not interested in using the Tomcat Manager, or TCD, - then you'll need to deploy your web applications - statically to Tomcat, followed by a Tomcat startup. The location you - deploy web applications to for this type of deployment is called the - appBase which is specified per Host. You either copy a - so-called exploded web application, i.e non-compressed, to this - location, or a compressed web application resource .WAR file. -

-

- The web applications present in the location specified by the Host's - (default Host is "localhost") appBase attribute (default - appBase is "$CATALINA_BASE/webapps") will be deployed on Tomcat startup - only if the Host's deployOnStartup attribute is "true". -

-

- The following deployment sequence will occur on Tomcat startup in that - case: -

-
    -
  1. Any Context Descriptors will be deployed first.
  2. -
  3. - Exploded web applications not referenced by any Context - Descriptor will then be deployed. If they have an associated - .WAR file in the appBase and it is newer than the exploded web application, - the exploded directory will be removed and the webapp will be - redeployed from the .WAR -
  4. -
  5. .WAR files will be deployed
  6. -
-

- Note again that for each deployed web application, a - Context Descriptor will be created unless one exists already. -

-
Deploying on a running Tomcat server
-

- It is possible to deploy web applications to a running Tomcat server. -

-

- If the Host autoDeploy attribute is "true", the Host will - attempt to deploy and update web applications dynamically, as needed, - for example if a new .WAR is dropped into the appBase. - For this to work, the Host needs to have background processing - enabled which is the default configuration. -

- -

- autoDeploy set to "true" and a running Tomcat allows for: -

-
    -
  • Deployment of .WAR files copied into the Host appBase.
  • -
  • - Deployment of exploded web applications which are - copied into the Host appBase. -
  • -
  • - Re-deployment of a web application which has already been deployed from - a .WAR when the new .WAR is provided. In this case the exploded - web application is removed, and the .WAR is expanded again. - Note that the explosion will not occur if the Host is configured - so that .WARs are not exploded with a unpackWARs - attribute set to "false", in which case the web application - will be simply redeployed as a compressed archive. -
  • -
  • - Re-loading of a web application if the /WEB-INF/web.xml file (or - any other resource defined as a WatchedResource) is updated. -
  • -
  • - Re-deployment of a web application if the Context Descriptor - file from which the web application has been deployed is - updated. -
  • -
  • - Re-deployment of dependent web applications if the global or - per-host Context Descriptor file used by the web application is - updated. -
  • -
  • - Re-deployment of a web application if a Context Descriptor file (with a - filename corresponding to the Context path of the previously deployed - web application) is added to the - $CATALINA_BASE/conf/[enginename]/[hostname]/ - directory. -
  • -
  • - Undeployment of a web application if its document base (docBase) - is deleted. Note that on Windows, this assumes that anti-locking - features (see Context configuration) are enabled, otherwise it is not - possible to delete the resources of a running web application. -
  • -
-

- Note that web application reloading can also be configured in the loader, in which - case loaded classes will be tracked for changes. -

-
Deploying using the Tomcat Manager
-

- The Tomcat Manager is covered in its own manual page. -

-
Deploying using the Client Deployer Package
-

- Finally, deployment of web application may be achieved using the - Tomcat Client Deployer. This is a package which can be used to - validate, compile, compress to .WAR, and deploy web applications to - production or development Tomcat servers. It should be noted that this feature - uses the Tomcat Manager and as such the target Tomcat server should be - running. -

- -

- It is assumed the user will be familiar with Apache Ant for using the TCD. - Apache Ant is a scripted build tool. The TCD comes pre-packaged with a - build script to use. Only a modest understanding of Apache Ant is - required (installation as listed earlier in this page, and familiarity - with using the operating system command shell and configuring - environment variables). -

- -

- The TCD includes Ant tasks, the Jasper page compiler for JSP compilation - before deployment, as well as a task which - validates the web application Context Descriptor. The validator task (class - org.apache.catalina.ant.ValidatorTask) allows only one parameter: - the base path of an exploded web application. -

- -

- The TCD uses an exploded web application as input (see the list of the - properties used below). A web application that is programmatically - deployed with the deployer may include a Context Descriptor in - /META-INF/context.xml. -

- -

- The TCD includes a ready-to-use Ant script, with the following targets: -

-
    -
  • - compile (default): Compile and validate the web - application. This can be used standalone, and does not need a running - Tomcat server. The compiled application will only run on the associated - Tomcat 7.0.x server release, and is not guaranteed to work on another - Tomcat release, as the code generated by Jasper depends on its runtime - component. It should also be noted that this target will also compile - automatically any Java source file located in the - /WEB-INF/classes folder of the web application.
  • -
  • - deploy: Deploy a web application (compiled or not) to - a Tomcat server. -
  • -
  • undeploy: Undeploy a web application
  • -
  • start: Start web application
  • -
  • reload: Reload web application
  • -
  • stop: Stop web application
  • -
- -

- In order for the deployment to be configured, create a file - called deployer.properties in the TCD installation - directory root. In this file, add the following name=value pairs per - line: -

- -

- Additionally, you will need to ensure that a user has been - setup for the target Tomcat Manager (which TCD uses) otherwise the TCD - will not authenticate with the Tomcat Manager and the deployment will - fail. To do this, see the Tomcat Manager page. -

- -
    -
  • - build: The build folder used will be, by default, - ${build}/webapp/${path}. After the end of the execution - of the compile target, the web application .WAR will be - located at ${build}/webapp/${path}.war. -
  • -
  • - webapp: The directory containing the exploded web application - which will be compiled and validated. By default, the folder is - myapp. -
  • -
  • - path: Deployed context path of the web application, - by default /myapp. -
  • -
  • - url: Absolute URL to the Tomcat Manager web application of a - running Tomcat server, which will be used to deploy and undeploy the - web application. By default, the deployer will attempt to access - a Tomcat instance running on localhost, at - http://localhost:8080/manager/text. -
  • -
  • - username: Tomcat Manager username (user should have a role of - manager-script) -
  • -
  • password: Tomcat Manager password.
  • -
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/developers.html b/bundledApps/tomcat/webapps/docs/developers.html deleted file mode 100755 index 6289e228..00000000 --- a/bundledApps/tomcat/webapps/docs/developers.html +++ /dev/null @@ -1,56 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Tomcat Developers

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Tomcat Developers

Active Developers
- -

- The list indicates the developers' main areas of interest. Feel free to - add to the list :) The developers email addresses are - [login]@apache.org. Please do not contact - developers directly for any support issues (please post to the - tomcat-users mailing list instead, or one of the other support - resources; some organizations and individual consultants also offer - for pay Tomcat support, as listed on the - support and - training page on the Tomcat Wiki). -

- -
    -
  • Bill Barker (billbarker): Connectors
  • -
  • Costin Manolache (costin): Catalina, Connectors
  • -
  • Filip Hanik (fhanik): Clustering, Release Manager
  • -
  • Jean-Frederic Clere (jfclere): Connectors
  • -
  • Jim Jagielski (jim): Connectors
  • -
  • Konstantin Kolinko (kkolinko): Catalina
  • -
  • Mark Thomas (markt): CGI, SSI, WebDAV, bug fixing
  • -
  • Mladen Turk (mturk): Connectors
  • -
  • Peter Rossbach (pero): Catalina, Clustering, JMX
  • -
  • Rainer Jung (rjung): Catalina, Clustering, Connectors
  • -
  • Remy Maucherat (remm): Catalina, Connectors, Docs
  • -
  • Tim Funk (funkman): Catalina, Docs
  • -
  • Tim Whittington (timw): Connectors
  • -
- -
Retired Developers
- -
    -
  • Amy Roh (amyroh): Catalina
  • -
  • Glenn Nielsen (glenn): Catalina, Connectors
  • -
  • Henri Gomez (hgomez): Connectors
  • -
  • Jan Luehe (luehe): Jasper
  • -
  • Jean-Francois Arcand (jfarcand): Catalina
  • -
  • Kin-Man Chung (kinman): Jasper
  • -
  • Yoav Shapira (yoavs): Docs, JMX, Catalina, balancer
  • -
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/elapi/index.html b/bundledApps/tomcat/webapps/docs/elapi/index.html deleted file mode 100755 index 19c5985c..00000000 --- a/bundledApps/tomcat/webapps/docs/elapi/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - API docs - - - - -The EL Javadoc is not installed by default. Download and install -the "fulldocs" package to get it. - -You can also access the javadoc online in the Tomcat - -documentation bundle. - - - diff --git a/bundledApps/tomcat/webapps/docs/extras.html b/bundledApps/tomcat/webapps/docs/extras.html deleted file mode 100755 index 4095af09..00000000 --- a/bundledApps/tomcat/webapps/docs/extras.html +++ /dev/null @@ -1,94 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Additional Components

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Additional Components

Table of Contents
- -
Introduction
-

- A number of additional components may be used with Apache Tomcat. These - components may be built by users should they need them or they can be - downloaded from one of the mirrors. -

- -
Downloading
-

- To download the extras components open the Tomcat download page and - select "browse" from the Quick Navigation Links. The extras components can be - found in bin/extras. -

-
Building
- -

- The additional components are built using the extras target - of the standard Tomcat Ant script which is present in the source bundle of - Tomcat. -

- -

The build process is the following:

- -
    -
  • Follow the build instructions to build a - Tomcat binary from the source bundle (note: it will be used by the build - process of the additional components, but does not need to be actually - used later on)
  • -
  • Execute the command ant extras to run the build - script
  • -
  • The additional components JARs will be placed in the - output/extras folder
  • -
  • Refer to the documentation below about the usage of these JARs
  • -
- -
Components list
- -
Full commons-logging implementation
- -

- Tomcat uses a package renamed commons-logging API implementation which is - hardcoded to use the java.util.logging API. The commons-logging additional - component builds a full fledged package renamed commons-logging - implementation which can be used to replace the implementation provided with - Tomcat. See the logging page for usage - instructions. -

- -
- -
Web Services support (JSR 109)
- -

- Tomcat provides factories for JSR 109 which may be used to resolve web - services references. Place the generated catalina-ws.jar as well as - jaxrpc.jar and wsdl4j.jar (or another implementation of JSR 109) in the - Tomcat lib folder. -

- -

- Users should be aware that wsdl4j.jar is licensed under CPL 1.0 and not the - Apache License version 2.0. -

- -
- -
JMX Remote Lifecycle Listener
- -

- The JMX protocol requires the JMX server (Tomcat in this instance) to listen - on two network ports. One of these ports can be fixed via configuration but - the second is selected randomly. This makes it difficult to use JMX through - a firewall. The JMX Remote Lifecycle Listener allows both ports to be fixed, - simplifying the process of connecting to JMX through a firewall. See the listeners page for usage instructions. -

- -
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-apps.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-apps.html deleted file mode 100755 index c413afed..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-apps.html +++ /dev/null @@ -1,266 +0,0 @@ -Catalina Functional Specifications (7.0.30) - Administrative Apps - Overall Requirements

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

Administrative Apps - Overall Requirements

Table of Contents
- -
Overview
- - -
Introduction
- -

The purpose of this specification is to define high level requirements - for administrative applications that can be used to manage the operation - of a running Tomcat container. A variety of Access Methods - to the supported administrative functionality shall be supported, to - meet varying requirements:

-
    -
  • As A Scriptable Web Application - The existing - Manager web application provides a simple HTTP-based - interface for managing Tomcat through commands that are expressed - entirely through a request URI. This is useful in environments - where you wish to script administrative commands with tools that - can generate HTTP transactions.
  • -
  • As An HTML-Based Web Application - Use an HTML presentation - to provide a GUI-like user interface for humans to interact with the - administrative capabilities.
  • -
  • As SOAP-Based Web Services - The operational commands to - administer Tomcat are made available as web services that utilize - SOAP message formats.
  • -
  • As Java Management Extensions (JMX) Commands - The operational - commands to administer Tomcat are made available through JMX APIs, - for integration into management consoles that utilize them.
  • -
  • Other Remote Access APIs - Other remote access APIs, such - as JINI, RMI, and CORBA can also be utilized to access administrative - capabilities.
  • -
- -

Underlying all of the access methods described above, it is assumed - that the actual operations are performed either directly on the - corresponding Catalina components (such as calling the - Deployer.deploy() method to deploy a new web application), - or through a "business logic" layer that can be shared across all of the - access methods. This approach minimizes the cost of adding new - administrative capabilities later -- it is only necessary to add the - corresponding business logic function, and then write adapters to it for - all desired access methods.

- -

The current status of this functional specification is - PROPOSED. It has not yet been discussed and - agreed to on the TOMCAT-DEV mailing list.

- -
- - -
External Specifications
- -

The implementation of this functionality depends on the following - external specifications:

- - -
- - -
Implementation Requirements
- -

The implementation of this functionality shall conform to the - following requirements:

-
    -
  • To the maximum extent feasible, all administrative functions, - and the access methods that support them, shall run portably - on all platforms where Tomcat itself runs.
  • -
  • In a default Tomcat distribution, all administrative capabilities - shall be disabled. It shall be necessary for a system - administrator to specifically enable the desired access methods - (such as by adding a username/password with a specific role to - the Tomcat user's database.
  • -
  • Administrative functions shall be realized as direct calls to - corresponding Catalina APIs, or through a business logic layer - that is independent of the access method used to initiate it.
  • -
  • The common business logic components shall be implemented in - package org.apache.catalina.admin.
  • -
  • The common business logic components shall be built as part of the - standard Catalina build process, and made visible in the - Catalina class loader.
  • -
  • The Java components required for each access method shall be - implemented in subpackages of org.apache.catalina.admin. -
  • -
  • The build scripts should treat each access method as optional, - so that it will be built only if the corresponding required - APIs are present at build time.
  • -
  • It shall be possible to save the configured state of the running - Tomcat container such that this state can be reproduced when the - container is shut down and restarted.
  • -
  • Administrative commands to start up and shut down the overall - Tomcat container are out of scope for the - purposes of these applications. It is assumed that other - (usually platform-specific) mechanisms will be used for container - startup and shutdown.
  • -
- -
- - -
Dependencies
- - -
Environmental Dependencies
- -

The following environmental dependencies must be met in order for - administrative applications to operate correctly:

-
    -
  • For access methods that require creation of server sockets, the - appropriate ports must be configured and available.
  • -
- -
- - -
Container Dependencies
- -

Correct operation of administrative applications depends on the - following specific features of the surrounding container:

-
    -
  • To the maximum extent feasible, Catalina components that offer - direct administrative APIs and property setters shall support - "live" changes to their operation, without requiring a container - restart.
  • -
- -
- - -
External Technologies
- -

The availability of the following technologies can be assumed - for the implementation and operation of the various access methods - and the corresponding administrative business logic:
- FIXME - This list below is totally outdated, but nobody - cares about the administrative app anymore. It is removed and unsupported - since Tomcat 6.0.

- - -
- - -
Functionality
- - -
Properties of Administered Objects
- -

Functional requirements for administrative applications are specified - in terms of Administered Objects, whose definitions and detailed - properties are listed here. In general, - Administered Objects correspond to components in the Catalina architecture, - but these objects are defined separately here for the following reasons:

-
    -
  • It is possible that the administrative applications do not expose - every possible configurable facet of the underlying components.
  • -
  • In some cases, an Administered Object (from the perspective of an - administrative operation) is realized by more than one Catalina - component, at a finer-grained level of detail.
  • -
  • It is necessary to represent the configuration information for a - component separately from the component itself (for instance, in - order to store that configuration information for later use).
  • -
  • It is necessary to represent configuration information (such as - a Default Context) when there is no corresponding component instance. -
  • -
  • Administered Objects, when realized as Java classes, will include - methods for administrative operations that have no correspondence - to operations performed by the corresponding actual components.
  • -
- -

It is assumed that the reader is familiar with the overall component - architecture of Catalina. For further information, see the corresponding - Developer Documentation. To distinguish names that are used as both - Administered Objects and Components, different - font presentations are utilized. Default values for many properties - are listed in [square brackets].

- -
- - -
Supported Administrative Operations
- -

The administrative operations that are available are described in terms - of the corresponding Administered Objects (as defined above), in a manner - that is independent of the access method by which these operations are - requested. In general, such operations are relevant only in the context - of a particular Administered Object (and will most likely be realized as - method calls on the corresponding Administered Object classes), so they - are organized based on the currently "focused" administered object. - The available Supported Operations are documented - here.

- -
- - -
Access Method Specific Requirements
- -
Scriptable Web Application
- -

An appropriate subset of the administrative operations described above - shall be implemented as commands that can be performed by the "Manager" - web application. FIXME - Enumerate them.

- -

In addition, this web application shall conform to the following - requirements:

-
    -
  • All request URIs shall be protected by security constraints that - require a security role to be assigned for processing.
  • -
  • The default user database shall not contain any - user that has been assigned a security role.
  • -
- -
HTML-Based Web Application
- -

The entire suite of administrative operations described above shall be - made available through a web application designed for human interaction. - In addition, this web application shall conform to the following - requirements:

-
    -
  • Must be implemented using servlet, JSP, and MVC framework technologies - described under "External Technologies", above.
  • -
  • Prompts and error messages must be internationalizable to multiple - languages.
  • -
  • Rendered HTML must be compatible with Netscape Navigator (version 4.7 - or later) and Internet Explorer (version 5.0 or later).
  • -
- -
- - -
Testable Assertions
- -

FIXME - Complete this section.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-objects.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-objects.html deleted file mode 100755 index 221c6594..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-objects.html +++ /dev/null @@ -1,431 +0,0 @@ -Catalina Functional Specifications (7.0.30) - Administrative Apps - Administered Objects

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

Administrative Apps - Administered Objects

Table of Contents
- -
Administered Objects Overview
- -

This document defines the Administered Objects that represent -the internal architectural components of the Catalina servlet container. -Associated with each is a set of Supported -Operations that can be performed when the administrative application is -"focused" on a particular configurable object.

- -

The following Administered Objects are defined:

- - -
Access Logger
- -

An Access Logger is an optional Valve that can - create request access logs in the same formats as those provided by - web servers. Such access logs are useful input to hit count and user - access tracking analysis programs. An Access Logger can be attached to - an Engine, a Host, a Context, or a Default - Context.

- -

The standard component implementing an Access Logger is - org.apache.catalina.valves.AccessLogValve. It supports the - following configurable properties:

-
    -
  • debug - Debugging detail level. [0]
  • -
  • directory - Absolute or relative (to $CATALINA_BASE) path - of the directory into which access log files are created. - [logs].
  • -
  • pattern - Pattern string defining the fields to be - included in the access log output, or "common" for the standard - access log pattern. See - org.apache.catalina.valves.AccessLogValve for more - information. [common]
  • -
  • prefix - Prefix added to the beginning of each log file - name created by this access logger.
  • -
  • resolveHosts - Should IP addresses be resolved to host - names in the log? [false]
  • -
  • suffix - Suffix added to the end of each log file name - created by this access logger.
  • -
- -
Connector
- -

A Connector is the representation of a communications endpoint - by which requests are received from (and responses returned to) a Tomcat - client. The administrative applications shall support those connectors - that are commonly utilized in Tomcat installations, as described in detail - below.

- -

For standalone use, the standard connector supporting the HTTP/1.1 - protocol is org.apache.catalina.connectors.http.HttpConnector. - It supports the following configurable properties:

-
    -
  • acceptCount - The maximum queue length of incoming - connections that have not yet been accepted. [10]
  • -
  • address - For servers with more than one IP address, the - address upon which this connector should listen. [All Addresses]
  • -
  • bufferSize - Default input buffer size (in bytes) for - requests created by this Connector. [2048]
  • -
  • debug - Debugging detail level. [0]
  • -
  • enableLookups - Should we perform DNS lookups on remote - IP addresses when request.getRemoteHost() is called? - [false]
  • -
  • maxProcessors - The maximum number of processor threads - supported by this connector. [20]
  • -
  • minProcessors - The minimum number of processor threads - to be created at container startup. [5]
  • -
  • port - TCP/IP port number on which this Connector should - listen for incoming requests. [8080]
  • -
  • proxyName - Host name to be returned when an application - calls request.getServerName(). [Value of Host: header]
  • -
  • proxyPort - Port number to be returned when an application - calls request.getServerPort(). [Same as port] -
  • -
- -
Context
- -

A Context is the representation of an individual web application, - which is associated with a corresponding Host. Note that the - administrable properties of a Context do not - include any settings from inside the web application deployment descriptor - for that application.

- -

The standard component implementing a Context is - org.apache.catalina.core.StandardContext. It supports the - following configurable properties:

-
    -
  • cookies - Should be use cookies for session identifier - communication? [true]
  • -
  • crossContext - Should calls to - ServletContext.getServletContext() return the actual - context responsible for the specified path? [false]
  • -
  • debug - Debugging detail level. [0]
  • -
  • docBase - The absolute or relative (to the - appBase of our owning Host) pathname of a - directory containing an unpacked web application, or of a web - application archive (WAR) file.
  • -
  • override - Should settings in this Context - override corresponding settings in the Default Context? - [false]
  • -
  • path - Context path for this web application, or an empty - string for the root application of a Host. [Inferred from - directory or WAR file name]
  • -
  • reloadable - Should Tomcat monitor classes in the - /WEB-INF/classes directory for changes, and reload the - application if they occur? [false]
  • -
  • useNaming - Should Tomcat provide a JNDI naming context, - containing preconfigured entries and resources, corresponding to the - requirements of the Java2 Enterprise Edition specification? [true]
  • -
  • workDir - Absolute pathname of a scratch directory that is - provided to this web application. [Automatically assigned relative to - $CATALINA_BASE/work]
  • -
- -

Each Context is owned by a parent Host, and is - associated with:

-
    -
  • An optional Access Logger that logs all requests processed - by this web application.
  • -
  • Zero or more Environment Entries representing environment - entries for the JNDI naming context associated with a web - application.
  • -
  • Zero or more JDBC Resources representing database connection - pools associated with a web application.
  • -
  • A Loader representing the web application class loader used - by this web application.
  • -
  • A Manager representing the session manager used by this - web application.
  • -
  • An optional Realm used to provide authentication and access - control information for this web application.
  • -
  • Zero or more Request Filters used to limit access to this - web application based on remote host name or IP address.
  • -
- -
Default Context
- -

A Default Context represents a subset of the configurable - properties of a Context, and is used to set defaults for those - properties when web applications are automatically deployed. A Default - Context object can be associated with an Engine or a - Host. The following configurable properties are supported:

-
    -
  • cookies - Should be use cookies for session identifier - communication? [true]
  • -
  • crossContext - Should calls to - ServletContext.getServletContext() return the actual - context responsible for the specified path? [false]
  • -
  • reloadable - Should Tomcat monitor classes in the - /WEB-INF/classes directory for changes, and reload the - application if they occur? [false]
  • -
  • useNaming - Should Tomcat provide a JNDI naming context, - containing preconfigured entries and resources, corresponding to the - requirements of the Java2 Enterprise Edition specification? [true]
  • -
- -

Each Default Context is owned by a parent Engine or - Host, and is associated with:

-
    -
  • Zero or more Environment Entries representing environment - entries for the JNDI naming context associated with a web - application.
  • -
  • Zero or more JDBC Resources representing database connection - pools associated with a web application.
  • -
  • An optional Loader representing default configuration - properties for the Loader component of deployed web applications.
  • -
  • An optional Manager representing default configuration - properties for the Manager component of deployed web applications.
  • -
- -
Default Deployment Descriptor
- -

Default web application characteristics are configured in a special - deployment descriptor named $CATALINA_BASE/conf/web.xml. This - section describes the configurable components that may be stored there.

- -

FIXME - Complete the description of default servlets, - default mappings, default MIME types, and so on.

- -
Engine
- -

An Engine is the representation of the entire Catalina - servlet container, and processes all requests for all of the associated - virtual hosts and web applications.

- -

The standard component implementing an Engine is - org.apache.catalina.core.StandardEngine. It supports the - following configurable properties:

-
    -
  • debug - Debugging detail level. [0]
  • -
  • defaultHost - Name of the Host to which requests - will be directed if the requested host is unknown. [localhost]
  • -
  • name - Logical name of this engine. [Tomcat Stand-Alone] -
  • -
- -

Each Engine is owned by a parent Service, and is - associated with:

-
    -
  • An optional Access Logger that logs all requests processed - by the entire container.
  • -
  • A Default Context, representing default properties of a - Context for automatically deployed applications for all - associated Hosts (unless overridden by a subordinate - component).
  • -
  • One or more Hosts representing individual virtual hosts - supported by this container.
  • -
  • A Realm used to provide authentication and access control - information for all virtual hosts and web applications (unless - overridden by a subordinate component).
  • -
  • Zero or more Request Filters used to limit access to the - entire container based on remote host name or IP address.
  • -
- -
Environment Entry
- -

An Environment Entry is the representation of a - <env-entry> element from a web application deployment - descriptor. It will cause the creation of a corresponding entry in the - JNDI naming context provided to the corresponding Context. The - following configurable properties are supported:

-
    -
  • description - Description of this environment entry.
  • -
  • name - Environment entry name (relative to the - java:comp/env context)
  • -
  • type - Environment entry type (must be one of the fully - qualified Java classes listed in the servlet spec).
  • -
  • value - Environment entry value (must be convertible from - String to the specified type.
  • -
- -
Host
- -

A Host is the representation of an individual virtual host, - which has a unique set of associated web applications.

- -

The standard component implementing a Host is - org.apache.catalina.core.StandardHost. It supports the - following configurable properties:

-
    -
  • aliases - Zero or more DNS names that are also associated - with this host (for example, a particular host might be named - www.mycompany.com with an alias company.com). -
  • -
  • appBase - Absolute or relative (to $CATALINA_BASE) path - to a directory from which web applications will be automatically - deployed.
  • -
  • debug - Debugging detail level. [0]
  • -
  • name - DNS Name of the virtual host represented by this - object.
  • -
  • unpackWARs - Should web application archive files - deployed by this virtual host be unpacked first? [true]
  • -
- -

Each Host is owned by a parent Engine, and is - associated with:

-
    -
  • An optional Access Logger that logs all requests processed - by this virtual host.
  • -
  • One or more Contexts representing the web applications - operating on this Host.
  • -
  • A Default Context representing default Context - properties for web applications that are automatically deployed - by this Host.
  • -
  • A optional Realm used to provide authentication and access - control information for all web applications associated with this - virtual host (unless overridden by a subordinate component).
  • -
- -

FIXME - Should we support configuration of the - User Web Applications functionality?

- -
JDBC Resource
- -

A JDBC Resources represents a database connection pool (i.e. - an implementation of javax.sql.DataSource that will be - configured and made available in the JNDI naming context associated with - a web application.

- -

FIXME - properties of this administered object

- -
Loader
- -

A Loader represents a web application class loader that will - be utilized to provide class loading services for a particular - Context.

- -

The standard component implementing a Loader is - org.apache.catalina.loader.StandardLoader. It supports - the following configurable properties:

-
    -
  • checkInterval - Number of seconds between checks for - modified classes, if automatic reloading is enabled. [15]
  • -
  • debug - Debugging detail level. [0]
  • -
  • reloadable - Should this class loader check for modified - classes and initiate automatic reloads? [Set automatically from the - reloadable property of the corresponding Context] -
  • -
- -

Each Loader is owned by a parent Context.

- -
Manager
- -

A Manager represents a session manager that will be associated - with a particular web application. FIXME - Add support - for advanced session managers and their associated Stores.

- -

The standard component implementing a Manager is - org.apache.catalina.session.StandardManager. It supports - the following configurable properties:

-
    -
  • checkInterval - Number of seconds between checks for - expired sessions. [60]
  • -
  • debug - Debugging detail level. [0]
  • -
  • entropy - String initialization parameter used to increase - the entropy (initial randomness) of the random number generator used to - create session identifiers. [Inferred from engine, host, and context] -
  • -
  • maxActiveSessions - The maximum number of active sessions - that are allowed, or -1 for no limit. [-1]
  • -
- -

Each Manager is owned by a parent Context.

- -
Realm
- -

A Realm represents a "database" of information about authorized - users, their passwords, and the security roles assigned to them. This will - be used by the container in the implementation of container-managed security - in accordance with the Servlet Specification. Several alternative - implementations are supported.

- -

org.apache.catalina.realm.MemoryRealm initializes its user - information from a simple XML file at startup time. If changes are made - to the information in this file, the corresponding web applications using - it must be restarted for the changes to take effect. It supports the - following configurable properties:

-
    -
  • debug - Debugging detail level. [0]
  • -
  • pathname - Absolute or relative (to $CATALINA_BASE) path to - the XML file containing our user information. [conf/tomcat-users.xml] -
  • -
- -

org.apache.catalina.realm.JDBCRealm uses a relational - database (accessed via JDBC APIs) to contain the user information. Changes - in the contents of this database take effect immediately; however, the roles - assigned to a particular user are calculated only when the user initially - logs on (and not per request). The following configurable properties - are supported:

-
    -
  • connectionName - Database username to use when establishing - a JDBC connection.
  • -
  • connectionPassword - Database password to use when - establishing a JDBC connection.
  • -
  • connectionURL - Connection URL to use when establishing - a JDBC connection.
  • -
  • debug - Debugging detail level. [0]
  • -
  • digest - Name of the MessageDigest algorithm - used to encode passwords in the database, or a zero-length string for - no encoding. [Zero-length String]
  • -
  • driverName - Fully qualified Java class name of the JDBC - driver to be utilized.
  • -
  • roleNameCol - Name of the column, in the User Roles table, - which contains the role name.
  • -
  • userCredCol - Name of the column, in the Users table, - which contains the password (encrypted or unencrypted).
  • -
  • userNameCol - Name of the column, in both the Users and - User Roles tables, that contains the username.
  • -
  • userRoleTable - Name of the User Roles table, which contains - one row per security role assigned to a particular user. This table must - contain the columns specified by the userNameCol and - roleNameCol properties.
  • -
  • userTable - Name of the Users table, which contains one row - per authorized user. This table must contain the columns specified by - the userNameCol and userCredCol properties. -
  • -
- -

FIXME - Should we provide mechanisms to edit the contents - of a "tomcat-users.xml" file through the admin applications?

- -

Each Realm is owned by a parent Engine, Host, - or Context.

- -
Request Filter
- -

FIXME - complete this entry

- -
Server
- -

FIXME - complete this entry

- -
Service
- -

FIXME - complete this entry

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-opers.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-opers.html deleted file mode 100755 index 84dccab1..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-admin-opers.html +++ /dev/null @@ -1,276 +0,0 @@ -Catalina Functional Specifications (7.0.30) - Administrative Apps - Supported Operations

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

Administrative Apps - Supported Operations

Table of Contents
- -
Supported Operations Overview
- -

This document defines the Supported Operations that may -be performed against the Administered -Objects that are supported by Tomcat administrative applications. -Not all operations are required to be available through every administrative -application that is implemented. However, if a given operation is available, -it should operate consistently with the descriptions found here.

- -

Supported Operations are described for the following Administered -Objects:

- - -
Access Logger
- -

From the perspective of a particular Access Logger, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Engine, Host, or - Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Connector
- -

From the perspective of a particular Connector, it shall be - possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Service.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Context
- -

From the perspective of a particular Context, it shall be - possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Host.
  • -
  • Edit the configurable properties of this object.
  • -
  • Create and configure a new Access Logger associated - with this object.
  • -
  • Edit the configurable properties of the associated Access - Logger.
  • -
  • Remove the associated Access Logger.
  • -
  • Create and configure a new Environment Entry associated - with this object.
  • -
  • Select and edit the configurable properties of an associated - Environment Entry.
  • -
  • Remove an associated Environment Entry.
  • -
  • Create and configure a new JDBC Resource associated - with this object.
  • -
  • Select and edit the configurable properties of an associated - JDBC Resource.
  • -
  • Remove an associated JDBC Resource.
  • -
  • Create and configure a new Loader associated with - this object.
  • -
  • Edit the configurable properties of the associated Loader.
  • -
  • Remove the associated Loader.
  • -
  • Create and configure a new Manager associated with - this object.
  • -
  • Edit the configurable properties of the associated Manager.
  • -
  • Remove the associated Manager.
  • -
  • Create and configure a new Realm associated with - this object.
  • -
  • Edit the configurable properties of the associated Realm.
  • -
  • Remove the associated Realm.
  • -
  • Create and configure a new Request Filter associated with - this object.
  • -
  • Select and edit the configurable properties of an - associated Request Filter
  • -
  • Remove an associated Request Filter.
  • -
- -
Default Context
- -

From the perspective of a particular Default Context, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Engine or Host.
  • -
  • Edit the configurable properties of this object.
  • -
  • Create and configure a new Environment Entry associated - with this object.
  • -
  • Select and edit the configurable properties of an associated - Environment Entry.
  • -
  • Remove an associated Environment Entry.
  • -
  • Create and configure a new JDBC Resource associated - with this object.
  • -
  • Select and edit the configurable properties of an associated - JDBC Resource.
  • -
  • Remove an associated JDBC Resource.
  • -
- -
Engine
- -

From the perspective of a particular Engine, it shall be - possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Service.
  • -
  • Edit the configurable properties of this object.
  • -
  • Create and configure a new Access Logger associated - with this object.
  • -
  • Edit the configurable properties of the associated Access - Logger.
  • -
  • Remove the associated Access Logger.
  • -
  • Create and configure a new Default Context associated - with this object.
  • -
  • Edit the configurable properties of the associated Default - Context.
  • -
  • Remove the associated Default Context.
  • -
  • Create and configure a new Host associated with - this object.
  • -
  • Select and edit the configurable properties of an - associated Host.
  • -
  • Remove an associated Host.
  • -
  • Create and configure a new Realm associated with - this object.
  • -
  • Edit the configurable properties of the associated Realm.
  • -
  • Remove the associated Realm.
  • -
  • Create and configure a new Request Filter associated with - this object.
  • -
  • Select and edit the configurable properties of an - associated Request Filter
  • -
  • Remove an associated Request Filter.
  • -
- -
Environment Entry
- -

From the perspective of a particular Environment Entry, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Context or Default Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Host
- -

From the perspective of a particular Host, it shall be - possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Engine.
  • -
  • Edit the configurable properties of this object.
  • -
  • Create and configure a new Access Logger associated - with this object.
  • -
  • Edit the configurable properties of the associated Access - Logger.
  • -
  • Remove the associated Access Logger.
  • -
  • Create and configure a new Context associated with - this object.
  • -
  • Select and edit the configurable properties of an associated - Context.
  • -
  • Remove an associated Context.
  • -
  • Create and configure a new Default Context associated - with this object.
  • -
  • Edit the configurable properties of the associated Default - Context.
  • -
  • Remove the associated Default Context.
  • -
  • Create and configure a new Realm associated with - this object.
  • -
  • Edit the configurable properties of the associated Realm.
  • -
  • Remove the associated Realm.
  • -
  • Create and configure a new Request Filter associated with - this object.
  • -
  • Select and edit the configurable properties of an - associated Request Filter
  • -
  • Remove an associated Request Filter.
  • -
- -
JDBC Resource
- -

From the perspective of a particular JDBC Resource, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Context or Default Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Loader
- -

From the perspective of a particular Loader, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Manager
- -

From the perspective of a particular Manager, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Realm
- -

From the perspective of a particular Realm, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Engine, Host, or - Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Request Filter
- -

From the perspective of a particular Request Filter, it shall - be possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Engine, Host, or - Context.
  • -
  • Edit the configurable properties of this object.
  • -
- -
Server
- -

From the perspective of the overall Server, it shall be - possible to perform the following administrative operations:

-
    -
  • Edit the configurable properties of this object.
  • -
  • Create and configure a new Service associated with - this object.
  • -
  • Select and edit the configurable properties of an associated - Service.
  • -
- -
Service
- -

From the perspective of a particular Service, it shall be - possible to perform the following administrative operations:

-
    -
  • Navigate to the owning Server.
  • -
  • Edit the configurable properties of this object.
  • -
  • Create and configure a new Connector associated with - this object.
  • -
  • Select and edit the configurable properties of an associated - Connector.
  • -
  • Remove an associated Connector.
  • -
  • Create and configure a new Engine associated with - this object.
  • -
  • Edit the configurable properties of the associated Engine.
  • -
  • Remove the associated Engine.
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-default.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-default.html deleted file mode 100755 index 9f7fd41c..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-default.html +++ /dev/null @@ -1,237 +0,0 @@ -Catalina Functional Specifications (7.0.30) - Default Servlet

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

Default Servlet

Table of Contents
- -
Overview
- - -
Introduction
- -

The purpose of the Default Servlet is to serve - static resources of a web application in response to client requests. - As the name implies, it is generally configured as the "default" - servlet for a web application, by being mapped to a URL pattern "/".

- -
- - -
External Specifications
- -

The following external specifications have provisions which - partially define the correct behavior of the default servlet:

- - -
- - -
Implementation Requirements
- -

The implementation of this functionality shall conform to the - following requirements:

-
    -
  • Must be implemented as a servlet.
  • -
  • Must support configurable parameters for debugging detail level, - input buffer size, output buffer size, whether or not to produce - directory listings when no welcome file is present, and whether or not - modifications are supported via DELETE and PUT.
  • -
  • Log debugging and operational messages (suitably internationalized) - via the getServletContext().log() method.
  • -
- -
- - -
Dependencies
- - -
Environmental Dependencies
- -

The following environmental dependencies must be met in order for - the default servlet to operate correctly:

-
    -
  • The default servlet must be registered in the application deployment - descriptor (or the default deployment descriptor in file - $CATALINA_BASE/conf/web.xml) using a "default servlet" - servlet mapping, signified by URL pattern "/".
  • -
- -
- - -
Container Dependencies
- -

Correct operation of the default servlet depends on the following - specific features of the surrounding container:

-
    -
  • The container shall provide a servlet context attribute that - lists the welcome file names that have been defined for this - web application.
  • -
  • The container shall provide a servlet context attribute that - contains a javax.naming.directory.DirContext - implementation representing the static resources of this - web application.
  • -
- -
- - -
Functionality
- - -
Initialization Functionality
- -

The following processing must be performed when the init() - method of the default servlet is called:

-
    -
  • Process and sanity check configuration parameters.
  • -
- -
- - -
Per-Request Functionality
- - -

For all HTTP request methods, the resource path is determined from - the path information provided to this request, either as request attribute - javax.servlet.include.path_info (for a request dispatcher - access to a static resource) or by calling - request.getPathInfo() directly.

- -

On each HTTP DELETE request processed by this servlet, the following - processing shall be performed:

-
    -
  • If modifications to the static resources are not allowed (set by a - configuration parameter), return HTTP status 403 (forbidden).
  • -
  • If an attempt is made to delete a resource from /META-INF - or /WEB-INF, return HTTP status 403 (forbidden).
  • -
  • If the requested resource does not exist, return HTTP status 404 - (not found)
  • -
  • Unbind the resource from the directory context containing the - static resources for this web application. If successful, return - HTTP status 204 (no content). Otherwise, return HTTP status 405 - (method not allowed).
  • -
- - -

On each HTTP GET request processed by this servlet, the following - processing shall be performed:

-
    -
  • If the request is for a resource under /META-INF or - /WEB-INF, return HTTP status 404 (not found).
  • -
  • If the requested resource does not exist, return HTTP status 404 - (not found).
  • -
  • If the requested resource is not a directory, but the resource - path ends in "/" or "\", return HTTP status 404 (not found).
  • -
  • If the requested resource is a directory: -
      -
    • If the request path does not end with "/", redirect to a - corresponding path with "/" appended so that relative references - in welcome files are resolved correctly.
    • -
    • If one of the specified welcome files exists, redirect to the - path for that welcome file so that it will be served explicitly. -
    • -
  • -
  • If the request being processed contains an If-Range - header, perform the processing described in the HTTP/1.1 specification - to determine whether the client's information is up to date.
  • -
  • Determine the content type of the response, by looking up the - corresponding MIME type in our servlet context.
  • -
  • If the requested resource is a directory: -
      -
    • If directory listings are suppressed, return HTTP status 404 - (not found).
    • -
    • Set the content type to text/html.
    • -
  • -
  • Determine the range(s) to be returned, based on the existence of - any If-Range and Range headers.
  • -
  • If the requested resource is a directory, include an ETag - header in the response, with the value calculated based on the content - of the directory.
  • -
  • Include a Last-Modified header in the response documenting - the date/time that the resource was last modified.
  • -
  • Unless we are processing a HEAD request, include the appropriate - content (or content ranges) in the response.
  • -
- -

On each HTTP HEAD request processed by this servlet, the following - processing shall be performed:

-
    -
  • Processed identically to an HTTP GET request, except that the data - content is not transmitted after the headers.
  • -
- -

On each HTTP POST request processed by this servlet, the following - processing shall be performed:

-
    -
  • Processed identically to an HTTP GET request.
  • -
- - -

On each HTTP PUT request processed by this servlet, the following - processing shall be performed:

-
    -
  • If modifications to the static resources are not allowed (set by a - configuration parameter), return HTTP status 403 (forbidden).
  • -
  • If an attempt is made to delete a resource from /META-INF - or /WEB-INF, return HTTP status 403 (forbidden).
  • -
  • Create a new resource from the body of this request.
  • -
  • Bind or rebind the specified path to the new resource (depending on - whether it currently exists or not). Return HTTP status as follows: -
      -
    • If binding was unsuccessful, return HTTP status 409 (conflict). -
    • -
    • If binding was successful and the resource did not previously - exist, return HTTP status 201 (created).
    • -
    • If binding was successful and the resource previously existed, - return HTTP status 204 (no content).
    • -
  • -
- -
- - -
Finalization Functionality
- -

No specific processing is required when the destroy() - method is called:

- -
- - -
Testable Assertions
- -

In addition the the assertions implied by the functionality requirements - listed above, the following additional assertions shall be tested to - validate the behavior of the default servlet:

-
    -
  • Requests for resources that do not exist in the web application must - return HTTP status 404 (not found).
  • -
  • The default servlet must operate identically for web applications that - are run out of a WAR file directly, or from an unpacked directory - structure.
  • -
  • If the web application is running out of an unpacked directory - structure, the default servlet must recognize cases where the resource - has been updated through external means.
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-jdbc-realm.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-jdbc-realm.html deleted file mode 100755 index 05bc4288..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-jdbc-realm.html +++ /dev/null @@ -1,233 +0,0 @@ -Catalina Functional Specifications (7.0.30) - JDBCRealm

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

JDBCRealm

Table of Contents
- -
Overview
- - -
Introduction
- -

The purpose of the JDBCRealm implementation is to - provide a mechanism by which Tomcat can acquire information needed - to authenticate web application users, and define their security roles, - from a relational database accessed via JDBC APIs. For integration - with Catalina, the resulting class(es) must implement the - org.apache.catalina.Realm interface.

- -

This specification reflects a combination of functionality that is - already present in the org.apache.catalina.realm.JDBCRealm - class, as well as requirements for enhancements that have been - discussed. Where appropriate, requirements statements are marked - [Current] and [Requested] to distinguish them.

- -

The current status of this functional specification is - PROPOSED. It has not yet been discussed and - agreed to on the TOMCAT-DEV mailing list.

- -
- - -
External Specifications
- -

The implementation of this functionality depends on the following - external specifications:

- - -
- - -
Implementation Requirements
- -

The implementation of this functionality shall conform to the - following requirements:

-
    -
  • Be realized in one or more implementation classes.
  • -
  • Implement the org.apache.catalina.Realm interface. - [Current]
  • -
  • Implement the org.apache.catalina.Lifecycle - interface. [Current]
  • -
  • Subclass the org.apache.catalina.realm.RealmBase - base class.
  • -
  • Live in the org.apache.catalina.realm package. - [Current]
  • -
  • Support a configurable debugging detail level. [Current]
  • -
  • Log debugging and operational messages (suitably internationalized) - via the getContainer().log() method. [Current]
  • -
- -
- - -
Dependencies
- - -
Environmental Dependencies
- -

The following environmental dependencies must be met in order for - JDBCRealm to operate correctly:

-
    -
  • The desire to utilize JDBCRealm must be registered in - $CATALINA_BASE/conf/server.xml, in a - <Realm> element that is nested inside a - corresponding <Engine>, <Host>, - or <Context> element.
  • -
- -
- - -
Container Dependencies
- -

Correct operation of JDBCRealm depends on the following - specific features of the surrounding container:

-
    -
  • Interactions with JDBCRealm will be initiated by - the appropriate Authenticator implementation, based - on the login method that is selected.
  • -
  • JDBCRealm must have the JDBC standard API classes - available to it. For a JDK 1.2 or later container, these APIs - are included in the standard platform.
  • -
  • When connection pooling is implemented, JDBCRealm - must have the JDBC Optional Package (version 2.0 or later) APIs - available to it. This library is available as a separate - download (and will be included in Tomcat binary distributions).
  • -
- -
- - -
Functionality
- - -
Overview of Operation
- -

The main purpose of JDBCRealm is to allow Catalina to - authenticate users, and look up the corresponding security roles, from - the information found in a relational database accessed via JDBC APIs. - For maximum flexibility, the details of how this is done (for example, - the names of the required tables and columns) should be configurable.

- -

Each time that Catalina needs to authenticate a user, it will call - the authenticate() method of this Realm implementation, - passing the username and password that were specified by the user. If - we find the user in the database (and match on the password), we accumulate - all of the security roles that are defined for this user, and create a - new GenericPrincipal object to be returned. If the user - is not authenticated, we return null instead. The - GenericUser object caches the set of security roles that - were owned by this user at the time of authentication, so that calls to - isUserInRole() can be answered without going back to the - database every time.

- -
- - -
Detailed Functional Requirements
- - -

Configurable Properties

- -

The implementation shall support the following properties - that can be configured with JavaBeans property setters:

-
    -
  • Configuration parameters defining the JDBC driver to use, the - database connection URL to be accessed, and the username/password - to use for logging in. [Current]
  • -
  • Configuration parameters describing the connection pool to be - created to support simultaneous authentications. [Requested]
  • -
  • Name of the tables to be searched for users and roles. [Current]
  • -
  • Name of the columns to be used for usernames, passwords, and - role names. [Current]
  • -
- -

Lifecycle Functionality

- -

The following processing must be performed when the start() - method is called:

-
    -
  • Establish a connection to the configured database, using the - configured username and password. [Current]
  • -
  • Configure and establish a connection pool of connections to the - database. [Requested]
  • -
- -

The following processing must be performed when the stop() - method is called:

-
    -
  • Close any opened connections to the database.
  • -
- - -

Method authenticate() Functionality

- -

When authenticate() is called, the following processing - is required:

-
    -
  • Acquire the one and only connection [Current] or acquire a connection - from the connection pool [Requested].
  • -
  • Select the one and only row from the user's table for this user, - and retrieve the corresponding password column. If zero rows (or - more than one row) are found, return null.
  • -
  • Authenticate the user by comparing the (possibly encrypted) password - value that was received against the password presented by the user. - If there is no match, return null.
  • -
  • Acquire a List of the security roles assigned to the - authenticated user by selecting from the roles table.
  • -
  • Construct a new instance of class - org.apache.catalina.realm.GenericPrincipal, passing as - constructor arguments: this realm instance, the authenticated - username, and a List of the security roles associated - with this user.
  • -
  • WARNING - Do not attempt to cache and reuse previous - GenericPrincipal objects for a particular user, because - the information in the directory server might have changed since the - last time this user was authenticated.
  • -
  • Return the newly constructed GenericPrincipal.
  • -
- - -

Method hasRole() Functionality

- -

When hasRole() is called, the following processing - is required:

-
    -
  • The principal that is passed as an argument SHOULD - be one that we returned (instanceof class - org.apache.catalina.realm.GenericPrincipal, with a - realm property that is equal to our instance.
  • -
  • If the passed principal meets these criteria, check - the specified role against the list returned by - getRoles(), and return true if the - specified role is included; otherwise, return false.
  • -
  • If the passed principal does not meet these criteria, - return false.
  • -
- -
- -
Testable Assertions
- -

In addition the the assertions implied by the functionality requirements - listed above, the following additional assertions shall be tested to - validate the behavior of JDBCRealm:

-
    -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-jndi-realm.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-jndi-realm.html deleted file mode 100755 index 44482c02..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-jndi-realm.html +++ /dev/null @@ -1,384 +0,0 @@ -Catalina Functional Specifications (7.0.30) - JNDIRealm

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

JNDIRealm

Table of Contents
- -
Overview
- - -
Introduction
- -

The purpose of the JNDIRealm implementation is to - provide a mechanism by which Tomcat can acquire information needed - to authenticate web application users, and define their security roles, - from a directory server or other service accessed via JNDI APIs. For - integration with Catalina, this class must implement the - org.apache.catalina.Realm interface.

- -

This specification reflects a combination of functionality that is - already present in the org.apache.catalina.realm.JNDIRealm - class, as well as requirements for enhancements that have been - discussed. Where appropriate, requirements statements are marked - [Current] and [Requested] to distinguish them.

- -

The current status of this functional specification is - PROPOSED. It has not yet been discussed and - agreed to on the TOMCAT-DEV mailing list.

- -

The code in the current version of JNDIRealm, and the - ideas expressed in this functional specification, are the results of - contributions from many individuals, including (alphabetically):

-
    -
  • Holman, John <j.g.holman@qmw.ac.uk>
  • -
  • Lockhart, Ellen <elockhart@home.com>
  • -
  • McClanahan, Craig <craigmcc@apache.org>
  • -
- -
- - -
External Specifications
- -

The implementation of this functionality depends on the following - external specifications:

- - -
- - -
Implementation Requirements
- -

The implementation of this functionality shall conform to the - following requirements:

-
    -
  • Be realized in one or more implementation classes.
  • -
  • Implement the org.apache.catalina.Realm interface. - [Current]
  • -
  • Implement the org.apache.catalina.Lifecycle - interface. [Current]
  • -
  • Subclass the org.apache.catalina.realm.RealmBase - base class.
  • -
  • Live in the org.apache.catalina.realm package. - [Current]
  • -
  • Support a configurable debugging detail level. [Current]
  • -
  • Log debugging and operational messages (suitably internationalized) - via the getContainer().log() method. [Current]
  • -
- -
- - -
Dependencies
- - -
Environmental Dependencies
- -

The following environmental dependencies must be met in order for - JNDIRealm to operate correctly:

-
    -
  • The desire to utilize JNDIRealm must be registered in - $CATALINA_BASE/conf/server.xml, in a - <Realm> element that is nested inside a - corresponding <Engine>, <Host>, - or <Context> element.
  • -
  • If the Administrator Login operational mode is selected, - the configured administrator username and password must be configured - in the corresponding directory server.
  • -
  • If the Username Login operational mode is selected, - the corresponding directory server must be configured to accept - logins with the username and password that will be passed to - JNDIRealm by the appropriate Authenticator. -
  • -
- -
- - -
Container Dependencies
- -

Correct operation of JNDIRealm depends on the following - specific features of the surrounding container:

-
    -
  • Interactions with JNDIRealm will be initiated by - the appropriate Authenticator implementation, based - on the login method that is selected.
  • -
- -
- - -
Functionality
- - -
Operational Modes
- -

The completed JNDIRealm must support two major operational - modes in order to support all of the required use cases. For the purposes - of this document, the modes are called administrator login and - Username Login. They are described further in the following - paragraphs.

- -

For Administrator Login mode, JNDIRealm will be - configured to establish one or more connections (using a connection pool) - to an appropriate directory server, using JNDI APIs, under a "system - administrator" username and password. This is similar to the approach - normally used to configure JDBCRealm to access authentication - and access control information in a database. It is assumed that the - system administrator username and password that are configured provide - sufficient privileges within the directory server to read (but not modify) - the username, password, and assigned roles for each valid user of the - web application associated with this Realm. The password - can be stored in cleartext, or in one of the digested modes supported by - the org.apache.catalina.realm.RealmBase base class.

- -

For Username Login mode, JNDIRealm does not - normally remain connected to the directory server. Instead, whenever a - user is to be authenticated, a connection to the directory server - (using the username and password received from the authenticator) is - attempted. If this connection is successful, the user is assumed to be - successfully authenticated. This connection is then utilized to read - the corresponding security roles associated with this user, and the - connection is then broken.

- -

NOTE - Username Login mode cannot be used - if you have selected login method DIGEST in your web - application deployment descriptor (web.xml) file. This - restriction exists because the cleartext password is never available - to the container, so it is not possible to bind to the directory server - using the user's username and password.

- -

Because these operational modes work so differently, the functionality - for each mode will be described separately. Whether or not both modes - are actually supported by a single class (versus a class per mode) is - an implementation detail left to the designer.

- -

NOTE - The current implementation only implements - part of the Administrator Lookup mode requirements. It does - not support the Username Lookup mode at all, at this point.

- -
- - -
Administrator Login Mode Functionality
- - -

Configurable Properties

- -

The implementation shall support the following properties - that can be configured with JavaBeans property setters:

-
    -
  • connectionURL - URL of the directory server we will - be contacting.
  • -
  • contextFactory - Fully qualified class name of the JNDI - context factory used to retrieve our InitialContext. - [com.sun.jndi.ldap.LdapCtxFactory]
  • -
  • Additional configuration properties required to establish the - appropriate connection. [Requested]
  • -
  • Connection pool configuration properties. [Requested]
  • -
  • Configuration properties defining how a particular user is - authenticated. The following capabilities should be supported: -
      -
    • Substitute the specified username into a string. [Requested]
    • -
    • Retrieve the distinguished name (DN) of an authorized user via an - LDAP search string with a replacement placeholder for the - username, and comparison of the password to a configurable - attribute retrieved from the search result. [Current]
    • -
  • -
  • Configuration properties defining how the roles associated with a - particular authenticated user can be retrieved. The following - approaches should be supported: -
      -
    • Retrieve a specified attribute (possibly multi-valued) - from an LDAP search expression, - with a replacement placeholder for the DN of the user. - [Current]
    • -
    • Retrieve a set of role names that are defined implicitly (by - selecting principals that match a search pattern) rather than - explicitly (by finding a particular attribute value). - [Requested]
    • -
  • -
- -

Lifecycle Functionality

- -

The following processing must be performed when the start() - method is called:

-
    -
  • Establish a connection to the configured directory server, using the - configured system administrator username and password. [Current]
  • -
  • Configure and establish a connection pool of connections to the - directory server. [Requested]
  • -
- -

The following processing must be performed when the stop() - method is called:

-
    -
  • Close any opened connections to the directory server.
  • -
- - -

Method authenticate() Functionality

- -

When authenticate() is called, the following processing - is required:

-
    -
  • Acquire the one and only connection [Current] or acquire a connection - from the connection pool [Requested].
  • -
  • Authenticate the user by retrieving the user's Distinguished Name, - based on the specified username and password.
  • -
  • If the user was not authenticated, release the allocated connection - and return null.
  • -
  • Acquire a List of the security roles assigned to the - authenticated user.
  • -
  • Construct a new instance of class - org.apache.catalina.realm.GenericPrincipal, passing as - constructor arguments: this realm instance, the authenticated - username, and a List of the security roles associated - with this user.
  • -
  • WARNING - Do not attempt to cache and reuse previous - GenericPrincipal objects for a particular user, because - the information in the directory server might have changed since the - last time this user was authenticated.
  • -
  • Return the newly constructed GenericPrincipal.
  • -
- - -

Method hasRole() Functionality

- -

When hasRole() is called, the following processing - is required:

-
    -
  • The principal that is passed as an argument SHOULD - be one that we returned (instanceof class - org.apache.catalina.realm.GenericPrincipal, with a - realm property that is equal to our instance.
  • -
  • If the passed principal meets these criteria, check - the specified role against the list returned by - getRoles(), and return true if the - specified role is included; otherwise, return false.
  • -
  • If the passed principal does not meet these criteria, - return false.
  • -
- -
- - -
Username Login Mode Functionality
- -

Configurable Properties

- -

The implementation shall support the following properties - that can be configured with JavaBeans property setters:

-
    -
  • connectionURL - URL of the directory server we will - be contacting.
  • -
  • contextFactory - Fully qualified class name of the JNDI - context factory used to retrieve our InitialContext. - [com.sun.jndi.ldap.LdapCtxFactory]
  • -
  • Additional configuration properties required to establish the - appropriate connection. [Requested]
  • -
  • Connection pool configuration properties. [Requested]
  • -
  • Configuration properties defining if and how a user might be looked - up before binding to the directory server. The following approaches - should be supported: -
      -
    • No previous lookup is required - username specified by the user - is the same as that used to authenticate to the directory - server.
    • -
    • Substitute the specified username into a string.
    • -
    • Search the directory server based on configured criteria to - retrieve the distinguished name of the user, then attempt to - bind with that distinguished name.
    • -
  • -
  • Configuration properties defining how the roles associated with a - particular authenticated user can be retrieved. The following - approaches should be supported: -
      -
    • Retrieve a specified attribute (possibly multi-valued) - from an LDAP search expression, - with a replacement placeholder for the DN of the user. - [Current]
    • -
  • -
- -

Lifecycle Functionality

- -

The following processing must be performed when the start() - method is called:

-
    -
  • None required.
  • -
- -

The following processing must be performed when the stop() - method is called:

-
    -
  • None required.
  • -
- - -

Method authenticate() Functionality

- -

When authenticate() is called, the following processing - is required:

-
    -
  • Attempt to bind to the directory server, using the username and - password provided by the user.
  • -
  • If the user was not authenticated, release the allocated connection - and return null.
  • -
  • Acquire a List of the security roles assigned to the - authenticated user.
  • -
  • Construct a new instance of class - org.apache.catalina.realm.GenericPrincipal, passing as - constructor arguments: this realm instance, the authenticated - username, and a List of the security roles associated - with this user.
  • -
  • WARNING - Do not attempt to cache and reuse previous - GenericPrincipal objects for a particular user, because - the information in the directory server might have changed since the - last time this user was authenticated.
  • -
  • Return the newly constructed GenericPrincipal.
  • -
- - -

Method hasRole() Functionality

- -

When hasRole() is called, the following processing - is required:

-
    -
  • The principal that is passed as an argument SHOULD - be one that we returned (instanceof class - org.apache.catalina.realm.GenericPrincipal, with a - realm property that is equal to our instance.
  • -
  • If the passed principal meets these criteria, check - the specified role against the list returned by - getRoles(), and return true if the - specified role is included; otherwise, return false.
  • -
  • If the passed principal does not meet these criteria, - return false.
  • -
- -
- -
Testable Assertions
- -

In addition the the assertions implied by the functionality requirements - listed above, the following additional assertions shall be tested to - validate the behavior of JNDIRealm:

-
    -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/fs-memory-realm.html b/bundledApps/tomcat/webapps/docs/funcspecs/fs-memory-realm.html deleted file mode 100755 index f150e99c..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/fs-memory-realm.html +++ /dev/null @@ -1,220 +0,0 @@ -Catalina Functional Specifications (7.0.30) - MemoryRealm

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

MemoryRealm

Table of Contents
- -
Overview
- - -
Introduction
- -

The purpose of the MemoryRealm implementation is to - provide a mechanism by which Tomcat can acquire information needed - to authenticate web application users, and define their security roles, - from a simple text-based configuration file in XML format. This is - intended to simplify the initial installation and operation of Tomcat, - without the complexity of configuring a database or directory server - based Realm. It is not intended for production use.

- -

This specification reflects a combination of functionality that is - already present in the org.apache.catalina.realm.MemoryRealm - class, as well as requirements for enhancements that have been - discussed. Where appropriate, requirements statements are marked - [Current] and [Requested] to distinguish them.

- -

The current status of this functional specification is - PROPOSED. It has not yet been discussed and - agreed to on the TOMCAT-DEV mailing list.

- -
- - -
External Specifications
- -

The implementation of this functionality depends on the following - external specifications:

-
    -
  • None
  • -
- -
- - -
Implementation Requirements
- -

The implementation of this functionality shall conform to the - following requirements:

-
    -
  • Be realized in one or more implementation classes.
  • -
  • Implement the org.apache.catalina.Realm interface. - [Current]
  • -
  • Implement the org.apache.catalina.Lifecycle - interface. [Current]
  • -
  • Subclass the org.apache.catalina.realm.RealmBase - base class.
  • -
  • Live in the org.apache.catalina.realm package. - [Current]
  • -
  • Support a configurable debugging detail level. [Current]
  • -
  • Log debugging and operational messages (suitably internationalized) - via the getContainer().log() method. [Current]
  • -
- -
- - -
Dependencies
- - -
Environmental Dependencies
- -

The following environmental dependencies must be met in order for - MemoryRealm to operate correctly:

-
    -
  • The desire to utilize MemoryRealm must be registered in - $CATALINA_BASE/conf/server.xml, in a - <Realm> element that is nested inside a - corresponding <Engine>, <Host>, - or <Context> element. (This is already - included in the default server.xml file.)
  • -
- -
- - -
Container Dependencies
- -

Correct operation of MemoryRealm depends on the following - specific features of the surrounding container:

-
    -
  • Interactions with MemoryRealm will be initiated by - the appropriate Authenticator implementation, based - on the login method that is selected.
  • -
  • MemoryRealm must have an XML parser compatible with - the JAXP/1.1 APIs available to it. This is normally accomplished - by placing the corresponding JAR files in directory - $CATALINA_HOME/lib.
  • -
- -
- - -
Functionality
- - -
Overview of Operation
- -

The main purpose of MemoryRealm is to allow Catalina to - authenticate users, and look up the corresponding security roles, from - the information found in an XML-format configuration file. The format - of this file is described below. When a MemoryRealm - instance is started, it will read the contents of this XML file and create - an "in memory database" of all the valid users and their associated - security roles.

- -

Each time that Catalina needs to authenticate a user, it will call - the authenticate() method of this Realm implementation, - passing the username and password that were specified by the user. If - we find the user in the database (and match on the password), we accumulate - all of the security roles that are defined for this user, and create a - new GenericPrincipal object to be returned. If the user - is not authenticated, we return null instead. The - GenericUser object caches the set of security roles that - were owned by this user at the time of authentication, so that calls to - isUserInRole() can be answered without going back to the - database every time.

- -
- - -
Detailed Functional Requirements
- - -

Configurable Properties

- -

The implementation shall support the following properties - that can be configured with JavaBeans property setters:

-
    -
  • Configurable debugging detail level.
  • -
  • Configurable file pathname (absolute or relative to - $CATALINA_BASE of the XML file containing our - defined users. [conf/tomcat-users.xml].
  • -
- -

Lifecycle Functionality

- -

The following processing must be performed when the start() - method is called:

-
    -
  • Open and parse the specified XML file.
  • -
  • Create an in-memory database representation of the XML file - contents.
  • -
  • NOTE - There is no requirement to recognize - subsequent changes to the contents of the XML file.
  • -
- -

The following processing must be performed when the stop() - method is called:

-
    -
  • Release object references to the in-memory database representation.
  • -
- - -

Method authenticate() Functionality

- -

When authenticate() is called, the following processing - is required:

-
    -
  • Select the one and only "user" instance from the in-memory database, - based on matching the specified username. If there is no such - instance, return null.
  • -
  • Authenticate the user by comparing the (possibly encrypted) password - value that was received against the password presented by the user. - If there is no match, return null.
  • -
  • Construct a new instance of class - org.apache.catalina.realm.GenericPrincipal (if not - already using this as the internal database representation) that - contains the authenticated username and a List of the - security roles associated with this user.
  • -
  • Return the newly constructed GenericPrincipal.
  • -
- - -

Method hasRole() Functionality

- -

When hasRole() is called, the following processing - is required:

-
    -
  • The principal that is passed as an argument SHOULD - be one that we returned (instanceof class - org.apache.catalina.realm.GenericPrincipal, with a - realm property that is equal to our instance.
  • -
  • If the passed principal meets these criteria, check - the specified role against the list returned by - getRoles(), and return true if the - specified role is included; otherwise, return false.
  • -
  • If the passed principal does not meet these criteria, - return false.
  • -
- -
- -
Testable Assertions
- -

In addition the the assertions implied by the functionality requirements - listed above, the following additional assertions shall be tested to - validate the behavior of MemoryRealm:

-
    -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/index.html b/bundledApps/tomcat/webapps/docs/funcspecs/index.html deleted file mode 100755 index e74ccea2..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/index.html +++ /dev/null @@ -1,47 +0,0 @@ -Catalina Functional Specifications (7.0.30) - Table of Contents

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

Table of Contents

Catalina Functional Specifications
- -

This documentation area includes functional specifications for -many features supported by the Catalina servlet container -portion of Tomcat. In most cases, these features are not documented in the -underlying Servlet or JSP specifications, so a definition of the expected -correct behavior is important both to implementors of those features, and to -test writers trying to decide what to test.

- -

The functional specifications are divided into the following categories -in the menu (to the left):

-
    -
  • Administrative Apps - Overall requirements for supporting an - ability to configure and operate a Tomcat installation through tools, - as well as detailed requirements for the tools themselves.
  • -
  • Internal Servlets - Requirements for Catalina features that are - implemented as internal, container-managed, servlets.
  • -
  • Realm Implementations - Requirements for the implementations of - the org.apache.catalina.Realm interface (providing access to - collections of users, passwords and roles) that are included in the - standard Tomcat distribution.
  • -
- -

NOTE - In some cases, the contents of these functional specs has -been "reverse engineered" from existing implementations. This exercise is -still useful, because it provides an introduction to what -Catalina does, without being as concerned with how this is -accomplished.

- -

TODO - Obviously, this area has a long ways to go before -it is complete. Contributions are welcome!

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/funcspecs/mbean-names.html b/bundledApps/tomcat/webapps/docs/funcspecs/mbean-names.html deleted file mode 100755 index dbaff205..00000000 --- a/bundledApps/tomcat/webapps/docs/funcspecs/mbean-names.html +++ /dev/null @@ -1,723 +0,0 @@ -Catalina Functional Specifications (7.0.30) - Tomcat MBean Names

-      Catalina Functional Specifications
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

Administrative Apps

Internal Servlets

Realm Implementations

Tomcat MBean Names

Table of Contents
- -
Background
- -

We will be using JMX MBeans as the technology for - implementing manageability of Tomcat.

- -

One of the key concepts of JMX (and JSR-77) is that each management - bean has a unique name in the MBeanServer's registry, and that - management applications can utilize these names to retrieve the MBean - of interest to them for a particular management operation. - This document proposes a naming convention for MBeans that allows easy - calculation of the name for a particular MBean. For background - information on JMX MBean names, see the Java Management Extensions - Instrumentation and Agent Specification, version 1.0, section 6. - In particular, we will be discussing the String Representation of - ObjectName instances.

- -
Catalina Object Hierarchy
- -

Tomcat's servlet container implementation, called Catalina, can be -represented as a hierarchy of objects that contain references to each other. -The object hierarchy can be represented as a tree, or (isomorphically) based -on the nesting of configuration elements in the conf/server.xml -file that is traditionally used to configure Tomcat stand-alone.

- -

The valid component nestings for Catalina are depicted in the following -table, with columns that contain the following values:

-
    -
  • Pattern - Nesting pattern of XML elements (in the - conf/server.xml file) used to configure this component.
  • -
  • Cardinality - Minimum and maximum number of occurrences of - this element at this nesting position, which also corresponds to the - minimum and maximum number of Catalina components.
  • -
  • Identifier - Name of the JavaBeans property of this component - that represents the unique identifier (within the nested hierarchy), - if any.
  • -
  • MBean ObjectName - The portion of the MBean object name that - appears after the domain name. For now, it should be - assumed that all of these MBeans appear in the default JMX domain.
  • -
- -

In the MBean ObjectName descriptions, several types of symbolic -expressions are utilized to define variable text that is replaced by -corresponding values:

-
    -
  • ${GROUP} - One of the standard MBean names of the specified - "group" category. For example, the expression ${REALM} - represents the values like JDBCRealm and JAASRealm - that identify the various MBeans for possible Realm components.
  • -
  • ${name} - Replaced by the value of property name - from the current component.
  • -
  • ${parent.name} - Replaced by the value of property - name from a parent of the current component, with the - parent's type identified by parent.
  • -
  • ${###} - An arbitrary numeric identifier that preserves - order but has no other particular meaning. In general, the server will - assign numeric values to existing instances with large gaps into which - new items can be configured if desired.
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PatternCardinalityIdentifierMBean ObjectName
Server1..1(none)type=${SERVER}
Server / Listener0..n(none)type=${LISTENER}, sequence=${###}
Server / Service1..nnametype=${SERVICE}, name=${name}
Server / Service / Connector1..naddress, porttype=${CONNECTOR}, service=${service}, port=${port}, - address=${address}
Server / Service / Connector / Factory0..1(none)(Only defined explicitly for an SSL connector, but can be treated - as part of the connector component)
Server / Service / Connector / Listener0..n(none)type=${LISTENER}, sequence=${###}, service=${service}, - port=${connector.port}, address=${connector.address}
Server / Service / Engine1..1(none)type=${ENGINE}, service=${service.name}
Server / Service / Engine / Host1..nnametype=${HOST}, host=${name}, - service=${service.name}
Server / Service / Engine / Host / Context1..npathtype=${CONTEXT}, context=${name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / InstanceListener0..n(none)type=${INSTANCE-LISTENER}, sequence=${###}, - context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / Listener0..n(none)type=${LISTENER}, sequence=${###}, context=${context.name}, - host=${host.name}, service=${service.name}
Server / Service / Engine / Host / Context / Loader0..1(none)type=${LOADER}, context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / Manager0..1(none)type=${MANAGER}, context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / Realm0..1(none)type=${REALM}, context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / Resources0..1(none)type=${RESOURCES}, context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / Valve0..n(none)type=${VALVE}, sequence=${###}, context=${context.name}, - host=${host.name}, service=${service.name}
Server / Service / Engine / Host / Context / Wrapper0..n(none)j2eeType=Servlet,name=${name}, - WebModule=//${host.name}/${context.name}, - J2EEApplication=${context.J2EEApplication}, - J2EEServer=${context.J2EEServer}
Server / Service / Engine / Host / Context / WrapperLifecycle0..n(none)type=${WRAPPER-LIFECYCLE}, sequence=${###}, - context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Context / WrapperListener0..n(none)type=${WRAPPER-LISTENER}, sequence=${###}, - context=${context.name}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Listener0..n(none)type=${LISTENER}, sequence=${###}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Realm0..1(none)type=${REALM}, host=${host.name}, - service=${service.name}
Server / Service / Engine / Host / Valve0..n(none)type=${VALVE}, sequence=${###}, - host=${host.name}, service=${service.name}
Server / Service / Engine / Listener0..n(none)type=${LISTENER}, sequence=${###} - (FIXME - disambiguate from Server / Service / - Listener)
Server / Service / Engine / Realm0..1(none)type=${REALM}, service=${service.name}
Server / Service / Engine / Valve0..n(none)type=${VALVE}, sequence=${###}, - service=${service.name}
Server / Service / Listener0..n(none)type=${LISTENER}, sequence=${###} - (FIXME - disambiguate from Server / Service / - Engine / Listener)
- -
MBean Groups and Names
- -

The following MBean names shall be defined in the resource file -/org/apache/catalina/mbeans/mbeans-descriptors.xml (and -therefore available for use within the Administration/Configuration -web application for Tomcat):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MBean NameGroup NameCatalina InterfaceImplementation Class
AccessLogValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.AccessLogValve
BasicAuthenticatorVALVEorg.apache.catalina.Valveorg.apache.catalina.authenticator.BasicAuthenticator
CertificatesValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.CertificatesValve
ContextConfigLISTENERorg.apache.catalina.LifecycleListenerorg.apache.catalina.startup.ContextConfig
ContextEnvironmentRESOURCESorg.apache.catalina.deploy.ContextEnvironmentorg.apache.catalina.deploy.ContextEnvironment
ContextResourceRESOURCESorg.apache.catalina.deploy.ContextResourceorg.apache.catalina.deploy.ContextResource
ContextResourceLinkRESOURCESorg.apache.catalina.deploy.ContextResourceLinkorg.apache.catalina.deploy.ContextResourceLink
CoyoteConnectorCONNECTORorg.apache.catalina.Connectororg.apache.coyote.tomcat4.CoyoteConnector
DigestAuthenticatorVALVEorg.apache.catalina.Valveorg.apache.catalina.authenticator.DigestAuthenticator
EngineConfigLISTENERorg.apache.catalina.LifecycleListenerorg.apache.catalina.startup.EngineConfig
ErrorReportValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.ErrorReportValve
ErrorDispatcherValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.ErrorDispatcherValve
FormAuthenticatorVALVEorg.apache.catalina.Valveorg.apache.catalina.authenticator.FormAuthenticator
GroupGROUPorg.apache.catalina.Grouporg.apache.catalina.Group
HostConfigLISTENERorg.apache.catalina.LifecycleListenerorg.apache.catalina.startup.HostConfig
HttpConnector10CONNECTORorg.apache.catalina.Connectororg.apache.catalina.connector.http10.HttpConnector
HttpConnector11CONNECTORorg.apache.catalina.Connectororg.apache.catalina.connector.http.HttpConnector
JAASRealmREALMorg.apache.catalina.Realmorg.apache.catalina.realm.JAASRealm
JDBCRealmREALMorg.apache.catalina.Realmorg.apache.catalina.realm.JDBCRealm
JDBCUserDatabaseUSERDATABASEorg.apache.catalina.users.JDBCUserDatabaseorg.apache.catalina.users.JDBCUserDatabase
JNDIRealmREALMorg.apache.catalina.Realmorg.apache.catalina.realm.JNDIRealm
MBeanFactoryorg.apache.catalina.mbeans.MBeanFactory
MemoryRealmREALMorg.apache.catalina.Realmorg.apache.catalina.realm.MemoryRealm
MemoryUserDatabaseUSERDATABASEorg.apache.catalina.users.MemoryUserDatabaseorg.apache.catalina.users.MemoryUserDatabase
NamingContextListenerLISTENERorg.apache.catalina.LifecycleListenerorg.apache.catalina.core.NamingContextListener
NamingResourcesRESOURCESorg.apache.catalina.deploy.NamingResourcesorg.apache.catalina.deploy.NamingResources
NonLoginAuthenticatorVALVEorg.apache.catalina.Valveorg.apache.catalina.authenticator.NonLoginAuthenticator
PersistentManagerMANAGERorg.apache.catalina.Managerorg.apache.catalina.session.PersistentManager
RemoteAddrValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.RemoteAddrValve
RemoteHostValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.RemoteHostValve
RequestDumperValveVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.RequestDumperValve
RoleROLEorg.apache.catalina.Roleorg.apache.catalina.Role
SingleSignOnVALVEorg.apache.catalina.Valveorg.apache.catalina.valves.SingleSignOn
SSLAuthenticatorVALVEorg.apache.catalina.Valveorg.apache.catalina.authenticator.SSLAuthenticator
StandardContextCONTEXTorg.apache.catalina.Contextorg.apache.catalina.core.StandardContext
StandardContextValveVALVEorg.apache.catalina.Valveorg.apache.catalina.core.StandardContextValve
StandardEngineENGINEorg.apache.catalina.Engineorg.apache.catalina.core.StandardEngine
StandardEngineValveVALVEorg.apache.catalina.Valveorg.apache.catalina.core.StandardEngineValve
StandardHostHOSTorg.apache.catalina.Hostorg.apache.catalina.core.StandardHost
StandardHostValveVALVEorg.apache.catalina.Valveorg.apache.catalina.core.StandardHostValve
StandardManagerMANAGERorg.apache.catalina.Managerorg.apache.catalina.session.StandardManager
StandardServerSERVERorg.apache.catalina.Serverorg.apache.catalina.core.StandardServer
StandardServiceSERVICEorg.apache.catalina.Serviceorg.apache.catalina.core.StandardService
StandardWrapperWRAPPERorg.apache.catalina.Wrapperorg.apache.catalina.core.StandardWrapper
StandardWrapperValveVALVEorg.apache.catalina.Valveorg.apache.catalina.core.StandardWrapperValve
UserUSERorg.apache.catalina.Userorg.apache.catalina.User
UserDatabaseRealmREALMorg.apache.catalina.Realmorg.apache.catalina.realm.UserDatabaseRealm
WebappLoaderLOADERorg.apache.catalina.Loaderorg.apache.catalina.loader.WebappLoader
- -
JSR-77 Cross Reference
- -

The managed objects in the JSR-77 object hierarchy correspond -to the specified MBean names or groups as follows:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JSR-77 Managed ObjectMBean Name or GroupComments
J2EEServer${SERVICE}
Node${SERVICE}Tomcat supports a single node only.
Port${CONNECTOR}
Servlet${WRAPPER}
WebModule${CONTEXT}
- -
JSR-88 Cross Reference
- -

The deployment objects in the JSR-88 API object hierarchy correspond -to the specified MBean names or groups as follows:

- - - - - - - - - - - - - - - - - - - - - -
JSR-88 API ObjectMBean Name or GroupComments
DeployableObject${CONTEXT}Context deployment info plus the corresponding WAR file
Target${HOST}
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/html-manager-howto.html b/bundledApps/tomcat/webapps/docs/html-manager-howto.html deleted file mode 100755 index 6e7ef2d1..00000000 --- a/bundledApps/tomcat/webapps/docs/html-manager-howto.html +++ /dev/null @@ -1,544 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Tomcat Web Application Manager How To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Tomcat Web Application Manager How To

Table of Contents
- -
Introduction
- -

In many production environments it is very useful to have the capability -to manage your web applications without having to shut down and restart -Tomcat. This document is for the HTML web interface to the web application -manager.

- -

The interface is divided into six sections:

-
    -
  • Message - Displays success and failure messages.
  • -
  • Manager - General manager operations like list and - help.
  • -
  • Applications - List of web applications and - commands.
  • -
  • Deploy - Deploying web applications.
  • -
  • Diagnostics - Identifying potential problems.
  • -
  • Server Information - Information about the Tomcat - server.
  • -
- -
Message
- -

-Displays information about the success or failure of the last web application -manager command you performed. If it succeeded OK is displayed -and may be followed by a success message. If it failed FAIL -is displayed followed by an error message. Common failure messages are -documented below for each command. The complete list of failure messages for -each command can be found in the manager web -application documentation. -

- -
Manager
- -

The Manager section has three links:

-
    -
  • List Applications - Redisplay a list of web - applications.
  • -
  • HTML Manager Help - A link to this document.
  • -
  • Manager Help - A link to the comprehensive Manager - App HOW TO.
  • -
- -
Applications
- -

The Applications section lists information about all the installed web -applications and provides links for managing them. For each web application -the following is displayed:

-
    -
  • Path - The web application context path.
  • -
  • Display Name - The display name for the web application - if it has one configured in its "web.xml" file.
  • -
  • Running - Whether the web application is running and - available (true), or not running and unavailable (false).
  • -
  • Sessions - The number of active sessions for remote - users of this web application. The number of sessions is a link which - when submitted displays more details about session usage by the web - application in the Message box.
  • -
  • Commands - Lists all commands which can be performed on - the web application. Only those commands which can be performed will be - listed as a link which can be submitted. No commands can be performed on - the manager web application itself. The following commands can be - performed: -
      -
    • Start - Start a web application which had been - stopped.
    • -
    • Stop - Stop a web application which is currently - running and make it unavailable.
    • -
    • Reload - Reload the web application so that new - ".jar" files in /WEB-INF/lib/ or new classes in - /WEB-INF/classes/ can be used.
    • -
    • Undeploy - Stop and then remove this web - application from the server.
    • -
    -
  • -
- -
Start
- -

Signal a stopped application to restart, and make itself available again. -Stopping and starting is useful, for example, if the database required by -your application becomes temporarily unavailable. It is usually better to -stop the web application that relies on this database rather than letting -users continuously encounter database exceptions.

- -

If this command succeeds, you will see a Message like this:

-
-OK - Started application at context path /examples
-
- -

Otherwise, the Message will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to start the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character, unless you are - referencing the ROOT web application -- in which case the context path - must be a zero-length string.

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
- -
- -
Stop
- -

Signal an existing application to make itself unavailable, but leave it -deployed. Any request that comes in while an application is -stopped will see an HTTP error 404, and this application will show as -"stopped" on a list applications command.

- -

If this command succeeds, you will see a Message like this:

-
-OK - Stopped application at context path /examples
-
- -

Otherwise, the Message will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to stop the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character, unless you are - referencing the ROOT web application -- in which case the context path - must be a zero-length string.

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
- -
- -
Reload
- -

Signal an existing application to shut itself down and reload. This can -be useful when the web application context is not reloadable and you have -updated classes or property files in the /WEB-INF/classes -directory or when you have added or updated jar files in the -/WEB-INF/lib directory. -

-

NOTE: The /WEB-INF/web.xml -web application configuration file is not checked on a reload; -the previous web.xml configuration is used. -If you have made changes to your web.xml file you must stop -then start the web application. -

- -

If this command succeeds, you will see a Message like this:

-
-OK - Reloaded application at context path /examples
-
- -

Otherwise, the Message will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to restart the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character, unless you are - referencing the ROOT web application -- in which case the context path - must be a zero-length string.

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
  • Reload not supported on WAR deployed at path /foo -
    - Currently, application reloading (to pick up changes to the classes or - web.xml file) is not supported when a web application is - installed directly from a WAR file, which happens when the host is - configured to not unpack WAR files. As it only works when the web - application is installed from an unpacked directory, if you are using - a WAR file, you should undeploy and then deploy - the application again to pick up your changes. -
  • -
- -
- -
Undeploy
- -

WARNING - This command will delete the -contents of the web application directory and/or ".war" file if it exists within -the appBase directory (typically "webapps") for this virtual host -. The web application temporary work directory is also deleted. If -you simply want to take an application out of service, you should use the -/stop command instead.

- -

Signal an existing application to gracefully shut itself down, and then -remove it from Tomcat (which also makes this context path available for -reuse later). This command is the logical opposite of the -/deploy Ant command, and the related deploy features available -in the HTML manager.

- -

If this command succeeds, you will see a Message like this:

-
-OK - Undeployed application at context path /examples
-
- -

Otherwise, the Message will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to undeploy the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character, unless you are - referencing the ROOT web application -- in which case the context path - must be a zero-length string.

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
- -
- -
Deploy
- -

Web applications can be deployed using files or directories located -on the Tomcat server or you can upload a web application archive (WAR) -file to the server.

- -

To install an application, fill in the appropriate fields for the type -of install you want to do and then submit it using the Install -button.

- -
Deploy directory or WAR file located on server
- -

Deploy and start a new web application, attached to the specified Context -Path: (which must not be in use by any other web application). -This command is the logical opposite of the Undeploy command.

- -

There are a number of different ways the deploy command can be used.

- -

Deploy a Directory or WAR by URL

- -

Install a web application directory or ".war" file located on the Tomcat -server. If no Context Path is specified, the directory name or the -war file name without the ".war" extension is used as the path. The -WAR or Directory URL specifies a URL (including the file: -scheme) for either a directory or a web application archive (WAR) file. The -supported syntax for a URL referring to a WAR file is described on the Javadocs -page for the java.net.JarURLConnection class. Use only URLs that -refer to the entire WAR file.

- -

In this example the web application located in the directory -C:\path\to\foo on the Tomcat server (running on Windows) -is deployed as the web application context named /footoo.

-
-Context Path: /footoo
-WAR or Directory URL: file:C:/path/to/foo
-
- - -

In this example the ".war" file /path/to/bar.war on the -Tomcat server (running on Unix) is deployed as the web application -context named /bar. Notice that there is no path -parameter so the context path defaults to the name of the web application -archive file without the ".war" extension.

-
-WAR or Directory URL: jar:file:/path/to/bar.war!/
-
- - -

Deploy a Directory or War from the Host appBase

- -

Install a web application directory or ".war" file located in your Host -appBase directory. If no Context Path is specified the directory name -or the war file name without the ".war" extension is used as the path.

- -

In this example the web application located in a subdirectory named -foo in the Host appBase directory of the Tomcat server is -deployed as the web application context named /foo. Notice -that there is no path parameter so the context path defaults -to the name of the web application directory.

-
-WAR or Directory URL: foo
-
- - -

In this example the ".war" file bar.war located in your -Host appBase directory on the Tomcat server is deployed as the web -application context named /bartoo.

-
-Context Path: /bartoo
-WAR or Directory URL: bar.war
-
- - -

Deploy using a Context configuration ".xml" file

- -

If the Host deployXML flag is set to true, you can install a web -application using a Context configuration ".xml" file and an optional -".war" file or web application directory. The Context Path -is not used when installing a web application using a context ".xml" -configuration file.

- -

A Context configuration ".xml" file can contain valid XML for a -web application Context just as if it were configured in your -Tomcat server.xml configuration file. Here is an -example for Tomcat running on Windows:

-
-<Context path="/foobar" docBase="C:\path\to\application\foobar">
-</Context>
-
- - -

Use of the WAR or Directory URL is optional. When used -to select a web application ".war" file or directory it overrides any -docBase configured in the context configuration ".xml" file.

- -

Here is an example of installing an application using a Context -configuration ".xml" file for Tomcat running on Windows.

-
-XML Configuration file URL: file:C:/path/to/context.xml
-
- - -

Here is an example of installing an application using a Context -configuration ".xml" file and a web application ".war" file located -on the server (Tomcat running on Unix).

-
-XML Configuration file URL: file:/path/to/context.xml
-WAR or Directory URL: jar:file:/path/to/bar.war!/
-
- - -
- -
Upload a WAR file to install
- -

Upload a WAR file from your local system and install it into the -appBase for your Host. The name of the WAR file without the ".war" -extension is used as the context path name.

- -

Use the Browse button to select a WAR file to upload to the -server from your local desktop system.

- -

The .WAR file may include Tomcat specific deployment configuration, by -including a Context configuration XML file in -/META-INF/context.xml.

- -

Upload of a WAR file could fail for the following reasons:

-
    -
  • File uploaded must be a .war -
    -

    The upload install will only accept files which have the filename - extension of ".war".

    -
  • -
  • War file already exists on server -
    -

    If a war file of the same name already exists in your Host's - appBase the upload will fail. Either undeploy the existing war file - from your Host's appBase or upload the new war file using a different - name.

    -
  • -
  • File upload failed, no file -
    -

    The file upload failed, no file was received by the server.

    -
  • -
  • Install Upload Failed, Exception: -
    -

    The war file upload or install failed with a Java Exception. - The exception message will be listed.

    -
  • -
- -
- -
Deployment Notes
- -

If the Host is configured with unpackWARs=true and you install a war -file, the war will be unpacked into a directory in your Host appBase -directory.

- -

If the application war or directory is deployed in your Host appBase -directory and either the Host is configured with autoDeploy=true the Context -path must match the directory name or war file name without the ".war" -extension.

- -

For security when untrusted users can manage web applications, the -Host deployXML flag can be set to false. This prevents untrusted users -from installing web applications using a configuration XML file and -also prevents them from installing application directories or ".war" -files located outside of their Host appBase.

- -
- -
Deploy Message
- -

If deployment and startup is successful, you will receive a Message -like this:

-
-OK - Deployed application at context path /foo
-
- -

Otherwise, the Message will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Application already exists at path /foo -
    -

    The context paths for all currently running web applications must be - unique. Therefore, you must either undeploy the existing web - application using this context path, or choose a different context path - for the new one.

    -
  • -
  • Document base does not exist or is not a readable directory -
    -

    The URL specified by the WAR or Directory URL: field must - identify a directory on this server that contains the "unpacked" version - of a web application, or the absolute URL of a web application archive - (WAR) file that contains this application. Correct the value entered for - the WAR or Directory URL: field.

    -
  • -
  • Encountered exception -
    -

    An exception was encountered trying to start the new web application. - Check the Tomcat logs for the details, but likely explanations include - problems parsing your /WEB-INF/web.xml file, or missing - classes encountered when initializing application event listeners and - filters.

    -
  • -
  • Invalid application URL was specified -
    -

    The URL for the WAR or Directory URL: field that you specified - was not valid. Such URLs must start with file:, and URLs - for a WAR file must end in ".war".

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character, unless you are - referencing the ROOT web application -- in which case the context path - must be a "/" string.

    -
  • -
  • Context path must match the directory or WAR file name: -
    - If the application war or directory is deployed in your Host appBase - directory and either the Host is configured with autoDeploy=true the Context - path must match the directory name or war file name without the ".war" - extension. -
  • -
  • Only web applications in the Host web application directory can - be deployed -
    - If the Host deployXML flag is set to false this error will happen - if an attempt is made to install a web application directory or - ".war" file outside of the Host appBase directory. -
  • -
- -
-
Diagnostics
- -
Finding memory leaks
- -

The find leaks diagnostic triggers a full garbage collection. It -should be used with extreme caution on production systems.

- -

The find leaks diagnostic attempts to identify web applications that have -caused memory leaks when they were stopped, reloaded or undeployed. Results -should always be confirmed -with a profiler. The diagnostic uses additional functionality provided by the -StandardHost implementation. It will not work if a custom host is used that -does not extend StandardHost.

- -

This diagnostic will list context paths for the web applications that were -stopped, reloaded or undeployed, but which classes from the previous runs -are still present in memory, thus being a memory leak. If an application -has been reloaded several times, it may be listed several times.

- -

Explicitly triggering a full garbage collection from Java code is documented -to be unreliable. Furthermore, depending on the JVM used, there are options to -disable explicit GC triggering, like -XX:+DisableExplicitGC. -If you want to make sure, that the diagnostics were successfully running a full GC, -you will need to check using tools like GC logging, JConsole or similar.

- -
-
Server Information
- -

This section displays information about Tomcat, the operating system of -the server Tomcat is hosted on, and the Java Virtual Machine Tomcat is -running in.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/images/add.gif b/bundledApps/tomcat/webapps/docs/images/add.gif deleted file mode 100755 index 0774d074..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/add.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/asf-logo.gif b/bundledApps/tomcat/webapps/docs/images/asf-logo.gif deleted file mode 100755 index 22eb9d73..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/asf-logo.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/code.gif b/bundledApps/tomcat/webapps/docs/images/code.gif deleted file mode 100755 index d27307b5..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/code.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/design.gif b/bundledApps/tomcat/webapps/docs/images/design.gif deleted file mode 100755 index f5db0a9f..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/design.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/docs.gif b/bundledApps/tomcat/webapps/docs/images/docs.gif deleted file mode 100755 index d64a4a18..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/docs.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/fix.gif b/bundledApps/tomcat/webapps/docs/images/fix.gif deleted file mode 100755 index d59ad642..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/fix.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/printer.gif b/bundledApps/tomcat/webapps/docs/images/printer.gif deleted file mode 100755 index 5021187b..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/printer.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/tomcat.gif b/bundledApps/tomcat/webapps/docs/images/tomcat.gif deleted file mode 100755 index f2aa6f86..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/tomcat.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/tomcat.svg b/bundledApps/tomcat/webapps/docs/images/tomcat.svg deleted file mode 100755 index 36368502..00000000 --- a/bundledApps/tomcat/webapps/docs/images/tomcat.svg +++ /dev/null @@ -1,967 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - 2006-05-09T08:17:21Z - 2006-05-09T08:37:38Z - Illustrator - - - - JPEG - 256 - 184 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAuAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXhH/OYHnWfQ/wAurfRLSUxXXmK49GQqaN9VtwJJqH3cxqfYnFXhP5Y/ -85O+f/JU0enaw769okbBJLS8ZvrUKg0IhnarDj/I9R2HHFX2F+Xn5neT/P8ApP6R8u3glKAfW7KS -iXNuzdFljqaezCqnsTirK8VdirsVdirsVdirsVdirC/zM/Nvyd+XemC71255Xcqk2WmQUa5nI2+F -CRxUd3ag+nbFXx1+Zf8Azkn+YvneaW1tLh9C0NgwXTrB2V3Sm/rzji8m3UDitP2cVfV//OOfmabz -D+T3l+6uHMl1aRPYTsxqSbVzEhJ7kxKhxV6VirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVfHn/ADlxdSa7+bvlvyvGx4RW0EVARtNfXJVqf7BY+uRlKgT3JAt5r/zkD5ZGgfmfqSRR+nZ6 -gsd9agdOMq0f/ksj5h9nZvEwgnmNi2Z4cMiw/wAqebPMHlTXLfW9BvHstQtjVZEPwstQWjkXo6NT -4lOxzOan3v8Akl+cel/mX5a+tAJa69ZcU1fTlJojGvGWLluYpKbV6GqmtKlV6NirsVdirsVdirsV -eWfnr+eGl/lroywwBLzzPfox02wJqqL0+sT03EanoOrnYdyFXwh5i8x655j1i41jW7yS+1K6blNc -SmpPgABQKo6BVFB2xVnf5Q+SjrWh+d9Yli5w6XolylsadbqSNnTj8kiYf7IZg6zUeHKERzlIfL8U -3YoWCe4Pff8AnCfVTN5D1zTCamz1P11HcLcQIAPlWE5nNL6KxV2KuxV2KuxV2KuxV2KuxV2KuxV2 -KuxV2KuxV2KuxV2KvjD8wm/Sv/OX8UTGsdrqGnCMNUU+rW0Mp6f5ammY2sNYZ/1T9zZi+oe9m/8A -zkx+Xc/mPytFrunRepqehc3ljUVeS0cAyAU6mMqHA8OXfNB2PqhCfAeUvv8A2uZqcdix0fIedQ69 -m35OefrryN+YOla2kpjsjKttqqDo9nMwEoI78ftr/lKMVfaeqf8AOSH5KaaSs3meCZx0W1inuanf -YNDG69vHFWM3v/OYn5QW5YQ/pK8ArQwWqitPD1pIuvviqVT/APObH5cKR6GjaxIP2i8dqhB9qTvi -qmP+c2fIFd9C1Wnfa2/6q4qmFv8A85n/AJUSvxksdZtx/NJb25H/ACTuHOKp3bf85XfkpPBI7avN -BIisywS2lwGcqCeIZUdKmm1WGKvijzz5x1bzl5q1HzFqjlrm+lLrHWqxRDaOFP8AJjSij7+uKpNb -W1xdXMVtbRtNcTuscMKAszu54qqgbkkmgwE1uVfbHkL8uk8o/lTPoMiK+o3drPNqZHRrieIhlr4I -tEB9q5yWo1fi6gS/hBFfN2UMfDAjqwT/AJwdvyt/5usC20sVlOq77em0yMR2/wB2Cudc619ZYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXxZKTJ/zmFc+oedNTmA5b/ZtG49fCgpmH2h/ -cS9zbh+sPqDrsc4t2r57/Nf/AJxkGo3c+teSTFb3ExMlxo0hEcTMdybd/spU/sN8PgQNs3+i7Xoc -OX5/rcLLpusWIaF/zif56vFWTVr6y0pG6xgtczL81QLH90mZWTtnFH6bk1x0sjz2Z1pf/OIvlOIL -+lNbvrthSv1dYrZSe+zC4ND88wp9uTP0xA9+/wCptGkHUsms/wDnGf8AKS3AEunT3dOpmupxXam/ -pNFmPPtjOeRA+H67bBpoPDv+ch/yt03yXrdjeaFbG30HUouCQ8pJBFcQ0DqXkZ2+NSrCrfzeGbns -vWHNAiX1BxdRi4TtySH8jfJdn5u/MOy07UIfrGl28ct3fw1IDRxrxUEqQaGV0By7X6g4sRkOfRhh -hxSp9N3X/OO/5P3FSdBETGnxRXN0nT/JEvH8M50dq6gfxfYHOOnh3JDqP/OKn5a3NTazajYt+yIp -0dfpEsbn/hsvj21lHMRP497A6SPmwzW/+cQr9A76H5himO/CG9haL5AyxGT/AIhmXj7cifqiR7t/ -1NUtIehZh+S3/OP8Xk+5GveYXivNfTkLSKIloLYGqlwzBecjL3p8P45i9odqeIOCH09fNtw6fh3P -N7DfIz2VwijkzRuFA6klTmpxmpD3uRLk+bf+cJrrj+Yet2tT+90hpeP7J9O5hWp9/wB5tneunfZm -KuxV2KuxV2KuxV2KuxVZLNFDG0srrHGu7O5CqB7k4qks3nzyNC5jm8xaZHIOqPeW6nf2L4qmFhrW -j6iK6ff294KVrbypLt1r8BPjirAvzb/Pnyf+WrW9rqKS6hq90vqRaba8eaxVp6krMQEUkEL1JPbq -cVYFof8Azmp5BupVj1fR9Q0wNsZo/SuY1/1qGN6fJDir2Xyf+Yfkrzjam48taxb6iqgGSKNisyA9 -PUhcLKn+yXFWRYq7FXYq7FXxRrBNj/zl/NVwC+rL8XtcWw+Hf/jJTMXXC8M/6pbMP1h9SZxLtnYq -7FWG+afzg/LnyvdNZ6vrUSXqGj2sKvcSofB1hV+B/wBamZmHs/NkFxjt8mqWaMeZRPk78zvI/nF5 -ItA1RLm5hHKS1dXhmC1pyEcoRmXputRkdRosuLeQ2TDLGXJCfm/5JXzj5D1HSo05X8a/WtNPcXMI -JUD/AFxVP9lk+z9R4WUE8jsWOaHFGnl3/OI/lpodN1zzFMlGuJUsLcsKELCPUlpXsWkQfNc2Xbmb -eMPj+r9LRpI8y+hc0DmuxV2KuxV2Kvl//nClHP5oas4B4Lok6luwLXdqQPpoc9AdK+08VdirsVdi -rsVdiqXeYPMOi+XtIudY1q7jsdNtF5z3EpooHQAd2ZjsqjcnYYq+VfPf/OV3nXzNqp0D8stPlto5 -mMcF0IfrGoT+8UIDrGD8mbvVcVSqz/5xn/Pjzs66h5t1RbUueX+5W7kurgA/yxx+sq/6pZaeGKsj -h/5wanMYM3nNUk7qmml1/wCCN0n6sVQt7/zhDr8B56Z5stppEIMZntZLfcb1qkk9KHFXzr5mtdUs -tfv9O1S5a7vtOuJbKaZndwWt3MZ4mSjcartUDFUsxVFabqeo6XfQ3+m3UtlfW7c4Lq3dopUbxV1I -IxV9Sfkr/wA5aNcT2+gfmG6K8hWO18wqAi1OwF2q0Vf+Mi0H8w6tir6lVlZQykMrCqsNwQe4xVvF -XYq+Kfzzro3/ADlLa6oxKJLdaReFiaApGsMLeG1ISMqzw4sco94LKBogvqPOEdw7FXkf55/mBrlj -Jp3kbykX/wAVeYSFE0Zo8FuzFOSt+wzlW+P9lQx2NDm27N0sZXlyfRFxs+Qj0jmUd5B/IHyP5bsI -31Oyh1zWnAa6vb1BMnqHciKKSqKAehI5e+Q1XamTIfSeGPlzTj08YjfcsJ/PDy5pXkHX/LH5geW7 -WPTGhvlt9Rt7RBFHKpBk+wgCjnGkiPQbg5m9m5jnhLFM3s1Z4iBEg+hOu4zn3NQOkaLpuj20ltp8 -IghlnnunRe8tzK0sh/4JzQdhtlmXLKZuXdXyYxiByR2VsnYqxjV/zO/L3SJWh1DzDYQzoaPD66PI -p/ykQsw+kZlY9Dmnyifu+9qOWI6pvoOvaRr+kwato9yt3p1zz9C4UMob03MbbMFOzoR0ynLiljkY -yFEM4yBFhV1WVYdLvJWJCxwSOxHWioTjhFzA8wsuRfPn/OEVoX83eZLzekOnxQnpSsswb/mVneOn -fYOKuxV2KuxV2KqF9e2lhZT315KsFpaxtNcTuaKkcYLMzHwAFcVfFHnPzR50/wCchPzJi8veXlaH -y7aO5sYnqsUUCkK97dU/bYdB2qFXcklV9U/lj+UnlH8u9IWz0a2WS+dQL7VpVBuLhh1q37KV+yg2 -Huakqs1xV2KuxV8v/nf/AM4patrnmG+80eSp4Xn1GR7m/wBIuW9ImdyWd4JSOH7xjUq9KGvxb0Cr -5/1j8mPzX0iRkvfKepgL9qSC3e5jG9P7yASJ1PjiqRjyb5vMvpDQ9QMtePpi1m5culKca1xVPtG/ -JT82dYdUsvKepUf7MlxA1rGe395cekn44q+zf+cffKv5m+VvJ50bzvPbzRwFf0RFHK01xbxU+KCV -6cCqmnDizU3FaUAVeo4q7FXx5/zmxpD2vnTy7rcdUN5YPbh12POzmL1qO4FyuKsl/Lz/AJyc8ra2 -sNj5mUaHqZAU3TGtnI3Qnn1ir1o/wj+bOY1XY8474/UO7r+1z8epB2Oz2iKWKaJJYnWSKQBkkQhl -ZTuCCNiDmnIINFygVGXTNOmvYb6W1hkvbbkLe6eNWljDgq3ByOS1UkGhwjJIDhs0ei0LtE5FLxD/ -AJyycP5F0ezQcp59WjaNdt+NvMp/GQZuuxI/vJH+j+lxNWfSPe9rgiEMEcQNRGoQE9+IpmmlKyS5 -QCpgSsllihieWVxHFGpeR2NFVVFSST0AGEAk0EEvn2fVfOv5269e6foN9Jof5e6fIYbm9QMst2af -ZIBUtyG4QkKqkFqmgzfiGLRQBkOLKfx+C4ZMspobRZzof/OOv5U6VCiyaUdSnUUa4vZZJGb5opSL -7kzBydrZ5HY8PuDbHTQDP9G0XStE02HTNJtks9Pt+Xo20Qoi83LtQe7MTmBkyynLikbJboxAFBJv -zO1Aaf8Al35lu60ZNNuljP8AlvEyJ/wzDL9FDizQH9IfYxymol59/wA4P6S0eg+adXI+G6ura0Vv -e2jeRgP+kkZ2zqX01irsVdirsVdir50/5zJ/MGbSfK1j5PspOFxrrGa/KmhFpAwon/PWWn0KR3xV -mf8Azjd+WEPkj8vrae5iA17XES91KQijorrWG333HpI24/mLYq9YxV2KuxV2KuxV2KuxV2KuxV2K -obUdT03TbR7zUbuGytI/7y4uJFijX5u5VRir5U/5yz/MX8tfNfl7S7DQtZh1LW9NvS5W2V3iFvJG -yyUnC+kfjVPsscVSv8i/yi/LTzn5Ij1XVLSafU4J5rW9C3EkaFlIdCFQrT926980XaOuy4cnDGqI -vk5eDDGQsvdvKXkby35StXtdBgmtrZ6Vge6uZ4wf5ljmkkRCe5UCuaPPqp5Tc9/gHLhjEeSN8x3+ -o6foGoX2m2hv9QtoJJbWyFazSKpKxjjv8R22yOCEZTAkaBZTJAsPHv8AlcP53/8Altpv+BuP+ac3 -H8n6X/VPti4vjZP5rzz8wfPP5i+bfNvluw1Dyq1rqWjzG+g0ROZmuRVZDVGHPjxgbcDpXNhpdNiw -wkYy9Mutj8dWnJOUiAQ9D/5XD+d//ltpv+BuP+ac1/8AJ+l/1T7Yt3jZP5rv+Vw/nf8A+W2m/wCB -uP8AmnH+T9L/AKp9sV8bJ/NYp+ZX5v8A5qXnli40LVfKbaCutAWkdyxlWRwWXnHGrheRdfhI8DmV -pNBgE+KMuLh9zXkzTIoirR/kbzf+bvlHy1Y+XtO/LedobYENM6zK0kjtyeRzxoOTH6BtkNTp9Plm -ZyyfaEwnOIoRej+RPO35o6xr62fmPyf+hdNMTub71C1HWnFaV/azX6rS4IQuE+KXds348kyaIZ7q -jaqthKdKSCS/pSBbp3jhr4uY1kbbwA38Rmux8PF6r4fJuldbPlv8+YvzstdPS483apafoO7nEEVh -pcjJbl6NIA0bKkjgenWsnKhpnTdnHTH+7HqHfz+f6nAz8f8AFyfQ3/OLHl06N+TWkyOnCfVpJ9Rm -Hj6r+nEfphiQ5t3GeuYq7FXYq7FXYq+MfzQhXzz/AM5YWmgz1lsLe7sbB4zvW3gRbi5TvSrNLir7 -OxV2KuxV2KuxV2KuxV2KuxV5j59/5yM/K7yb6kFxqQ1TU0qP0dpvG4cMO0kgIij36hn5e2KvAvMv -/OWP5p+arl9P8laWukxtXiYIzfXvHpUuy+mg+UdR/NkJ5IwFyIA80xiSaDF/+VT/AJo+b7sah5w1 -h1kavx3sz3k617KgYoo9uYp4ZptR7QYIbRuZ8uXzP7XMx6GcuezJYf8AnH3yrBptwjXFxd6g8LrB -NIwSNJSpCOEQA7NvRmOak+0eQzGwjCxfU11/FOT/ACfEDnZYH+S+sfmZZeajoHlC8htrq6ZnubC/ -K/VnMAPLkrAtyUdfT+Kg8BnSa7HhMOLINg6/CZA1F9k6KdbOmw/pxbZdTp/pH1IyNAW8U9UK9Pnn -I5eDi9F8PnzdlG63R2VsmndUUu5CooJZiaAAdSTiBaHhP5N8/On5r+bPzEkBbT7dv0do7EGhWgUM -tRswgjUsP+LM3vaH7nBDCOZ5/j3/AHOJh9UzJ7vmicx2KvEf+clQLS78i63cEjT9O1cC6O3H4mjl -FR/qwPm77G3GSPUj9f63E1XQvbQQQCDUHoc0jlN4pSXzN5z8q+V7ZLjX9Tg0+OSvpLK37x+PXhGv -J3pXfiMuw6bJlNQFsJ5BHmXzJ+dn5haf+Z/mby75e8qtLPbLN6EbyI0YluruRI0oh+KigChIHU50 -/ZmilhieL6i4GoyiZ2fbWh6Ra6Noun6PaClpp1tFaW4/4rgQRr+C5s3HR2KuxV2KuxV2KvjfymCP -+c0p/rdK/pTU+POlKfUp/S/4144q+yMVdirsVdirsVdirsVeQfmX/wA5Ofl55MaaxtZv0/rcdVNl -ZMDEj+E1x8SL4ELyYdxir5W/Mf8A5yD/ADJ88GSC6vjpmjyVC6VYFoYmQ1FJXr6kte/I8fADFXme -Kvpj8jdTtb3yJBFFGkdxYyyW9zwVU5MDzRzTqSjipPU1zhvaDHKOosk8Mht5d/6/i7rQSBh5h6Fm -ic12Kvnvz6l35B/Nqz8z2CEQyzLqMSqeIY143UVf8upr7Pnedl5RqdLwS5gcJ/R9n2uj1MPDyWPe -+wdL1Ky1TTbXUrGQTWd5Ek9vKOjJIoZT9xznMkDCRieYc2JsWisgyYZ+b1p5vvfIGqWPlSFZ9Tu0 -9F1LiN/q77TelXYuV+EAkddt6A5vZ8sccoMzsPv6NOYSMdnzl+Wn5m/mVoKR+RtEtNLsrmGWSsOp -q1vM87t8Su8ssS+p0UKaGgAGdDqtHhyfvJ2fd3fBwseWUfSHq36V/wCcqf8AqzaN/wAGn/ZRms4N -B/OP2/qci83c79K/85U/9WbRv+DT/sox4NB/OP2/qW83c8o/Mj8z/wAy/MAm8i6zaaZfXU0sY9HT -Ea4lSdGqqxvFLKvqbFSBXqQc2el0eHH+8jY2693xcfJllL0l9KflXb+bbXyJpVp5riWLV7aIQsqu -JGMSbRGUio9ThQNQnx70znNccZyk4+R+9zsIkIi2W5iNqB1xdH/RF2+sxQy6XFE8t4tyiyRelGpZ -i6uCpAAyzFxcQ4D6ixlVb8nzj/zjB5UtfNn5xal5tisltNE0Rpbu1tEUCOOa6ZktYgBt+7j5tt3U -Z3UIkRAJt1BO77PySHYq7FXYq7FXYq+M/wAyX/wb/wA5b2WsP+7s7q90+7Zz8NILlEt7htqV3EmK -vszFXYq7FXYq7FWGfmR+bnkn8vrD6xr16PrkilrXS4KPdTdacY6jitRTmxC++Kvjz80/+clPPvnk -TWVq50Py45KfULRj6kqntcTjiz1H7K8V8QeuKsQ/KyLyvP5wtbTzFbC4trn91bc2IjW4JBj9QAjk -G+zQ7VIrmB2mcowE4jUh93Vv0wiZgS5Po7zD5J8ta/pa6bf2UfoQrxtWiAjeDbb0io+Hp06eIzht -N2jmwz4oyu+d7373dZNPCYoh8/effyj17yuZLu3B1DRgSRdRr8cS9f3yD7P+sPh+XTOz7P7Wxajb -6Z936u90+fSyx78wnP8Azj5r4s/M11o8jUi1OHlED/v63qwA+cbP92YvtDp+PCJjnA/Ydv1NugyV -Ou99C5xDuWDeefKvnzV9WiufL+v/AKKskt1jkt+Ui8pQ7sX+AEbqyj6M3XZ2t02LGRlhxyvnQO23 -e4eow5JSuJoe8sD81/lL+ZF9pj3Go65Hq7WKPLBbMZGc7VZY+S9WC9O+bnSdsaQTEYQ4OLyAHxou -Jl0mWrJuvel/5Q/8rK80ySeXdA85S6P9Qh9W2spZ51RouXx+kEDD4CwqPfbvmz1pw4xxzhxX5Bxc -XFLYGnv35Y+RfzR0DXri881+af03p0lq8MVp6s0nGZpI2WSkiqNkRh9OaLW6rBkgBjjwm+4D7nMx -Y5g7m3p2axyGGfmF+U3k/wA82pGq23paii8bfVIAFuEpWgLU+NN/st9FDvmZpddkwnbePc1ZMMZ+ -95R/iv8AMz8lbm20/wAzMPMvk2Z/Ssr5XpcIBvxXmSwKr/ut6r2Vxm28HDrAZQ9OTr+P0uNxzxbH -cNSeb/zJ/Om9uNM8pk+XPJ0Lelf6g7D13DD7L8DyJZf91oafzNTEYMOjAlP1ZOn7P1qZyymhsHrH -5d/lN5R8i2gXS7f1tRdaXGqTgNcPXqAeiJ/kr9NTvmq1euyZjvtHucjHhEPezPMJuePedvy3/OXV -fNF/qGg+c/0ZpM7KbWx9a4X0wI1VhxRSoqwJ2zc6fWaaMAJQuXuDizxZCbB2eNfm7F+Z3lQQaDr3 -nKXV21SJmm0+GedgIQwCmVXC7OwIUd6HNtopYcvrhDhrrQcbKJR2JeieSv8AnHD8+9H0SJtG83Q+ -XlvlS5udPinuonSR0Hwy+nHxLqPhO5zYtD2r8mvJH5m+V/0x/jjzN/iL659W/R/76eb0PS9X1f75 -Vpz5p08MVel4q7FXYq7FXYq+Xv8AnNjya81joXnG3Sv1Vm0y/YCp4SEy25PgquJB82GKva/yY87J -5z/LXRNbaTneNALfUfEXVv8Au5SR25leY9mGKs2xV2KrZJI4o2kkYJGgLO7EBVUCpJJ6AYq+aPzm -/wCctrTTWn0L8vmjvL1ax3GvOA9vEehFsh2lYH9tvg8A1cVeMfl95AvPzCvLrzP5l1SW6iNwUueT -tJdTyqqsQ7tXgvFgPGmwp1zS9rdrflqjEXMj4OZpdL4m5Oz3O18seXrXSP0PDp0C6ZSjWhjVkb3c -NXk3ud842etzSyeIZHi73bDDAR4a2eaeb/yBsLlmvPK9x9QuQeX1OYs0JPX4JN3j/EfLN9ovaIj0 -5hfmP0j9XycLNoBzh8noHku+1y50OKLXrV7XWLT9xeB6FZGUCkyOvwsHG549DUds03aOLHHJxYiD -jluPLy8v1OXp5SMakPUE9IBBBFQdiDmCDTe841/8pLaHW7bzL5U42OqWkyzvYfZt5+JqyrT+6LrV -f5fl1zoNL21xQOLPvGQri6j39/3+9wMujo8UOY6PSB06U9s54uewnzt5H8z69qsV5pXme60W3jgW -F7WAyhWcO7GQ+nLGKkMB07Zt9BrsGGBjkxiZvnt5d7iZ8M5m4ypj/wDyqbz9/wBT/f8A/BXP/ZRm -d/K+k/1CPyj+pp/K5f55+15z518keZ/y91G01W01SZ2nLiPVrYyW8qTMDzQurFgXQnfl8Qrm90Pa -GLVxIrl/CXCz4JYiHv8A+Qeia/NDH5tufO155k0u+s3gGm3Tzt9XufUjZuQkmlUPHwZdh0NQaHfV -9qTgP3YgIyB57bhv04PO7eyZp3KYZ+afm/zN5Z0KGby5okmtanezC1gVAXSF3UlXkRPjYbdqDxYd -83Q6eGWR45cIG7TmmYjYMC8p/kVrGu6ovmj81b1tV1Njyi0YODBEOoWQp8FB/vuP4fEtXM7P2nGE -eDAKHf8Aj7y1QwEm5orzX+Rd9pepP5n/ACuvm0HWlq0mlhqWc46lFBqqV/kYFP8AVyODtMSHBnHF -Hv8Ax9/NM8BBuGxZB+VP5j+ZPMs9/ovmbQJ9J13R1Q3s3ErbPzNEoGPJWehIA5KQKhu2Ua7RwxgT -hK4yZYcplsRuHo2a1yHh35u+SvN1nNrXnD/lYl/omiIFli0yB7gBSEVFiiC3EacpHGwAG5zd6HPi -lw4/DEpd+3z5OJmhIXLi2eW/lJ+UXnn829Svtdl1ue0XTjGo127MtzM9ytDHHG5dXrGg5E8vh+Hx -zo4QERQFBwSSeb2z/oXX86P/AC8Gq/8AI2+/7Kskh6L+UP5dedPJv6W/xN5wu/Nf1/6v9U+tvO/1 -f0fV9Th68s3956i1pT7OKvRcVdirsVdirsVY/wCf/J9l5x8nar5bvKLFqMDRpKRX05R8UUlP8iRV -b6MVfLf/ADiz50vvJX5han+XXmGtsmoztDHE/SLU4Dw4jt++Qca9yEpir7ExVK/MnmbQvLOjXGs6 -5eR2Om2q8pZ5TT5KoG7M3RVUVJ6Yq+M/zS/PHzr+bWrnyv5Vt5rPy67fDZoaS3CqaerduDRU/wAi -vEd+RplWbNDFEymaiGUIGRoc0Nc/846uugI1vqXPX1BaRGFLVtv7tTTmtP5z18BnOw9pInLRj+77 -+vv/AB9rsD2eeHY+pV/Io6rofmDWPK2rwSWlzJEl3FBIKCsbem5UjZuYddxUHjke34xy4YZYGwDW -3n/YuhJjMxL2rOSdq7FXYq7FXYq7FXYq7FUt8w6Bp2v6Pc6VqCc7a5XiSPtIw3V0J6Mp3GZGl1M8 -GQTjzH2+TXlxicaLxryB5w1r8nPPM+i63yl8v3rKbrgCVKE0ju4V8R0ZR13HUDO3ywx67CJw59P1 -H8ebpgZYZ0X1xZXlpfWkN5ZyrPa3CLLBNGQyOjiqspHUEZzE4mJo8w54N7q2RS7FXYq73xVTuLi3 -treS4uJFht4VMk00hCoiKKszMdgAOpwxiSaHNBNPlfzv5j8wfnh+Yll5O8qBhoVtKTFKwIQqvwzX -047IgNEB33p9p6Z13Z2iGGNn6zz/AFOtz5eM+T7B8j+TdG8m+V7Hy7o8fCzso+Jc/blkO8ksh7s7 -bn7htTNi0J9irsVdirsVdirsVdirsVfLP/OXf5WXENxb/mXoKNHNCY4tbMNVdWQhbe7BG9RtGx/1 -PfFWefl3/wA5I+VdQ/KqTzN5mu0ttV0YLbavarT1Z7gqfSaCPbl9YCkgdFIb9la4q+cvNPm3z/8A -nr5uCUNnolo1YLRSxtrOIkgSSdPUmYd+p7cV6Yms1mPTw4pn3DqW3FhlkNB695O8l6J5U00Wemx/ -vHAN1duB6szDux8B2XoM4LXdoZNTK5cug7vx3u7w4I4xQT/MFvUJbGzluYbqSFGubfl6ExA5oHFG -AbrQjqMsjmkImIPplzDEwBIPUNahew2Nhc3s54wWsTzSt4JGpZj9wxw4zOYiP4iB81nLhBPc8w/J -Tzn5v8y3mqHV7oXFlaIhjHpojLJKxIAZQtQFQ9a50XbujwYYRMI8MifsH4DgaLNOZNmwHq+cy7F2 -KuxV2KuxV2KuxVjXnzyLpnm/SDZ3P7m7hq9leAVaJyO/ijftL/EDNj2d2jLTTsbxPMfjq4+o04yD -zeb/AJZ/mj5g/KrXZPKnmyKSTQS9QFq5t+Z/v7c/txP1ZR8x8VQet1Gmx6vGMmM+r8bF1UJyxS4Z -PqrTNT0/VLCDUNOuI7qyuVDwXETBkZT3BGczkxygeGQohzgQRYRWRZOxVSurq2tLaW6upUgtoVLz -TSMEREUVLMxoABhjEyNDcoJp8v8A5n/mrr/5n65D5E8hQTTadcy+kxQcZL1lNeTV+xbpTl8VNvia -nTOp7O7OGL1S+v7v2uvz5+LYcn0j+SX5N6V+Wvlv6uCl1r96FfV9RUGjMKlYoq7iKOu38x+I+A2z -jPR8VdirsVdirsVdirsVdirsVSDz3rvlfQ/KWp6h5oaMaGsDx3kUgDCZJFK+iqEjm0leIXvir81d -SfTpdTupdPhkt9MedzawyMJJI4WYmNGeihmCbV74q+q/y8tfLEHlOyPlsV06VefqGnqvJ0czH/fl -RQ+HQbUzzrtWeY5z4v1D5V5eTv8ATCAgOFkma5yHYq7FWIfm3qBsfy81mRftSxLbge08ixN/wrHN -r2Jj4tVHys/Z+txdZKsZSD/nH3TRb+S5rwj4767kYH/IjVYwP+CDZm+0mQnNGPQR+/8AAauz4+gn -zenZzrnuxV2KuxV2KuxV2KuxVjnnbyLovm3Tfqt+np3MYJtL1APUiY+Feqn9pe/zocz9B2jk00rj -vHqPx1aM+njkG/N4/ovmf8xfyX1w2rr9b0W4fkbVyxtLgDq8T0Jikp12r4gimdkPA12PiHP7R7/x -7nUETwyovpX8vvzc8m+eLZf0ZdCDUgKzaVcEJcKR1KitJF/ykr70O2aHVaDJhO4uPf8Ajk5ePNGX -vTXzl578seTtMOoa9eLboa+hAPimmYfsxRjdj+A7kZVp9LPMaiP1Mp5BEbvmXzJ54/Mb87vMcflj -y1ZyQ6SzhksENFCKf96L2YbcV60+yDQAM1Cep0eghgF85d/6nX5cxn7n1H+S35IaB+Wmkkxlb3zD -eIo1LVGHyJhgrukQbfxbqewGe0vSsVdirsVdirsVdirsVdirsVQup6np+l6fc6jqNwlrY2kbTXNx -KeKJGgqzMfYYq+HfzQ/MTzL+dvnmHSNFR4PLtm7fo+2eoUIKh7y5pX42BoB+yPhG5JajU6mGGBnM -7BnjxmZoPQ4Pyv8AK8fk1vK5i5W8g5yXVAJjcU2nr/MO3am3TOGl2xmOfxfs6V3ft73dDSQ4OH7X -kehaz5g/KfzbLpWqK0+jXLB5VQfDJGaqlxDU7MKfEv0HsR0uowYu0MAlA+ocvI9x/HmHXY5ywTo8 -n0Fp2o2OpWMN9YzLcWlwoeGZDUEH/Pcds4jNhljkYyFSDuYTEhY5KzTQoaPIqnwJAOCOOR3AKmQH -VyzQueKyKx8AQTiccgLIKiQPV5t/zkDctD5FijHS5voYm37BJJP1x5vPZwf4Qf6h+8OH2h/dj3p3 -+UNt9X/LnRkoQXjklNRQ/vJnf9TbZjdtyvVT+H3Bs0Y/dBmOalynYq7FXYq7FXYq7FXYq7FUHq+j -6ZrFhLYanbJdWkwo8Tjb2II3Vh2I3GXYNRPFLigaLCeMSFF4R50/JTXdCnOq+VpJby1ib1FjjJF5 -ARuCvGhenYr8Xt3zstB25jzenJ6Z/Yf1fF1OfRShvHcJFJ5F/M7zRY3PmTUI7m8eKMFHvZHa6mRe -0SvV2CjcdK/s1OZsu0NNimMVgHy5D39zQMGSQ4qfTP8AziV518hXnlX/AA3p1lBpPmi0XnqUIr6l -6F2+sq7lnfr8SV+A9AFIzYtD6BxV2KuxV2KuxV2KuxV2KuxV2KvjX/nI7847/wA+eYk/L/ye7XGj -QTiO4kgNRfXSnswNDBEeh6Egt0CnIZMkYRMpGgExiSaDJvy88h2PlDRRbJxl1G4o9/dAfbcDZVPX -gn7P3988/wC0+0Zamd8oDkP0+93um04xx82vOP5meVvKoMV7OZ7+lVsLejy+3PcKg/1j8q4dF2Tm -1G4HDDvP6O9c2qhj25l47r/mfzt+ak6aXovlxrmO3f1I47SF7meOuxLzAURT32UZ1/Z/ZcNNdEkn -n3fJ1OfUnJzDFvNXl7z35Lu/8P8AmCG60uQoLhbNpaxMsg+2nps0TVpQkHqKHcZseEXdbtFsbySH -Yqu9ST0/T5H068uFTx5UpWnjir2HyZ+T/wCfGr+U9O1/yreSS6VdKzWkEOo+iQI5HRlMcjxoPjjI -pXKMmmxT+qMT7wGcckhyJCOudA/5yq0IfvtM1G4VDuscNvqFadqwidj07HMXJ2Tpp84D4bfc2x1W -QdUvl/Oj8y9CmEPmHQ0iPQpc209pKT1/aNP+FzCyezunly4o/H9bbHX5Bzop1pv/ADkboslBqWkX -FsfG3dJx8/j9HNfl9mZfwTB94r9bkR7RHUMv0r82/wAvtSoserx28ndLoNb0/wBlIFT7mzWZuxdT -D+HiHlv9nP7HIhrMcutMst7i3uIlmt5Umib7MkbBlPyIqM1s8coGpAg+bkxkDuFTIJdirsVdirsV -dirH/PXm608q+XZ9Umo8391ZwH/dk7A8V+Qpyb2GZ/Z2iOoyiP8AD19zRqMwxxvq+cfL9n+Yf19/ -Omi29ytzYytfnU41CgPyLOyhqCTqeSqDt1FM7+WoxYyIGQBOwDoxjlIE0+1/yK/O7S/zJ0IpP6dp -5nsVA1LT1OzrsPrEAO5jYncdVOx/ZJyGt6jirsVdirsVdirsVdirsVfO/wDzlT+dh8vaa/kfQJ6a -7qUf+5S4jPxWtrINoxTpJMD8wm/7SnFWA/k3+W48v6eNZ1OL/c1ep8EbDe3hbfhQ9Hbq3h08a8V2 -52n4svCgfRHn5n9Q/HR3Gi03COI8yl/5qfm5LYTt5d8sP6mqM3pXd3GOZiY7elFStZa9T+z0+10v -7I7G4gMmUbdI/pP6mGr1demPzZX+UH/OJcl6I/MP5lNKZJj6sehB2EjV35XkoPKp68FNfFuq51wF -OqfT2j6Jo+i2Een6RZQafYxf3dtbRrFGPfigAqe5xVj35mflh5Y/MLy++k61CBKgLWGoIB69tKf2 -o2PY0HJejD6CFXwV+Z35WeaPy715tL1qHlbyFmsNRjB9C4jBoGU/st/Mh3X5UJVYdirsVfb3/OHX -mKPUfyrfSS9Z9EvpovTrUiK4/wBIRvYM7yD6MVe7YqsmhhniaKaNZYnFHjcBlI8CDtirDde/JX8q -Ne5HUvK1g0j15zQRC1lJPcyW/pOT9OKvMfMn/OF/5eXwZ9D1K+0aY/ZRit3AP9g/CT/krirzTVv+ -cTvzh8tSPdeVNVh1EDoLS4exuWp4rIVj/wCSpyGTHGYqQBHmmMiNwxq58/fnT5ImW382aVMYgeIO -oWzRch0pHcRhUfp1+LNVn7C02TcDhPl+rk5UNbkj1tlGgf8AOQHlS94x6rBNpUx6uR68P/BIOf8A -wmaPUezmWO+MiX2H9X2uZj7QifqFPRNK1vR9Wg9fTL2G9iHVoHV6V7NQ7H2OaTPpsmI1OJi5sMkZ -cjaNyhm7FXYqlGq+VNC1fULe91S2F69opW2hn+OFCxqzekfhLGg3avTbMzDrsuKBhA8N8yOfz/U0 -zwRlKzumyqqqFUAKBQKNgAO2YhJJttp84edta0nyl+Y0Gu+Qr/0NQtH9W4WAfuI5wfiRSDxdJBUO -lOPUd6D0PsqWc4R4w36d5Hm6HUiAn6H2P+TH5xaN+ZXlwXcIW11u0ATVdM5VMbnpJHXcxP8Asnt0 -PTNk470PFXYq7FXYq7FXYqwf84fzP078uvJtxrU/GXUJawaTZMf765YbVA34IPic+G3UjFXyR+U/ -lPUvNnmK589+ZXa65XDzRPKB/pF2Wq0h7cIz0AFK7D7NM5/tztLwo+HA+uXPyH6z+OjnaLT8R4jy -DOPzf89t5Y8v+hZScdX1HlHbEdY0A/eS/MVovufbNJ2J2f4+TikPRD7T3fr/AGubrM/BGhzKf/8A -OK/5HQWtjb/mF5ltxLqV3+90K2mBPoxHpdMD1kk6x+C/F1O3dukfTGKuxV2KpL5v8neXfN+hz6J5 -gs0vLCffi2zxuPsyROPiR17EfqxV8N/nR/zj/wCZfy5umvYeep+VpXpb6mq/FFyPwx3Kj7Ddg32W -7UO2KvKcVeu/84z/AJoQeRvPwi1KX0tC11Vs7+RjRIpA1YJ29kZipJ6KxPbFX3sCCKjcHocVbxV2 -KuxV2Kqc9vBcQvBcRrNDIOMkUihlYHsVNQcVeX+cP+cZ/wAovM3OQ6QNIvH/AOPrSmFsQf8AjDRo -D/yLrirw/wA0f84fef8AQZ21DyRrKal6dTHEWNhejwVH5GJvmXT5ZGURIURYSCRyYf8A8rL/ADW8 -jXo03zjpUslK8Y7+JreVlXasU6rxdf8AKo3zzT6rsHBk3j6D5cvl+qnLx62cee7P/LX5zeSdbKxS -XJ0y7bb0byiKT/kygmP5VIPtnO6rsLPi3iOOPlz+X6rc/HrYS57FnSsrKGUhlIqCNwRmmIINFywW -8CWLebfLnmTzCG0+PVV0jRm2n+rK0lzOpG6s7FFjXtRa17nembXRavBp/VwmeTz2A93P5uLmxTnt -dRSjR/yO8g6cVea2l1GVTUPdyEiv+pH6aEfMHL83tBqJ/TUfcP12whocY57sS80+XfMH5YeaLfz3 -5JdorSKStxbAExxBz8UUigjlbydP8n58Tm97H7WGccE/7wf7L9vf8/dhavS8BsfT9z6x/Kf81NB/ -MbyzHq2nEQXsVI9U0xmDSW03genJHpVHpuPAggb1wmbYq7FXYq7FVK6ure0tprq5lWG2gRpZ5nIV -ERByZmJ2AAFTir4W89eZtV/PD81xHas8Xlyw5RWXb0bJGHqTsDt6s7U/4Vei1zE12rjp8Rmfh5lt -w4jOVB7Zp2n2enWMFjZxiG1tkWKGMdAqig655xmyyyTM5G5F6CEREUOTxPS9Gb81/wA/YNJlLNo1 -tMUuKbUsrEky0I6es9QD25jPQ+zNL4OCMevM+8/inQ6nJxzJfdcUUUUSRRIscUahY41AVVVRQAAb -AAZntC/FXYq7FXYqo3dnaXtrLaXkKXFrOpjnglUOjowoVZWqCD74q+T/AM7f+cTri0a48wfl7E09 -pvJdeX6lpY+5NqTu6/8AFZ+Ifs16BV8xyRyRSNHIpSRCVdGBDBgaEEHoRiqLv9b1nUEjS/v7m7SF -VjhWeV5QiIOKqocmgUbADFU/8k/mp588l38N1oOrzwxREcrCR2ktJFH7MkDHgRTaoow7EYq/Qb8v -POFv5y8laR5mt4/RXUoBI8NeXpyqxjlQNtULIjCuKsixV2KuxV2KuxVB6rpGlavZSWGq2cF/ZS7S -W1zGssbfNHBGKvD/AD5/zh75B1r1Lny1PL5cvmqREtbizY/8YnYOlT/K9B/LirxDWPy7/Pr8pmea -GKW90OI8nuLOt5ZcQakvERzhHixVfnmJqdDhzj1xvz6/Ntx5pw5FNvKv/OQWi3fCDzDbNp0/Q3UI -aWAmnUqKyJv2+L55zWr9nJDfEeLyPP58vudhi7QB2kKepWGo6fqNst1YXMd1bP8AZmhcOp+lSc57 -LhnjPDMGJ83YRmJCwbROVMlk0MU8LwzIJIZVKSRsKqysKEEHqCMlCZiQRsQggEUXiepWHmf8m/OM -PnDyiS+jSH07i3erxhHYFrafuY2oOD9QadwCe77J7UGojwy2yD7fN0mq0xxmx9L7C/Lr8wvL/n3y -zBr+iyExSfBc2z/3tvOAC8Ug8RXY9CNxm5cRk+KuxV2Kvm7/AJzA/NOTTNHg8haVKRf6ugn1ZkJ5 -JacqJDt3mdTyH8op0bFUg/KjyOvlfy2n1iMDVr8LNfsaVXb4Ia/8Vg7/AOVXOB7Z1/j5aH0R5fpL -vNJg4I2eZZRr1/8Ao/Q9Rv8A/lktZp/+RUZf+Ga7SwE8sInkZAfa35ZVEnyYp/zg/o0Ump+atccV -mghtbKJu/Gd3ll/GBM9PecfWeKuxV2KuxV2KuxV2KvOfPf5Aflj521UatrGmtHqRFJ7m0kMDTdKG -Xjs7CmzUr+GKsb/6FD/Jv/lmvv8ApLb+mKu/6FD/ACb/AOWa+/6S2/pir0/yZ5Q0byf5as/LmirI -mmWPqfV1lcyOPWleZ6sevxyHFU7xV2KuxV2KuxV2KuxV2KvMfzC/5x1/LLzr6lzcaf8AovVn3/Se -ncYJGbrWSOhikr3LLy9xir5080f846/nH+XVzJqnlK6k1nT1NTLpwYXHFenrWR58/kvMZTmwQyx4 -ZgSDKEzE2DSH8r/85ABZRZea7IwSoeD3lup+FgaH1YT8Qp34/wDA5zes9nBzwn4H9B/X83Y4u0Ok -w9b0nWdK1e0W80y7iu7ZukkTBgD4Hup9jvnM59PkxS4ZgxLsYZIyFg2q31jaX9pNZ3kKz2s6lJoX -FVZT2ORxZZY5CUTUgmURIUeTxy2svzN/KLzbcaj5Eil1DS9RRkNuIZLqMqDVUnij35Rk/A+3z3YZ -3Wg7YxZYXOQhMc7NfK/wHS59JKMthYZVB/zlL+eWlMZNc8owTWiEmRzaXlsaClaS83jp/sTmxx6r -FM1GUZe4guPLHIcwQ9C8jf8AOYH5ea7NFaa9bzeW7uUhRLMwns+RNADOgVl+bxhR3OXsHulvcW9z -BHcW0qTW8yh4Zo2Do6MKqysKggjoRir849U/MZtX/M6688azZnUTNdNcxWTSekFVPhtk5cZPhhVV -FKb0yjU4pZMZjE8JPVnjkIyBItnP/Qyn/fuf9Pv/AF4zm/8AQx/tn+x/487D+Uv6P2/sQWuf85A/ -pXRNQ0z9A+j9etprb1vrfLh60ZTlx9Fa05VpXLcHs74eSM+O+Eg/T3f5zGev4okcPPz/AGPU/wDn -B7UUbTvNmmkgPFNaXCjuRIsqH7vTH350zrn1DirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirBPzB/JP8uvPivJremKmpFaJqtofQul2oKuopJTsJFYYq+afOP8AzjN+afkK7fWP -JF7LrNjGeX+iVjvVUb0ktqlZh/qcq/yjK8uKGSPDIAjzZRkYmwl/lf8AP1opf0f5vsmgnjb05LyB -CCrA0PqwH4lI78f+BzmtZ7OA74T8D+g/r+bsMPaHSfzet6TrOlavZreaZdR3ds3SSJgwB8D3B9jv -nMZ9PkxS4ZgxLsoZIyFg2jMpZsJ87flR5Z8zxSTLCthqxBKX0Kgcm/4uQUEg9/te+bjQds5cBAke -KHcf0H8BxM+kjPlsWPfkJ+aPmL8t/PS+QfNEjHQbycWyo7FktbiZh6U8LH/dMpYcxsN+WxBr3OHN -HLATibiXSzgYmjzfWP8AyrzyB/1LOlf9INt/zRlrF3/KvPIH/Us6V/0g23/NGKu/5V55A/6lnSv+ -kG2/5oxVHaV5Z8uaRJJJpOlWenySgLK9rbxQMyg1AYxqtRiqZYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwT8xvyU/L/AM/xFtbsBHqQXjFq1pSG6XsKuARIB2EisB2x -V856t/ziZ+bHl/VpT5M1qO4sZhtcpcPYT0B2SVFJBp4hj8hleTFCYqQEh5i2UZGPI0of9C+f85Nf -9XeT/uLS/wDNWUfkNP8A6nD/AEo/Uz8ef84/N3/Qvn/OTX/V3k/7i0v/ADVj+Q0/+pw/0o/Uvjz/ -AJx+aX3n/OK/576ldpcalLBdTgKguLi/MzqoNQAzVagqTTMjHijAVECI8tmEpEmybf/Z - - - - - - - image/svg+xml - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eJzdffle8sqy6H0B3gFUFGQwEyEBB2YHUEFwwJlJRJlkWGuv88d59lvVSUgICWmQ75x1716/7aed -Tnd1dXXN1fF6iuVQsjmot0J8mHG7vN70qFWbDEYxN2l1n3e70/FkhE2+G7+bZcMMdEqeS29qx7vW -aNwZ9GPkEXmYw7d951e565vTrN/t80NbpTPptqB1Mug1apPw+K+2X5sLXs7UJvAwciAfMKKbZWJ8 -1J28hOepwbTf7PTbqcF/YPyo6OYZzi3AU0GKwuOzzk1rbO4TjrK8jB3DnAy/CLwYluBNQYInDL6V -GTSmvVZ/UhwNGq3xOD3oDkbjmDv9T63vvqy14UnNXW11u4O/3alurfHtgtVG3nKdbgsW1qtN3FFc -ZfKcfyOv3o7hHXgdf8fm6Nt5D1rKrckEoIKBESXpy2reOB9Aqv7ne7pptTsEw4CIF78ycqXVG3YB -KWRRPCCFl0XtX7UHwEOehqJsmJdlGfAmhiMy9BMlPiwwjAC/RMgj5Q193a2/Oq2/Y+6rQb+lLC45 -mpQ7/9XCqRg3xzBK68202xrd9jsTWASHTbKy4stBs9VVm8i7uW6NLJT8x+o/lQ6V2qjdmsBODbrT -CaEUSZvhator1P5pjfQJroetfmVwR+ALiUJYFMWIWxQY5Rc2HHFLouyOMoA6ScEgC8tUp2TJtKwy -No6E42gTRHHvi7Az16NOu9OPsYLoDnHYint2Ouo09S2Lcm5J+UHWEZYM/5e1/ysAw9onk1Zf2eZs -v5ke9BDJY6Re2Ng+7Hp30FaezX4nT2C66VCBlfz9BvtRHHX6CIPrijyR3ordKTw6HQ2mw/P+x8Dl -U05lEScd9a/78MunOzWajj/dlcGgC6dtroP6SBkFH44mxt5L54C+9uPrA601drrW7Xbao9rws9Ow -Gt7i+Wweu3eXTgjbNGrpY5A/Z/8ufbPcIKi0gnL+0WxwizeWz/BPrz7odsY9fWBDi/67E0XARnVb -/eZ4Nozypw5YofOX1rh8sEzrA1idYWtJa7b/V6s7GBrQOGup9Zvu+9poaDcsQvfR6TcBK+VpZ9LS -N3rQGyIDd5c/a0NsXuipnBA4PcbzEQotPzgrvyArT5ARTv7ptsaug3x/8Hef/OGOuXxPgJLatDt5 -8bsPrmq9ljvoOih3gEm3tC6M+9rFqDzwG367cWn8MO/SuCLjfvgH/riAX76g6W+34L50P70w7ia0 -Pty4kIE9NF0HxRoA54673AcwLfxLAIQV6eA5rrFY6wI7axEginWXnbhBkMauhdZiY/bGt+XTYmoG -gjbTKvgtwHBGpC6skHRYZyNZRnmkHBsc5v+ozTCQqdFmcBVWTV6CclJzed8OtL9hr/GvTgOxURv9 -o/z9cFm4ArlI/vBtN9W+QC3lCQzedvv+0+v2oUMIf/SBgvxAQt436+d/1bpTtYPsPjiHOeceT/4Z -qk8PkqNRzQqCXmtSawLgvweAXQ+Av2qjTq3eRT1o/G8A4n8dhv9JLMT1Po3PTrc5avXVPiayNXQE -mTXq1KcTBDRIHgUX1xIb15Dn4ZH4H95Y6iXNQ4zvOIPp2+2P3xpg5wx6cZvOBpi5/9lt0NawuB3k -QewvuuUBHY7/rYvDNQRpyHFNKoC1A7leEYQ44areIeYk++9DlXEVi8TQHTS+W03n9fXB6vv3rU2D -/k9SwQq84N98WCiRNL/28cff/2sScNztNP6/EH9kIeXBdNRoEa/Tv3JN8yD/4wjizFN2cNOqdf81 -pP6PpcBzXM3MAfjvWs1/rFbzd6c5+XRcEScyYVbk2H/ZilTgF1f12eq0P53VbVYSwgLL/9uWpUG/ -uK76YALqYaH1MVEciM4rdB+kBoN/z9IWF/AvEbYgm/4fl7WbEzgbAt7ggMAWRsVd8pxl3TM/BnFA -uwu1fntaa7fcxcFwOjSRLnmhOGqNW6O/Wu5K6z8Td7bZmdTqnW5norJoMRLhI7MJZHdtNKkPaqOm -u4HBAjfrHmmKnWPP9qilrdexb31GGRFO4CT7rpwOgGNPAwCOfesLQnyx2zzp4vPJqNYfD2uwr41/ -YLpO0z3u/Fdrtk0a2mX3sDZsjeBhb9olfjdNWjMax8RO19PJcDpx39TGk9ao81+ko1sPtajgRebe -uWyNPx3eYOb2X6Mldwd61SYtWHmL2EhLO3/3QaUfAHBtdAOrx/3pstXsTHuGCV8MJ9+KPNX4CqCC -kOHEbbB/TEdCIxfAvIr4qIb55rATNkFb63bGpqZebfytolnUMDasNXWzJHnuTk4ngxn2tP1nDAeM -cX/MQB6RfqG/Wo0JkEy91q31G4t7PfcKYKzb6bfcEzhrdD3Hk9HgWzv7rE3nRrczBJJE581/4Dy0 -AW0Obwy1Uz/4qzUaooN0xl4ANY3BqNlqLm6D++BqMJl7vCrvcRhOp5YDne8djJqjcVhx4JgV74Vu -tX5/MJmtXdnlhU4aHsbjeQ662HHabzh0AXkHJ6ZJdQSML/9nGNYlpdXo0GEwbE4dOoydRmgM5tmY -qQOSzvIOgz6QyEShw6VzqT112iasyaonMOJ5lsQzNj1H5p7RiHXHueNnufNDZd+X7zp0AjY038/A -lc1dP2vN1qi1fLwuiyezNlnaCXA3Ia6bpX16eGzHRkZu1a/fagPj/2v5YPUOnsF5CWYGvPVXq2s/ -yEd/Eh5P6+MlC8Muze5w9DGY8RcrKlO69UDbUbUDS3S3e9/hXm30PR58fIQVdZe6+0jX+yl6TwZD -6r5d0LhnCLDpDPyh1TRDTdHdADVF7xnUFH3noF7ce+xLNJx6bbSMuLHfyBA9dOg6BGHQ6X8MnGYe -GVZi3YUsRO0T5iK2C262PlCKGsxZa2ZMOn8N6hNMZHLsqIiij0532RHDjmMMdjr0mZMfVr0ao2Z4 -Ahq5ppFZnSDsM240+ssOo9Jn2G38Y9BrFvGmdKt1W+G/KPt9LiE77DUYtbWxlvZRx7Fi8NhlOBh3 -lhMZ9oL9Hn4ORv+lcraoXb/BqIO5YA4DdkfhmYJUx3Sx5X01WTkcTJYcG+ypMztrOgNadFAPsEe9 -M+nVhmYRadebrKI2Vl6i6DpYTuGzfnXVW7qsY7M17rT7TugeDkdhYkItoxbs9AlMbNxaxhtJt7/p -uhndQksGc2Qi0Enfs2iUDwuWjAm6dTCJcE4cROSIU3eDOGClsLVsmnWeSQNWdOqqC4OozNl1NeJI -ZG27GZBkxaewS1NJC1nCFqGTs7Y/nnTVXsNh035G7KbOOOtnPyB0wZPZtfLxL/RF2m+N5lyCS6dX -+muGgiHlyGoGEL/dFjGVdJM4PnPZYAJRUuvsRpuKyryyO504WW3icNZHoA6Oxi0cbWS/YOw5/u4M -gVv2v504HCoEcNzbluu7GNQxvcywOt0TA52yxbL72mS8zvlP1D4FtKIxexGz2IiPa6kHRX3rdFRr -ooAgbyk+FTtDZPaO4jc4uFP8ASk7f4AKumrfV3RrybZP2c4HoHRLo/WfVq3/G6P1T+ORwRGWuGFY -o9eqP9D9Be5On7gcUCpbuWwWqc/3ZEg3d69B/1Z2Cq6hmMm9pYmN1TG6Lq3IU+uueT0NEKHrE8BI -14aKA7TTWmKyaOOcItbg6FQ+p716v9bpLpGD2juYtwz/5pZKV61zDojqvlXHd5yhIQncmcHffSWR -J9/pNw0kTvuamdI5zkols3mZpMcn64O/dFtu+atp3arV4V2+0/NvlaY1fc+5iOOEmFtf1r17yzZ3 -VPtndWzOv7UaMuffXQWX+ObKqDS9tAIm8U16RF4O+oPG52jQa1mh09r5s+xdM1KFpRuCI9gjVaCa -2xK1y4+i8gJIHudDXhl1epfoUXDuCvydsich9tRSA37GDQEl50sNc51vEiUGQajMwnN2Jrh5efct -BzeM9sI1UdtzgHhA39+D0XdhpqKu9l7KyU1k++bNuqBWlrphtNdS6MAoLPcdzfW9cTBR5jqvAIMR -Q8voWQG4019iAWtds716q3meThdHxILUpOjSU16e1hGNg/7kBo1EZ3hmqh+FCFW0m4ohNkelHi0Z -C54rmtKVIdNmKbLNL17W/rNED6UaodO31Ulp3lf01JTJb079OmqdqtKp6JyrD6Hqt2WH0ILD6xVj -LM1R4Us2RoN6baLUjc3MDuihrmqmdppNDtkc3hrW+pp7XJOx5btTJGGFmCcLHjv1cWHQqC3OAA/J -wVGsCJWm9GcAXqOju/4NM2b7jYEerxX0B6TUQufSM00eHpHyHKRdOBANi+daheLik2L7Y7HxoWZO -LcDpu53GDKz4ojmgF77M12Lgjik1Griz2jMX2UljC5oYyXL6/FyKZGDcJlbteAPHYmgnMfY/bGXy -F42PnL/EJRM/qVefcHL9fhy955lmvBXz9smf8fPx4CP3Xpju5TyBJ8bUFji5qx8wXHcSSd5UcpVE -bPgii49i79HlPQy95wZkMJgvPk6Wp7e+ZL/eHqvvHP/0kvn77PZodFzrn3bvvuqp98tSMhnssy/x -E/ZOymw3p9lM+uz5hQwVOD4aeoUxv1MKnHxOeAKIy0sBygqAHNWTweHVRSIvj4+ls8P7cG7wKNy5 -vNnR8yOTecxVK7mj5FHDCp7jof9wCBOchdLcztF7JjxN3Cajz29VsTpki7nd0kNXna+R3M18DP1s -snIxmeptLq/Smn/wT2Cci2kmfP15OBoJmQ7DiVvDxN1eeUfpzjLFWs4/2a1lgy9XBykxyG2p47wP -EqNRfFwBeIPnDBv6iunIiqdu0i2XdyzlJnfc6+B7Vyy19gMRT9p/LRyWYpXA0Y34OXphxodhviBz -geNTz64w5saXAM2dFD4YS6eC9BP/gj/9fqa5W83MT/o8erl8LpFJgcbmp4V3o6+R2Plr2HLS152r -gu2kYid/6rWa1OUdjQ49vtGY9Y6s1jqWiuyzsMXF9q0mHe8FL0M2k0Y+fbW9apZM6vIurFXwPwcO -uXbJctKt3KuwfTvsFqwmZXKpfMJqUpcXphW3d/oj/5E1goXqK5P7uCpbT3rqOdxlL94qlpOennEV -Mime/UUEc4/HlXcyKbufrGfnd/V+9Dw9LuCk8cU99VX5py7rh0lDQX1SmEUhpQKTUtda3NszTRqJ -9N6GdpO+jV4++xWbSRM1MZrbYV1e07QqKZ2839hNerbD++LP1pMeel7G25+tG9OkwGGUaUtp//HP -Tq9gNWkg3o0d20wa+dw/eUxcW08qVKtMTmaugMas1rqVa0d3bnrctdWkTO7lJWczqbjt/e5fpk2T -wizatDXmNPh+Zz3pKZPca/miVUv0TraDJ+qk1ZDPhN6TK+Ho2aWcVTb7/J2bW+vjIVOIhlic9HBh -0rPWQLyphTiYlAmZV1p4eqyZJiWzqGuNfjdzr3aTZpjL/RfZetLzn1jia3R1YzlpOb7Hw6m0Xqu4 -nW+VecZm0qcQU37zb1lPmj9rXT09+n36pC6vYdq7vX7bdtLyZ+m9bjfpKXOXHx5aTw== - - - WuC9Lu9tLnF4ZLnWu+HFlu2kd2+nWxO7Sa+Z+5N8Rp8U1mKY9vI4+/ZaenmxnPTl+vvcdtKvaqSZ -s5n0Gbgl8zLuhqzXevU17F3LEm856dt5qG876chbDnj0SVGKGc/qLZPt9C4sJ5WuQluexEsoC5Py -YfOhmb5F39RJ67zfdGhcXv9jobZPpuX2jn1n82stMO/7sSROemyaFIb9+tGYvnhgnnQ82D1SJ52c -BGBf5tfqea49+ZVJU1X2fJ4VBkfj22MPTppY5EnnIW2lh6xpUsBY/GxLVKY9YfMhEysMDoUrRdLw -O7F0fn7SndGoVu/jpCnzSkfJ1kCj3hTQmFmUR75iqqQ5iZXCJgRvDVrvFUWmtmpv4jxIZ7e7r4OY -1VMikSNn1RLbu7N7+5M5e/dObZ8C683s2jyFHdgNpL0qt2RaX62o6bkosW8a3ONvyfy0/7n1YPs0 -WjyPPetPF3Zf4vZv3m3flj5rr3u2T5Pc7mPD6qmqwxQC/RPO9u1C/fojbvv0eqtRP7N5Kp3tnh3e -jjWMfez9yKa3bwMdTT39YLdi5qf1i3Lf9uldJvA90p8uYOzeWz/w2L59/5yJHdk+ffe+RnesnqoY -+5oUh2e2b3/fcamS7dPed+741e4poKoUj8wwtvj8ghOOH2yfNvr1csHu6a5n9/x53x5ju9nkZb1l -+/YFd7LF2j1Nergdf8wWY5EzJnu0r6065oubznSgUhqfqE/T4UPT08r76X7S+FQI3iBDKSnGXDq0 -nwbdcjJ8fUm3Pyvo1EseHctnO0hZ9z7VWj5pxGzMvvFD4u7jtpysVLz3hEUlK5dNIVsbPXkDqcH4 -Sm8Du7I2etwjfC7GSp4rwsw8+/k46wlmbu49wbvXsif41qx4fE/+Kf5WBBL8TntC+bfIolFYbSdL -fFkCqNMBsE4H3+JOVP5AS3yf82h25YuUe5s81xLxIbuVuQhsR7Sl7faSg8wrkOm2vMXtHRWPM639 -rJecOzRnnjQsWvdzKT3R2pKX9yT9jmPpp6pjPzDD6js333o/l9e257730DNwHFHcpl0L2GLRG/8L -xYg7fT7+RtHPe925rFGsRdxGod6gGHHvvB5ua/22e7n0x4V0cHnRisKf+9vJ6GOXV2xkPwjHj0OF -Tpgx101Wkv0ccxER9hWyQfcHWMsRThe84lZVuMw+Nn4+DjpHdb/4KBbOVLs5ujuaCeB0cvBz60cO -s7glft/JU3c5eGhLv9AAt5WrhY1eBVvwmFz+sGgCz3I3hKvMuxVwhFvq4FXfqMA73RFpgDstbT8a -dH478KSzOWKxxV31ZjlwQGPK1l7l72jAy2ZvczPcZZLl4PcODFCqHnS2Y8G5CQKHZhqLGUBh9yKv -mY9KhkeQBVzaob5SNnjLhvRJR1M+zVBMCjr//LREO15z0kBsMMnipEOCFoabJj7Tn8Kbui+gah4P -M9lGsSJqbsX2NNuoth6UNo2P5zPnzSPQlHLTbjReui6ib5GbPb3B38AI/5bPAergdy59EiuTbTdY -FuPA8XF2D6At7yOMYbLq46GvOVZdNfMORmWlbW83ebt9hFoBs5Usdz2jXFa6OVAHvWr8BI6LuwOY -BYWZOPGxp+qLO82MojYDZKmDz1bGq/wAOriHwYqiam3BfLMtIcvIoJMhN7+MjMGrQJbhNfzAmWPv -P8WYQbTOgfezEnDkVC4Fr86fWYFnAdy+LXC4FhW8MQ14hEIJVaojXkh2y53q42m7b7tg+HGjLFfx -3VgsF4yrwvLlulbZjb2tNUlF5ckLu3Fa7CERt/EgbStcR7wgauyddCyf3hbBctr1kh/c3glzjoCc -z4YqaZyvKELnpwzsCxhId5T7S0F8A3Y/9ZVjWDnyleATj6jB7fpmvosK04Rd9Xq1H8K+eiCJy2Au -AhF7H43rsE3xEC0CXXSn7fT55zcI1LVxFYWoJz/++oDoCORSj/IF+i3nULgSAi042o0VR5udympw -aMYyM3xNr8fRsgjNqY4RVSJb4+Q0v4sz31jufvb5emLaq8jwQC6a9oqwd5fXlsHPjXjnoRhR/VF7 -yCCCzmx3/zXL78Tzhbm92t6z3KtWMbyr7osFxk5ipcvNYCwToNzJXZfKD615w2sWHQX3Jvm6Okgu -LwIVpgXKASSwWatWIFnISic8MU4gDQJHugpBWIFyXi6WgJcOPy3F2K6uihhPL3FeamC6vBbnt7xE -I6lzCyLf+fSSfbE8vzkrxcpi43Xd6omMqAbW5sZzeZURT3zZPBUpGYTMpWzNI2G5CmOenTqiw5jO -nU+yVv3mUG2giNrWJbcci3he5mhCXzq8PTmdLX2ojy1VdvcuTyvPX02GTT23M+Gb26Ae7iczw1C3 -I50nqbLSSiYtV2PnRnwYL5dxLu8cITrrWd/SZHW9zeVdOuJ0M5rgTIp9yx6qEY/q+/o5sKJa7HyK -3v0LM082SXYa82JuXz63N70v8s6m90Wmsm5W2RdppMhSJ5UGjVCCVFXtOrXhtM1TXWt1eZeqXTRM -St3u07uB7eYAT17nGN4tCJmlqHR5nY/hiK3t7J39BpUmHQaQSafBroLK+hilmKOWvbJhfmsSgzN7 -n2BnckxlXNKpsWe6GutAY7pqb6lscKmHT7PSaYUMl8HosN79yQmVNbn0aJowdkLFPuiM5zPdeP4t -xqpbu5vB2PGYjvXMrKlFDV3RYYAcTsv9lSxHW5BWtpGtzQYEqTpcCSQlwmsNFBVfoQDpbUR19uct -bDulun1moVQv8Y/NLOxyfD70dKMNe+hLRl89Ye5lXE+lP6Nnw0w+/5PSgjVk0q9zprlXyxJkuLz0 -RjjJFrIg55dx34EBuLwWODmzwcnX+Yp7pQHnMqd5auBNHNSSleSey8u9TLzUJGBlZpuWu2hk0/iU -bHdjEtijBc5FsxuYg3C7qgfIaN3M8eQTX2ZixSDWJ75PbhZ7XUUu2nD58+UuNKOmREvOq7vQiAZr -YyAiAokT7TcIJAxu5k9WtY97eyP8hL1YMGcoXWiWnt4LkxNtTe8LvxPz7ZC9Aj7m7ESjON0wYtgs -m/XxFnbf8XT3LlZ3odlgbN6JtjbG5B9m8bys46/qXVC40Fy0QPG/caGpUR4FKDsn2sp4iphAAilG -QfNzvpI5igezgcI561qmOqgpJ9eGIOJJrDixCyLmkc6zlB5FZ/89UOD2SttkoOR52hnmTT4um2NB -ZTKTUwkjvkxTeZqDhj+WSxX+5DbmM+0V6JbWrnT/LuECdhjzbwpjFnJ4HcI+ufXyixHedRgAgPSx -9/NgC9JcJNERKPNpowXJZO8jUAvi1tYba61Pz+2fxypiZUtZ1j5vC1MfyWc7btLQdT72ULY9uusE -3k6LPTb7Mj416fxrBHPSALdg1o+s+RitzEXCPqDWLubtdEtZiTAe0YTWHE4voo0/uatc0u2+E9r8 -PmcPPM25I7Sx4M2jXd+8hwRWuPwQ0x5h3ES/brj9msb8C4FxC4pw0UpfMiJtlM48noHGLGIfrz9L -Ylen5T6toHN5KUQd7n7lN+GmmY08B+MqLNPrwDJxPDgvjrFCpxEtnBqob/p1Xcflndd20sARYpTH -giJ95OGWGCmEJ//2bIy/HRjcjJJpIyPAAFZXeHAtNioPwugQIaTkTrd4XjZhqyBIgUX/prpIrLBb -gaVgrk1w9fXNPIomwlj0TK4lX+4GxFzZEI0FFnmN0S9AMiHnA8eOfBPR5hjlmQsbu+hNF8SibeAY -xZL9hilnf6WIRxoenI9W2jU7fzLAvWn75eFuo1kEAKHJ8WCVRUB3crLPz2YHqi3aXN5l5A7bvREj -BuULUMeiH3HN9Vkn8Gj1lSvwvjsr7+HaNLZW7p21WCYV3DiiTbThN7EGZGEBIpZdXqtMZmAuBUqc -0IhlktO7Ce8hws3ScRh6sfz8s5JYdjl4IhBG4ddiWeEw9xsSywBSyEos28Qslh++2tblatlzth4S -WN+mxPLzD3KYTfgRCbJsxbKuw6wqlq3yuezEMkpkLcePTiy/jZaI5ZiPnlvSiGUA7snJWG9Nbg8s -rSS7wOrDg0Vm/9JsRf1sl+O2PPlttHG5/7BZuf82WkHu2/mr5rdb3KgljnlDNLa9YTw7Xx9usrMj -ZEY7NA4/Jb7vfPZpMl2tvH5c6qGaJF4/l3cxMv9Q3azXD/OUdL+fDcGumEqKKoSZ9VhERqhSSY1k -kXr43lq+k2pkhNqtCIDSOpUNbkXAmE1oGGGcmAP/zoqMJYtSzn6VXiLTkG59bFKvl2baL0tRQtwd -OKrXKuXMPL3OZz/18OboZFhMTCdYnJf7qtjSdYpUrPMafEiWgw+D5E2/nk+FpMH1Ap5md2iZb8vi -xm1PqF96c3mxejrrCSX5V0/oQs6qhdMXctUT/Pyq4I8wtuWw1DpN6q3xBonDZPm795Ft3J80cC1Z -rMisZmrl40LOPzpD9+rOXi7zHdrCKmpB1ZSUAuviWaWYDYz5XV3Sikdf9fNsPZRYLLa9OrnR92pJ -v+IBM1f3at+zFCtS9BtN38Mhq34u72LPGEsz81bu1XLExX7NA7q1bOW+KGce8lRrwQuyIlQjnoZk -Qz+7StnROBYYG+4hsS/kFR4+C7P7CewKeQ+3fLaFvBizMGwJG6YAL3AY7904Aidub/+I02c98m5f -Z/xEV6PdcyggV28GY3KDSoUCvN1C67PpXATdMgEH1qtlfftV6YECd0z26umUYmNd3rnCf3vwSmsX -Ru8fHRhojLoeG6ux4ytN6vIa1o/3Da0zqeAvKpOqroXCQyKW89ZUGJRYktgflhOHnckDjn2bDew3 -w8lr9uQe2qZbJhVrSTgmNx052vu6OWCvwVsZTcXdnl0aRkbX6hwyh/cpyygX6hnnbT9DJNEYMLWv -Gl1wp9AAZ2clFXcXsOxcqGILHHKYhYKt3yTwZywMroy5sn4Fk6u4R12XQ1fDu6gTrkYq8xHe4u6A -LkccmB5dyXJghXxLGuKjrUyZVwjtq74tAtoOCCT5lsuqvqkSkp0QiLOoKFyIBv7igJgSy5ZU2C1B -oBVHqwb7dhwtq9wISmGp0nG0atCSMa/ugX/Nru6gUSq57OLtMOJGEsu03c8+Vx3sXCofZTVkmYq3 -DsZWj8lYZ9pjIIXWs+NYCQ1HeANRUQSJMvJOA5RTloS9V8geY/YRiOX2sNXpVXZfO791bmB3fnO/ -Ob0WOSR1jio9nDqMUue3qHMUKUq3csSvZ3Xq1PtgLTyFzj7mWo62It5lsXTHCh7QtxM2FTzNU72C -Z3nNCH3NqWNRhjqUGk2gKpSkUist9TbLvL5Tytt6qEs5qXXL+XNgX1tsWcA4x5NpzIu5fVmUPr/e -F+dLgFbdFzqVdaV9obsJaJVqZXPYCj0kv7mcCauVnSuZXKsdQ0rl1YzK2W3zVoeG7k4gClSqOgwi -0zH6uCoq9Zqm5TWJKxvmk+MfKzGo172aBeH6hvnk2CwG7Whsptpb00H7bCWTY3anyg== - - - wu6fUTK4oKJdvHOv77ZHU8OYhfm8tvE8OTGL+bUxRjK1N4IxOtaj62N2xDDGU7kop5dYjvYgrWwj -2wK1GBCkAsngUZwBRcVXKEDSbbblZ3/ewrYJUGKQaSFlxto/ZrKwna65GX7YX3PzMm6bkxhcXmcj -fEkRNOU2uSjLZH/MVudKwJki71/ny1NNV1U/YTxUc2jvhXOq3+JeJj77GxbsfUpLarRXYS5OudZY -tLyOB8jCulF48vlyBrH6ck1aiOXtQBZycUnJMoU8cy0e8SUIdDjitgi01GDPraozV0TgnO7h8qrV -mezF2M4Iv/i1C22+sp7NL5gf69X1Utw/ttLphhGdXWgu+urMnRhrvuJgreonwJhDSRZ9JTR93oVT -2TF1FcbyGw6xEnoThV0uLwL1+xxUFSQbF9oKt50Y9+9iungVwpJct1m2rVOe1oN9EBFLQilreaj8 -9/k1k5mNGRFaES1Lk51EfRXCyW10b+Gum5XuEzVV5tpehbBaLU9+zTxmK4x5Hd2vlJXQs6sQDBHe -Ncuzac6ai648+5cpzKq9j0DRJIFSpoDmrSNWK2bSWSYuF3u2GjreBV17o6rGpzu4WFMaNitda90S -gHCvFLYy1FjZlomWf51XvFApvJHbgBFtiSnt7juhjTZ25aIqX/5tPZGijZNiY+p7ih0rvReM7LVp -bKWbEVzOhb44In2Zr6U0V2ZZLPT9avlsv4zANHePaOr4dEE3k/u2NxB8tRwvTHYMNyla3wxGjr7e -XB/Rtn4dxjugvrfHdkSr+vWRla4zu90US1QXfFhWx4IqfQTFpCFErHGY9eqMaS9ypo6MYLVrYbqm -wmNTKbwYa1mzuJffzK1NpHh5wb9pnWlPU77sfAWU7fpUzq+XLzuWKlBXeoc3R2M2gWNT2NgQ5XHO -08eqb6c6TMtUApRijiUmoK8cH9sEjkmBqpPPwbVCxOO0Olxz18z+5PRK30Ogqv/Y++E2mUWQts3d -mcsioDo51eGiR3Gte+HSK30UwbF4+W5Aa/E5rW9Td0Mpld4L3sO1acz5ywj0lgwZj13re0mOYnkS -WHYXNGiFmxTLYCjSaxfLqeieQizPqjgpxXJt640yZ84olpdVCm9GLAPaIpu5S40ULy8Ry6abJ53K -l9cUywseElK+vCGxXNu63NDNkwRZTmIZ7f3VKj8BbSuLZWqPYnFZPhcpZF0ill1GK4pKLL+NVq/7 -tF7LfC3watmKVnWfCzwZetZpvlpEL/djPmGjch8g/N6hlfsUt35jzfcKdZ8UlvjbiD6J16buU/X1 -kfp+2spP6rrPvaM71vnsr5DpOuf1q49NXr85ywJLWTfo9eNSD82p453DK6aSYuG3zXUFhsiI/YUF -NmRRH9O6Falvn6tu+va5+pjarUhzXUE6HF3h7NOVLK9834X9Jq96XQHF2Qfq/+11BarcV8SWzhuO -xRKfvBkkaqluNN87DDCZV4tjMftQ9eInqX03O1GsmC5jxXTB5fWEpNCb5Yeq9ytJcc0PVZs+U+3y -/pEPVZs+U004/+Y/VG3q5/L+kQ9Vmz5TvXwta3+o2nYtG/1Qtekz1XgTxR/4ULXVl743/6FqE3Au -7x/5UHVg/jPVsJY/8aFqE3DEB7v5D1WbPlOt1b5t+EPVps9UY5baH/hQtWlS/Dr2H/hQNcJg+Ez1 -zKuw2Q9Vz0sfowd+kx+qXjVz2KGM0uZD1RaRRINm88sPVdsBZ7aSaD9UTVtAPqar4V3vQ9Wm8Rbv -6nQ0uWg+VL1SDS/dh6qdSUVZC/WHqqlLluc/U22fb0lLfJYfqnbOt/zth6otEGj7pe8Vk8eXIxDv -7KK6LJP2gAysvrFjVWFHjcAF14nTLQEOZu+y8uwNR3lsyrMp/HYLX5Te4P15enE27dcZnDJLlxdn -r+KDtSnPXgdjm7ky11Sc/ZuoqFqevYGsG4rybAqQyL78rjybojjbDmNrOq1sirO1L0pv8nKFxeJs -my8ZrVKeTZ2j+KvybAqPmm2Uh748m6I4Wz+Va5dnU3A527XQl2dTf7X8V+XZFptoLs6212FWGNGx -dtFKiq1Ynm2gWrvi7CX7QluevcK+/KI82xKL87GGjeyLo/a74l2dVuXZv/8CO015NoWyoX+Vae3y -bIribGM04beV7vbF2evdaj5Xnk2BSrv85BXKsymKs1eOii6WZ1OUGlvl9a1Ynk1RnO1wLxxNeTZF -cfZ81s1a5dlrY2zFCkrH4myn80JRdkwhpV2UQK1YfWkCaZZtu3559iJIFnnjvy7Ppqys/2V5tnNx -tjHXGtfaMicOUq/U6uad2bezre7oNn49m75Wfdm3s6m+J05dNm7HmEw1VrTgrfjtbKdM+818O1uX -yNZfz157N+a+nU19k96vvp1tpcEuq6OmUmkWlmv7bfRPuotcHAvRSRU1sffX8Out9u1sy7s6qRFI -p8jQ36vwuVAZR319CahDBj9//s9VjNvc1LrhinEKL9wGKsYXa0X/RMW4PcY2WTG+gRsOKSrGaW84 -/F3FuDHn6s9VjNN80eD3FeMuh4SjzVSML2YQ/YmK8VmFnWWx8aYqxvVK4SjlQVunYnzdb9itVjG+ -HGObqhjH/OT1a6doK8bNsdc/UzFuWVm/8Ypx+rsIflMxPl+V9qcqxpfljm6uYnyluwfXrhi3/VrW -RivGN1OX5FQxvkJd0i8qxhdy4P9IxfgGaIyiYtxFL31/UTE+R2N/rGJ8lW/Wr18xbvPN+g1XjJMb -QTna6Oq6FeMu7+I3zzdfMb6hGiuHinEDJdOXpq1cMa74+uxUnk1VjCvaBb8ptNmUpq1e97pOxbi1 -72LTFeObo7HFWPbi3YMrlqatWDHuWsl0Wbdi3Hxn15+pGLe/qXWTFeOz6qc96vvX1qgY/81dN/QV -4y6KD17/XtnQvlpOUdLyi4pxu+/ybLZifDmNLVaMr1rfPXc7kOVHHzZXMY7f4LbKl95sxbjyjdTf -524trxg3c5g/UzHucvZEbKBifMZh2C3ar5KuUTG+5t1QK1aML/GQbLBiHLTxWc34H6kYJ2LZ/gsg -m6wY178AssK3gleuGKeIjGygYtzCSvoDFeNk923LiTdVMW6oeqZ1WK9RMb7eDYerVoyvZImvXTFu -cUfEH6gYJxVDd5v8NtKc10+tGHd5rT9xv9mKcVjLrGb8z1WMW0ZGNl4xrkdGqN2Ka1SMk7w+20/c -b6pifHb20+Hon6sYd8i031DF+Er3j61dMW5z/9jyivFFPC2pGMfacPwG95+qDtdrw+Hs/7HqcL0f -YuxPVYfr/VzeP1cdvnwtm6oO1/u5vH+uOlwvtl380vfmqsP12nC9amDz1eE6cHNfYd5wdThdZf1v -q8NNlfV/qDrcsbJ+I9Xhepk26Px/rDpcrw3X5MufqA5XRUK3PQWM/bHqcF0xVK2kP1IdbpcDv9nq -cJMO84eqw80+pT9THb65L+Utqw5fo15sjerwpV8v3Vh1uF4bvkZOL3V1uL5cy69mbKg63CKj+w9U -h1tmdG+8OlwPYzvUWfyqOtzKStpYdbiGO6s6iz9QHa4jw+VIT+tXhy/U8P6R6nC6/LHfVocbswj+ -XHX4YtXzn6gOX5ajuLnqcKcI72aqw/XacIds219Vh9thbLPV4XptOE3m8LrV4TbZgxuuDtdlvVrN -8Ueqw3VEm+5V2Gh1uJ6M5PL+uepw27VstDpcrw0309gmq8PtdZhNVodbSbHNV4cv2ZcNVofrteGb -3Re7T3f/Yl9W+HT3Eovv19Xh+mZb6Pwbqw7XNxtj4n+qOtypinMz1eFzttgfqw6nuleB+SgIz0tR -afAbqAs3xpENCRIur5Yi0WvZf8A39fC6+gdAz23PfvtsU4W8lLdq6NLeUsOD9X1TfQH4nXtFz1Wn -+MA6kFLq4cd8K/ZKpZwLGFuxlNMOY7T3XThjbPHm3xXu7Jpbmq0JvxJIJJL4RpWO5Py9dFtmZZ/X -Z4unFYtI56xXE1Br3OJmF+giX2Cnrfek0PlxpQu5O7jSOZ3fwlK31/RPfJmRnaZ/brLTf/0V5uxC -GZoN56er9l3L6Wh7EziAt2AU/8bpCON5V/gyi6PT8dzW6bg8D9Z+N/ZWOjQOVtL5eldSLqust0gJ -+90nwGcC0eXdxM0Jnwvp7fMItPkO7xIELknctkWgrQ6DxetOyWHUCMRZsHjdyZ5QcWchIS0yRsft -JbVv/I48pKlsoPPB9i6sdn+NrMCLjX/172KzXzQALrFwsNcrfdbzvX+LMccP/tH5LbF6ekPfSL0g -Gd+/zxsnIFmkelvd1EqBJ0c/03zKnlLLY5eihcXrv/w86sw7Olfsxp9UJhkb79Iwv2aWt7UPlj+5 -DZhvgFlnm2IlLSrqlFNHK95jJftjtsaN0/nVE7xtMXbk3wjGPFq92C8TqfMUSWR0X/xEoH6T222I -8eWtfBtr4skUNVoe5XFS8rF0nSYd0LV6gcZwScIClsZaHNy1b5zGuBB1kY/L61RTTCdzl0vcue8j -n73HzO6W9S+KwNJ17fQaIrxrfWm39kZzwYOLshSbSvDakrj+FWasW9/EbRFK1fr8EV73Vg1StR7c -HI2tKn2tZK9uv5AR69Q0tkLyeLmPPNnGj4iOHqoybmdBp+9+uW97HdLqYWyEcF9nmY66pWFEuzIP -MuLSa3VcXooRLWtT95ORI7simFtLD8n6sVAQkxTizUVzNgDuHA3x2TruF+ssgAHQ3j1DVZu6nywu -3j24VvnY3WB5berc7juWYu+vaT6Z/MmEOjZTm4rl15qz9LfyBavWnWtTaWksvpAgYXYiLctAsPlm -vQXfNDtCKArlZoFxwpO1ezoAj/u2yaJs9jlNYxRa+Rws13K30lVZSyuKKb9dSx01A/N3o3fcIYyr -3fdg/33ku5Xuy1peiK1V1/76kga7FCVLi8/5S+freB+svl+JdetrXZplhSyrexStXKSUH8PEEe3C -H1Y0tsKVEbWt0xM7sXyvi2UHbkkplp9/lovlFeRLbeuBxqtpJZZt7iGB3ac9dzRimdS91jfgc0G0 -2Yrlxd13/Hg3taavHz1Lnny/MbGM5dcgljdwi6ZStb5ULK9EY5eOFzzYiOVl36zfnFhe8Chi2DVo -K5YBxlsa08wklu3X8uAslqkrV3Ur6W3kqFgtfPPcuX6d27TcfxttWO7HfLQXSnjnIolLyuv7v7xq -cd4Sf1jBEaKOaIs7kxuEourZWUxi/brz2aepYLfw+r15lnn96oaPECy3xOm8fh/psIONiH4YmysX -lpU0fzpduDCfgeuiuNOg+mu34sI9ilY5Sb9wK1Yt8y3Xvn2YlK7TS2S6z50fUKvXWi2PjdiyTC1a -48KF+bNfpfHzr2JN6kIL8y0LQthebL2M2w7Xg6nLWPZdiHnr9TZ2YDsfRcTcdr7ZjTqqxxHxWKhk -6weNXrLfCA2Ske700iQDyFSpbktkEoff18+5/d1rjbk0kruZj6GfTebvHwuzfQYrSQ== - - - r7xXT5G5+/uV3l3vrNRqqTgpXKe6kodNX92XWrnD7HMY1nfvy/lLXDLxk3r1YWWKYg7MWk8aORyx -mIhXSlOsjz6TQp7dafY+de+ZP1zFTCNWa2Yb79niaMSNk5799qh0EPLGdvn7y0gyIgbGn+cHg2nN -5d07a0ny/snTzuOW53zi9yRzNwdb1VcxtlO+3854v/vlwl7rcxgSy4Wft+h3s9BOfL9ffeZbZVm+ -ej77uSuzw/xH+bPU6d6eHlxO795O/b63t3TA/1WNfF33ioH4h8s7DDwmJiNv2bc3GvE7nq1Ba3Dg -ZXY+4/7HQuMuIAcufcc/O71CjHu/OUoyh4dbo9FJrOjZfzm99HCp624g3hASTI45OWZylfscc7o9 -uGJOr68+R6POSWg0/TwGbjneC17Vw3xBjiXL2+09UkIO63vOhqKF3S8pepLOp7rRUoAUb8NKKxWA -odUMWFy4YJHnoOyky2t55YK/05U9ga5Qwul5nXRjXG2vlDgMnQlKQfte6ufGGsddVih/3u78jBJ9 -8crl9dxf5QMOKJq+h3f2d70PxR0p3k15i+XTi7338vmRIO9eirCqlCdZOaifYIF8JXB0ELpH4KKJ -+MtrN3Ph852Qr2NXS0z2Lvo2Grcvthmu9LydjL4kWpnz3slDIjZ8OTR58oFHXv5kg9I4LBcvSp3Z -6TXQOciFYlo/FC6vdixeLnXxznDdyWH6U7yuwl6NX5OwF/dz4zx5rcY2433/JTf1BD+/HvC+i7vX -rCd4ef/g8YVqW3jLxQX+iHtCSb7oCR3svuI2HXtC/dKzJ9AIy4iOSPKm8ryXrTPxKBk7es8zTXLz -Bfkt3notfgL3vffBqrYP8Tbgs4+XTGs0CiZ7g8IYVnX/g23NXDrl2Up8bSe76U7tgGWY8ftupn79 -dpWUgsNBIHv3cAadH7ZgvsA7ov+ceztrBhn2ddub6l2/SLl0clpLDMdsXfvi57HYCGYbje39RPzi -G459Pj8hRhPDTSfbidF2c5QKSd0rht3zt5Plxt40WdqX7pKDQbiAiuqOWM3384nYdfor+x5qTxKH -J4I3kyrcNXAtUZc39/52PUxWMo8ckHvwKPPBVPFaD5kla8U/3xOHomeEx8I/a+sd+hOFcqrb3wvh -YLe4k5HU90/Mmyold8SUMAk85XyDdzbzEXq6Jpz/XQCiak5wnGrm4+U+muomujyOSOJBnvTnU2Ma -uwzwT0gHeQI8kFfoIpe9vJNynuBNLvfmf8qLk+FrEfbqJAiAeHynk7dhHVb1ICBPvpgGEvGCB+/V -3d/O5PNnUXh7Ozw3jm9P25zMCBc+zqVboaeUEOn7CQloe/rgTX+Gzptn22FvVN9nPPvv51sAfI8N -ZILeac53dn4eu0pNnzLn54ldvS3e5qrfqbPb/o8yHzethmCRzS29i/gofj0lbz7ao8zHwc5btrH9 -fUKmgrUAAP5c9uc5ltv3BwPiduyhnG0ED0Nzi7ziYNJUn7iOdBhT35c3B0AHzyO8iyBNeFvmI3Uv -5TKRRw4IqVrIZTk/6DAGdHDbb98JPnXwpfzJtqMDgDa9bVhQ/vF0YAD+KPdzRnYNtuSplBhNc3tA -DNU7hvdsSZnw9WeGbCLoYx+9+E6y5Km2YRnRi8zF+3gX5N3RC8MFW92UmLj/IfKVYQfVLrCmh0ny -mg2V1c1pDktkf9UuqXorcfdxew8Mda+QKlVPGYIMQmMfsIM3vXLu+azQSl6nU9VM/txzt/CgzVyQ -033kCwXfxWrhNpF7be1UM+fdwFXmYzA6VhgXHy/vptqPpbv4x7SYRsJ9hrOPh1PRrggLm3U68k25 -99PDoa+We/fHMhhuu1ZhfNr/zgY6jxNxO339tgCS2JzAvpzswMjnfTwvd2Qtzy9HL/nsQaYd8tWT -khgN5zLVShDQFn1iuEk8KRe97Yf4RapxnzsZnxZz73fVJChTFQGPVCpZDu1cpi+P+mmVWzQK41Sp -dH2bavSnr+q+SP32M5+tlx5QF8yHxRPx4TSdvREmKgnkq9108z54n/kojd+QCd/msuxoJxOs/eAK -HkOZg9rhbqzd37sFuCK+TGt8Iqi48wgyUYJAt+S5wiT3FryLoRpbMpoNVr4prnAPxBmXcP+KtDOD -fLGYe+WZc+nPaF710CJHAz6dq6AElMXbI7wVMHm7G38nnfAukXt85yLV9VYq6XZ77AG4LyUET8o2 -Iu/+6F23cKqfl+hd6akCP3q13OHp0ylhZqQtdtWOd2KdV+kDHrCwFvVAAgCZVmfwdOo9ff7K1ivZ -iD4YcLTUrfhQG96R7UbiLGdaD35+9ud76ps78mhC5GwPr35pprrhmwBYQS9+QmPZXaB5IZvztU5e -koPP633VAtMfNL+esrVaRD6Wz7mBgtnLs7vvxOi0B/qD/7WUCd80OPJ0XudPI59+gbW0PytvoFsn -jyx02ZjBLQ5MagtY6+1OIj7oVVPXk9o43op5+4oFdj4efOTeC9M9PUtAb5vd1nj80yNX1YDiGN2L -7Q44ARTjn7vEwWQ/E5AjwiH8dniROBgPT+DB5UVmWitew4Ojk5y8c9NMv1xsnxEFK3oX2rrMvV/u -RlWn4zAJVtL8Mb0GkLlptvF4RITjDUixwxGezw7uwTnoAjxPfBd44ivkyEXjjYeQqV82sC9+iEdf -9fNsPZQ4V7I7duIfZweV5DUzvERCO1dE+bTH12HPfyrkphhyKxdwgYc0UWjhnAs+YKg/DaJsHIbe -cwP99i5JHhx8JMuT4TSZf/RLsBYkP0PrTf/7OVvf3X87O3rm7xV1+PrH30hdT/d8yMzOMh+vW99n -2zenYeDyz/d4MdBPznfx5QO0DBh1qGmJUCAcXCZ44PKysOXHMJjMAQNsbwMf37uA/f3ZBUWm6kve -dIf72cb3jwwaUDKEU3WIiILDEHwE9p/YIlRCrhc68t8HOgQtZLnECsTPI4XVbFv29DWMBS/ZrVw2 -44+aepqdFWyl4wOQmE9QjbY+U6FYZkdhlLMfYBS2PDDAzVaydNX6grMvtKeNeRLA+wKkQeZi/2kH -hmgNDVpfIwVSG9EvC29PN4fBx8xzLhMUAwb5eXJzeJ/z7b50svVyfpoNFMJKpXDKm8mn3vncc3On -TXYf21hgAPEJKMHXHrmbazzHW7f+TqrxszVSucXO1jjnL3ZigePo3Vn6/Tu1n2m9Tx9zb5PPbiKW -89ZmD7ZcXmApL8cKD3kU28+gj+UN2gxYP2I0l+kGFUGIBzslTvKTo9xb98CTiGXjxaQcz4e03Q0O -QPdoT3PJXiyo3X7Uvp73Wq9iNhivwQvtJMb+h61M/uLxPc3e9sY5z345pD/AL0tefLRhzyPRlBhk -H3DEi9Q3W2tkcs+X7Wzg8/URT+A78TilO1/iAehM99PoiD/rpAqPgwc4i7FnEOSfO8Ajr4RE7Opb -Tl0Xhx1QaWK78tfI8+TyqqSksLAPJtXtDUPK0dUV7MdGixmNjg6wyzZoLh95llC8PphisOxGBvr1 -WFWQcjdbOX+1OAEau06HjomCiRufRMM9hBYKo8O9ON8ooHuzjnzdeAfw2fYkfpLbicRhsNkkl34R -X8H2jzi9dHkNyuTifEXDDVx2OFHuvkrvnGRtVwq7r6z1kbuwWqvFzNuOKx3sm1ZK/DBWawXb3pva -ySxdaYl2pWBX8udPPaPF0GyXTLhlcw+n7MztlIpx9YMO2mw1NCC+iDwj/EB7UM+bpB2efXgeb3u8 -X9lG9Z1LdS8OemAWHkfQ45jCjwsUcu+xgZDzyaI/GwoMhrqNddAJxvAsPsqJ+5J3y/Ld1w+s5AJG -ko/GOunMJ+G1KPJ9yDyD8Y/g6DHdvLu/VC3e42wQDTcZTIlTwGKd2cl8fJT4mR3rz4TD58E4c/Lh -gS4Hr7psdnnl67v2de71eaAIodgV030Tpzf8Pdj7500Ypxgh3hC8bxF08OHTa/K6cPaIqn0p984l -IwqNHcZ7Nwx3dj3NnE6irVQkE7rTnwLG4o3rS5BExQFIIrkGnLgxVuAhasD0nTXc9mcECeSnPUhP -I5CzM5BA5zcDlRmXbYEKxLu3V6uDhLtf3O3ZAKXcI3lli6f52wqvwIZ6207ExqEBbvxZNnA1qIBh -cwUWX7LYK7dz6cZNGv0+j3jkuHTnKBWwnPSmx71qzuLMOHMR2N9OCfdcCk1PJlke98tAVAfTufUl -eCLF/FOQKhcPZNq5Sf3PhnNnNAA7JQWpuWSmYYlyBanntQcyKdiVxmljrPVOT45/aHd6YVKuXTJE -RgxoxS8bF3S0Lq7PFqkwaeJ+v0ZAgmMWfCVP0T+mPce7Sp8VoEr78Wcr8rICCXSh70s7kF4JSGhZ -2AGFmDABpT/FOzhfaEGC86IDdVKZXC0Hak2QXN6VgNJBwrinn5YdWZz9ZQxpTXZEfH3V4UrUbzpy -6oGc5J4tJ8XjiDT2ctFWVNq5jajaHMiX2rJzDgfO4pRjnpI6LF7IKh/j7jcsJn3Qd9+O5LoWrOcE -bwS6ACm2ucNne/RA66Mlqo90OLQmm4Hd/xMCBUjqc6qTlI0UW0JUR5z1sMVne0rV1rJkWDs+XXz7 -oT0AQGP00LbGtsMyuZR4bQuryzveyrUZm2EHnvWPK8A6O654e7bNgV31uL63bY8rruX0LLVMLFf7 -NsM23myHBQR9GbgAcpiFYV/smMuLDdWW+9YnrCAc6XFkI0fgT24LBQt0vNpsXXVgqSkFC4G4znDI -rebKBAkuVWXPLSZozaLHX9n6wQfGNkqvROlW3kD/fOr7MjQBdf/5PtvYFncUV/j1q3hMwhHogVfM -WX6XuInU3y4+vtEPc8MGvqN7DJtP9k4fTo7qSeb4oqc5Z6Gtuu9ppD+fUt6Z77+L8ZwfLb7kF4l3 -BTO7NL8QrL8bRhfNceajUsJgzuN++uPos4iGu+KwP6yL8X7q23fzEW/tiUXcqyd84wIMlrO+4myC -P6VZXOgZzDrf9uyrGaL/Z2YbfQEXzDJKqIfkTighsVz1VQkVsPnvSS7BXNwCHsKP6p97mXsllKV4 -/LEtefotkKgRWuJq3OgcgxhcsnJ3GwC6ewkYbRowOQ5Pu8fVbH1wFkoWm/GmIVjF+/vbYMfd7mTO -u7e3JscnCQShlcTEo5pDNzhGk8urhE8OQ/et1Hfha6T4B+eCObXk7e7hMWz33fViQOm+q9u2JCKF -33ycj0lxZ+mhQiL5armv7fTkSwmu5E9+BD3yg9vZSXde3zit7TEOW7LvnwWw9mHNzD5Sss/vM8TF -Lr62f8haovf8Yc04PYnHPo2F1PfeaU4z631eY6ArffyilmvNXmPzVZT775feLkasRMXi67xe9IHG -RiLG6bbk72QW0ObnZzHTBw8cvvxohp2JEj0ddRp+DdZ7KfHA+MPan7tg7+d8ecaLzulLOHK1XYUY -mrvBfG6fO+a0bXyU0Oru5N738i9wAo+2SWQE3ZgZA0sBGkqA/f3QS1Yus3l9c1xezQ== - - - /+uVsVMcWj1fydIVaJkY6tHRMYsgyXgOCkrwCO24+QfFRLx3nDYEfV74bBdsZOKA04JCxEFV1UJG -4ihRTudvQA/xn5MoHjpBJQw4PGldUl9JqfH4kDl4KEWVcNosGAXblPlIxJ+TF4Qnm4GKYrToKNmv -196V84K35xzujVvtrG/rrp3JeT8u5gNKF+J9zz9IDobDekqYpkqmiJTCYT5zJ+Pnu8Dx9uE2vnMG -mA/siNssc39wWf5GHfVkB/Sj/SfVEfJ+fgyc6mRsiFx2vZWSIZQzH4QBi6/16v8A7SqHmTPbEvqg -B7MY0d3Z9s1RHInhEihmb0LcEYpD15wHqmVuzYIs1/qkuJa5aTc+Kbt3gRbfee27uBjb8l9IJVk6 -BS7YqpDAuPoOCcaNIoVUKB6PEe89MArvNF0YTK4RzKF2Srhp+nN6U8HARA45jMLCSGvvK1lJ336Q -ZcyOoV8JtxWfLp6zb8PmF9DiVkQbjASC2Ex2J/R5z3Ah3yRZDHUraswf/yxdle8wMuJvXish++/W -C4xTYGup7vd5WQvjA51PfOHLxfi++kDc/vGUT4c7hyL63bcQqYVovHF7Q4QWSfZAWQm41aJFC6I1 -1u6nSing0lupwmMpqbJWRbqeMBhFD6NQ68/kx2Gq+yzHCAx6nGYWf+metnOJduJZOQJkG9lU/dMU -0VHjNPL4hHwyQOmH9/wnfhKjQ+IdVN+VO57sXn+3BCCxTy6vOTfk+DTvI9GLROzB10lxX2E1Jq70 -C4Z7Sngk3SjHzCGTdGtag+mTLVX3eKgWsvVws4VWUqe9rTiWQDiO1SDN6O5UTZBIpTygMBwntFCP -b5cczePdcqwTOK4OFE1BCfoQl+xD7eeC8Omzo9c7hhAX0cf0AI/gzZxWE/Vk/8QzyJw/idtKyi1/ -6BOSkebpbeLno91XL/h6mISVQodOMBZAPWqQrNzv7GffxWHD0M/iTntxB4DK/aAH/gsTaUZqoHP2 -A0OQmon31MzWvc26iQQQTxktEUqVj2QtO3u5zHfw9Oj+I51guO3vj6z/tdYGPaMyzj62Jruq0Nv7 -8CYOI18dZMcvChcAZCW1lL5sH/NdSMpQEiQJxyditUI/9fl+iXZlJ/n8nq2XqjPZpgV97t+PK6nu -Vj9HojyyeOpvYDgGtbCHDHkQPbwX3zDtpYMh8lI2WPk4MMCFn6AA6v0Za7qlwj7k5Hvi8CwdxsHi -amhY3d9YshxMgLLRqUxIsgtqzJdaduT4v49dAsMKbiHKiu6Dm2m3NboeddqdvjvoirsOkucse9tv -DnKjVqvS+s8kM2hMe63+xB1zHyTL6fNzCfhrY9BsQXfvXDyn8aFnOuppV7QxX8sg/aPYe3R5SehT -zeES42PMMPWBrGuPF6LEx7X+affuq556vywlk8E++xI/Ye+kzHZzms2kz55ftCjq0FyxBKLIGZQV -AAHdPji8ukjk5fGxdHZ4H84NHgVgrNnR8yOTecxVK7mj5FHDCh6NISo6z9dKkfOZwFseORfqB6ks -d5YgQfPEx23lKnkmvl9RRc5Re1dVBEWT7/a30KR4UyLit6+5GvD8pytDogS2SZXn1H3qe1eaaCcE -j+VXp6bwx5kQ1APgbLDdPlaYkS9br3QOM/n84d68CVMAtb8XxByeoprIo6RHvEQTsWtfCznJKVE0 -NTWz9pT6zpwxKg9nMi8khIRhp/RTCxihvK9EX0h8ngTkhffQi/IlF9x4NVyvpRLqOVN6WyzPHhzo -gRwlf6ReOdxGsRp8ieTejpM1+4w5e6PncXAJyziVVaEU8vWUPKrKxVRWRYh8+ePyJkaNMFGkJ9lm -7LhnYbj00UwMn748+2LpVrl4OxtnlohmCAKWrYwjlzd2WSudKOaBvtP3l8NzAvycDXSHcfeTH2Nb -z7eX8zWeZ+zyBZTP4uOBIeqO6QioVPWOMDmvWwWB+CIbktfQqkp1Wyk20bseltQw3selrKf7YZxw -V8lHNybtFB7A0mC+CWtE5OfwEz6RgYRZmSJIxZNbEA3j4JzhkhxlznOPW9qfhwB3/uHDuKDGjxfU -ndeQJky07M3rglgiGYGouIeeMOVd+diaoOkWJGW20Mrkdv2lVOSuNNEyygw+EYwEHqN0vP/J+c4f -bmabc6mmuoYS6J5gdmD3MTdAswwq9Rk6QpqZ4XlDFfBmMauNPDg6U3TDxWS5C80weQ7PJeeh7UOU -Lu1oPj5ye8e+M2OXe/kj0w7kaxa2y2G2cfyyDasPPphAArFaehx2zGL+ZVwvgfWSDYPpIbfErdxb -CbpIrOZveX45er5KH+WSjXYDU+Su0vxR5ZjYuEoCByba6VYMWct9kFhBhgQ7dvBzBiRXJCSSydQu -Lm4T8ZPpZE4rP79Pd46OYwoTBu39OxEvT4qpkPQVSHXD7f1ksfFRQLjK5FNkzcfsY/MCY7Avx5ge -gihq+NKd8SFL6iTmy2FN18KkNPPg+9p2UnSmzE3760nF41vhKskcTscqHzt4BEpW0unZg+3xYeA2 -PlI6oXZE3lET4zBZbhZZVlMAX/NZ4xFXbKDgI1ZonKksDNtaA6EBp3LBelET8UwJduoJROvlOtXL -qZuMVsDgIvui/4kZna3UWWX7Ffc0jSkfQWK0n2DKSLo3S7W7RLfLQ7J/tv8zy+vSH1zMvvU10JBa -64FmXPlBsVVNxCs3Y+Xp3AUcqyfMcIUK+t0+QUQNt+OtyvsNCNtaz1yaUrmYTGdyXy9YUT7seDHF -xN3D0Yib7Hr8h1eCJ3Swd4cp9BnPTkY6nGXUn+CDC0/wZ3iND04wwb7pCV4+nHn2f7ZHsC+XLyYX -J70RtroJhqkzqxphq5tgcF5WNsJWN8HURJCVjLDVTTDtoodVjLDVTTDislnRCFvdBMOSjFWNsNVN -MCUpfzUjbHUTzOVdNMK0mljiifZXR6TqoZ87zDVZs0Kv2AbG4rezTMszDOIZaiTuKue1XFYqtZRy -39zsURv3PEw+5KoU3UrcbS5ZnmyVcZObWPNxrBTKGzKq2qXXWXrdrVVaHGoXmL71Vpm8ZANjfnfG -wpZngiUcM8Eau0ZbbHnWG36is7Q0E+yOIhNMS2jzTHzj5ZlgzPlzMKxFkpalCk7rxR/TSkHuO2e9 -2a50a+v45HTpSm/nPnW5NOuNyR5eZx1W2tqKHNiuVNt9ZRmpg0untMiz3TNjcdjJaSATDouPxGhQ -5JlS/aA+uCfSjhTkaPJOed7bAuMk86Vkus1y2fb53fgTO59e92Wwqy4i4bieJ2d61+VV3gbl9gvs -pdhuLlnqjWcxpQZ7+tpmQOa8jlDNO8/6b8/HimoL6ucNBu5bWAHYIlFivZgJU+7ec8kn1gPyI/WK -7lq9sH2+NsY+2sy1S7TRZhJrNiVOhUNrRZtfLpcHwNHe/2XGCgVIJPBgCMlerRnsXxLqrwZBVm48 -L6+2dXpuymExpM44pUYZP1JtMPvSy/PyDGlAq+TldW9WT3UgsnJZvgdGnH6dFApr2VwWFl6BPbYC -yeWlShb8ZQ6P8ZpCI1Cx4mTt/MVFkDBM+/vEorvBcna0/OwvMKQ12ZHp7L+8U1C/He2/2uaqkQJp -Mu062WpW59wqVw3k/m+z1Shy1VAik1yamC/4RzKyydGb7f5qRFW3T9SiSP/dlECZJ6kW8fasS1R2 -qU/vZkq1Wsvq+dPvS9M1HdOybaFtLMv/ah6YBjWnmD/ZDfvxG8wCT16WXLrmcU2Y8pXNa+ktT5dH -dvxjMWwSTbysDReoPitrsR8W7Zd31SF06x0ky4+eSYp7v/wislmpNrlKH7wSp/l83cmLfrOBegH6 -8rsNfn2zAWDM+W6DX99soAbpl99t8OubDVxeirsNAr+92YAU4TvdbfDrmw3UhLbldxv8+mYDl5fi -boNf32wANOZ8t8GvbzZweSnuNvj1zQbouXK82yDw25sNMC7meLfBr282wFJMx7sNAr+92QB23/lu -g1/fbABrcbrbAAxgh/sFHC81QHt/tQsVVptUuc9gVh6/eKPBBu8zUEvKrW402OB9Bvq1OAs3GgQ2 -d58BXryl3mhgIVoNlZsF081B0jDIjVPfmb3PmTC6RWob5fZ9/g7AkL4HWVHdJnC5lExV9Au9zF8K -EM+cN47u9J7Yj/jopGQ5+L1DHEuGywO2qsJl9rHpbRNXMuxVXxV0IPck5YqfWUq47+ygs1XcnaVN -vM2c5kRg9vQwgybU78d6W1LknzvJSJNrq36B0vM2iWjgqVRiGiUmt783muphDxQE7yAIvv2pXmC3 -qgyWPxmWofMgljn/+jnjMqGngDGW0mxfZAPj7G7685kPJpnjaZQQl8ur31iAQraRhR0ZAPqDUzWO -fFS8IUEYY1TiOBuaRSXUT3ZwwZEHyed7vp93ti/aB8qUKvGr3e/qLBSSnt3Nu6uFQuDgoslBrihY -JIHPJ4Z9ufxMRfziyJgRQfJFMOuWI/EJvK/sKdPKPuwBEvQ06fte7r0w4MFw2/pMdfKJseoO1Or9 -UUDf4+5Xoe00DIpKqJ3zfUivWP5fx5i4d7hvOGiRA7meaX1dHDKRev4ED1Ioze0cvWfC0/EDSJ/K -VHvABJOV7G5HzWzeO+NzvnxSVyH2E7HsAXDQVP1E0S0vSbRBi2Tc1xOVG6mMmaEldX+1AIia4Y4R -R/2GgMF/H7viQEbnLPuW7TeNuWQurxdayq3JdIgdIm+pVrvTL9T+aY1crFv5j4H/WDfnjspuLhLB -fxg3D/8v1F2+xqA7GI397kLf5X07SI4mmU5j0hn0a6N/3DFsergs3J5n3DH3rGvc7QNImDfoDE/8 -mLz2BtC9uRh3Ev7/8LdrfwpzZ+D3axcTZjg+4mbCLCcL8E+EkSWY+tvFqIDBC//AHxfwyxc0/e0W -3JfupxfG3cSxblwCK4R5GcAWInyYkeDtntIWjUKTFGZFRnRjQ1SGhQnRaDgiwUwCy4Yl8prEhwWZ -4dxpl8AIAI0IDyUAxM3LXDjKiCym74UlkHxuXpLDgihIbkFkw5gCBC/xUT4s8xzMIQphjmOjbj4i -hAWOg8lEeCREeTfPywCaQF7jZFguvMaL4QjHRsjgcoQX3TwnhMWIDFBH5TDLsvAaQC1HRAXGKBPF -11gmLIk8QBAVwxLDYCc2zETgF5wtKokiaYmwLC6fA0AkjrzHwioFVmljYd2kJRpRWxgYkrREohHS -wsusSN7jw1wEloC4EWVWgLXwAGaUcwOCw7LMwS+48IgIA0RkpQXekyPhKC/xSi+JgUHZCKBHgl8Y -QIYgSWRT+EhUIDsHC5ZwC8jOMazSxghKJwkXjNsr46YubHja9QETQn+YXMGxBLvWI22wgIjSJsJa -sUXgcBBsEQSlJSLwSgP8z91wKZ0krRMfdSsDCbOBRPfidA0AggGiBsTBS6zyROQEAgduiCiSpoiE -hAQtUVmQlRYetxGIjYmyCiCw3wIBZLEXjiSpI0UlZaS56RCO/Vvrw0pOoXb4wiyMzA== - - - IPBw1sNSVMLjx8Ay4fBxoFlGOaQlwDEflWRcBeCdY4AKeUEGJCBa4HiJER7pmwHqwpPCSHBSgKp5 -IBegdDwgAg/HgQFUzdoKpC0aZZR+oN5ESFtEwSTPiGExipvEc2FJ4pAykT/g8YWJGFw/0iXP424J -XAQQF4XXWJhbJCQjKQTCs3Bco4h3eJ8nYEELJ/HaYQfCBrA4EagPVyHKYZ6JwuBwklgBtrvqQtqO -EMKOIow8TAa/8BKLrUDRPJwVNxx2RAgH/Tl8EoFfkUphRs7NCZEwnGGBkIyMZMVxeKwFmCfKAb9D -YIBvhCWYi8DAsTATxwHIwK2gJRoWETwOliUzEraIsE+AKGA2wEMAoQilIMEpbbhYOHiiRHYJUCVE -ZDcL7AQISybwwiRzLSpXSLv0Njie5GQADAycDQ4OmKmN4QSln8wqsDLALqMRmBMQIUUA8xwTBUaJ -x59H/gHUzOGGMQJH4OJkgKLhQvgJqQMWYbGMRFCj8KIIo5x2DqkCuQ3wpGiEENQicRacaL6QUoQf -iEIi+kKhtYThZNBr1CZUwlDrSiUMiSB0t1eQeVGNBQq6zIuqMk/WZF5ElXkozRSZx2kyT9RlXkST -eTyReYwm83hN5kU1mcfrMo/VZJ64IPMiZpnHW8g8XpN5vCrzJE6Tebwm80RN5gGlqTJPVmUesBmT -zIOWBZkHbSaZhy3zMg9bFmQeYy/zhAWZJ1rIPEGTeZIq81hGk3lRTeYJusyLajJPUGVeVJN5gibz -zBuuyDxWE0K8LvNYTebxmsxjNZnHazKPVWUer8s8VpN5vCbzWE3m8ZrMM083k3mSrAkhXpN50KTK -PF6VedCiSjNek2aMJvP4mcxb7EVGktSRiMwzT4dwIHELMuKMCYtAKeRI8ApDR/TLEYmwYCaCHB4o -CTghS/YxCoyHsHxRIrsv4mmRCOETKQBDANkCBxeEqCInkZNGeZacLAGJFV8DkmR5RCD8AhySMEMg -OlwdSC+ZQTICBHKIUiAaEJ4CvofgImkRlVKAo4AaUwQXIIiEJHG/kGgiynuyQtx4bkVCLNBL5nBX -NNkrgFgBquHIsiMRWSRwskyUSGNAU1RAARVl8OiwbgVxiE0CCse7F1CZduKvU3K2EYG8DP/KcHh6 -5NzKHApWra1gbOPIlhQMby62zN77mDXCsQ3LUZCehglmbQVjG6yPFwTDeJZNszfxPAE9inxkBgqS -kKjqBDPoDE36svQ3rdq0Vw1TzGAxzGGAz9CmL01/16pt9u4HbgfsuETYAHBYVuIJa4jgaRH1poJC -fUwkMtfGAwELeAIt20D3kGUydQQYRASp2dgGS5WRunhU6YncRtUZGR7IA4kTUFSwirAXBGQ/ArIR -hANoH4hRAJYbxbMCSiacF2xRtSzQhsKiGNUb4DXUcfA8651gX4Fjw2t8FMSOzJOWqERAEhXJogii -qBTR2mSi2oFKysC5I2/KyIyUNo5lUO+UUF7gaHjM4QVBANYuskaw1AZlNaAyCoZOEdT0WMJBQNuV -CVok5ABkwShj8DUQpiIyOgHPLbK+CAhTCTkPoJOXREXOwmAGpKM0jhJJqTaR/cLtZ/Dko/rECgo3 -4ySJJfsQAWUayBKMYxaPu9aCImzWBlwQeQiOBaQYlWW9DWQTTITyiVdsDpwO6JHVQUgrVpQEG2Ak -D2xTCVCWOA3QOTolupxiovCgFER5lKPA2qISCKqe0oaESJoiZAxg5qh5ALeXJNRCo7AIGeUbil8B -dWHoIQqMYWbEGlgZojxP5lFgqjzqOmAnSBLuN/RiCC9EWxwsFTJ6RJYUoSICTnAs2GdgOpLephyt -KIeUgnZTBAWKonQocImipFDB3IlMW59INLhA8qmWTZTQHEgunqwZ9CeOaNDA9QRiXcvAEQhUAop5 -BVeirFC0iDJc5MnuE9JWDrLEsaoNilZVgfAK2DhJkb6oguC7qABGFH4eYSKyijGOVfuBbCNNomrb -oZohs4Sjo56IG4jTMqgN4NaDwBNV8ECdB4YqabIJNxctzDuVBiReaSPDkhY8FKQFjaYFOklrigmA -LEWJwQ1oifJEakTQRANyB8qAHZIi2sZzgtrEaaudf1W1Mm5dstvndz/cu5ZJRK0Ph4pVhKiAcGii -HApGMKlQj5VUHQtW0HVxUcQpSm+wfjng5Ni28G4XQLCfkxMRUlRv0XCLAP5gLmAOIOUVNUqG0wHD -ossCSJNsBuEqXYtXHaYCWgazQVaEG2jvOFUE7UtBUa4icNpgWCBB0CZEhf3wUVzB4qvLp0IHGyIB -2WOEiaJURnKKsGhBC7hvcIi7hAswHE6vyZfu4qsOM0mCIkN5kEwysapwBKJO88hIQVTgqBJaNsjE -gXEC5ZAm05sOExGjAfmliLiAXcc1RZQTh2IRrG6ewI/ePpRT0I8YUV2Ldx3mQncZw0pEFBDeDHNx -ILPwBHBwGkEq4LCg0ooiylt4xrEcWejCq05TgeYqEi0BmJhEDhs6TDhUldHW59RhkVsSLhuBbZTJ -qsyvLp9J0WKRXDkZLVFclMAAGxNR7YU5QQ1EaJEfS0TX4HhFu+5avOswF4NMl0eGDxKDEYkvDHkC -4V3o5kEGDOPCwY2KaIKybDjKsjJpM7+7fC5V8KG4n3Nzwepwq2zcXBxrdnNxrIWbS1LdXGC8L7q5 -ZDRaoIlRLCvQQBn0I6C1CFsDz4jbDu0oBjUAaGPRVIA2dF2xqGihBSSJskpVHDrIOFSyZYJpURkL -IOTRT4WePEmUOGKBy+iDRGUClKYosbeiRNxBi4xuCvQIRlVvInE7RfQmlFUo/1nF18QSrzlxcxG5 -xqMfh7jQ0JeG+pQiHBUnEqpmcIyEKJxiOHthiZhbyAtZ0c0BouDoKwoFx0RY8hpOi2tDJicR4cYR -7xu6xMhxBV7LEZNZVjGM/jD8BRBEOBF6z2CkCApgVlaYUxQ9hRFeUxRgEjTUOaI/otNMa2kQlspw -6GDRezEKmnliVgLj5UBTg8MkkwWjcgrT8cAtRBRnuMXoSOOQIEgngB+1EHS+SRySmIiCNYLmKScg -USP5yKjqwUpA1spIh3iMiJwiXEIhSPTTRKNq2EB1jQqKaxTQBBhTXaOi5hrlFlyj7IJrFOYBjosi -JIKyBNaLvh5CKKCHMKiHKO5GpBiM4PACKuEcg5qbdkRBhSDvCSIwaWQGQjQCK4ZHgog8F6hRBnMD -34OHircJoBPRaObQlGAjCmcGUgYwQUkDBRNb0KJnRLKfwLii2AtMBOLcIr1ERlGcJVDHoQU1LZkl -DJUokQ0iNVEnBgg4Hl7n0HkUVZkzUfU5UMBFDq0HHmMVMiHfqKS4YdHyAWQAMmFfRRZ1woga2MGR -0Y0gYDhJIjhBB5PMysQw4XmwylAYK6cPNlpGjxi2sCKgXiAqJfH3gdmGDjTSiZFYluxcFIQPaYmi -3sfxsuo0gxYRthIxGVUIDJvIatHhSxyR8DqPh59DhiKyioEDFEe8wgxhqVGVj+PSgLMD61HCeBLL -oH8ZGST6LOAXYLKc+l6EHAwZNw5sKw4dh1FB8dezHJIOMk+Dnz1NfNBmP3tkwc8uWPjZuQU/u6h5 -1XnNzy7qPvWZn33WFtV96hHNzz7Xtuhn51H9jxBWSyw2JHJRwBYOYzLYMvOzEwPY7GfnzH52IAST -n52Z+dmB04DOAfwAqJwHBgK0gfChps6rMoSLomcN0QAnV0RhAu/JnGKdzNoKxjYeScDUJoaBAGA0 -9DAyRKRhZAnIEpQTVbrA+WAjxE7mkBGAugRtOABuGViRsEkCacHzzEWRVyBeAFCGJxYBgioJguIj -YDmF4cObPEGLwn70yAKrRBbSxrBX1Bz24qSFsBenh71ELezF6WEv0SLsFV0Ie0UWwl68Oeyl2DeE -wnlZIFSIZlhPDdDwircRaE5ws6CskOOD+8FEyYFCZiMpwWMiQ4AwgbEz6GuYtRWgDf2caCkAaxcx -ukDeRCUHcSZE8HDAoMSYAP01wiiEg5FscoCA3eHZQk4gS0TWgcxB1zOHngMGhS0GDnji58eRMPSA -yFdpGTkB8E0SH4oi3zGv1zHaaRX58RZr7VZlVOt0WyNXe1z7q+Wu9fuDSW3SGsITd3vUGk8Go5Z7 -/Dn4G1vgFa2715u9zrn+L1T7Dxc= - - - TM - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/images/update.gif b/bundledApps/tomcat/webapps/docs/images/update.gif deleted file mode 100755 index 31e22abb..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/update.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/images/void.gif b/bundledApps/tomcat/webapps/docs/images/void.gif deleted file mode 100755 index e565824a..00000000 Binary files a/bundledApps/tomcat/webapps/docs/images/void.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/docs/index.html b/bundledApps/tomcat/webapps/docs/index.html deleted file mode 100755 index 2daa6696..00000000 --- a/bundledApps/tomcat/webapps/docs/index.html +++ /dev/null @@ -1,181 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Documentation Index

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Documentation Index

Introduction
- -

This is the top-level entry point of the documentation bundle for the -Apache Tomcat Servlet/JSP container. Apache Tomcat version 7.0 -implements the Servlet 3.0 and JavaServer Pages 2.2 -specifications from the -Java Community Process, and includes many -additional features that make it a useful platform for developing and deploying -web applications and web services.

- -

Select one of the links from the navigation menu (to the left) to drill -down to the more detailed documentation that is available. Each available -manual is described in more detail below.

- -
Apache Tomcat User Guide
- -

The following documents will assist you in downloading, installing -Apache Tomcat 7, and using many of the Apache Tomcat features.

- -
    -
  1. Introduction - A - brief, high level, overview of Apache Tomcat.
  2. -
  3. Setup - How to install and run - Apache Tomcat on a variety of platforms.
  4. -
  5. First web application - - An introduction to the concepts of a web application as defined - in the Servlet Specification. Covers basic organization of your web application - source tree, the structure of a web application archive, and an - introduction to the web application deployment descriptor - (/WEB-INF/web.xml).
  6. -
  7. Deployer - - Operating the Apache Tomcat Deployer to deploy, precompile, and validate web - applications.
  8. -
  9. Manager - - Operating the Manager web app to deploy, undeploy, and - redeploy applications while Apache Tomcat is running.
  10. -
  11. Realms and Access Control - - Description of how to configure Realms (databases of users, - passwords, and their associated roles) for use in web applications that - utilize Container Managed Security.
  12. -
  13. Security Manager - - Configuring and using a Java Security Manager to - support fine-grained control over the behavior of your web applications. -
  14. -
  15. JNDI Resources - - Configuring standard and custom resources in the JNDI naming context - that is provided to each web application.
  16. -
  17. - JDBC DataSource - - Configuring a JNDI DataSoure with a DB connection pool. - Examples for many popular databases.
  18. -
  19. Classloading - - Information about class loading in Apache Tomcat, including where to place - your application classes so that they are visible.
  20. -
  21. JSPs - - Information about Jasper configuration, as well as the JSP compiler - usage.
  22. -
  23. SSL - - Installing and - configuring SSL support so that your Apache Tomcat will serve requests using - the https protocol.
  24. -
  25. SSI - - Using Server Side Includes in Apache Tomcat.
  26. -
  27. CGI - - Using CGIs with Apache Tomcat.
  28. -
  29. Proxy Support - - Configuring Apache Tomcat to run behind a proxy server (or a web server - functioning as a proxy server).
  30. -
  31. MBean Descriptor - - Configuring MBean descriptors files for custom components.
  32. -
  33. Default Servlet - - Configuring the default servlet and customizing directory listings.
  34. -
  35. Apache Tomcat Clustering - - Enable session replication in a Apache Tomcat environment.
  36. -
  37. Balancer - - Configuring, using, and extending the load balancer application.
  38. -
  39. Connectors - - Connectors available in Apache Tomcat, and native web server integration.
  40. -
  41. Monitoring and Management - - Enabling JMX Remote support, and using tools to monitor and manage Apache Tomcat.
  42. -
  43. Logging - - Configuring logging in Apache Tomcat.
  44. -
  45. Apache Portable Runtime - - Using APR to provide superior performance, scalability and better - integration with native server technologies.
  46. -
  47. Virtual Hosting - - Configuring virtual hosting in Apache Tomcat.
  48. -
  49. Advanced IO - - Extensions available over regular, blocking IO.
  50. -
  51. Additional Components - - Obtaining additional, optional components.
  52. -
  53. Using Tomcat libraries with Maven - - Obtaining Tomcat jars through Maven.
  54. -
  55. Security Considerations - - Options to consider when securing an Apache Tomcat installation.
  56. -
  57. Windows Service - - Running Tomcat as a service on Microsoft Windows.
  58. -
  59. Windows Authentication - - Configuring Tomcat to use integrated Windows authentication.
  60. -
  61. High Concurrency JDBC Pool - - Configuring Tomcat to use an alternative JDBC pool.
  62. -
  63. WebSocket support - - Developing WebSocket applications for Apache Tomcat.
  64. - -
- -
Reference
- -

The following documents are aimed at System Administrators who -are responsible for installing, configuring, and operating an Apache Tomcat server. -

- - -
Apache Tomcat Developers
- -

The following documents are for Java developers who wish to contribute to -the development of the Apache Tomcat project.

-
    -
  • Building from Source - - Details the steps necessary to download Apache Tomcat source code (and the - other packages that it depends on), and build a binary distribution from - those sources. -
  • -
  • Changelog - Details the - changes made to Apache Tomcat. -
  • -
  • Status - - Apache Tomcat development status. -
  • -
  • Developers - List of active - Apache Tomcat contributors. -
  • -
  • Functional Specifications - - Requirements specifications for features of the Catalina servlet - container portion of Apache Tomcat.
  • -
  • Javadocs - - Javadoc API documentation for Apache Tomcat's internals.
  • -
  • Apache Tomcat Architecture - - Documentation of the Apache Tomcat Server Architecture.
  • -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/introduction.html b/bundledApps/tomcat/webapps/docs/introduction.html deleted file mode 100755 index 0e024921..00000000 --- a/bundledApps/tomcat/webapps/docs/introduction.html +++ /dev/null @@ -1,116 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Introduction

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Introduction

Table of Contents
- -
Introduction
- -

For administrators and web developers alike, there are some important bits -of information you should familiarize yourself with before starting out. This -document serves as a brief introduction to some of the concepts and -terminology behind the Tomcat container. As well, where to go when you need -help.

- -
Terminology
- -

In the course of reading these documents, you will run across a number of -terms; some specific to Tomcat, and others defined by the -Servlet and -JSP specifications.

- -
    -
  • Context - In a nutshell, a Context is a - web application.
  • -
  • Term2 - This is it.
  • -
  • Term3 - This is it!
  • -
- -
Directories and Files
- -

Throughout the docs, you'll notice there are numerous references to -$CATALINA_HOME. This represents the root of your Tomcat -installation. When we say, "This information can be found in your -$CATALINA_HOME/README.txt file" we mean to look at the README.txt file at the -root of your Tomcat install. Optionally, Tomcat may be configured for multiple -instances by defining $CATALINA_BASE for each instance. If -multiple instances are not configured, $CATALINA_BASE is the -same as $CATALINA_HOME.

- -

These are some of the key tomcat directories:

- -
    -
  • /bin - Startup, shutdown, and other scripts. The - *.sh files (for Unix systems) are functional duplicates of - the *.bat files (for Windows systems). Since the Win32 - command-line lacks certain functionality, there are some additional - files in here.
  • -
  • /conf - Configuration files and related DTDs. The most - important file in here is server.xml. It is the main configuration file - for the container.
  • -
  • /logs - Log files are here by default.
  • -
  • /webapps - This is where your webapps go.
  • -
- -
Configuring Tomcat
- -

This section will acquaint you with the basic information used during -the configuration of the container.

- -

All of the information in the configuration files is read at startup, -meaning that any change to the files necessitates a restart of the container. -

- -
Where to Go for Help
- -

While we've done our best to ensure that these documents are clearly -written and easy to understand, we may have missed something. Provided -below are various web sites and mailing lists in case you get stuck.

- -

As Tomcat 7 is a new release of Tomcat, keep in mind that some of the -issues and solutions vary between the major versions of Tomcat (6.x versus -7.x). As you search around the web, there will be some documentation that -is not relevant to Tomcat 7, but 6.x, 5.x or earlier versions. Doing 3.x -or 4.x things to 7 will probably not work in most cases as the server.xml -files are very different.

- -
    -
  • Current document - most documents will list potential hangups. Be sure - to fully read the relevant documentation as it will save you much time - and effort. There's nothing like scouring the web only to find out that - the answer was right in front of you all along!
  • -
  • Tomcat FAQ
  • -
  • Tomcat WIKI
  • -
  • Tomcat FAQ at jGuru
  • -
  • Tomcat mailing list archives - numerous sites archive the Tomcat mailing - lists. Since the links change over time, clicking here will search - Google. -
  • -
  • The TOMCAT-USER mailing list, which you can subscribe to - here. If you don't - get a reply, then there's a good chance that your question was probably - answered in the list archives or one of the FAQs. Although questions - about web application development in general are sometimes asked and - answered, please focus your questions on Tomcat-specific issues.
  • -
  • The TOMCAT-DEV mailing list, which you can subscribe to - here. This list is - reserved for discussions about the development of Tomcat - itself. Questions about Tomcat configuration, and the problems you run - into while developing and running applications, will normally be more - appropriate on the TOMCAT-USER list instead.
  • -
- -

And, if you think something should be in the docs, by all means let us know -on the TOMCAT-DEV list.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/jasper-howto.html b/bundledApps/tomcat/webapps/docs/jasper-howto.html deleted file mode 100755 index 215ee015..00000000 --- a/bundledApps/tomcat/webapps/docs/jasper-howto.html +++ /dev/null @@ -1,349 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Jasper 2 JSP Engine How To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Jasper 2 JSP Engine How To

Table of Contents
- -
Introduction
- -

Tomcat 7.0 uses the Jasper 2 JSP Engine to implement -the JavaServer Pages 2.2 -specification.

- -

Jasper 2 has been redesigned to significantly improve performance over -the original Jasper. In addition to general code improvements the following -changes were made: -

    -
  • JSP Custom Tag Pooling - The java objects instantiated -for JSP Custom Tags can now be pooled and reused. This significantly boosts -the performance of JSP pages which use custom tags.
  • -
  • Background JSP compilation - If you make a change to -a JSP page which had already been compiled Jasper 2 can recompile that -page in the background. The previously compiled JSP page will still be -available to serve requests. Once the new page has been compiled -successfully it will replace the old page. This helps improve availability -of your JSP pages on a production server.
  • -
  • Recompile JSP when included page changes - Jasper 2 -can now detect when a page included at compile time from a JSP has changed -and then recompile the parent JSP.
  • -
  • JDT used to compile JSP pages - The -Eclipse JDT Java compiler is now used to perform JSP java source code -compilation. This compiler loads source dependencies from the container -classloader. Ant and javac can still be used.
  • -
-

- -

Jasper is implemented using the servlet class -org.apache.jasper.servlet.JspServlet.

- -
Configuration
- -

By default Jasper is configured for use when doing web application -development. See the section -Production Configuration for information on configuring Jasper -for use on a production Tomcat server.

- -

The servlet which implements Jasper is configured using init parameters -in your global $CATALINA_BASE/conf/web.xml. - -

    -
  • checkInterval - If development is false and checkInterval -is greater than zero, background compiles are enabled. checkInterval is the time -in seconds between checks to see if a JSP page (and its dependent files) needs -to be recompiled. Default 0 seconds.
  • - -
  • classdebuginfo - Should the class file be compiled with -debugging information? true or false, default -true. -
  • - -
  • classpath - Defines the class path to be used to compile -the generated servlets. This parameter only has an effect if the ServletContext -attribute org.apache.jasper.Constants.SERVLET_CLASSPATH is not set. This -attribute is always set when Jasper is used within Tomcat. By default the -classpath is created dynamically based on the current web application.
  • - -
  • compiler - Which compiler Ant should use to compile JSP -pages. See the Ant documentation for more information. If the value is not set, -then the default Eclipse JDT Java compiler will be used instead of using Ant. -No default value.
  • - -
  • compilerSourceVM - What JDK version are the source files -compatible with? (Default value: 1.6)
  • - -
  • compilerTargetVM - What JDK version are the generated files -compatible with? (Default value: 1.6)
  • - -
  • development - Is Jasper used in development mode? If true, -the frequency at which JSPs are checked for modification may be specified via -the modificationTestInterval parameter.true or false, -default true.
  • - -
  • displaySourceFragment - Should a source fragment be -included in exception messages? true or false, -default true.
  • - -
  • dumpSmap - Should the SMAP info for JSR45 debugging be -dumped to a file? true or false, default -false. false if suppressSmap is true.
  • - -
  • enablePooling - Determines whether tag handler pooling is -enabled. This is a compilation option. It will not alter the behaviour of JSPs -that have already been compiled. true or false, -default true. -
  • - -
  • engineOptionsClass - Allows specifying the Options class -used to configure Jasper. If not present, the default EmbeddedServletOptions -will be used. -
  • - -
  • errorOnUseBeanInvalidClassAttribute - Should Jasper issue -an error when the value of the class attribute in an useBean action is not a -valid bean class? true or false, default -true.
  • - -
  • fork - Have Ant fork JSP page compiles so they are -performed in a separate JVM from Tomcat? true or -false, default true.
  • - -
  • genStringAsCharArray - Should text strings be generated as char -arrays, to improve performance in some cases? Default false.
  • - -
  • ieClassId - The class-id value to be sent to Internet -Explorer when using <jsp:plugin> tags. Default -clsid:8AD9C840-044E-11D1-B3E9-00805F499D93.
  • - -
  • javaEncoding - Java file encoding to use for generating -java source files. Default UTF8.
  • - -
  • keepgenerated - Should we keep the generated Java source -code for each page instead of deleting it? true or -false, default true.
  • - -
  • mappedfile - Should we generate static content with one -print statement per input line, to ease debugging? -true or false, default true.
  • - -
  • maxLoadedJsps - The maximum number of JSPs that will be -loaded for a web application. If more than this number of JSPs are loaded, the -least recently used JSPs will be unloaded so that the number of JSPs loaded at -any one time does not exceed this limit. A value of zero or less indicates no -limit. Default -1
  • - -
  • jspIdleTimeout - The amount of time in seconds a JSP can be -idle before it is unloaded. A value of zero or less indicates never unload. -Default -1
  • - -
  • modificationTestInterval - Causes a JSP (and its dependent -files) to not be checked for modification during the specified time interval -(in seconds) from the last time the JSP was checked for modification. A value of -0 will cause the JSP to be checked on every access. Used in development mode -only. Default is 4 seconds.
  • - -
  • recompileOnFail - If a JSP compilation fails should the -modificationTestInterval be ignored and the next access trigger a re-compilation -attempt? Used in development mode only and is disabled by default as compilation -may be expensive and could lead to excessive resource usage.
  • - -
  • scratchdir - What scratch directory should we use when -compiling JSP pages? Default is the work directory for the current web -application.
  • - -
  • suppressSmap - Should the generation of SMAP info for JSR45 -debugging be suppressed? true or false, default -false.
  • - -
  • trimSpaces - Should white spaces in template text between -actions or directives be trimmed ?, default false.
  • - -
  • xpoweredBy - Determines whether X-Powered-By response -header is added by generated servlet. true or false, -default false.
  • -
-

- -

The Java compiler from Eclipse JDT in included as the default compiler. It is -an advanced Java compiler which will load all dependencies from the Tomcat class -loader, which will help tremendously when compiling on large installations with -tens of JARs. On fast servers, this will allow sub-second recompilation cycles -for even large JSP pages.

- -

Apache Ant, which was used in previous Tomcat releases, can be used instead -of the new compiler by simply removing the lib/ecj-*.jar file, -and placing the ant.jar and ant-launcher.jar files -from the latest Ant distribution in the lib folder.

- -
Known issues
- -

As described in - -bug 39089, a known JVM issue, - -bug 6294277, may cause a -java.lang.InternalError: name is too long to represent exception -when compiling very large JSPs. If this is observed then it may be worked around -by using one of the following: -

    -
  • reduce the size of the JSP
  • -
  • disable SMAP generation and JSR-045 support by setting -suppressSmap to true.
  • -
-

- -
Production Configuration
- -

The main JSP optimization which can be done is precompilation of JSPs. -However, this might not be possible (for example, when using the -jsp-property-group feature) or practical, in which case the configuration of the -Jasper servlet becomes critical.

- -

When using Jasper 2 in a production Tomcat server you should consider making -the following changes from the default configuration. -

    -
  • development - To disable on access checks for JSP -pages compilation set this to false.
  • -
  • genStringAsCharArray - To generate slightly more efficient -char arrays, set this to true.
  • -
  • modificationTestInterval - If development has to be set to -true for any reason (such as dynamic generation of JSPs), setting -this to a high value will improve performance a lot.
  • -
  • trimSpaces - To remove useless bytes from the response, -set this to true.
  • -
-

- -
Web Application Compilation
- -

Using Ant is the preferred way to compile web applications using JSPC. Note -that when pre-compiling JSPs, SMAP information will only be included in the -final classes if suppressSmap is false and compile is true. -Use the script given below (a similar script is included in the "deployer" -download) to precompile a webapp: -

- -

-

-<project name="Webapp Precompilation" default="all" basedir=".">
-
-   <import file="${tomcat.home}/bin/catalina-tasks.xml"/>
-
-   <target name="jspc">
-
-    <jasper
-             validateXml="false"
-             uriroot="${webapp.path}"
-             webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
-             outputDir="${webapp.path}/WEB-INF/src" />
-
-  </target>
-
-  <target name="compile">
-
-    <mkdir dir="${webapp.path}/WEB-INF/classes"/>
-    <mkdir dir="${webapp.path}/WEB-INF/lib"/>
-
-    <javac destdir="${webapp.path}/WEB-INF/classes"
-           optimize="off"
-           debug="on" failonerror="false"
-           srcdir="${webapp.path}/WEB-INF/src"
-           excludes="**/*.smap">
-      <classpath>
-        <pathelement location="${webapp.path}/WEB-INF/classes"/>
-        <fileset dir="${webapp.path}/WEB-INF/lib">
-          <include name="*.jar"/>
-        </fileset>
-        <pathelement location="${tomcat.home}/lib"/>
-        <fileset dir="${tomcat.home}/lib">
-          <include name="*.jar"/>
-        </fileset>
-        <fileset dir="${tomcat.home}/bin">
-          <include name="*.jar"/>
-        </fileset>
-      </classpath>
-      <include name="**" />
-      <exclude name="tags/**" />
-    </javac>
-
-  </target>
-
-  <target name="all" depends="jspc,compile">
-  </target>
-
-  <target name="cleanup">
-    <delete>
-        <fileset dir="${webapp.path}/WEB-INF/src"/>
-        <fileset dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/>
-    </delete>
-  </target>
-
-</project>
-
-

- -

-The following command line can be used to run the script -(replacing the tokens with the Tomcat base path and the path to the webapp -which should be precompiled):
-

-$ANT_HOME/bin/ant -Dtomcat.home=<$TOMCAT_HOME> -Dwebapp.path=<$WEBAPP_PATH>
-
-

- -

-Then, the declarations and mappings for the servlets which were generated -during the precompilation must be added to the web application deployment -descriptor. Insert the ${webapp.path}/WEB-INF/generated_web.xml -at the right place inside the ${webapp.path}/WEB-INF/web.xml file. -Restart the web application (using the manager) and test it to verify it is -running fine with precompiled servlets. An appropriate token placed in the -web application deployment descriptor may also be used to automatically -insert the generated servlet declarations and mappings using Ant filtering -capabilities. This is actually how all the webapps distributed with Tomcat -are automatically compiled as part of the build process. -

- -

-At the jasper task you can use the option addWebXmlMappings for -automatic merge the ${webapp.path}/WEB-INF/generated_web.xml -with the current web application deployment descriptor at -${webapp.path}/WEB-INF/web.xml. When you want to use Java 6 -features inside your jsp's, add the following javac compiler task attributes: -source="1.6" target="1.6". For live -applications you can also compile with optimize="on" and -without debug info debug="off". -

- -

-When you don't want to stop the jsp generation at first jsp syntax error, use -failOnError="false"and with -showSuccess="true" all successfull jsp to java -generation are printed out. Sometimes it is very helpfull, when you cleanup the -generate java source files at ${webapp.path}/WEB-INF/src -and the compile jsp servlet classes at -${webapp.path}/WEB-INF/classes/org/apache/jsp. -

- -

Hints: -

    -
  • When you switch to another Tomcat release, then regenerate and recompile -your jsp's with the new Tomcat version.
  • -
  • Use java system property at server runtime to disable PageContext pooling -org.apache.jasper.runtime.JspFactoryImpl.USE_POOL=false. -and limit the buffering with -org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true. Note -that changing from the defaults may affect performance, but it will vary -depending on the application.
  • -
-

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/jdbc-pool.html b/bundledApps/tomcat/webapps/docs/jdbc-pool.html deleted file mode 100755 index 192bdce3..00000000 --- a/bundledApps/tomcat/webapps/docs/jdbc-pool.html +++ /dev/null @@ -1,760 +0,0 @@ -Apache Tomcat 7 (7.0.30) - The Tomcat JDBC Connection Pool

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

The Tomcat JDBC Connection Pool

Table of Contents
- -
Introduction
- -

The JDBC Connection Pool org.apache.tomcat.jdbc.pool - is a replacement or an alternative to the commons-dbcp - connection pool.

- -

So why do we need a new connection pool?

- -

Here are a few of the reasons: -

    -
  1. commons-dbcp is single threaded, in order to be thread safe commons-dbcp locks the entire pool, even during query validation.
  2. -
  3. commons-dbcp is slow - as the number of logical CPUs grow, the performance suffers, the above point shows that there is not support for high concurrency - Even with the enormous optimizations of the synchronized statement in Java 6, commons-dbcp still suffers in speed and concurrency.
  4. -
  5. commons-dbcp is complex, over 60 classes. tomcat-jdbc-pool, core is 8 classes, hence modifications for future requirement will require - much less changes. This is all you need to run the connection pool itself, the rest is gravy.
  6. -
  7. commons-dbcp uses static interfaces. This means you can't compile it with JDK 1.6, or if you run on JDK 1.6/1.7 you will get - NoSuchMethodException for all the methods not implemented, even if the driver supports it.
  8. -
  9. The commons-dbcp has become fairly stagnant. Sparse updates, releases, and new feature support.
  10. -
  11. It's not worth rewriting over 60 classes, when something as a connection pool can be accomplished with as a much simpler implementation.
  12. -
  13. Tomcat jdbc pool implements a fairness option not available in commons-dbcp and still performs faster than commons-dbcp
  14. -
  15. Tomcat jdbc pool implements the ability retrieve a connection asynchronously, without adding additional threads to the library itself
  16. -
  17. Tomcat jdbc pool is a Tomcat module, it depends on Tomcat JULI, a simplified logging framework used in Tomcat.
  18. -
  19. Retrieve the underlying connection using the javax.sql.PooledConnection interface.
  20. -
  21. Starvation proof. If a pool is empty, and threads are waiting for a connection, when a connection is returned, - the pool will awake the correct thread waiting. Most pools will simply starve.
  22. -
-

- -

Features added over other connection pool implementations -

    -
  1. Support for highly concurrent environments and multi core/cpu systems.
  2. -
  3. Dynamic implementation of interface, will support java.sql and javax.sql interfaces for - your runtime environment (as long as your JDBC driver does the same), even when compiled with a lower version of the JDK.
  4. -
  5. Validation intervals - we don't have to validate every single time we use the connection, we can do this - when we borrow or return the connection, just not more frequent than an interval we can configure.
  6. -
  7. Run-Once query, a configurable query that will be run only once, when the connection to the database is established. - Very useful to setup session settings, that you want to exist during the entire time the connection is established.
  8. -
  9. Ability to configure custom interceptors. - This allows you to write custom interceptors to enhance the functionality. You can use interceptors to gather query stats, - cache session states, reconnect the connection upon failures, retry queries, cache query results, and so on. - Your options are endless and the interceptors are dynamic, not tied to a JDK version of a - java.sql/javax.sql interface.
  10. -
  11. High performance - we will show some differences in performance later on
  12. -
  13. Extremely simple, due to the very simplified implementation, the line count and source file count are very low, compare with c3p0 - that has over 200 source files(last time we checked), Tomcat jdbc has a core of 8 files, the connection pool itself is about half - that. As bugs may occur, they will be faster to track down, and easier to fix. Complexity reduction has been a focus from inception.
  14. -
  15. Asynchronous connection retrieval - you can queue your request for a connection and receive a Future<Connection> back.
  16. -
  17. Better idle connection handling. Instead of closing connections directly, it can still pool connections and sizes the idle pool with a smarter algorithm.
  18. -
  19. You can decide at what moment connections are considered abandoned, is it when the pool is full, or directly at a timeout - by specifying a pool usage threshold. -
  20. -
  21. The abandon connection timer will reset upon a statement/query activity. Allowing a connections that is in use for a long time to not timeout. - This is achieved using the ResetAbandonedTimer -
  22. -
  23. Close connections after they have been connected for a certain time. Age based close upon return to the pool. -
  24. -
  25. Get JMX notifications and log entries when connections are suspected for being abandoned. This is similar to - the removeAbandonedTimeout but it doesn't take any action, only reports the information. - This is achieved using the suspectTimeout attribute.
  26. -
  27. Connections can be retrieved from a java.sql.Driver, javax.sql.DataSource or javax.sql.XADataSource - This is achieved using the dataSource and dataSourceJNDI attributes.
  28. -
  29. XA connection support
  30. -
-

- - -
How to use
-

- Usage of the Tomcat connection pool has been made to be as simple as possible, for those of you that are familiar with commons-dbcp, the - transition will be very simple. Moving from other connection pools is also fairly straight forward. -

-
Additional features
-

The Tomcat connection pool offers a few additional features over what most other pools let you do:

-
    -
  • initSQL - the ability to run a SQL statement exactly once, when the connection is created
  • -
  • validationInterval - in addition to running validations on connections, avoid running them too frequently.
  • -
  • jdbcInterceptors - flexible and pluggable interceptors to create any customizations around the pool, - the query execution and the result set handling. More on this in the advanced section.
  • -
  • fairQueue - Set the fair flag to true to achieve thread fairness or to use asynchronous connection retrieval
  • -
-
-
Inside the Apache Tomcat Container
-

- The Tomcat Connection pool is configured as a resource described in The Tomcat JDBC documentation - With the only difference being that you have to specify the factory attribute and set the value to - org.apache.tomcat.jdbc.pool.DataSourceFactory -

-
-
Standalone
-

- The connection pool only has another dependency, and that is on tomcat-juli.jar. - To configure the pool in a stand alone project using bean instantiation, the bean to instantiate is - org.apache.tomcat.jdbc.pool.DataSource. The same attributes (documented below) as you use to configure a connection - pool as a JNDI resource, are used to configure a data source as a bean. -

-
-
JMX
-

- The connection pool object exposes an MBean that can be registered. - In order for the connection pool object to create the MBean, the flag jmxEnabled has to be set to true. - This doesn't imply that the pool will be registered with an MBean server, merely that the MBean is created. - In a container like Tomcat, Tomcat itself registers the DataSource with the MBean server, the - org.apache.tomcat.jdbc.pool.DataSource object will then register the actual - connection pool MBean. - If you're running outside of a container, you can register the DataSource yourself under any object name you specify, - and it propagates the registration to the underlying pool. To do this you would call mBeanServer.registerMBean(dataSource.getPool().getJmxPool(),objectname). - Prior to this call, ensure that the pool has been created by calling dataSource.createPool(). -

-
- -
Attributes
-

To provide a very simple switch to and from commons-dbcp and tomcat-jdbc-pool, - Most attributes are the same and have the same meaning.

-
JNDI Factory and Type
-
AttributeDescription
factory -

factory is required, and the value should be org.apache.tomcat.jdbc.pool.DataSourceFactory

-
type -

Type should always be javax.sql.DataSource or javax.sql.XADataSource

-

Depending on the type a org.apache.tomcat.jdbc.pool.DataSource or a org.apache.tomcat.jdbc.pool.XADataSource will be created.

-
-
- -
Common Attributes
-

These attributes are shared between commons-dbcp and tomcat-jdbc-pool, in some cases default values are different.

-
AttributeDescription
defaultAutoCommit -

(boolean) The default auto-commit state of connections created by this pool. If not set, default is JDBC driver default (If not set then the setAutoCommit method will not be called.)

-
defaultReadOnly -

(boolean) The default read-only state of connections created by this pool. If not set then the setReadOnly method will not be called. (Some drivers don't support read only mode, ex: Informix)

-
defaultTransactionIsolation -

(String) The default TransactionIsolation state of connections created by this pool. One of the following: (see javadoc ) -

    -
  • NONE
  • -
  • READ_COMMITTED
  • -
  • READ_UNCOMMITTED
  • -
  • REPEATABLE_READ
  • -
  • SERIALIZABLE
  • -
- If not set, the method will not be called and it defaults to the JDBC driver. -

-
defaultCatalog -

(String) The default catalog of connections created by this pool.

-
driverClassName -

(String) The fully qualified Java class name of the JDBC driver to be used. The driver has to be accessible - from the same classloader as tomcat-jdbc.jar -

-
username -

(String) The connection username to be passed to our JDBC driver to establish a connection. - Note that method DataSource.getConnection(username,password) - by default will not use credentials passed into the method, - but will use the ones configured here. See alternateUsernameAllowed - property for more details. -

-
password -

(String) The connection password to be passed to our JDBC driver to establish a connection. - Note that method DataSource.getConnection(username,password) - by default will not use credentials passed into the method, - but will use the ones configured here. See alternateUsernameAllowed - property for more details. -

-
maxActive -

(int) The maximum number of active connections that can be allocated from this pool at the same time. - The default value is 100

-
maxIdle -

(int) The maximum number of connections that should be kept in the pool at all times. - Default value is maxActive:100 - Idle connections are checked periodically (if enabled) and - connections that been idle for longer than minEvictableIdleTimeMillis - will be released. (also see testWhileIdle)

-
minIdle -

- (int) The minimum number of established connections that should be kept in the pool at all times. - The connection pool can shrink below this number if validation queries fail. - Default value is derived from initialSize:10 (also see testWhileIdle) -

-
initialSize -

(int)The initial number of connections that are created when the pool is started. - Default value is 10

-
maxWait -

(int) The maximum number of milliseconds that the pool will wait (when there are no available connections) - for a connection to be returned before throwing an exception. - Default value is 30000 (30 seconds)

-
testOnBorrow -

(boolean) The indication of whether objects will be validated before being borrowed from the pool. - If the object fails to validate, it will be dropped from the pool, and we will attempt to borrow another. - NOTE - for a true value to have any effect, the validationQuery parameter must be set to a non-null string. - In order to have a more efficient validation, see validationInterval. - Default value is false -

-
testOnReturn -

(boolean) The indication of whether objects will be validated before being returned to the pool. - NOTE - for a true value to have any effect, the validationQuery parameter must be set to a non-null string. - The default value is false. -

-
testWhileIdle -

(boolean) The indication of whether objects will be validated by the idle object evictor (if any). - If an object fails to validate, it will be dropped from the pool. - NOTE - for a true value to have any effect, the validationQuery parameter must be set to a non-null string. - The default value is false and this property has to be set in order for the - pool cleaner/test thread is to run (also see timeBetweenEvictionRunsMillis) -

-
validationQuery -

(String) The SQL query that will be used to validate connections from this pool before returning them to the caller. - If specified, this query does not have to return any data, it just can't throw a SQLException. - The default value is null. - Example values are SELECT 1(mysql), select 1 from dual(oracle), SELECT 1(MS Sql Server) -

-
validatorClassName -

(String) The name of a class which implements the - org.apache.tomcat.jdbc.pool.Validator interface and - provides a no-arg constructor (may be implicit). If specified, the - class will be used to create a Validator instance which is then used - instead of any validation query to validate connections. The default - value is null. An example value is - com.mycompany.project.SimpleValidator. -

-
timeBetweenEvictionRunsMillis -

(int) The number of milliseconds to sleep between runs of the idle connection validation/cleaner thread. - This value should not be set under 1 second. It dictates how often we check for idle, abandoned connections, and how often - we validate idle connections. - The default value is 5000 (5 seconds).
-

-
numTestsPerEvictionRun -

(int) Property not used in tomcat-jdbc-pool.

-
minEvictableIdleTimeMillis -

(int) The minimum amount of time an object may sit idle in the pool before it is eligible for eviction. - The default value is 60000 (60 seconds).

-
accessToUnderlyingConnectionAllowed -

(boolean) Property not used. Access can be achieved by calling unwrap on the pooled connection. - see javax.sql.DataSource interface, or call getConnection through reflection or - or cast the object as javax.sql.PooledConnection

-
removeAbandoned -

(boolean) Flag to remove abandoned connections if they exceed the removeAbandonedTimout. - If set to true a connection is considered abandoned and eligible for removal if it has been in use - longer than the removeAbandonedTimeout Setting this to true can recover db connections from - applications that fail to close a connection. See also logAbandoned - The default value is false.

-
removeAbandonedTimeout -

(int) Timeout in seconds before an abandoned(in use) connection can be removed. - The default value is 60 (60 seconds). The value should be set to the longest running query your applications - might have.

-
logAbandoned -

(boolean) Flag to log stack traces for application code which abandoned a Connection. - Logging of abandoned Connections adds overhead for every Connection borrow because a stack trace has to be generated. - The default value is false.

-
connectionProperties -

(String) The connection properties that will be sent to our JDBC driver when establishing new connections. - Format of the string must be [propertyName=property;]* - NOTE - The "user" and "password" properties will be passed explicitly, so they do not need to be included here. - The default value is null.

-
poolPreparedStatements -

(boolean) Property not used.

-
maxOpenPreparedStatements -

(int) Property not used.

-
- -
- -
Tomcat JDBC Enhanced Attributes
- -
AttributeDescription
initSQL -

(String) A custom query to be run when a connection is first created. - The default value is null.

-
jdbcInterceptors -

(String) A semicolon separated list of classnames extending - org.apache.tomcat.jdbc.pool.JdbcInterceptor class. - See Configuring JDBC interceptors - below for more detailed description of syntaz and examples. -

-

- These interceptors will be inserted as an interceptor into the chain - of operations on a java.sql.Connection object. - The default value is null. -

-

- Predefined interceptors:
- org.apache.tomcat.jdbc.pool.interceptor.
ConnectionState
- - keeps track of auto commit, read only, catalog and transaction isolation level.
- org.apache.tomcat.jdbc.pool.interceptor.
StatementFinalizer
- - keeps track of opened statements, and closes them when the connection is returned to the pool. -

-

- More predefined interceptors are described in detail in the - JDBC Interceptors section. -

-
validationInterval -

(long) avoid excess validation, only run validation at most at this frequency - time in milliseconds. - If a connection is due for validation, but has been validated previously within this interval, it will not be validated again. - The default value is 30000 (30 seconds).

-
jmxEnabled -

(boolean) Register the pool with JMX or not. - The default value is true.

-
fairQueue -

(boolean) Set to true if you wish that calls to getConnection should be treated - fairly in a true FIFO fashion. This uses the org.apache.tomcat.jdbc.pool.FairBlockingQueue - implementation for the list of the idle connections. The default value is true. - This flag is required when you want to use asynchronous connection retrieval.
- Setting this flag ensures that threads receive connections in the order they arrive.
- During performance tests, there is a very large difference in how locks - and lock waiting is implemented. When fairQueue=true - there is a decision making process based on what operating system the system is running. - If the system is running on Linux (property os.name=Linux. - To disable this Linux specific behavior and still use the fair queue, simply add the property - org.apache.tomcat.jdbc.pool.FairBlockingQueue.ignoreOS=true to your system properties - before the connection pool classes are loaded. -

-
abandonWhenPercentageFull -

(int) Connections that have been abandoned (timed out) wont get closed and reported up unless - the number of connections in use are above the percentage defined by abandonWhenPercentageFull. - The value should be between 0-100. - The default value is 0, which implies that connections are eligible for closure as soon - as removeAbandonedTimeout has been reached.

-
maxAge -

(long) Time in milliseconds to keep this connection. When a connection is returned to the pool, - the pool will check to see if the now - time-when-connected > maxAge has been reached, - and if so, it closes the connection rather than returning it to the pool. - The default value is 0, which implies that connections will be left open and no age check - will be done upon returning the connection to the pool.

-
useEquals -

(boolean) Set to true if you wish the ProxyConnection class to use String.equals and set to false - when you wish to use == when comparing method names. This property does not apply to added interceptors as those are configured individually. - The default value is true. -

-
suspectTimeout -

(int) Timeout value in seconds. Default value is 0.
- Similar to to the removeAbandonedTimeout value but instead of treating the connection - as abandoned, and potentially closing the connection, this simply logs the warning if - logAbandoned is set to true. If this value is equal or less than 0, no suspect - checking will be performed. Suspect checking only takes place if the timeout value is larger than 0 and - the connection was not abandoned or if abandon check is disabled. If a connection is suspect a WARN message gets - logged and a JMX notification gets sent once. -

-
rollbackOnReturn -

(boolean) If autoCommit==false then the pool can terminate the transaction by calling rollback on the connection as it is returned to the pool - Default value is false.
-

-
commitOnReturn -

(boolean) If autoCommit==false then the pool can complete the transaction by calling commit on the connection as it is returned to the pool - If rollbackOnReturn==true then this attribute is ignored. - Default value is false.
-

-
alternateUsernameAllowed -

(boolean) By default, the jdbc-pool will ignore the - DataSource.getConnection(username,password) - call, and simply return a previously pooled connection under the globally configured properties username and password, for performance reasons. -

-

- The pool can however be configured to allow use of different credentials - each time a connection is requested. To enable the functionality described in the - DataSource.getConnection(username,password) - call, simply set the property alternateUsernameAllowed - to true.
- Should you request a connection with the credentials user1/password1 and the connection - was previously connected using different user2/password2, the connection will be closed, - and reopened with the requested credentials. This way, the pool size is still managed - on a global level, and not on a per schema level.
- The default value is false.
- This property was added as an enhancement to bug 50025. -

-
dataSource -

(javax.sql.DataSource) Inject a data source to the connection pool, and the pool will use the data source to retrieve connections instead of establishing them using the java.sql.Driver interface. - This is useful when you wish to pool XA connections or connections established using a data source instead of a connection string. Default value is null -

-
dataSourceJNDI -

(String) The JNDI name for a data source to be looked up in JNDI and then used to establish connections to the database. See the dataSource attribute. Default value is null -

-
useDisposableConnectionFacade -

(boolean) Set this to true if you wish to put a facade on your connection so that it cannot be reused after it has been closed. This prevents a thread holding on to a - reference of a connection it has already called closed on, to execute queries on it. Default value is true. -

-
logValidationErrors -

(boolean) Set this to true to log errors during the validation phase to the log file. If set to true, errors will be logged as SEVERE. Default value is false for backwards compatibility. -

-
propagateInterruptState -

(boolean) Set this to true to propagate the interrupt state for a thread that has been interrupted (not clearing the interrupt state). Default value is false for backwards compatibility. -

-
-
-
Advanced usage
-
JDBC interceptors
-

To see an example of how to use an interceptor, take a look at - org.apache.tomcat.jdbc.pool.interceptor.ConnectionState. - This simple interceptor is a cache of three attributes, transaction isolation level, auto commit and read only state, - in order for the system to avoid not needed roundtrips to the database. -

-

Further interceptors will be added to the core of the pool as the need arises. Contributions are always welcome!

-

Interceptors are of course not limited to just java.sql.Connection but can be used to wrap any - of the results from a method invokation as well. You could build query performance analyzer that provides JMX notifications when a - query is running longer than the expected time.

-
-
Configuring JDBC interceptors
-

Configuring JDBC interceptors is done using the jdbcInterceptors property. - The property contains a list of semicolon separated class names. If the - classname is not fully qualified it will be prefixed with the - org.apache.tomcat.jdbc.pool.interceptor. prefix. -

-

Example:
- - jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState; - org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" - -
- is the same as -
- jdbcInterceptors="ConnectionState;StatementFinalizer" -

-

- Interceptors can have properties as well. Properties for an interceptor - are specified within parentheses after the class name. Several properties - are separated by commas. -

-

Example:
- - jdbcInterceptors="ConnectionState;StatementFinalizer(useEquals=true)" - -

-

- Extra whitespace characters around class names, property names and values - are ignored. -

-
-
org.apache.tomcat.jdbc.pool.JdbcInterceptor
-

Abstract base class for all interceptors, can not be instantiated.

-
AttributeDescription
useEquals -

(boolean) Set to true if you wish the ProxyConnection class to use String.equals and set to false - when you wish to use == when comparing method names. - The default value is true. -

-
-
-
org.apache.tomcat.jdbc.pool.interceptor.ConnectionState
-

Caches the connection for the following attributes autoCommit, readOnly, - transactionIsolation and catalog. - It is a performance enhancement to avoid roundtrip to the database when getters are called or setters are called with an already set value. -

-
AttributeDescription
-
-
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer
-

Keeps track of all statements created using createStatement, prepareStatement or prepareCall - and closes these statements when the connection is returned to the pool. -

-
AttributeDescription
-
-
org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor
-

See 48392. Interceptor to wrap statements and result sets in order to prevent access to the actual connection - using the methods ResultSet.getStatement().getConnection() and Statement.getConnection() -

-
AttributeDescription
-
-
org.apache.tomcat.jdbc.pool.interceptor.QueryTimeoutInterceptor
-

Automatically calls java.sql.Statement.setQueryTimeout(seconds) when a new statement is created. - The pool itself doesn't timeout the query, it is still up to the JDBC driver to enforce query timeouts. -

-
AttributeDescription
queryTimeout -

(int as String) The number of seconds to set for the query timeout - The default value is 1000 milliseconds. -

-
-
-
org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport
-

Keeps track of query performance and issues log entries when queries exceed a time threshold of fail. - The log level used is WARN -

-
AttributeDescription
threshold -

(int as String) The number of milliseconds a query has to exceed before issuing a log alert. - The default value is 1000 milliseconds. -

-
maxQueries -

(int as String) The maximum number of queries to keep track of in order to preserve memory space - The default value is 1000. -

-
-
-
org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx
-

Extends the SlowQueryReport and in addition to log entries it issues JMX notification - for monitoring tools to react to. Inherits all the attributes from its parent class. - This class uses Tomcat's JMX engine so it wont work outside of the Tomcat container. - By default, JMX notifications are sent through the ConnectionPool mbean if it is enabled. - The SlowQueryReportJmx can also register an MBean if notifyPool=false -

-
AttributeDescription
notifyPool -

(boolean as String) Set to false if you want JMX notifications to go to the SlowQueryReportJmx MBean - The default value is true. -

-
objectName -

(String) Define a valid javax.management.ObjectName string that will be used to register this object with the platform mbean server - The default value is null and the object will be registered using - tomcat.jdbc:type=org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx,name=the-name-of-the-pool -

-
-
-
org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer
-

- The abandoned timer starts when a connection is checked out from the pool. - This means if you have a 30second timeout and run 10x10second queries using the connection - it will be marked abandoned and potentially reclaimed depending on the abandonWhenPercentageFull - attribute. - Using this interceptor it will reset the checkout timer every time you perform an operation on the connection or execute a - query successfully. -

-
AttributeDescription
-
-
Code Example
-

Other examples of Tomcat configuration for JDBC usage can be found in the Tomcat documentation.

-
Plain Ol' Java
-

Here is a simple example of how to create and use a data source.

-
-  import java.sql.Connection;
-  import java.sql.ResultSet;
-  import java.sql.Statement;
-
-  import org.apache.tomcat.jdbc.pool.DataSource;
-  import org.apache.tomcat.jdbc.pool.PoolProperties;
-
-  public class SimplePOJOExample {
-
-      public static void main(String[] args) throws Exception {
-          PoolProperties p = new PoolProperties();
-          p.setUrl("jdbc:mysql://localhost:3306/mysql");
-          p.setDriverClassName("com.mysql.jdbc.Driver");
-          p.setUsername("root");
-          p.setPassword("password");
-          p.setJmxEnabled(true);
-          p.setTestWhileIdle(false);
-          p.setTestOnBorrow(true);
-          p.setValidationQuery("SELECT 1");
-          p.setTestOnReturn(false);
-          p.setValidationInterval(30000);
-          p.setTimeBetweenEvictionRunsMillis(30000);
-          p.setMaxActive(100);
-          p.setInitialSize(10);
-          p.setMaxWait(10000);
-          p.setRemoveAbandonedTimeout(60);
-          p.setMinEvictableIdleTimeMillis(30000);
-          p.setMinIdle(10);
-          p.setLogAbandoned(true);
-          p.setRemoveAbandoned(true);
-          p.setJdbcInterceptors(
-            "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
-            "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
-          DataSource datasource = new DataSource();
-          datasource.setPoolProperties(p);
-
-          Connection con = null;
-          try {
-            con = datasource.getConnection();
-            Statement st = con.createStatement();
-            ResultSet rs = st.executeQuery("select * from user");
-            int cnt = 1;
-            while (rs.next()) {
-                System.out.println((cnt++)+". Host:" +rs.getString("Host")+
-                  " User:"+rs.getString("User")+" Password:"+rs.getString("Password"));
-            }
-            rs.close();
-            st.close();
-          } finally {
-            if (con!=null) try {con.close();}catch (Exception ignore) {}
-          }
-      }
-
-  }
-
-
-
As a Resource
-

And here is an example on how to configure a resource for JNDI lookups

-
-<Resource name="jdbc/TestDB"
-          auth="Container"
-          type="javax.sql.DataSource"
-          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
-          testWhileIdle="true"
-          testOnBorrow="true"
-          testOnReturn="false"
-          validationQuery="SELECT 1"
-          validationInterval="30000"
-          timeBetweenEvictionRunsMillis="30000"
-          maxActive="100"
-          minIdle="10"
-          maxWait="10000"
-          initialSize="10"
-          removeAbandonedTimeout="60"
-          removeAbandoned="true"
-          logAbandoned="true"
-          minEvictableIdleTimeMillis="30000"
-          jmxEnabled="true"
-          jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
-            org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
-          username="root"
-          password="password"
-          driverClassName="com.mysql.jdbc.Driver"
-          url="jdbc:mysql://localhost:3306/mysql"/>
-
- -
-
Asynchronous Connection Retrieval
-

The Tomcat JDBC connection pool supports asynchronous connection retrieval without adding additional threads to the - pool library. It does this by adding a method to the data source called Future<Connection> getConnectionAsync(). - In order to use the async retrieval, two conditions must be met: -

    -
  1. You must configure the fairQueue property to be true.
  2. -
  3. You will have to cast the data source to org.apache.tomcat.jdbc.pool.DataSource
  4. -
- An example of using the async feature is show below. -
-  Connection con = null;
-  try {
-    Future<Connection> future = datasource.getConnectionAsync();
-    while (!future.isDone()) {
-      System.out.println("Connection is not yet available. Do some background work");
-      try {
-        Thread.sleep(100); //simulate work
-      }catch (InterruptedException x) {
-        Thread.currentThread().interrupt();
-      }
-    }
-    con = future.get(); //should return instantly
-    Statement st = con.createStatement();
-    ResultSet rs = st.executeQuery("select * from user");
-
-

-
-
Interceptors
-

Interceptors are a powerful way to enable, disable or modify functionality on a specific connection or its sub components. - There are many different use cases for when interceptors are useful. By default, and for performance reasons, the connection pool is stateless. - The only state the pool itself inserts are defaultAutoCommit, defaultReadOnly, defaultTransactionIsolation, defaultCatalog if - these are set. These 4 properties are only set upon connection creation. Should these properties be modified during the usage of the connection, - the pool itself will not reset them.

-

An interceptor has to extend the org.apache.tomcat.jdbc.pool.JdbcInterceptor class. This class is fairly simple, - You will need to have a no arg constructor

-
-  public JdbcInterceptor() {
-  }
-
-

- When a connection is borrowed from the pool, the interceptor can initialize or in some other way react to the event by implementing the -

-  public abstract void reset(ConnectionPool parent, PooledConnection con);
-
- method. This method gets called with two parameters, a reference to the connection pool itself ConnectionPool parent - and a reference to the underlying connection PooledConnection con. -

-

- When a method on the java.sql.Connection object is invoked, it will cause the -

-  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
-
- method to get invoked. The Method method is the actual method invoked, and Object[] args are the arguments. - To look at a very simple example, where we demonstrate how to make the invokation to java.sql.Connection.close() a noop - if the connection has been closed -
-  if (CLOSE_VAL==method.getName()) {
-      if (isClosed()) return null; //noop for already closed.
-  }
-  return super.invoke(proxy,method,args);
-
- There is an observation being made. It is the comparison of the method name. One way to do this would be to do - "close".equals(method.getName()). - Above we see a direct reference comparison between the method name and static final String reference. - According to the JVM spec, method names and static final String end up in a shared constant pool, so the reference comparison should work. - One could of course do this as well: -
-  if (compare(CLOSE_VAL,method)) {
-      if (isClosed()) return null; //noop for already closed.
-  }
-  return super.invoke(proxy,method,args);
-
- The compare(String,Method) will use the useEquals flag on an interceptor and do either reference comparison or - a string value comparison when the useEquals=true flag is set. -

-

Pool start/stop
- When the connection pool is started or closed, you can be notifed. You will only be notified once per interceptor class - even though it is an instance method. and you will be notified using an interceptor currently not attached to a pool. -

-  public void poolStarted(ConnectionPool pool) {
-  }
-
-  public void poolClosed(ConnectionPool pool) {
-  }
-
- When overriding these methods, don't forget to call super if you are extending a class other than JdbcInterceptor -

-

Configuring interceptors
- Interceptors are configured using the jdbcInterceptors property or the setJdbcInterceptors method. - An interceptor can have properties, and would be configured like this -

-  String jdbcInterceptors=
-    "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState(useEquals=true,fast=yes)"
-
-

-

Interceptor properties
- Since interceptors can have properties, you need to be able to read the values of these properties within your - interceptor. Taking an example like the one above, you can override the setProperties method. -

-  public void setProperties(Map<String, InterceptorProperty> properties) {
-     super.setProperties(properties);
-     final String myprop = "myprop";
-     InterceptorProperty p1 = properties.get(myprop);
-     if (p1!=null) {
-         setMyprop(Long.parseLong(p1.getValue()));
-     }
-  }
-
-

-
-
Getting the actual JDBC connection
-

Connection pools create wrappers around the actual connection in order to properly pool them. - We also create interceptors in these wrappers to be able to perform certain functions. - If there is a need to retrieve the actual connection, one can do so using the javax.sql.PooledConnection - interface. -

-  Connection con = datasource.getConnection();
-  Connection actual = ((javax.sql.PooledConnection)con).getConnection();
-
-

-
- -
Building
-

We build the JDBC pool code with 1.6, but it is backwards compatible down to 1.5 for runtime environment. For unit test, we use 1.6 and higher

-

Other examples of Tomcat configuration for JDBC usage can be found in the Tomcat documentation.

-
Building from source
-

Building is pretty simple. The pool has a dependency on tomcat-juli.jar and in case you want the SlowQueryReportJmx

-
-  javac -classpath tomcat-juli.jar \
-        -d . \
-        org/apache/tomcat/jdbc/pool/*.java \
-        org/apache/tomcat/jdbc/pool/interceptor/*.java \
-        org/apache/tomcat/jdbc/pool/jmx/*.java
-
-

- A build file can be found in the Tomcat source repository. -

-

- As a convenience, a build file is also included where a simple build command will generate all files needed. -

-  ant download  (downloads dependencies)
-  ant build     (compiles and generates .jar files)
-  ant dist      (creates a release package)
-  ant test      (runs tests, expects a test database to be setup)
-
-

-

- The system is structured for a Maven build, but does generate release artifacts. Just the library itself. -

-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/jndi-datasource-examples-howto.html b/bundledApps/tomcat/webapps/docs/jndi-datasource-examples-howto.html deleted file mode 100755 index 34d617f0..00000000 --- a/bundledApps/tomcat/webapps/docs/jndi-datasource-examples-howto.html +++ /dev/null @@ -1,666 +0,0 @@ -Apache Tomcat 7 (7.0.30) - JNDI Datasource HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

JNDI Datasource HOW-TO

Table of Contents
- -
Introduction
- -

JNDI Datasource configuration is covered extensively in the -JNDI-Resources-HOWTO. However, feedback from tomcat-user has -shown that specifics for individual configurations can be rather tricky.

- -

Here then are some example configurations that have been posted to -tomcat-user for popular databases and some general tips for db usage.

- -

You should be aware that since these notes are derived from configuration -and/or feedback posted to tomcat-user YMMV :-). Please let us -know if you have any other tested configurations that you feel may be of use -to the wider audience, or if you feel we can improve this section in anyway.

- -

-Please note that JNDI resource configuration changed somewhat between -Tomcat 5.0.x and Tomcat 5.5.x. You will most likely need to modify older -JNDI resource configurations to match the syntax in the example below in order -to make them work in Tomcat 7.x.x. -

- -

-Also, please note that JNDI DataSource configuration in general, and this -tutorial in particular, assumes that you have read and understood the -Context and -Host configuration references, including -the section about Automatic Application Deployment in the latter reference. -

-
DriverManager, the service provider mechanism and memory leaks
- -

java.sql.DriverManager supports the -service -provider mechanism. This feature is that all the available JDBC drivers -that announce themselves by providing a META-INF/services/java.sql.Driver -file are automatically discovered, loaded and registered, -relieving you from the need to load the database driver explicitly before -you create a JDBC connection. -However, the implementation is fundamentally broken in all Java versions for -a servlet container environment. The problem is that -java.sql.DriverManager will scan for the drivers only once.

- -

The JRE Memory Leak Prevention Listener -that is included with Apache Tomcat solves this by triggering the drivers scan -during Tomcat startup. This is enabled by default. It means that only -libraries visible to the listener such as the ones in -$CATALINA_BASE/lib will be scanned for database drivers. -If you are considering disabling this feature, note that -the scan would be triggered by the first web application that is -using JDBC, leading to failures when this web application is reloaded -and for other web applications that rely on this feature. -

- -

Thus, the web applications that have database drivers in their -WEB-INF/lib directory cannot rely on the service provider -mechanism and should register the drivers explicitly.

- -

The list of drivers in java.sql.DriverManager is also -a known source of memory leaks. Any Drivers registered -by a web application must be deregistered when the web application stops. -Tomcat will attempt to automatically discover and deregister any -JDBC drivers loaded by the web application class loader when the web -application stops. -However, it is expected that applications do this for themselves via -a ServletContextListener. -

- -
Database Connection Pool (DBCP) Configurations
- -

The default database connection pool implementation in Apache Tomcat -relies on the libraries from the -Apache Commons project. -The following libraries are used: -

- -
    -
  • Commons DBCP
  • -
  • Commons Pool
  • -
- -

-These libraries are located in a single JAR at -$CATALINA_HOME/lib/tomcat-dbcp.jar. However, -only the classes needed for connection pooling have been included, and the -packages have been renamed to avoid interfering with applications. -

- -

DBCP 1.4 provides support for JDBC 4.0.

- -
Installation
- -

See the -DBCP documentation for a complete list of configuration parameters. -

- -
- -
Preventing database connection pool leaks
- -

-A database connection pool creates and manages a pool of connections -to a database. Recycling and reusing already existing connections -to a database is more efficient than opening a new connection. -

- -

-There is one problem with connection pooling. A web application has -to explicitly close ResultSet's, Statement's, and Connection's. -Failure of a web application to close these resources can result in -them never being available again for reuse, a database connection pool "leak". -This can eventually result in your web application database connections failing -if there are no more available connections.

- -

-There is a solution to this problem. The Apache Commons DBCP can be -configured to track and recover these abandoned database connections. Not -only can it recover them, but also generate a stack trace for the code -which opened these resources and never closed them.

- -

-To configure a DBCP DataSource so that abandoned database connections are -removed and recycled add the following attribute to the -Resource configuration for your DBCP DataSource: -

- -
removeAbandoned="true"
- -

-When available database connections run low DBCP will recover and recycle -any abandoned database connections it finds. The default is false. -

- -

-Use the removeAbandonedTimeout attribute to set the number -of seconds a database connection has been idle before it is considered abandoned. -

- -
removeAbandonedTimeout="60"
- -

-The default timeout for removing abandoned connections is 300 seconds. -

- -

-The logAbandoned attribute can be set to true -if you want DBCP to log a stack trace of the code which abandoned the -database connection resources. -

-
logAbandoned="true"
-

-The default is false. -

- -
- -
MySQL DBCP Example
- -

0. Introduction

-

Versions of MySQL and JDBC -drivers that have been reported to work: -

-
    -
  • MySQL 3.23.47, MySQL 3.23.47 using InnoDB,, MySQL 3.23.58, MySQL 4.0.1alpha
  • -
  • Connector/J 3.0.11-stable (the official JDBC Driver)
  • -
  • mm.mysql 2.0.14 (an old 3rd party JDBC Driver)
  • -
- -

Before you proceed, don't forget to copy the JDBC Driver's jar into $CATALINA_HOME/lib.

- -

1. MySQL configuration

-

-Ensure that you follow these instructions as variations can cause problems. -

- -

Create a new test user, a new database and a single test table. -Your MySQL user must have a password assigned. The driver -will fail if you try to connect with an empty password. -

-
-mysql> GRANT ALL PRIVILEGES ON *.* TO javauser@localhost
-    ->   IDENTIFIED BY 'javadude' WITH GRANT OPTION;
-mysql> create database javatest;
-mysql> use javatest;
-mysql> create table testdata (
-    ->   id int not null auto_increment primary key,
-    ->   foo varchar(25),
-    ->   bar int);
-
-
-Note: the above user should be removed once testing is -complete! -
- -

Next insert some test data into the testdata table. -

-
-mysql> insert into testdata values(null, 'hello', 12345);
-Query OK, 1 row affected (0.00 sec)
-
-mysql> select * from testdata;
-+----+-------+-------+
-| ID | FOO   | BAR   |
-+----+-------+-------+
-|  1 | hello | 12345 |
-+----+-------+-------+
-1 row in set (0.00 sec)
-
-mysql>
-
- -

2. Context configuration

-

Configure the JNDI DataSource in Tomcat by adding a declaration for your -resource to your Context.

-

For example:

-
-<Context>
-
-    <!-- maxActive: Maximum number of database connections in pool. Make sure you
-         configure your mysqld max_connections large enough to handle
-         all of your db connections. Set to -1 for no limit.
-         -->
-
-    <!-- maxIdle: Maximum number of idle database connections to retain in pool.
-         Set to -1 for no limit.  See also the DBCP documentation on this
-         and the minEvictableIdleTimeMillis configuration parameter.
-         -->
-
-    <!-- maxWait: Maximum time to wait for a database connection to become available
-         in ms, in this example 10 seconds. An Exception is thrown if
-         this timeout is exceeded.  Set to -1 to wait indefinitely.
-         -->
-
-    <!-- username and password: MySQL username and password for database connections  -->
-
-    <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
-         org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
-         Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
-         -->
-
-    <!-- url: The JDBC connection url for connecting to your MySQL database.
-         -->
-
-  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
-               maxActive="100" maxIdle="30" maxWait="10000"
-               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
-               url="jdbc:mysql://localhost:3306/javatest"/>
-
-</Context>
-
- -

3. web.xml configuration

- -

Now create a WEB-INF/web.xml for this test application.

-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
-    version="2.4">
-  <description>MySQL Test App</description>
-  <resource-ref>
-      <description>DB Connection</description>
-      <res-ref-name>jdbc/TestDB</res-ref-name>
-      <res-type>javax.sql.DataSource</res-type>
-      <res-auth>Container</res-auth>
-  </resource-ref>
-</web-app>
-
- -

4. Test code

-

Now create a simple test.jsp page for use later. -

-<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
-<sql:query var="rs" dataSource="jdbc/TestDB">
-select id, foo, bar from testdata
-</sql:query>
-
-<html>
-  <head>
-    <title>DB Test</title>
-  </head>
-  <body>
-
-  <h2>Results</h2>
-
-<c:forEach var="row" items="${rs.rows}">
-    Foo ${row.foo}<br/>
-    Bar ${row.bar}<br/>
-</c:forEach>
-
-  </body>
-</html>
-
-

- -

That JSP page makes use of JSTL's -SQL and Core taglibs. You can get it from -Apache Tomcat Taglibs - Standard Tag Library -project — just make sure you get a 1.1.x or later release. Once you have -JSTL, copy jstl.jar and standard.jar to your web app's -WEB-INF/lib directory. - -

- -

Finally deploy your web app into $CATALINA_BASE/webapps either -as a warfile called DBTest.war or into a sub-directory called -DBTest

-

Once deployed, point a browser at -http://localhost:8080/DBTest/test.jsp to view the fruits of -your hard work.

- -
- -
Oracle 8i, 9i & 10g
-

0. Introduction

- -

Oracle requires minimal changes from the MySQL configuration except for the -usual gotchas :-)

-

Drivers for older Oracle versions may be distributed as *.zip files rather -than *.jar files. Tomcat will only use *.jar files installed in -$CATALINA_HOME/lib. Therefore classes111.zip -or classes12.zip will need to be renamed with a .jar -extension. Since jarfiles are zipfiles, there is no need to unzip and jar these -files - a simple rename will suffice.

- -

For Oracle 9i onwards you should use oracle.jdbc.OracleDriver -rather than oracle.jdbc.driver.OracleDriver as Oracle have stated -that oracle.jdbc.driver.OracleDriver is deprecated and support -for this driver class will be discontinued in the next major release. -

- -

1. Context configuration

-

In a similar manner to the mysql config above, you will need to define your -Datasource in your Context. Here we define a -Datasource called myoracle using the thin driver to connect as user scott, -password tiger to the sid called mysid. (Note: with the thin driver this sid is -not the same as the tnsname). The schema used will be the default schema for the -user scott.

- -

Use of the OCI driver should simply involve a changing thin to oci in the URL string. -

-
-<Resource name="jdbc/myoracle" auth="Container"
-              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
-              url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
-              username="scott" password="tiger" maxActive="20" maxIdle="10"
-              maxWait="-1"/>
-
- -

2. web.xml configuration

-

You should ensure that you respect the element ordering defined by the DTD when you -create you applications web.xml file.

-
-<resource-ref>
- <description>Oracle Datasource example</description>
- <res-ref-name>jdbc/myoracle</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
-</resource-ref>
-
-

3. Code example

-

You can use the same example application as above (asuming you create the required DB -instance, tables etc.) replacing the Datasource code with something like

-
-Context initContext = new InitialContext();
-Context envContext  = (Context)initContext.lookup("java:/comp/env");
-DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
-Connection conn = ds.getConnection();
-//etc.
-
-
- - -
PostgreSQL
-

0. Introduction

-

PostgreSQL is configured in a similar manner to Oracle.

- -

1. Required files

-

-Copy the Postgres JDBC jar to $CATALINA_HOME/lib. As with Oracle, the -jars need to be in this directory in order for DBCP's Classloader to find -them. This has to be done regardless of which configuration step you take next. -

- -

2. Resource configuration

- -

-You have two choices here: define a datasource that is shared across all Tomcat -applications, or define a datasource specifically for one application. -

- -

2a. Shared resource configuration

-

-Use this option if you wish to define a datasource that is shared across -multiple Tomcat applications, or if you just prefer defining your datasource -in this file. -

-

This author has not had success here, although others have reported so. -Clarification would be appreciated here.

- -
-<Resource name="jdbc/postgres" auth="Container"
-          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
-          url="jdbc:postgresql://127.0.0.1:5432/mydb"
-          username="myuser" password="mypasswd" maxActive="20" maxIdle="10" maxWait="-1"/>
-
-

2b. Application-specific resource configuration

- -

-Use this option if you wish to define a datasource specific to your application, -not visible to other Tomcat applications. This method is less invasive to your -Tomcat installation. -

- -

-Create a resource definition for your Context. -The Context element should look something like the following. -

- -
-<Context>
-
-<Resource name="jdbc/postgres" auth="Container"
-          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
-          url="jdbc:postgresql://127.0.0.1:5432/mydb"
-          username="myuser" password="mypasswd" maxActive="20" maxIdle="10"
-maxWait="-1"/>
-</Context>
-
- -

3. web.xml configuration

-
-<resource-ref>
- <description>postgreSQL Datasource example</description>
- <res-ref-name>jdbc/postgres</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
-</resource-ref>
-
- -

4. Accessing the datasource

-

-When accessing the datasource programmatically, remember to prepend -java:/comp/env to your JNDI lookup, as in the following snippet of -code. Note also that "jdbc/postgres" can be replaced with any value you prefer, provided -you change it in the above resource definition file as well. -

- -
-InitialContext cxt = new InitialContext();
-if ( cxt == null ) {
-   throw new Exception("Uh oh -- no context!");
-}
-
-DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/postgres" );
-
-if ( ds == null ) {
-   throw new Exception("Data source not found!");
-}
-
- -
-
Non-DBCP Solutions
-

-These solutions either utilise a single connection to the database (not recommended for anything other -than testing!) or some other pooling technology. -

-
Oracle 8i with OCI client
-
Introduction
-

Whilst not strictly addressing the creation of a JNDI DataSource using the OCI client, these notes can be combined with the -Oracle and DBCP solution above.

-

-In order to use OCI driver, you should have an Oracle client installed. You should have installed -Oracle8i(8.1.7) client from cd, and download the suitable JDBC/OCI -driver(Oracle8i 8.1.7.1 JDBC/OCI Driver) from otn.oracle.com. -

-

-After renaming classes12.zip file to classes12.jar -for Tomcat, copy it into $CATALINA_HOME/lib. -You may also have to remove the javax.sql.* classes -from this file depending upon the version of Tomcat and JDK you are using. -

-
- -
Putting it all together
-

-Ensure that you have the ocijdbc8.dll or .so in your $PATH or LD_LIBRARY_PATH - (possibly in $ORAHOME\bin) and also confirm that the native library can be loaded by a simple test program -using System.loadLibrary("ocijdbc8"); -

-

-You should next create a simple test servlet or jsp that has these -critical lines: -

-
-DriverManager.registerDriver(new
-oracle.jdbc.driver.OracleDriver());
-conn =
-DriverManager.getConnection("jdbc:oracle:oci8:@database","username","password");
-
-

-where database is of the form host:port:SID Now if you try to access the URL of your -test servlet/jsp and what you get is a -ServletException with a root cause of java.lang.UnsatisfiedLinkError:get_env_handle. -

-

-First, the UnsatisfiedLinkError indicates that you have -

    -
  • a mismatch between your JDBC classes file and -your Oracle client version. The giveaway here is the message stating that a needed library file cannot be -found. For example, you may be using a classes12.zip file from Oracle Version 8.1.6 with a Version 8.1.5 -Oracle client. The classeXXXs.zip file and Oracle client software versions must match. -
  • -
  • A $PATH, LD_LIBRARY_PATH problem.
  • -
  • It has been reported that ignoring the driver you have downloded from otn and using -the classes12.zip file from the directory $ORAHOME\jdbc\lib will also work. -
  • -
-

-

-Next you may experience the error ORA-06401 NETCMN: invalid driver designator -

-

-The Oracle documentation says : "Cause: The login (connect) string contains an invalid -driver designator. Action: Correct the string and re-submit." - -Change the database connect string (of the form host:port:SID) with this one: -(description=(address=(host=myhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl))) -

-

-Ed. Hmm, I don't think this is really needed if you sort out your TNSNames - but I'm not an Oracle DBA :-) -

-
-
Common Problems
-

Here are some common problems encountered with a web application which -uses a database and tips for how to solve them.

- -
Intermittent Database Connection Failures
-

-Tomcat runs within a JVM. The JVM periodically performs garbage collection -(GC) to remove java objects which are no longer being used. When the JVM -performs GC execution of code within Tomcat freezes. If the maximum time -configured for establishment of a database connection is less than the amount -of time garbage collection took you can get a database connection failure. -

- -

To collect data on how long garbage collection is taking add the --verbose:gc argument to your CATALINA_OPTS -environment variable when starting Tomcat. When verbose gc is enabled -your $CATALINA_BASE/logs/catalina.out log file will include -data for every garbage collection including how long it took.

- -

When your JVM is tuned correctly 99% of the time a GC will take less -than one second. The remainder will only take a few seconds. Rarely, -if ever should a GC take more than 10 seconds.

- -

Make sure that the db connection timeout is set to 10-15 seconds. -For the DBCP you set this using the parameter maxWait.

- -
- -
Random Connection Closed Exceptions
-

-These can occur when one request gets a db connection from the connection -pool and closes it twice. When using a connection pool, closing the -connection just returns it to the pool for reuse by another request, -it doesn't close the connection. And Tomcat uses multiple threads to -handle concurrent requests. Here is an example of the sequence -of events which could cause this error in Tomcat: -

-
-  Request 1 running in Thread 1 gets a db connection.
-
-  Request 1 closes the db connection.
-
-  The JVM switches the running thread to Thread 2
-
-  Request 2 running in Thread 2 gets a db connection
-  (the same db connection just closed by Request 1).
-
-  The JVM switches the running thread back to Thread 1
-
-  Request 1 closes the db connection a second time in a finally block.
-
-  The JVM switches the running thread back to Thread 2
-
-  Request 2 Thread 2 tries to use the db connection but fails
-  because Request 1 closed it.
-
-

-Here is an example of properly written code to use a database connection -obtained from a connection pool: -

-
-  Connection conn = null;
-  Statement stmt = null;  // Or PreparedStatement if needed
-  ResultSet rs = null;
-  try {
-    conn = ... get connection from connection pool ...
-    stmt = conn.createStatement("select ...");
-    rs = stmt.executeQuery();
-    ... iterate through the result set ...
-    rs.close();
-    rs = null;
-    stmt.close();
-    stmt = null;
-    conn.close(); // Return to connection pool
-    conn = null;  // Make sure we don't close it twice
-  } catch (SQLException e) {
-    ... deal with errors ...
-  } finally {
-    // Always make sure result sets and statements are closed,
-    // and the connection is returned to the pool
-    if (rs != null) {
-      try { rs.close(); } catch (SQLException e) { ; }
-      rs = null;
-    }
-    if (stmt != null) {
-      try { stmt.close(); } catch (SQLException e) { ; }
-      stmt = null;
-    }
-    if (conn != null) {
-      try { conn.close(); } catch (SQLException e) { ; }
-      conn = null;
-    }
-  }
-
- -
- -
Context versus GlobalNamingResources
-

- Please note that although the above instructions place the JNDI declarations in a Context - element, it is possible and sometimes desirable to place these declarations in the - GlobalNamingResources section of the server - configuration file. A resource placed in the GlobalNamingResources section will be shared - among the Contexts of the server. -

-
- -
JNDI Resource Naming and Realm Interaction
-

- In order to get Realms to work, the realm must refer to the datasource as - defined in the <GlobalNamingResources> or <Context> section, not a datasource as renamed - using <ResourceLink>. -

-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/jndi-resources-howto.html b/bundledApps/tomcat/webapps/docs/jndi-resources-howto.html deleted file mode 100755 index f4861351..00000000 --- a/bundledApps/tomcat/webapps/docs/jndi-resources-howto.html +++ /dev/null @@ -1,935 +0,0 @@ -Apache Tomcat 7 (7.0.30) - JNDI Resources HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

JNDI Resources HOW-TO

Table of Contents
- -
Introduction
- -

Tomcat provides a JNDI InitialContext implementation -instance for each web application running under it, in a manner that is -compatible with those provided by a -Java Enterprise Edition application -server. The Java EE standard provides a standard set of elements in the -/WEB-INF/web.xml file to reference/define resources.

- -

See the following Specifications for more information about programming APIs -for JNDI, and for the features supported by Java Enterprise Edition (Java EE) -servers, which Tomcat emulates for the services that it provides:

- - -
web.xml configuration
- -

The following elements may be used in the web application deployment -descriptor (/WEB-INF/web.xml) of your web application to define -resources:

-
    -
  • <env-entry> - Environment entry, a - single-value parameter that can be used to configure how the application - will operate.
  • -
  • <resource-ref> - Resource reference, - which is typically to an object factory for resources such as a JDBC - DataSource, a JavaMail Session, or custom - object factories configured into Tomcat.
  • -
  • <resource-env-ref> - Resource - environment reference, a new variation of resource-ref - added in Servlet 2.4 that is simpler to configure for resources - that do not require authentication information.
  • -
- -

Providing that Tomcat is able to identify an appropriate resource factory to -use to create the resource and that no further configuration information is -required, Tomcat will use the information in /WEB-INF/web.xml to -create the resource.

-
context.xml configuration
- -

If Tomcat is unable to identify the appropriate resource factory and/or -additional configuration information is required, additional Tomcat specific -configuration must be specified before Tomcat can create the resource. -Tomcat specific resource configuration is entered in -the <Context> elements that -can be specified in either $CATALINA_BASE/conf/server.xml or, -preferably, the per-web-application context XML file -(META-INF/context.xml).

- -

Tomcat specific resource configuration is performed using the following -elements in the <Context> -element:

- -
    -
  • <Environment> - - Configure names and values for scalar environment entries that will be - exposed to the web application through the JNDI - InitialContext (equivalent to the inclusion of an - <env-entry> element in the web application - deployment descriptor).
  • -
  • <Resource> - - Configure the name and data type of a resource made available to the - application (equivalent to the inclusion of a - <resource-ref> element in the web application - deployment descriptor).
  • -
  • <ResourceLink> - - Add a link to a resource defined in the global JNDI context. Use resource - links to give a web application access to a resource defined in - the <GlobalNamingResources> - child element of the <Server> - element.
  • -
  • <Transaction> - - Add a resource factory for instantiating the UserTransaction object - instance that is available at java:comp/UserTransaction.
  • - -
- -

Any number of these elements may be nested inside a -<Context> element and will -be associated only with that particular web application.

- -

If a resource has been defined in a -<Context> element it is not -necessary for that resource to be defined in /WEB-INF/web.xml. -However, it is recommended to keep the entry in /WEB-INF/web.xml -to document the resource requirements for the web application.

- -

Where the same resource name has been defined for a -<env-entry> element included in the web application -deployment descriptor (/WEB-INF/web.xml) and in an -<Environment> element as part of the -<Context> element for the -web application, the values in the deployment descriptor will take precedence -only if allowed by the corresponding -<Environment> element (by setting the override -attribute to "true").

- -
Global configuration
- -

Tomcat maintains a separate namespace of global resources for the -entire server. These are configured in the - -<GlobalNamingResources> element of -$CATALINA_BASE/conf/server.xml. You may expose these resources to -web applications by using a -<ResourceLink> to -include it in the per-web-application context.

- -

If a resource has been defined using a -<ResourceLink>, it is not -necessary for that resource to be defined in /WEB-INF/web.xml. -However, it is recommended to keep the entry in /WEB-INF/web.xml -to document the resource requirements for the web application.

- -
Using resources
- -

The InitialContext is configured as a web application is -initially deployed, and is made available to web application components (for -read-only access). All configured entries and resources are placed in -the java:comp/env portion of the JNDI namespace, so a typical -access to a resource - in this case, to a JDBC DataSource - -would look something like this:

- -
-// Obtain our environment naming context
-Context initCtx = new InitialContext();
-Context envCtx = (Context) initCtx.lookup("java:comp/env");
-
-// Look up our data source
-DataSource ds = (DataSource)
-  envCtx.lookup("jdbc/EmployeeDB");
-
-// Allocate and use a connection from the pool
-Connection conn = ds.getConnection();
-... use this connection to access the database ...
-conn.close();
-
- -
Tomcat Standard Resource Factories
- -

Tomcat includes a series of standard resource factories that can - provide services to your web applications, but give you configuration - flexibility (via the - <Context> element) - without modifying the web application or the deployment descriptor. Each - subsection below details the configuration and usage of the standard resource - factories.

- -

See Adding Custom - Resource Factories for information about how to create, install, - configure, and use your own custom resource factory classes with - Tomcat.

- -

NOTE - Of the standard resource factories, only the - "JDBC Data Source" and "User Transaction" factories are mandated to - be available on other platforms, and then they are required only if - the platform implements the Java Enterprise Edition (Java EE) specs. - All other standard resource factories, plus custom resource factories - that you write yourself, are specific to Tomcat and cannot be assumed - to be available on other containers.

- -
Generic JavaBean Resources
- -

0. Introduction

- -

This resource factory can be used to create objects of any - Java class that conforms to standard JavaBeans naming conventions (i.e. - it has a zero-arguments constructor, and has property setters that - conform to the setFoo() naming pattern. The resource factory will - create a new instance of the appropriate bean class every time a - lookup() for this entry is made.

- -

The steps required to use this facility are described below.

- -

1. Create Your JavaBean Class

- -

Create the JavaBean class which will be instantiated each time - that the resource factory is looked up. For this example, assume - you create a class com.mycompany.MyBean, which looks - like this:

- -
-package com.mycompany;
-
-public class MyBean {
-
-  private String foo = "Default Foo";
-
-  public String getFoo() {
-    return (this.foo);
-  }
-
-  public void setFoo(String foo) {
-    this.foo = foo;
-  }
-
-  private int bar = 0;
-
-  public int getBar() {
-    return (this.bar);
-  }
-
-  public void setBar(int bar) {
-    this.bar = bar;
-  }
-
-
-}
-
- -

2. Declare Your Resource Requirements

- -

Next, modify your web application deployment descriptor - (/WEB-INF/web.xml) to declare the JNDI name under which - you will request new instances of this bean. The simplest approach is - to use a <resource-env-ref> element, like this:

- -
-<resource-env-ref>
-  <description>
-    Object factory for MyBean instances.
-  </description>
-  <resource-env-ref-name>
-    bean/MyBeanFactory
-  </resource-env-ref-name>
-  <resource-env-ref-type>
-    com.mycompany.MyBean
-  </resource-env-ref-type>
-</resource-env-ref>
-
- -

WARNING - Be sure you respect the element ordering - that is required by the DTD for web application deployment descriptors! - See the - Servlet - Specification for details.

- -

3. Code Your Application's Use Of This Resource

- -

A typical use of this resource environment reference might look - like this:

- -
-Context initCtx = new InitialContext();
-Context envCtx = (Context) initCtx.lookup("java:comp/env");
-MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");
-
-writer.println("foo = " + bean.getFoo() + ", bar = " +
-               bean.getBar());
-
- -

4. Configure Tomcat's Resource Factory

- -

To configure Tomcat's resource factory, add an element like this to the - <Context> element for - this web application.

- -
-<Context ...>
-  ...
-  <Resource name="bean/MyBeanFactory" auth="Container"
-            type="com.mycompany.MyBean"
-            factory="org.apache.naming.factory.BeanFactory"
-            bar="23"/>
-  ...
-</Context>
-
- -

Note that the resource name (here, bean/MyBeanFactory - must match the value specified in the web application deployment - descriptor. We are also initializing the value of the bar - property, which will cause setBar(23) to be called before - the new bean is returned. Because we are not initializing the - foo property (although we could have), the bean will - contain whatever default value is set up by its constructor.

- -
- - -
UserDatabase Resources
- -

0. Introduction

- -

UserDatabase resources are typically configured as global resources for - use by a UserDatabase realm. Tomcat includes a UserDatabaseFactoory that - creates UserDatabase resources backed by an XML file - usually - tomcat-users.xml

- -

The steps required to set up a global UserDatabase resource are described - below.

- -

1. Create/edit the XML file

- -

The XMl file is typically located at - $CATALINA_BASE/conf/tomcat-users.xml however, you are free to - locate the file anywhere on the file system. It is recommended that the XML - files are placed in $CATALINA_BASE/conf. A typical XML would - look like:

- -
-<?xml version='1.0' encoding='utf-8'?>
-<tomcat-users>
-  <role rolename="tomcat"/>
-  <role rolename="role1"/>
-  <user username="tomcat" password="tomcat" roles="tomcat"/>
-  <user username="both" password="tomcat" roles="tomcat,role1"/>
-  <user username="role1" password="tomcat" roles="role1"/>
-</tomcat-users>
-
- -

2. Declare Your Resource

- -

Next, modify $CATALINA_BASE/conf/server.xml to create the - UserDatabase resource based on your XMl file. It should look something like - this:

- -
-<Resource name="UserDatabase"
-          auth="Container"
-          type="org.apache.catalina.UserDatabase"
-          description="User database that can be updated and saved"
-          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
-          pathname="conf/tomcat-users.xml"
-          readonly="false" />
-
- -

The pathname attribute can be absolute or relative. If - relative, it is relative to $CATALINA_BASE.

- -

The readonly attribute is optional and defaults to - true if not supplied. If the XML is writeable then it will be - written to when Tomcat starts. WARNING: When the file is - written it will inherit the default file permissions for the user Tomcat - is running as. Ensure that these are appropriate to maintain the security - of your installation.

- -

3. Configure the Realm

- -

Configure a UserDatabase Realm to use this resource as described in the - Realm configuration documentation.

- -
- - -
JavaMail Sessions
- -

0. Introduction

- -

In many web applications, sending electronic mail messages is a - required part of the system's functionality. The - Java Mail API - makes this process relatively straightforward, but requires many - configuration details that the client application must be aware of - (including the name of the SMTP host to be used for message sending).

- -

Tomcat includes a standard resource factory that will create - javax.mail.Session session instances for you, already - configured to connect to an SMTP server. - In this way, the application is totally insulated from changes in the - email server configuration environment - it simply asks for, and receives, - a preconfigured session whenever needed.

- -

The steps required for this are outlined below.

- -

1. Declare Your Resource Requirements

- -

The first thing you should do is modify the web application deployment - descriptor (/WEB-INF/web.xml) to declare the JNDI name under - which you will look up preconfigured sessions. By convention, all such - names should resolve to the mail subcontext (relative to the - standard java:comp/env naming context that is the root of - all provided resource factories. A typical web.xml entry - might look like this:

-
-<resource-ref>
-  <description>
-    Resource reference to a factory for javax.mail.Session
-    instances that may be used for sending electronic mail
-    messages, preconfigured to connect to the appropriate
-    SMTP server.
-  </description>
-  <res-ref-name>
-    mail/Session
-  </res-ref-name>
-  <res-type>
-    javax.mail.Session
-  </res-type>
-  <res-auth>
-    Container
-  </res-auth>
-</resource-ref>
-
- -

WARNING - Be sure you respect the element ordering - that is required by the DTD for web application deployment descriptors! - See the - Servlet - Specification for details.

- -

2. Code Your Application's Use Of This Resource

- -

A typical use of this resource reference might look like this:

-
-Context initCtx = new InitialContext();
-Context envCtx = (Context) initCtx.lookup("java:comp/env");
-Session session = (Session) envCtx.lookup("mail/Session");
-
-Message message = new MimeMessage(session);
-message.setFrom(new InternetAddress(request.getParameter("from")));
-InternetAddress to[] = new InternetAddress[1];
-to[0] = new InternetAddress(request.getParameter("to"));
-message.setRecipients(Message.RecipientType.TO, to);
-message.setSubject(request.getParameter("subject"));
-message.setContent(request.getParameter("content"), "text/plain");
-Transport.send(message);
-
- -

Note that the application uses the same resource reference name - that was declared in the web application deployment descriptor. This - is matched up against the resource factory that is configured in the - <Context> element - for the web application as described below.

- -

3. Configure Tomcat's Resource Factory

- -

To configure Tomcat's resource factory, add an elements like this to the - <Context> element for - this web application.

- -
-<Context ...>
-  ...
-  <Resource name="mail/Session" auth="Container"
-            type="javax.mail.Session"
-            mail.smtp.host="localhost"/>
-  ...
-</Context>
-
- -

Note that the resource name (here, mail/Session) must - match the value specified in the web application deployment descriptor. - Customize the value of the mail.smtp.host parameter to - point at the server that provides SMTP service for your network.

- -

Additional resource attributes and values will be converted to properties - and values and passed to - javax.mail.Session.getInstance(java.util.Properties) as part of - the java.util.Properties collection. In addition to the - properties defined in Annex A of the JavaMail specification, individual - providers may also support additional properties like password. -

- -

4. Install the JavaMail libraries

- -

- Download the JavaMail API.

- -

Unpackage the distribution and place mail.jar into $CATALINA_HOME/lib so - that it is available to Tomcat during the initialization of the mail Session - Resource. Note: placing this jar in both $CATALINA_HOME/lib - and a web application's lib folder will cause an error, so ensure you have - it in the $CATALINA_HOME/lib location only. -

- -

5. Restart Tomcat

- -

For the additional JAR to be visible to Tomcat, it is necessary for the - Tomcat instance to be restarted.

- - -

Example Application

- -

The /examples application included with Tomcat contains - an example of utilizing this resource factory. It is accessed via the - "JSP Examples" link. The source code for the servlet that actually - sends the mail message is in - /WEB-INF/classes/SendMailServlet.java.

- -

WARNING - The default configuration assumes that there - is an SMTP server listing on port 25 on localhost. If this is - not the case, edit the - <Context> element for - this web application and modify the parameter value for the - mail.smtp.host parameter to be the host name of an SMTP server - on your network.

- -
- -
JDBC Data Sources
- -

0. Introduction

- -

Many web applications need to access a database via a JDBC driver, - to support the functionality required by that application. The Java EE - Platform Specification requires Java EE Application Servers to make - available a DataSource implementation (that is, a connection - pool for JDBC connections) for this purpose. Tomcat offers exactly - the same support, so that database-based applications you develop on - Tomcat using this service will run unchanged on any Java EE server.

- -

For information about JDBC, you should consult the following:

- - -

NOTE - The default data source support in Tomcat - is based on the DBCP connection pool from the - Commons - project. However, it is possible to use any other connection pool - that implements javax.sql.DataSource, by writing your - own custom resource factory, as described - below.

- -

1. Install Your JDBC Driver

- -

Use of the JDBC Data Sources JNDI Resource Factory requires - that you make an appropriate JDBC driver available to both Tomcat internal - classes and to your web application. This is most easily accomplished by - installing the driver's JAR file(s) into the - $CATALINA_HOME/lib directory, which makes the driver - available both to the resource factory and to your application.

- -

2. Declare Your Resource Requirements

- -

Next, modify the web application deployment descriptor - (/WEB-INF/web.xml) to declare the JNDI name under - which you will look up preconfigured data source. By convention, all such - names should resolve to the jdbc subcontext (relative to the - standard java:comp/env naming context that is the root of - all provided resource factories. A typical web.xml entry - might look like this:

-
-<resource-ref>
-  <description>
-    Resource reference to a factory for java.sql.Connection
-    instances that may be used for talking to a particular
-    database that is configured in the <Context>
-    configurartion for the web application.
-  </description>
-  <res-ref-name>
-    jdbc/EmployeeDB
-  </res-ref-name>
-  <res-type>
-    javax.sql.DataSource
-  </res-type>
-  <res-auth>
-    Container
-  </res-auth>
-</resource-ref>
-
- -

WARNING - Be sure you respect the element ordering - that is required by the DTD for web application deployment descriptors! - See the - Servlet - Specification for details.

- -

3. Code Your Application's Use Of This Resource

- -

A typical use of this resource reference might look like this:

-
-Context initCtx = new InitialContext();
-Context envCtx = (Context) initCtx.lookup("java:comp/env");
-DataSource ds = (DataSource)
-  envCtx.lookup("jdbc/EmployeeDB");
-
-Connection conn = ds.getConnection();
-... use this connection to access the database ...
-conn.close();
-
- -

Note that the application uses the same resource reference name that was - declared in the web application deployment descriptor. This is matched up - against the resource factory that is configured in the - <Context> element for - the web application as described below.

- -

4. Configure Tomcat's Resource Factory

- -

To configure Tomcat's resource factory, add an element like this to the - <Context> element for - the web application.

- -
-<Context ...>
-  ...
-  <Resource name="jdbc/EmployeeDB"
-            auth="Container"
-            type="javax.sql.DataSource"
-            username="dbusername"
-            password="dbpassword"
-            driverClassName="org.hsql.jdbcDriver"
-            url="jdbc:HypersonicSQL:database"
-            maxActive="8"
-            maxIdle="4"/>
-  ...
-</Context>
-
- -

Note that the resource name (here, jdbc/EmployeeDB) must - match the value specified in the web application deployment descriptor.

- -

This example assumes that you are using the HypersonicSQL database - JDBC driver. Customize the driverClassName and - driverName parameters to match your actual database's - JDBC driver and connection URL.

- -

The configuration properties for Tomcat's standard data source - resource factory - (org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory) are - as follows:

-
    -
  • driverClassName - Fully qualified Java class name - of the JDBC driver to be used.
  • -
  • username - Database username to be passed to our - JDBC driver.
  • -
  • password - Database password to be passed to our - JDBC driver.
  • -
  • url - Connection URL to be passed to our JDBC driver. - (For backwards compatibility, the property driverName - is also recognized.)
  • -
  • initialSize - The initial number of connections - that will be created in the pool during pool initialization. Default: 0
  • -
  • maxActive - The maximum number of connections - that can be allocated from this pool at the same time. Default: 8
  • -
  • minIdle - The minimum number of connections that - will sit idle in this pool at the same time. Default: 0
  • -
  • maxIdle - The maximum number of connections that - can sit idle in this pool at the same time. Default: 8
  • -
  • maxWait - The maximum number of milliseconds that the - pool will wait (when there are no available connections) for a - connection to be returned before throwing an exception. Default: -1 (infinite)
  • -
-

Some additional properties handle connection validation:

-
    -
  • validationQuery - SQL query that can be used by the - pool to validate connections before they are returned to the - application. If specified, this query MUST be an SQL SELECT - statement that returns at least one row.
  • -
  • validationQueryTimeout - Timeout in seconds - for the validation query to return. Default: -1 (infinite)
  • -
  • testOnBorrow - true or false: whether a connection - should be validated using the validation query each time it is - borrowed from the pool. Default: true
  • -
  • testOnReturn - true or false: whether a connection - should be validated using the validation query each time it is - returned to the pool. Default: false
  • -
-

The optional evictor thread is responsible for shrinking the pool - by removing any conections which are idle for a long time. The evictor - does not respect minIdle. Note that you do not need to - activate the evictor thread if you only want the pool to shrink according - to the configured maxIdle property.

-

The evictor is disabled by default and can be configured using - the following properties:

-
    -
  • timeBetweenEvictionRunsMillis - The number of - milliseconds between consecutive runs of the evictor. - Default: -1 (disabled)
  • -
  • numTestsPerEvictionRun - The number of connections - that will be checked for idleness by the evitor during each - run of the evictor. Default: 3
  • -
  • minEvictableIdleTimeMillis - The idle time in - milliseconds after which a connection can be removed from the pool - by the evictor. Default: 30*60*1000 (30 minutes)
  • -
  • testWhileIdle - true or false: whether a connection - should be validated by the evictor thread using the validation query - while sitting idle in the pool. Default: false
  • -
-

Another optional feature is the removal of abandoned connections. - A connection is called abandoned if the application does not return it - to the pool for a long time. The pool can close such connections - automatically and remove them from the pool. This is a workaround - for applications leaking connections.

-

The abandoning feature is disabled by default and can be configured - using the following properties:

-
    -
  • removeAbandoned - true or false: whether to - remove abandoned connections from the pool. Default: false
  • -
  • removeAbandonedTimeout - The number of - seconds after which a borrowed connection is assumed to be abandoned. - Default: 300
  • -
  • logAbandoned - true or false: whether to log - stack traces for application code which abandoned a statement - or connection. This adds serious overhead. Default: false
  • -
-

Finally there are various properties that allow further fine tuning - of the pool behaviour:

-
    -
  • defaultAutoCommit - true or false: default - auto-commit state of the connections created by this pool. - Default: true
  • -
  • defaultReadOnly - true or false: default - read-only state of the connections created by this pool. - Default: false
  • -
  • defaultTransactionIsolation - This sets the - default transaction isolation level. Can be one of - NONE, READ_COMMITTED, - READ_UNCOMMITTED, REPEATABLE_READ, - SERIALIZABLE. Default: no default set
  • -
  • poolPreparedStatements - true or false: whether to - pool PreparedStatements and CallableStatements. Default: false
  • -
  • maxOpenPreparedStatements - The maximum number of open - statements that can be allocated from the statement pool at the same time. - Default: -1 (unlimited)
  • -
  • defaultCatalog - The name of the default catalog. - Default: not set
  • -
  • connectionInitSqls - A list of SQL statements - run once after a Connection is created. Separate multiple statements - by semicolons (;). Default: no statement
  • -
  • connectionProperties - A list of driver specific - properties passed to the driver for creating connections. Each - property is given as name=value, multiple properties - are separated by semicolons (;). Default: no properties
  • -
  • accessToUnderlyingConnectionAllowed - true or false: whether - accessing the underlying connections is allowed. Default: false
  • -
-

For more details, please refer to the commons-dbcp documentation.

- -
- -
Adding Custom Resource Factories
- -

If none of the standard resource factories meet your needs, you can write - your own factory and integrate it into Tomcat, and then configure the use - of this factory in the - <Context> element for - the web application. In the example below, we will create a factory that only - knows how to create com.mycompany.MyBean beans from the - Generic JavaBean Resources example - above.

- -

1. Write A Resource Factory Class

- -

You must write a class that implements the JNDI service provider - javax.naming.spi.ObjectFactory inteface. Every time your - web application calls lookup() on a context entry that is - bound to this factory, the getObjectInstance() method is - called, with the following arguments:

-
    -
  • Object obj - The (possibly null) object containing - location or reference information that can be used in creating an object. - For Tomcat, this will always be an object of type - javax.naming.Reference, which contains the class name of - this factory class, as well as the configuration properties (from the - <Context> for the - web application) to use in creating objects to be returned.
  • -
  • Name name - The name to which this factory is bound - relative to nameCtx, or null if no name - is specified.
  • -
  • Context nameCtx - The context relative to which the - name parameter is specified, or null if - name is relative to the default initial context.
  • -
  • Hashtable environment - The (possibly null) - environment that is used in creating this object. This is generally - ignored in Tomcat object factories.
  • -
- -

To create a resource factory that knows how to produce MyBean - instances, you might create a class like this:

- -
-package com.mycompany;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import javax.naming.Context;
-import javax.naming.Name;
-import javax.naming.NamingException;
-import javax.naming.RefAddr;
-import javax.naming.Reference;
-import javax.naming.spi.ObjectFactory;
-
-public class MyBeanFactory implements ObjectFactory {
-
-  public Object getObjectInstance(Object obj,
-      Name name, Context nameCtx, Hashtable environment)
-      throws NamingException {
-
-      // Acquire an instance of our specified bean class
-      MyBean bean = new MyBean();
-
-      // Customize the bean properties from our attributes
-      Reference ref = (Reference) obj;
-      Enumeration addrs = ref.getAll();
-      while (addrs.hasMoreElements()) {
-          RefAddr addr = (RefAddr) addrs.nextElement();
-          String name = addr.getType();
-          String value = (String) addr.getContent();
-          if (name.equals("foo")) {
-              bean.setFoo(value);
-          } else if (name.equals("bar")) {
-              try {
-                  bean.setBar(Integer.parseInt(value));
-              } catch (NumberFormatException e) {
-                  throw new NamingException("Invalid 'bar' value " + value);
-              }
-          }
-      }
-
-      // Return the customized instance
-      return (bean);
-
-  }
-
-}
-
- -

In this example, we are unconditionally creating a new instance of - the com.mycompany.MyBean class, and populating its properties - based on the parameters included in the <ResourceParams> - element that configures this factory (see below). You should note that any - parameter named factory should be skipped - that parameter is - used to specify the name of the factory class itself (in this case, - com.mycompany.MyBeanFactory) rather than a property of the - bean being configured.

- -

For more information about ObjectFactory, see the - JNDI 1.2 Service - Provider Interface (SPI) Specification.

- -

You will need to compile this class against a class path that includes - all of the JAR files in the $CATALINA_HOME/lib directory. When you are through, - place the factory class (and the corresponding bean class) unpacked under - $CATALINA_HOME/lib, or in a JAR file inside - $CATALINA_HOME/lib. In this way, the required class - files are visible to both Catalina internal resources and your web - application.

- -

2. Declare Your Resource Requirements

- -

Next, modify your web application deployment descriptor - (/WEB-INF/web.xml) to declare the JNDI name under which - you will request new instances of this bean. The simplest approach is - to use a <resource-env-ref> element, like this:

- -
-<resource-env-ref>
-  <description>
-    Object factory for MyBean instances.
-  </description>
-  <resource-env-ref-name>
-    bean/MyBeanFactory
-  </resource-env-ref-name>
-  <resource-env-ref-type>
-    com.mycompany.MyBean
-  </resource-env-ref-type>
-<resource-env-ref>
-
- -

WARNING - Be sure you respect the element ordering - that is required by the DTD for web application deployment descriptors! - See the - Servlet - Specification for details.

- -

3. Code Your Application's Use Of This Resource

- -

A typical use of this resource environment reference might look - like this:

- -
-Context initCtx = new InitialContext();
-Context envCtx = (Context) initCtx.lookup("java:comp/env");
-MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");
-
-writer.println("foo = " + bean.getFoo() + ", bar = " +
-               bean.getBar());
-
- -

4. Configure Tomcat's Resource Factory

- -

To configure Tomcat's resource factory, add an elements like this to the - <Context> element for - this web application.

- -
-<Context ...>
-  ...
-  <Resource name="bean/MyBeanFactory" auth="Container"
-            type="com.mycompany.MyBean"
-            factory="com.mycompany.MyBeanFactory"
-            bar="23"/>
-  ...
-</Context>
-
- -

Note that the resource name (here, bean/MyBeanFactory - must match the value specified in the web application deployment - descriptor. We are also initializing the value of the bar - property, which will cause setBar(23) to be called before - the new bean is returned. Because we are not initializing the - foo property (although we could have), the bean will - contain whatever default value is set up by its constructor.

- -

You will also note that, from the application developer's perspective, - the declaration of the resource environment reference, and the programming - used to request new instances, is identical to the approach used for the - Generic JavaBean Resources example. This illustrates one of the - advantages of using JNDI resources to encapsulate functionality - you can - change the underlying implementation without necessarily having to - modify applications using the resources, as long as you maintain - compatible APIs.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/jspapi/index.html b/bundledApps/tomcat/webapps/docs/jspapi/index.html deleted file mode 100755 index 4a73392a..00000000 --- a/bundledApps/tomcat/webapps/docs/jspapi/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - API docs - - - - -The JSP Javadoc is not installed by default. Download and install -the "fulldocs" package to get it. - -You can also access the javadoc online in the Tomcat - -documentation bundle. - - - diff --git a/bundledApps/tomcat/webapps/docs/logging.html b/bundledApps/tomcat/webapps/docs/logging.html deleted file mode 100755 index 0a898e26..00000000 --- a/bundledApps/tomcat/webapps/docs/logging.html +++ /dev/null @@ -1,560 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Logging in Tomcat

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Logging in Tomcat

Table of Contents
- -
Introduction
-

- Logging in Apache Tomcat is implemented with the help of - Apache Commons Logging - library. That library is a thin wrapper above different logging - frameworks. It provides Tomcat with the ability to log - hierarchically across various log levels without the need to rely on a - particular logging implementation. -

- -

- Since Tomcat 6.0, Tomcat uses a private package-renamed implementation of - Apache Commons Logging, to allow web applications to use their own - independent copies of the original Apache Commons Logging library. - In the default distribution this private copy of the library - is simplified and hardcoded to use the java.util.logging framework. -

- -

- To configure Tomcat to use alternative logging frameworks for its internal - logging, one has to replace the logging library with the one that is built - with the full implementation. Such library is provided as an extras - component. Instructions on how to configure Tomcat to use Log4j framework - for its internal logging may be found below. -

- -

- A web application running on Apache Tomcat can: -

-
    -
  • - Use system logging API, java.util.logging. -
  • -
  • - Use the logging API provided by the Java Servlets specification, - javax.servlet.ServletContext.log(...) -
  • -
  • - Use any logging framework of its choice. -
  • -
- -

- The logging frameworks used by different web applications run independently - of each other. See class loading - for more details. - The exception to this rule is java.util.logging, if it used - directly or indirectly by your logging library. That is because it is loaded - by the system and is shared across web applications. -

- -
Java logging API — java.util.logging
- -

- Apache Tomcat has its own implementation of several key elements of - java.util.logging API. This implementation is called "JULI". - The key component there is a custom LogManager implementation, - that is aware of different web applications running on Tomcat (and - their different class loaders). It supports private per-application - logging configurations. It is also notified by Tomcat when a web application - is unloaded from memory, so that the references to its classes can be - cleared, preventing memory leaks. -

- -

- This java.util.logging implementation is enabled by providing - certain system properties when starting Java. The Apache Tomcat startup - scripts do this for you, but if you are using different tools to run - Tomcat (such as jsvc, or running Tomcat from within an IDE), you should - take care of them by yourself. -

- -

- More details about java.util.logging may be found in the documentation - for your JDK and on its Javadoc pages for the java.util.logging - package. -

- -

- More details about Tomcat JULI may be found below. -

- -
- -
Servlets logging API
- -

- The calls to javax.servlet.ServletContext.log(...) to write - log messages are handled by internal Tomcat logging. Such messages are - logged to the category named -

-
org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}]
-

- This logging is performed according to the Tomcat logging configuration. You - cannot overwrite it in a web application. -

- -

- The Servlets logging API predates the java.util.logging API - that is now provided by Java. As such, it does not offer you much options. - E.g., you cannot control the log levels. It can be noted, though, that - in Apache Tomcat implementation the calls to ServletContext.log(String) - or GenericServlet.log(String) are logged at the INFO level. - The calls to ServletContext.log(String, Throwable) or - GenericServlet.log(String, Throwable) - are logged at the ERROR level. -

- -
- -
Console
- -

- When running Tomcat on unixes, the console output is usually redirected - to the file named catalina.out. The name is configurable - using an environment variable. (See the startup scripts). - Whatever is written to System.err/out will be caught into - that file. That may include: -

- -
    -
  • Uncaught exceptions printed by java.lang.ThreadGroup.uncaughtException(..)
  • -
  • Thread dumps, if you requested them via a system signal
  • -
- -

- When running as a service on Windows, the console output is also caught - and redirected, but the file names are different. -

- -

- The default logging configuration in Apache Tomcat writes the same - messages to the console and to a log file. This is great when using - Tomcat for development, but usually is not needed in production. -

- -

- Old applications that still use System.out or System.err - can be tricked by setting swallowOutput attribute on a - Context. If the attribute is set to - true, the calls to System.out/err during request - processing will be intercepted, and their output will be fed to the - logging subsystem using the - javax.servlet.ServletContext.log(...) calls.
- Note, that the swallowOutput feature is - actually a trick, and it has its limitations. - It works only with direct calls to System.out/err, - and only during request processing cycle. It may not work in other - threads that might be created by the application. It cannot be used to - intercept logging frameworks that themselves write to the system streams, - as those start early and may obtain a direct reference to the streams - before the redirection takes place. -

- -
- -
Access logging
- -

- A related, but different feature is access logging. It can be configured - as a valve at the Context, or Host, or Engine. See Valves - documentation for more details. -

- -
- -
Using java.util.logging (default)
- -

- The default implementation of java.util.logging provided in the JDK is too - limited to be useful. A limitation of JDK Logging appears to be the - inability to have per-web application logging, as the configuration is - per-VM. As a result, Tomcat will, in the default configuration, replace the - default LogManager implementation with a container friendly implementation - called JULI, which addresses these shortcomings. It supports the same - configuration mechanisms as the standard JDK java.util.logging, using either - a programmatic approach, or properties files. The main difference is that - per-classloader properties files can be set (which enables easy redeployment - friendly webapp configuration), and the properties files support slightly - extended constructs which allows more freedom for defining handlers and - assigning them to loggers. -

-

- JULI is enabled by default, and supports per classloader configuration, in - addition to the regular global java.util.logging configuration. This means - that logging can be configured at the following layers: -

    -
  • Globally. That is usually done in the - ${catalina.base}/conf/logging.properties file. - The file is specified by the java.util.logging.config.file - System property which is set by the startup scripts. - If it is not readable or is not configured, the default is to use the - ${java.home}/lib/logging.properties file in the JRE. -
  • -
  • In the web application. The file will be - WEB-INF/classes/logging.properties -
  • -
-

-

- The default logging.properties in the JRE specifies a - ConsoleHandler that routes logging to System.err. - The default conf/logging.properties in Apache Tomcat also - adds several FileHandlers that write to files. -

-

- A handler's log level threshold is INFO by default and can be set using - SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL. - You can also target specific packages to collect logging from and specify - a level. -

-

- Here is how you would set debugging from Tomcat. You would need to ensure the - ConsoleHandler's (or FileHandler's') level is also set to collect this threshold, - so FINEST or ALL should be set. Please refer to java.util.logging - documentation in the JDK for the complete details: -

-

-

org.apache.catalina.level=FINEST
-

-

- The configuration used by JULI is extremely similar to the one supported by - plain java.util.logging, but uses a few - extensions to allow better flexibility in assigning loggers. The main - differences are: -

-
    -
  • A prefix may be added to handler names, so that multiple handlers of a - single class may be instantiated. A prefix is a String which starts with a - digit, and ends with '.'. For example, 22foobar. is a valid - prefix.
  • -
  • System property replacement is performed for property values which - contain ${systemPropertyName}.
  • -
  • As in Java 6, loggers can define a list of handlers using the - loggerName.handlers property.
  • -
  • By default, loggers will not delegate to their parent if they have - associated handlers. This may be changed per logger using the - loggerName.useParentHandlers property, which accepts a - boolean value.
  • -
  • The root logger can define its set of handlers using the - .handlers property.
  • -
-

- There are several additional implementation classes, that can be used - together with the ones provided by Java. The notable one is - org.apache.juli.FileHandler. -

-

- org.apache.juli.FileHandler supports buffering of the - logs. The buffering is not enabled by default. To configure it, use the - bufferSize property of a handler. The value of 0 - uses system default buffering (typically an 8K buffer will be used). A - value of <0 forces a writer flush upon each log write. A - value >0 uses a BufferedOutputStream with the defined - value but note that the system default buffering will also be - applied. -

-

- Example logging.properties file to be placed in $CATALINA_BASE/conf: -

-handlers = 1catalina.org.apache.juli.FileHandler, \
-           2localhost.org.apache.juli.FileHandler, \
-           3manager.org.apache.juli.FileHandler, \
-           java.util.logging.ConsoleHandler
-
-.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
-
-############################################################
-# Handler specific properties.
-# Describes specific configuration info for Handlers.
-############################################################
-
-1catalina.org.apache.juli.FileHandler.level = FINE
-1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
-1catalina.org.apache.juli.FileHandler.prefix = catalina.
-
-2localhost.org.apache.juli.FileHandler.level = FINE
-2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
-2localhost.org.apache.juli.FileHandler.prefix = localhost.
-
-3manager.org.apache.juli.FileHandler.level = FINE
-3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
-3manager.org.apache.juli.FileHandler.prefix = manager.
-3manager.org.apache.juli.FileHandler.bufferSize = 16384
-
-java.util.logging.ConsoleHandler.level = FINE
-java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-
-
-############################################################
-# Facility specific properties.
-# Provides extra control for each logger.
-############################################################
-
-org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
-org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \
-   2localhost.org.apache.juli.FileHandler
-
-org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
-org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \
-   3manager.org.apache.juli.FileHandler
-
-# For example, set the org.apache.catalina.util.LifecycleBase logger to log
-# each component that extends LifecycleBase changing state:
-#org.apache.catalina.util.LifecycleBase.level = FINE
-
-

- -

- Example logging.properties for the servlet-examples web application to be - placed in WEB-INF/classes inside the web application: -

-handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
-
-############################################################
-# Handler specific properties.
-# Describes specific configuration info for Handlers.
-############################################################
-
-org.apache.juli.FileHandler.level = FINE
-org.apache.juli.FileHandler.directory = ${catalina.base}/logs
-org.apache.juli.FileHandler.prefix = servlet-examples.
-
-java.util.logging.ConsoleHandler.level = FINE
-java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-
-

- -
Documentation references
-

See the following resources for additional information:

- -
- -
Considerations for productive usage
-

You may want to take note of the following:

-
    -
  • Consider removing ConsoleHandler from configuration.

    -

    By default (thanks to the .handlers setting) logging goes - both to a FileHandler and to a ConsoleHandler. - The output of the latter one is usually captured into a file, such as - catalina.out. Thus you end up with two copies of the same - messages.

    -
  • -
  • Consider removing FileHandlers for the applications - that you do not use. E.g., the one for host-manager.

  • -
  • The handlers by default use the system default encoding to write - the log files. It can be configured with encoding property. - See Javadoc for details.

  • -
  • Consider configuring an Access - log.

  • -
-
- -
Using Log4j
-

- This section explains how to configure Tomcat to use - log4j rather than - java.util.logging for all Tomcat's internal logging. -

-

Note: The steps described in this section are needed - when you want to reconfigure Tomcat to use Apache log4j for its own - logging. These steps are not needed if you just want - to use log4j in your own web application. — In that case, just - put log4j.jar and log4j.properties into - WEB-INF/lib and WEB-INF/classes - of your web application. -

-

- The following steps describe configuring log4j to output Tomcat's - internal logging. -

- -
    -
  1. Create a file called log4j.properties with the - following content and save it into $CATALINA_BASE/lib
  2. -
-
-log4j.rootLogger=INFO, CATALINA
-
-# Define all the appenders
-log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
-log4j.appender.CATALINA.Append=true
-log4j.appender.CATALINA.Encoding=UTF-8
-# Roll-over the log once per day
-log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
-log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
-
-log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
-log4j.appender.LOCALHOST.Append=true
-log4j.appender.LOCALHOST.Encoding=UTF-8
-log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
-log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
-
-log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
-log4j.appender.MANAGER.Append=true
-log4j.appender.MANAGER.Encoding=UTF-8
-log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
-log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
-
-log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
-log4j.appender.HOST-MANAGER.Append=true
-log4j.appender.HOST-MANAGER.Encoding=UTF-8
-log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
-log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
-
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.Encoding=UTF-8
-log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
-
-# Configure which loggers log to which appenders
-log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
-log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
-  INFO, MANAGER
-log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
-  INFO, HOST-MANAGER
-
-
    -
  1. Download Log4J - (v1.2 or later).
  2. - -
  3. Download or build tomcat-juli.jar and - tomcat-juli-adapters.jar that are available as an "extras" - component for Tomcat. See Additional Components - documentation for details.

    -

    This tomcat-juli.jar differs from the default one. It - contains the full Apache Commons Logging implementation and thus is - able to discover the presense of log4j and configure itself.

    -
  4. - -
  5. If you want to configure Tomcat to use log4j globally:

    -
      -
    • Put log4j.jar and - tomcat-juli-adapters.jar from "extras" into - $CATALINA_HOME/lib.
    • -
    • Replace $CATALINA_HOME/bin/tomcat-juli.jar with - tomcat-juli.jar from "extras".
    • -
    -
  6. - -
  7. If you are running Tomcat with separate $CATALINA_HOME and - $CATALINA_BASE and want to configure to use log4j in a single - $CATALINA_BASE only:

    -
      -
    • Create $CATALINA_BASE/bin and - $CATALINA_BASE/lib directories if they do not exist. -
    • -
    • Put log4j.jar and - tomcat-juli-adapters.jar from "extras" into - $CATALINA_BASE/lib
    • -
    • Put tomcat-juli.jar from "extras" as - $CATALINA_BASE/bin/tomcat-juli.jar
    • -
    • If you are running with a - security manager, you - would need to edit the - $CATALINA_BASE/conf/catalina.policy file to adjust - it to using a different copy of tomcat-juli.jar.
    • -
    -
  8. - -
  9. Delete $CATALINA_BASE/conf/logging.properties to - prevent java.util.logging generating zero length log files.

  10. - -
  11. Start Tomcat

  12. -
- -

- This log4j configuration mirrors the default java.util.logging setup - that ships with Tomcat: both the manager and host-manager apps get an - individual log file, and everything else goes to the "catalina.log" log - file. Each file is rolled-over once per day. -

- -

- You can (and should) be more picky about which packages to include - in the logging. Tomcat defines loggers by Engine and Host names. - For example, for a more detailed Catalina localhost log, add this to the - end of the log4j.properties above. Note that there are known issues with - using this naming convention (with square brackets) in log4j XML based - configuration files, so we recommend you use a properties file as - described until a future version of log4j allows this convention. -

-
-log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG
-log4j.logger.org.apache.catalina.core=DEBUG
-log4j.logger.org.apache.catalina.session=DEBUG
-
- -

- Be warned: a level of DEBUG will produce megabytes of logging and slow - startup of Tomcat. This level should be used sparingly when debugging of - internal Tomcat operations is required. -

- -

- Your web applications should certainly use their own log4j configuration. - This is valid with the above configuration. You would place a - similar log4j.properties file in your web application's WEB-INF/classes - directory, and log4jx.y.z.jar into WEB-INF/lib. Then specify your package - level logging. This is a basic setup of log4j which does *not* require - Commons-Logging, and you should consult the - log4j - documentation for more options. This page is intended only as a - bootstrapping guide. -

- -

Additional notes

-
    -
  • This exposes log4j libraries to the web applications through the - Common classloader. See class loading - documentation for details.

    -

    Because of that, the web applications and libraries using - Apache Commons Logging - library are likely to automatically choose log4j as the underlying - logging implementation.

  • - -
  • The java.util.logging API is still available, for - those web applications that use it directly. The - ${catalina.base}/conf/logging.properties file is still - referenced by Tomcat startup scripts.

    -

    Removal of ${catalina.base}/conf/logging.properties - file, mentioned as one of the steps, just causes - java.util.logging to fallback to the default configuration - as configured in JRE, which is to use a ConsoleHandler and do not - create any files.

  • -
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/manager-howto.html b/bundledApps/tomcat/webapps/docs/manager-howto.html deleted file mode 100755 index 134423af..00000000 --- a/bundledApps/tomcat/webapps/docs/manager-howto.html +++ /dev/null @@ -1,1320 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Manager App HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Manager App HOW-TO

Table of Contents
- -
Introduction
- -

In many production environments, it is very useful to have the capability -to deploy a new web application, or undeploy an existing one, without having -to shut down and restart the entire container. In addition, you can request -an existing application to reload itself, even if you have not declared it -to be reloadable in the Tomcat server -configuration file.

- -

To support these capabilities, Tomcat includes a web application -(installed by default on context path /manager) that supports -the following functions:

-
    -
  • Deploy a new web application from the uploaded contents of a WAR file.
  • -
  • Deploy a new web application, on a specified context path, from the - server file system.
  • -
  • List the currently deployed web applications, as well as the - sessions that are currently active for those web apps.
  • -
  • Reload an existing web application, to reflect changes in the - contents of /WEB-INF/classes or /WEB-INF/lib. -
  • -
  • List the OS and JVM property values.
  • -
  • List the available global JNDI resources, for use in deployment - tools that are preparing <ResourceLink> elements - nested in a <Context> deployment description.
  • -
  • Start a stopped application (thus making it available again).
  • -
  • Stop an existing application (so that it becomes unavailable), but - do not undeploy it.
  • -
  • Undeploy a deployed web application and delete its document base - directory (unless it was deployed from file system).
  • -
- -

A default Tomcat installation includes the Manager. To add an instance of the -Manager web application Context to a new host install the -manager.xml context configuration file in the -$CATALINA_BASE/conf/[enginename]/[hostname] folder. Here is an -example:

-
-<Context privileged="true"
-         docBase="/usr/local/kinetic/tomcat7/server/webapps/manager">
-</Context>
-
- -

If you have Tomcat configured to support multiple virtual hosts -(websites) you would need to configure a Manager for each.

- -

There are three ways to use the Manager web application.

-
    -
  • As an application with a user interface you use in your browser. -Here is an example URL where you can replace localhost with -your website host name: http://localhost/manager/html/ .
  • -
  • A minimal version using HTTP requests only which is suitable for use -by scripts setup by system administrators. Commands are given as part of the -request URI, and responses are in the form of simple text that can be easily -parsed and processed. See -Supported Manager Commands for more information.
  • -
  • A convenient set of task definitions for the Ant -(version 1.4 or later) build tool. See -Executing Manager Commands -With Ant for more information.
  • -
- -
Configuring Manager Application Access
- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -

It would be quite unsafe to ship Tomcat with default settings that allowed -anyone on the Internet to execute the Manager application on your server. -Therefore, the Manager application is shipped with the requirement that anyone -who attempts to use it must authenticate themselves, using a username and -password that have one of manager-** roles associated with -them (the role name depends on what functionality is required). -Further, there is no username in the default users file -($CATALINA_BASE/conf/tomcat-users.xml) that is assigned to those -roles. Therefore, access to the Manager application is completely disabled -by default.

- -

You can find the role names in the web.xml file of the Manager -web application. The available roles are:

- -
    -
  • manager-gui — Access to the HTML interface.
  • -
  • manager-status — Access to the "Server Status" - page only.
  • -
  • manager-script — Access to the tools-friendly - plain text interface that is described in this document, - and to the "Server Status" page.
  • -
  • manager-jmx — Access to JMX proxy interface - and to the "Server Status" page.
  • -
- -

The HTML interface is protected against CSRF (Cross-Site Request Forgery) -attacks, but the text and JMX interfaces cannot be protected. To maintain -the CSRF protection:

- -
    -
  • Users with the manager-gui role should not be granted - the manager-script or manager-jmx - roles.
  • -
  • If you use web browser to access the Manager application using - a user that has either manager-script or - manager-jmx roles (for example for testing - the plain text or JMX interfaces), - then all windows of the browser MUST be closed afterwards to terminate - the session.
  • -
- -

Note that JMX proxy interface is effectively low-level root-like -administrative interface of Tomcat. One can do a lot, if he knows -what commands to call. You should be cautious when enabling the -manager-jmx role.

- -

To enable access to the Manager web application, you must either create -a new username/password combination and associate one of the -manager-** roles with it, or add a -manager-** role -to some existing username/password combination. -As the majority of this document describes the commands of plain textual -interface, let the role name for further example to be -manager-script. -Exactly how the usernames/passwords are configured depends on which -Realm implementation you are using:

-
    -
  • MemoryRealm — This one is configured in the default - $CATALINA_BASE/conf/server.xml. - If you have not configured it differently, or replaced it with - a different Realm implementation, this realm - reads an XML-format file stored at - $CATALINA_BASE/conf/tomcat-users.xml, which can be - edited with any text editor. This file contains an XML - <user> for each individual user, which might - look something like this: -
    -<user name="craigmcc" password="secret" roles="standard,manager-script" />
    -
    - which defines the username and password used by this individual to - log on, and the role names he or she is associated with. You can - add the manager-script role to the comma-delimited - roles attribute for one or more existing users, and/or - create new users with that assigned role.
  • -
  • JDBCRealm — Your user and role information is stored in - a database accessed via JDBC. Add the manager-script role - to one or more existing users, and/or create one or more new users - with this role assigned, following the standard procedures for your - environment.
  • -
  • JNDIRealm — Your user and role information is stored in - a directory server accessed via LDAP. Add the - manager-script role to one or more existing users, - and/or create one or more new users with this role assigned, following - the standard procedures for your environment.
  • -
- -

The first time you attempt to issue one of the Manager commands -described in the next section, you will be challenged to log on using -BASIC authentication. The username and password you enter do not matter, -as long as they identify a valid user in the users database who possesses -the role manager-script.

- -

In addition to the password restrictions the Manager web application -could be restricted by the remote IP address or host by adding -a RemoteAddrValve or RemoteHostValve. -See valves documentation -for details. Here is -an example of restricting access to the localhost by IP address:

-
-<Context privileged="true">
-         <Valve className="org.apache.catalina.valves.RemoteAddrValve"
-                allow="127\.0\.0\.1"/>
-</Context>
-
- -
Supported Manager Commands
- -

All commands that the Manager application knows how to process are -specified in a single request URI like this:

-
-http://{host}:{port}/manager/text/{command}?{parameters}
-
-

where {host} and {port} represent the hostname -and port number on which Tomcat is running, {command} -represents the Manager command you wish to execute, and -{parameters} represents the query parameters -that are specific to that command. In the illustrations below, customize -the host and port appropriately for your installation.

- -

Most commands accept one or more of the following query parameters:

-
    -
  • path - The context path (including the leading slash) - of the web application you are dealing with. To select the ROOT web - application, specify "/". NOTE - - It is not possible to perform administrative commands on the - Manager application itself.
  • -
  • war - URL of a web application archive (WAR) file, - pathname of a directory which contains the web application, or a - Context configuration ".xml" file. You can use URLs in any of the - following formats: -
      -
    • file:/absolute/path/to/a/directory - The absolute - path of a directory that contains the unpacked version of a web - application. This directory will be attached to the context path - you specify without any changes.
    • -
    • file:/absolute/path/to/a/webapp.war - The absolute - path of a web application archive (WAR) file. This is valid - only for the /deploy command, and is - the only acceptable format to that command.
    • -
    • jar:file:/absolute/path/to/a/warfile.war!/ - The - URL to a local web application archive (WAR) file. You can use any - syntax that is valid for the JarURLConnection class - for reference to an entire JAR file.
    • -
    • file:/absolute/path/to/a/context.xml - The - absolute path of a web application Context configuration ".xml" - file which contains the Context configuration element.
    • -
    • directory - The directory name for the web - application context in the Host's application base directory.
    • -
    • webapp.war - The name of a web application war file - located in the Host's application base directory.
    • -
  • -
- -

Each command will return a response in text/plain format -(i.e. plain ASCII with no HTML markup), making it easy for both humans and -programs to read). The first line of the response will begin with either -OK or FAIL, indicating whether the requested -command was successful or not. In the case of failure, the rest of the first -line will contain a description of the problem that was encountered. Some -commands include additional lines of information as described below.

- -

Internationalization Note - The Manager application looks up -its message strings in resource bundles, so it is possible that the strings -have been translated for your platform. The examples below show the English -version of the messages.

- -
Deploy A New Application Remotely
- -
-http://localhost:8080/manager/text/deploy?path=/foo
-
- -

Upload the web application archive (WAR) file that is specified as the -request data in this HTTP PUT request, install it into the appBase -directory of our corresponding virtual host, and start , using the directory -name or the war file name without the .war extension as the path. The -application can later be undeployed (and the corresponding application directory -removed) by use of the /undeploy command.

- -

The .WAR file may include Tomcat specific deployment configuration, by -including a Context configuration XML file in -/META-INF/context.xml.

- -

URL parameters include:

-
    -
  • update: When set to true, any existing update will be - undeployed first. The default value is set to false.
  • -
  • tag: Specifying a tag name, this allows associating the - deployed webapp with a version number. The application version can - be later redeployed when needed using only the tag.
  • -
- -

NOTE - This command is the logical -opposite of the /undeploy command.

- -

If installation and startup is successful, you will receive a response -like this:

-
-OK - Deployed application at context path /foo
-
- -

Otherwise, the response will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Application already exists at path /foo -
    -

    The context paths for all currently running web applications must be - unique. Therefore, you must undeploy the existing web - application using this context path, or choose a different context path - for the new one. The update parameter may be specified as - a parameter on the URL, with a value of true to avoid this - error. In that case, an undeploy will be performed on an existing - application before performing the deployment.

    -
  • -
  • Encountered exception -
    -

    An exception was encountered trying to start the new web application. - Check the Tomcat logs for the details, but likely explanations include - problems parsing your /WEB-INF/web.xml file, or missing - classes encountered when initializing application event listeners and - filters.

    -
  • -
- -
- -
Deploy A New Application from a Local Path
- -

Deploy and start a new web application, attached to the specified context -path (which must not be in use by any other web application). -This command is the logical opposite of the /undeploy command.

- -

There are a number of different ways the deploy command can be used.

- -

Deploy a version of a previously deployed webapp

- -

This can be used to deploy a previous version of a web application, which -has been deployed using the tag attribute. Note that the work -directory for the Manager webapp will contain the previously deployed WARs; -removing it would make the deployment fail.

-
-http://localhost:8080/manager/text/deploy?path=/footoo&tag=footag
-
- - -

Deploy a Directory or WAR by URL

- -

Deploy a web application directory or ".war" file located on the Tomcat -server. If no path is specified, the directory name or the war file -name without the ".war" extension is used as the path. The war -parameter specifies a URL (including the file: scheme) for either -a directory or a web application archive (WAR) file. The supported syntax for -a URL referring to a WAR file is described on the Javadocs page for the -java.net.JarURLConnection class. Use only URLs that refer to -the entire WAR file.

- -

In this example the web application located in the directory -/path/to/foo on the Tomcat server is deployed as the -web application context named /footoo.

-
-http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
-
- - -

In this example the ".war" file /path/to/bar.war on the -Tomcat server is deployed as the web application context named -/bar. Notice that there is no path parameter -so the context path defaults to the name of the web application archive -file without the ".war" extension.

-
-http://localhost:8080/manager/text/deploy?war=jar:file:/path/to/bar.war!/
-
- - -

Deploy a Directory or War from the Host appBase

- -

Deploy a web application directory or ".war" file located in your Host -appBase directory. The directory name or the war file name without the ".war" -extension is used as the path.

- -

In this example the web application located in a sub directory named -foo in the Host appBase directory of the Tomcat server is -deployed as the web application context named /foo. Notice -that the context path used is the name of the web application directory.

-
-http://localhost:8080/manager/text/deploy?war=foo
-
- - -

In this example the ".war" file bar.war located in your -Host appBase directory on the Tomcat server is deployed as the web -application context named /bar.

-
-http://localhost:8080/manager/text/deploy?war=bar.war
-
- - -

Deploy using a Context configuration ".xml" file

- -

If the Host deployXML flag is set to true you can deploy a web -application using a Context configuration ".xml" file and an optional -".war" file or web application directory. The context path -is not used when deploying a web application using a context ".xml" -configuration file.

- -

A Context configuration ".xml" file can contain valid XML for a -web application Context just as if it were configured in your -Tomcat server.xml configuration file. Here is an -example:

-
-<Context path="/foobar" docBase="/path/to/application/foobar">
-</Context>
-
- - -

When the optional war parameter is set to the URL -for a web application ".war" file or directory it overrides any -docBase configured in the context configuration ".xml" file.

- -

Here is an example of deploying an application using a Context -configuration ".xml" file.

-
-http://localhost:8080/manager/text/deploy?config=file:/path/context.xml
-
- - -

Here is an example of deploying an application using a Context -configuration ".xml" file and a web application ".war" file located -on the server.

-
-http://localhost:8080/manager/text/deploy?config=file:/path/context.xml&war=jar:file:/path/bar.war!/
-
- - -

Deployment Notes

- -

If the Host is configured with unpackWARs=true and you deploy a war -file, the war will be unpacked into a directory in your Host appBase -directory.

- -

If the application war or directory is installed in your Host appBase -directory and either the Host is configured with autoDeploy=true or the -Context path must match the directory name or war file name without the -".war" extension.

- -

For security when untrusted users can manage web applications, the -Host deployXML flag can be set to false. This prevents untrusted users -from deploying web applications using a configuration XML file and -also prevents them from deploying application directories or ".war" -files located outside of their Host appBase.

- - -

Deploy Response

- -

If installation and startup is successful, you will receive a response -like this:

-
-OK - Deployed application at context path /foo
-
- -

Otherwise, the response will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Application already exists at path /foo -
    -

    The context paths for all currently running web applications must be - unique. Therefore, you must undeploy the existing web - application using this context path, or choose a different context path - for the new one. The update parameter may be specified as - a parameter on the URL, with a value of true to avoid this - error. In that case, an undeploy will be performed on an existing - application before performing the deployment.

    -
  • -
  • Document base does not exist or is not a readable directory -
    -

    The URL specified by the war parameter must identify a - directory on this server that contains the "unpacked" version of a - web application, or the absolute URL of a web application archive (WAR) - file that contains this application. Correct the value specified by - the war parameter.

    -
  • -
  • Encountered exception -
    -

    An exception was encountered trying to start the new web application. - Check the Tomcat logs for the details, but likely explanations include - problems parsing your /WEB-INF/web.xml file, or missing - classes encountered when initializing application event listeners and - filters.

    -
  • -
  • Invalid application URL was specified -
    -

    The URL for the directory or web application that you specified - was not valid. Such URLs must start with file:, and URLs - for a WAR file must end in ".war".

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character. To reference the - ROOT web application use "/".

    -
  • -
  • Context path must match the directory or WAR file name: -
    - If the application war or directory is installed in your Host appBase - directory and either the Host is configured with autoDeploy=true the - Context path must match the directory name or war file name without - the ".war" extension. -
  • -
  • Only web applications in the Host web application directory can - be installed -
    - If the Host deployXML flag is set to false this error will happen - if an attempt is made to deploy a web application directory or - ".war" file outside of the Host appBase directory. -
  • -
- -
- -
List Currently Deployed Applications
- -
-http://localhost:8080/manager/text/list
-
- -

List the context paths, current status (running or -stopped), and number of active sessions for all currently -deployed web applications. A typical response immediately -after starting Tomcat might look like this:

-
-OK - Listed applications for virtual host localhost
-/webdav:running:0
-/examples:running:0
-/manager:running:0
-/:running:0
-
- -
- -
Reload An Existing Application
- -
-http://localhost:8080/manager/text/reload?path=/examples
-
- -

Signal an existing application to shut itself down and reload. This can -be useful when the web application context is not reloadable and you have -updated classes or property files in the /WEB-INF/classes -directory or when you have added or updated jar files in the -/WEB-INF/lib directory. -

-

NOTE: The /WEB-INF/web.xml -web application configuration file is not reread on a reload. -If you have made changes to your web.xml file you must stop -then start the web application. -

- -

If this command succeeds, you will see a response like this:

-
-OK - Reloaded application at context path /examples
-
- -

Otherwise, the response will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to restart the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character. To reference the - ROOT web application use "/".

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
  • Reload not supported on WAR deployed at path /foo -
    - Currently, application reloading (to pick up changes to the classes or - web.xml file) is not supported when a web application is - deployed directly from a WAR file. It only works when the web application - is deployed from an unpacked directory. If you are using a WAR file, - you should undeploy and then deploy or - deploy with the update parameter the - application again to pick up your changes. -
  • -
- -
- -
List OS and JVM Properties
- -
-http://localhost:8080/manager/text/serverinfo
-
- -

Lists information about the Tomcat version, OS, and JVM properties.

- -

If an error occurs, the response will start with FAIL and -include an error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to enumerate the system properties. - Check the Tomcat logs for the details.

    -
  • -
- -
- -
List Available Global JNDI Resources
- -
-http://localhost:8080/manager/text/resources[?type=xxxxx]
-
- -

List the global JNDI resources that are available for use in resource -links for context configuration files. If you specify the type -request parameter, the value must be the fully qualified Java class name of -the resource type you are interested in (for example, you would specify -javax.sql.DataSource to acquire the names of all available -JDBC data sources). If you do not specify the type request -parameter, resources of all types will be returned.

- -

Depending on whether the type request parameter is specified -or not, the first line of a normal response will be:

-
-  OK - Listed global resources of all types
-
-

or

-
-  OK - Listed global resources of type xxxxx
-
-

followed by one line for each resource. Each line is composed of fields -delimited by colon characters (":"), as follows:

-
    -
  • Global Resource Name - The name of this global JNDI resource, - which would be used in the global attribute of a - <ResourceLink> element.
  • -
  • Global Resource Type - The fully qualified Java class name of - this global JNDI resource.
  • -
- -

If an error occurs, the response will start with FAIL and -include an error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to enumerate the global JNDI - resources. Check the Tomcat logs for the details.

    -
  • -
  • No global JNDI resources are available -
    -

    The Tomcat server you are running has been configured without - global JNDI resources.

    -
  • -
- - -
- -
Session Statistics
- -
-http://localhost:8080/manager/text/sessions?path=/examples
-
- -

Display the default session timeout for a web application, and the -number of currently active sessions that fall within ten-minute ranges of -their actual timeout times. For example, after restarting Tomcat and then -executing one of the JSP samples in the /examples web app, -you might get something like this:

-
-OK - Session information for application at context path /examples
-Default maximum session inactive interval 30 minutes
-30 - <40 minutes:1 sessions
-
- -
- - -
Start an Existing Application
- -
-http://localhost:8080/manager/text/start?path=/examples
-
- -

Signal a stopped application to restart, and make itself available again. -Stopping and starting is useful, for example, if the database required by -your application becomes temporarily unavailable. It is usually better to -stop the web application that relies on this database rather than letting -users continuously encounter database exceptions.

- -

If this command succeeds, you will see a response like this:

-
-OK - Started application at context path /examples
-
- -

Otherwise, the response will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to start the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character. To reference the - ROOT web application use "/".

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
- -
- -
Stop an Existing Application
- -
-http://localhost:8080/manager/text/stop?path=/examples
-
- -

Signal an existing application to make itself unavailable, but leave it -deployed. Any request that comes in while an application is -stopped will see an HTTP error 404, and this application will show as -"stopped" on a list applications command.

- -

If this command succeeds, you will see a response like this:

-
-OK - Stopped application at context path /examples
-
- -

Otherwise, the response will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to stop the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character. To reference the - ROOT web application use "/".

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
- -
- - -
Undeploy an Existing Application
- -
-http://localhost:8080/manager/text/undeploy?path=/examples
-
- -

WARNING - This command will delete any web -application artifacts that exist within appBase directory -(typically "webapps") for this virtual host. -This will delete the the application .WAR, if present, -the application directory resulting either from a deploy in unpacked form -or from .WAR expansion as well as the XML Context definition from -$CATALINA_BASE/conf/[enginename]/[hostname]/ directory. -If you simply want to take an application -out of service, you should use the /stop command instead.

- -

Signal an existing application to gracefully shut itself down, and -remove it from Tomcat (which also makes this context path available for -reuse later). In addition, the document root directory is removed, if it -exists in the appBase directory (typically "webapps") for -this virtual host. This command is the logical opposite of the -/deploy command.

- -

If this command succeeds, you will see a response like this:

-
-OK - Undeployed application at context path /examples
-
- -

Otherwise, the response will start with FAIL and include an -error message. Possible causes for problems include:

-
    -
  • Encountered exception -
    -

    An exception was encountered trying to undeploy the web application. - Check the Tomcat logs for the details.

    -
  • -
  • Invalid context path was specified -
    -

    The context path must start with a slash character. To reference the - ROOT web application use "/".

    -
  • -
  • No context exists for path /foo -
    -

    There is no deployed application on the context path - that you specified.

    -
  • -
  • No context path was specified -
    - The path parameter is required. -
  • -
- -
- -
Finding memory leaks
- -
-http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]
-
- -

The find leaks diagnostic triggers a full garbage collection. It -should be used with extreme caution on production systems.

- -

The find leaks diagnostic attempts to identify web applications that have -caused memory leaks when they were stopped, reloaded or undeployed. Results -should always be confirmed -with a profiler. The diagnostic uses additional functionality provided by the -StandardHost implementation. It will not work if a custom host is used that -does not extend StandardHost.

- -

Explicitly triggering a full garbage collection from Java code is documented -to be unreliable. Furthermore, depending on the JVM used, there are options to -disable explicit GC triggering, like -XX:+DisableExplicitGC. -If you want to make sure, that the diagnostics were successfully running a full -GC, you will need to check using tools like GC logging, JConsole or similar.

- -

If this command succeeds, you will see a response like this:

-
-/leaking-webapp
-
- -

If you wish to see a status line included in the response then include the -statusLine query parameter in the request with a value of -true.

- -

Each context path for a web application that was stopped, reloaded or -undeployed, but which classes from the previous runs are still loaded in memory, -thus causing a memory leak, will be listed on a new line. If an application -has been reloaded several times, it may be listed several times.

- -

If the command does not succeed, the response will start with -FAIL and include an error message.

- -
- -
Server Status
- -

From this link , you can view information about the server.

- -

First, you have the server and JVM version number, JVM provider, OS name -and number followed by the architecture type.

- -

Second, there is several information about the memory usage of the JVM -(available, total and max memory).

- -

Then, there is information about the Tomcat AJP and HTTP connectors. -The same information is available for both of them : -

-
    -
  • Threads information : Max threads, min and max spare threads, - current thread count and current thread busy.

  • -
  • Request information : Max processing time and processing time, - request and error count, bytes received and sent.

  • -
  • A table showing Stage, Time, Bytes Sent, Bytes Receive, Client, - VHost and Request. All existing threads are listed in the table. - Here is the list of the possible thread stages :

    -
      -
    • "Parse and Prepare Request" : The request headers are - being parsed or the necessary preparation to read the request body (if - a transfer encoding has been specified) is taking place.

    • -
    • "Service" : The thread is processing a request and - generating the response. This stage follows the "Parse and Prepare - Request" stage and precedes the "Finishing" stage. There is always at - least one thread in this stage (the server-status page).

    • -
    • "Finishing" : The end of the request processing. Any - remainder of the response still in the output buffers is sent to the - client. This stage is followed by "Keep-Alive" if it is appropriate to - keep the connection alive or "Ready" if "Keep-Alive" is not - appropriate.

    • -
    • "Keep-Alive" : The thread keeps the connection open to - the client in case the client sends another request. If another request - is received, the next stage will br "Parse and Prepare Requst". If no - request is received before the keep alive times out, the connection will - be closed and the next stage will be "Ready".

    • -
    • "Ready" : The thread is at rest and ready to be - used.

    • -
    -
  • -
-
- -
Executing Manager Commands With Ant
- -

In addition to the ability to execute Manager commands via HTTP requests, -as documented above, Tomcat includes a convenient set of Task definitions -for the Ant (version 1.4 or later) build tool. In order to use these -commands, you must perform the following setup operations:

-
    -
  • Download the binary distribution of Ant from - http://ant.apache.org. - You must use version 1.4 or later.
  • -
  • Install the Ant distribution in a convenient directory (called - ANT_HOME in the remainder of these instructions).
  • -
  • Copy the file server/lib/catalina-ant.jar from your Tomcat - installation into Ant's library directory ($ANT_HOME/lib). -
  • -
  • Add the $ANT_HOME/bin directory to your PATH - environment variable.
  • -
  • Configure at least one username/password combination in your Tomcat - user database that includes the manager-script role.
  • -
- -

To use custom tasks within Ant, you must declare them first with a -<taskdef> element. Therefore, your build.xml -file might look something like this:

- - - -
-<project name="My Application" default="compile" basedir=".">
-
-  <!-- Configure the directory into which the web application is built -->
-  <property name="build"    value="${basedir}/build"/>
-
-  <!-- Configure the context path for this application -->
-  <property name="path"     value="/myapp"/>
-
-  <!-- Configure properties to access the Manager application -->
-  <property name="url"      value="http://localhost:8080/manager/text"/>
-  <property name="username" value="myusername"/>
-  <property name="password" value="mypassword"/>
-
-  <!-- Configure the custom Ant tasks for the Manager application -->
-  <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"/>
-  <taskdef name="list"      classname="org.apache.catalina.ant.ListTask"/>
-  <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask"/>
-  <taskdef name="findleaks" classname="org.apache.catalina.ant.FindLeaksTask"/>
-  <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/>
-  <taskdef name="start"     classname="org.apache.catalina.ant.StartTask"/>
-  <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask"/>
-  <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"/>
-
-  <!-- Executable Targets -->
-  <target name="compile" description="Compile web application">
-    <!-- ... construct web application in ${build} subdirectory, and
-            generated a ${path}.war ... -->
-  </target>
-
-  <target name="deploy" description="Install web application"
-          depends="compile">
-    <deploy url="${url}" username="${username}" password="${password}"
-            path="${path}" war="file:${build}${path}.war"/>
-  </target>
-
-  <target name="reload" description="Reload web application"
-          depends="compile">
-    <reload  url="${url}" username="${username}" password="${password}"
-            path="${path}"/>
-  </target>
-
-  <target name="undeploy" description="Remove web application">
-    <undeploy url="${url}" username="${username}" password="${password}"
-            path="${path}"/>
-  </target>
-
-</project>
-
- -

Note: The definition of the resources task above will override the resources -datatype added in Ant 1.7. If you wish to use the resources datatype you will -need to use Ant's namespace support to assign the Tomcat tasks to their own -namespace.

- -

Now, you can execute commands like ant deploy to deploy the -application to a running instance of Tomcat, or ant reload to -tell Tomcat to reload it. Note also that most of the interesting values in -this build.xml file are defined as replaceable properties, so -you can override their values from the command line. For example, you might -consider it a security risk to include the real manager password in your -build.xml file's source code. To avoid this, omit the password -property, and specify it from the command line:

-
-  ant -Dpassword=secret deploy
-
- -
Tasks output capture
- -

Using Ant version 1.6.2 or later, -the Catalina tasks offer the option to capture their output in -properties or external files. They support directly the following subset of the -<redirector> type attributes: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionRequired
outputName of a file to which to write the output. If -the error stream is not also redirected to a file or property, it will -appear in this output.No
errorThe file to which the standard error of the -command should be redirected.No
logErrorThis attribute is used when you wish to see -error output in Ant's log and you are redirecting output to a -file/property. The error output will not be included in the output -file/property. If you redirect error with the error or errorProperty -attributes, this will have no effect.No
appendWhether output and error files should be -appended to or overwritten. Defaults to false.No
createemptyfilesWhether output and error files should be created -even when empty. Defaults to true.No
outputpropertyThe name of a property in which the output of -the command should be stored. Unless the error stream is redirected to -a separate file or stream, this property will include the error output.No
errorpropertyThe name of a property in which the standard -error of the command should be stored.No
- -

A couple of additional attributes can also be specified: -

- - - - - - - - - - - - - - - - - - -
AttributeDescriptionRequired
alwaysLogThis attribute is used when you wish to see the -output you are capturing, appearing also in the Ant's log. It must not be -used unless you are capturing task output. -Defaults to false. -This attribute will be supported directly by <redirector> -in Ant 1.6.3No
failonerrorThis attribute is used when you wish to avoid that -any manager command processing error terminates the ant execution. Defaults to true. -It must be set to false, if you want to capture error output, -otherwise execution will terminate before anything can be captured. -
-This attribute acts only on manager command execution, -any wrong or missing command attribute will still cause Ant execution termination. -
No
- -

They also support the embedded <redirector> element -in which you can specify -its full set of attributes, but input, inputstring and -inputencoding that, even if accepted, are not used because they have -no meaning in this context. -Refer to ant manual for details on -<redirector> element attributes. -

- -

-Here is a sample build file extract that shows how this output redirection support -can be used: -

- - - -
-    <target name="manager.deploy"
-        depends="context.status"
-        if="context.notInstalled">
-        <deploy url="${mgr.url}"
-            username="${mgr.username}"
-            password="${mgr.password}"
-            path="${mgr.context.path}"
-            config="${mgr.context.descriptor}"/>
-    </target>
-
-    <target name="manager.deploy.war"
-        depends="context.status"
-        if="context.deployable">
-        <deploy url="${mgr.url}"
-            username="${mgr.username}"
-            password="${mgr.password}"
-            update="${mgr.update}"
-            path="${mgr.context.path}"
-            war="${mgr.war.file}"/>
-    </target>
-
-    <target name="context.status">
-        <property name="running" value="${mgr.context.path}:running"/>
-        <property name="stopped" value="${mgr.context.path}:stopped"/>
-
-        <list url="${mgr.url}"
-            outputproperty="ctx.status"
-            username="${mgr.username}"
-            password="${mgr.password}">
-        </list>
-
-        <condition property="context.running">
-            <contains string="${ctx.status}" substring="${running}"/>
-        </condition>
-        <condition property="context.stopped">
-            <contains string="${ctx.status}" substring="${stopped}"/>
-        </condition>
-        <condition property="context.notInstalled">
-            <and>
-                <isfalse value="${context.running}"/>
-                <isfalse value="${context.stopped}"/>
-            </and>
-        </condition>
-        <condition property="context.deployable">
-            <or>
-                <istrue value="${context.notInstalled}"/>
-                <and>
-                    <istrue value="${context.running}"/>
-                    <istrue value="${mgr.update}"/>
-                </and>
-                <and>
-                    <istrue value="${context.stopped}"/>
-                    <istrue value="${mgr.update}"/>
-                </and>
-            </or>
-        </condition>
-        <condition property="context.undeployable">
-            <or>
-                <istrue value="${context.running}"/>
-                <istrue value="${context.stopped}"/>
-            </or>
-        </condition>
-    </target>
-
- -

WARNING: even if it doesn't make many sense, and is always a bad idea, -calling a Catalina task more than once, -badly set Ant tasks depends chains may cause that a task be called -more than once in the same Ant run, even if not intended to. A bit of caution should be exercised when you are -capturing output from that task, because this could lead to something unexpected:

-
    -
  • when capturing in a property you will find in it only the output from the first call, because -Ant properties are immutable and once set they cannot be changed, -
  • -
  • when capturing in a file, each run will overwrite it and you will find in it only the last call -output, unless you are using the append="true" attribute, in which case you will -see the output of each task call appended to the file. -
  • -
- -
- -
Using the JMX Proxy Servlet
- -
What is JMX Proxy Servlet
- The JMX Proxy Servlet is a lightweight proxy to get and set the - tomcat internals. (Or any class that has been exposed via an MBean) - Its usage is not very user friendly but the UI is - extremely help for integrating command line scripts for monitoring - and changing the internals of tomcat. You can do two things with the proxy: - get information and set information. For you to really understand the - JMX Proxy Servlet, you should have a general understanding of JMX. - If you don't know what JMX is, then prepare to be confused. -
- -
JMX Query command
- This takes the form: -
-http://webserver/manager/jmxproxy/?qry=STUFF
-
- Where STUFF is the JMX query you wish to perform. For example, - here are some queries you might wish to run: -
    -
  • - qry=*%3Atype%3DRequestProcessor%2C* --> - type=RequestProcessor which will locate all - workers which can process requests and report - their state. -
  • -
  • - qry=*%3Aj2eeType=Servlet%2c* --> - j2eeType=Servlet which return all loaded servlets. -
  • -
  • - qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> - Catalina:type=Environment,resourcetype=Global,name=simpleValue - which look for a specific MBean by the given name. -
  • -
- You'll need to experiment with this to really understand its capabilites. - If you provide no qry parameter, then all of the MBeans will - be displayed. We really recommend looking at the tomcat source code and - understand the JMX spec to get a better understanding of all the queries - you may run. -
- -
JMX Get command
- The JXMProxyServlet also supports a "get" command that you can use to - fetch the value of a specific MBean's attribute. The general form of - the get command is: - -
-      http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
-    
- - You must provide the following parameters: -
    -
  1. get: The full bean name
  2. -
  3. att: The attribute you wish to fetch
  4. -
  5. key: (optional) The key into a CompositeData MBean attribute
  6. -
- - If all goes well, then it will say OK, otherwise an error message will - be shown. For example, let's say we wish to fetch the current heap memory - data: - -
-      http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage
-    
- - Or, if you only want the "used" key: - -
-      http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage&key=used
-    
-
- -
JMX Set command
- Now that you can query an MBean, its time to muck with Tomcat's internals! - The general form of the set command is : -
-http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
-
- So you need to provide 3 request parameters: -
    -
  1. set: The full bean name
  2. -
  3. att: The attribute you wish to alter
  4. -
  5. val: The new value
  6. -
- If all goes ok, then it will say OK, otherwise an error message will be - shown. For example, lets say we wish to turn up debugging on the fly for the - ErrorReportValve. The following will set debugging to 10. -
-http://localhost:8080/manager/jmxproxy/
-?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost&att=debug&val=10
-
- and my result is (YMMV): -
-Result: ok
-
- - Here is what I see if I pass in a bad value. Here is the URL I used, - I try set debugging equal to 'cowbell': -
-http://localhost:8080/manager/jmxproxy/
-?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost&att=debug&val=cowbell
-
- When I try that, my result is -
-Error: java.lang.NumberFormatException: For input string: "cowbell"
-
-
- -
JMX Invoke command
-

The invoke command enables methods to be called on MBeans. The - general form of the command is:

-
-http://webserver/manager/jmxproxy/?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS
-
-

For example, to call the findConnectors() method of the - Service use:

-
-http://localhost:8080/manager/jmxproxy/?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=
-
-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/maven-jars.html b/bundledApps/tomcat/webapps/docs/maven-jars.html deleted file mode 100755 index 14980932..00000000 --- a/bundledApps/tomcat/webapps/docs/maven-jars.html +++ /dev/null @@ -1,32 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Apache Tomcat - Using Tomcat libraries with Maven

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Apache Tomcat - Using Tomcat libraries with Maven

Table of Contents
- -
Using Tomcat libraries With Maven
-
Tomcat Snapshots
- Tomcat snapshots are located in the - Apache Snapshot Repository. - The official URL is
http://people.apache.org/repo/m2-snapshot-repository/org/apache/tomcat/
- Snapshots are done periodically, not on a regular basis, but when changes happen and the Tomcat team deems a new snapshot might - useful. -
-
Tomcat Releases
- Stable releases are published to the - Central - Maven Repositories. The URL for this is -
http://repo2.maven.org/maven2/org/apache/tomcat/
-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/mbeans-descriptor-howto.html b/bundledApps/tomcat/webapps/docs/mbeans-descriptor-howto.html deleted file mode 100755 index 2be003c1..00000000 --- a/bundledApps/tomcat/webapps/docs/mbeans-descriptor-howto.html +++ /dev/null @@ -1,58 +0,0 @@ -Apache Tomcat 7 (7.0.30) - MBean Descriptor How To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

MBean Descriptor How To

Table of Contents
- -
Introduction
- -

Tomcat uses JMX MBeans as the technology for implementing -manageability of Tomcat.

- -

The descriptions of JMX MBeans for Catalina are in the mbeans-descriptor.xml -file in each package.

- -

You will need to add MBean descriptions for your custom components -in order to avoid a "ManagedBean is not found" exception.

- -
Adding MBean descriptions
- -

You may also add MBean descriptions for custom components in -a mbeans-descriptor.xml file, located in the same package as the class files -it describes.

- -
-  <mbean         name="LDAPRealm"
-            className="org.apache.catalina.mbeans.ClassNameMBean"
-          description="Custom LDAPRealm"
-               domain="Catalina"
-                group="Realm"
-                 type="com.myfirm.mypackage.LDAPRealm">
-
-    <attribute   name="className"
-          description="Fully qualified class name of the managed object"
-                 type="java.lang.String"
-            writeable="false"/>
-
-    <attribute   name="debug"
-          description="The debugging detail level for this component"
-                 type="int"/>
-    .
-    .
-    .
-
-  </mbean>
-
- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/monitoring.html b/bundledApps/tomcat/webapps/docs/monitoring.html deleted file mode 100755 index 2d043bc8..00000000 --- a/bundledApps/tomcat/webapps/docs/monitoring.html +++ /dev/null @@ -1,1096 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Monitoring and Managing Tomcat

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Monitoring and Managing Tomcat

Table of Contents
- -
Introduction
- -

Monitoring is a key aspect of system administration. Looking inside a - running server, obtaining some statistics or reconfiguring some aspects of - an application are all daily administration tasks.

- -
Enabling JMX Remote
- -

The Sun website includes the list of options and how to configure JMX Remote on Java 5: - - http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html. -

-

The following is a quick configuration guide for Java 6:

-

Add the following parameters to your Tomcat startup script: -

-    set CATALINA_OPTS=-Dcom.sun.management.jmxremote \
-    -Dcom.sun.management.jmxremote.port=%my.jmx.port% \
-    -Dcom.sun.management.jmxremote.ssl=false \
-    -Dcom.sun.management.jmxremote.authenticate=false
-    
-

-

-

    -
  1. If you require authorization, add and change this : -
    -    -Dcom.sun.management.jmxremote.authenticate=true \
    -    -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password \
    -    -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access \
    -    
    -
  2. -
  3. edit the access authorization file $CATALINA_BASE/conf/jmxremote.access : -
    -monitorRole readonly
    -controlRole readwrite
    -    
    -
  4. -
  5. edit the password file $CATALINA_BASE/conf/jmxremote.password : -
    -monitorRole tomcat
    -controlRole tomcat
    -    
    - Tip: The password file should be read-only and only accessible by the - operating system user Tomcat is running as. -
  6. -
- Note:The JSR 160 JMX-Adaptor opens a second data channel on a random - port. That is a problem when you have a local firewall installed.
-

- -
Manage Tomcat with JMX remote Ant Tasks
-

To simplify JMX usage with Ant 1.6.x, a set of tasks is provided that may - be used with antlib.

-

antlib: Copy your catalina-ant.jar from $CATALINA_HOME/lib to $ANT_HOME/lib.

-

The following example shows the JMX Accessor usage:

- - -

-<project name="Catalina Ant JMX"
-        xmlns:jmx="antlib:org.apache.catalina.ant.jmx"
-        default="state"
-        basedir=".">
-    <property name="jmx.server.name" value="localhost" />
-    <property name="jmx.server.port" value="9012" />
-    <property name="cluster.server.address" value="192.168.1.75" />
-    <property name="cluster.server.port" value="9025" />
-
-    <target name="state" description="Show JMX Cluster state">
-        <jmx:open
-            host="${jmx.server.name}"
-            port="${jmx.server.port}"
-            username="controlRole"
-            password="tomcat"/>
-        <jmx:get
-            name="Catalina:type=IDataSender,host=localhost,senderAddress=${cluster.server.address},senderPort=${cluster.server.port}"
-            attribute="connected"
-            resultproperty="IDataSender.backup.connected"
-            echo="false"
-        />
-       <jmx:get
-            name="Catalina:type=ClusterSender,host=localhost"
-            attribute="senderObjectNames"
-            resultproperty="senderObjectNames"
-            echo="false"
-        />
-        <!-- get current maxActiveSession from ClusterTest application
-             echo it to Ant output and store at
-             property <em>clustertest.maxActiveSessions.orginal</em>
-        -->
-       <jmx:get
-            name="Catalina:type=Manager,context=/ClusterTest,host=localhost"
-            attribute="maxActiveSessions"
-            resultproperty="clustertest.maxActiveSessions.orginal"
-            echo="true"
-        />
-        <!-- set maxActiveSession to 100
-        -->
-        <jmx:set
-            name="Catalina:type=Manager,context=/ClusterTest,host=localhost"
-            attribute="maxActiveSessions"
-            value="100"
-            type="int"
-        />
-        <!-- get all sessions and split result as delimiter <em>SPACE</em> for easy
-             access all session ids directly with Ant property sessions.[0..n].
-        -->
-        <jmx:invoke
-            name="Catalina:type=Manager,context=/ClusterTest,host=localhost"
-            operation="listSessionIds"
-            resultproperty="sessions"
-            echo="false"
-            delimiter=" "
-        />
-        <!-- Access session attribute <em>Hello</em> from first session.
-        -->
-        <jmx:invoke
-            name="Catalina:type=Manager,context=/ClusterTest,host=localhost"
-            operation="getSessionAttribute"
-            resultproperty="Hello"
-            echo="false"
-        >
-          <arg value="${sessions.0}"/>
-          <arg value="Hello"/>
-        </jmx:invoke>
-        <!-- Query for all application manager.of the server from all hosts
-             and bind all attributes from all found manager MBeans.
-        -->
-        <jmx:query
-            name="Catalina:type=Manager,*"
-            resultproperty="manager"
-            echo="true"
-            attributebinding="true"
-        />
-        <!-- echo the create properties -->
-        <echo>
-           senderObjectNames: ${senderObjectNames.0}
-           IDataSender.backup.connected: ${IDataSender.backup.connected}
-           session: ${sessions.0}
-           manager.length: ${manager.length}
-           manager.0.name: ${manager.0.name}
-           manager.1.name: ${manager.1.name}
-           hello: ${Hello}
-           manager.ClusterTest.0.name: ${manager.ClusterTest.0.name}
-           manager.ClusterTest.0.activeSessions: ${manager.ClusterTest.0.activeSessions}
-           manager.ClusterTest.0.counterSend_EVT_SESSION_EXPIRED: ${manager.ClusterTest.0.counterSend_EVT_SESSION_EXPIRED}
-           manager.ClusterTest.0.counterSend_EVT_GET_ALL_SESSIONS: ${manager.ClusterTest.0.counterSend_EVT_GET_ALL_SESSIONS}
-        </echo>
-
-    </target>
-
-</project>
-   

-
-

import: Import the JMX Accessor Project with - <import file="${CATALINA.HOME}/bin/catalina-tasks.xml" /> and - reference the tasks with jmxOpen, jmxSet, jmxGet, - jmxQuery, jmxInvoke, jmxEquals and jmxCondition.

- -
JMXAccessorOpenTask - JMX open connection task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
urlSet JMX connection URL - service:jmx:rmi:///jndi/rmi://localhost:8050/jmxrmi -
hostSet the host, shortcut the very long URL syntax. - localhost
portSet the remote connection port - 8050
usernameremote JMX connection user name. -
passwordremote JMX connection password. -
refName of the internal connection reference. With this attribute you can - configure more the one connection inside the same Ant project. - jmx.server
echoEcho the command usage (for access analysis or debugging) - false
ifOnly execute if a property of the given name exists in the current project. -
unlessOnly execute if a property of the given name not exists in the current project. -
-

-

-Example to open a new JMX connection
-

-    <jmx:open
-            host="${jmx.server.name}"
-            port="${jmx.server.port}"
-    />
-
-

-

-Example to open a JMX connection from URL, with authorization and -store at other reference
-

-    <jmx:open
-            url="service:jmx:rmi:///jndi/rmi://localhost:9024/jmxrmi"
-            ref="jmx.server.9024"
-            username="controlRole"
-            password="tomcat"
-    />
-
-

- -

-Example to open a JMX connection from URL, with authorization and -store at other reference, but only when property jmx.if exists and -jmx.unless not exists
-

-    <jmx:open
-            url="service:jmx:rmi:///jndi/rmi://localhost:9024/jmxrmi"
-            ref="jmx.server.9024"
-            username="controlRole"
-            password="tomcat"
-            if="jmx.if"
-            unless="jmx.unless"
-    />
-
-

-

Note: All properties from jmxOpen task also exists at all -other tasks and conditions. -

- -
JMXAccessorGetTask: get attribute value Ant task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
nameFull qualified JMX ObjectName -- Catalina:type=Server -
attributeExisting MBean attribute (see Tomcat MBean description above) -
refJMX Connection reference - jmx.server
echoEcho command usage (access and result) - false
resultpropertySave result at this project property -
delimiterSplit result with delimiter (java.util.StringTokenizier) - and use resultproperty as prefix to store tokens. -
separatearrayresultsWhen return value is an array, save result as property list - ($resultproperty.[0..N] and $resultproperty.length) - true
-

-

-Example to get remote MBean attribute from default JMX connection
-

-    <jmx:get
-        name="Catalina:type=Manager,context=/servlets-examples,host=localhost"
-        attribute="maxActiveSessions"
-        resultproperty="servlets-examples.maxActiveSessions"
-    />
-
-

-

-Example to get and result array and split it at separate properties
-

-    <jmx:get
-        name="Catalina:type=ClusterSender,host=localhost"
-        attribute="senderObjectNames"
-        resultproperty="senderObjectNames"
-    />
-
-Access the senderObjectNames properties with: -
-    ${senderObjectNames.length} give the number of returned sender list.
-    ${senderObjectNames.[0..N]} found all sender object names
-
-

- -

-Example to get IDataSender attribute connected only when cluster is configured. -

-<jmx:query
-    failonerror="false"
-    name="Catalina:type=Cluster,host=${tomcat.application.host}"
-    resultproperty="cluster"
-/>
-<jmx:get
-    name="Catalina:type=IDataSender,host=${tomcat.application.host},senderAddress=${cluster.backup.address},senderPort=${cluster.backup.port}"
-    attribute="connected"
-    resultproperty="datasender.connected"
-    if="cluster.0.name" />
-
-

- -
JMXAccessorSetTask: set attribute value Ant task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
nameFull qualified JMX ObjectName -- Catalina:type=Server -
attributeExisting MBean attribute (see Tomcat MBean description above) -
valuevalue that set to attribute -
typetype of the attribute. - java.lang.String
refJMX Connection reference - jmx.server
echoEcho command usage (access and result) - false
-

-

-Example to set remote MBean attribute value
-

-    <jmx:set
-        name="Catalina:type=Manager,context=/servlets-examples,host=localhost"
-        attribute="maxActiveSessions"
-        value="500"
-        type="int"
-    />
-
-

- -
JMXAccessorInvokeTask: invoke MBean operation Ant task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
nameFull qualified JMX ObjectName -- Catalina:type=Server -
operationExisting MBean operation (see Tomcat - funcspecs/fs-admin-opers.html). -
refJMX Connection reference - jmx.server
echoEcho command usage (access and result) - false
resultpropertySave result at this project property -
delimiterSplit result with delimiter (java.util.StringTokenizier) - and use resultproperty as prefix to store tokens. -
separatearrayresultsWhen return value is an array, save result as property list - ($resultproperty.[0..N] and $resultproperty.length) - true
-

-

-stop an application
-

-    <jmx:invoke
-        name="Catalina:type=Manager,context=/servlets-examples,host=localhost"
-        operation="stop"/>
-
-Now you can find the sessionid at ${sessions.[0..N} properties and access the count -with ${sessions.length} property. -

-

-Example to get all sessionids
-

-    <jmx:invoke
-        name="Catalina:type=Manager,context=/servlets-examples,host=localhost"
-        operation="listSessionIds"
-        resultproperty="sessions"
-        delimiter=" "
-    />
-
-Now you can find the sessionid at ${sessions.[0..N} properties and access the count -with ${sessions.length} property. -

-

-Example to get remote MBean session attribute from session ${sessionid.0}
-

-    <jmx:invoke
-        name="Catalina:type=Manager,context=/ClusterTest,host=localhost"
-        operation="getSessionAttribute"
-        resultproperty="hello">
-         <arg value="${sessionid.0}"/>
-         <arg value="Hello" />
- </jmx:invoke>
-
-

-

-Example to create a new access logger valve at vhost localhost -

- <jmx:invoke
-         name="Catalina:type=MBeanFactory"
-         operation="createAccessLoggerValve"
-         resultproperty="accessLoggerObjectName"
- >
-     <arg value="Catalina:type=Host,host=localhost"/>
- </jmx:invoke>
-
-Now you can find new MBean with name stored at ${accessLoggerObjectName} -property. -

- -
JMXAccessorQueryTask: query MBean Ant task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
nameJMX ObjectName query string -- Catalina:type=Manager,* -
refJMX Connection reference - jmx.server
echoEcho command usage (access and result) - false
resultpropertyPrefix project property name to all founded MBeans (mbeans.[0..N].objectname) -
attributebinduingbind ALL MBean attributes in addition to name - false
delimiterSplit result with delimiter (java.util.StringTokenizier) - and use resultproperty as prefix to store tokens. -
separatearrayresultsWhen return value is an array, save result as property list - ($resultproperty.[0..N] and $resultproperty.length) - true
-

-

-Get all Manager ObjectNames from all services and Hosts
-

-  <jmx:query
-           name="Catalina:type=Manager,*
-           resultproperty="manager" />
-
-Now you can find the Session Manager at ${manager.[0..N].name} -properties and access the result object counter with ${manager.length} property. -

-

-Example to get the Manager from servlet-examples application an bind all MBean properties
-

-  <jmx:query
-           name="Catalina:type=Manager,context=/servlet-examples,host=localhost*"
-           attributebinding="true"
-           resultproperty="manager.servletExamples" />
-
-Now you can find the manager at ${manager.servletExamples.0.name} property -and can access all properties from this manager with ${manager.servletExamples.0.[manager attribute names]}. -The result object counter from MBeans is stored ad ${manager.length} property. -

- -

-Example to get all MBeans from a server and store inside an external XML property file
-

-<project name="jmx.query"
-            xmlns:jmx="antlib:org.apache.catalina.ant.jmx"
-            default="query-all" basedir=".">
-<property name="jmx.host" value="localhost"/>
-<property name="jmx.port" value="8050"/>
-<property name="jmx.username" value="controlRole"/>
-<property name="jmx.password" value="tomcat"/>
-
-<target name="query-all" description="Query all MBeans of a server">
-<!-- Configure connection -->
-<jmx:open
-    host="${jmx.host}"
-    port="${jmx.port}"
-    ref="jmx.server"
-    username="${jmx.username}"
-    password="${jmx.password}"/>
-<!-- Query MBean list -->
-<jmx:query
-    name="*:*"
-    resultproperty="mbeans"
-    attributebinding="false"/>
-
-<echoproperties
-    destfile="mbeans.properties"
-    prefix="mbeans."
-    format="xml"/>
-
-<!-- Print results -->
-<echo
-    message="Number of MBeans in server ${jmx.host}:${jmx.port} is ${mbeans.length}"/>
-</target>
-</project>
-
-Now you can find all MBeans inside the file mbeans.properties. -

- -
JMXAccessorCreateTask: remote create MBean Ant task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
nameFull qualified JMX ObjectName -- Catalina:type=MBeanFactory -
classNameExisting MBean full qualified class name (see Tomcat MBean description above) -
classLoaderObjectName of server or web application classloader
- ( Catalina:type=ServerClassLoader,name=[server,common,shared] or
- Catalina:type=WebappClassLoader,context=/myapps,host=localhost) -
refJMX Connection reference - jmx.server
echoEcho command usage (access and result) - false
-

-

-Example to create remote MBean
-

-    <jmx:create
-             ref="${jmx.reference}"
-             name="Catalina:type=MBeanFactory"
-             className="org.apache.commons.modeler.BaseModelMBean"
-             classLoader="Catalina:type=ServerClassLoader,name=server">
-             <Arg value="org.apache.catalina.mbeans.MBeanFactory" />
-    </jmx:create>
-
-

-

- Warning: Many Tomcat MBeans can't be linked to their parent once
- created. The Valve, Cluster and Realm MBeans are not automatically
- connected with their parent. Use the MBeanFacrory create
- operation instead. -

- -
JMXAccessorUnregisterTask: remote unregister MBean Ant task
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
nameFull qualified JMX ObjectName -- Catalina:type=MBeanFactory -
refJMX Connection reference - jmx.server
echoEcho command usage (access and result) - false
-

-

-Example to unregister remote MBean
-

-    <jmx:unregister
-        name="Catalina:type=MBeanFactory"
-    />
-
-

-

- Warning: A lot of Tomcat MBeans can't be unregister.
- The MBeans are not unlinked from their parent. Use MBeanFacrory
- remove operation instead. -

- -
JMXAccessorCondition: express condition
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
urlSet JMX connection URL - service:jmx:rmi:///jndi/rmi://localhost:8050/jmxrmi -
hostSet the host, shortcut the very long URL syntax. - localhost
portSet the remote connection port - 8050
usernameremote JMX connection user name. -
passwordremote JMX connection password. -
refName of the internal connection reference. With this attribute you can - configure more the one connection inside the same Ant project. - jmx.server
nameFull qualified JMX ObjectName -- Catalina:type=Server -
echoEcho condition usage (access and result) - false
ifOnly execute if a property of the given name exists in the current project. -
unlessOnly execute if a property of the given name not exists in the current project. -
value (requiered)Second arg for operation -
typeValue type to express operation (support long and double) - long
operation express one -
    -
  • == equals
  • -
  • != not equals
  • -
  • > greater than (&gt;)
  • -
  • >= greater than or equals (&gt;=)
  • -
  • < lesser than (&lt;)
  • -
  • <= lesser than or equals (&lt;=)
  • -
-
==
-

-

-Wait for server connection and that cluster backup node is accessable
-

-      <target name="wait">
-         <waitfor maxwait="${maxwait}" maxwaitunit="second" timeoutproperty="server.timeout" >
-            <and>
-                <socket server="${server.name}" port="${server.port}"/>
-                <http url="${url}"/>
-                <jmx:condition
-                    operation="=="
-                    host="localhost"
-                    port="9014"
-                    username="controlRole"
-                    password="tomcat"
-                    name="Catalina:type=IDataSender,host=localhost,senderAddress=192.168.111.1,senderPort=9025"
-                    attribute="connected"
-                    value="true"
-                />
-            </and>
-        </waitfor>
-        <fail if="server.timeout" message="Server ${url} don't answer inside ${maxwait} sec" />
-        <echo message="Server ${url} alive" />
-    </target>
-
-

- -
JMXAccessorEqualsCondition: equals MBean Ant condition
-

-List of Attributes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeDescriptionDefault value
urlSet JMX connection URL - service:jmx:rmi:///jndi/rmi://localhost:8050/jmxrmi -
hostSet the host, shortcut the very long URL syntax. - localhost
portSet the remote connection port - 8050
usernameremote JMX connection user name. -
passwordremote JMX connection password. -
refName of the internal connection reference. With this attribute you can - configure more the one connection inside the same Ant project. - jmx.server
nameFull qualified JMX ObjectName -- Catalina:type=Server -
echoEcho condition usage (access and result) - false
-

-

-Wait for server connection and that cluster backup node is accessible
-

-      <target name="wait">
-         <waitfor maxwait="${maxwait}" maxwaitunit="second" timeoutproperty="server.timeout" >
-            <and>
-                <socket server="${server.name}" port="${server.port}"/>
-                <http url="${url}"/>
-                <jmx:equals
-                    host="localhost"
-                    port="9014"
-                    username="controlRole"
-                    password="tomcat"
-                    name="Catalina:type=IDataSender,host=localhost,senderAddress=192.168.111.1,senderPort=9025"
-                    attribute="connected"
-                    value="true"
-                />
-            </and>
-        </waitfor>
-        <fail if="server.timeout" message="Server ${url} don't answer inside ${maxwait} sec" />
-        <echo message="Server ${url} alive" />
-    </target>
-
-

- -
Using the JMXProxyServlet
- -

- Tomcat offers an alternative to using remote (or even local) JMX - connections while still giving you access to everything JMX has to offer: - Tomcat's - JMXProxyServlet. -

- -

- The JMXProxyServlet allows a client to issue JMX queries via an HTTP - interface. This technique offers the following advantages over using - JMX directly from a client program: -

- -
    -
  • You don't have to launch a full JVM and make a remote JMX connection - just to ask for one small piece of data from a runing server
  • -
  • You don't have to know how to work with JMX connections
  • -
  • You don't need any of the complex configuration covered in the rest - of this page
  • -
  • Your client program does not have to be written in Java
  • -
- -

- A perfect example of JMX overkill can be seen in the case of popular - server-monitoring software such as Nagios or Ichinga: if you want to - monitor 10 items via JMX, you will have to launch 10 JVMs, make 10 JMX - connections, and then shut them all down every few minutes. With the - JMXProxyServlet, you can make 10 HTTP connections and be done with it. -

- -

- You can find out more information about the JMXProxyServlet in the - documentation for the - Tomcat - manager. -

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/proxy-howto.html b/bundledApps/tomcat/webapps/docs/proxy-howto.html deleted file mode 100755 index 9dd3d327..00000000 --- a/bundledApps/tomcat/webapps/docs/proxy-howto.html +++ /dev/null @@ -1,128 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Proxy Support HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Proxy Support HOW-TO

Table of Contents
- -
Introduction
- -

Using standard configurations of Tomcat, web applications can ask for -the server name and port number to which the request was directed for -processing. When Tomcat is running standalone with the -Coyote HTTP/1.1 Connector, it will generally -report the server name specified in the request, and the port number on -which the Connector is listening. The servlet API -calls of interest, for this purpose, are:

-
    -
  • ServletRequest.getServerName(): Returns the host name of the server to which the request was sent.
  • -
  • ServletRequest.getServerPort(): Returns the host name of the server to which the request was sent.
  • -
  • ServletRequest.getLocalName(): Returns the host name of the Internet Protocol (IP) interface on which the request was received.
  • -
  • ServletRequest.getLocalPort(): Returns the Internet Protocol (IP) port number of the interface on which the request was received.
  • -
- -

When you are running behind a proxy server (or a web server that is -configured to behave like a proxy server), you will sometimes prefer to -manage the values returned by these calls. In particular, you will -generally want the port number to reflect that specified in the original -request, not the one on which the Connector itself is -listening. You can use the proxyName and proxyPort -attributes on the <Connector> element to configure -these values.

- -

Proxy support can take many forms. The following sections describe -proxy configurations for several common cases.

- -
Apache 1.3 Proxy Support
- -

Apache 1.3 supports an optional module (mod_proxy) that -configures the web server to act as a proxy server. This can be used to -forward requests for a particular web application to a Tomcat instance, -without having to configure a web connector such as mod_jk. -To accomplish this, you need to perform the following tasks:

-
    -
  1. Configure your copy of Apache so that it includes the - mod_proxy module. If you are building from source, - the easiest way to do this is to include the - --enable-module=proxy directive on the - ./configure command line.
  2. -
  3. If not already added for you, make sure that you are loading the - mod_proxy module at Apache startup time, by using the - following directives in your httpd.conf file: -
    -LoadModule proxy_module  {path-to-modules}/mod_proxy.so
    -AddModule  mod_proxy.c
    -
  4. -
  5. Include two directives in your httpd.conf file for - each web application that you wish to forward to Tomcat. For - example, to forward an application at context path /myapp: -
    -ProxyPass         /myapp  http://localhost:8081/myapp
    -ProxyPassReverse  /myapp  http://localhost:8081/myapp
    -
    - which tells Apache to forward URLs of the form - http://localhost/myapp/* to the Tomcat connector - listening on port 8081.
  6. -
  7. Configure your copy of Tomcat to include a special - <Connector> element, with appropriate - proxy settings, for example: -
    -<Connector port="8081" ...
    -              proxyName="www.mycompany.com"
    -              proxyPort="80"/>
    -
    - which will cause servlets inside this web application to think that - all proxied requests were directed to www.mycompany.com - on port 80.
  8. -
  9. It is legal to omit the proxyName attribute from the - <Connector> element. If you do so, the value - returned by request.getServerName() will by the host - name on which Tomcat is running. In the example above, it would be - localhost.
  10. -
  11. If you also have a <Connector> listening on port - 8080 (nested within the same Service - element), the requests to either port will share the same set of - virtual hosts and web applications.
  12. -
  13. You might wish to use the IP filtering features of your operating - system to restrict connections to port 8081 (in this example) to - be allowed only from the server that is running - Apache.
  14. -
  15. Alternatively, you can set up a series of web applications that are - only available via proxying, as follows: -
      -
    • Configure another <Service> that contains - only a <Connector> for the proxy port.
    • -
    • Configure appropriate Engine, - Host, and - Context elements for the virtual hosts - and web applications accessible via proxying.
    • -
    • Optionally, protect port 8081 with IP filters as described - earlier.
    • -
  16. -
  17. When requests are proxied by Apache, the web server will be recording - these requests in its access log. Therefore, you will generally want to - disable any access logging performed by Tomcat itself.
  18. -
- -

When requests are proxied in this manner, all requests -for the configured web applications will be processed by Tomcat (including -requests for static content). You can improve performance by using the -mod_jk web connector instead of mod_proxy. -mod_jk can be configured so that the web server serves static -content that is not processed by filters or security constraints defined -within the web application's deployment descriptor -(/WEB-INF/web.xml).

- -
Apache 2.0 Proxy Support
-The same instructions hold true as for 1.3. (Except in Apache 2.0, -you may omit AddModule mod_proxy.c) -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/realm-howto.html b/bundledApps/tomcat/webapps/docs/realm-howto.html deleted file mode 100755 index 688d1d0b..00000000 --- a/bundledApps/tomcat/webapps/docs/realm-howto.html +++ /dev/null @@ -1,1184 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Realm Configuration HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Realm Configuration HOW-TO

Table of Contents
- -
Quick Start
- -

This document describes how to configure Tomcat to support container -managed security, by connecting to an existing "database" of usernames, -passwords, and user roles. You only need to care about this if you are using -a web application that includes one or more -<security-constraint> elements, and a -<login-config> element defining how users are required -to authenticate themselves. If you are not utilizing these features, you can -safely skip this document.

- -

For fundamental background information about container managed security, -see the Servlet -Specification (Version 2.4), Section 12.

- -

For information about utilizing the Single Sign On feature of -Tomcat (allowing a user to authenticate themselves once across the entire -set of web applications associated with a virtual host), see -here.

- -
Overview
- - -
What is a Realm?
- -

A Realm is a "database" of usernames and passwords that -identify valid users of a web application (or set of web applications), plus -an enumeration of the list of roles associated with each valid user. -You can think of roles as similar to groups in Unix-like operating -systems, because access to specific web application resources is granted to -all users possessing a particular role (rather than enumerating the list of -associated usernames). A particular user can have any number of roles -associated with their username.

- -

Although the Servlet Specification describes a portable mechanism for -applications to declare their security requirements (in the -web.xml deployment descriptor), there is no portable API -defining the interface between a servlet container and the associated user -and role information. In many cases, however, it is desirable to "connect" -a servlet container to some existing authentication database or mechanism -that already exists in the production environment. Therefore, Tomcat -defines a Java interface (org.apache.catalina.Realm) that -can be implemented by "plug in" components to establish this connection. -Five standard plug-ins are provided, supporting connections to various -sources of authentication information:

-
    -
  • JDBCRealm - Accesses authentication information - stored in a relational database, accessed via a JDBC driver.
  • -
  • DataSourceRealm - Accesses authentication - information stored in a relational database, accessed via a named JNDI - JDBC DataSource.
  • -
  • JNDIRealm - Accesses authentication information - stored in an LDAP based directory server, accessed via a JNDI provider. -
  • -
  • UserDatabaseRealm - Accesses authentication - information stored in an UserDatabase JNDI resource, which is typically - backed by an XML document (conf/tomcat-users.xml).
  • -
  • MemoryRealm - Accesses authentication - information stored in an in-memory object collection, which is initialized - from an XML document (conf/tomcat-users.xml).
  • -
  • JAASRealm - Accesses authentication information - through the Java Authentication & Authorization Service (JAAS) - framework.
  • -
- -

It is also possible to write your own Realm implementation, -and integrate it with Tomcat. To do so, you need to: -

    -
  • Implement org.apache.catalina.Realm,
  • -
  • Place your compiled realm in $CATALINA_HOME/lib,
  • -
  • Declare your realm as described in the "Configuring a Realm" section below,
  • -
  • Declare your realm to the MBeans Descriptor.
  • -
-

- -
- - -
Configuring a Realm
- -

Before getting into the details of the standard Realm implementations, it is -important to understand, in general terms, how a Realm is configured. In -general, you will be adding an XML element to your conf/server.xml -configuration file, that looks something like this:

- -
-<Realm className="... class name for this implementation"
-       ... other attributes for this implementation .../>
-
- -

The <Realm> element can be nested inside any one of -of the following Container elements. The location of the -Realm element has a direct impact on the "scope" of that Realm -(i.e. which web applications will share the same authentication information): -

-
    -
  • Inside an <Engine> element - This Realm will be shared - across ALL web applications on ALL virtual hosts, UNLESS it is overridden - by a Realm element nested inside a subordinate <Host> - or <Context> element.
  • -
  • Inside a <Host> element - This Realm will be shared across - ALL web applications for THIS virtual host, UNLESS it is overridden - by a Realm element nested inside a subordinate <Context> - element.
  • -
  • Inside a <Context> element - This Realm will be used ONLY - for THIS web application.
  • -
- - -
- - -
Common Features
- - -
Digested Passwords
- -

For each of the standard Realm implementations, the -user's password (by default) is stored in clear text. In many -environments, this is undesirable because casual observers of the -authentication data can collect enough information to log on -successfully, and impersonate other users. To avoid this problem, the -standard implementations support the concept of digesting -user passwords. This allows the stored version of the passwords to be -encoded (in a form that is not easily reversible), but that the -Realm implementation can still utilize for -authentication.

- -

When a standard realm authenticates by retrieving the stored -password and comparing it with the value presented by the user, you -can select digested passwords by specifying the digest -attribute on your <Realm> element. The value for -this attribute must be one of the digest algorithms supported by the -java.security.MessageDigest class (SHA, MD2, or MD5). -When you select this option, the contents of the password that is -stored in the Realm must be the cleartext version of the -password, as digested by the specified algorithm.

- -

When the authenticate() method of the Realm is called, the -(cleartext) password specified by the user is itself digested by the same -algorithm, and the result is compared with the value returned by the -Realm. An equal match implies that the cleartext version of the -original password is the same as the one presented by the user, so that this -user should be authorized.

- -

To calculate the digested value of a cleartext password, two convenience -techniques are supported:

-
    -
  • If you are writing an application that needs to calculate digested - passwords dynamically, call the static Digest() method of the - org.apache.catalina.realm.RealmBase class, passing the - cleartext password and the digest algorithm name as arguments. This - method will return the digested password.
  • -
  • If you want to execute a command line utility to calculate the digested - password, simply execute -
    CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} {cleartext-password}
    -
    - and the digested version of this cleartext password will be returned to - standard output.
  • -
- -

If using digested passwords with DIGEST authentication, the cleartext used - to generate the digest is different and the digest must use the MD5 - algorithm. In the examples above {cleartext-password} must be - replaced with {username}:{realm}:{cleartext-password}. For - example, in a development environment this might take the form - testUser:Authentication required:testPassword. The value for - {realm} is taken from the <realm-name> - element of the web application's <login-config>. If - not specified in web.xml, the default value of Authentication - required is used.

- -

Non-ASCII usernames and/or passwords are supported using -

CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} -e {encoding} {input}
-
-but care is required to ensure that the non-ASCII input is -correctly passed to the digester. -The digester returns {input}:{digest}. If the input appears -corrupted in the return, the digest will be invalid.

- -
- - - -
Example Application
- -

The example application shipped with Tomcat includes an area that is -protected by a security constraint, utilizing form-based login. To access it, -point your browser at -http://localhost:8080/examples/jsp/security/protected/ -and log on with one of the usernames and passwords described for the default -UserDatabaseRealm.

- -
- - -
Manager Application
- -

If you wish to use the Manager Application -to deploy and undeploy applications in a running Tomcat installation, you -MUST add the "manager-gui" role to at least one username in your selected -Realm implementation. This is because the manager web application itself uses a -security constraint that requires role "manager-gui" to access ANY request URI -within the HTML interface of that application.

- -

For security reasons, no username in the default Realm (i.e. using -conf/tomcat-users.xml is assigned the "manager-gui" role. -Therefore, no one will be able to utilize the features of this application -until the Tomcat administrator specifically assigns this role to one or more -users.

- -
- -
Realm Logging
- -

Debugging and exception messages logged by a Realm will - be recorded by the logging configuration associated with the container - for the realm: its surrounding Context, - Host, or - Engine.

- -
- -
Standard Realm Implementations
- -
JDBCRealm
- -

Introduction

- -

JDBCRealm is an implementation of the Tomcat -Realm interface that looks up users in a relational database -accessed via a JDBC driver. There is substantial configuration flexibility -that lets you adapt to existing table and column names, as long as your -database structure conforms to the following requirements:

-
    -
  • There must be a table, referenced below as the users table, - that contains one row for every valid user that this Realm - should recognize.
  • -
  • The users table must contain at least two columns (it may - contain more if your existing applications required it): -
      -
    • Username to be recognized by Tomcat when the user logs in.
    • -
    • Password to be recognized by Tomcat when the user logs in. - This value may in cleartext or digested - see below for more - information.
    • -
  • -
  • There must be a table, referenced below as the user roles table, - that contains one row for every valid role that is assigned to a - particular user. It is legal for a user to have zero, one, or more than - one valid role.
  • -
  • The user roles table must contain at least two columns (it may - contain more if your existing applications required it): -
      -
    • Username to be recognized by Tomcat (same value as is specified - in the users table).
    • -
    • Role name of a valid role associated with this user.
    • -
  • -
- -

Quick Start

- -

To set up Tomcat to use JDBCRealm, you will need to follow these steps:

-
    -
  1. If you have not yet done so, create tables and columns in your database - that conform to the requirements described above.
  2. -
  3. Configure a database username and password for use by Tomcat, that has - at least read only access to the tables described above. (Tomcat will - never attempt to write to these tables.)
  4. -
  5. Place a copy of the JDBC driver you will be using inside the - $CATALINA_HOME/lib directory. - Note that only JAR files are recognized!
  6. -
  7. Set up a <Realm> element, as described below, in your - $CATALINA_BASE/conf/server.xml file.
  8. -
  9. Restart Tomcat if it is already running.
  10. -
- -

Realm Element Attributes

- -

To configure JDBCRealm, you will create a <Realm> -element and nest it in your $CATALINA_BASE/conf/server.xml file, -as described above. The attributes for the -JDBCRealm are defined in the Realm configuration -documentation.

- -

Example

- -

An example SQL script to create the needed tables might look something -like this (adapt the syntax as required for your particular database):

-
-create table users (
-  user_name         varchar(15) not null primary key,
-  user_pass         varchar(15) not null
-);
-
-create table user_roles (
-  user_name         varchar(15) not null,
-  role_name         varchar(15) not null,
-  primary key (user_name, role_name)
-);
-
- -

Example Realm elements are included (commented out) in the -default $CATALINA_BASE/conf/server.xml file. Here's an example -for using a MySQL database called "authority", configured with the tables -described above, and accessed with username "dbuser" and password "dbpass":

-
-<Realm className="org.apache.catalina.realm.JDBCRealm"
-      driverName="org.gjt.mm.mysql.Driver"
-   connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;password=dbpass"
-       userTable="users" userNameCol="user_name" userCredCol="user_pass"
-   userRoleTable="user_roles" roleNameCol="role_name"/>
-
- -

Additional Notes

- -

JDBCRealm operates according to the following rules:

-
    -
  • When a user attempts to access a protected resource for the first time, - Tomcat will call the authenticate() method of this - Realm. Thus, any changes you have made to the database - directly (new users, changed passwords or roles, etc.) will be immediately - reflected.
  • -
  • Once a user has been authenticated, the user (and his or her associated - roles) are cached within Tomcat for the duration of the user's login. - (For FORM-based authentication, that means until the session times out or - is invalidated; for BASIC authentication, that means until the user - closes their browser). The cached user is not saved and - restored across sessions serialisations. Any changes to the database - information for an already authenticated user will not be - reflected until the next time that user logs on again.
  • -
  • Administering the information in the users and user roles - table is the responsibility of your own applications. Tomcat does not - provide any built-in capabilities to maintain users and roles.
  • -
- -
- - -
DataSourceRealm
- -

Introduction

- -

DataSourceRealm is an implementation of the Tomcat -Realm interface that looks up users in a relational database -accessed via a JNDI named JDBC DataSource. There is substantial configuration -flexibility that lets you adapt to existing table and column names, as long -as your database structure conforms to the following requirements:

-
    -
  • There must be a table, referenced below as the users table, - that contains one row for every valid user that this Realm - should recognize.
  • -
  • The users table must contain at least two columns (it may - contain more if your existing applications required it): -
      -
    • Username to be recognized by Tomcat when the user logs in.
    • -
    • Password to be recognized by Tomcat when the user logs in. - This value may in cleartext or digested - see below for more - information.
    • -
  • -
  • There must be a table, referenced below as the user roles table, - that contains one row for every valid role that is assigned to a - particular user. It is legal for a user to have zero, one, or more than - one valid role.
  • -
  • The user roles table must contain at least two columns (it may - contain more if your existing applications required it): -
      -
    • Username to be recognized by Tomcat (same value as is specified - in the users table).
    • -
    • Role name of a valid role associated with this user.
    • -
  • -
- -

Quick Start

- -

To set up Tomcat to use DataSourceRealm, you will need to follow these steps:

-
    -
  1. If you have not yet done so, create tables and columns in your database - that conform to the requirements described above.
  2. -
  3. Configure a database username and password for use by Tomcat, that has - at least read only access to the tables described above. (Tomcat will - never attempt to write to these tables.)
  4. -
  5. Configure a JNDI named JDBC DataSource for your database. Refer to the - JNDI DataSource Example HOW-TO - for information on how to configure a JNDI named JDBC DataSource.
  6. -
  7. Set up a <Realm> element, as described below, in your - $CATALINA_BASE/conf/server.xml file.
  8. -
  9. Restart Tomcat if it is already running.
  10. -
- -

Realm Element Attributes

- -

To configure DataSourceRealm, you will create a <Realm> -element and nest it in your $CATALINA_BASE/conf/server.xml file, -as described above. The attributes for the -DataSourceRealm are defined in the Realm -configuration documentation.

- -

Example

- -

An example SQL script to create the needed tables might look something -like this (adapt the syntax as required for your particular database):

-
-create table users (
-  user_name         varchar(15) not null primary key,
-  user_pass         varchar(15) not null
-);
-
-create table user_roles (
-  user_name         varchar(15) not null,
-  role_name         varchar(15) not null,
-  primary key (user_name, role_name)
-);
-
- -

Here is an example for using a MySQL database called "authority", configured -with the tables described above, and accessed with the JNDI JDBC DataSource with -name "java:/comp/env/jdbc/authority".

-
-<Realm className="org.apache.catalina.realm.DataSourceRealm"
-   dataSourceName="jdbc/authority"
-   userTable="users" userNameCol="user_name" userCredCol="user_pass"
-   userRoleTable="user_roles" roleNameCol="role_name"/>
-
- -

Additional Notes

- -

DataSourceRealm operates according to the following rules:

-
    -
  • When a user attempts to access a protected resource for the first time, - Tomcat will call the authenticate() method of this - Realm. Thus, any changes you have made to the database - directly (new users, changed passwords or roles, etc.) will be immediately - reflected.
  • -
  • Once a user has been authenticated, the user (and his or her associated - roles) are cached within Tomcat for the duration of the user's login. - (For FORM-based authentication, that means until the session times out or - is invalidated; for BASIC authentication, that means until the user - closes their browser). The cached user is not saved and - restored across sessions serialisations. Any changes to the database - information for an already authenticated user will not be - reflected until the next time that user logs on again.
  • -
  • Administering the information in the users and user roles - table is the responsibility of your own applications. Tomcat does not - provide any built-in capabilities to maintain users and roles.
  • -
- -
- - -
JNDIRealm
- -

Introduction

- -

JNDIRealm is an implementation of the Tomcat -Realm interface that looks up users in an LDAP directory -server accessed by a JNDI provider (typically, the standard LDAP -provider that is available with the JNDI API classes). The realm -supports a variety of approaches to using a directory for -authentication.

- -

Connecting to the directory

- -

The realm's connection to the directory is defined by the -connectionURL configuration attribute. This is a URL -whose format is defined by the JNDI provider. It is usually an LDAP -URL that specifies the domain name of the directory server to connect -to, and optionally the port number and distinguished name (DN) of the -required root naming context.

- -

If you have more than one provider you can configure an -alternateURL. If a socket connection can not be -made to the provider at the connectionURL an -attempt will be made to use the alternateURL.

- -

When making a connection in order to search the directory and -retrieve user and role information, the realm authenticates itself to -the directory with the username and password specified by the -connectionName and -connectionPassword properties. If these properties -are not specified the connection is anonymous. This is sufficient in -many cases. -

- - -

Selecting the user's directory entry

- -

Each user that can be authenticated must be represented in the -directory by an individual entry that corresponds to an element in the -initial DirContext defined by the -connectionURL attribute. This user entry must have an -attribute containing the username that is presented for -authentication.

- -

Often the distinguished name of the user's entry contains the -username presented for authentication but is otherwise the same for -all users. In this case the userPattern attribute may -be used to specify the DN, with "{0}" marking where -the username should be substituted.

- -

Otherwise the realm must search the directory to find a unique entry -containing the username. The following attributes configure this -search: - -

    -
  • userBase - the entry that is the base of - the subtree containing users. If not specified, the search - base is the top-level context.
  • - -
  • userSubtree - the search scope. Set to - true if you wish to search the entire subtree - rooted at the userBase entry. The default value - of false requests a single-level search - including only the top level.
  • - -
  • userSearch - pattern specifying the LDAP - search filter to use after substitution of the username.
  • - -
-

- - -

Authenticating the user

- -
    -
  • -

    Bind mode

    - -

    By default the realm authenticates a user by binding to -the directory with the DN of the entry for that user and the password -presented by the user. If this simple bind succeeds the user is considered to -be authenticated.

    - -

    For security reasons a directory may store a digest of the user's -password rather than the clear text version (see Digested Passwords for more information). In that case, -as part of the simple bind operation the directory automatically -computes the correct digest of the plaintext password presented by the -user before validating it against the stored value. In bind mode, -therefore, the realm is not involved in digest processing. The -digest attribute is not used, and will be ignored if -set.

    -
  • - -
  • -

    Comparison mode

    -

    Alternatively, the realm may retrieve the stored -password from the directory and compare it explicitly with the value -presented by the user. This mode is configured by setting the -userPassword attribute to the name of a directory -attribute in the user's entry that contains the password.

    - -

    Comparison mode has some disadvantages. First, the -connectionName and -connectionPassword attributes must be configured to -allow the realm to read users' passwords in the directory. For -security reasons this is generally undesirable; indeed many directory -implementations will not allow even the directory manager to read -these passwords. In addition, the realm must handle password digests -itself, including variations in the algorithms used and ways of -representing password hashes in the directory. However, the realm may -sometimes need access to the stored password, for example to support -HTTP Digest Access Authentication (RFC 2069). (Note that HTTP digest -authentication is different from the storage of password digests in -the repository for user information as discussed above). -

    -
  • -
- -

Assigning roles to the user

- -

The directory realm supports two approaches to the representation -of roles in the directory:

- -
    -
  • -

    Roles as explicit directory entries

    - -

    Roles may be represented by explicit directory entries. A role -entry is usually an LDAP group entry with one attribute -containing the name of the role and another whose values are the -distinguished names or usernames of the users in that role. The -following attributes configure a directory search to -find the names of roles associated with the authenticated user:

    - -
      -
    • roleBase - the base entry for the role search. - If not specified, the search base is the top-level directory - context.
    • - -
    • roleSubtree - the search - scope. Set to true if you wish to search the entire - subtree rooted at the roleBase entry. The default - value of false requests a single-level search - including the top level only.
    • - -
    • roleSearch - the LDAP search filter for - selecting role entries. It optionally includes pattern - replacements "{0}" for the distinguished name and/or "{1}" for the - username and/or "{2}" for an attribute from user's directory entry, - of the authenticated user. Use userRoleAttribute to - specify the name of the attribute that provides the value for "{2}".
    • - -
    • roleName - the attribute in a role entry - containing the name of that role.
    • - -
    • roleNested - enable nested roles. Set to - true if you want to nest roles in roles. If configured, then - every newly found roleName and distinguished - Name will be recursively tried for a new role search. - The default value is false.
    • - -
    - -
  • -
- -
    -
  • -

    Roles as an attribute of the user entry

    - -

    Role names may also be held as the values of an attribute in the -user's directory entry. Use userRoleName to specify -the name of this attribute.

    - -
  • -
-

A combination of both approaches to role representation may be used.

- -

Quick Start

- -

To set up Tomcat to use JNDIRealm, you will need to follow these steps:

-
    -
  1. Make sure your directory server is configured with a schema that matches - the requirements listed above.
  2. -
  3. If required, configure a username and password for use by Tomcat, that has - read only access to the information described above. (Tomcat will - never attempt to modify this information.)
  4. -
  5. Set up a <Realm> element, as described below, in your - $CATALINA_BASE/conf/server.xml file.
  6. -
  7. Restart Tomcat if it is already running.
  8. -
- -

Realm Element Attributes

- -

To configure JNDIRealm, you will create a <Realm> -element and nest it in your $CATALINA_BASE/conf/server.xml file, -as described above. The attributes for the -JNDIRealm are defined in the Realm configuration -documentation.

- -

Example

- -

Creation of the appropriate schema in your directory server is beyond the -scope of this document, because it is unique to each directory server -implementation. In the examples below, we will assume that you are using a -distribution of the OpenLDAP directory server (version 2.0.11 or later), which -can be downloaded from -http://www.openldap.org. Assume that -your slapd.conf file contains the following settings -(among others):

-
-database ldbm
-suffix dc="mycompany",dc="com"
-rootdn "cn=Manager,dc=mycompany,dc=com"
-rootpw secret
-
- -

We will assume for connectionURL that the directory -server runs on the same machine as Tomcat. See http://java.sun.com/products/jndi/docs.html -for more information about configuring and using the JNDI LDAP -provider.

- -

Next, assume that this directory server has been populated with elements -as shown below (in LDIF format):

- -
-
-# Define top-level entry
-dn: dc=mycompany,dc=com
-objectClass: dcObject
-dc:mycompany
-
-# Define an entry to contain people
-# searches for users are based on this entry
-dn: ou=people,dc=mycompany,dc=com
-objectClass: organizationalUnit
-ou: people
-
-# Define a user entry for Janet Jones
-dn: uid=jjones,ou=people,dc=mycompany,dc=com
-objectClass: inetOrgPerson
-uid: jjones
-sn: jones
-cn: janet jones
-mail: j.jones@mycompany.com
-userPassword: janet
-
-# Define a user entry for Fred Bloggs
-dn: uid=fbloggs,ou=people,dc=mycompany,dc=com
-objectClass: inetOrgPerson
-uid: fbloggs
-sn: bloggs
-cn: fred bloggs
-mail: f.bloggs@mycompany.com
-userPassword: fred
-
-# Define an entry to contain LDAP groups
-# searches for roles are based on this entry
-dn: ou=groups,dc=mycompany,dc=com
-objectClass: organizationalUnit
-ou: groups
-
-# Define an entry for the "tomcat" role
-dn: cn=tomcat,ou=groups,dc=mycompany,dc=com
-objectClass: groupOfUniqueNames
-cn: tomcat
-uniqueMember: uid=jjones,ou=people,dc=mycompany,dc=com
-uniqueMember: uid=fbloggs,ou=people,dc=mycompany,dc=com
-
-# Define an entry for the "role1" role
-dn: cn=role1,ou=groups,dc=mycompany,dc=com
-objectClass: groupOfUniqueNames
-cn: role1
-uniqueMember: uid=fbloggs,ou=people,dc=mycompany,dc=com
-
- -

An example Realm element for the OpenLDAP directory -server configured as described above might look like this, assuming -that users use their uid (e.g. jjones) to login to the -application and that an anonymous connection is sufficient to search -the directory and retrieve role information:

- -
-<Realm   className="org.apache.catalina.realm.JNDIRealm"
-     connectionURL="ldap://localhost:389"
-       userPattern="uid={0},ou=people,dc=mycompany,dc=com"
-          roleBase="ou=groups,dc=mycompany,dc=com"
-          roleName="cn"
-        roleSearch="(uniqueMember={0})"
-/>
-
- -

With this configuration, the realm will determine the user's -distinguished name by substituting the username into the -userPattern, authenticate by binding to the directory -with this DN and the password received from the user, and search the -directory to find the user's roles.

- -

Now suppose that users are expected to enter their email address -rather than their userid when logging in. In this case the realm must -search the directory for the user's entry. (A search is also necessary -when user entries are held in multiple subtrees corresponding perhaps -to different organizational units or company locations).

- -

Further, suppose that in addition to the group entries you want to -use an attribute of the user's entry to hold roles. Now the entry for -Janet Jones might read as follows:

- -
-dn: uid=jjones,ou=people,dc=mycompany,dc=com
-objectClass: inetOrgPerson
-uid: jjones
-sn: jones
-cn: janet jones
-mail: j.jones@mycompany.com
-memberOf: role2
-memberOf: role3
-userPassword: janet
-
- -

This realm configuration would satisfy the new requirements:

- -
-<Realm   className="org.apache.catalina.realm.JNDIRealm"
-     connectionURL="ldap://localhost:389"
-          userBase="ou=people,dc=mycompany,dc=com"
-        userSearch="(mail={0})"
-      userRoleName="memberOf"
-          roleBase="ou=groups,dc=mycompany,dc=com"
-          roleName="cn"
-        roleSearch="(uniqueMember={0})"
-/>
-
- -

Now when Janet Jones logs in as "j.jones@mycompany.com", the realm -searches the directory for a unique entry with that value as its mail -attribute and attempts to bind to the directory as -uid=jjones,ou=people,dc=mycompany,dc=com with the given -password. If authentication succeeds, she is assigned three roles: -"role2" and "role3", the values of the "memberOf" attribute in her -directory entry, and "tomcat", the value of the "cn" attribute in the -only group entry of which she is a member.

- -

Finally, to authenticate the user by retrieving -the password from the directory and making a local comparison in the -realm, you might use a realm configuration like this:

- -
-<Realm   className="org.apache.catalina.realm.JNDIRealm"
-    connectionName="cn=Manager,dc=mycompany,dc=com"
-connectionPassword="secret"
-     connectionURL="ldap://localhost:389"
-      userPassword="userPassword"
-       userPattern="uid={0},ou=people,dc=mycompany,dc=com"
-          roleBase="ou=groups,dc=mycompany,dc=com"
-          roleName="cn"
-        roleSearch="(uniqueMember={0})"
-/>
-
- -

However, as discussed above, the default bind mode for -authentication is usually to be preferred.

- -

Additional Notes

- -

JNDIRealm operates according to the following rules:

-
    -
  • When a user attempts to access a protected resource for the first time, - Tomcat will call the authenticate() method of this - Realm. Thus, any changes you have made to the directory - (new users, changed passwords or roles, etc.) will be immediately - reflected.
  • -
  • Once a user has been authenticated, the user (and his or her associated - roles) are cached within Tomcat for the duration of the user's login. - (For FORM-based authentication, that means until the session times out or - is invalidated; for BASIC authentication, that means until the user - closes their browser). The cached user is not saved and - restored across sessions serialisations. Any changes to the directory - information for an already authenticated user will not be - reflected until the next time that user logs on again.
  • -
  • Administering the information in the directory server - is the responsibility of your own applications. Tomcat does not - provide any built-in capabilities to maintain users and roles.
  • -
- -
- - -
UserDatabaseRealm
- -

Introduction

- -

UserDatabaseRealm is an implementation of the Tomcat -Realm interface that uses a JNDI resource to store user -information. By default, the JNDI resource is backed by an XML file. It is not -designed for large-scale production use. At startup time, the UserDatabaseRealm -loads information about all users, and their corresponding roles, from an XML -document (by default, this document is loaded from -$CATALINA_BASE/conf/tomcat-users.xml). The users, their passwords -and their roles may all be editing dynamically, typically via JMX. Changes may -be saved and will be reflected in the XML file.

- -

Realm Element Attributes

- -

To configure UserDatabaseRealm, you will create a <Realm> -element and nest it in your $CATALINA_BASE/conf/server.xml file, -as described above. The attributes for the -UserDatabaseRealm are defined in the Realm -configuration documentation.

- -

User File Format

- -

The users file uses the same format as the -MemoryRealm.

- -

Example

- -

The default installation of Tomcat is configured with a UserDatabaseRealm -nested inside the <Engine> element, so that it applies -to all virtual hosts and web applications. The default contents of the -conf/tomcat-users.xml file is:

-
-<tomcat-users>
-  <user name="tomcat" password="tomcat" roles="tomcat" />
-  <user name="role1"  password="tomcat" roles="role1"  />
-  <user name="both"   password="tomcat" roles="tomcat,role1" />
-</tomcat-users>
-
- -

Additional Notes

- -

UserDatabaseRealm operates according to the following rules:

-
    -
  • When Tomcat first starts up, it loads all defined users and their - associated information from the users file. Changes made to the data in - this file will not be recognized until Tomcat is - restarted. Changes may be made via the UserDatabase resource. Tomcat - provides MBeans that may be accessed via JMX for this purpose.
  • -
  • When a user attempts to access a protected resource for the first time, - Tomcat will call the authenticate() method of this - Realm.
  • -
  • Once a user has been authenticated, the user (and his or her associated - roles) are cached within Tomcat for the duration of the user's login. - (For FORM-based authentication, that means until the session times out or - is invalidated; for BASIC authentication, that means until the user - closes their browser). The cached user is not saved and - restored across sessions serialisations.
  • -
- - -
- - -
MemoryRealm
- -

Introduction

- -

MemoryRealm is a simple demonstration implementation of the -Tomcat Realm interface. It is not designed for production use. -At startup time, MemoryRealm loads information about all users, and their -corresponding roles, from an XML document (by default, this document is loaded -from $CATALINA_BASE/conf/tomcat-users.xml). Changes to the data -in this file are not recognized until Tomcat is restarted.

- -

Realm Element Attributes

- -

To configure MemoryRealm, you will create a <Realm> -element and nest it in your $CATALINA_BASE/conf/server.xml file, -as described above. The attributes for the -MemoryRealm are defined in the Realm -configuration documentation.

- -

User File Format

- -

The users file (by default, conf/tomcat-users.xml must be an -XML document, with a root element <tomcat-users>. Nested -inside the root element will be a <user> element for each -valid user, consisting of the following attributes:

-
    -
  • name - Username this user must log on with.
  • -
  • password - Password this user must log on with (in - clear text if the digest attribute was not set on the - <Realm> element, or digested appropriately as - described here otherwise).
  • -
  • roles - Comma-delimited list of the role names - associated with this user.
  • -
- -

Additional Notes

- -

MemoryRealm operates according to the following rules:

-
    -
  • When Tomcat first starts up, it loads all defined users and their - associated information from the users file. Changes to the data in - this file will not be recognized until Tomcat is - restarted.
  • -
  • When a user attempts to access a protected resource for the first time, - Tomcat will call the authenticate() method of this - Realm.
  • -
  • Once a user has been authenticated, the user (and his or her associated - roles) are cached within Tomcat for the duration of the user's login. - (For FORM-based authentication, that means until the session times out or - is invalidated; for BASIC authentication, that means until the user - closes their browser). The cached user is not saved and - restored across sessions serialisations.
  • -
  • Administering the information in the users file is the responsibility - of your application. Tomcat does not - provide any built-in capabilities to maintain users and roles.
  • -
- - -
- - -
JAASRealm
- -

Introduction

- -

JAASRealm is an implementation of the Tomcat -6 Realm interface that authenticates users through the Java -Authentication & Authorization Service (JAAS) framework which is now -provided as part of the standard Java SE API.

-

Using JAASRealm gives the developer the ability to combine -practically any conceivable security realm with Tomcat's CMA.

-

JAASRealm is prototype for Tomcat of the JAAS-based -J2EE authentication framework for J2EE v1.4, based on the JCP Specification -Request 196 to enhance container-managed security and promote -'pluggable' authentication mechanisms whose implementations would be -container-independent. -

-

Based on the JAAS login module and principal (see javax.security.auth.spi.LoginModule -and javax.security.Principal), you can develop your own -security mechanism or wrap another third-party mechanism for -integration with the CMA as implemented by Tomcat. -

- -

Quick Start

-

To set up Tomcat to use JAASRealm with your own JAAS login module, - you will need to follow these steps:

-
    -
  1. Write your own LoginModule, User and Role classes based -on JAAS (see -the -JAAS Authentication Tutorial and -the JAAS Login Module -Developer's Guide) to be managed by the JAAS Login -Context (javax.security.auth.login.LoginContext) -When developing your LoginModule, note that JAASRealm's built-in CallbackHandler -only recognizes the NameCallback and PasswordCallback at present. -
  2. -
  3. Although not specified in JAAS, you should create -seperate classes to distinguish between users and roles, extending javax.security.Principal, -so that Tomcat can tell which Principals returned from your login -module are users and which are roles (see org.apache.catalina.realm.JAASRealm). -Regardless, the first Principal returned is always treated as the user Principal. -
  4. -
  5. Place the compiled classes on Tomcat's classpath -
  6. -
  7. Set up a login.config file for Java (see JAAS -LoginConfig file) and tell Tomcat where to find it by specifying -its location to the JVM, for instance by setting the environment -variable: JAVA_OPTS=$JAVA_OPTS -Djava.security.auth.login.config==$CATALINA_BASE/conf/jaas.config
  8. - -
  9. Configure your security-constraints in your web.xml for -the resources you want to protect
  10. -
  11. Configure the JAASRealm module in your server.xml
  12. -
  13. Restart Tomcat if it is already running.
  14. -
-

Realm Element Attributes

-

To configure JAASRealm as for step 6 above, you create -a <Realm> element and nest it in your -$CATALINA_BASE/conf/server.xml -file within your <Engine> node. The attributes for the -JAASRealm are defined in the Realm -configuration documentation.

- -

Example

- -

Here is an example of how your server.xml snippet should look.

- -
-<Realm className="org.apache.catalina.realm.JAASRealm"
-                appName="MyFooRealm"
-    userClassNames="org.foobar.realm.FooUser"
-     roleClassNames="org.foobar.realm.FooRole"/>
-
- -

It is the responsibility of your login module to create and save User and -Role objects representing Principals for the user -(javax.security.auth.Subject). If your login module doesn't -create a user object but also doesn't throw a login exception, then the -Tomcat CMA will break and you will be left at the -http://localhost:8080/myapp/j_security_check URI or at some other -unspecified location.

- -

The flexibility of the JAAS approach is two-fold:

-
    -
  • you can carry out whatever processing you require behind -the scenes in your own login module.
  • -
  • you can plug in a completely different LoginModule by changing the configuration -and restarting the server, without any code changes to your application.
  • -
- -

Additional Notes

-
    -
  • When a user attempts to access a protected resource for - the first time, Tomcat will call the authenticate() - method of this Realm. Thus, any changes you have made in - the security mechanism directly (new users, changed passwords or - roles, etc.) will be immediately reflected.
  • -
  • Once a user has been authenticated, the user (and his or - her associated roles) are cached within Tomcat for the duration of - the user's login. For FORM-based authentication, that means until - the session times out or is invalidated; for BASIC authentication, - that means until the user closes their browser. Any changes to the - security information for an already authenticated user will not - be reflected until the next time that user logs on again.
  • -
  • As with other Realm implementations, digested passwords - are supported if the <Realm> element in server.xml - contains a digest attribute; JAASRealm's CallbackHandler - will digest the password prior to passing it back to the LoginModule
  • -
- -
- - -
CombinedRealm
- -

Introduction

- -

CombinedRealm is an implementation of the Tomcat - Realm interface that authenticates users through one or more - sub-Realms.

- -

Using CombinedRealm gives the developer the ability to combine multiple - Realms of the same or different types. This can be used to authenticate - against different sources, provide fall back in case one Realm fails or for - any other purpose that requires multiple Realms.

- -

Sub-realms are defined by nesting Realm elements inside the - Realm element that defines the CombinedRealm. Authentication - will be attempted against each Realm in the order they are - listed. Authentication against any Realm will be sufficient to authenticate - the user.

- -

Realm Element Attributes

-

To configure a CombinedRealm, you create a <Realm> - element and nest it in your $CATALINA_BASE/conf/server.xml - file within your <Engine> or <Host>. - You can also nest inside a <Context> node in a - context.xml file.

- -

Example

- -

Here is an example of how your server.xml snippet should look to use a -UserDatabase Realm and a DataSource Realm.

- -
-<Realm className="org.apache.catalina.realm.CombinedRealm" >
-   <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-             resourceName="UserDatabase"/>
-   <Realm className="org.apache.catalina.realm.DataSourceRealm"
-             dataSourceName="jdbc/authority"
-             userTable="users" userNameCol="user_name" userCredCol="user_pass"
-             userRoleTable="user_roles" roleNameCol="role_name"/>
-</Realm>
-
- -
- -
LockOutRealm
- -

Introduction

- -

LockOutRealm is an implementation of the Tomcat - Realm interface that extends the CombinedRealm to provide lock - out functionality to provide a user lock out mechanism if there are too many - failed authentication attempts in a given period of time.

- -

To ensure correct operation, there is a reasonable degree of - synchronisation in this Realm.

- -

This Realm does not require modification to the underlying Realms or the - associated user storage mecahisms. It achieves this by recording all failed - logins, including those for users that do not exist. To prevent a DOS by - deliberating making requests with invalid users (and hence causing this - cache to grow) the size of the list of users that have failed authentication - is limited.

- -

Sub-realms are defined by nesting Realm elements inside the - Realm element that defines the LockOutRealm. Authentication - will be attempted against each Realm in the order they are - listed. Authentication against any Realm will be sufficient to authenticate - the user.

- -

Realm Element Attributes

-

To configure a LockOutRealm, you create a <Realm> - element and nest it in your $CATALINA_BASE/conf/server.xml - file within your <Engine> or <Host>. - You can also nest inside a <Context> node in a - context.xml file. The attributes for the - LockOutRealm are defined in the Realm - configuration documentation.

- -

Example

- -

Here is an example of how your server.xml snippet should look to add lock out -functionality to a UserDatabase Realm.

- -
-<Realm className="org.apache.catalina.realm.LockOutRealm" >
-   <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-             resourceName="UserDatabase"/>
-</Realm>
-
- -
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/security-howto.html b/bundledApps/tomcat/webapps/docs/security-howto.html deleted file mode 100755 index eb579f55..00000000 --- a/bundledApps/tomcat/webapps/docs/security-howto.html +++ /dev/null @@ -1,358 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Security Considerations

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Security Considerations

Table of Contents
- -
Introduction
-

Tomcat is configured to be reasonably secure for most use cases by - default. Some environments may require more, or less, secure configurations. - This page is to provide a single point of reference for configuration - options that may impact security and to offer some commentary on the - expected impact of changing those options. The intention is to provide a - list of configuration options that should be considered when assessing the - security of a Tomcat installation.

- -

Note: Reading this page is not a substitute for reading - and understanding the detailed configuration documentation. Fuller - descriptions of these attributes may be found in the relevant documentation - pages.

-
Non-Tomcat settings
-

Tomcat configuration should not be the only line of defense. The other - components in the system (operating system, network, database, etc.) should - also be secured.

-

Tomcat should not be run under the root user. Create a dedicated user for - the Tomcat process and provide that user with the minimum necessary - permissions for the operating system. For example, it should not be possible - to log on remotely using the Tomcat user.

-

File permissions should also be suitable restricted. Taking the Tomcat - instances at the ASF as an example (where auto-deployment is disabled and - web applications are deployed as exploded directories), the standard - configuration is to have all Tomcat files owned by root with group Tomcat - and whilst owner has read/write priviliges, group only has read and world - has no permissions. The exceptions are the logs, temp and work directory - that are owned by the Tomcat user rather than root. This means that even if - an attacker compromises the Tomcat process, they can't change the - Tomcat configuration, deploy new web applications or modify existing web - applications. The Tomcat process runs with a umask of 007 to maintain these - permissions.

-

At the network level, consider using a firewall to limit both incoming - and outgoing connections to only those connections you expect to be - present.

-
Default web applications
-

Tomcat ships with a number of web applications by default. - Vulnerabilities have been discovered in these applications in the past. - Applications that are not required should be removed so the system will not - be at risk if another vulnerability is discovered.

-
Security manager
-

Enabling the security manager causes web applications to be run in a - sandbox, significantly limiting a web application's ability to perform - malicious actions such as calling System.exit(), establishing network - connections or accessing the file system outside of the web application's - root and temporary directories. However, it should be noted that there are - some malicious actions, such as triggering high CPU consumption via an - infinite loop, that the security manager cannot prevent.

- -

Enabling the security manager is usually done to limit the potential - impact, should an attacker find a way to compromise a trusted web - application . A security manager may also be used to reduce the risks of - running untrusted web applications (e.g. in hosting environments) but it - should be noted that the security manager only reduces the risks of - running untrusted web applications, it does not eliminate them. If running - multiple untrusted web applications, it is recommended that each web - application is deployed to a separate Tomcat instance (and ideally separate - hosts) to reduce the ability of a malicious web application impacting the - availability of other applications.

- -

Tomcat is tested with the security manager enabled; but the majority of - Tomcat users do not run with a security manager, so Tomcat is not as well - user-tested in this configuration. There have been, and continue to be, - bugs reported that are triggered by running under a security manager.

- -

The restrictions imposed by a security manager are likely to break most - applications if the security manager is enabled. The security manager should - not be used without extensive testing. Ideally, the use of a security - manager should be introduced at the start of the development cycle as it can - be time-consuming to track down and fix issues caused by enabling a security - manager for a mature application.

-
server.xml
-
General
-

The default server.xml contains a large number of comments, including - some example component definitions that are commented out. Removing these - comments makes it considerably easier to read and comprehend - server.xml.

-

If a component type is not listed, then there are no settings for that - type that directly impact security.

-
- -
Server
-

Setting the port attribute to -1 disables - the shutdown port.

-

If the shutdown port is not disabled, a strong password should be - configured for shutdown.

-
- -
Listeners
-

The APR Lifecycle Listener is not stable if compiled on Solaris using - gcc. If using the APR/native connector on Solaris, compile it with the - Sun Studio compiler.

- -

The Security Listener should be enabled and configured as appropriate. -

-
- -
Connectors
-

By default, an HTTP and an AJP connector are configured. Connectors - that will not be used should be removed from server.xml.

- -

The address attribute may be used to control which IP - address the connector listens on for connections. By default, the - connector listens on all configured IP addresses.

- -

The allowTrace attribute may be used to enable TRACE - requests which can be useful for debugging. Due to the way some browsers - handle the response from a TRACE request (which exposes the browser to an - XSS attack), support for TRACE requests is disabled by default.

- -

The maxPostSize attribute controls the maximum size - of a POST request that will be parsed for parameters. The parameters are - cached for the duration of the request so this is limited to 2MB by - default to reduce exposure to a DOS attack.

- -

The maxSavePostSize attribute controls the saving of - POST requests during FORM and CLIENT-CERT authentication. The parameters - are cached for the duration of the authentication (which may be many - minutes) so this is limited to 4KB by default to reduce exposure to a DOS - attack.

- -

The maxParameterCount attribute controls the - maximum number of parameter and value pairs (GET plus POST) that can - be parsed and stored in the request. Excessive parameters are ignored. - If you want to reject such requests, configure a - FailedRequestFilter.

- -

The xpoweredBy attribute controls whether or not the - X-Powered-By HTTP header is sent with each request. If sent, the value of - the header contains the Servlet and JSP specification versions, the full - Tomcat version (e.g. Apache Tomcat/7.0.0), the name of the JVM vendor and - the version of the JVM. This header is disabled by default. This header - can provide useful information to both legitimate clients and attackers. -

- -

The server attribute controls the value of the Server - HTTP header. The default value of this header for Tomcat 4.1.x, 5.0.x, - 5.5.x, 6.0.x and 7.0.x is Apache-Coyote/1.1. This header can provide - limited information to both legitimate clients and attackers.

- -

The SSLEnabled, scheme and - secure attributes may all be independently set. These are - normally used when Tomcat is located behind a reverse proxy and the proxy - is connecting to Tomcat via HTTP or HTTPS. They allow Tomcat to see the - SSL attributes of the connections between the client and the proxy rather - than the proxy and Tomcat. For example, the client may connect to the - proxy over HTTPS but the proxy connects to Tomcat using HTTP. If it is - necessary for Tomcat to be able to distinguish between secure and - non-secure connections received by a proxy, the proxy must use separate - connectors to pass secure and non-secure requests to Tomcat. If the - proxy uses AJP then the SSL attributes of the client connection are - passed via the AJP protocol and separate connectors are not needed.

- -

The ciphers attribute controls the ciphers used for - SSL connections. By default, the default ciphers for the JVM will be used. - This usually means that the weak export grade ciphers will be included in - the list of available ciphers. Secure environments will normally want to - configure a more limited set of ciphers.

- -

The tomcatAuthentication attribute is used with the - AJP connectors to determine if Tomcat should authenticate the user or if - authentication can be delegated to the reverse proxy that will then pass - the authenticated username to Tomcat as part of the AJP protocol.

- -

The allowUnsafeLegacyRenegotiation attribute provides - a workaround for - - CVE-2009-3555, a TLS man in the middle attack. This workaround applies - to the BIO connector. It is only necessary if the underlying SSL - implementation is vulnerable to CVE-2009-3555. For more information on the - current state of this vulnerability and the work-arounds available see the - Tomcat 7 security - page.

- -

The requiredSecret attribute in AJP connectors - configures shared secret between Tomcat and reverse proxy in front of - Tomcat. It is used to prevent unauthorized connections over AJP protocol.

-
- -
Host
-

The host element controls deployment. Automatic deployment allows for - simpler management but also makes it easier for an attacker to deploy a - malicious application. Automatic deployment is controlled by the - autoDeploy and deployOnStartup - attributes. If both are false, only Contexts defined in - server.xml will be deployed and any changes will require a Tomcat restart. -

- -

In a hosted environment where web applications may not be trusted, set - the deployXml attribute to false to ignore any - context.xml packaged with the web application that may try to assign - increased privileges to the web application.

-
- -
Context
-

This applies to Context - elements in all places where they can be defined: - server.xml file, - default context.xml file, - per-host context.xml.default file, - web application context file in per-host configuration directory - or inside the web application.

- -

The crossContext attribute controls if a context is - allowed to access the resources of another context. It is - false by default and should only be changed for trusted web - applications.

- -

The privileged attribute controls if a context is - allowed to use container provided servlets like the Manager servlet. It is - false by default and should only be changed for trusted web - applications.

- -

The allowLinking attribute controls if a context is - allowed to use linked files. If enabled and the context is undeployed, the - links will be followed when deleting the context resources. To avoid this - behaviour, use the aliases attribute. Changing this - setting from the default of false on case insensitive - operating systems (this includes Windows) will disable a number of - security measures and allow, among other things, direct access to the - WEB-INF directory.

-
- -
Valves
-

It is strongly recommended that an AccessLogValve is configured. The - default Tomcat configuration includes an AccessLogValve. These are - normally configured per host but may also be configured per engine or per - context as required.

- -

Any administrative application should be protected by a - RemoteAddrValve. (Note that this Valve is also available as a Filter.) - The allow attribute should be used to limit access to a - set of known trusted hosts.

- -

The default ErrorReportValve includes the Tomcat version number in the - response sent to clients. To avoid this, custom error handling can be - configured within each web application. Alternatively, the version number - can be changed by creating the file - CATALINA_BASE/lib/org/apache/catalina/util/ServerInfo.properties with - content as follows:

-
-server.info=Apache Tomcat/7.0.x
-      
-

Modify the values as required. Note that this will also change the version - number reported in some of the management tools and may make it harder to - determine the real version installed. The CATALINA_HOME/bin/version.bat|sh - script will still report the version number.

- -

The default ErrorReportValve can display stack traces and/or JSP - source code to clients when an error occurs. To avoid this, custom error - handling can be configured within each web application.

-
- -
Realms
-

The MemoryRealm is not intended for production use as any changes to - tomcat-users.xml require a restart of Tomcat to take effect.

- -

The JDBCRealm is not recommended for production use as it is single - threaded for all authentication and authorization options. Use the - DataSourceRealm instead.

- -

The UserDatabaseRealm is not intended for large-scale installations. It - is intended for small-scale, relatively static environments.

- -

The JAASRealm is not widely used and therefore the code is not as - mature as the other realms. Additional testing is recommended before using - this realm.

- -

By default, the realms do not implement any form of account lock-out. - This means that brute force attacks can be successful. To prevent a brute - force attack, the chosen realm should be wrapped in a LockOutRealm.

-
- -
Manager
-

The manager component is used to generate session IDs.

- -

The default entropy value has been shown to generate predictable values - under certain conditions. For more secure session generation, this should - be set to a long string. This is done automatically if the APR/native - library is installed; a random value will be obtained from the APR/native - library.

- -

The class used to generate random session IDs may be changed with - the randomClass attribute.

- -

The length of the session ID may be changed with the - sessionIdLength attribute.

-
-
System Properties
-

Setting org.apache.catalina.connector.RECYCLE_FACADES - system property to true will cause a new facade object to be - created for each request. This reduces the chances of a bug in an - application exposing data from one request to another.

- -

The - org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH and - org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH - system properties allow non-standard parsing of the request URI. Using - these options when behind a reverse proxy may enable an attacker to bypass - any security constraints enforced by the proxy.

- -

The - org.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER - system property has security implications if disabled. Many user - agents, in breach of RFC2616, try to guess the character encoding of text - media types when the specification-mandated default of ISO-8859-1 should be - used. Some browsers will interpret as UTF-7 a response containing characters - that are safe for ISO-8859-1 but trigger an XSS vulnerability if interpreted - as UTF-7.

-
web.xml
-

This applies to the default conf/web.xml file and - WEB-INF/web.xml files in web applications if they define - the components mentioned here.

- -

The DefaultServlet is configured - with readonly set to - true. Changing this to false allows clients to - delete or modify static resources on the server and to upload new - resources. This should not normally be changed without requiring - authentication.

- -

The DefaultServlet is configured with listings set to - false. This isn't because allowing directory listings is - considered unsafe but because generating listings of directories with - thousands of files can consume significant CPU leading to a DOS attack. -

- -

FailedRequestFilter - can be configured and used to reject requests that had errors during - request parameter parsing. Without the filter the default behaviour is - to ignore invalid or excessive parameters.

-
General
-

BASIC and FORM authentication pass user names and passwords in clear - text. Web applications using these authentication mechanisms with clients - connecting over untrusted networks should use SSL.

- -

The session cookie for a session with an authenticated user are nearly - as useful as the user's password to an attacker and in nearly all - circumstances should be afforded the same level of protection as the - password itself. This usually means authenticating over SSL and continuing - to use SSL until the session ends.

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/security-manager-howto.html b/bundledApps/tomcat/webapps/docs/security-manager-howto.html deleted file mode 100755 index 25687961..00000000 --- a/bundledApps/tomcat/webapps/docs/security-manager-howto.html +++ /dev/null @@ -1,482 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Security Manager HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Security Manager HOW-TO

Table of Contents
- -
Background
- -

The Java SecurityManager is what allows a web browser - to run an applet in its own sandbox to prevent untrusted code from - accessing files on the local file system, connecting to a host other - than the one the applet was loaded from, and so on. In the same way - the SecurityManager protects you from an untrusted applet running in - your browser, use of a SecurityManager while running Tomcat can protect - your server from trojan servlets, JSPs, JSP beans, and tag libraries. - Or even inadvertent mistakes.

- -

Imagine if someone who is authorized to publish JSPs on your site - inadvertently included the following in their JSP:

-
-<% System.exit(1); %>
-
- -

Every time this JSP was executed by Tomcat, Tomcat would exit. - Using the Java SecurityManager is just one more line of defense a - system administrator can use to keep the server secure and reliable.

- -

WARNING - A security audit - have been conducted using the Tomcat codebase. Most of the critical - package have been protected and a new security package protection mechanism - has been implemented. Still, make sure that you are satisfied with your SecurityManager - configuration before allowing untrusted users to publish web applications, - JSPs, servlets, beans, or tag libraries. However, running with a - SecurityManager is definitely better than running without one.

- -
Permissions
- -

Permission classes are used to define what Permissions a class loaded - by Tomcat will have. There are a number of Permission classes that are - a standard part of the JDK, and you can create your own Permission class - for use in your own web applications. Both techniques are used in - Tomcat.

- - -
Standard Permissions
- -

This is just a short summary of the standard system SecurityManager - Permission classes applicable to Tomcat. See - http://java.sun.com/security/ - for more information.

- -
    -
  • java.util.PropertyPermission - Controls read/write - access to JVM properties such as java.home.
  • -
  • java.lang.RuntimePermission - Controls use of - some System/Runtime functions like exit() and - exec(). Also control the package access/definition.
  • -
  • java.io.FilePermission - Controls read/write/execute - access to files and directories.
  • -
  • java.net.SocketPermission - Controls use of - network sockets.
  • -
  • java.net.NetPermission - Controls use of - multicast network connections.
  • -
  • java.lang.reflect.ReflectPermission - Controls - use of reflection to do class introspection.
  • -
  • java.security.SecurityPermission - Controls access - to Security methods.
  • -
  • java.security.AllPermission - Allows access to all - permissions, just as if you were running Tomcat without a - SecurityManager.
  • -
- -
- - -
Tomcat Custom Permissions
- -

Tomcat utilizes a custom permission class called - org.apache.naming.JndiPermission. This permission - controls read access to JNDI named file based resources. The permission - name is the JNDI name and there are no actions. A trailing "*" can be - used to do wild card matching for a JNDI named file resource when - granting permission. For example, you might include the following - in your policy file:

-
-permission  org.apache.naming.JndiPermission  "jndi://localhost/examples/*";
-
- -

A Permission entry like this is generated dynamically for each web - application that is deployed, to allow it to read its own static resources - but disallow it from using file access to read any other files (unless - permissions for those files are explicitly granted).

- -

Also, Tomcat always dynamically creates the following file permissions:

-
-permission java.io.FilePermission "** your application context**", "read";
-
-permission java.io.FilePermission
-  "** application working directory**", "read,write";
-permission java.io.FilePermission
-  "** application working directory**/-", "read,write,delete";
-
-

Where **your application context** equals the folder (or WAR file) under which - your application has been deployed and **application working directory** is the - temporary directory provided to your application as required by the - Servlet Specification.

- -
- - -
Configuring Tomcat With A SecurityManager
- -

Policy File Format

- -

The security policies implemented by the Java SecurityManager are - configured in the $CATALINA_BASE/conf/catalina.policy file. - This file completely replaces the java.policy file present - in your JDK system directories. The catalina.policy file - can be edited by hand, or you can use the - policytool - application that comes with Java 1.2 or later.

- -

Entries in the catalina.policy file use the standard - java.policy file format, as follows:

-
-// Example policy file entry
-
-grant [signedBy <signer>,] [codeBase <code source>] {
-  permission  <class>  [<name> [, <action list>]];
-};
-
- -

The signedBy and codeBase entries are - optional when granting permissions. Comment lines begin with "//" and - end at the end of the current line. The codeBase is in the - form of a URL, and for a file URL can use the ${java.home} - and ${catalina.home} properties (which are expanded out to - the directory paths defined for them by the JAVA_HOME, - CATALINA_HOME and CATALINA_BASE environment - variables).

- -

The Default Policy File

- -

The default $CATALINA_BASE/conf/catalina.policy file - looks like this:

- - -
// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// ============================================================================
-// catalina.policy - Security Policy Permissions for Tomcat 7
-//
-// This file contains a default set of security policies to be enforced (by the
-// JVM) when Catalina is executed with the "-security" option.  In addition
-// to the permissions granted here, the following additional permissions are
-// granted to each web application:
-//
-// * Read access to the web application's document root directory
-// * Read, write and delete access to the web application's working directory
-//
-// $Id: catalina.policy 1347048 2012-06-06 18:47:00Z markt $
-// ============================================================================
-
-
-// ========== SYSTEM CODE PERMISSIONS =========================================
-
-
-// These permissions apply to javac
-grant codeBase "file:${java.home}/lib/-" {
-        permission java.security.AllPermission;
-};
-
-// These permissions apply to all shared system extensions
-grant codeBase "file:${java.home}/jre/lib/ext/-" {
-        permission java.security.AllPermission;
-};
-
-// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
-grant codeBase "file:${java.home}/../lib/-" {
-        permission java.security.AllPermission;
-};
-
-// These permissions apply to all shared system extensions when
-// ${java.home} points at $JAVA_HOME/jre
-grant codeBase "file:${java.home}/lib/ext/-" {
-        permission java.security.AllPermission;
-};
-
-
-// ========== CATALINA CODE PERMISSIONS =======================================
-
-
-// These permissions apply to the daemon code
-grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" {
-        permission java.security.AllPermission;
-};
-
-// These permissions apply to the logging API
-// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
-// update this section accordingly.
-//  grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
-grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
-        permission java.io.FilePermission
-         "${java.home}${file.separator}lib${file.separator}logging.properties", "read";
-
-        permission java.io.FilePermission
-         "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read";
-        permission java.io.FilePermission
-         "${catalina.base}${file.separator}logs", "read, write";
-        permission java.io.FilePermission
-         "${catalina.base}${file.separator}logs${file.separator}*", "read, write";
-
-        permission java.lang.RuntimePermission "shutdownHooks";
-        permission java.lang.RuntimePermission "getClassLoader";
-        permission java.lang.RuntimePermission "setContextClassLoader";
-
-        permission java.util.logging.LoggingPermission "control";
-
-        permission java.util.PropertyPermission "java.util.logging.config.class", "read";
-        permission java.util.PropertyPermission "java.util.logging.config.file", "read";
-        permission java.util.PropertyPermission "catalina.base", "read";
-        permission java.util.PropertyPermission
-         "org.apache.juli.logging.UserDataHelper.CONFIG", "read";
-        permission java.util.PropertyPermission
-         "org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME", "read";
-
-        // Note: To enable per context logging configuration, permit read access to
-        // the appropriate file. Be sure that the logging configuration is
-        // secure before enabling such access.
-        // E.g. for the examples web application (uncomment and unwrap
-        // the following to be on a single line):
-        // permission java.io.FilePermission "${catalina.base}${file.separator}
-        //  webapps${file.separator}examples${file.separator}WEB-INF
-        //  ${file.separator}classes${file.separator}logging.properties", "read";
-};
-
-// These permissions apply to the server startup code
-grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
-        permission java.security.AllPermission;
-};
-
-// These permissions apply to the servlet API classes
-// and those that are shared across all class loaders
-// located in the "lib" directory
-grant codeBase "file:${catalina.home}/lib/-" {
-        permission java.security.AllPermission;
-};
-
-
-// If using a per instance lib directory, i.e. ${catalina.base}/lib,
-// then the following permission will need to be uncommented
-// grant codeBase "file:${catalina.base}/lib/-" {
-//         permission java.security.AllPermission;
-// };
-
-
-// ========== WEB APPLICATION PERMISSIONS =====================================
-
-
-// These permissions are granted by default to all web applications
-// In addition, a web application will be given a read FilePermission
-// and JndiPermission for all files and directories in its document root.
-grant {
-    // Required for JNDI lookup of named JDBC DataSource's and
-    // javamail named MimePart DataSource used to send mail
-    permission java.util.PropertyPermission "java.home", "read";
-    permission java.util.PropertyPermission "java.naming.*", "read";
-    permission java.util.PropertyPermission "javax.sql.*", "read";
-
-    // OS Specific properties to allow read access
-    permission java.util.PropertyPermission "os.name", "read";
-    permission java.util.PropertyPermission "os.version", "read";
-    permission java.util.PropertyPermission "os.arch", "read";
-    permission java.util.PropertyPermission "file.separator", "read";
-    permission java.util.PropertyPermission "path.separator", "read";
-    permission java.util.PropertyPermission "line.separator", "read";
-
-    // JVM properties to allow read access
-    permission java.util.PropertyPermission "java.version", "read";
-    permission java.util.PropertyPermission "java.vendor", "read";
-    permission java.util.PropertyPermission "java.vendor.url", "read";
-    permission java.util.PropertyPermission "java.class.version", "read";
-    permission java.util.PropertyPermission "java.specification.version", "read";
-    permission java.util.PropertyPermission "java.specification.vendor", "read";
-    permission java.util.PropertyPermission "java.specification.name", "read";
-
-    permission java.util.PropertyPermission "java.vm.specification.version", "read";
-    permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
-    permission java.util.PropertyPermission "java.vm.specification.name", "read";
-    permission java.util.PropertyPermission "java.vm.version", "read";
-    permission java.util.PropertyPermission "java.vm.vendor", "read";
-    permission java.util.PropertyPermission "java.vm.name", "read";
-
-    // Required for OpenJMX
-    permission java.lang.RuntimePermission "getAttribute";
-
-    // Allow read of JAXP compliant XML parser debug
-    permission java.util.PropertyPermission "jaxp.debug", "read";
-
-    // All JSPs need to be able to read this package
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat";
-
-    // Precompiled JSPs need access to these packages.
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.el";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
-    permission java.lang.RuntimePermission
-     "accessClassInPackage.org.apache.jasper.runtime.*";
-
-    // Precompiled JSPs need access to these system properties.
-    permission java.util.PropertyPermission
-     "org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER", "read";
-    permission java.util.PropertyPermission
-     "org.apache.el.parser.COERCE_TO_ZERO", "read";
-
-    // The cookie code needs these.
-    permission java.util.PropertyPermission
-     "org.apache.catalina.STRICT_SERVLET_COMPLIANCE", "read";
-    permission java.util.PropertyPermission
-     "org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING", "read";
-    permission java.util.PropertyPermission
-     "org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR", "read";
-
-    // Applications using Comet need to be able to access this package
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.comet";
-
-    // Applications using WebSocket need to be able to access this package
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.websocket";
-};
-
-
-// The Manager application needs access to the following packages to support the
-// session display functionality. These settings support the following
-// configurations:
-// - default CATALINA_HOME == CATALINA_BASE
-// - CATALINA_HOME != CATALINA_BASE, per instance Manager in CATALINA_BASE
-// - CATALINA_HOME != CATALINA_BASE, shared Manager in CATALINA_HOME
-grant codeBase "file:${catalina.base}/webapps/manager/-" {
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
-};
-grant codeBase "file:${catalina.home}/webapps/manager/-" {
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.ha.session";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.manager.util";
-    permission java.lang.RuntimePermission "accessClassInPackage.org.apache.catalina.util";
-};
-
-// You can assign additional permissions to particular web applications by
-// adding additional "grant" entries here, based on the code base for that
-// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
-//
-// Different permissions can be granted to JSP pages, classes loaded from
-// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
-// directory, or even to individual jar files in the /WEB-INF/lib/ directory.
-//
-// For instance, assume that the standard "examples" application
-// included a JDBC driver that needed to establish a network connection to the
-// corresponding database and used the scrape taglib to get the weather from
-// the NOAA web server.  You might create a "grant" entries like this:
-//
-// The permissions granted to the context root directory apply to JSP pages.
-// grant codeBase "file:${catalina.base}/webapps/examples/-" {
-//      permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
-//      permission java.net.SocketPermission "*.noaa.gov:80", "connect";
-// };
-//
-// The permissions granted to the context WEB-INF/classes directory
-// grant codeBase "file:${catalina.base}/webapps/examples/WEB-INF/classes/-" {
-// };
-//
-// The permission granted to your JDBC driver
-// grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar!/-" {
-//      permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
-// };
-// The permission granted to the scrape taglib
-// grant codeBase "jar:file:${catalina.base}/webapps/examples/WEB-INF/lib/scrape.jar!/-" {
-//      permission java.net.SocketPermission "*.noaa.gov:80", "connect";
-// };
-
-
- -

Starting Tomcat With A SecurityManager

- -

Once you have configured the catalina.policy file for use - with a SecurityManager, Tomcat can be started with a SecurityManager in - place by using the "-security" option:

-
-$CATALINA_HOME/bin/catalina.sh start -security    (Unix)
-%CATALINA_HOME%\bin\catalina start -security      (Windows)
-
- -
Configuring Package Protection in Tomcat
-

Starting with Tomcat 5, it is now possible to configure which Tomcat - internal package are protected againts package definition and access. See - - http://java.sun.com/security/seccodeguide.html - for more information.

- - -

WARNING: Be aware that removing the default package protection - could possibly open a security hole

- -

The Default Properties File

- -

The default $CATALINA_BASE/conf/catalina.properties file - looks like this:

-
-#
-# List of comma-separated packages that start with or equal this string
-# will cause a security exception to be thrown when
-# passed to checkPackageAccess unless the
-# corresponding RuntimePermission ("accessClassInPackage."+package) has
-# been granted.
-package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,
-org.apache.jasper.
-#
-# List of comma-separated packages that start with or equal this string
-# will cause a security exception to be thrown when
-# passed to checkPackageDefinition unless the
-# corresponding RuntimePermission ("defineClassInPackage."+package) has
-# been granted.
-#
-# by default, no packages are restricted for definition, and none of
-# the class loaders supplied with the JDK call checkPackageDefinition.
-#
-package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,
-org.apache.tomcat.,org.apache.jasper.
-
-

Once you have configured the catalina.properties file for use - with a SecurityManager, remember to re-start Tomcat.

-
Troubleshooting
- -

If your web application attempts to execute an operation that is - prohibited by lack of a required Permission, it will throw an - AccessControLException or a SecurityException - when the SecurityManager detects the violation. Debugging the permission - that is missing can be challenging, and one option is to turn on debug - output of all security decisions that are made during execution. This - is done by setting a system property before starting Tomcat. The easiest - way to do this is via the CATALINA_OPTS environment variable. - Execute this command:

-
-export CATALINA_OPTS=-Djava.security.debug=all    (Unix)
-set CATALINA_OPTS=-Djava.security.debug=all       (Windows)
-
- -

before starting Tomcat.

- -

WARNING - This will generate many megabytes - of output! However, it can help you track down problems by searching - for the word "FAILED" and determining which permission was being checked - for. See the Java security documentation for more options that you can - specify here as well.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/servletapi/index.html b/bundledApps/tomcat/webapps/docs/servletapi/index.html deleted file mode 100755 index ab0da83a..00000000 --- a/bundledApps/tomcat/webapps/docs/servletapi/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - API docs - - - - -The Servlet Javadoc is not installed by default. Download and install -the "fulldocs" package to get it. - -You can also access the javadoc online in the Tomcat - -documentation bundle. - - - diff --git a/bundledApps/tomcat/webapps/docs/setup.html b/bundledApps/tomcat/webapps/docs/setup.html deleted file mode 100755 index c514f61d..00000000 --- a/bundledApps/tomcat/webapps/docs/setup.html +++ /dev/null @@ -1,134 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Tomcat Setup

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Tomcat Setup

Table of Contents
- -
Introduction
-

- This document introduces several ways to set up Tomcat for running - on different platforms. Please note that some advanced setup issues - are not covered here: the full distribution (ZIP file or tarball) - includes a file called - RUNNING.txt which discusses these issues. We encourage you to refer - to it if the information below does not answer some of your questions. -

-
Windows
- -

- Installing Tomcat on Windows can be done easily using the Windows - installer. Its interface and functionality is similar to other wizard - based installers, with only a few items of interest. -

- -

-

    -
  • Installation as a service: Tomcat will be - installed as a Windows service no matter what setting is selected. - Using the checkbox on the component page sets the service as "auto" - startup, so that Tomcat is automatically started when Windows - starts. For optimal security, the service should be run as a - separate user, with reduced permissions (see the Windows Services - administration tool and its documentation).
  • -
  • Java location: The installer will provide a default - JRE to use to run the service. The installer uses the registry to - determine the base path of a Java 6 or later JRE, including the JRE - installed as part of the full JDK. When running on a 64-bit - operating system, the installer will first look for a 64-bit JRE and - only look for a 32-bit JRE if a 64-bit JRE is not found. It is not - mandatory to use the default JRE detected by the installer. Any - installed Java 6 or later JRE (32-bit or 64-bit) may be used.
  • -
  • Tray icon: When Tomcat is run as a service, there - will not be any tray icon present when Tomcat is running. Note that - when choosing to run Tomcat at the end of installation, the tray - icon will be used even if Tomcat was installed as a service.
  • -
  • Refer to the - Windows Service HOW-TO - for information on how to manage Tomcat as a Windows service. -
  • -
-

- -

The installer will create shortcuts allowing starting and configuring - Tomcat. It is important to note that the Tomcat administration web - application can only be used when Tomcat is running.

- -
Unix daemon
- -

Tomcat can be run as a daemon using the jsvc tool from the - commons-daemon project. Source tarballs for jsvc are included with the - Tomcat binaries, and need to be compiled. Building jsvc requires - a C ANSI compiler (such as GCC), GNU Autoconf, and a JDK.

- -

Before running the script, the JAVA_HOME environment - variable should be set to the base path of the JDK. Alternately, when - calling the ./configure script, the path of the JDK may - be specified using the --with-java parameter, such as - ./configure --with-java=/usr/java.

- -

Using the following commands should result in a compiled jsvc binary, - located in the $CATALINA_HOME/bin folder. This assumes - that GNU TAR is used, and that CATALINA_HOME is an - environment variable pointing to the base path of the Tomcat - installation.

- -

Please note that you should use the GNU make (gmake) instead of - the native BSD make on FreeBSD systems.

- -
-    cd $CATALINA_HOME/bin
-    tar xvfz commons-daemon-native.tar.gz
-    cd commons-daemon-1.0.x-native-src/unix
-    ./configure
-    make
-    cp jsvc ../..
-    cd ../..
-
- -

Tomcat can then be run as a daemon using the following commands.

- -
-    cd $CATALINA_HOME
-    ./bin/jsvc -cp ./bin/bootstrap.jar:./bin/tomcat-juli.jar \
-        -outfile ./logs/catalina.out -errfile ./logs/catalina.err \
-        org.apache.catalina.startup.Bootstrap
-
- -

You may also need to specify -jvm server if the JVM defaults - to using a server VM rather than a client VM. This has been observed on - OSX.

- -

jsvc has other useful parameters, such as -user which - causes it to switch to another user after the daemon initialization is - complete. This allows, for example, running Tomcat as a non privileged - user while still being able to use privileged ports. Note that if you - use this option and start Tomcat as root, you'll need to disable the - org.apache.catalina.security.SecurityListener check that - prevents Tomcat starting when running as root.

- -

jsvc --help will return the full jsvc usage - information. In particular, the -debug option is useful - to debug issues running jsvc.

- -

The file $CATALINA_HOME/bin/daemon.sh can be used as a - template for starting Tomcat automatically at boot time from - /etc/init.d with jsvc.

- -

Note that the Commons-Daemon JAR file must be on your runtime classpath - to run Tomcat in this manner. The Commons-Daemon JAR file is in the - Class-Path entry of the bootstrap.jar manifest, but if you get a - ClassNotFoundException or a NoClassDefFoundError for a Commons-Daemon - class, add the Commons-Daemon JAR to the -cp argument when launching - jsvc.

- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/ssi-howto.html b/bundledApps/tomcat/webapps/docs/ssi-howto.html deleted file mode 100755 index 97f6890e..00000000 --- a/bundledApps/tomcat/webapps/docs/ssi-howto.html +++ /dev/null @@ -1,364 +0,0 @@ -Apache Tomcat 7 (7.0.30) - SSI How To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

SSI How To

Table of Contents
- -
Introduction
- -

SSI (Server Side Includes) are directives that are placed in HTML pages, -and evaluated on the server while the pages are being served. They let you -add dynamically generated content to an existing HTML page, without having -to serve the entire page via a CGI program, or other dynamic technology. -

- -

Within Tomcat SSI support can be added when using Tomcat as your -HTTP server and you require SSI support. Typically this is done -during development when you don't want to run a web server like Apache.

- -

Tomcat SSI support implements the same SSI directives as Apache. See the - -Apache Introduction to SSI for information on using SSI directives.

- -

SSI support is available as a servlet and as a filter. You should use one -or the other to provide SSI support but not both.

- -

Servlet based SSI support is implemented using the class -org.apache.catalina.ssi.SSIServlet. Traditionally, this servlet -is mapped to the URL pattern "*.shtml".

- -

Filter based SSI support is implemented using the class -org.apache.catalina.ssi.SSIFilter. Traditionally, this filter -is mapped to the URL pattern "*.shtml", though it can be mapped to "*" as -it will selectively enable/disable SSI processing based on mime types. The -contentType init param allows you to apply SSI processing to JSP pages, -javascript, or any other content you wish.

-

By default SSI support is disabled in Tomcat.

-
Installation
- -

CAUTION - SSI directives can be used to execute programs -external to the Tomcat JVM. If you are using the Java SecurityManager this -will bypass your security policy configuration in catalina.policy. -

- -

To use the SSI servlet, remove the XML comments from around the SSI servlet -and servlet-mapping configuration in -$CATALINA_BASE/conf/web.xml.

- -

To use the SSI filter, remove the XML comments from around the SSI filter -and filter-mapping configuration in -$CATALINA_BASE/conf/web.xml.

- -

Only Contexts which are marked as privileged may use SSI features (see the -privileged property of the Context element).

- -
Servlet Configuration
- -

There are several servlet init parameters which can be used to -configure the behaviour of the SSI servlet. -

    -
  • buffered - Should output from this servlet be buffered? -(0=false, 1=true) Default 0 (false).
  • -
  • debug - Debugging detail level for messages logged -by this servlet. Default 0.
  • -
  • expires - The number of seconds before a page with SSI -directives will expire. Default behaviour is for all SSI directives to be -evaluated for every request.
  • -
  • isVirtualWebappRelative - Should "virtual" SSI directive -paths be interpreted as relative to the context root, instead of the server -root? Default false.
  • -
  • inputEncoding - The encoding to be assumed for SSI -resources if one cannot be determined from the resource itself. Default is -the default platform encoding.
  • -
  • outputEncoding - The encoding to be used for the result -of the SSI processing. Default is UTF-8.
  • -
  • allowExec - Is the exec command enabled? Default is -false.
  • -
-

- -
Filter Configuration
- -

There are several filter init parameters which can be used to -configure the behaviour of the SSI filter. -

    -
  • contentType - A regex pattern that must be matched before -SSI processing is applied. When crafting your own pattern, don't forget that a -mime content type may be followed by an optional character set in the form -"mime/type; charset=set" that you must take into account. Default is -"text/x-server-parsed-html(;.*)?".
  • -
  • debug - Debugging detail level for messages logged -by this servlet. Default 0.
  • -
  • expires - The number of seconds before a page with SSI -directives will expire. Default behaviour is for all SSI directives to be -evaluated for every request.
  • -
  • isVirtualWebappRelative - Should "virtual" SSI directive -paths be interpreted as relative to the context root, instead of the server -root? Default false.
  • -
  • allowExec - Is the exec command enabled? Default is -false.
  • -
-

- -
Directives
-

Server Side Includes are invoked by embedding SSI directives in an HTML document - whose type will be processed by the SSI servlet. The directives take the form of an HTML - comment. The directive is replaced by the results of interpreting it before sending the - page to the client. The general form of a directive is:

-

<!--#directive [parm=value] -->

-

The directives are: -

    -
  • -config - <!--#config timefmt="%B %Y" --> -Used to set the format of dates and other items processed by SSI -
  • -
  • -echo - <!--#echo var="VARIABLE_NAME" --> -will be replaced by the value of the variable. -
  • -
  • -exec - Used to run commands on the host system. -
  • -
  • -include - <!--#include virtual="file-name" --> -inserts the contents -
  • -
  • -flastmod - <!--#flastmod file="filename.shtml" --> -Returns the time that a file was lost modified. -
  • -
  • -fsize - <!--#fsize file="filename.shtml" --> -Returns the size of a file. -
  • -
  • -printenv - <!--#printenv --> -Returns the list of all the defined variables. -
  • -
  • -set - <!--#set var="foo" value="Bar" --> -is used to assign a value to a user-defind variable. -
  • -
  • -if elif endif else - Used to create conditional sections. For example:
  • -<!--#config timefmt="%A" -->
    - <!--#if expr="$DATE_LOCAL = /Monday/" -->
    - <p>Meeting at 10:00 on Mondays</p>
    - <!--#elif expr="$DATE_LOCAL = /Friday/" -->
    - <p>Turn in your time card</p>
    - <!--#else -->
    - <p>Yoga class at noon.</p>
    - <!--#endif -->
    -
-

-See the -

-Apache Introduction to SSI for more information on using SSI directives.

-
Variables
-

The SSI servlet currently implements the following variables: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Variable NameDescription
AUTH_TYPE - The type of authentication used for this user: BASIC, FORM, etc.
CONTENT_LENGTH - The length of the data (in bytes or the number of - characters) passed from a form.
CONTENT_TYPE - The MIME type of the query data, such as "text/html".
DATE_GMT -Current date and time in GMT
DATE_LOCAL -Current date and time in the local time zone
DOCUMENT_NAME -The current file
DOCUMENT_URI -Virtual path to the file
GATEWAY_INTERFACE - The revision of the Common Gateway Interface that the - server uses if enabled: "CGI/1.1".
HTTP_ACCEPT - A list of the MIME types that the client can accept.
HTTP_ACCEPT_ENCODING - A list of the compression types that the client can accept.
HTTP_ACCEPT_LANGUAGE - A list of the languages that the client can accept.
HTTP_CONNECTION - The way that the connection from the client is being managed: - "Close" or "Keep-Alive".
HTTP_HOST - The web site that the client requested.
HTTP_REFERER - The URL of the document that the client linked from.
HTTP_USER_AGENT - The browser the client is using to issue the request.
LAST_MODIFIED -Last modification date and time for current file
PATH_INFO - Extra path information passed to a servlet.
PATH_TRANSLATED - The translated version of the path given by the - variable PATH_INFO.
QUERY_STRING -The query string that follows the "?" in the URL. -
QUERY_STRING_UNESCAPED -Undecoded query string with all shell metacharacters escaped -with "\"
REMOTE_ADDR - The remote IP address of the user making the request.
REMOTE_HOST - The remote hostname of the user making the request.
REMOTE_PORT - The port number at remote IP address of the user making the request.
REMOTE_USER - The authenticated name of the user.
REQUEST_METHOD - The method with which the information request was - issued: "GET", "POST" etc.
REQUEST_URI - The web page originally requested by the client.
SCRIPT_FILENAME - The location of the current web page on the server.
SCRIPT_NAME - The name of the web page.
SERVER_ADDR - The server's IP address.
SERVER_NAME - The server's hostname or IP address.
SERVER_PORT - The port on which the server received the request.
SERVER_PROTOCOL - The protocol used by the server. E.g. "HTTP/1.1".
SERVER_SOFTWARE - The name and version of the server software that is - answering the client request.
UNIQUE_ID - A token used to identify the current session if one - has been established.
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/ssl-howto.html b/bundledApps/tomcat/webapps/docs/ssl-howto.html deleted file mode 100755 index 0aca6360..00000000 --- a/bundledApps/tomcat/webapps/docs/ssl-howto.html +++ /dev/null @@ -1,574 +0,0 @@ -Apache Tomcat 7 (7.0.30) - SSL Configuration HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

SSL Configuration HOW-TO

Table of Contents
- -
Quick Start
- -
-

The description below uses the variable name $CATALINA_BASE to refer the - base directory against which most relative paths are resolved. If you have - not configured Tomcat for multiple instances by setting a CATALINA_BASE - directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, - the directory into which you have installed Tomcat.

-
- -

To install and configure SSL support on Tomcat, you need to follow -these simple steps. For more information, read the rest of this HOW-TO.

-
    -
  1. Create a keystore file to store the server's private key and -self-signed certificate by executing the following command: -

    Windows:

    -
    -%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
    -
    -

    Unix:

    -
    -$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
    -
    -

    - and specify a password value of "changeit".


  2. -
  3. Uncomment the "SSL HTTP/1.1 Connector" entry in - $CATALINA_BASE/conf/server.xml and modify as described in - the Configuration section below.
  4. -

    -
- - -
Introduction to SSL
- -

SSL, or Secure Socket Layer, is a technology which allows web browsers and -web servers to communicate over a secured connection. This means that the data -being sent is encrypted by one side, transmitted, then decrypted by the other -side before processing. This is a two-way process, meaning that both the -server AND the browser encrypt all traffic before sending out data.

- -

Another important aspect of the SSL protocol is Authentication. This means -that during your initial attempt to communicate with a web server over a secure -connection, that server will present your web browser with a set of -credentials, in the form of a "Certificate", as proof the site is who and what -it claims to be. In certain cases, the server may also request a Certificate -from your web browser, asking for proof that you are who you claim -to be. This is known as "Client Authentication," although in practice this is -used more for business-to-business (B2B) transactions than with individual -users. Most SSL-enabled web servers do not request Client Authentication.

- -
SSL and Tomcat
- -

It is important to note that configuring Tomcat to take advantage of -secure sockets is usually only necessary when running it as a stand-alone -web server. When running Tomcat primarily as a Servlet/JSP container behind -another web server, such as Apache or Microsoft IIS, it is usually necessary -to configure the primary web server to handle the SSL connections from users. -Typically, this server will negotiate all SSL-related functionality, then -pass on any requests destined for the Tomcat container only after decrypting -those requests. Likewise, Tomcat will return cleartext responses, that will -be encrypted before being returned to the user's browser. In this environment, -Tomcat knows that communications between the primary web server and the -client are taking place over a secure connection (because your application -needs to be able to ask about this), but it does not participate in the -encryption or decryption itself.

- -
Certificates
- -

In order to implement SSL, a web server must have an associated Certificate -for each external interface (IP address) that accepts secure connections. -The theory behind this design is that a server should provide some kind of -reasonable assurance that its owner is who you think it is, particularly -before receiving any sensitive information. While a broader explanation of -Certificates is beyond the scope of this document, think of a Certificate -as a "digital driver's license" for an Internet address. It states what -company the site is associated with, along with some basic contact -information about the site owner or administrator.

- -

This "driver's license" is cryptographically signed by its owner, and is -therefore extremely difficult for anyone else to forge. For sites involved -in e-commerce, or any other business transaction in which authentication of -identity is important, a Certificate is typically purchased from a well-known -Certificate Authority (CA) such as VeriSign or Thawte. Such -certificates can be electronically verified -- in effect, the Certificate -Authority will vouch for the authenticity of the certificates that it grants, -so you can believe that that Certificate is valid if you trust the Certificate -Authority that granted it.

- -

In many cases, however, authentication is not really a concern. An -administrator may simply want to ensure that the data being transmitted and -received by the server is private and cannot be snooped by anyone who may be -eavesdropping on the connection. Fortunately, Java provides a relatively -simple command-line tool, called keytool, which can easily create -a "self-signed" Certificate. Self-signed Certificates are simply user -generated Certificates which have not been officially registered with any -well-known CA, and are therefore not really guaranteed to be authentic at all. -Again, this may or may not even be important, depending on your needs.

- -
General Tips on Running SSL
- -

The first time a user attempts to access a secured page on your site, -he or she is typically presented with a dialog containing the details of -the certificate (such as the company and contact name), and asked if he or she -wishes to accept the Certificate as valid and continue with the transaction. -Some browsers will provide an option for permanently accepting a given -Certificate as valid, in which case the user will not be bothered with a -prompt each time they visit your site. Other browsers do not provide this -option. Once approved by the user, a Certificate will be considered valid -for at least the entire browser session.

- -

Also, while the SSL protocol was designed to be as efficient as securely -possible, encryption/decryption is a computationally expensive process from -a performance standpoint. It is not strictly necessary to run an entire -web application over SSL, and indeed a developer can pick and choose which -pages require a secure connection and which do not. For a reasonably busy -site, it is customary to only run certain pages under SSL, namely those -pages where sensitive information could possibly be exchanged. This would -include things like login pages, personal information pages, and shopping -cart checkouts, where credit card information could possibly be transmitted. -Any page within an application can be requested over a secure socket by -simply prefixing the address with https: instead of -http:. Any pages which absolutely require -a secure connection should check the protocol type associated with the -page request and take the appropriate action if https is not -specified.

- -

Finally, using name-based virtual hosts on a secured connection can be -problematic. This is a design limitation of the SSL protocol itself. The SSL -handshake, where the client browser accepts the server certificate, must occur -before the HTTP request is accessed. As a result, the request information -containing the virtual host name cannot be determined prior to authentication, -and it is therefore not possible to assign multiple certificates to a single -IP address. If all virtual hosts on a single IP address need to authenticate -against the same certificate, the addition of multiple virtual hosts should not -interfere with normal SSL operations on the server. Be aware, however, that -most client browsers will compare the server's domain name against the domain -name listed in the certificate, if any (applicable primarily to official, -CA-signed certificates). If the domain names do not match, these browsers will -display a warning to the client user. In general, only address-based virtual -hosts are commonly used with SSL in a production environment.

- -
Configuration
- -
Prepare the Certificate Keystore
- -

Tomcat currently operates only on JKS, PKCS11 or -PKCS12 format keystores. The JKS format -is Java's standard "Java KeyStore" format, and is the format created by the -keytool command-line utility. This tool is included in the JDK. -The PKCS12 format is an internet standard, and can be manipulated -via (among other things) OpenSSL and Microsoft's Key-Manager. -

- -

Each entry in a keystore is identified by an alias string. Whilst many -keystore implementations treat aliases in a case insensitive manner, case -sensitive implementations are available. The PKCS11 specification, -for example, requires that aliases are case sensitive. To avoid issues related -to the case sensitivity of aliases, it is not recommended to use aliases that -differ only in case. -

- -

To import an existing certificate into a JKS keystore, please read the -documentation (in your JDK documentation package) about keytool. -Note that OpenSSL often adds readable comments before the key, -keytooldoes not support that, so remove the OpenSSL comments if -they exist before importing the key using keytool. -

-

To import an existing certificate signed by your own CA into a PKCS12 -keystore using OpenSSL you would execute a command like: -

openssl pkcs12 -export -in mycert.crt -inkey mykey.key \
-                        -out mycert.p12 -name tomcat -CAfile myCA.crt \
-                        -caname root -chain
-
-For more advanced cases, consult the OpenSSL -documentation. -

-

To create a new keystore from scratch, containing a single self-signed -Certificate, execute the following from a terminal command line:

-

Windows:

-
-%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
-
-

Unix:

-
-$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
-
- -

(The RSA algorithm should be preferred as a secure algorithm, and this -also ensures general compatibility with other servers and components.)

- -

This command will create a new file, in the home directory of the user -under which you run it, named ".keystore". To specify a -different location or filename, add the -keystore parameter, -followed by the complete pathname to your keystore file, -to the keytool command shown above. You will also need to -reflect this new location in the server.xml configuration file, -as described later. For example:

-

Windows:

-
-%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA \
-  -keystore \path\to\my\keystore
-
-

Unix:

-
-$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA \
-  -keystore /path/to/my/keystore
-
- -

After executing this command, you will first be prompted for the keystore -password. The default password used by Tomcat is "changeit" -(all lower case), although you can specify a custom password if you like. -You will also need to specify the custom password in the -server.xml configuration file, as described later.

- -

Next, you will be prompted for general information about this Certificate, -such as company, contact name, and so on. This information will be displayed -to users who attempt to access a secure page in your application, so make -sure that the information provided here matches what they will expect.

- -

Finally, you will be prompted for the key password, which is the -password specifically for this Certificate (as opposed to any other -Certificates stored in the same keystore file). The keytool prompt -will tell you that pressing the ENTER key automatically uses the same password -for the key as the keystore. You are free to use the same password or to select -a custom one. If you select a different password to the keystore password, you -will also need to specify the custom password in the server.xml -configuration file.

- -

If everything was successful, you now have a keystore file with a -Certificate that can be used by your server.

- -
- -
Edit the Tomcat Configuration File
-

-Tomcat can use two different implementations of SSL: -

    -
  • the JSSE implementation provided as part of the Java runtime (since 1.4)
  • -
  • the APR implementation, which uses the OpenSSL engine by default.
  • -
-The exact configuration details depend on which implementation is being used. -The implementation used by Tomcat is chosen automatically unless it is overriden as described below. -If the installation uses APR -- i.e. you have installed the Tomcat native library - -then it will use the APR SSL implementation, otherwise it will use the Java JSSE implementation. -

- -

- To avoid auto configuration you can define which implementation to use by specifying a classname - in the protocol attribute of the Connector.
- To define a Java (JSSE) connector, regardless of whether the APR library is loaded or not do: -

-<-- Define a blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 -->
-<Connector protocol="org.apache.coyote.http11.Http11Protocol"
-           port="8443" .../>
-
-<-- Define a non-blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 -->
-<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
-           port="8443" .../>
-
-Alternatively, to specify an APR connector (the APR library must be available) use: -
-<-- Define a APR SSL Coyote HTTP/1.1 Connector on port 8443 -->
-<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
-           port="8443" .../>
-
- -

- -

If you are using APR, you have the option of configuring an alternative engine to OpenSSL. -

-<Listener className="org.apache.catalina.core.AprLifecycleListener"
-          SSLEngine="someengine" SSLRandomSeed="somedevice" />
-
-The default value is -
-<Listener className="org.apache.catalina.core.AprLifecycleListener"
-          SSLEngine="on" SSLRandomSeed="builtin" />
-
-So to use SSL under APR, make sure the SSLEngine attribute is set to something other than off. -The default value is on and if you specify another value, it has to be a valid engine name. -
-If you haven't compiled in SSL support into your Tomcat Native library, then you can turn this initialization off -
-<Listener className="org.apache.catalina.core.AprLifecycleListener"
-          SSLEngine="off" />
-
-SSLRandomSeed allows to specify a source of entropy. Productive system needs a reliable source of entropy -but entropy may need a lot of time to be collected therefore test systems could use no blocking entropy -sources like "/dev/urandom" that will allow quicker starts of Tomcat. - -

- -

The final step is to configure the Connector in the -$CATALINA_BASE/conf/server.xml file, where -$CATALINA_BASE represents the base directory for the -Tomcat instance. An example <Connector> element -for an SSL connector is included in the default server.xml -file installed with Tomcat. To configure an SSL connector that uses JSSE, you -will need to remove the comments and edit it so it looks something like -this:

-
-<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
-<Connector
-           protocol="HTTP/1.1"
-           port="8443" maxThreads="200"
-           scheme="https" secure="true" SSLEnabled="true"
-           keystoreFile="${user.home}/.keystore" keystorePass="changeit"
-           clientAuth="false" sslProtocol="TLS"/>
--->
-
-

- The example above will throw an error if you have the APR and the Tomcat - Native libraries in your path, as Tomcat will try to use the APR connector. - The APR connector uses different attributes for many SSL settings, - particularly keys and certificates. An example of an APR configuration is: -

-<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
-<Connector
-           protocol="HTTP/1.1"
-           port="8443" maxThreads="200"
-           scheme="https" secure="true" SSLEnabled="true"
-           SSLCertificateFile="/usr/local/ssl/server.crt"
-           SSLCertificateKeyFile="/usr/local/ssl/server.pem"
-           SSLVerifyClient="optional" SSLProtocol="TLSv1"/>
-
-

- -

You will note that the example SSL connector elements are commented out by -default. You can either remove the comment tags from around the the example SSL -connector you wish to use or add a new Connector element of your own. In either -case, you will need to configure the SSL Connector for your requirements -and environment. The configuration options and information on which attributes -are mandatory, are documented in the SSL Support section of the -HTTP connector configuration -reference. Make sure that you use the correct attributes for the connector you -are using. The BIO and NIO connectors use JSSE whereas the APR/native connector -uses APR.

- -

The port attribute (default value is 8443) is the TCP/IP -port number on which Tomcat will listen for secure connections. You can -change this to any port number you wish (such as to the default port for -https communications, which is 443). However, special setup -(outside the scope of this document) is necessary to run Tomcat on port -numbers lower than 1024 on many operating systems.

- -
-

If you change the port number here, you should also change the - value specified for the redirectPort attribute on the - non-SSL connector. This allows Tomcat to automatically redirect - users who attempt to access a page with a security constraint specifying - that SSL is required, as required by the Servlet Specification.

-
- -

After completing these configuration changes, you must restart Tomcat as -you normally do, and you should be in business. You should be able to access -any web application supported by Tomcat via SSL. For example, try:

-
-https://localhost:8443
-
-

and you should see the usual Tomcat splash page (unless you have modified -the ROOT web application). If this does not work, the following section -contains some troubleshooting tips.

- -
- -
Installing a Certificate from a Certificate Authority
-

To obtain and install a Certificate from a Certificate Authority (like verisign.com, thawte.com -or trustcenter.de), read the previous section and then follow these instructions:

- -
Create a local Certificate Signing Request (CSR)
-

In order to obtain a Certificate from the Certificate Authority of your choice -you have to create a so called Certificate Signing Request (CSR). That CSR will be used -by the Certificate Authority to create a Certificate that will identify your website -as "secure". To create a CSR follow these steps:

-
    -
  • Create a local Certificate (as described in the previous section): -
    keytool -genkey -alias tomcat -keyalg RSA \
    -    -keystore <your_keystore_filename>
    - Note: In some cases you will have to enter the domain of your website (i.e. www.myside.org) - in the field "first- and lastname" in order to create a working Certificate. -
  • -
  • The CSR is then created with: -
    keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr \
    -    -keystore <your_keystore_filename>
    -
  • -
-

Now you have a file called certreq.csr that you can submit to the Certificate Authority (look at the -documentation of the Certificate Authority website on how to do this). In return you get a Certificate.

-
- -
Importing the Certificate
-

Now that you have your Certificate you can import it into you local keystore. -First of all you have to import a so called Chain Certificate or Root Certificate into your keystore. -After that you can proceed with importing your Certificate.

- -
    -
  • Download a Chain Certificate from the Certificate Authority you obtained the Certificate from.
    - For Verisign.com commercial certificates go to: - http://www.verisign.com/support/install/intermediate.html
    - For Verisign.com trial certificates go to: - http://www.verisign.com/support/verisign-intermediate-ca/Trial_Secure_Server_Root/index.html
    - For Trustcenter.de go to: - http://www.trustcenter.de/certservices/cacerts/en/en.htm#server
    - For Thawte.com go to: - http://www.thawte.com/certs/trustmap.html
    -
  • -
  • Import the Chain Certificate into your keystore -
    keytool -import -alias root -keystore <your_keystore_filename> \
    -    -trustcacerts -file <filename_of_the_chain_certificate>
    -
  • -
  • And finally import your new Certificate -
    keytool -import -alias tomcat -keystore <your_keystore_filename> \
    -    -file <your_certificate_filename>
    -
  • -
-
-
Troubleshooting
- -

Here is a list of common problems that you may encounter when setting up -SSL communications, and what to do about them.

- -
    - -
  • When Tomcat starts up, I get an exception like - "java.io.FileNotFoundException: {some-directory}/{some-file} not found". -
    -

    A likely explanation is that Tomcat cannot find the keystore file - where it is looking. By default, Tomcat expects the keystore file to - be named .keystore in the user home directory under which - Tomcat is running (which may or may not be the same as yours :-). If - the keystore file is anywhere else, you will need to add a - keystoreFile attribute to the <Factory> - element in the Tomcat - configuration file.

    -
  • - -
  • When Tomcat starts up, I get an exception like - "java.io.FileNotFoundException: Keystore was tampered with, or - password was incorrect". -
    -

    Assuming that someone has not actually tampered with - your keystore file, the most likely cause is that Tomcat is using - a different password than the one you used when you created the - keystore file. To fix this, you can either go back and - recreate the keystore - file, or you can add or update the keystorePass - attribute on the <Connector> element in the - Tomcat configuration - file. REMINDER - Passwords are case sensitive!

    -
  • - -
  • When Tomcat starts up, I get an exception like - "java.net.SocketException: SSL handshake errorjavax.net.ssl.SSLException: No - available certificate or key corresponds to the SSL cipher suites which are - enabled." -
    -

    A likely explanation is that Tomcat cannot find the alias for the server - key within the specified keystore. Check that the correct - keystoreFile and keyAlias are specified in the - <Connector> element in the - Tomcat configuration file. - REMINDER - keyAlias values may be case - sensitive!

    -
  • - -
- -

If you are still having problems, a good source of information is the -TOMCAT-USER mailing list. You can find pointers to archives -of previous messages on this list, as well as subscription and unsubscription -information, at -http://tomcat.apache.org/lists.html.

- -
Using the SSL for session tracking in your application
-

This is a new feature in the Servlet 3.0 specification. Because it uses the - SSL session ID associated with the physical client-server connection there - are some limitations. They are: -

    -
  • Tomcat must have a connector with the attribute - isSecure set to true.
  • -
  • If SSL connections are managed by a proxy or a hardware accelerator - they must populate the SSL request headers (see the SSLValve) so that - the SSL session ID is visible to Tomcat.
  • -
  • If Tomcat terminates the SSL connection, it will not be possible to use - session replication as the SSL session IDs will be different on each - node.
  • -
-

- -

- To enable SSL session tracking you need to use a context listener to set the - tracking mode for the context to be just SSL (if any other tracking mode is - enabled, it will be used in preference). It might look something like: -

-package org.apache.tomcat.example;
-
-import java.util.EnumSet;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.SessionTrackingMode;
-
-public class SessionTrackingModeListener implements ServletContextListener {
-
-    @Override
-    public void contextDestroyed(ServletContextEvent event) {
-        // Do nothing
-    }
-
-    @Override
-    public void contextInitialized(ServletContextEvent event) {
-        ServletContext context = event.getServletContext();
-        EnumSet<SessionTrackingMode> modes =
-            EnumSet.of(SessionTrackingMode.SSL);
-
-        context.setSessionTrackingModes(modes);
-    }
-
-}
-    
-

-

Note: SSL session tracking is implemented for the BIO and NIO connectors. - It is not yet implemented for the APR connector.

- -
Miscellaneous Tips and Bits
- -

To access the SSL session ID from the request, use:
- - - String sslID = (String)request.getAttribute("javax.servlet.request.ssl_session_id"); - -
-For additional discussion on this area, please see -Bugzilla. -

- -

To terminate an SSL session, use: -

-// Standard HTTP session invalidation
-session.invalidate();
-
-// Invalidate the SSL Session
-org.apache.tomcat.util.net.SSLSessionManager mgr =
-    (org.apache.tomcat.util.net.SSLSessionManager)
-    request.getAttribute("javax.servlet.request.ssl_session_mgr");
-mgr.invalidateSession();
-
-// Close the connection since the SSL session will be active until the connection
-// is closed
-response.setHeader("Connection", "close");
-    
- Note that this code is Tomcat specific due to the use of the - SSLSessionManager class. This is currently only available for the BIO and - NIO connectors, not the APR/native connector. -

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/developers.html b/bundledApps/tomcat/webapps/docs/tribes/developers.html deleted file mode 100755 index aaeabd11..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/developers.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Developers
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Developers

Developers
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/faq.html b/bundledApps/tomcat/webapps/docs/tribes/faq.html deleted file mode 100755 index d1f3fa36..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/faq.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Frequently Asked Questions
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Frequently Asked Questions

Frequently Asked Questions
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/interceptors.html b/bundledApps/tomcat/webapps/docs/tribes/interceptors.html deleted file mode 100755 index 06da6705..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/interceptors.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Interceptors
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Interceptors

Interceptors
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/introduction.html b/bundledApps/tomcat/webapps/docs/tribes/introduction.html deleted file mode 100755 index 0949c6e9..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/introduction.html +++ /dev/null @@ -1,242 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Introduction
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Introduction

Table of Contents
- -
Quick Start
- -

Apache Tribes is a group or peer-to-peer communication framework that enables you to easily connect - your remote objects to communicate with each other. -

-
    -
  • Import: org.apache.catalina.tribes.Channel
  • -
  • Import: org.apache.catalina.tribes.Member
  • -
  • Import: org.apache.catalina.tribes.MembershipListener
  • -
  • Import: org.apache.catalina.tribes.ChannelListener
  • -
  • Import: org.apache.catalina.tribes.group.GroupChannel
  • -
  • Create a class that implements: org.apache.catalina.tribes.ChannelListener
  • -
  • Create a class that implements: org.apache.catalina.tribes.MembershipListener
  • -
  • Simple class to demonstrate how to send a message: -
    -        //create a channel
    -        Channel myChannel = new GroupChannel();
    -
    -        //create my listeners
    -        ChannelListener msgListener = new MyMessageListener();
    -        MembershipListener mbrListener = new MyMemberListener();
    -
    -        //attach the listeners to the channel
    -        myChannel.addMembershipListener(mbrListener);
    -        myChannel.addChannelListener(msgListener);
    -
    -        //start the channel
    -        myChannel.start(Channel.DEFAULT);
    -
    -        //create a message to be sent, message must implement java.io.Serializable
    -        //for performance reasons you probably want them to implement java.io.Externalizable
    -        Serializable myMsg = new MyMessage();
    -
    -        //retrieve my current members
    -        Member[] group = myChannel.getMembers();
    -
    -        //send the message
    -        channel.send(group,myMsg,Channel.SEND_OPTIONS_DEFAULT);
    -      
    -
  • -
-

- Simple yeah? There is a lot more to Tribes than we have shown, hopefully the docs will be able - to explain more to you. Remember, that we are always interested in suggestions, improvements, bug fixes - and anything that you think would help this project. -

-

- Note: Tribes is currently built for JDK1.5, you can run on JDK1.4 by a small modifications to locks used from the java.util.concurrent package. -

-
What is Tribes
-

- Tribes is a messaging framework with group communication abilities. Tribes allows you to send and receive - messages over a network, it also allows for dynamic discovery of other nodes in the network.
- And that is the short story, it really is as simple as that. What makes Tribes useful and unique will be - described in the section below.
-

-

- The Tribes module was started early 2006 and a small part of the code base comes from the clustering module - that has been existing since 2003 or 2004. - The current cluster implementation has several short comings and many workarounds were created due - to the complexity in group communication. Long story short, what should have been two modules a long time - ago, will be now. Tribes takes out the complexity of messaging from the replication module and becomes - a fully independent and highly flexible group communication module.
-

-

- In Tomcat the old modules/cluster has now become modules/groupcom(Tribes) and - modules/ha (replication). This will allow development to proceed and let the developers - focus on the issues they are actually working on rather than getting boggled down in details of a module - they are not interested in. The understanding is that both communication and replication are complex enough, - and when trying to develop them in the same module, well you know, it becomes a cluster :)
-

-

- Tribes allows for guaranteed messaging, and can be customized in many ways. Why is this important?
- Well, you as a developer want to know that the messages you are sending are reaching their destination. - More than that, if a message doesn't reach its destination, the application on top of Tribes will be notified - that the message was never sent, and what node it failed. -

- -
Why another messaging framework
-

- I am a big fan of reusing code and would never dream of developing something if someone else has already - done it and it was available to me and the community I try to serve.
- When I did my research to improve the clustering module I was constantly faced with a few obstacles:
- 1. The framework wasn't flexible enough
- 2. The framework was licensed in a way that neither I nor the community could use it
- 3. Several features that I needed were missing
- 4. Messaging was guaranteed, but no feedback was reported to me
- 5. The semantics of my message delivery had to be configured before runtime
- And the list continues... -

-

- So I came up with Tribes, to address these issues and other issues that came along. - When designing Tribes I wanted to make sure I didn't lose any of the flexibility and - delivery semantics that the existing frameworks already delivered. The goal was to create a framework - that could do everything that the others already did, but to provide more flexibility for the application - developer. In the next section will give you the high level overview of what features tribes offers or will offer. -

-
Feature Overview
-

- To give you an idea of the feature set I will list it out here. - Some of the features are not yet completed, if that is the case they are marked accordingly. -

-

- Pluggable modules
- Tribes is built using interfaces. Any of the modules or components that are part of Tribes can be swapped out - to customize your own Tribes implementation. -

-

- Guaranteed Messaging
- In the default implementation of Tribes uses TCP or UDP for messaging. TCP already has guaranteed message delivery - and flow control built in. I believe that the performance of Java TCP, will outperform an implementation of - Java/UDP/flow-control/message guarantee since the logic happens further down the stack. UDP messaging has been added in for - sending messages over UDP instead of TCP when desired. The same guarantee scenarios as described below are still available - over UDP, however, when a UDP message is lost, it's considered failed.
- Tribes supports both non-blocking and blocking IO operations. The recommended setting is to use non blocking - as it promotes better parallelism when sending and receiving messages. The blocking implementation is available - for those platforms where NIO is still a trouble child. -

-

- Different Guarantee Levels
- There are three different levels of delivery guarantee when a message is sent.
-

    -
  1. IO Based send guarantee. - fastest, least reliable
    - This means that Tribes considers the message transfer to be successful - if the message was sent to the socket send buffer and accepted.
    - On blocking IO, this would be socket.getOutputStream().write(msg)
    - On non blocking IO, this would be socketChannel.write(), and the buffer byte buffer gets emptied - followed by a socketChannel.read() to ensure the channel still open. - The read() has been added since write() will succeed if the connection has been "closed" - when using NIO. -
  2. -
  3. ACK based. - recommended, guaranteed delivery
    - When the message has been received on a remote node, an ACK is sent back to the sender, - indicating that the message was received successfully. -
  4. -
  5. SYNC_ACK based. - guaranteed delivery, guaranteed processed, slowest
    - When the message has been received on a remote node, the node will process - the message and if the message was processed successfully, an ACK is sent back to the sender - indicating that the message was received and processed successfully. - If the message was received, but processing it failed, an ACK_FAIL will be sent back - to the sender. This is a unique feature that adds an incredible amount value to the application - developer. Most frameworks here will tell you that the message was delivered, and the application - developer has to build in logic on whether the message was actually processed properly by the application - on the remote node. If configured, Tribes will throw an exception when it receives an ACK_FAIL - and associate that exception with the member that didn't process the message. -
  6. -
- You can of course write even more sophisticated guarantee levels, and some of them will be mentioned later on - in the documentation. One mentionable level would be a 2-Phase-Commit, where the remote applications don't receive - the message until all nodes have received the message. Sort of like a all-or-nothing protocol. -

-

- Per Message Delivery Attributes
- Perhaps the feature that makes Tribes stand out from the crowd of group communication frameworks. - Tribes enables you to send to decide what delivery semantics a message transfer should have on a per - message basis. Meaning, that your messages are not delivered based on some static configuration - that remains fixed after the message framework has been started.
- To give you an example of how powerful this feature is, I'll try to illustrate it with a simple example. - Imagine you need to send 10 different messages, you could send the the following way: -

-      Message_1 - asynchronous and fast, no guarantee required, fire and forget
-      Message_2 - all-or-nothing, either all receivers get it, or none.
-      Message_3 - encrypted and SYNC_ACK based
-      Message_4 - asynchronous, SYNC_ACK and call back when the message is processed on the remote nodes
-      Message_5 - totally ordered, this message should be received in the same order on all nodes that have been
-                  send totally ordered
-      Message_6 - asynchronous and totally ordered
-      Message_7 - RPC message, send a message, wait for all remote nodes to reply before returning
-      Message_8 - RPC message, wait for the first reply
-      Message_9 - RPC message, asynchronous, don't wait for a reply, collect them via a callback
-      Message_10- sent to a member that is not part of this group
-    
- As you can imagine by now, these are just examples. The number of different semantics you can apply on a - per-message-basis is almost limitless. Tribes allows you to set up to 28 different on a message - and then configure Tribes to what flag results in what action on the message.
- Imagine a shared transactional cache, probably >90% are reads, and the dirty reads should be completely - unordered and delivered as fast as possible. But transactional writes on the other hand, have to - be ordered so that no cache gets corrupted. With tribes you would send the write messages totally ordered, - while the read messages you simple fire to achieve highest throughput.
- There are probably better examples on how this powerful feature can be used, so use your imagination and - your experience to think of how this could benefit you in your application. -

-

- Interceptor based message processing
- Tribes uses a customizable interceptor stack to process messages that are sent and received.
- So what, all frameworks have this!
- Yes, but in Tribes interceptors can react to a message based on the per-message-attributes - that are sent runtime. Meaning, that if you add a encryption interceptor that encrypts message - you can decide if this interceptor will encrypt all messages, or only certain messages that are decided - by the applications running on top of Tribes.
- This is how Tribes is able to send some messages totally ordered and others fire and forget style - like the example above.
- The number of interceptors that are available will keep growing, and we would appreciate any contributions - that you might have. -

-

- Threadless Interceptor stack - The interceptor don't require any separate threads to perform their message manipulation.
- Messages that are sent will piggy back on the thread that is sending them all the way through transmission. - The exception is the MessageDispatchInterceptor that will queue up the message - and send it on a separate thread for asynchronous message delivery. - Messages received are controlled by a thread pool in the receiver component.
- The channel object can send a heartbeat() through the interceptor stack to allow - for timeouts, cleanup and other events.
- The MessageDispatchInterceptor is the only interceptor that is configured by default. -

-

- Parallel Delivery
- Tribes support parallel delivery of messages. Meaning that node_A could send three messages to node_B in - parallel. This feature becomes useful when sending messages with different delivery semantics. - Otherwise if Message_1 was sent totally ordered, Message_2 would have to wait for that message to complete.
- Through NIO, Tribes is also able to send a message to several receivers at the same time on the same thread. -

-

- Silent Member Messaging
- With Tribes you are able to send messages to members that are not in your group. - So by default, you can already send messages over a wide area network, even though the dynamic discover - module today is limited to local area networks by using multicast for dynamic node discovery. - Of course, the membership component will be expanded to support WAN memberships in the future. - But this is very useful, when you want to hide members from the rest of the group and only communicate with them -

-
Where can I get Tribes
-

- Tribes ships as a module with Tomcat, and is released as part of the Apache Tomcat release. -

- - -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/membership.html b/bundledApps/tomcat/webapps/docs/tribes/membership.html deleted file mode 100755 index 8b97edb5..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/membership.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Membership
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Membership

Membership
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/setup.html b/bundledApps/tomcat/webapps/docs/tribes/setup.html deleted file mode 100755 index abfd1726..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/setup.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Configuration
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Configuration

Configuration Overview
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/status.html b/bundledApps/tomcat/webapps/docs/tribes/status.html deleted file mode 100755 index 2625545a..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/status.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Status
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Status

Status
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/tribes/transport.html b/bundledApps/tomcat/webapps/docs/tribes/transport.html deleted file mode 100755 index 9dbb5f95..00000000 --- a/bundledApps/tomcat/webapps/docs/tribes/transport.html +++ /dev/null @@ -1,15 +0,0 @@ -Apache Tribes - The Tomcat Cluster Communication Module (7.0.30) - Apache Tribes - Transport
Apache Tomcat

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tribes Development

Apache Tribes - Transport

Transport
-

TODO

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/virtual-hosting-howto.html b/bundledApps/tomcat/webapps/docs/virtual-hosting-howto.html deleted file mode 100755 index 94aad791..00000000 --- a/bundledApps/tomcat/webapps/docs/virtual-hosting-howto.html +++ /dev/null @@ -1,117 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Virtual Hosting and Tomcat

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Virtual Hosting and Tomcat

Table of Contents
- -
Assumptions
-

- For the sake of this how-to, assume you have a development host with two - host names, ren and stimpy. Let's also assume - one instance of Tomcat running, so $CATALINA_HOME refers to - wherever it's installed, perhaps /usr/local/tomcat. -

-

- Also, this how-to uses Unix-style path separators and commands; if you're - on Windows modify accordingly. -

-
server.xml
-

- At the simplest, edit the Engine portion - of your server.xml file to look like this: -

-
-<Engine name="Catalina" defaultHost="ren">
-    <Host name="ren"    appBase="renapps"/>
-    <Host name="stimpy" appBase="stimpyapps"/>
-</Engine>
-    
-

- Note that the directory structures under the appBase for each host should - not overlap each other. -

-

- Consult the configuration documentation for other attributes of the - Engine and - Host elements. -

-
Webapps Directory
-

- Create directories for each of the virtual hosts: -

-
-mkdir $CATALINA_HOME/renapps
-mkdir $CATALINA_HOME/stimpyapps
-    
-
Configuring Your Contexts
-
General
-

Contexts are normally located underneath the appBase directory. For - example, to deploy the foobar context as a war file in - the ren host, use - $CATALINA_HOME/renapps/foobar.war. Note that the - default or ROOT context for ren would be deployed as - $CATALINA_HOME/renapps/ROOT.war (WAR) or - $CATALINA_HOME/renapps/ROOT (directory). -

-

NOTE: The docBase for a context should never be - the same as the appBase for a host. -

-
-
context.xml - approach #1
-

- Within your Context, create a META-INF directory and then - place your Context definition in it in a file named - context.xml. i.e. - $CATALINA_HOME/renapps/ROOT/META-INF/context.xml - This makes deployment easier, particularly if you're distributing a WAR - file. -

-
-
context.xml - approach #2
-

- Create a structure under $CATALINA_HOME/conf/Catalina - corresponding to your virtual hosts, e.g.: -

-
-mkdir $CATALINA_HOME/conf/Catalina/ren
-mkdir $CATALINA_HOME/conf/Catalina/stimpy
-      
-

- Note that the ending directory name "Catalina" represents the - name attribute of the - Engine element as shown above. -

-

- Now, for your default webapps, add: -

-
-$CATALINA_HOME/conf/Catalina/ren/ROOT.xml
-$CATALINA_HOME/conf/Catalina/stimpy/ROOT.xml
-      
-

- If you want to use the Tomcat manager webapp for each host, you'll also - need to add it here: -

-
-cd $CATALINA_HOME/conf/Catalina
-cp localhost/manager.xml ren/
-cp localhost/manager.xml stimpy/
-      
-
-
Further Information
-

- Consult the configuration documentation for other attributes of the - Context element. -

-
-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/web-socket-howto.html b/bundledApps/tomcat/webapps/docs/web-socket-howto.html deleted file mode 100755 index 052e6495..00000000 --- a/bundledApps/tomcat/webapps/docs/web-socket-howto.html +++ /dev/null @@ -1,47 +0,0 @@ -Apache Tomcat 7 (7.0.30) - WebSocket How-To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

WebSocket How-To

Table of Contents
- -
Overview
-

Tomcat provides support for WebSocket as defined by - RFC 6455. This feature is - not yet finalised and you are encouraged to provide feedback in the form - of bug reports (via - Bugzilla), suggested API - changes (via the dev list) or - other comments (again via the dev - list).

-
Application development
-

The API used for application development has not yet been finalised. Rather - than document something here that will quickly be out of date, please see the - Javadoc for the - - org.apache.catalina.websocket package. The Javadoc - pages are not included with Tomcat binary distributions. To view them - locally you would have to download and install "Full documentation" - distribution, or build it from sources. You can - also read this on the Apache Tomcat web site. Start with the - - WebSocketServlet class.

- -

There are also several example applications that demonstrate how the - WebSocket API can be used. You'll need to look at both the client side - html and the server side - code.

- -

Do keep in mind that the API is fluid and is likely to change, possibly - significantly, between point releases. The documentation will be updated once - the API is considered stable (unlikely to be until JSR 356 is complete).

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/windows-auth-howto.html b/bundledApps/tomcat/webapps/docs/windows-auth-howto.html deleted file mode 100755 index 71c6ddbf..00000000 --- a/bundledApps/tomcat/webapps/docs/windows-auth-howto.html +++ /dev/null @@ -1,269 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Windows Authentication How-To

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Windows Authentication How-To

Table of Contents
- -
Overview
-

Integrated Windows authentication is most frequently used within intranet -environments since it requires that the server performing the authentication and -the user being authenticated are part of the same domain. For the user to be -authenticated automatically, the client machine used by the user must also be -part of the domain.

-

There are several options for implementing integrated Windows authentication -with Apache Tomcat. They are: -

    -
  • Built-in Tomcat support.
  • -
  • Use a third party library such as Waffle.
  • -
  • Use a reverse proxy that supports Windows authentication to perform the -authentication step such as IIS or httpd.
  • -
-The configuration of each of these options is discussed in the following -sections.

-
Built-in Tomcat support
-

This is a work in progress. There are a number of outstanding -questions that require further testing. These include: -

-
    -
  • Does the domain name have to be in upper case?
  • -
  • Does the SPN have to start with HTTP/...?
  • -
  • Can a port number be appended to the end of the host in the SPN?
  • -
  • Can the domain be left off the user in the ktpass command?
  • -
  • What are the limitations on the account that Tomcat can run as? SPN - associated account works, domain admin works, local admin doesn't - work
  • -
-

There are four components to the configuration of the built-in Tomcat -support for Windows authentication. The domain controller, the server hosting -Tomcat, the web application wishing to use Windows authentication and the client -machine. The following sections describe the configuration required for each -component.

-

The names of the three machines used in the configuration examples below are -win-dc01.dev.local (the domain controller), win-tc01.dev.local (the Tomcat -instance) and win-pc01.dev.local (client). All are members of the DEV.LOCAL -domain.

-

Note: In order to use the passwords in the steps below, the domain password -policy had to be relaxed. This is not recommended for production environments. -

- -
Domain Controller
-

These steps assume that the server has already been configured to act as a - domain controller. Configuration of a Windows server as a domain controller is - outside the scope of this how-to. The steps to configure the domain controller - to enable Tomcat to support Windows authentication are as follows: -

-
    -
  • Create a domain user that will be mapped to the service name used by the - Tomcat server. In this how-to, this user is called tc01 and has a - password of tc01pass.
  • -
  • Map the service principal name (SPN) to the user account. SPNs take the - form - <service class>/<host>:<port>/<service name>. - The SPN used in this how-to is HTTP/win-tc01.dev.local. To - map the user to the SPN, run the following: -
    setspn -A HTTP/win-tc01.dev.local tc01
    -
  • -
  • Generate the keytab file that the Tomcat server will use to authenticate - itself to the domain controller. This file contains the Tomcat private key for - the service provider account and should be protected accordingly. To generate - the file, run the following command (all on a single line): -
    ktpass /out c:\tomcat.keytab /mapuser tc01@DEV.LOCAL
    -          /princ HTTP/win-tc01.dev.local@DEV.LOCAL
    -          /pass tc01pass /kvno 0
  • -
  • Create a domain user to be used on the client. In this how-to the domain - user is test with a password of testpass.
  • -
-

The above steps have been tested on a domain controller running Windows - Server 2008 R2 64-bit Standard using the Windows Server 2003 functional level - for both the forest and the domain. -

-
- -
Tomcat instance
-

These steps assume that Tomcat and a Java 6 JDK/JRE have already been - installed and configured and that Tomcat is running as the tc01@DEV.LOCAL - user. The steps to configure the Tomcat instance for Windows authentication - are as follows: -

-
    -
  • Copy the tomcat.keytab file created on the domain controller - to $CATALINA_BASE/conf/tomcat.keytab.
  • -
  • Create the kerberos configuration file - $CATALINA_BASE/conf/krb5.ini. The file used in this how-to - contained:
    [libdefaults]
    -default_realm = DEV.LOCAL
    -default_keytab_name = FILE:c:\apache-tomcat-7.0.x\conf\tomcat.keytab
    -default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
    -default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
    -forwardable=true
    -
    -[realms]
    -DEV.LOCAL = {
    -        kdc = win-dc01.dev.local:88
    -}
    -
    -[domain_realm]
    -dev.local= DEV.LOCAL
    -.dev.local= DEV.LOCAL
    - The location of this file can be changed by setting the - java.security.krb5.conf systm property.
  • -
  • Create the JAAS login configuration file - $CATALINA_BASE/conf/jaas.conf. The file used in this how-to - contained:
    com.sun.security.jgss.krb5.initiate {
    -    com.sun.security.auth.module.Krb5LoginModule required
    -    doNotPrompt=true
    -    principal="HTTP/win-tc01.dev.local@DEV.LOCAL"
    -    useKeyTab=true
    -    keyTab="c:/apache-tomcat-7.0.x/conf/tomcat.keytab"
    -    storeKey=true;
    -};
    -
    -com.sun.security.jgss.krb5.accept {
    -    com.sun.security.auth.module.Krb5LoginModule required
    -    doNotPrompt=true
    -    principal="HTTP/win-tc01.dev.local@DEV.LOCAL"
    -    useKeyTab=true
    -    keyTab="c:/apache-tomcat-7.0.x/conf/tomcat.keytab"
    -    storeKey=true;
    -};
    - The location of this file can be changed by setting the - java.security.auth.login.config system property. The LoginModule - used is a JVM specific one so ensure that the LoginModule specified matches - the JVM being used. The name of the login configuration must match the - value used by the authentication - valve.
  • -
  • The system property javax.security.auth.useSubjectCredsOnly - is automatically set to the required value of false if a web application is - configured to use the SPNEGO authentication method.
  • -
-

The SPNEGO authenticator will work with any - Realm but if used with the JNDI Realm, by default the JNDI Realm will use - the user's delegated credentials to connect to the Active Directory. -

-

The above steps have been tested on a Tomcat server running Windows Server - 2008 R2 64-bit Standard with an Oracle 1.6.0_24 64-bit JDK.

-
- -
Web application
-

The web application needs to be configured to the use Tomcat specific - authentication method of SPNEGO (rather than BASIC etc.) in - web.xml. As with the other authenticators, behaviour can be customised by - explicitly configuring the - authentication valve and setting attributes on the Valve.

-
- -
Client
-

The client must be configured to use Kerberos authentication. For Internet - Explorer this means making sure that the Tomcat instance is in the "Local - intranet" security domain and that it is configured (Tools > Internet - Options > Advanced) with integrated Windows authentication enabled. Note that - this will not work if you use the same machine for the client - and the Tomcat instance as Internet Explorer will use the unsupported NTLM - protocol.

-
- -
References
-

Correctly configuring Kerberos authentication can be tricky. The following - references may prove helpful. Advice is also always available from the - Tomcat users - mailing list.

-
    -
  1. - IIS and Kerberos
  2. -
  3. - SPNEGO project at SourceForge
  4. -
  5. - Oracle JGSS tutorial
  6. -
  7. - Geronimo configuration for Windows authentication
  8. -
  9. - Encryption Selection in Kerberos Exchanges
  10. -
  11. Supported Kerberos Cipher - Suites
  12. -
-
- -
Third party libraries
- -
Waffle
-

Full details of this solution can be found through the - Waffle site. The key features are:

-
    -
  • Drop-in solution
  • -
  • Simple configuration (no JAAS or Kerberos keytab configuration required) -
  • -
  • Uses a native library
  • -
-
- -
Spring Security - Kerberos Extension
-

Full details of this solution can be found through the - - Kerberos extension site. The key features are:

-
    -
  • Extension to Spring Security
  • -
  • Requires a Kerberos keytab file to be generated
  • -
  • Pure Java solution
  • -
-
- -
SPNEGO project at SourceForge
-

Full details of this solution can be found through the - project site. The key - features are:

-
    -
  • Uses Kerberos
  • -
  • Pure Java solution
  • -
-
-
Reverse proxies
- -
Microsoft IIS
-

There are three steps to configuring IIS to provide Windows authentication. - They are:

-
    -
  1. Configure IIS as a reverse proxy for Tomcat (see the - - IIS Web Server How-To).
  2. -
  3. Configure IIS to use Windows authentication
  4. -
  5. Configure Tomcat to use the authentication user information from IIS by - setting the tomcatAuthentication attribute on the - AJP connector to false.
  6. -
-
- -
Apache httpd
-

Apache httpd does not support Windows authentication out of the box but - there are a number of third-party modules that can be used. These include:

-
    -
  1. mod_auth_sspi - for use on Windows platforms.
  2. -
  3. - mod_auth_ntlm_winbind for non-Windows platforms. Known to work with httpd - 2.0.x on 32-bit platforms. Some users have reported stability issues with both - httpd 2.2.x builds and 64-bit Linux builds.
  4. -
-

There are three steps to configuring httpd to provide Windows - authentication. They are:

-
    -
  1. Configure httpd as a reverse proxy for Tomcat (see the - - Apache httpd Web Server How-To).
  2. -
  3. Configure httpd to use Windows authentication
  4. -
  5. Configure Tomcat to use the authentication user information from httpd by - setting the tomcatAuthentication attribute on the - AJP connector to false.
  6. -
-
- -

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/docs/windows-service-howto.html b/bundledApps/tomcat/webapps/docs/windows-service-howto.html deleted file mode 100755 index 98ffe85f..00000000 --- a/bundledApps/tomcat/webapps/docs/windows-service-howto.html +++ /dev/null @@ -1,351 +0,0 @@ -Apache Tomcat 7 (7.0.30) - Windows service HOW-TO

-      The Apache Tomcat Servlet/JSP Container
-

Apache Tomcat 7

Version 7.0.30, Sep 2 2012
Apache Logo

Links

User Guide

Reference

Apache Tomcat Development

Windows service HOW-TO

Table of Contents
- -
Tomcat7 service application
-

- Tomcat7 is a service application for running Tomcat7 as NT service. -

-
Tomcat7w monitor application
-

- Tomcat7w is a GUI application for monitoring and configuring Tomcat - services. -

-

The available command line options are:

-

- - - - - - - - - -
//ES//Edit service configurationThis is the default operation. It is called if the no option is - provided but the executable is renamed to servicenameW.exe
//MS//Monitor servicePut the icon in the system try
-

-
Command line arguments
-

- Each command line directive is in the form of //XX//ServiceName -

-

The available command line options are:

-

- - - - - - - - - - - - - - - - - - - - - - - - - -
//TS//Run the service as console applicationThis is the default operation. It is called if the no option is - provided. The ServiceName is the name of the executable without - exe suffix, meaning Tomcat7
//RS//Run the serviceCalled only from ServiceManager
//SS//Stop the service
//US//Update service parameters
//IS//Install service
//DS//Delete serviceStops the service if running
-

-
Command line parameters
-

- Each command parameter is prefixed with --. - If the command line is prefixed with ++ then it's value will - be appended to the existing option. - If the environment variable with the same name as command line parameter but - prefixed with PR_ exists it will take precedence. - For example: -

set PR_CLASSPATH=xx.jar
-

-

is equivalent to providing -

--Classpath=xx.jar
-

-

as command line parameter.

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterNameDefaultDescription
--DescriptionService name description (maximum 1024 characters)
--DisplayNameServiceNameService display name
--Installprocrun.exe //RS//ServiceNameInstall image
--StartupmanualService startup mode can be either auto or manual
--DependsOnList of services that this service depend on. Dependent services - are separated using either # or ; characters
--EnvironmentList of environment variables that will be provided to the service - in the form key=value. They are separated using either - # or ; characters. If you need to use either the # - or ; character within a value then the entire value must be - enclosed inside single quotes.
--UserUser account used for running executable. It is used only for - StartMode java or exe and enables running applications - as service under account without LogonAsService privilege.
--PasswordPassword for user account set by --User parameter
--JavaHomeJAVA_HOMESet a different JAVA_HOME than defined by JAVA_HOME environment - variable
--JvmautoUse either auto or specify the full path to the jvm.dll. - You can use the environment variable expansion here.
--JvmOptions-XrsList of options in the form of -D or -X that will be - passed to the JVM. The options are separated using either - # or ; characters.
--ClasspathSet the Java classpath
--JvmMsInitial memory pool size in MB
--JvmMxMaximum memory pool size in MB
--JvmSsThread stack size in KB
--StartImageExecutable that will be run.
--StartPathWorking path for the start image executable.
--StartClassClass that will be used for startup.
--StartParamsList of parameters that will be passed to either StartImage or - StartClass. Parameters are separated using either # or - ; character.
--StartMethodMainMethod name if differs then main
--StartModeexecutableCan one of jvm java or exe
--StopImageExecutable that will be run on Stop service signal.
--StopPathWorking path for the stop image executable.
--StopClassClass that will be used on Stop service signal.
--StopParamsList of parameters that will be passed to either StopImage or - StopClass. Parameters are separated using either # or - ; character.
--StopMethodMainMethod name if differs then main
--StopModeexecutableCan one of jvm java or exe
--StopTimeoutNo TimeoutDefines the timeout in seconds that procrun waits for service to - exit gracefully.
--LogPathworking pathDefines the path for logging
--LogPrefixjakarta_serviceDefines the service log filename
--LogLevelINFODefines the logging level and can be either error, - info, warn or debug
--StdOutputRedirected stdout filename
--StdErrorRedirected stderr filename
-

-
Installing services
-

-The safest way to manually install the service is to use the provided -service.bat script. Administrator privileges are required to run this -script. If necessary, you can use the /user switch to specify -a user to use for the installation of the service. -

-

-NOTE: On Windows Vista or any other operating system with User -Account Control (UAC) you must either disable UAC or right-click on cmd.exe and -select "Run as administrator" in order to run this script. If UAC is enabled -neither being logged on with an Administrator account, nor using the -/user switch is sufficient. -

-

-

-Install the service named 'Tomcat7'
-C:\> service.bat install
-
-

-

-If using tomcat7.exe, you need to use the //IS// parameter. -

-

-

-Install the service named 'Tomcat7'
-C:\> tomcat7 //IS//Tomcat7 --DisplayName="Apache Tomcat 7" \
-C:\> --Install="C:\Program Files\Tomcat\bin\tomcat7.exe" --Jvm=auto \
-C:\> --StartMode=jvm --StopMode=jvm \
-C:\> --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start \
-C:\> --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop
-
-

-
Updating services
-

-To update the service parameters, you need to use the //US// parameter. -

-

-

-Update the service named 'Tomcat7'
-C:\> tomcat7 //US//Tomcat7 --Description="Apache Tomcat Server - http://tomcat.apache.org/ " \
-C:\> --Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar
-
-

-
Removing services
-

-To remove the service, you need to use the //DS// parameter.
-If the service is running it will be stopped and then deleted. -

-

-

-Remove the service named 'Tomcat7'
-C:\> tomcat7 //DS//Tomcat7
-
-

-
Debugging services
-

-To run the service in console mode, you need to use the //TS// parameter. -The service shutdown can be initiated by pressing CTRL+C or -CTRL+BREAK. -If you rename the tomcat7.exe to testservice.exe then you can just execute the -testservice.exe and this command mode will be executed by default. -

-

-

-Run the service named 'Tomcat7' in console mode
-C:\> tomcat7 //TS//Tomcat7 [additional arguments]
-Or simply execute:
-C:\> tomcat7
-
-

-

- Copyright © 1999-2012, Apache Software Foundation -
\ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/CookieExample.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/CookieExample.class deleted file mode 100755 index d4dbc0aa..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/CookieExample.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/CookieExample.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/CookieExample.java deleted file mode 100755 index 5a01fa43..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/CookieExample.java +++ /dev/null @@ -1,134 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -/* $Id: CookieExample.java 1337730 2012-05-12 23:17:21Z kkolinko $ - * - */ - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ResourceBundle; - -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import util.HTMLFilter; - -/** - * Example servlet showing request headers - * - * @author James Duncan Davidson - */ - -public class CookieExample extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings"); - - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - - String cookieName = request.getParameter("cookiename"); - String cookieValue = request.getParameter("cookievalue"); - Cookie aCookie = null; - if (cookieName != null && cookieValue != null) { - aCookie = new Cookie(cookieName, cookieValue); - response.addCookie(aCookie); - } - - response.setContentType("text/html"); - - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - - String title = RB.getString("cookies.title"); - out.println("" + title + ""); - out.println(""); - out.println(""); - - // relative links - - // XXX - // making these absolute till we work out the - // addition of a PathInfo issue - - out.println(""); - out.println("\"view"); - out.println(""); - out.println("\"return\""); - - out.println("

" + title + "

"); - - Cookie[] cookies = request.getCookies(); - if ((cookies != null) && (cookies.length > 0)) { - out.println(RB.getString("cookies.cookies") + "
"); - for (int i = 0; i < cookies.length; i++) { - Cookie cookie = cookies[i]; - out.print("Cookie Name: " + HTMLFilter.filter(cookie.getName()) - + "
"); - out.println(" Cookie Value: " - + HTMLFilter.filter(cookie.getValue()) - + "

"); - } - } else { - out.println(RB.getString("cookies.no-cookies")); - } - - if (aCookie != null) { - out.println("

"); - out.println(RB.getString("cookies.set") + "
"); - out.print(RB.getString("cookies.name") + " " - + HTMLFilter.filter(cookieName) + "
"); - out.print(RB.getString("cookies.value") + " " - + HTMLFilter.filter(cookieValue)); - } - - out.println("

"); - out.println(RB.getString("cookies.make-cookie") + "
"); - out.print("

"); - out.print(RB.getString("cookies.name") + " "); - out.println("
"); - out.print(RB.getString("cookies.value") + " "); - out.println("
"); - out.println("
"); - - - out.println(""); - out.println(""); - } - - @Override - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - doGet(request, response); - } - -} - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/HelloWorldExample.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/HelloWorldExample.class deleted file mode 100755 index 41e3c40e..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/HelloWorldExample.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/HelloWorldExample.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/HelloWorldExample.java deleted file mode 100755 index 9902e3b4..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/HelloWorldExample.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ResourceBundle; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * The simplest possible servlet. - * - * @author James Duncan Davidson - */ - -public class HelloWorldExample extends HttpServlet { - - private static final long serialVersionUID = 1L; - - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - ResourceBundle rb = - ResourceBundle.getBundle("LocalStrings",request.getLocale()); - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - - out.println(""); - out.println(""); - - String title = rb.getString("helloworld.title"); - - out.println("" + title + ""); - out.println(""); - out.println(""); - - // note that all links are created to be relative. this - // ensures that we can move the web application that this - // servlet belongs to to a different place in the url - // tree and not have any harmful side effects. - - // XXX - // making these absolute till we work out the - // addition of a PathInfo issue - - out.println(""); - out.println("\"view"); - out.println(""); - out.println("\"return\""); - out.println("

" + title + "

"); - out.println(""); - out.println(""); - } -} - - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings.properties b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings.properties deleted file mode 100755 index ad096479..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings.properties +++ /dev/null @@ -1,53 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# $Id: LocalStrings.properties 467217 2006-10-24 03:14:34Z markt $ - -# Default localized resources for example servlets -# This locale is en_US - -helloworld.title=Hello World! - -requestinfo.title=Request Information Example -requestinfo.label.method=Method: -requestinfo.label.requesturi=Request URI: -requestinfo.label.protocol=Protocol: -requestinfo.label.pathinfo=Path Info: -requestinfo.label.remoteaddr=Remote Address: - -requestheader.title=Request Header Example - -requestparams.title=Request Parameters Example -requestparams.params-in-req=Parameters in this request: -requestparams.no-params=No Parameters, Please enter some -requestparams.firstname=First Name: -requestparams.lastname=Last Name: - -cookies.title=Cookies Example -cookies.cookies=Your browser is sending the following cookies: -cookies.no-cookies=Your browser isn't sending any cookies -cookies.make-cookie=Create a cookie to send to your browser -cookies.name=Name: -cookies.value=Value: -cookies.set=You just sent the following cookie to your browser: - -sessions.title=Sessions Example -sessions.id=Session ID: -sessions.created=Created: -sessions.lastaccessed=Last Accessed: -sessions.data=The following data is in your session: -sessions.adddata=Add data to your session -sessions.dataname=Name of Session Attribute: -sessions.datavalue=Value of Session Attribute: diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_en.properties b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_en.properties deleted file mode 100755 index 09ea92c6..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_en.properties +++ /dev/null @@ -1,53 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# $Id: LocalStrings_en.properties 467217 2006-10-24 03:14:34Z markt $ - -# Default localized resources for example servlets -# This locale is en_US - -helloworld.title=Hello World! - -requestinfo.title=Request Information Example -requestinfo.label.method=Method: -requestinfo.label.requesturi=Request URI: -requestinfo.label.protocol=Protocol: -requestinfo.label.pathinfo=Path Info: -requestinfo.label.remoteaddr=Remote Address: - -requestheader.title=Request Header Example - -requestparams.title=Request Parameters Example -requestparams.params-in-req=Parameters in this request: -requestparams.no-params=No Parameters, Please enter some -requestparams.firstname=First Name: -requestparams.lastname=Last Name: - -cookies.title=Cookies Example -cookies.cookies=Your browser is sending the following cookies: -cookies.no-cookies=Your browser isn't sending any cookies -cookies.make-cookie=Create a cookie to send to your browser -cookies.name=Name: -cookies.value=Value: -cookies.set=You just sent the following cookie to your browser: - -sessions.title=Sessions Example -sessions.id=Session ID: -sessions.created=Created: -sessions.lastaccessed=Last Accessed: -sessions.data=The following data is in your session: -sessions.adddata=Add data to your session -sessions.dataname=Name of Session Attribute: -sessions.datavalue=Value of Session Attribute: diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_es.properties b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_es.properties deleted file mode 100755 index 009e34d6..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_es.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -helloworld.title = Hola Mundo\! -requestinfo.title = Ejemplo de Informacion de Requerimiento\: -requestinfo.label.method = M\u00E9todo\: -requestinfo.label.requesturi = URI de Requerimiento\: -requestinfo.label.protocol = Protocolo\: -requestinfo.label.pathinfo = Info de Ruta\: -requestinfo.label.remoteaddr = Direccion Remota\: -requestheader.title = Ejemplo de Cabecera de Requerimiento\: -requestparams.title = Ejemplo de par\u00E1metros de Requerimiento\: -requestparams.params-in-req = Par\u00E1metros en este Request\: -requestparams.no-params = No hay p\u00E1rametro. Por favor, usa alguno -requestparams.firstname = Nombre\: -requestparams.lastname = Apellidos\: -cookies.title = Ejemplo de Cookies -cookies.cookies = Tu navegador est\u00E1 enviando los siguientes cookies\: -cookies.no-cookies = Tu navegador no est\u00E1 enviando cookies -cookies.make-cookie = Crea un cookie para enviarlo a tu navegador -cookies.name = Nombre\: -cookies.value = Valor\: -cookies.set = Acabas de enviar a tu navegador estos cookies\: -sessions.title = Ejemplo de Sesiones -sessions.id = ID de Sesi\u00F3n\: -sessions.created = Creado\: -sessions.lastaccessed = Ultimo Acceso\: -sessions.data = Lo siguientes datos est\u00E1n en tu sesi\u00F3n\: -sessions.adddata = A\u00F1ade datos a tu sesi\u00F3n\: -sessions.dataname = Nombre del atributo de sesi\u00F3n\: -sessions.datavalue = Valor del atributo de sesi\u00F3n\: diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_fr.properties b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_fr.properties deleted file mode 100755 index 0b800ee0..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_fr.properties +++ /dev/null @@ -1,53 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# $Id: LocalStrings_fr.properties 919503 2010-03-05 17:07:14Z jfclere $ - -# Default localized resources for example servlets -# This locale is fr_FR - -helloworld.title=Salut le Monde! - -requestinfo.title=Exemple d''information sur la requ\u00eate -requestinfo.label.method=M\u00e9thode: -requestinfo.label.requesturi=URI de requ\u00eate: -requestinfo.label.protocol=Protocole: -requestinfo.label.pathinfo=Info de chemin: -requestinfo.label.remoteaddr=Adresse distante: - -requestheader.title=Exemple d''information sur les ent\u00eate de requ\u00eate - -requestparams.title=Exemple de requ\u00eate avec param\u00eatres -requestparams.params-in-req=Param\u00eatres dans la requ\u00eate: -requestparams.no-params=Pas de param\u00eatre, merci dans saisir quelqu'uns -requestparams.firstname=Pr\u00e9nom: -requestparams.lastname=Nom: - -cookies.title=Exemple d''utilisation de Cookies -cookies.cookies=Votre navigateur retourne les cookies suivant: -cookies.no-cookies=Votre navigateur ne retourne aucun cookie -cookies.make-cookie=Cr\u00e9ation d''un cookie \u00e0 retourner \u00e0 votre navigateur -cookies.name=Nom: -cookies.value=Valeur: -cookies.set=Vous venez d''envoyer le cookie suivant \u00e0 votre navigateur: - -sessions.title=Exemple de Sessions -sessions.id=ID de Session: -sessions.created=Cr\u00e9e le: -sessions.lastaccessed=Dernier acc\u00e8s: -sessions.data=Les donn\u00e9es existantes dans votre session: -sessions.adddata=Ajouter des donn\u00e9es \u00e0 votre session -sessions.dataname=Nom de l''Attribut de Session: -sessions.datavalue=Valeur de l''Attribut de Session: diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_pt.properties b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_pt.properties deleted file mode 100755 index 8cb6bf0d..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/LocalStrings_pt.properties +++ /dev/null @@ -1,53 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# $Id: LocalStrings_pt.properties 467217 2006-10-24 03:14:34Z markt $ - -# Default localized resources for example servlets -# This locale is pt_PT - -helloworld.title=Ola Mundo! - -requestinfo.title=Exemplo da Informacao do Pedido -requestinfo.label.method=Metodo: -requestinfo.label.requesturi=URI do Pedido: -requestinfo.label.protocol=Protocolo: -requestinfo.label.pathinfo=Informacao do Caminho: -requestinfo.label.remoteaddr=Endereco Remoto: - -requestheader.title=Exemplo da Cebeceira do Pedido - -requestparams.title=Examplo de Parametros do Pedido -requestparams.params-in-req=Parametros neste pedido: -requestparams.no-params=Sem Parametros, Por favor entre alguns -requestparams.firstname=Primeiro Nome: -requestparams.lastname=Apelido: - -cookies.title=CExamplo de Cookies -cookies.cookies=O se browser esta a enviar os seguintes cookies: -cookies.no-cookies=O seu browser nao esta a enviar nenhuns cookies -cookies.make-cookie=Crie um cookie para enviar para o seu browser -cookies.name=Nome: -cookies.value=Valor: -cookies.set=Acabou de enviar o seguinte cookie para o seu browser: - -sessions.title=Examplo de sessoes -sessions.id=Identificador da Sessao: -sessions.created=Criada: -sessions.lastaccessed=Ultima vez acedida: -sessions.data=Os seguintes dados fazem parte da sua sessao: -sessions.adddata=Adicione data a sua sessao -sessions.dataname=Nome do atributo da sessao: -sessions.datavalue=Valor do atributo da Sessao: diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestHeaderExample.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestHeaderExample.class deleted file mode 100755 index b40bedd7..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestHeaderExample.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestHeaderExample.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestHeaderExample.java deleted file mode 100755 index 645a94c6..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestHeaderExample.java +++ /dev/null @@ -1,98 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -/* $Id: RequestHeaderExample.java 1337730 2012-05-12 23:17:21Z kkolinko $ - * - */ - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Enumeration; -import java.util.ResourceBundle; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import util.HTMLFilter; - -/** - * Example servlet showing request headers - * - * @author James Duncan Davidson - */ - -public class RequestHeaderExample extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings"); - - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - response.setContentType("text/html"); - - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - - String title = RB.getString("requestheader.title"); - out.println("" + title + ""); - out.println(""); - out.println(""); - - // all links relative - - // XXX - // making these absolute till we work out the - // addition of a PathInfo issue - - out.println(""); - out.println("\"view"); - out.println(""); - out.println("\"return\""); - - out.println("

" + title + "

"); - out.println(""); - Enumeration e = request.getHeaderNames(); - while (e.hasMoreElements()) { - String headerName = e.nextElement(); - String headerValue = request.getHeader(headerName); - out.println(""); - } - out.println("
"); - out.println(HTMLFilter.filter(headerName)); - out.println(""); - out.println(HTMLFilter.filter(headerValue)); - out.println("
"); - } - - @Override - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - doGet(request, response); - } - -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestInfoExample.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestInfoExample.class deleted file mode 100755 index e42d042f..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestInfoExample.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestInfoExample.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestInfoExample.java deleted file mode 100755 index 2154b6c4..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestInfoExample.java +++ /dev/null @@ -1,119 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -/* $Id: RequestInfoExample.java 1337742 2012-05-12 23:58:37Z kkolinko $ - * - */ - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ResourceBundle; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import util.HTMLFilter; - -/** - * Example servlet showing request information. - * - * @author James Duncan Davidson - */ - -public class RequestInfoExample extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings"); - - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - response.setContentType("text/html"); - - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - - String title = RB.getString("requestinfo.title"); - out.println("" + title + ""); - out.println(""); - out.println(""); - - // img stuff not req'd for source code html showing - // all links relative! - - // XXX - // making these absolute till we work out the - // addition of a PathInfo issue - - out.println(""); - out.println("\"view"); - out.println(""); - out.println("\"return\""); - - out.println("

" + title + "

"); - out.println(""); - - String cipherSuite= - (String)request.getAttribute("javax.servlet.request.cipher_suite"); - if(cipherSuite!=null){ - out.println(""); - } - - out.println("
"); - out.println(RB.getString("requestinfo.label.method")); - out.println(""); - out.println(HTMLFilter.filter(request.getMethod())); - out.println("
"); - out.println(RB.getString("requestinfo.label.requesturi")); - out.println(""); - out.println(HTMLFilter.filter(request.getRequestURI())); - out.println("
"); - out.println(RB.getString("requestinfo.label.protocol")); - out.println(""); - out.println(HTMLFilter.filter(request.getProtocol())); - out.println("
"); - out.println(RB.getString("requestinfo.label.pathinfo")); - out.println(""); - out.println(HTMLFilter.filter(request.getPathInfo())); - out.println("
"); - out.println(RB.getString("requestinfo.label.remoteaddr")); - out.println(""); - out.println(HTMLFilter.filter(request.getRemoteAddr())); - out.println("
"); - out.println("SSLCipherSuite:"); - out.println(""); - out.println(HTMLFilter.filter(cipherSuite)); - out.println("
"); - } - - @Override - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - doGet(request, response); - } - -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestParamExample.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestParamExample.class deleted file mode 100755 index 1abc5491..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestParamExample.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestParamExample.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestParamExample.java deleted file mode 100755 index e77f2ade..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/RequestParamExample.java +++ /dev/null @@ -1,112 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -/* $Id: RequestParamExample.java 1337730 2012-05-12 23:17:21Z kkolinko $ - * - */ - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ResourceBundle; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import util.HTMLFilter; - -/** - * Example servlet showing request headers - * - * @author James Duncan Davidson - */ - -public class RequestParamExample extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings"); - - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - response.setContentType("text/html"); - - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - - String title = RB.getString("requestparams.title"); - out.println("" + title + ""); - out.println(""); - out.println(""); - - // img stuff not req'd for source code html showing - - // all links relative - - // XXX - // making these absolute till we work out the - // addition of a PathInfo issue - - out.println(""); - out.println("\"view"); - out.println(""); - out.println("\"return\""); - - out.println("

" + title + "

"); - String firstName = request.getParameter("firstname"); - String lastName = request.getParameter("lastname"); - out.println(RB.getString("requestparams.params-in-req") + "
"); - if (firstName != null || lastName != null) { - out.println(RB.getString("requestparams.firstname")); - out.println(" = " + HTMLFilter.filter(firstName) + "
"); - out.println(RB.getString("requestparams.lastname")); - out.println(" = " + HTMLFilter.filter(lastName)); - } else { - out.println(RB.getString("requestparams.no-params")); - } - out.println("

"); - out.print("

"); - out.println(RB.getString("requestparams.firstname")); - out.println(""); - out.println("
"); - out.println(RB.getString("requestparams.lastname")); - out.println(""); - out.println("
"); - out.println(""); - out.println("
"); - - out.println(""); - out.println(""); - } - - @Override - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - doGet(request, response); - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/ServletToJsp.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/ServletToJsp.class deleted file mode 100755 index 44322394..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/ServletToJsp.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/ServletToJsp.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/ServletToJsp.java deleted file mode 100755 index f5cd80ab..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/ServletToJsp.java +++ /dev/null @@ -1,39 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class ServletToJsp extends HttpServlet { - - private static final long serialVersionUID = 1L; - - @Override - public void doGet (HttpServletRequest request, - HttpServletResponse response) { - - try { - // Set the attribute and Forward to hello.jsp - request.setAttribute ("servletName", "servletToJsp"); - getServletConfig().getServletContext().getRequestDispatcher( - "/jsp/jsptoserv/hello.jsp").forward(request, response); - } catch (Exception ex) { - ex.printStackTrace (); - } - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/SessionExample.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/SessionExample.class deleted file mode 100755 index d2e0b84d..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/SessionExample.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/SessionExample.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/SessionExample.java deleted file mode 100755 index 9337e8f1..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/SessionExample.java +++ /dev/null @@ -1,147 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -/* $Id: SessionExample.java 1337746 2012-05-13 00:17:51Z kkolinko $ - * - */ - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Date; -import java.util.Enumeration; -import java.util.ResourceBundle; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import util.HTMLFilter; - -/** - * Example servlet showing request headers - * - * @author James Duncan Davidson - */ - -public class SessionExample extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings"); - - @Override - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - response.setContentType("text/html"); - - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - - String title = RB.getString("sessions.title"); - out.println("" + title + ""); - out.println(""); - out.println(""); - - // img stuff not req'd for source code html showing - // relative links everywhere! - - // XXX - // making these absolute till we work out the - // addition of a PathInfo issue - - out.println(""); - out.println("\"view"); - out.println(""); - out.println("\"return\""); - - out.println("

" + title + "

"); - - HttpSession session = request.getSession(true); - out.println(RB.getString("sessions.id") + " " + session.getId()); - out.println("
"); - out.println(RB.getString("sessions.created") + " "); - out.println(new Date(session.getCreationTime()) + "
"); - out.println(RB.getString("sessions.lastaccessed") + " "); - out.println(new Date(session.getLastAccessedTime())); - - String dataName = request.getParameter("dataname"); - String dataValue = request.getParameter("datavalue"); - if (dataName != null && dataValue != null) { - session.setAttribute(dataName, dataValue); - } - - out.println("

"); - out.println(RB.getString("sessions.data") + "
"); - Enumeration names = session.getAttributeNames(); - while (names.hasMoreElements()) { - String name = names.nextElement(); - String value = session.getAttribute(name).toString(); - out.println(HTMLFilter.filter(name) + " = " - + HTMLFilter.filter(value) + "
"); - } - - out.println("

"); - out.print("

"); - out.println(RB.getString("sessions.dataname")); - out.println(""); - out.println("
"); - out.println(RB.getString("sessions.datavalue")); - out.println(""); - out.println("
"); - out.println(""); - out.println("
"); - - out.println("

GET based form:
"); - out.print("

"); - out.println(RB.getString("sessions.dataname")); - out.println(""); - out.println("
"); - out.println(RB.getString("sessions.datavalue")); - out.println(""); - out.println("
"); - out.println(""); - out.println("
"); - - out.print("

URL encoded "); - - out.println(""); - out.println(""); - } - - @Override - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - doGet(request, response); - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0$1.class deleted file mode 100755 index 021733fb..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0.class deleted file mode 100755 index 050e4e61..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0.java deleted file mode 100755 index 41db2a68..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async0.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package async; - -import java.io.IOException; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; - -public class Async0 extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final Log log = LogFactory.getLog(Async0.class); - - @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { - if (Boolean.TRUE == req.getAttribute("dispatch")) { - log.info("Received dispatch, completing on the worker thread."); - log.info("After complete called started:"+req.isAsyncStarted()); - resp.getWriter().write("Async dispatch worked:+"+System.currentTimeMillis()+"\n"); - } else { - resp.setContentType("text/plain"); - final AsyncContext actx = req.startAsync(); - actx.setTimeout(Long.MAX_VALUE); - Runnable run = new Runnable() { - @Override - public void run() { - try { - req.setAttribute("dispatch", Boolean.TRUE); - Thread.currentThread().setName("Async0-Thread"); - log.info("Putting AsyncThread to sleep"); - Thread.sleep(2*1000); - log.info("Dispatching"); - actx.dispatch(); - }catch (InterruptedException x) { - log.error("Async1",x); - }catch (IllegalStateException x) { - log.error("Async1",x); - } - } - }; - Thread t = new Thread(run); - t.start(); - } - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1$1.class deleted file mode 100755 index 531cadb7..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1.class deleted file mode 100755 index eb85ea01..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1.java deleted file mode 100755 index 9403a3a5..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async1.java +++ /dev/null @@ -1,62 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package async; - -import java.io.IOException; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; - -public class Async1 extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final Log log = LogFactory.getLog(Async1.class); - - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - final AsyncContext actx = req.startAsync(); - actx.setTimeout(30*1000); - Runnable run = new Runnable() { - @Override - public void run() { - try { - String path = "/jsp/async/async1.jsp"; - Thread.currentThread().setName("Async1-Thread"); - log.info("Putting AsyncThread to sleep"); - Thread.sleep(2*1000); - log.info("Dispatching to "+path); - actx.dispatch(path); - }catch (InterruptedException x) { - log.error("Async1",x); - }catch (IllegalStateException x) { - log.error("Async1",x); - } - } - }; - Thread t = new Thread(run); - t.start(); - } - - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2$1.class deleted file mode 100755 index 10cfa14d..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2.class deleted file mode 100755 index d79bb88b..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2.java deleted file mode 100755 index 649afbc8..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async2.java +++ /dev/null @@ -1,64 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package async; - -import java.io.IOException; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; - -public class Async2 extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private static final Log log = LogFactory.getLog(Async2.class); - - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - final AsyncContext actx = req.startAsync(); - actx.setTimeout(30*1000); - Runnable run = new Runnable() { - @Override - public void run() { - try { - Thread.currentThread().setName("Async2-Thread"); - log.info("Putting AsyncThread to sleep"); - Thread.sleep(2*1000); - log.info("Writing data."); - actx.getResponse().getWriter().write("Output from background thread. Time:"+System.currentTimeMillis()+"\n"); - actx.complete(); - }catch (InterruptedException x) { - log.error("Async2",x); - }catch (IllegalStateException x) { - log.error("Async2",x); - }catch (IOException x) { - log.error("Async2",x); - } - } - }; - Thread t = new Thread(run); - t.start(); - } - - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async3.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async3.class deleted file mode 100755 index bd90d907..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async3.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async3.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async3.java deleted file mode 100755 index 39e0fe52..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Async3.java +++ /dev/null @@ -1,39 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package async; - -import java.io.IOException; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class Async3 extends HttpServlet { - - private static final long serialVersionUID = 1L; - - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - final AsyncContext actx = req.startAsync(); - actx.setTimeout(30*1000); - actx.dispatch("/jsp/async/async3.jsp"); - } - - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/AsyncStockServlet.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/AsyncStockServlet.class deleted file mode 100755 index f1f9c443..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/AsyncStockServlet.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/AsyncStockServlet.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/AsyncStockServlet.java deleted file mode 100755 index e172f63e..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/AsyncStockServlet.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package async; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.atomic.AtomicInteger; - -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import async.Stockticker.Stock; -import async.Stockticker.TickListener; - -public class AsyncStockServlet extends HttpServlet implements TickListener, AsyncListener{ - - private static final long serialVersionUID = 1L; - - public static final String POLL = "POLL"; - public static final String LONG_POLL = "LONG-POLL"; - public static final String STREAM = "STREAM"; - - static ArrayList ticks = new ArrayList(); - static ConcurrentLinkedQueue clients = new ConcurrentLinkedQueue(); - static AtomicInteger clientcount = new AtomicInteger(0); - static Stockticker ticker = new Stockticker(); - - public AsyncStockServlet() { - System.out.println("AsyncStockServlet created"); - } - - - @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - if (req.isAsyncStarted()) { - req.getAsyncContext().complete(); - } else if (req.isAsyncSupported()) { - AsyncContext actx = req.startAsync(); - actx.addListener(this); - resp.setContentType("text/plain"); - clients.add(actx); - if (clientcount.incrementAndGet()==1) { - ticker.addTickListener(this); - } - } else { - new Exception("Async Not Supported").printStackTrace(); - resp.sendError(400,"Async is not supported."); - } - } - - - @Override - public void tick(Stock stock) { - ticks.add((Stock)stock.clone()); - Iterator it = clients.iterator(); - while (it.hasNext()) { - AsyncContext actx = it.next(); - writeStock(actx, stock); - } - } - - public void writeStock(AsyncContext actx, Stock stock) { - HttpServletResponse response = (HttpServletResponse)actx.getResponse(); - try { - PrintWriter writer = response.getWriter(); - writer.write("STOCK#");//make client parsing easier - writer.write(stock.getSymbol()); - writer.write("#"); - writer.write(stock.getValueAsString()); - writer.write("#"); - writer.write(stock.getLastChangeAsString()); - writer.write("#"); - writer.write(String.valueOf(stock.getCnt())); - writer.write("\n"); - writer.flush(); - response.flushBuffer(); - }catch (IOException x) { - try {actx.complete();}catch (Exception ignore){/* Ignore */} - } - } - - @Override - public void onComplete(AsyncEvent event) throws IOException { - if (clients.remove(event.getAsyncContext()) && clientcount.decrementAndGet()==0) { - ticker.removeTickListener(this); - } - } - - @Override - public void onError(AsyncEvent event) throws IOException { - event.getAsyncContext().complete(); - } - - @Override - public void onTimeout(AsyncEvent event) throws IOException { - event.getAsyncContext().complete(); - } - - - @Override - public void onStartAsync(AsyncEvent event) throws IOException { - // NOOP - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker$Stock.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker$Stock.class deleted file mode 100755 index bf771c36..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker$Stock.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker$TickListener.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker$TickListener.class deleted file mode 100755 index 928b52fc..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker$TickListener.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker.class deleted file mode 100755 index 7a991630..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker.java deleted file mode 100755 index 0bebf868..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/async/Stockticker.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package async; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Random; -import java.util.concurrent.atomic.AtomicInteger; - -public class Stockticker implements Runnable { - public volatile boolean run = true; - protected AtomicInteger counter = new AtomicInteger(0); - ArrayList listeners = new ArrayList(); - protected volatile Thread ticker = null; - protected volatile int ticknr = 0; - - public synchronized void start() { - run = true; - ticker = new Thread(this); - ticker.setName("Ticker Thread"); - ticker.start(); - } - - public synchronized void stop() { - run = false; - try { - ticker.join(); - }catch (InterruptedException x) { - Thread.interrupted(); - } - - ticker = null; - } - - public void addTickListener(TickListener listener) { - if (listeners.add(listener)) { - if (counter.incrementAndGet()==1) start(); - } - - } - - public void removeTickListener(TickListener listener) { - if (listeners.remove(listener)) { - if (counter.decrementAndGet()==0) stop(); - } - } - - @Override - public void run() { - try { - - Stock[] stocks = new Stock[] { new Stock("GOOG", 435.43), - new Stock("YHOO", 27.88), new Stock("ASF", 1015.55), }; - Random r = new Random(System.currentTimeMillis()); - while (run) { - for (int j = 0; j < 1; j++) { - int i = r.nextInt() % 3; - if (i < 0) - i = i * (-1); - Stock stock = stocks[i]; - double change = r.nextDouble(); - boolean plus = r.nextBoolean(); - if (plus) { - stock.setValue(stock.getValue() + change); - } else { - stock.setValue(stock.getValue() - change); - } - stock.setCnt(++ticknr); - for (TickListener l : listeners) { - l.tick(stock); - } - - } - Thread.sleep(850); - } - } catch (InterruptedException ix) { - // Ignore - } catch (Exception x) { - x.printStackTrace(); - } - } - - - public static interface TickListener { - public void tick(Stock stock); - } - - public static final class Stock implements Cloneable { - protected static DecimalFormat df = new DecimalFormat("0.00"); - protected String symbol = ""; - protected double value = 0.0d; - protected double lastchange = 0.0d; - protected int cnt = 0; - - public Stock(String symbol, double initvalue) { - this.symbol = symbol; - this.value = initvalue; - } - - public void setCnt(int c) { - this.cnt = c; - } - - public int getCnt() { - return cnt; - } - - public String getSymbol() { - return symbol; - } - - public double getValue() { - return value; - } - - public void setValue(double value) { - double old = this.value; - this.value = value; - this.lastchange = value - old; - } - - public String getValueAsString() { - return df.format(value); - } - - public double getLastChange() { - return this.lastchange; - } - - public void setLastChange(double lastchange) { - this.lastchange = lastchange; - } - - public String getLastChangeAsString() { - return df.format(lastchange); - } - - @Override - public int hashCode() { - return symbol.hashCode(); - } - - @Override - public boolean equals(Object other) { - if (other instanceof Stock) { - return this.symbol.equals(((Stock) other).symbol); - } - - return false; - } - - @Override - public String toString() { - StringBuilder buf = new StringBuilder("STOCK#"); - buf.append(getSymbol()); - buf.append("#"); - buf.append(getValueAsString()); - buf.append("#"); - buf.append(getLastChangeAsString()); - buf.append("#"); - buf.append(String.valueOf(getCnt())); - return buf.toString(); - - } - - @Override - public Object clone() { - Stock s = new Stock(this.getSymbol(), this.getValue()); - s.setLastChange(this.getLastChange()); - s.setCnt(this.cnt); - return s; - } - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entries.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entries.class deleted file mode 100755 index 30bed2fe..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entries.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entries.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entries.java deleted file mode 100755 index 443cd605..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entries.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package cal; - -import java.util.Hashtable; - -import javax.servlet.http.HttpServletRequest; - -public class Entries { - - private Hashtable entries; - private static final String[] time = { "8am", "9am", "10am", "11am", - "12pm", "1pm", "2pm", "3pm", "4pm", "5pm", "6pm", "7pm", "8pm" }; - public static final int rows = 12; - - public Entries() { - entries = new Hashtable(rows); - for (int i = 0; i < rows; i++) { - entries.put(time[i], new Entry(time[i])); - } - } - - public int getRows() { - return rows; - } - - public Entry getEntry(int index) { - return this.entries.get(time[index]); - } - - public int getIndex(String tm) { - for (int i = 0; i < rows; i++) - if (tm.equals(time[i])) - return i; - return -1; - } - - public void processRequest(HttpServletRequest request, String tm) { - int index = getIndex(tm); - if (index >= 0) { - String descr = request.getParameter("description"); - entries.get(time[index]).setDescription(descr); - } - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entry.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entry.class deleted file mode 100755 index 44c493db..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entry.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entry.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entry.java deleted file mode 100755 index e6403b24..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/Entry.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cal; - -public class Entry { - - String hour; - String description; - - public Entry(String hour) { - this.hour = hour; - this.description = ""; - - } - - public String getHour() { - return this.hour; - } - - public String getColor() { - if (description.equals("")) { - return "lightblue"; - } - return "red"; - } - - public String getDescription() { - if (description.equals("")) { - return "None"; - } - return this.description; - } - - public void setDescription(String descr) { - description = descr; - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/JspCalendar.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/JspCalendar.class deleted file mode 100755 index e1c6efaa..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/JspCalendar.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/JspCalendar.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/JspCalendar.java deleted file mode 100755 index dff319c8..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/JspCalendar.java +++ /dev/null @@ -1,151 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package cal; - -import java.util.Calendar; -import java.util.Date; - -public class JspCalendar { - Calendar calendar = null; - - public JspCalendar() { - calendar = Calendar.getInstance(); - Date trialTime = new Date(); - calendar.setTime(trialTime); - } - - - public int getYear() { - return calendar.get(Calendar.YEAR); - } - - public String getMonth() { - int m = getMonthInt(); - String[] months = new String [] { "January", "February", "March", - "April", "May", "June", - "July", "August", "September", - "October", "November", "December" }; - if (m > 12) - return "Unknown to Man"; - - return months[m - 1]; - - } - - public String getDay() { - int x = getDayOfWeek(); - String[] days = new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", - "Thursday", "Friday", "Saturday"}; - - if (x > 7) - return "Unknown to Man"; - - return days[x - 1]; - - } - - public int getMonthInt() { - return 1 + calendar.get(Calendar.MONTH); - } - - public String getDate() { - return getMonthInt() + "/" + getDayOfMonth() + "/" + getYear(); - } - - public String getCurrentDate() { - Date dt = new Date (); - calendar.setTime (dt); - return getMonthInt() + "/" + getDayOfMonth() + "/" + getYear(); - - } - - public String getNextDate() { - calendar.set (Calendar.DAY_OF_MONTH, getDayOfMonth() + 1); - return getDate (); - } - - public String getPrevDate() { - calendar.set (Calendar.DAY_OF_MONTH, getDayOfMonth() - 1); - return getDate (); - } - - public String getTime() { - return getHour() + ":" + getMinute() + ":" + getSecond(); - } - - public int getDayOfMonth() { - return calendar.get(Calendar.DAY_OF_MONTH); - } - - public int getDayOfYear() { - return calendar.get(Calendar.DAY_OF_YEAR); - } - - public int getWeekOfYear() { - return calendar.get(Calendar.WEEK_OF_YEAR); - } - - public int getWeekOfMonth() { - return calendar.get(Calendar.WEEK_OF_MONTH); - } - - public int getDayOfWeek() { - return calendar.get(Calendar.DAY_OF_WEEK); - } - - public int getHour() { - return calendar.get(Calendar.HOUR_OF_DAY); - } - - public int getMinute() { - return calendar.get(Calendar.MINUTE); - } - - - public int getSecond() { - return calendar.get(Calendar.SECOND); - } - - - public int getEra() { - return calendar.get(Calendar.ERA); - } - - public String getUSTimeZone() { - String[] zones = new String[] {"Hawaii", "Alaskan", "Pacific", - "Mountain", "Central", "Eastern"}; - - return zones[10 + getZoneOffset()]; - } - - public int getZoneOffset() { - return calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000); - } - - - public int getDSTOffset() { - return calendar.get(Calendar.DST_OFFSET)/(60*60*1000); - } - - - public int getAMPM() { - return calendar.get(Calendar.AM_PM); - } -} - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/TableBean.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/TableBean.class deleted file mode 100755 index fdd37a81..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/TableBean.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/TableBean.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/TableBean.java deleted file mode 100755 index 1c32e68e..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/cal/TableBean.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package cal; - -import java.util.Hashtable; - -import javax.servlet.http.HttpServletRequest; - -public class TableBean { - - Hashtable table; - JspCalendar JspCal; - Entries entries; - String date; - String name = null; - String email = null; - boolean processError = false; - - public TableBean() { - this.table = new Hashtable(10); - this.JspCal = new JspCalendar(); - this.date = JspCal.getCurrentDate(); - } - - public void setName(String nm) { - this.name = nm; - } - - public String getName() { - return this.name; - } - - public void setEmail(String mail) { - this.email = mail; - } - - public String getEmail() { - return this.email; - } - - public String getDate() { - return this.date; - } - - public Entries getEntries() { - return this.entries; - } - - public void processRequest(HttpServletRequest request) { - - // Get the name and e-mail. - this.processError = false; - if (name == null || name.equals("")) - setName(request.getParameter("name")); - if (email == null || email.equals("")) - setEmail(request.getParameter("email")); - if (name == null || email == null || name.equals("") - || email.equals("")) { - this.processError = true; - return; - } - - // Get the date. - String dateR = request.getParameter("date"); - if (dateR == null) - date = JspCal.getCurrentDate(); - else if (dateR.equalsIgnoreCase("next")) - date = JspCal.getNextDate(); - else if (dateR.equalsIgnoreCase("prev")) - date = JspCal.getPrevDate(); - - entries = table.get(date); - if (entries == null) { - entries = new Entries(); - table.put(date, entries); - } - - // If time is provided add the event. - String time = request.getParameter("time"); - if (time != null) - entries.processRequest(request, time); - } - - public boolean getProcessError() { - return this.processError; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet$MessageSender.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet$MessageSender.class deleted file mode 100755 index fc192280..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet$MessageSender.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet.class deleted file mode 100755 index ea047bdd..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet.java deleted file mode 100755 index 9aa69844..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/chat/ChatServlet.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package chat; - - -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.catalina.comet.CometEvent; -import org.apache.catalina.comet.CometProcessor; - - -/** - * Helper class to implement Comet functionality. - */ -public class ChatServlet - extends HttpServlet implements CometProcessor { - - private static final long serialVersionUID = 1L; - - private static final String CHARSET = "UTF-8"; - - protected ArrayList connections = - new ArrayList(); - protected transient MessageSender messageSender = null; - - @Override - public void init() throws ServletException { - messageSender = new MessageSender(); - Thread messageSenderThread = - new Thread(messageSender, "MessageSender[" + getServletContext().getContextPath() + "]"); - messageSenderThread.setDaemon(true); - messageSenderThread.start(); - } - - @Override - public void destroy() { - connections.clear(); - messageSender.stop(); - messageSender = null; - } - - /** - * Process the given Comet event. - * - * @param event The Comet event that will be processed - * @throws IOException - * @throws ServletException - */ - @Override - public void event(CometEvent event) - throws IOException, ServletException { - - // Note: There should really be two servlets in this example, to avoid - // mixing Comet stuff with regular connection processing - HttpServletRequest request = event.getHttpServletRequest(); - HttpServletResponse response = event.getHttpServletResponse(); - - if (event.getEventType() == CometEvent.EventType.BEGIN) { - String action = request.getParameter("action"); - if (action != null) { - if ("login".equals(action)) { - String nickname = request.getParameter("nickname"); - request.getSession(true).setAttribute("nickname", nickname); - response.sendRedirect("index.jsp"); - event.close(); - return; - } - String nickname = (String) request.getSession(true).getAttribute("nickname"); - String message = request.getParameter("message"); - messageSender.send(nickname, message); - response.sendRedirect("post.jsp"); - event.close(); - return; - } - if (request.getSession(true).getAttribute("nickname") == null) { - // Redirect to "login" - log("Redirect to login for session: " + request.getSession(true).getId()); - response.sendRedirect("login.jsp"); - event.close(); - return; - } - begin(event, request, response); - } else if (event.getEventType() == CometEvent.EventType.ERROR) { - error(event, request, response); - } else if (event.getEventType() == CometEvent.EventType.END) { - end(event, request, response); - } else if (event.getEventType() == CometEvent.EventType.READ) { - read(event, request, response); - } - } - - protected void begin(@SuppressWarnings("unused") CometEvent event, - HttpServletRequest request, HttpServletResponse response) - throws IOException { - log("Begin for session: " + request.getSession(true).getId()); - - response.setContentType("text/html; charset=" + CHARSET); - - PrintWriter writer = response.getWriter(); - writer.println(""); - writer.println("JSP Chat"); - writer.println("

"); - writer.flush(); - - synchronized(connections) { - connections.add(response); - } - - messageSender.send("Tomcat", request.getSession(true).getAttribute("nickname") + " joined the chat."); - } - - protected void end(CometEvent event, HttpServletRequest request, HttpServletResponse response) - throws IOException { - log("End for session: " + request.getSession(true).getId()); - synchronized(connections) { - connections.remove(response); - } - - PrintWriter writer = response.getWriter(); - writer.println(""); - - event.close(); - } - - protected void error(CometEvent event, HttpServletRequest request, HttpServletResponse response) - throws IOException { - log("Error for session: " + request.getSession(true).getId()); - synchronized(connections) { - connections.remove(response); - } - event.close(); - } - - protected void read(CometEvent event, HttpServletRequest request, HttpServletResponse response) - throws IOException { - InputStream is = request.getInputStream(); - byte[] buf = new byte[512]; - while (is.available() > 0) { - log("Available: " + is.available()); - int n = is.read(buf); - if (n > 0) { - log("Read " + n + " bytes: " + new String(buf, 0, n) - + " for session: " + request.getSession(true).getId()); - } else if (n < 0) { - log("End of file: " + n); - end(event, request, response); - return; - } - } - } - - @Override - protected void service(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - // Compatibility method: equivalent method using the regular connection model - response.setContentType("text/html; charset=" + CHARSET); - PrintWriter writer = response.getWriter(); - writer.println(""); - writer.println("JSP Chat"); - writer.println("Chat example only supports Comet processing. "); - writer.println("Configure a connector that supports Comet and try again."); - writer.println(""); - } - - - /** - * Poller class. - */ - public class MessageSender implements Runnable { - - protected boolean running = true; - protected ArrayList messages = new ArrayList(); - - public MessageSender() { - // Default contructor - } - - public void stop() { - running = false; - synchronized (messages) { - messages.notify(); - } - } - - public void send(String user, String message) { - synchronized (messages) { - messages.add("[" + user + "]: " + message); - messages.notify(); - } - } - - /** - * The background thread that listens for incoming TCP/IP connections and - * hands them off to an appropriate processor. - */ - @Override - public void run() { - - // Loop until we receive a shutdown command - while (running) { - String[] pendingMessages; - synchronized (messages) { - try { - if (messages.size() == 0) { - messages.wait(); - } - } catch (InterruptedException e) { - // Ignore - } - pendingMessages = messages.toArray(new String[0]); - messages.clear(); - } - - synchronized (connections) { - for (int i = 0; i < connections.size(); i++) { - try { - PrintWriter writer = connections.get(i).getWriter(); - for (int j = 0; j < pendingMessages.length; j++) { - writer.println("
"+filter(pendingMessages[j]) + "
"); - } - writer.flush(); - } catch (IOException e) { - log("IOException sending message", e); - } - } - } - - } - - } - - } - - /** - * Filter the specified message string for characters that are sensitive - * in HTML. - * - * @param message The message string to be filtered - * @author Copied from org.apache.catalina.util.RequestUtil#filter(String) - */ - protected static String filter(String message) { - if (message == null) - return (null); - - char content[] = new char[message.length()]; - message.getChars(0, message.length(), content, 0); - StringBuilder result = new StringBuilder(content.length + 50); - for (int i = 0; i < content.length; i++) { - switch (content[i]) { - case '<': - result.append("<"); - break; - case '>': - result.append(">"); - break; - case '&': - result.append("&"); - break; - case '"': - result.append("""); - break; - default: - result.append(content[i]); - } - } - return (result.toString()); - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/checkbox/CheckTest.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/checkbox/CheckTest.class deleted file mode 100755 index e5fc31c0..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/checkbox/CheckTest.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/checkbox/CheckTest.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/checkbox/CheckTest.java deleted file mode 100755 index c25448b8..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/checkbox/CheckTest.java +++ /dev/null @@ -1,31 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package checkbox; - -public class CheckTest { - - String b[] = new String[] { "1", "2", "3", "4" }; - - public String[] getFruit() { - return b; - } - - public void setFruit(String [] b) { - this.b = b; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/colors/ColorGameBean.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/colors/ColorGameBean.class deleted file mode 100755 index bed4bf38..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/colors/ColorGameBean.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/colors/ColorGameBean.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/colors/ColorGameBean.java deleted file mode 100755 index 6e2d7412..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/colors/ColorGameBean.java +++ /dev/null @@ -1,113 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package colors; - -public class ColorGameBean { - - private String background = "yellow"; - private String foreground = "red"; - private String color1 = foreground; - private String color2 = background; - private String hint = "no"; - private int attempts = 0; - private int intval = 0; - private boolean tookHints = false; - - public void processRequest() { - - // background = "yellow"; - // foreground = "red"; - - if (! color1.equals(foreground)) { - if (color1.equalsIgnoreCase("black") || - color1.equalsIgnoreCase("cyan")) { - background = color1; - } - } - - if (! color2.equals(background)) { - if (color2.equalsIgnoreCase("black") || - color2.equalsIgnoreCase("cyan")) { - foreground = color2; - } - } - - attempts++; - } - - public void setColor2(String x) { - color2 = x; - } - - public void setColor1(String x) { - color1 = x; - } - - public void setAction(String x) { - if (!tookHints) - tookHints = x.equalsIgnoreCase("Hint"); - hint = x; - } - - public String getColor2() { - return background; - } - - public String getColor1() { - return foreground; - } - - public int getAttempts() { - return attempts; - } - - public boolean getHint() { - return hint.equalsIgnoreCase("Hint"); - } - - public boolean getSuccess() { - if (background.equalsIgnoreCase("black") || - background.equalsIgnoreCase("cyan")) { - - if (foreground.equalsIgnoreCase("black") || - foreground.equalsIgnoreCase("cyan")) { - return true; - } - return false; - } - - return false; - } - - public boolean getHintTaken() { - return tookHints; - } - - public void reset() { - foreground = "red"; - background = "yellow"; - } - - public void setIntval(int value) { - intval = value; - } - - public int getIntval() { - return intval; - } -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.class deleted file mode 100755 index b4d0c88b..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java deleted file mode 100755 index 2c4a8c04..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java +++ /dev/null @@ -1,266 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package compressionFilters; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.StringTokenizer; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Implementation of javax.servlet.Filter used to compress - * the ServletResponse if it is bigger than a threshold. - * - * @author Amy Roh - * @author Dmitri Valdin - */ -public class CompressionFilter implements Filter { - - /** - * The filter configuration object we are associated with. If this value - * is null, this filter instance is not currently configured. - */ - private FilterConfig config = null; - - /** - * Minimal reasonable threshold. - */ - private int minThreshold = 128; - - /** - * The threshold number to compress. - */ - protected int compressionThreshold = 0; - - /** - * Minimal reasonable buffer. - */ - private int minBuffer = 8192; // 8KB is what tomcat would use by default anyway - - /** - * The compression buffer size to avoid chunking. - */ - protected int compressionBuffer = 0; - - /** - * The mime types to compress. - */ - protected String[] compressionMimeTypes = {"text/html", "text/xml", "text/plain"}; - - /** - * Debug level for this filter. - */ - private int debug = 0; - - /** - * Place this filter into service. - * - * @param filterConfig The filter configuration object - */ - @Override - public void init(FilterConfig filterConfig) { - - config = filterConfig; - if (filterConfig != null) { - String value = filterConfig.getInitParameter("debug"); - if (value!=null) { - debug = Integer.parseInt(value); - } - - String str = filterConfig.getInitParameter("compressionThreshold"); - if (str!=null) { - compressionThreshold = Integer.parseInt(str); - if (compressionThreshold != 0 && compressionThreshold < minThreshold) { - if (debug > 0) { - System.out.println("compressionThreshold should be either 0 - no compression or >= " + minThreshold); - System.out.println("compressionThreshold set to " + minThreshold); - } - compressionThreshold = minThreshold; - } - } - - str = filterConfig.getInitParameter("compressionBuffer"); - if (str!=null) { - compressionBuffer = Integer.parseInt(str); - if (compressionBuffer < minBuffer) { - if (debug > 0) { - System.out.println("compressionBuffer should be >= " + minBuffer); - System.out.println("compressionBuffer set to " + minBuffer); - } - compressionBuffer = minBuffer; - } - } - - str = filterConfig.getInitParameter("compressionMimeTypes"); - if (str!=null) { - List values = new ArrayList(); - StringTokenizer st = new StringTokenizer(str, ","); - - while (st.hasMoreTokens()) { - String token = st.nextToken().trim(); - if (token.length() > 0) { - values.add(token); - } - } - - if (values.size() > 0) { - compressionMimeTypes = values.toArray( - new String[values.size()]); - } else { - compressionMimeTypes = null; - } - - if (debug > 0) { - System.out.println("compressionMimeTypes set to " + compressionMimeTypes); - } - } - } - - } - - /** - * Take this filter out of service. - */ - @Override - public void destroy() { - - this.config = null; - - } - - /** - * The doFilter method of the Filter is called by the container - * each time a request/response pair is passed through the chain due - * to a client request for a resource at the end of the chain. - * The FilterChain passed into this method allows the Filter to pass on the - * request and response to the next entity in the chain.

- * This method first examines the request to check whether the client support - * compression.
- * It simply just pass the request and response if there is no support for - * compression.
- * If the compression support is available, it creates a - * CompressionServletResponseWrapper object which compresses the content and - * modifies the header if the content length is big enough. - * It then invokes the next entity in the chain using the FilterChain object - * (chain.doFilter()),
- **/ - @Override - public void doFilter ( ServletRequest request, ServletResponse response, - FilterChain chain ) throws IOException, ServletException { - - if (debug > 0) { - System.out.println("@doFilter"); - } - - if (compressionThreshold == 0) { - if (debug > 0) { - System.out.println("doFilter got called, but compressionTreshold is set to 0 - no compression"); - } - chain.doFilter(request, response); - return; - } - - boolean supportCompression = false; - if (request instanceof HttpServletRequest) { - if (debug > 1) { - System.out.println("requestURI = " + ((HttpServletRequest)request).getRequestURI()); - } - - // Are we allowed to compress ? - String s = ((HttpServletRequest)request).getParameter("gzip"); - if ("false".equals(s)) { - if (debug > 0) { - System.out.println("got parameter gzip=false --> don't compress, just chain filter"); - } - chain.doFilter(request, response); - return; - } - - Enumeration e = - ((HttpServletRequest)request).getHeaders("Accept-Encoding"); - while (e.hasMoreElements()) { - String name = e.nextElement(); - if (name.indexOf("gzip") != -1) { - if (debug > 0) { - System.out.println("supports compression"); - } - supportCompression = true; - } else { - if (debug > 0) { - System.out.println("no support for compression"); - } - } - } - } - - if (supportCompression) { - if (response instanceof HttpServletResponse) { - CompressionServletResponseWrapper wrappedResponse = - new CompressionServletResponseWrapper((HttpServletResponse)response); - wrappedResponse.setDebugLevel(debug); - wrappedResponse.setCompressionThreshold(compressionThreshold); - wrappedResponse.setCompressionBuffer(compressionBuffer); - wrappedResponse.setCompressionMimeTypes(compressionMimeTypes); - if (debug > 0) { - System.out.println("doFilter gets called with compression"); - } - try { - chain.doFilter(request, wrappedResponse); - } finally { - wrappedResponse.finishResponse(); - } - return; - } - } else { - if (debug > 0) { - System.out.println("doFilter gets called w/o compression"); - } - chain.doFilter(request, response); - return; - } - } - - /** - * Set filter config - * This function is equivalent to init. Required by Weblogic 6.1 - * - * @param filterConfig The filter configuration object - */ - public void setFilterConfig(FilterConfig filterConfig) { - init(filterConfig); - } - - /** - * Return filter config - * Required by Weblogic 6.1 - */ - public FilterConfig getFilterConfig() { - return config; - } - -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.class deleted file mode 100755 index ce695cb6..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.java deleted file mode 100755 index 700cd1fa..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package compressionFilters; - -import java.io.IOException; -import java.util.Enumeration; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Very Simple test servlet to test compression filter - * @author Amy Roh - */ -public class CompressionFilterTestServlet extends HttpServlet { - - private static final long serialVersionUID = 1L; - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - ServletOutputStream out = response.getOutputStream(); - response.setContentType("text/plain"); - - Enumeration e = request.getHeaders("Accept-Encoding"); - while (e.hasMoreElements()) { - String name = e.nextElement(); - out.println(name); - if (name.indexOf("gzip") != -1) { - out.println("gzip supported -- able to compress"); - } - else { - out.println("gzip not supported"); - } - } - - - out.println("Compression Filter Test Servlet"); - out.println("Minimum content length for compression is 128 bytes"); - out.println("********** 32 bytes **********"); - out.println("********** 32 bytes **********"); - out.println("********** 32 bytes **********"); - out.println("********** 32 bytes **********"); - out.close(); - } - -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.class deleted file mode 100755 index 3d05f199..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java deleted file mode 100755 index a79027aa..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java +++ /dev/null @@ -1,412 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package compressionFilters; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.zip.GZIPOutputStream; - -import javax.servlet.ServletOutputStream; - -/** - * Implementation of ServletOutputStream that works with - * the CompressionServletResponseWrapper implementation. - * - * @author Amy Roh - * @author Dmitri Valdin - */ -public class CompressionResponseStream extends ServletOutputStream { - - // ----------------------------------------------------------- Constructors - - /** - * Construct a servlet output stream associated with the specified Response. - * - * @param responseWrapper The associated response wrapper - * @param originalOutput the output stream - */ - public CompressionResponseStream( - CompressionServletResponseWrapper responseWrapper, - ServletOutputStream originalOutput) { - - super(); - closed = false; - this.response = responseWrapper; - this.output = originalOutput; - } - - - // ----------------------------------------------------- Instance Variables - - - /** - * The threshold number which decides to compress or not. - * Users can configure in web.xml to set it to fit their needs. - */ - protected int compressionThreshold = 0; - - /** - * The compression buffer size to avoid chunking - */ - protected int compressionBuffer = 0; - - /** - * The mime types to compress - */ - protected String[] compressionMimeTypes = {"text/html", "text/xml", "text/plain"}; - - /** - * Debug level - */ - private int debug = 0; - - /** - * The buffer through which all of our output bytes are passed. - */ - protected byte[] buffer = null; - - /** - * The number of data bytes currently in the buffer. - */ - protected int bufferCount = 0; - - /** - * The underlying gzip output stream to which we should write data. - */ - protected OutputStream gzipstream = null; - - /** - * Has this stream been closed? - */ - protected boolean closed = false; - - /** - * The content length past which we will not write, or -1 if there is - * no defined content length. - */ - protected int length = -1; - - /** - * The response with which this servlet output stream is associated. - */ - protected CompressionServletResponseWrapper response = null; - - /** - * The underlying servlet output stream to which we should write data. - */ - protected ServletOutputStream output = null; - - - // --------------------------------------------------------- Public Methods - - /** - * Set debug level - */ - public void setDebugLevel(int debug) { - this.debug = debug; - } - - - /** - * Set the compressionThreshold number and create buffer for this size - */ - protected void setCompressionThreshold(int compressionThreshold) { - this.compressionThreshold = compressionThreshold; - buffer = new byte[this.compressionThreshold]; - if (debug > 1) { - System.out.println("compressionThreshold is set to "+ this.compressionThreshold); - } - } - - /** - * The compression buffer size to avoid chunking - */ - protected void setCompressionBuffer(int compressionBuffer) { - this.compressionBuffer = compressionBuffer; - if (debug > 1) { - System.out.println("compressionBuffer is set to "+ this.compressionBuffer); - } - } - - /** - * Set supported mime types - */ - public void setCompressionMimeTypes(String[] compressionMimeTypes) { - this.compressionMimeTypes = compressionMimeTypes; - if (debug > 1) { - System.out.println("compressionMimeTypes is set to " + this.compressionMimeTypes); - } - } - - /** - * Close this output stream, causing any buffered data to be flushed and - * any further output data to throw an IOException. - */ - @Override - public void close() throws IOException { - - if (debug > 1) { - System.out.println("close() @ CompressionResponseStream"); - } - if (closed) - throw new IOException("This output stream has already been closed"); - - if (gzipstream != null) { - flushToGZip(); - gzipstream.close(); - gzipstream = null; - } else { - if (bufferCount > 0) { - if (debug > 2) { - System.out.print("output.write("); - System.out.write(buffer, 0, bufferCount); - System.out.println(")"); - } - output.write(buffer, 0, bufferCount); - bufferCount = 0; - } - } - - output.close(); - closed = true; - - } - - - /** - * Flush any buffered data for this output stream, which also causes the - * response to be committed. - */ - @Override - public void flush() throws IOException { - - if (debug > 1) { - System.out.println("flush() @ CompressionResponseStream"); - } - if (closed) { - throw new IOException("Cannot flush a closed output stream"); - } - - if (gzipstream != null) { - gzipstream.flush(); - } - - } - - public void flushToGZip() throws IOException { - - if (debug > 1) { - System.out.println("flushToGZip() @ CompressionResponseStream"); - } - if (bufferCount > 0) { - if (debug > 1) { - System.out.println("flushing out to GZipStream, bufferCount = " + bufferCount); - } - writeToGZip(buffer, 0, bufferCount); - bufferCount = 0; - } - - } - - /** - * Write the specified byte to our output stream. - * - * @param b The byte to be written - * - * @exception IOException if an input/output error occurs - */ - @Override - public void write(int b) throws IOException { - - if (debug > 1) { - System.out.println("write "+b+" in CompressionResponseStream "); - } - if (closed) - throw new IOException("Cannot write to a closed output stream"); - - if (bufferCount >= buffer.length) { - flushToGZip(); - } - - buffer[bufferCount++] = (byte) b; - - } - - - /** - * Write b.length bytes from the specified byte array - * to our output stream. - * - * @param b The byte array to be written - * - * @exception IOException if an input/output error occurs - */ - @Override - public void write(byte b[]) throws IOException { - - write(b, 0, b.length); - - } - - - /** - * Write len bytes from the specified byte array, starting - * at the specified offset, to our output stream. - * - * @param b The byte array containing the bytes to be written - * @param off Zero-relative starting offset of the bytes to be written - * @param len The number of bytes to be written - * - * @exception IOException if an input/output error occurs - */ - @Override - public void write(byte b[], int off, int len) throws IOException { - - if (debug > 1) { - System.out.println("write, bufferCount = " + bufferCount + " len = " + len + " off = " + off); - } - if (debug > 2) { - System.out.print("write("); - System.out.write(b, off, len); - System.out.println(")"); - } - - if (closed) - throw new IOException("Cannot write to a closed output stream"); - - if (len == 0) - return; - - // Can we write into buffer ? - if (len <= (buffer.length - bufferCount)) { - System.arraycopy(b, off, buffer, bufferCount, len); - bufferCount += len; - return; - } - - // There is not enough space in buffer. Flush it ... - flushToGZip(); - - // ... and try again. Note, that bufferCount = 0 here ! - if (len <= (buffer.length - bufferCount)) { - System.arraycopy(b, off, buffer, bufferCount, len); - bufferCount += len; - return; - } - - // write direct to gzip - writeToGZip(b, off, len); - } - - public void writeToGZip(byte b[], int off, int len) throws IOException { - - if (debug > 1) { - System.out.println("writeToGZip, len = " + len); - } - if (debug > 2) { - System.out.print("writeToGZip("); - System.out.write(b, off, len); - System.out.println(")"); - } - if (gzipstream == null) { - if (debug > 1) { - System.out.println("new GZIPOutputStream"); - } - - boolean alreadyCompressed = false; - String contentEncoding = response.getHeader("Content-Encoding"); - if (contentEncoding != null) { - if (contentEncoding.contains("gzip")) { - alreadyCompressed = true; - if (debug > 0) { - System.out.println("content is already compressed"); - } - } else { - if (debug > 0) { - System.out.println("content is not compressed yet"); - } - } - } - - boolean compressibleMimeType = false; - // Check for compatible MIME-TYPE - if (compressionMimeTypes != null) { - if (startsWithStringArray(compressionMimeTypes, response.getContentType())) { - compressibleMimeType = true; - if (debug > 0) { - System.out.println("mime type " + response.getContentType() + " is compressible"); - } - } else { - if (debug > 0) { - System.out.println("mime type " + response.getContentType() + " is not compressible"); - } - } - } - - if (response.isCommitted()) { - if (debug > 1) - System.out.print("Response already committed. Using original output stream"); - gzipstream = output; - } else if (alreadyCompressed) { - if (debug > 1) - System.out.print("Response already compressed. Using original output stream"); - gzipstream = output; - } else if (!compressibleMimeType) { - if (debug > 1) - System.out.print("Response mime type is not compressible. Using original output stream"); - gzipstream = output; - } else { - response.addHeader("Content-Encoding", "gzip"); - response.setContentLength(-1); // don't use any preset content-length as it will be wrong after gzipping - response.setBufferSize(compressionBuffer); - gzipstream = new GZIPOutputStream(output); - } - } - gzipstream.write(b, off, len); - - } - - - // -------------------------------------------------------- Package Methods - - - /** - * Has this response stream been closed? - */ - public boolean closed() { - - return (this.closed); - - } - - /** - * Checks if any entry in the string array starts with the specified value - * - * @param sArray the StringArray - * @param value string - */ - private boolean startsWithStringArray(String sArray[], String value) { - if (value == null) - return false; - for (int i = 0; i < sArray.length; i++) { - if (value.startsWith(sArray[i])) { - return true; - } - } - return false; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.class deleted file mode 100755 index 1198e42b..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java deleted file mode 100755 index 1e28d447..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java +++ /dev/null @@ -1,285 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package compressionFilters; - -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - -/** - * Implementation of HttpServletResponseWrapper that works with - * the CompressionServletResponseStream implementation.. - * - * @author Amy Roh - * @author Dmitri Valdin - */ -public class CompressionServletResponseWrapper - extends HttpServletResponseWrapper { - - // ----------------------------------------------------- Constructor - - /** - * Calls the parent constructor which creates a ServletResponse adaptor - * wrapping the given response object. - */ - public CompressionServletResponseWrapper(HttpServletResponse response) { - super(response); - origResponse = response; - if (debug > 1) { - System.out.println("CompressionServletResponseWrapper constructor gets called"); - } - } - - - // ----------------------------------------------------- Instance Variables - - /** - * Original response - */ - - protected HttpServletResponse origResponse = null; - - /** - * Descriptive information about this Response implementation. - */ - - protected static final String info = "CompressionServletResponseWrapper"; - - /** - * The ServletOutputStream that has been returned by - * getOutputStream(), if any. - */ - - protected ServletOutputStream stream = null; - - - /** - * The PrintWriter that has been returned by - * getWriter(), if any. - */ - - protected PrintWriter writer = null; - - /** - * The threshold number to compress - */ - protected int compressionThreshold = 0; - - /** - * The compression buffer size - */ - protected int compressionBuffer = 8192; // 8KB default - - /** - * The mime types to compress - */ - protected String[] compressionMimeTypes = {"text/html", "text/xml", "text/plain"}; - - /** - * Debug level - */ - protected int debug = 0; - - /** - * keeps a copy of all headers set - */ - private Map headerCopies = new HashMap(); - - - // --------------------------------------------------------- Public Methods - - - /** - * Set threshold number - */ - public void setCompressionThreshold(int threshold) { - if (debug > 1) { - System.out.println("setCompressionThreshold to " + threshold); - } - this.compressionThreshold = threshold; - } - - /** - * Set compression buffer - */ - public void setCompressionBuffer(int buffer) { - if (debug > 1) { - System.out.println("setCompressionBuffer to " + buffer); - } - this.compressionBuffer = buffer; - } - - /** - * Set compressible mime types - */ - public void setCompressionMimeTypes(String[] mimeTypes) { - if (debug > 1) { - System.out.println("setCompressionMimeTypes to " + mimeTypes); - } - this.compressionMimeTypes = mimeTypes; - } - - /** - * Set debug level - */ - public void setDebugLevel(int debug) { - this.debug = debug; - } - - - /** - * Create and return a ServletOutputStream to write the content - * associated with this Response. - * - * @exception IOException if an input/output error occurs - */ - public ServletOutputStream createOutputStream() throws IOException { - if (debug > 1) { - System.out.println("createOutputStream gets called"); - } - - CompressionResponseStream stream = new CompressionResponseStream( - this, origResponse.getOutputStream()); - stream.setDebugLevel(debug); - stream.setCompressionThreshold(compressionThreshold); - stream.setCompressionBuffer(compressionBuffer); - stream.setCompressionMimeTypes(compressionMimeTypes); - - return stream; - } - - - /** - * Finish a response. - */ - public void finishResponse() { - try { - if (writer != null) { - writer.close(); - } else { - if (stream != null) - stream.close(); - } - } catch (IOException e) { - // Ignore - } - } - - - // ------------------------------------------------ ServletResponse Methods - - - /** - * Flush the buffer and commit this response. - * - * @exception IOException if an input/output error occurs - */ - @Override - public void flushBuffer() throws IOException { - if (debug > 1) { - System.out.println("flush buffer @ GZipServletResponseWrapper"); - } - ((CompressionResponseStream)stream).flush(); - - } - - /** - * Return the servlet output stream associated with this Response. - * - * @exception IllegalStateException if getWriter has - * already been called for this response - * @exception IOException if an input/output error occurs - */ - @Override - public ServletOutputStream getOutputStream() throws IOException { - - if (writer != null) - throw new IllegalStateException("getWriter() has already been called for this response"); - - if (stream == null) - stream = createOutputStream(); - if (debug > 1) { - System.out.println("stream is set to "+stream+" in getOutputStream"); - } - - return (stream); - - } - - /** - * Return the writer associated with this Response. - * - * @exception IllegalStateException if getOutputStream has - * already been called for this response - * @exception IOException if an input/output error occurs - */ - @Override - public PrintWriter getWriter() throws IOException { - - if (writer != null) - return (writer); - - if (stream != null) - throw new IllegalStateException("getOutputStream() has already been called for this response"); - - stream = createOutputStream(); - if (debug > 1) { - System.out.println("stream is set to "+stream+" in getWriter"); - } - String charEnc = origResponse.getCharacterEncoding(); - if (debug > 1) { - System.out.println("character encoding is " + charEnc); - } - // HttpServletResponse.getCharacterEncoding() shouldn't return null - // according the spec, so feel free to remove that "if" - if (charEnc != null) { - writer = new PrintWriter(new OutputStreamWriter(stream, charEnc)); - } else { - writer = new PrintWriter(stream); - } - - return (writer); - } - - @Override - public String getHeader(String name) { - return headerCopies.get(name); - } - - @Override - public void addHeader(String name, String value) { - if (headerCopies.containsKey(name)) { - String existingValue = headerCopies.get(name); - if ((existingValue != null) && (existingValue.length() > 0)) headerCopies.put(name, existingValue + "," + value); - else headerCopies.put(name, value); - } else headerCopies.put(name, value); - super.addHeader(name, value); - } - - - @Override - public void setHeader(String name, String value) { - headerCopies.put(name, value); - super.setHeader(name, value); - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/dates/JspCalendar.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/dates/JspCalendar.class deleted file mode 100755 index 56cd2b53..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/dates/JspCalendar.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/dates/JspCalendar.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/dates/JspCalendar.java deleted file mode 100755 index 9c90bbd6..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/dates/JspCalendar.java +++ /dev/null @@ -1,153 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package dates; - -import java.util.Calendar; -import java.util.Date; - -public class JspCalendar { - Calendar calendar = null; - - public JspCalendar() { - calendar = Calendar.getInstance(); - Date trialTime = new Date(); - calendar.setTime(trialTime); - } - - public int getYear() { - return calendar.get(Calendar.YEAR); - } - - public String getMonth() { - int m = getMonthInt(); - String[] months = new String [] { "January", "February", "March", - "April", "May", "June", - "July", "August", "September", - "October", "November", "December" }; - if (m > 12) - return "Unknown to Man"; - - return months[m - 1]; - - } - - public String getDay() { - int x = getDayOfWeek(); - String[] days = new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", - "Thursday", "Friday", "Saturday"}; - - if (x > 7) - return "Unknown to Man"; - - return days[x - 1]; - - } - - public int getMonthInt() { - return 1 + calendar.get(Calendar.MONTH); - } - - public String getDate() { - return getMonthInt() + "/" + getDayOfMonth() + "/" + getYear(); - - } - - public String getTime() { - return getHour() + ":" + getMinute() + ":" + getSecond(); - } - - public int getDayOfMonth() { - return calendar.get(Calendar.DAY_OF_MONTH); - } - - public int getDayOfYear() { - return calendar.get(Calendar.DAY_OF_YEAR); - } - - public int getWeekOfYear() { - return calendar.get(Calendar.WEEK_OF_YEAR); - } - - public int getWeekOfMonth() { - return calendar.get(Calendar.WEEK_OF_MONTH); - } - - public int getDayOfWeek() { - return calendar.get(Calendar.DAY_OF_WEEK); - } - - public int getHour() { - return calendar.get(Calendar.HOUR_OF_DAY); - } - - public int getMinute() { - return calendar.get(Calendar.MINUTE); - } - - - public int getSecond() { - return calendar.get(Calendar.SECOND); - } - - public static void main(String args[]) { - JspCalendar db = new JspCalendar(); - p("date: " + db.getDayOfMonth()); - p("year: " + db.getYear()); - p("month: " + db.getMonth()); - p("time: " + db.getTime()); - p("date: " + db.getDate()); - p("Day: " + db.getDay()); - p("DayOfYear: " + db.getDayOfYear()); - p("WeekOfYear: " + db.getWeekOfYear()); - p("era: " + db.getEra()); - p("ampm: " + db.getAMPM()); - p("DST: " + db.getDSTOffset()); - p("ZONE Offset: " + db.getZoneOffset()); - p("TIMEZONE: " + db.getUSTimeZone()); - } - - private static void p(String x) { - System.out.println(x); - } - - - public int getEra() { - return calendar.get(Calendar.ERA); - } - - public String getUSTimeZone() { - String[] zones = new String[] {"Hawaii", "Alaskan", "Pacific", - "Mountain", "Central", "Eastern"}; - - return zones[10 + getZoneOffset()]; - } - - public int getZoneOffset() { - return calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000); - } - - - public int getDSTOffset() { - return calendar.get(Calendar.DST_OFFSET)/(60*60*1000); - } - - - public int getAMPM() { - return calendar.get(Calendar.AM_PM); - } -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/error/Smart.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/error/Smart.class deleted file mode 100755 index fd96ee23..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/error/Smart.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/error/Smart.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/error/Smart.java deleted file mode 100755 index 67aff03b..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/error/Smart.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package error; - -public class Smart { - - String name = "JSP"; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.class deleted file mode 100755 index 4ac9330e..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.java deleted file mode 100755 index d339adbc..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.java +++ /dev/null @@ -1,74 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package examples; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyContent; -import javax.servlet.jsp.tagext.BodyTagSupport; -import javax.servlet.jsp.tagext.Tag; - -public abstract class ExampleTagBase extends BodyTagSupport { - - private static final long serialVersionUID = 1L; - - @Override - public void setParent(Tag parent) { - this.parent = parent; - } - - @Override - public void setBodyContent(BodyContent bodyOut) { - this.bodyOut = bodyOut; - } - - @Override - public Tag getParent() { - return this.parent; - } - - @Override - public int doStartTag() throws JspException { - return SKIP_BODY; - } - - @Override - public int doEndTag() throws JspException { - return EVAL_PAGE; - } - - - @Override - public void doInitBody() throws JspException { - // Default implementations for BodyTag methods as well - // just in case a tag decides to implement BodyTag. - } - - @Override - public int doAfterBody() throws JspException { - return SKIP_BODY; - } - - @Override - public void release() { - bodyOut = null; - pageContext = null; - parent = null; - } - - protected BodyContent bodyOut; - protected Tag parent; -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTag.class deleted file mode 100755 index 3d6d7607..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTag.java deleted file mode 100755 index c8fdb0a1..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTag.java +++ /dev/null @@ -1,87 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package examples; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; - -/** - * Example1: the simplest tag - * Collect attributes and call into some actions - * - * - */ - -public class FooTag extends ExampleTagBase { - - private static final long serialVersionUID = 1L; - - private String atts[] = new String[3]; - int i = 0; - - private final void setAtt(int index, String value) { - atts[index] = value; - } - - public void setAtt1(String value) { - setAtt(0, value); - } - - public void setAtt2(String value) { - setAtt(1, value); - } - - public void setAtt3(String value) { - setAtt(2, value); - } - - /** - * Process start tag - * - * @return EVAL_BODY_INCLUDE - */ - @Override - public int doStartTag() throws JspException { - i = 0; - return EVAL_BODY_BUFFERED; - } - - @Override - public void doInitBody() throws JspException { - pageContext.setAttribute("member", atts[i]); - i++; - } - - @Override - public int doAfterBody() throws JspException { - try { - if (i == 3) { - bodyOut.writeOut(bodyOut.getEnclosingWriter()); - return SKIP_BODY; - } - - pageContext.setAttribute("member", atts[i]); - i++; - return EVAL_BODY_BUFFERED; - } catch (IOException ex) { - throw new JspTagException(ex.toString()); - } - } -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.class deleted file mode 100755 index ead843e8..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.java deleted file mode 100755 index 1ae04928..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.java +++ /dev/null @@ -1,36 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package examples; - -import javax.servlet.jsp.tagext.TagData; -import javax.servlet.jsp.tagext.TagExtraInfo; -import javax.servlet.jsp.tagext.VariableInfo; - -public class FooTagExtraInfo extends TagExtraInfo { - @Override - public VariableInfo[] getVariableInfo(TagData data) { - return new VariableInfo[] - { - new VariableInfo("member", - "String", - true, - VariableInfo.NESTED) - }; - } -} - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/LogTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/LogTag.class deleted file mode 100755 index 7b62ca8f..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/LogTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/LogTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/LogTag.java deleted file mode 100755 index 32584fdc..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/LogTag.java +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package examples; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; - -/** - * Log the contents of the body. Could be used to handle errors etc. - */ -public class LogTag extends ExampleTagBase { - - private static final long serialVersionUID = 1L; - - boolean toBrowser = false; - - public void setToBrowser(String value) { - if (value == null) - toBrowser = false; - else if (value.equalsIgnoreCase("true")) - toBrowser = true; - else - toBrowser = false; - } - - @Override - public int doStartTag() throws JspException { - return EVAL_BODY_BUFFERED; - } - - @Override - public int doAfterBody() throws JspException { - try { - String s = bodyOut.getString(); - System.err.println(s); - if (toBrowser) - bodyOut.writeOut(bodyOut.getEnclosingWriter()); - return SKIP_BODY; - } catch (IOException ex) { - throw new JspTagException(ex.toString()); - } - } -} - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ShowSource.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ShowSource.class deleted file mode 100755 index 2ddb2189..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ShowSource.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ShowSource.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ShowSource.java deleted file mode 100755 index 6aa6965c..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ShowSource.java +++ /dev/null @@ -1,74 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package examples; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Locale; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.TagSupport; - -/** - * Display the sources of the JSP file. - */ -public class ShowSource extends TagSupport { - - private static final long serialVersionUID = 1L; - - String jspFile; - - public void setJspFile(String jspFile) { - this.jspFile = jspFile; - } - - @Override - public int doEndTag() throws JspException { - if ((jspFile.indexOf( ".." ) >= 0) || - (jspFile.toUpperCase(Locale.ENGLISH).indexOf("/WEB-INF/") != 0) || - (jspFile.toUpperCase(Locale.ENGLISH).indexOf("/META-INF/") != 0)) - throw new JspTagException("Invalid JSP file " + jspFile); - - InputStream in - = pageContext.getServletContext().getResourceAsStream(jspFile); - - if (in == null) - throw new JspTagException("Unable to find JSP file: "+jspFile); - - JspWriter out = pageContext.getOut(); - - - try { - out.println(""); - out.println("

");
-            for(int ch = in.read(); ch != -1; ch = in.read())
-                if (ch == '<')
-                    out.print("<");
-                else
-                    out.print((char) ch);
-            out.println("
"); - out.println(""); - } catch (IOException ex) { - throw new JspTagException("IOException: "+ex.toString()); - } - return super.doEndTag(); - } -} - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ValuesTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ValuesTag.class deleted file mode 100755 index cc4d3ff8..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ValuesTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ValuesTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ValuesTag.java deleted file mode 100755 index 20468dca..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/examples/ValuesTag.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package examples; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.TagSupport; - -/** - * Accept and display a value. - */ -public class ValuesTag extends TagSupport { - - private static final long serialVersionUID = 1L; - - // Using "-1" as the default value, - // in the assumption that it won't be used as the value. - // Cannot use null here, because null is an important case - // that should be present in the tests. - private Object objectValue = "-1"; - private String stringValue = "-1"; - private long longValue = -1; - private double doubleValue = -1; - - public void setObject(Object objectValue) { - this.objectValue = objectValue; - } - - public void setString(String stringValue) { - this.stringValue = stringValue; - } - - public void setLong(long longValue) { - this.longValue = longValue; - } - - public void setDouble(double doubleValue) { - this.doubleValue = doubleValue; - } - - @Override - public int doEndTag() throws JspException { - JspWriter out = pageContext.getOut(); - - try { - if (!"-1".equals(objectValue)) { - out.print(objectValue); - } else if (!"-1".equals(stringValue)) { - out.print(stringValue); - } else if (longValue != -1) { - out.print(longValue); - } else if (doubleValue != -1) { - out.print(doubleValue); - } else { - out.print("-1"); - } - } catch (IOException ex) { - throw new JspTagException("IOException: " + ex.toString(), ex); - } - return super.doEndTag(); - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/filters/ExampleFilter.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/filters/ExampleFilter.class deleted file mode 100755 index 3eb09990..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/filters/ExampleFilter.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/filters/ExampleFilter.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/filters/ExampleFilter.java deleted file mode 100755 index a9f5076b..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/filters/ExampleFilter.java +++ /dev/null @@ -1,144 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package filters; - - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - - -/** - * Example filter that can be attached to either an individual servlet - * or to a URL pattern. This filter performs the following functions: - *
    - *
  • Attaches itself as a request attribute, under the attribute name - * defined by the value of the attribute initialization - * parameter.
  • - *
  • Calculates the number of milliseconds required to perform the - * servlet processing required by this request, including any - * subsequently defined filters, and logs the result to the servlet - * context log for this application. - *
- * - * @author Craig McClanahan - * @version $Id: ExampleFilter.java 987920 2010-08-22 15:34:34Z markt $ - */ - -public final class ExampleFilter implements Filter { - - - // ----------------------------------------------------- Instance Variables - - - /** - * The request attribute name under which we store a reference to ourself. - */ - private String attribute = null; - - - /** - * The filter configuration object we are associated with. If this value - * is null, this filter instance is not currently configured. - */ - private FilterConfig filterConfig = null; - - - // --------------------------------------------------------- Public Methods - - - /** - * Take this filter out of service. - */ - @Override - public void destroy() { - - this.attribute = null; - this.filterConfig = null; - - } - - - /** - * Time the processing that is performed by all subsequent filters in the - * current filter stack, including the ultimately invoked servlet. - * - * @param request The servlet request we are processing - * @param response The servlet response we are creating - * @param chain The filter chain we are processing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) - throws IOException, ServletException { - - // Store ourselves as a request attribute (if requested) - if (attribute != null) - request.setAttribute(attribute, this); - - // Time and log the subsequent processing - long startTime = System.currentTimeMillis(); - chain.doFilter(request, response); - long stopTime = System.currentTimeMillis(); - filterConfig.getServletContext().log - (this.toString() + ": " + (stopTime - startTime) + - " milliseconds"); - - } - - - /** - * Place this filter into service. - * - * @param fConfig The filter configuration object - */ - @Override - public void init(FilterConfig fConfig) throws ServletException { - - this.filterConfig = fConfig; - this.attribute = fConfig.getInitParameter("attribute"); - - } - - - /** - * Return a String representation of this object. - */ - @Override - public String toString() { - - if (filterConfig == null) - return ("TimingFilter()"); - StringBuilder sb = new StringBuilder("TimingFilter("); - sb.append(filterConfig); - sb.append(")"); - return (sb.toString()); - - } - - -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.class deleted file mode 100755 index e8173620..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.java deleted file mode 100755 index cc7e8059..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.java +++ /dev/null @@ -1,44 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples; - -public class BookBean { - private String title; - private String author; - private String isbn; - - public BookBean( String title, String author, String isbn ) { - this.title = title; - this.author = author; - this.isbn = isbn; - } - - public String getTitle() { - return this.title; - } - - public String getAuthor() { - return this.author; - } - - public String getIsbn() { - return this.isbn; - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.class deleted file mode 100755 index f6244007..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.java deleted file mode 100755 index 057a581b..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.java +++ /dev/null @@ -1,36 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples; - -public class FooBean { - private String bar; - - public FooBean() { - bar = "Initial value"; - } - - public String getBar() { - return this.bar; - } - - public void setBar(String bar) { - this.bar = bar; - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/ValuesBean.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/ValuesBean.class deleted file mode 100755 index 1ae6315c..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/ValuesBean.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/ValuesBean.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/ValuesBean.java deleted file mode 100755 index b7ff056f..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/ValuesBean.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples; - -/** - * Accept and display a value. - */ -public class ValuesBean { - private String string; - private double doubleValue; - private long longValue; - - public String getStringValue() { - return this.string; - } - - public void setStringValue(String string) { - this.string = string; - } - - public double getDoubleValue() { - return doubleValue; - } - - public void setDoubleValue(double doubleValue) { - this.doubleValue = doubleValue; - } - - public long getLongValue() { - return longValue; - } - - public void setLongValue(long longValue) { - this.longValue = longValue; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.class deleted file mode 100755 index 54f11ef2..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java deleted file mode 100755 index cc15bf31..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package jsp2.examples.el; - -import java.util.Locale; - -/** - * Defines the functions for the jsp2 example tag library. - * - *

Each function is defined as a static method.

- */ -public class Functions { - public static String reverse( String text ) { - return new StringBuilder( text ).reverse().toString(); - } - - public static int numVowels( String text ) { - String vowels = "aeiouAEIOU"; - int result = 0; - for( int i = 0; i < text.length(); i++ ) { - if( vowels.indexOf( text.charAt( i ) ) != -1 ) { - result++; - } - } - return result; - } - - public static String caps( String text ) { - return text.toUpperCase(Locale.ENGLISH); - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.class deleted file mode 100755 index f1ca8cd8..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.java deleted file mode 100755 index 4dd53220..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples.simpletag; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.DynamicAttributes; -import javax.servlet.jsp.tagext.SimpleTagSupport; - -/** - * SimpleTag handler that echoes all its attributes - */ -public class EchoAttributesTag - extends SimpleTagSupport - implements DynamicAttributes -{ - private ArrayList keys = new ArrayList(); - private ArrayList values = new ArrayList(); - - @Override - public void doTag() throws JspException, IOException { - JspWriter out = getJspContext().getOut(); - for( int i = 0; i < keys.size(); i++ ) { - String key = keys.get( i ); - Object value = values.get( i ); - out.println( "
  • " + key + " = " + value + "
  • " ); - } - } - - @Override - public void setDynamicAttribute( String uri, String localName, - Object value ) - throws JspException - { - keys.add( localName ); - values.add( value ); - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.class deleted file mode 100755 index 4b3a6912..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.java deleted file mode 100755 index 75545587..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.java +++ /dev/null @@ -1,46 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples.simpletag; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.SimpleTagSupport; - -import jsp2.examples.BookBean; - -/** - * SimpleTag handler that pretends to search for a book, and stores - * the result in a scoped variable. - */ -public class FindBookSimpleTag extends SimpleTagSupport { - private String var; - - private static final String BOOK_TITLE = "The Lord of the Rings"; - private static final String BOOK_AUTHOR = "J. R. R. Tolkein"; - private static final String BOOK_ISBN = "0618002251"; - - @Override - public void doTag() throws JspException { - BookBean book = new BookBean( BOOK_TITLE, BOOK_AUTHOR, BOOK_ISBN ); - getJspContext().setAttribute( this.var, book ); - } - - public void setVar( String var ) { - this.var = var; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.class deleted file mode 100755 index 21450f55..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.java deleted file mode 100755 index e068b659..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.java +++ /dev/null @@ -1,34 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples.simpletag; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.SimpleTagSupport; - -/** - * SimpleTag handler that prints "Hello, world!" - */ -public class HelloWorldSimpleTag extends SimpleTagSupport { - @Override - public void doTag() throws JspException, IOException { - getJspContext().getOut().write( "Hello, world!" ); - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.class deleted file mode 100755 index 6307468d..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.java deleted file mode 100755 index a9dda90f..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.java +++ /dev/null @@ -1,44 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package jsp2.examples.simpletag; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.SimpleTagSupport; - -/** - * SimpleTag handler that accepts a num attribute and - * invokes its body 'num' times. - */ -public class RepeatSimpleTag extends SimpleTagSupport { - private int num; - - @Override - public void doTag() throws JspException, IOException { - for (int i=0; i
    " + this.label + - "
    " ); - } - - public void setColor( String color ) { - this.color = color; - } - - public void setLabel( String label ) { - this.label = label; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/ContextListener.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/ContextListener.class deleted file mode 100755 index 4c28065e..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/ContextListener.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/ContextListener.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/ContextListener.java deleted file mode 100755 index 9e0ec519..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/ContextListener.java +++ /dev/null @@ -1,140 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package listeners; - - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextAttributeEvent; -import javax.servlet.ServletContextAttributeListener; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - - -/** - * Example listener for context-related application events, which were - * introduced in the 2.3 version of the Servlet API. This listener - * merely documents the occurrence of such events in the application log - * associated with our servlet context. - * - * @author Craig R. McClanahan - * @version $Id: ContextListener.java 982399 2010-08-04 20:52:23Z markt $ - */ - -public final class ContextListener - implements ServletContextAttributeListener, ServletContextListener { - - - // ----------------------------------------------------- Instance Variables - - - /** - * The servlet context with which we are associated. - */ - private ServletContext context = null; - - - // --------------------------------------------------------- Public Methods - - - /** - * Record the fact that a servlet context attribute was added. - * - * @param event The servlet context attribute event - */ - @Override - public void attributeAdded(ServletContextAttributeEvent event) { - - log("attributeAdded('" + event.getName() + "', '" + - event.getValue() + "')"); - - } - - - /** - * Record the fact that a servlet context attribute was removed. - * - * @param event The servlet context attribute event - */ - @Override - public void attributeRemoved(ServletContextAttributeEvent event) { - - log("attributeRemoved('" + event.getName() + "', '" + - event.getValue() + "')"); - - } - - - /** - * Record the fact that a servlet context attribute was replaced. - * - * @param event The servlet context attribute event - */ - @Override - public void attributeReplaced(ServletContextAttributeEvent event) { - - log("attributeReplaced('" + event.getName() + "', '" + - event.getValue() + "')"); - - } - - - /** - * Record the fact that this web application has been destroyed. - * - * @param event The servlet context event - */ - @Override - public void contextDestroyed(ServletContextEvent event) { - - log("contextDestroyed()"); - this.context = null; - - } - - - /** - * Record the fact that this web application has been initialized. - * - * @param event The servlet context event - */ - @Override - public void contextInitialized(ServletContextEvent event) { - - this.context = event.getServletContext(); - log("contextInitialized()"); - - } - - - // -------------------------------------------------------- Private Methods - - - /** - * Log a message to the servlet context application log. - * - * @param message Message to be logged - */ - private void log(String message) { - - if (context != null) - context.log("ContextListener: " + message); - else - System.out.println("ContextListener: " + message); - - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/SessionListener.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/SessionListener.class deleted file mode 100755 index c31d0f21..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/SessionListener.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/SessionListener.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/SessionListener.java deleted file mode 100755 index d45b2f5d..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/listeners/SessionListener.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package listeners; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import javax.servlet.http.HttpSessionAttributeListener; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionEvent; -import javax.servlet.http.HttpSessionListener; - -/** - * Example listener for context-related application events, which were - * introduced in the 2.3 version of the Servlet API. This listener merely - * documents the occurrence of such events in the application log associated - * with our servlet context. - * - * @author Craig R. McClanahan - * @version $Id: SessionListener.java 1200123 2011-11-10 04:03:27Z kkolinko $ - */ - -public final class SessionListener implements ServletContextListener, - HttpSessionAttributeListener, HttpSessionListener { - - // ----------------------------------------------------- Instance Variables - - /** - * The servlet context with which we are associated. - */ - private ServletContext context = null; - - // --------------------------------------------------------- Public Methods - - /** - * Record the fact that a servlet context attribute was added. - * - * @param event - * The session attribute event - */ - @Override - public void attributeAdded(HttpSessionBindingEvent event) { - - log("attributeAdded('" + event.getSession().getId() + "', '" - + event.getName() + "', '" + event.getValue() + "')"); - - } - - /** - * Record the fact that a servlet context attribute was removed. - * - * @param event - * The session attribute event - */ - @Override - public void attributeRemoved(HttpSessionBindingEvent event) { - - log("attributeRemoved('" + event.getSession().getId() + "', '" - + event.getName() + "', '" + event.getValue() + "')"); - - } - - /** - * Record the fact that a servlet context attribute was replaced. - * - * @param event - * The session attribute event - */ - @Override - public void attributeReplaced(HttpSessionBindingEvent event) { - - log("attributeReplaced('" + event.getSession().getId() + "', '" - + event.getName() + "', '" + event.getValue() + "')"); - - } - - /** - * Record the fact that this web application has been destroyed. - * - * @param event - * The servlet context event - */ - @Override - public void contextDestroyed(ServletContextEvent event) { - - log("contextDestroyed()"); - this.context = null; - - } - - /** - * Record the fact that this web application has been initialized. - * - * @param event - * The servlet context event - */ - @Override - public void contextInitialized(ServletContextEvent event) { - - this.context = event.getServletContext(); - log("contextInitialized()"); - - } - - /** - * Record the fact that a session has been created. - * - * @param event - * The session event - */ - @Override - public void sessionCreated(HttpSessionEvent event) { - - log("sessionCreated('" + event.getSession().getId() + "')"); - - } - - /** - * Record the fact that a session has been destroyed. - * - * @param event - * The session event - */ - @Override - public void sessionDestroyed(HttpSessionEvent event) { - - log("sessionDestroyed('" + event.getSession().getId() + "')"); - - } - - // -------------------------------------------------------- Private Methods - - /** - * Log a message to the servlet context application log. - * - * @param message - * Message to be logged - */ - private void log(String message) { - - if (context != null) - context.log("SessionListener: " + message); - else - System.out.println("SessionListener: " + message); - - } - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/num/NumberGuessBean.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/num/NumberGuessBean.class deleted file mode 100755 index e2051e93..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/num/NumberGuessBean.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/num/NumberGuessBean.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/num/NumberGuessBean.java deleted file mode 100755 index a619edb4..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/num/NumberGuessBean.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Originally written by Jason Hunter, http://www.servlets.com. - */ - -package num; - -import java.io.Serializable; -import java.util.Random; - -public class NumberGuessBean implements Serializable { - - private static final long serialVersionUID = 1L; - - private int answer; - private String hint; - private int numGuesses; - private boolean success; - private Random random = new Random(); - - public NumberGuessBean() { - reset(); - } - - public int getAnswer() { - return answer; - } - - public void setAnswer(int answer) { - this.answer = answer; - } - - public String getHint() { - return "" + hint; - } - - public void setHint(String hint) { - this.hint = hint; - } - - public void setNumGuesses(int numGuesses) { - this.numGuesses = numGuesses; - } - - public int getNumGuesses() { - return numGuesses; - } - - public boolean getSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public void setGuess(String guess) { - numGuesses++; - - int g; - try { - g = Integer.parseInt(guess); - } catch (NumberFormatException e) { - g = -1; - } - - if (g == answer) { - success = true; - } else if (g == -1) { - hint = "a number next time"; - } else if (g < answer) { - hint = "higher"; - } else if (g > answer) { - hint = "lower"; - } - } - - public void reset() { - answer = Math.abs(random.nextInt() % 100) + 1; - success = false; - numGuesses = 0; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/sessions/DummyCart.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/sessions/DummyCart.class deleted file mode 100755 index 2ad60c03..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/sessions/DummyCart.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/sessions/DummyCart.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/sessions/DummyCart.java deleted file mode 100755 index 01480a0e..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/sessions/DummyCart.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package sessions; - -import java.util.Vector; - -public class DummyCart { - Vector v = new Vector(); - String submit = null; - String item = null; - - private void addItem(String name) { - v.addElement(name); - } - - private void removeItem(String name) { - v.removeElement(name); - } - - public void setItem(String name) { - item = name; - } - - public void setSubmit(String s) { - submit = s; - } - - public String[] getItems() { - String[] s = new String[v.size()]; - v.copyInto(s); - return s; - } - - public void processRequest() { - // null value for submit - user hit enter instead of clicking on - // "add" or "remove" - if (submit == null || submit.equals("add")) - addItem(item); - else if (submit.equals("remove")) - removeItem(item); - - // reset at the end of the request - reset(); - } - - // reset - private void reset() { - submit = null; - item = null; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/util/HTMLFilter.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/util/HTMLFilter.class deleted file mode 100755 index 952c8bf5..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/util/HTMLFilter.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/util/HTMLFilter.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/util/HTMLFilter.java deleted file mode 100755 index 30326100..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/util/HTMLFilter.java +++ /dev/null @@ -1,69 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package util; - -/** - * HTML filter utility. - * - * @author Craig R. McClanahan - * @author Tim Tye - * @version $Id: HTMLFilter.java 939315 2010-04-29 14:11:01Z kkolinko $ - */ - -public final class HTMLFilter { - - - /** - * Filter the specified message string for characters that are sensitive - * in HTML. This avoids potential attacks caused by including JavaScript - * codes in the request URL that is often reported in error messages. - * - * @param message The message string to be filtered - */ - public static String filter(String message) { - - if (message == null) - return (null); - - char content[] = new char[message.length()]; - message.getChars(0, message.length(), content, 0); - StringBuilder result = new StringBuilder(content.length + 50); - for (int i = 0; i < content.length; i++) { - switch (content[i]) { - case '<': - result.append("<"); - break; - case '>': - result.append(">"); - break; - case '&': - result.append("&"); - break; - case '"': - result.append("""); - break; - default: - result.append(content[i]); - } - } - return (result.toString()); - - } - - -} - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/validators/DebugValidator.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/validators/DebugValidator.class deleted file mode 100755 index fe7b1534..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/validators/DebugValidator.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/validators/DebugValidator.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/validators/DebugValidator.java deleted file mode 100755 index e1cdf586..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/validators/DebugValidator.java +++ /dev/null @@ -1,86 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -package validators; - - -import java.io.IOException; -import java.io.InputStream; - -import javax.servlet.jsp.tagext.PageData; -import javax.servlet.jsp.tagext.TagLibraryValidator; -import javax.servlet.jsp.tagext.ValidationMessage; - - -/** - * Example tag library validator that simply dumps the XML version of each - * page to standard output (which will typically be sent to the file - * $CATALINA_HOME/logs/catalina.out). To utilize it, simply - * include a taglib directive for this tag library at the top - * of your JSP page. - * - * @author Craig McClanahan - * @version $Id: DebugValidator.java 987920 2010-08-22 15:34:34Z markt $ - */ - -public class DebugValidator extends TagLibraryValidator { - - - // ----------------------------------------------------- Instance Variables - - - // --------------------------------------------------------- Public Methods - - - /** - * Validate a JSP page. This will get invoked once per directive in the - * JSP page. This method will return null if the page is - * valid; otherwise the method should return an array of - * ValidationMessage objects. An array of length zero is - * also interpreted as no errors. - * - * @param prefix The value of the prefix argument in this directive - * @param uri The value of the URI argument in this directive - * @param page The page data for this page - */ - @Override - public ValidationMessage[] validate(String prefix, String uri, - PageData page) { - - System.out.println("---------- Prefix=" + prefix + " URI=" + uri + - "----------"); - - InputStream is = page.getInputStream(); - while (true) { - try { - int ch = is.read(); - if (ch < 0) - break; - System.out.print((char) ch); - } catch (IOException e) { - break; - } - } - System.out.println(); - System.out.println("-----------------------------------------------"); - return (null); - - } - - -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet$1.class deleted file mode 100755 index 953ecbd7..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet$ChatMessageInbound.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet$ChatMessageInbound.class deleted file mode 100755 index 9a451c49..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet$ChatMessageInbound.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.class deleted file mode 100755 index 801af94b..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java deleted file mode 100755 index d2631060..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.chat; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; -import java.util.concurrent.atomic.AtomicInteger; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.catalina.websocket.MessageInbound; -import org.apache.catalina.websocket.StreamInbound; -import org.apache.catalina.websocket.WebSocketServlet; -import org.apache.catalina.websocket.WsOutbound; - -import util.HTMLFilter; - -/** - * Example web socket servlet for chat. - */ -public class ChatWebSocketServlet extends WebSocketServlet { - - private static final long serialVersionUID = 1L; - - private static final String GUEST_PREFIX = "Guest"; - - private final AtomicInteger connectionIds = new AtomicInteger(0); - private final Set connections = - new CopyOnWriteArraySet(); - - @Override - protected StreamInbound createWebSocketInbound(String subProtocol, - HttpServletRequest request) { - return new ChatMessageInbound(connectionIds.incrementAndGet()); - } - - private final class ChatMessageInbound extends MessageInbound { - - private final String nickname; - - private ChatMessageInbound(int id) { - this.nickname = GUEST_PREFIX + id; - } - - @Override - protected void onOpen(WsOutbound outbound) { - connections.add(this); - String message = String.format("* %s %s", - nickname, "has joined."); - broadcast(message); - } - - @Override - protected void onClose(int status) { - connections.remove(this); - String message = String.format("* %s %s", - nickname, "has disconnected."); - broadcast(message); - } - - @Override - protected void onBinaryMessage(ByteBuffer message) throws IOException { - throw new UnsupportedOperationException( - "Binary message not supported."); - } - - @Override - protected void onTextMessage(CharBuffer message) throws IOException { - // Never trust the client - String filteredMessage = String.format("%s: %s", - nickname, HTMLFilter.filter(message.toString())); - broadcast(filteredMessage); - } - - private void broadcast(String message) { - for (ChatMessageInbound connection : connections) { - try { - CharBuffer buffer = CharBuffer.wrap(message); - connection.getWsOutbound().writeTextMessage(buffer); - } catch (IOException ignore) { - // Ignore - } - } - } - } -} \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage$EchoMessageInbound.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage$EchoMessageInbound.class deleted file mode 100755 index d0893ef6..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage$EchoMessageInbound.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.class deleted file mode 100755 index a5e630cb..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java deleted file mode 100755 index d1fe0843..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.echo; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; - -import org.apache.catalina.websocket.MessageInbound; -import org.apache.catalina.websocket.StreamInbound; -import org.apache.catalina.websocket.WebSocketServlet; - - -public class EchoMessage extends WebSocketServlet { - - private static final long serialVersionUID = 1L; - private volatile int byteBufSize; - private volatile int charBufSize; - - @Override - public void init() throws ServletException { - super.init(); - byteBufSize = getInitParameterIntValue("byteBufferMaxSize", 2097152); - charBufSize = getInitParameterIntValue("charBufferMaxSize", 2097152); - } - - public int getInitParameterIntValue(String name, int defaultValue) { - String val = this.getInitParameter(name); - int result; - if(null != val) { - try { - result = Integer.parseInt(val); - }catch (Exception x) { - result = defaultValue; - } - } else { - result = defaultValue; - } - - return result; - } - - - - @Override - protected StreamInbound createWebSocketInbound(String subProtocol, - HttpServletRequest request) { - return new EchoMessageInbound(byteBufSize,charBufSize); - } - - private static final class EchoMessageInbound extends MessageInbound { - - public EchoMessageInbound(int byteBufferMaxSize, int charBufferMaxSize) { - super(); - setByteBufferMaxSize(byteBufferMaxSize); - setCharBufferMaxSize(charBufferMaxSize); - } - - @Override - protected void onBinaryMessage(ByteBuffer message) throws IOException { - getWsOutbound().writeBinaryMessage(message); - } - - @Override - protected void onTextMessage(CharBuffer message) throws IOException { - getWsOutbound().writeTextMessage(message); - } - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream$1.class deleted file mode 100755 index c266a11d..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream$EchoStreamInbound.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream$EchoStreamInbound.class deleted file mode 100755 index 556fa40a..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream$EchoStreamInbound.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.class deleted file mode 100755 index 58d2ae91..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java deleted file mode 100755 index 693424e0..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.echo; - -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.catalina.websocket.StreamInbound; -import org.apache.catalina.websocket.WebSocketServlet; -import org.apache.catalina.websocket.WsOutbound; - - -public class EchoStream extends WebSocketServlet { - - private static final long serialVersionUID = 1L; - - @Override - protected StreamInbound createWebSocketInbound(String subProtocol, - HttpServletRequest request) { - return new EchoStreamInbound(); - } - - private static final class EchoStreamInbound extends StreamInbound { - - @Override - protected void onBinaryData(InputStream is) throws IOException { - // Simply echo the data to back to the client. - WsOutbound outbound = getWsOutbound(); - - int i = is.read(); - while (i != -1) { - outbound.writeBinaryData(i); - i = is.read(); - } - - outbound.flush(); - } - - @Override - protected void onTextData(Reader r) throws IOException { - // Simply echo the data to back to the client. - WsOutbound outbound = getWsOutbound(); - - int c = r.read(); - while (c != -1) { - outbound.writeTextData((char) c); - c = r.read(); - } - - outbound.flush(); - } - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Direction.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Direction.class deleted file mode 100755 index b6f44947..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Direction.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Direction.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Direction.java deleted file mode 100755 index b36c7a2b..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Direction.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.snake; - -public enum Direction { - NONE, NORTH, SOUTH, EAST, WEST -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location$1.class deleted file mode 100755 index 2b421866..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location.class deleted file mode 100755 index e9db6386..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location.java deleted file mode 100755 index 3e21bdf7..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Location.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.snake; - -public class Location { - - public int x; - public int y; - - public Location(int x, int y) { - this.x = x; - this.y = y; - } - - public Location getAdjacentLocation(Direction direction) { - switch (direction) { - case NORTH: - return new Location(x, y - SnakeWebSocketServlet.GRID_SIZE); - case SOUTH: - return new Location(x, y + SnakeWebSocketServlet.GRID_SIZE); - case EAST: - return new Location(x + SnakeWebSocketServlet.GRID_SIZE, y); - case WEST: - return new Location(x - SnakeWebSocketServlet.GRID_SIZE, y); - case NONE: - // fall through - default: - return this; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Location location = (Location) o; - - if (x != location.x) return false; - if (y != location.y) return false; - - return true; - } - - @Override - public int hashCode() { - int result = x; - result = 31 * result + y; - return result; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Snake.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Snake.class deleted file mode 100755 index bfd7af00..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Snake.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java deleted file mode 100755 index bce4deee..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/Snake.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.snake; - -import java.io.IOException; -import java.nio.CharBuffer; -import java.util.ArrayDeque; -import java.util.Collection; -import java.util.Deque; - -import org.apache.catalina.websocket.WsOutbound; - -public class Snake { - - private static final int DEFAULT_LENGTH = 5; - - private final int id; - private final WsOutbound outbound; - - private Direction direction; - private int length = DEFAULT_LENGTH; - private Location head; - private Deque tail = new ArrayDeque(); - private String hexColor; - - public Snake(int id, WsOutbound outbound) { - this.id = id; - this.outbound = outbound; - this.hexColor = SnakeWebSocketServlet.getRandomHexColor(); - resetState(); - } - - private void resetState() { - this.direction = Direction.NONE; - this.head = SnakeWebSocketServlet.getRandomLocation(); - this.tail.clear(); - this.length = DEFAULT_LENGTH; - } - - private synchronized void kill() { - resetState(); - try { - CharBuffer response = CharBuffer.wrap("{'type': 'dead'}"); - outbound.writeTextMessage(response); - } catch (IOException ioe) { - // Ignore - } - } - - private synchronized void reward() { - length++; - try { - CharBuffer response = CharBuffer.wrap("{'type': 'kill'}"); - outbound.writeTextMessage(response); - } catch (IOException ioe) { - // Ignore - } - } - - public synchronized void update(Collection snakes) { - Location nextLocation = head.getAdjacentLocation(direction); - if (nextLocation.x >= SnakeWebSocketServlet.PLAYFIELD_WIDTH) { - nextLocation.x = 0; - } - if (nextLocation.y >= SnakeWebSocketServlet.PLAYFIELD_HEIGHT) { - nextLocation.y = 0; - } - if (nextLocation.x < 0) { - nextLocation.x = SnakeWebSocketServlet.PLAYFIELD_WIDTH; - } - if (nextLocation.y < 0) { - nextLocation.y = SnakeWebSocketServlet.PLAYFIELD_HEIGHT; - } - if (direction != Direction.NONE) { - tail.addFirst(head); - if (tail.size() > length) { - tail.removeLast(); - } - head = nextLocation; - } - - handleCollisions(snakes); - } - - private void handleCollisions(Collection snakes) { - for (Snake snake : snakes) { - boolean headCollision = id != snake.id && snake.getHead().equals(head); - boolean tailCollision = snake.getTail().contains(head); - if (headCollision || tailCollision) { - kill(); - if (id != snake.id) { - snake.reward(); - } - } - } - } - - public synchronized Location getHead() { - return head; - } - - public synchronized Collection getTail() { - return tail; - } - - public synchronized void setDirection(Direction direction) { - this.direction = direction; - } - - public synchronized String getLocationsJson() { - StringBuilder sb = new StringBuilder(); - sb.append(String.format("{x: %d, y: %d}", - Integer.valueOf(head.x), Integer.valueOf(head.y))); - for (Location location : tail) { - sb.append(','); - sb.append(String.format("{x: %d, y: %d}", - Integer.valueOf(location.x), Integer.valueOf(location.y))); - } - return String.format("{'id':%d,'body':[%s]}", - Integer.valueOf(id), sb.toString()); - } - - public int getId() { - return id; - } - - public String getHexColor() { - return hexColor; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet$1.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet$1.class deleted file mode 100755 index 1c37fbb3..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet$1.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet$SnakeMessageInbound.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet$SnakeMessageInbound.class deleted file mode 100755 index 5b634465..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet$SnakeMessageInbound.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.class b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.class deleted file mode 100755 index 51572608..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java b/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java deleted file mode 100755 index d66bbe37..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package websocket.snake; - -import java.awt.Color; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; - -import org.apache.catalina.websocket.MessageInbound; -import org.apache.catalina.websocket.StreamInbound; -import org.apache.catalina.websocket.WebSocketServlet; -import org.apache.catalina.websocket.WsOutbound; -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; - -/** - * Example web socket servlet for simple multiplayer snake. - */ -public class SnakeWebSocketServlet extends WebSocketServlet { - - private static final long serialVersionUID = 1L; - - private static final Log log = - LogFactory.getLog(SnakeWebSocketServlet.class); - - public static final int PLAYFIELD_WIDTH = 640; - public static final int PLAYFIELD_HEIGHT = 480; - public static final int GRID_SIZE = 10; - - private static final long TICK_DELAY = 100; - - private static final Random random = new Random(); - - private final Timer gameTimer = - new Timer(SnakeWebSocketServlet.class.getSimpleName() + " Timer"); - - private final AtomicInteger connectionIds = new AtomicInteger(0); - private final ConcurrentHashMap snakes = - new ConcurrentHashMap(); - private final ConcurrentHashMap connections = - new ConcurrentHashMap(); - - @Override - public void init() throws ServletException { - super.init(); - gameTimer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - try { - tick(); - } catch (RuntimeException e) { - log.error("Caught to prevent timer from shutting down", e); - } - } - }, TICK_DELAY, TICK_DELAY); - } - - private void tick() { - StringBuilder sb = new StringBuilder(); - for (Iterator iterator = getSnakes().iterator(); - iterator.hasNext();) { - Snake snake = iterator.next(); - snake.update(getSnakes()); - sb.append(snake.getLocationsJson()); - if (iterator.hasNext()) { - sb.append(','); - } - } - broadcast(String.format("{'type': 'update', 'data' : [%s]}", - sb.toString())); - } - - private void broadcast(String message) { - for (SnakeMessageInbound connection : getConnections()) { - try { - CharBuffer buffer = CharBuffer.wrap(message); - connection.getWsOutbound().writeTextMessage(buffer); - } catch (IOException ignore) { - // Ignore - } - } - } - - private Collection getConnections() { - return Collections.unmodifiableCollection(connections.values()); - } - - private Collection getSnakes() { - return Collections.unmodifiableCollection(snakes.values()); - } - - public static String getRandomHexColor() { - float hue = random.nextFloat(); - // sat between 0.1 and 0.3 - float saturation = (random.nextInt(2000) + 1000) / 10000f; - float luminance = 0.9f; - Color color = Color.getHSBColor(hue, saturation, luminance); - return '#' + Integer.toHexString( - (color.getRGB() & 0xffffff) | 0x1000000).substring(1); - } - - public static Location getRandomLocation() { - int x = roundByGridSize( - random.nextInt(SnakeWebSocketServlet.PLAYFIELD_WIDTH)); - int y = roundByGridSize( - random.nextInt(SnakeWebSocketServlet.PLAYFIELD_HEIGHT)); - return new Location(x, y); - } - - private static int roundByGridSize(int value) { - value = value + (SnakeWebSocketServlet.GRID_SIZE / 2); - value = value / SnakeWebSocketServlet.GRID_SIZE; - value = value * SnakeWebSocketServlet.GRID_SIZE; - return value; - } - - @Override - public void destroy() { - super.destroy(); - if (gameTimer != null) { - gameTimer.cancel(); - } - } - - @Override - protected StreamInbound createWebSocketInbound(String subProtocol, - HttpServletRequest request) { - return new SnakeMessageInbound(connectionIds.incrementAndGet()); - } - - private final class SnakeMessageInbound extends MessageInbound { - - private final int id; - private Snake snake; - - private SnakeMessageInbound(int id) { - this.id = id; - } - - @Override - protected void onOpen(WsOutbound outbound) { - this.snake = new Snake(id, outbound); - snakes.put(Integer.valueOf(id), snake); - connections.put(Integer.valueOf(id), this); - StringBuilder sb = new StringBuilder(); - for (Iterator iterator = getSnakes().iterator(); - iterator.hasNext();) { - Snake snake = iterator.next(); - sb.append(String.format("{id: %d, color: '%s'}", - Integer.valueOf(snake.getId()), snake.getHexColor())); - if (iterator.hasNext()) { - sb.append(','); - } - } - broadcast(String.format("{'type': 'join','data':[%s]}", - sb.toString())); - } - - @Override - protected void onClose(int status) { - connections.remove(Integer.valueOf(id)); - snakes.remove(Integer.valueOf(id)); - broadcast(String.format("{'type': 'leave', 'id': %d}", - Integer.valueOf(id))); - } - - @Override - protected void onBinaryMessage(ByteBuffer message) throws IOException { - throw new UnsupportedOperationException( - "Binary message not supported."); - } - - @Override - protected void onTextMessage(CharBuffer charBuffer) throws IOException { - String message = charBuffer.toString(); - if ("west".equals(message)) { - snake.setDirection(Direction.WEST); - } else if ("north".equals(message)) { - snake.setDirection(Direction.NORTH); - } else if ("east".equals(message)) { - snake.setDirection(Direction.EAST); - } else if ("south".equals(message)) { - snake.setDirection(Direction.SOUTH); - } - } - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/applet/Clock2.java b/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/applet/Clock2.java deleted file mode 100755 index ccc96d1c..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/applet/Clock2.java +++ /dev/null @@ -1,224 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import java.applet.Applet; -import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -/** - * Time! - * - * @author Rachel Gollub - */ - -public class Clock2 extends Applet implements Runnable { - private static final long serialVersionUID = 1L; - Thread timer; // The thread that displays clock - int lastxs, lastys, lastxm, - lastym, lastxh, lastyh; // Dimensions used to draw hands - SimpleDateFormat formatter; // Formats the date displayed - String lastdate; // String to hold date displayed - Font clockFaceFont; // Font for number display on clock - Date currentDate; // Used to get date to display - Color handColor; // Color of main hands and dial - Color numberColor; // Color of second hand and numbers - - @Override - public void init() { - lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0; - formatter = new SimpleDateFormat ("EEE MMM dd hh:mm:ss yyyy", Locale.getDefault()); - currentDate = new Date(); - lastdate = formatter.format(currentDate); - clockFaceFont = new Font("Serif", Font.PLAIN, 14); - handColor = Color.blue; - numberColor = Color.darkGray; - - try { - setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16))); - } catch (Exception E) { } - try { - handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16)); - } catch (Exception E) { } - try { - numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16)); - } catch (Exception E) { } - resize(300,300); // Set clock window size - } - - // Plotpoints allows calculation to only cover 45 degrees of the circle, - // and then mirror - public void plotpoints(int x0, int y0, int x, int y, Graphics g) { - g.drawLine(x0+x,y0+y,x0+x,y0+y); - g.drawLine(x0+y,y0+x,x0+y,y0+x); - g.drawLine(x0+y,y0-x,x0+y,y0-x); - g.drawLine(x0+x,y0-y,x0+x,y0-y); - g.drawLine(x0-x,y0-y,x0-x,y0-y); - g.drawLine(x0-y,y0-x,x0-y,y0-x); - g.drawLine(x0-y,y0+x,x0-y,y0+x); - g.drawLine(x0-x,y0+y,x0-x,y0+y); - } - - // Circle is just Bresenham's algorithm for a scan converted circle - public void circle(int x0, int y0, int r, Graphics g) { - int x,y; - float d; - x=0; - y=r; - d=5/4-r; - plotpoints(x0,y0,x,y,g); - - while (y>x){ - if (d<0) { - d=d+2*x+3; - x++; - } - else { - d=d+2*(x-y)+5; - x++; - y--; - } - plotpoints(x0,y0,x,y,g); - } - } - - // Paint is the main part of the program - @Override - public void paint(Graphics g) { - int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter; - String today; - - currentDate = new Date(); - SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault()); - try { - s = Integer.parseInt(formatter.format(currentDate)); - } catch (NumberFormatException n) { - s = 0; - } - formatter.applyPattern("m"); - try { - m = Integer.parseInt(formatter.format(currentDate)); - } catch (NumberFormatException n) { - m = 10; - } - formatter.applyPattern("h"); - try { - h = Integer.parseInt(formatter.format(currentDate)); - } catch (NumberFormatException n) { - h = 10; - } - formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy"); - today = formatter.format(currentDate); - xcenter=80; - ycenter=55; - - // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00) - // x = r(cos a) + xcenter, y = r(sin a) + ycenter - - xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter); - ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter); - xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter); - ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter); - xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + xcenter); - yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + ycenter); - - // Draw the circle and numbers - - g.setFont(clockFaceFont); - g.setColor(handColor); - circle(xcenter,ycenter,50,g); - g.setColor(numberColor); - g.drawString("9",xcenter-45,ycenter+3); - g.drawString("3",xcenter+40,ycenter+3); - g.drawString("12",xcenter-5,ycenter-37); - g.drawString("6",xcenter-3,ycenter+45); - - // Erase if necessary, and redraw - - g.setColor(getBackground()); - if (xs != lastxs || ys != lastys) { - g.drawLine(xcenter, ycenter, lastxs, lastys); - g.drawString(lastdate, 5, 125); - } - if (xm != lastxm || ym != lastym) { - g.drawLine(xcenter, ycenter-1, lastxm, lastym); - g.drawLine(xcenter-1, ycenter, lastxm, lastym); } - if (xh != lastxh || yh != lastyh) { - g.drawLine(xcenter, ycenter-1, lastxh, lastyh); - g.drawLine(xcenter-1, ycenter, lastxh, lastyh); } - g.setColor(numberColor); - g.drawString("", 5, 125); - g.drawString(today, 5, 125); - g.drawLine(xcenter, ycenter, xs, ys); - g.setColor(handColor); - g.drawLine(xcenter, ycenter-1, xm, ym); - g.drawLine(xcenter-1, ycenter, xm, ym); - g.drawLine(xcenter, ycenter-1, xh, yh); - g.drawLine(xcenter-1, ycenter, xh, yh); - lastxs=xs; lastys=ys; - lastxm=xm; lastym=ym; - lastxh=xh; lastyh=yh; - lastdate = today; - currentDate=null; - } - - @Override - public void start() { - timer = new Thread(this); - timer.start(); - } - - @Override - public void stop() { - timer = null; - } - - @Override - public void run() { - Thread me = Thread.currentThread(); - while (timer == me) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - } - repaint(); - } - } - - @Override - public void update(Graphics g) { - paint(g); - } - - @Override - public String getAppletInfo() { - return "Title: A Clock \nAuthor: Rachel Gollub, 1995 \nAn analog clock."; - } - - @Override - public String[][] getParameterInfo() { - String[][] info = { - {"bgcolor", "hexadecimal RGB number", "The background color. Default is the color of your browser."}, - {"fgcolor1", "hexadecimal RGB number", "The color of the hands and dial. Default is blue."}, - {"fgcolor2", "hexadecimal RGB number", "The color of the seconds hand and numbers. Default is dark gray."} - }; - return info; - } -} diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/debug-taglib.tld b/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/debug-taglib.tld deleted file mode 100755 index d56027c4..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/debug-taglib.tld +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - 1.0 - 1.2 - debug - http://tomcat.apache.org/debug-taglib - - This tag library defines no tags. Instead, its purpose is encapsulated - in the TagLibraryValidator implementation that simply outputs the XML - version of a JSP page to standard output, whenever this tag library is - referenced in a "taglib" directive in a JSP page. - - - validators.DebugValidator - - - - - log - examples.LogTag - TAGDEPENDENT - - Perform a server side action; Log the message. - - - toBrowser - false - - - - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/example-taglib.tld b/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/example-taglib.tld deleted file mode 100755 index 906ba009..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp/example-taglib.tld +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - 1.0 - 1.2 - simple - http://tomcat.apache.org/example-taglib - - A simple tab library for the examples - - - - ShowSource - examples.ShowSource - Display JSP sources - - jspFile - true - true - - - - - - - foo - examples.FooTag - examples.FooTagExtraInfo - JSP - - Perform a server side action; uses 3 mandatory attributes - - - - att1 - true - - - att2 - true - - - att3 - true - - - - - - - log - examples.LogTag - TAGDEPENDENT - - Perform a server side action; Log the message. - - - toBrowser - false - - - - - - - values - examples.ValuesTag - empty - - Accept and return values of different types. This tag is used - to illustrate type coercions. - - - object - false - true - java.lang.Object - - - string - false - true - java.lang.String - - - long - false - true - long - - - double - false - true - double - - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp2/jsp2-example-taglib.tld b/bundledApps/tomcat/webapps/examples/WEB-INF/jsp2/jsp2-example-taglib.tld deleted file mode 100755 index d3a2563b..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/jsp2/jsp2-example-taglib.tld +++ /dev/null @@ -1,124 +0,0 @@ - - - - - A tag library exercising SimpleTag handlers. - 1.0 - SimpleTagLibrary - http://tomcat.apache.org/jsp2-example-taglib - - Outputs Hello, World - helloWorld - jsp2.examples.simpletag.HelloWorldSimpleTag - empty - - - Repeats the body of the tag 'num' times - repeat - jsp2.examples.simpletag.RepeatSimpleTag - scriptless - - Current invocation count (1 to num) - count - - - num - true - true - - - - Populates the page context with a BookBean - findBook - jsp2.examples.simpletag.FindBookSimpleTag - empty - - var - true - true - - - - - Takes 3 fragments and invokes them in a random order - - shuffle - jsp2.examples.simpletag.ShuffleSimpleTag - empty - - fragment1 - true - true - - - fragment2 - true - true - - - fragment3 - true - true - - - - Outputs a colored tile - tile - jsp2.examples.simpletag.TileSimpleTag - empty - - color - true - - - label - true - - - - - Tag that echoes all its attributes and body content - - echoAttributes - jsp2.examples.simpletag.EchoAttributesTag - empty - true - - - Reverses the characters in the given String - reverse - jsp2.examples.el.Functions - java.lang.String reverse( java.lang.String ) - - - Counts the number of vowels (a,e,i,o,u) in the given String - countVowels - jsp2.examples.el.Functions - java.lang.String numVowels( java.lang.String ) - - - Converts the string to all caps - caps - jsp2.examples.el.Functions - java.lang.String caps( java.lang.String ) - - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/lib/jstl.jar b/bundledApps/tomcat/webapps/examples/WEB-INF/lib/jstl.jar deleted file mode 100755 index a02abecc..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/lib/jstl.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/lib/standard.jar b/bundledApps/tomcat/webapps/examples/WEB-INF/lib/standard.jar deleted file mode 100755 index bc528acb..00000000 Binary files a/bundledApps/tomcat/webapps/examples/WEB-INF/lib/standard.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/displayProducts.tag b/bundledApps/tomcat/webapps/examples/WEB-INF/tags/displayProducts.tag deleted file mode 100755 index b2702a39..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/displayProducts.tag +++ /dev/null @@ -1,55 +0,0 @@ - -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ attribute name="normalPrice" fragment="true" %> -<%@ attribute name="onSale" fragment="true" %> -<%@ variable name-given="name" %> -<%@ variable name-given="price" %> -<%@ variable name-given="origPrice" %> -<%@ variable name-given="salePrice" %> - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/helloWorld.tag b/bundledApps/tomcat/webapps/examples/WEB-INF/tags/helloWorld.tag deleted file mode 100755 index f52e8233..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/helloWorld.tag +++ /dev/null @@ -1,17 +0,0 @@ - -Hello, world! diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/panel.tag b/bundledApps/tomcat/webapps/examples/WEB-INF/tags/panel.tag deleted file mode 100755 index 90aaf916..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/panel.tag +++ /dev/null @@ -1,29 +0,0 @@ - -<%@ attribute name="color" %> -<%@ attribute name="bgcolor" %> -<%@ attribute name="title" %> - - - - - - - -
    ${title}
    - -
    diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/xhtmlbasic.tag b/bundledApps/tomcat/webapps/examples/WEB-INF/tags/xhtmlbasic.tag deleted file mode 100755 index d8af5e59..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/tags/xhtmlbasic.tag +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/bundledApps/tomcat/webapps/examples/WEB-INF/web.xml b/bundledApps/tomcat/webapps/examples/WEB-INF/web.xml deleted file mode 100755 index d84d1ce7..00000000 --- a/bundledApps/tomcat/webapps/examples/WEB-INF/web.xml +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - Servlet and JSP Examples. - - Servlet and JSP Examples - - - - - Timing filter - filters.ExampleFilter - - attribute - filters.ExampleFilter - - - - - Request Dumper Filter - org.apache.catalina.filters.RequestDumperFilter - - - - - Set Character Encoding - org.apache.catalina.filters.SetCharacterEncodingFilter - - encoding - EUC_JP - - - ignore - true - - - - - Compression Filter - compressionFilters.CompressionFilter - - compressionThreshold - 128 - - - compressionBuffer - 8192 - - - compressionMimeTypes - text/html,text/plain,text/xml - - - debug - 0 - - - - - - - - - - - - - - - - listeners.ContextListener - - - listeners.SessionListener - - - - - - ServletToJsp - ServletToJsp - - - ChatServlet - chat.ChatServlet - - - CompressionFilterTestServlet - compressionFilters.CompressionFilterTestServlet - - - HelloWorldExample - HelloWorldExample - - - RequestInfoExample - RequestInfoExample - - - RequestHeaderExample - RequestHeaderExample - - - RequestParamExample - RequestParamExample - - - CookieExample - CookieExample - - - SessionExample - SessionExample - - - - ChatServlet - /jsp/chat/chat - - - CompressionFilterTestServlet - /CompressionTest - - - HelloWorldExample - /servlets/servlet/HelloWorldExample - - - RequestInfoExample - /servlets/servlet/RequestInfoExample/* - - - RequestHeaderExample - /servlets/servlet/RequestHeaderExample - - - RequestParamExample - /servlets/servlet/RequestParamExample - - - CookieExample - /servlets/servlet/CookieExample - - - SessionExample - /servlets/servlet/SessionExample - - - ServletToJsp - /servletToJsp - - - - - - http://tomcat.apache.org/debug-taglib - - - /WEB-INF/jsp/debug-taglib.tld - - - - - - http://tomcat.apache.org/example-taglib - - - /WEB-INF/jsp/example-taglib.tld - - - - - - http://tomcat.apache.org/jsp2-example-taglib - - - /WEB-INF/jsp2/jsp2-example-taglib.tld - - - - - - Special property group for JSP Configuration JSP example. - - JSPConfiguration - /jsp/jsp2/misc/config.jsp - true - ISO-8859-1 - true - /jsp/jsp2/misc/prelude.jspf - /jsp/jsp2/misc/coda.jspf - - - - - Example Security Constraint - - Protected Area - - /jsp/security/protected/* - - DELETE - GET - POST - PUT - - - - tomcat - role1 - - - - - - FORM - Example Form-Based Authentication Area - - /jsp/security/protected/login.jsp - /jsp/security/protected/error.jsp - - - - - - role1 - - - tomcat - - - - - - minExemptions - java.lang.Integer - 1 - - - foo/name1 - java.lang.String - value1 - - - foo/bar/name2 - java.lang.Boolean - true - - - name3 - java.lang.Integer - 1 - - - foo/name4 - java.lang.Integer - 10 - - - - - async0 - async.Async0 - true - - - async0 - /async/async0 - - - async1 - async.Async1 - true - - - async1 - /async/async1 - - - async2 - async.Async2 - true - - - async2 - /async/async2 - - - async3 - async.Async3 - true - - - async3 - /async/async3 - - - stock - async.AsyncStockServlet - true - - - stock - /async/stockticker - - - - - wsEchoStream - websocket.echo.EchoStream - - - wsEchoStream - /websocket/echoStream - - - wsEchoMessage - websocket.echo.EchoMessage - - - - - wsEchoMessage - /websocket/echoMessage - - - wsChat - websocket.chat.ChatWebSocketServlet - - - wsChat - /websocket/chat - - - wsSnake - websocket.snake.SnakeWebSocketServlet - - - wsSnake - /websocket/snake - - - diff --git a/bundledApps/tomcat/webapps/examples/index.html b/bundledApps/tomcat/webapps/examples/index.html deleted file mode 100755 index 96e5a20d..00000000 --- a/bundledApps/tomcat/webapps/examples/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - -Apache Tomcat Examples - - - -

    -

    Apache Tomcat Examples

    -

    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/async/async1.jsp b/bundledApps/tomcat/webapps/examples/jsp/async/async1.jsp deleted file mode 100755 index fb6fa2de..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/async/async1.jsp +++ /dev/null @@ -1,26 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page session="false"%> -Output from async1.jsp -Type is <%=request.getDispatcherType()%> -<% -System.out.println("Inside Async 1"); - if (request.isAsyncStarted()) { - request.getAsyncContext().complete(); - } -%> -Completed async request at <%=new java.sql.Date(System.currentTimeMillis())%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/async/async1.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/async/async1.jsp.html deleted file mode 100755 index 4c460b87..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/async/async1.jsp.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@page session="false"%>
    -Output from async1.jsp
    -Type is <%=request.getDispatcherType()%>
    -<%
    -System.out.println("Inside Async 1");
    -  if (request.isAsyncStarted()) {
    -    request.getAsyncContext().complete();
    -  }
    -%>
    -Completed async request at <%=new java.sql.Date(System.currentTimeMillis())%>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/async/async3.jsp b/bundledApps/tomcat/webapps/examples/jsp/async/async3.jsp deleted file mode 100755 index c16d5d77..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/async/async3.jsp +++ /dev/null @@ -1,20 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page session="false"%> -Output from async3.jsp -Type is <%=request.getDispatcherType()%> -Completed async 3 request at <%=new java.sql.Date(System.currentTimeMillis())%> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/async/async3.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/async/async3.jsp.html deleted file mode 100755 index ad77ae94..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/async/async3.jsp.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@page session="false"%>
    -Output from async3.jsp
    -Type is <%=request.getDispatcherType()%>
    -Completed async 3 request at <%=new java.sql.Date(System.currentTimeMillis())%>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/async/index.jsp b/bundledApps/tomcat/webapps/examples/jsp/async/index.jsp deleted file mode 100755 index 28af9acd..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/async/index.jsp +++ /dev/null @@ -1,69 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page session="false"%> - -
    -Use cases:
    -
    -1. Simple dispatch
    - - servlet does startAsync()
    - - background thread calls ctx.dispatch()
    -   "> Async 0 
    -
    -2. Simple dispatch
    - - servlet does startAsync()
    - - background thread calls dispatch(/path/to/jsp)
    -   "> Async 1 
    -
    -3. Simple dispatch
    - - servlet does startAsync()
    - - background thread calls writes and calls complete()
    -   "> Async 2 
    -
    -4. Simple dispatch
    - - servlet does a startAsync()
    - - servlet calls dispatch(/path/to/jsp)
    - - servlet calls complete()
    -   "> Async 3 
    -
    -3. Timeout s1
    - - servlet does a startAsync()
    - - servlet does a setAsyncTimeout
    - - returns - waits for timeout to happen should return error page
    -
    -4. Timeout s2
    - - servlet does a startAsync()
    - - servlet does a setAsyncTimeout
    - - servlet does a addAsyncListener
    - - returns - waits for timeout to happen and listener invoked
    -
    -5. Dispatch to asyncSupported=false servlet
    - - servlet1 does a startAsync()
    - - servlet1 dispatches to dispatch(/servlet2)
    - - the container calls complete() after servlet2 is complete
    - - TODO
    -
    -6. Chained dispatch
    - - servlet1 does a startAsync
    - - servlet1 does a dispatch to servlet2 (asyncsupported=true)
    - - servlet2 does a dispatch to servlet3 (asyncsupported=true)
    - - servlet3 does a dispatch to servlet4 (asyncsupported=false)
    -
    -
    -7. Stock ticker
    -   "> StockTicker 
    -
    \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/async/index.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/async/index.jsp.html deleted file mode 100755 index 6f124b56..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/async/index.jsp.html +++ /dev/null @@ -1,71 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@page session="false"%>
    -
    -<pre>
    -Use cases:
    -
    -1. Simple dispatch
    - - servlet does startAsync()
    - - background thread calls ctx.dispatch()
    -   <a href="<%=response.encodeURL("/examples/async/async0")%>"> Async 0 </a>
    -
    -2. Simple dispatch
    - - servlet does startAsync()
    - - background thread calls dispatch(/path/to/jsp)
    -   <a href="<%=response.encodeURL("/examples/async/async1")%>"> Async 1 </a>
    -
    -3. Simple dispatch
    - - servlet does startAsync()
    - - background thread calls writes and calls complete()
    -   <a href="<%=response.encodeURL("/examples/async/async2")%>"> Async 2 </a>
    -
    -4. Simple dispatch
    - - servlet does a startAsync()
    - - servlet calls dispatch(/path/to/jsp)
    - - servlet calls complete()
    -   <a href="<%=response.encodeURL("/examples/async/async3")%>"> Async 3 </a>
    -
    -3. Timeout s1
    - - servlet does a startAsync()
    - - servlet does a setAsyncTimeout
    - - returns - waits for timeout to happen should return error page
    -
    -4. Timeout s2
    - - servlet does a startAsync()
    - - servlet does a setAsyncTimeout
    - - servlet does a addAsyncListener
    - - returns - waits for timeout to happen and listener invoked
    -
    -5. Dispatch to asyncSupported=false servlet
    - - servlet1 does a startAsync()
    - - servlet1 dispatches to dispatch(/servlet2)
    - - the container calls complete() after servlet2 is complete
    - - TODO
    -
    -6. Chained dispatch
    - - servlet1 does a startAsync
    - - servlet1 does a dispatch to servlet2 (asyncsupported=true)
    - - servlet2 does a dispatch to servlet3 (asyncsupported=true)
    - - servlet3 does a dispatch to servlet4 (asyncsupported=false)
    -
    -
    -7. Stock ticker
    -   <a href="<%=response.encodeURL("/examples/async/stockticker")%>"> StockTicker </a>
    -</pre>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/Entries.java.html b/bundledApps/tomcat/webapps/examples/jsp/cal/Entries.java.html deleted file mode 100755 index 289363bb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/Entries.java.html +++ /dev/null @@ -1,62 +0,0 @@ -
    -/*
    - * Licensed to the Apache Software Foundation (ASF) under one or more
    - * contributor license agreements.  See the NOTICE file distributed with
    - * this work for additional information regarding copyright ownership.
    - * The ASF licenses this file to You under the Apache License, Version 2.0
    - * (the "License"); you may not use this file except in compliance with
    - * the License.  You may obtain a copy of the License at
    - *
    - *     http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - */
    -package cal;
    -
    -import java.util.Hashtable;
    -
    -import javax.servlet.http.HttpServletRequest;
    -
    -public class Entries {
    -
    -    private Hashtable<String, Entry> entries;
    -    private static final String[] time = { "8am", "9am", "10am", "11am",
    -            "12pm", "1pm", "2pm", "3pm", "4pm", "5pm", "6pm", "7pm", "8pm" };
    -    public static final int rows = 12;
    -
    -    public Entries() {
    -        entries = new Hashtable<String, Entry>(rows);
    -        for (int i = 0; i < rows; i++) {
    -            entries.put(time[i], new Entry(time[i]));
    -        }
    -    }
    -
    -    public int getRows() {
    -        return rows;
    -    }
    -
    -    public Entry getEntry(int index) {
    -        return this.entries.get(time[index]);
    -    }
    -
    -    public int getIndex(String tm) {
    -        for (int i = 0; i < rows; i++)
    -            if (tm.equals(time[i]))
    -                return i;
    -        return -1;
    -    }
    -
    -    public void processRequest(HttpServletRequest request, String tm) {
    -        int index = getIndex(tm);
    -        if (index >= 0) {
    -            String descr = request.getParameter("description");
    -            entries.get(time[index]).setDescription(descr);
    -        }
    -    }
    -
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/Entry.java.html b/bundledApps/tomcat/webapps/examples/jsp/cal/Entry.java.html deleted file mode 100755 index 4e97bc19..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/Entry.java.html +++ /dev/null @@ -1,55 +0,0 @@ -
    -/*
    - * Licensed to the Apache Software Foundation (ASF) under one or more
    - * contributor license agreements.  See the NOTICE file distributed with
    - * this work for additional information regarding copyright ownership.
    - * The ASF licenses this file to You under the Apache License, Version 2.0
    - * (the "License"); you may not use this file except in compliance with
    - * the License.  You may obtain a copy of the License at
    - *
    - *     http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - */
    -
    -package cal;
    -
    -public class Entry {
    -
    -    String hour;
    -    String description;
    -
    -    public Entry(String hour) {
    -        this.hour = hour;
    -        this.description = "";
    -
    -    }
    -
    -    public String getHour() {
    -        return this.hour;
    -    }
    -
    -    public String getColor() {
    -        if (description.equals("")) {
    -            return "lightblue";
    -        }
    -        return "red";
    -    }
    -
    -    public String getDescription() {
    -        if (description.equals("")) {
    -            return "None";
    -        }
    -        return this.description;
    -    }
    -
    -    public void setDescription(String descr) {
    -        description = descr;
    -    }
    -
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/JspCalendar.java.html b/bundledApps/tomcat/webapps/examples/jsp/cal/JspCalendar.java.html deleted file mode 100755 index 3c04fd15..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/JspCalendar.java.html +++ /dev/null @@ -1,153 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -package cal;
    -
    -import java.util.Calendar;
    -import java.util.Date;
    -
    -public class JspCalendar {
    -    Calendar  calendar = null;
    -
    -    public JspCalendar() {
    -        calendar = Calendar.getInstance();
    -        Date trialTime = new Date();
    -        calendar.setTime(trialTime);
    -    }
    -
    -
    -    public int getYear() {
    -        return calendar.get(Calendar.YEAR);
    -    }
    -
    -    public String getMonth() {
    -        int m = getMonthInt();
    -        String[] months = new String [] { "January", "February", "March",
    -                                        "April", "May", "June",
    -                                        "July", "August", "September",
    -                                        "October", "November", "December" };
    -        if (m > 12)
    -            return "Unknown to Man";
    -
    -        return months[m - 1];
    -
    -    }
    -
    -    public String getDay() {
    -        int x = getDayOfWeek();
    -        String[] days = new String[] {"Sunday", "Monday", "Tuesday", "Wednesday",
    -                                      "Thursday", "Friday", "Saturday"};
    -
    -        if (x > 7)
    -            return "Unknown to Man";
    -
    -        return days[x - 1];
    -
    -    }
    -
    -    public int getMonthInt() {
    -        return 1 + calendar.get(Calendar.MONTH);
    -    }
    -
    -    public String getDate() {
    -        return getMonthInt() + "/" + getDayOfMonth() + "/" +  getYear();
    -    }
    -
    -    public String getCurrentDate() {
    -        Date dt = new Date ();
    -        calendar.setTime (dt);
    -        return getMonthInt() + "/" + getDayOfMonth() + "/" +  getYear();
    -
    -    }
    -
    -    public String getNextDate() {
    -        calendar.set (Calendar.DAY_OF_MONTH, getDayOfMonth() + 1);
    -        return getDate ();
    -    }
    -
    -    public String getPrevDate() {
    -        calendar.set (Calendar.DAY_OF_MONTH, getDayOfMonth() - 1);
    -        return getDate ();
    -    }
    -
    -    public String getTime() {
    -        return getHour() + ":" + getMinute() + ":" + getSecond();
    -    }
    -
    -    public int getDayOfMonth() {
    -        return calendar.get(Calendar.DAY_OF_MONTH);
    -    }
    -
    -    public int getDayOfYear() {
    -        return calendar.get(Calendar.DAY_OF_YEAR);
    -    }
    -
    -    public int getWeekOfYear() {
    -        return calendar.get(Calendar.WEEK_OF_YEAR);
    -    }
    -
    -    public int getWeekOfMonth() {
    -        return calendar.get(Calendar.WEEK_OF_MONTH);
    -    }
    -
    -    public int getDayOfWeek() {
    -        return calendar.get(Calendar.DAY_OF_WEEK);
    -    }
    -
    -    public int getHour() {
    -        return calendar.get(Calendar.HOUR_OF_DAY);
    -    }
    -
    -    public int getMinute() {
    -        return calendar.get(Calendar.MINUTE);
    -    }
    -
    -
    -    public int getSecond() {
    -        return calendar.get(Calendar.SECOND);
    -    }
    -
    -
    -    public int getEra() {
    -        return calendar.get(Calendar.ERA);
    -    }
    -
    -    public String getUSTimeZone() {
    -        String[] zones = new String[] {"Hawaii", "Alaskan", "Pacific",
    -                                       "Mountain", "Central", "Eastern"};
    -
    -        return zones[10 + getZoneOffset()];
    -    }
    -
    -    public int getZoneOffset() {
    -        return calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000);
    -    }
    -
    -
    -    public int getDSTOffset() {
    -        return calendar.get(Calendar.DST_OFFSET)/(60*60*1000);
    -    }
    -
    -
    -    public int getAMPM() {
    -        return calendar.get(Calendar.AM_PM);
    -    }
    -}
    -
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/TableBean.java.html b/bundledApps/tomcat/webapps/examples/jsp/cal/TableBean.java.html deleted file mode 100755 index 78c0e7f4..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/TableBean.java.html +++ /dev/null @@ -1,103 +0,0 @@ -
    -/*
    - * Licensed to the Apache Software Foundation (ASF) under one or more
    - * contributor license agreements.  See the NOTICE file distributed with
    - * this work for additional information regarding copyright ownership.
    - * The ASF licenses this file to You under the Apache License, Version 2.0
    - * (the "License"); you may not use this file except in compliance with
    - * the License.  You may obtain a copy of the License at
    - *
    - *     http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - */
    -package cal;
    -
    -import java.util.Hashtable;
    -
    -import javax.servlet.http.HttpServletRequest;
    -
    -public class TableBean {
    -
    -    Hashtable<String, Entries> table;
    -    JspCalendar JspCal;
    -    Entries entries;
    -    String date;
    -    String name = null;
    -    String email = null;
    -    boolean processError = false;
    -
    -    public TableBean() {
    -        this.table = new Hashtable<String, Entries>(10);
    -        this.JspCal = new JspCalendar();
    -        this.date = JspCal.getCurrentDate();
    -    }
    -
    -    public void setName(String nm) {
    -        this.name = nm;
    -    }
    -
    -    public String getName() {
    -        return this.name;
    -    }
    -
    -    public void setEmail(String mail) {
    -        this.email = mail;
    -    }
    -
    -    public String getEmail() {
    -        return this.email;
    -    }
    -
    -    public String getDate() {
    -        return this.date;
    -    }
    -
    -    public Entries getEntries() {
    -        return this.entries;
    -    }
    -
    -    public void processRequest(HttpServletRequest request) {
    -
    -        // Get the name and e-mail.
    -        this.processError = false;
    -        if (name == null || name.equals(""))
    -            setName(request.getParameter("name"));
    -        if (email == null || email.equals(""))
    -            setEmail(request.getParameter("email"));
    -        if (name == null || email == null || name.equals("")
    -                || email.equals("")) {
    -            this.processError = true;
    -            return;
    -        }
    -
    -        // Get the date.
    -        String dateR = request.getParameter("date");
    -        if (dateR == null)
    -            date = JspCal.getCurrentDate();
    -        else if (dateR.equalsIgnoreCase("next"))
    -            date = JspCal.getNextDate();
    -        else if (dateR.equalsIgnoreCase("prev"))
    -            date = JspCal.getPrevDate();
    -
    -        entries = table.get(date);
    -        if (entries == null) {
    -            entries = new Entries();
    -            table.put(date, entries);
    -        }
    -
    -        // If time is provided add the event.
    -        String time = request.getParameter("time");
    -        if (time != null)
    -            entries.processRequest(request, time);
    -    }
    -
    -    public boolean getProcessError() {
    -        return this.processError;
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/cal1.jsp b/bundledApps/tomcat/webapps/examples/jsp/cal/cal1.jsp deleted file mode 100755 index db78a036..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/cal1.jsp +++ /dev/null @@ -1,93 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - Calendar: A JSP APPLICATION - - - - - -<%@ page language="java" import="cal.*" %> - - -<% - table.processRequest(request); - if (table.getProcessError() == false) { -%> - - -
    - - - - -
    prev - Calendar:<%= table.getDate() %> next -
    - - - - - - - - -<% - for(int i=0; i - - - - -<% - } -%> - -
    Time Appointment
    - > - <%= entr.getHour() %> - > - <% out.print(util.HTMLFilter.filter(entr.getDescription())); %> -
    -
    - - - - - - -
    <% out.print(util.HTMLFilter.filter(table.getName())); %> : - <% out.print(util.HTMLFilter.filter(table.getEmail())); %>
    -
    - -<% - } else { -%> - - You must enter your name and email address correctly. - -<% - } -%> - - - - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/cal1.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/cal/cal1.jsp.html deleted file mode 100755 index e83627c0..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/cal1.jsp.html +++ /dev/null @@ -1,95 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<HTML>
    -<HEAD><TITLE>
    -    Calendar: A JSP APPLICATION
    -</TITLE></HEAD>
    -
    -
    -<BODY BGCOLOR="white">
    -
    -<%@ page language="java" import="cal.*" %>
    -<jsp:useBean id="table" scope="session" class="cal.TableBean" />
    -
    -<%
    -    table.processRequest(request);
    -    if (table.getProcessError() == false) {
    -%>
    -
    -<!-- html table goes here -->
    -<CENTER>
    -<TABLE WIDTH=60% BGCOLOR=yellow CELLPADDING=15>
    -<TR>
    -<TD ALIGN=CENTER> <A HREF=cal1.jsp?date=prev> prev </A>
    -<TD ALIGN=CENTER> Calendar:<%= table.getDate() %></TD>
    -<TD ALIGN=CENTER> <A HREF=cal1.jsp?date=next> next </A>
    -</TR>
    -</TABLE>
    -
    -<!-- the main table -->
    -<TABLE WIDTH=60% BGCOLOR=lightblue BORDER=1 CELLPADDING=10>
    -<TR>
    -<TH> Time </TH>
    -<TH> Appointment </TH>
    -</TR>
    -<FORM METHOD=POST ACTION=cal1.jsp>
    -<%
    -    for(int i=0; i<table.getEntries().getRows(); i++) {
    -       cal.Entry entr = table.getEntries().getEntry(i);
    -%>
    -    <TR>
    -    <TD>
    -    <A HREF=cal2.jsp?time=<%= entr.getHour() %>>
    -        <%= entr.getHour() %> </A>
    -    </TD>
    -    <TD BGCOLOR=<%= entr.getColor() %>>
    -    <% out.print(util.HTMLFilter.filter(entr.getDescription())); %>
    -    </TD>
    -    </TR>
    -<%
    -    }
    -%>
    -</FORM>
    -</TABLE>
    -<BR>
    -
    -<!-- footer -->
    -<TABLE WIDTH=60% BGCOLOR=yellow CELLPADDING=15>
    -<TR>
    -<TD ALIGN=CENTER>  <% out.print(util.HTMLFilter.filter(table.getName())); %> :
    -             <% out.print(util.HTMLFilter.filter(table.getEmail())); %> </TD>
    -</TR>
    -</TABLE>
    -</CENTER>
    -
    -<%
    -    } else {
    -%>
    -<font size=5>
    -    You must enter your name and email address correctly.
    -</font>
    -<%
    -    }
    -%>
    -
    -
    -</BODY>
    -</HTML>
    -
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/cal2.jsp b/bundledApps/tomcat/webapps/examples/jsp/cal/cal2.jsp deleted file mode 100755 index b5088700..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/cal2.jsp +++ /dev/null @@ -1,44 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - Calendar: A JSP APPLICATION - - - - - - -<% - String time = request.getParameter ("time"); -%> - - Please add the following event: -

    Date <%= table.getDate() %> -
    Time <%= util.HTMLFilter.filter(time) %>

    -
    -
    -
    -
    -
    -

    Description of the event

    -
    -
    - - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/cal2.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/cal/cal2.jsp.html deleted file mode 100755 index 270c8b0f..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/cal2.jsp.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<HTML>
    -<HEAD><TITLE>
    -    Calendar: A JSP APPLICATION
    -</TITLE></HEAD>
    -
    -
    -<BODY BGCOLOR="white">
    -<jsp:useBean id="table" scope="session" class="cal.TableBean" />
    -
    -<%
    -    String time = request.getParameter ("time");
    -%>
    -
    -<FONT SIZE=5> Please add the following event:
    -<BR> <h3> Date <%= table.getDate() %>
    -<BR> Time <%= util.HTMLFilter.filter(time) %> </h3>
    -</FONT>
    -<FORM METHOD=POST ACTION=cal1.jsp>
    -<BR>
    -<BR> <INPUT NAME="date" TYPE=HIDDEN VALUE="current">
    -<BR> <INPUT NAME="time" TYPE=HIDDEN VALUE="<%= util.HTMLFilter.filter(time) %>">
    -<BR> <h2> Description of the event <INPUT NAME="description" TYPE=TEXT SIZE=20> </h2>
    -<BR> <INPUT TYPE=SUBMIT VALUE="submit">
    -</FORM>
    -
    -</BODY>
    -</HTML>
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/calendar.html b/bundledApps/tomcat/webapps/examples/jsp/cal/calendar.html deleted file mode 100755 index d77cea55..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/calendar.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Calendar Example.
    -

    cal1.jsp -

    -

    cal2.jsp -

    - -
    -

    Beans. -

    TableBean -

    -

    Entries -

    -

    Entry -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/cal/login.html b/bundledApps/tomcat/webapps/examples/jsp/cal/login.html deleted file mode 100755 index b1105d5a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/cal/login.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - Login page for the calendar. - - - -
    - - Please Enter the following information: - -
    -
    - - Name - -
    - Email - -
    - - -
    -
    - Note: This application does not implement the complete -functionality of a typical calendar application. It demonstrates a way JSP can -be used with html tables and forms. - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/chat/index.jsp b/bundledApps/tomcat/webapps/examples/jsp/chat/index.jsp deleted file mode 100755 index 5a33fcd7..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/chat/index.jsp +++ /dev/null @@ -1,32 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page contentType="text/html; charset=UTF-8" %> -<% if (session.getAttribute("nickname") == null) { - response.sendRedirect("login.jsp"); - return; -} -%> - - - - JSP Chat - - - - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/chat/index.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/chat/index.jsp.html deleted file mode 100755 index 250c2492..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/chat/index.jsp.html +++ /dev/null @@ -1,34 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@page contentType="text/html; charset=UTF-8" %>
    -<% if (session.getAttribute("nickname") == null) {
    -    response.sendRedirect("login.jsp");
    -    return;
    -}
    -%>
    -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    -<html>
    -<head>
    -   <title>JSP Chat</title>
    -</head>
    -<frameset rows="1*,4*">
    -  <frame name="post" src="post.jsp" scrolling="no" title="Post message">
    -  <frame name="chat" src="chat" scrolling="yes" title="Chat">
    -</frameset>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/chat/login.jsp b/bundledApps/tomcat/webapps/examples/jsp/chat/login.jsp deleted file mode 100755 index 8578ac92..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/chat/login.jsp +++ /dev/null @@ -1,33 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - -<%@page contentType="text/html; charset=UTF-8" %> - - - JSP Chat - - - - -
    - -Nickname: - -
    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/chat/login.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/chat/login.jsp.html deleted file mode 100755 index 699a939f..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/chat/login.jsp.html +++ /dev/null @@ -1,35 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    -<%@page contentType="text/html; charset=UTF-8" %>
    -<html>
    -<head>
    -   <title>JSP Chat</title>
    -</head>
    -
    -<body bgcolor="#FFFFFF">
    -
    -<form method="POST" action='chat' target="_top" name="loginForm">
    -<input type="hidden" name="action" value="login">
    -Nickname: <input type="text" name="nickname">
    -<input type="submit">
    -</form>
    -
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/chat/post.jsp b/bundledApps/tomcat/webapps/examples/jsp/chat/post.jsp deleted file mode 100755 index 91fee7b4..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/chat/post.jsp +++ /dev/null @@ -1,55 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - -<%@page contentType="text/html; charset=UTF-8" %> - - - JSP Chat - - - - -
    - -Message: - -
    - -
    -<% - String serverName = request.getServerName(); - if ("localhost".equals(serverName)) { - serverName = "127.0.0.1"; - } else if ("127.0.0.1".equals(serverName)) { - serverName = "localhost"; - } - - String chatUrl = request.getScheme() + "://" + serverName + ":" - + request.getServerPort() + request.getContextPath() - + request.getServletPath(); - - // strip "post.jsp" from the address - chatUrl = chatUrl.substring(0, chatUrl.lastIndexOf("/") + 1); -%> -Click to open a new chat window -Note: To avoid hitting the limit on the count of simultaneous -connections to the same host, imposed by the -HTTP specification, -the second chat window should be opened using a different URL, e.g. with -an IP address instead of the host name. - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/chat/post.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/chat/post.jsp.html deleted file mode 100755 index 2ccfcbcd..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/chat/post.jsp.html +++ /dev/null @@ -1,57 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    -<%@page contentType="text/html; charset=UTF-8" %>
    -<html>
    -<head>
    -   <title>JSP Chat</title>
    -</head>
    -
    -<body bgcolor="#FFFFFF">
    -
    -<form method="POST" action='chat' name="postForm">
    -<input type="hidden" name="action" value="post">
    -Message: <input type="text" name="message">
    -<input type="submit">
    -</form>
    -
    -<br>
    -<%
    -  String serverName = request.getServerName();
    -  if ("localhost".equals(serverName)) {
    -      serverName = "127.0.0.1";
    -  } else if ("127.0.0.1".equals(serverName)) {
    -      serverName = "localhost";
    -  }
    -
    -  String chatUrl = request.getScheme() + "://" + serverName + ":"
    -    + request.getServerPort() + request.getContextPath()
    -    + request.getServletPath();
    -
    -  // strip "post.jsp" from the address
    -  chatUrl = chatUrl.substring(0, chatUrl.lastIndexOf("/") + 1);
    -%>
    -<a target="_blank" href="<%=chatUrl %>">Click to open a new chat window</a>
    -<em>Note</em>: To avoid hitting the limit on the count of simultaneous
    -connections to the same host, imposed by the
    -<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4">HTTP specification</a>,
    -the second chat window should be opened using a different URL, e.g. with
    -an IP address instead of the host name.
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/checkbox/CheckTest.html b/bundledApps/tomcat/webapps/examples/jsp/checkbox/CheckTest.html deleted file mode 100755 index e950ff47..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/checkbox/CheckTest.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - -checkbox.CheckTest Bean Properties - - -

    -checkbox.CheckTest Bean Properties -

    -
    -
    -
    public class CheckTest
    extends Object
    - -

    -


    - -

    - - - - - - - - - -
    -Properties Summary
    - -String -CheckTest:fruit -
    -
    - -Multi -
    -


    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/checkbox/check.html b/bundledApps/tomcat/webapps/examples/jsp/checkbox/check.html deleted file mode 100755 index 148fe40c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/checkbox/check.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - -
    -
    - -Check all Favorite fruits:
    - - Apples
    - Grapes
    - Oranges
    - Melons
    - - -
    - -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/checkbox/checkresult.jsp b/bundledApps/tomcat/webapps/examples/jsp/checkbox/checkresult.jsp deleted file mode 100755 index 5df7b661..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/checkbox/checkresult.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - -<%! String[] fruits; %> - - - -
    -The checked fruits (got using request) are:
    -<% - fruits = request.getParameterValues("fruit"); -%> -
      -<% - if (fruits != null) { - for (int i = 0; i < fruits.length; i++) { -%> -
    • -<% - out.println (util.HTMLFilter.filter(fruits[i])); - } - } else out.println ("none selected"); -%> -
    -
    -
    - -The checked fruits (got using beans) are
    - -<% - fruits = foo.getFruit(); -%> -
      -<% - if (!fruits[0].equals("1")) { - for (int i = 0; i < fruits.length; i++) { -%> -
    • -<% - out.println (util.HTMLFilter.filter(fruits[i])); - } - } else out.println ("none selected"); -%> -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/checkbox/checkresult.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/checkbox/checkresult.jsp.html deleted file mode 100755 index 5daab63f..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/checkbox/checkresult.jsp.html +++ /dev/null @@ -1,65 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<body bgcolor="white">
    -<font size=5 color="red">
    -<%! String[] fruits; %>
    -<jsp:useBean id="foo" scope="page" class="checkbox.CheckTest" />
    -
    -<jsp:setProperty name="foo" property="fruit" param="fruit" />
    -<hr>
    -The checked fruits (got using request) are: <br>
    -<%
    -    fruits = request.getParameterValues("fruit");
    -%>
    -<ul>
    -<%
    -    if (fruits != null) {
    -      for (int i = 0; i < fruits.length; i++) {
    -%>
    -<li>
    -<%
    -          out.println (util.HTMLFilter.filter(fruits[i]));
    -      }
    -    } else out.println ("none selected");
    -%>
    -</ul>
    -<br>
    -<hr>
    -
    -The checked fruits (got using beans) are <br>
    -
    -<%
    -        fruits = foo.getFruit();
    -%>
    -<ul>
    -<%
    -    if (!fruits[0].equals("1")) {
    -      for (int i = 0; i < fruits.length; i++) {
    -%>
    -<li>
    -<%
    -          out.println (util.HTMLFilter.filter(fruits[i]));
    -      }
    -    } else out.println ("none selected");
    -%>
    -</ul>
    -</font>
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/checkbox/cresult.html b/bundledApps/tomcat/webapps/examples/jsp/checkbox/cresult.html deleted file mode 100755 index c7eabce7..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/checkbox/cresult.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Checkbox Example -

    - -

    Property Sheet for CheckTest -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/colors/ColorGameBean.html b/bundledApps/tomcat/webapps/examples/jsp/colors/ColorGameBean.html deleted file mode 100755 index dcfc5c84..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/colors/ColorGameBean.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - -colors.ColorGameBean Bean Properties - - -

    -colors.ColorGameBean Bean Properties -

    -
    -
    -
    public class ColorGameBean
    extends Object
    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Properties Summary
    - -String -ColorGameBean:color2 -
    -
    - -Single -
    - -String -ColorGameBean:color1 -
    -
    - -Single -
    - -int -ColorGameBean:attempts -
    -
    - -Single -
    - -boolean -ColorGameBean:hint -
    -
    - -Single -
    - -boolean -ColorGameBean:success -
    -
    - -Single -
    - -boolean -ColorGameBean:hintTaken -
    -
    - -Single -
    -


    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/colors/clr.html b/bundledApps/tomcat/webapps/examples/jsp/colors/clr.html deleted file mode 100755 index 58107bc2..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/colors/clr.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Color Example -

    - -

    Property Sheet for ColorGameBean -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/colors/colors.html b/bundledApps/tomcat/webapps/examples/jsp/colors/colors.html deleted file mode 100755 index 76ec2b96..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/colors/colors.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -
    -This web page is an example using JSP and BEANs. -

    -Guess my favorite two colors - -

    If you fail to guess both of them - you get yellow on red. - -

    If you guess one of them right, either your foreground or - your background will change to the color that was guessed right. - -

    Guess them both right and your browser foreground/background - will change to my two favorite colors to display this page. - -


    -
    -Color #1: -
    -Color #2: -

    - - -

    - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/colors/colrs.jsp b/bundledApps/tomcat/webapps/examples/jsp/colors/colrs.jsp deleted file mode 100755 index 90e1afe5..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/colors/colrs.jsp +++ /dev/null @@ -1,70 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - - -<% - cb.processRequest(); -%> - -> -> -

    - -<% if (cb.getHint()==true) { %> - -

    Hint #1: Vampires prey at night! -

    Hint #2: Nancy without the n. - -<% } %> - -<% if (cb.getSuccess()==true) { %> - -

    CONGRATULATIONS!! - <% if (cb.getHintTaken()==true) { %> - -

    ( although I know you cheated and peeked into the hints) - - <% } %> - -<% } %> - -

    Total attempts so far: <%= cb.getAttempts() %> -

    - -

    - -

    - -Color #1: - -
    - -Color #2: - -

    - - - - -

    - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/colors/colrs.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/colors/colrs.jsp.html deleted file mode 100755 index fda1bd71..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/colors/colrs.jsp.html +++ /dev/null @@ -1,72 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -
    -<jsp:useBean id="cb" scope="session" class="colors.ColorGameBean" />
    -<jsp:setProperty name="cb" property="*" />
    -
    -<%
    -    cb.processRequest();
    -%>
    -
    -<body bgcolor=<%= cb.getColor1() %>>
    -<font size=6 color=<%= cb.getColor2() %>>
    -<p>
    -
    -<% if (cb.getHint()==true) { %>
    -
    -    <p> Hint #1: Vampires prey at night!
    -    <p>  <p> Hint #2: Nancy without the n.
    -
    -<% } %>
    -
    -<% if  (cb.getSuccess()==true) { %>
    -
    -    <p> CONGRATULATIONS!!
    -    <% if  (cb.getHintTaken()==true) { %>
    -
    -        <p> ( although I know you cheated and peeked into the hints)
    -
    -    <% } %>
    -
    -<% } %>
    -
    -<p> Total attempts so far: <%= cb.getAttempts() %>
    -<p>
    -
    -<p>
    -
    -<form method=POST action=colrs.jsp>
    -
    -Color #1: <input type=text name= color1 size=16>
    -
    -<br>
    -
    -Color #2: <input type=text name= color2 size=16>
    -
    -<p>
    -
    -<input type=submit name=action value="Submit">
    -<input type=submit name=action value="Hint">
    -
    -</form>
    -
    -</font>
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/dates/date.html b/bundledApps/tomcat/webapps/examples/jsp/dates/date.html deleted file mode 100755 index b779181e..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/dates/date.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Date Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/dates/date.jsp b/bundledApps/tomcat/webapps/examples/jsp/dates/date.jsp deleted file mode 100755 index 7f47dc92..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/dates/date.jsp +++ /dev/null @@ -1,41 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - -<%@ page session="false"%> - - - - - -
      -
    • Day of month: is -
    • Year: is -
    • Month: is -
    • Time: is -
    • Date: is -
    • Day: is -
    • Day Of Year: is -
    • Week Of Year: is -
    • era: is -
    • DST Offset: is -
    • Zone Offset: is -
    -
    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/dates/date.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/dates/date.jsp.html deleted file mode 100755 index c7eb8d5b..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/dates/date.jsp.html +++ /dev/null @@ -1,43 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -
    -<%@ page session="false"%>
    -
    -<body bgcolor="white">
    -<jsp:useBean id='clock' scope='page' class='dates.JspCalendar' type="dates.JspCalendar" />
    -
    -<font size=4>
    -<ul>
    -<li>    Day of month: is  <jsp:getProperty name="clock" property="dayOfMonth"/>
    -<li>    Year: is  <jsp:getProperty name="clock" property="year"/>
    -<li>    Month: is  <jsp:getProperty name="clock" property="month"/>
    -<li>    Time: is  <jsp:getProperty name="clock" property="time"/>
    -<li>    Date: is  <jsp:getProperty name="clock" property="date"/>
    -<li>    Day: is  <jsp:getProperty name="clock" property="day"/>
    -<li>    Day Of Year: is  <jsp:getProperty name="clock" property="dayOfYear"/>
    -<li>    Week Of Year: is  <jsp:getProperty name="clock" property="weekOfYear"/>
    -<li>    era: is  <jsp:getProperty name="clock" property="era"/>
    -<li>    DST Offset: is  <jsp:getProperty name="clock" property="DSTOffset"/>
    -<li>    Zone Offset: is  <jsp:getProperty name="clock" property="zoneOffset"/>
    -</ul>
    -</font>
    -
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/error/er.html b/bundledApps/tomcat/webapps/examples/jsp/error/er.html deleted file mode 100755 index 523f7e32..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/error/er.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Error Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/error/err.jsp b/bundledApps/tomcat/webapps/examples/jsp/error/err.jsp deleted file mode 100755 index 956da8e9..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/error/err.jsp +++ /dev/null @@ -1,44 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - <%@ page errorPage="errorpge.jsp" %> - - <% - String name = null; - - if (request.getParameter("name") == null) { - %> - <%@ include file="error.html" %> - <% - } else { - foo.setName(request.getParameter("name")); - if (foo.getName().equalsIgnoreCase("integra")) - name = "acura"; - if (name.equalsIgnoreCase("acura")) { - %> - -

    Yes!!! Acura is my favorite car. - - <% - } - } - %> - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/error/err.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/error/err.jsp.html deleted file mode 100755 index 8f0727d9..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/error/err.jsp.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<body bgcolor="lightblue">
    -
    -    <%@ page errorPage="errorpge.jsp" %>
    -    <jsp:useBean id="foo" scope="request" class="error.Smart" />
    -    <%
    -        String name = null;
    -
    -        if (request.getParameter("name") == null) {
    -    %>
    -    <%@ include file="error.html" %>
    -    <%
    -        } else {
    -          foo.setName(request.getParameter("name"));
    -          if (foo.getName().equalsIgnoreCase("integra"))
    -              name = "acura";
    -          if (name.equalsIgnoreCase("acura")) {
    -    %>
    -
    -    <H1> Yes!!! <a href="http://www.acura.com">Acura</a> is my favorite car.
    -
    -    <%
    -          }
    -        }
    -    %>
    -</body>
    -</html>
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/error/error.html b/bundledApps/tomcat/webapps/examples/jsp/error/error.html deleted file mode 100755 index 635346fb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/error/error.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - -

    This example uses errorpage directive

    -
    -

    Select my favourite car.

    -
    - - -
    -
    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/error/errorpge.jsp b/bundledApps/tomcat/webapps/examples/jsp/error/errorpge.jsp deleted file mode 100755 index dda6fbdf..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/error/errorpge.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - - <%@ page isErrorPage="true" %> -

    The exception <%= exception.getMessage() %> tells me you - made a wrong choice. - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/error/errorpge.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/error/errorpge.jsp.html deleted file mode 100755 index cfb6fcff..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/error/errorpge.jsp.html +++ /dev/null @@ -1,27 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -
    -<body bgcolor="red">
    -
    -    <%@ page isErrorPage="true" %>
    -    <h1> The exception <%= exception.getMessage() %> tells me you
    -         made a wrong choice.
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/forward/forward.jsp b/bundledApps/tomcat/webapps/examples/jsp/forward/forward.jsp deleted file mode 100755 index 4ee56a28..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/forward/forward.jsp +++ /dev/null @@ -1,33 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - -<% - double freeMem = Runtime.getRuntime().freeMemory(); - double totlMem = Runtime.getRuntime().totalMemory(); - double percent = freeMem/totlMem; - if (percent < 0.5) { -%> - - - -<% } else { %> - - - -<% } %> - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/forward/forward.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/forward/forward.jsp.html deleted file mode 100755 index 904ea8a8..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/forward/forward.jsp.html +++ /dev/null @@ -1,35 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<%
    -   double freeMem = Runtime.getRuntime().freeMemory();
    -   double totlMem = Runtime.getRuntime().totalMemory();
    -   double percent = freeMem/totlMem;
    -   if (percent < 0.5) {
    -%>
    -
    -<jsp:forward page="one.jsp"/>
    -
    -<% } else { %>
    -
    -<jsp:forward page="two.html"/>
    -
    -<% } %>
    -
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/forward/fwd.html b/bundledApps/tomcat/webapps/examples/jsp/forward/fwd.html deleted file mode 100755 index e4a701e5..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/forward/fwd.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -Untitled Document - - - - -

    - -

    Source Code for Forward Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/forward/one.jsp b/bundledApps/tomcat/webapps/examples/jsp/forward/one.jsp deleted file mode 100755 index dff42ccb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/forward/one.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - - -VM Memory usage < 50%. - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/forward/one.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/forward/one.jsp.html deleted file mode 100755 index ac9b6f5f..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/forward/one.jsp.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -
    -<body bgcolor="white">
    -<font color="red">
    -
    -VM Memory usage < 50%.
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/forward/two.html b/bundledApps/tomcat/webapps/examples/jsp/forward/two.html deleted file mode 100755 index 4bc94022..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/forward/two.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -VM Memory usage > 50%. - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/images/code.gif b/bundledApps/tomcat/webapps/examples/jsp/images/code.gif deleted file mode 100755 index 93af2cd1..00000000 Binary files a/bundledApps/tomcat/webapps/examples/jsp/images/code.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/jsp/images/execute.gif b/bundledApps/tomcat/webapps/examples/jsp/images/execute.gif deleted file mode 100755 index f64d70fd..00000000 Binary files a/bundledApps/tomcat/webapps/examples/jsp/images/execute.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/jsp/images/read.gif b/bundledApps/tomcat/webapps/examples/jsp/images/read.gif deleted file mode 100755 index 66cb4e92..00000000 Binary files a/bundledApps/tomcat/webapps/examples/jsp/images/read.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/jsp/images/return.gif b/bundledApps/tomcat/webapps/examples/jsp/images/return.gif deleted file mode 100755 index af4f68f4..00000000 Binary files a/bundledApps/tomcat/webapps/examples/jsp/images/return.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/jsp/include/foo.html b/bundledApps/tomcat/webapps/examples/jsp/include/foo.html deleted file mode 100755 index 11acc0e7..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/include/foo.html +++ /dev/null @@ -1,17 +0,0 @@ - -To get the current time in ms diff --git a/bundledApps/tomcat/webapps/examples/jsp/include/foo.jsp b/bundledApps/tomcat/webapps/examples/jsp/include/foo.jsp deleted file mode 100755 index 7d3565e3..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/include/foo.jsp +++ /dev/null @@ -1,21 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - -<%= System.currentTimeMillis() %> diff --git a/bundledApps/tomcat/webapps/examples/jsp/include/foo.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/include/foo.jsp.html deleted file mode 100755 index 7e562a6c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/include/foo.jsp.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -
    -<body bgcolor="white">
    -<font color="red">
    -
    -<%= System.currentTimeMillis() %>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/include/inc.html b/bundledApps/tomcat/webapps/examples/jsp/include/inc.html deleted file mode 100755 index d2971bb5..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/include/inc.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -Untitled Document - - - - -

    - -

    Source Code for Include Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/include/include.jsp b/bundledApps/tomcat/webapps/examples/jsp/include/include.jsp deleted file mode 100755 index e1d83e46..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/include/include.jsp +++ /dev/null @@ -1,35 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - - - -<%@ page buffer="5kb" autoFlush="false" %> - -

    In place evaluation of another JSP which gives you the current time: - -<%@ include file="foo.jsp" %> - -

    by including the output of another JSP: - - - -:-) - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/include/include.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/include/include.jsp.html deleted file mode 100755 index 0ae41294..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/include/include.jsp.html +++ /dev/null @@ -1,37 +0,0 @@ -

    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -
    -<body bgcolor="white">
    -
    -<font color="red">
    -
    -<%@ page buffer="5kb" autoFlush="false" %>
    -
    -<p>In place evaluation of another JSP which gives you the current time:
    -
    -<%@ include file="foo.jsp" %>
    -
    -<p> <jsp:include page="foo.html" flush="true"/> by including the output of another JSP:
    -
    -<jsp:include page="foo.jsp" flush="true"/>
    -
    -:-)
    -
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/index.html b/bundledApps/tomcat/webapps/examples/jsp/index.html deleted file mode 100755 index 712d54ae..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/index.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - - JSP Examples - - -JSP -Samples -

    This is a collection of samples demonstrating the usage of different -parts of the Java Server Pages (JSP) specification. Both JSP 2.0 and -JSP 1.2 examples are presented below. -

    These examples will only work when these pages are being served by a -servlet engine; of course, we recommend -Tomcat. -They will not work if you are viewing these pages via a -"file://..." URL. -

    To navigate your way through the examples, the following icons will -help: -
      - - - - - - - - - - - - - - - - - - - - - -
    Execute the example
    Look at the source code for the example
    Return to this screen
    - -

    Tip: For session scoped beans to work, the cookies must be enabled. -This can be done using browser options. -
      -
    -JSP 2.0 Examples
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Expression Language
    Basic ArithmeticExecuteSource
    Basic ComparisonsExecuteSource
    Implicit ObjectsExecuteSource
    FunctionsExecuteSource
    Composite ExpressionsExecuteSource

    SimpleTag Handlers and JSP Fragments
    Hello World TagExecuteSource
    Repeat TagExecuteSource
    Book ExampleExecuteSource

    Tag Files
    Hello World Tag FileExecuteSource
    Panel Tag FileExecuteSource
    Display Products ExampleExecuteSource

    New JSP XML Syntax (.jspx)
    XHTML Basic ExampleExecuteSource
    SVG (Scalable Vector Graphics)ExecuteSource

    Other JSP 2.0 Features
    <jsp:attribute> and <jsp:body>ExecuteSource
    Shuffle ExampleExecuteSource
    Attributes With Dynamic NamesExecuteSource
    JSP ConfigurationExecuteSource
    - -
    -JSP 1.2 Examples
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Numberguess ExecuteSource
    Date ExecuteSource
    SnoopExecuteSource
    ErrorPage ExecuteSource
    Carts ExecuteSource
    Checkbox ExecuteSource
    Color ExecuteSource
    Calendar ExecuteSource
    Include ExecuteSource
    Forward ExecuteSource
    Plugin ExecuteSource
    JSP-Servlet-JSP ExecuteSource
    Custom tag exampleExecuteSource
    XML syntax exampleExecuteSource
    - -
    -Tag Plugins
    - - - - - - - - - - - - - - - - - - - - -
    If  - - Execute - - - Source -
    ForEach  - - Execute - - - Source -
    Choose  - - Execute - - - Source -
    - -
    -Other Examples
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FORM Authentication  - Execute -
    Example that demonstrates protecting a resource and - using Form-Based authentication. To access the page the user must - have role of either "tomcat" or "role1". By default no user - is configured to have these roles.
    Servlet 3.0 Asynchronous processing examples 
    - Examples that demonstrate using Servlet 3.0 asynchronous - request processing API.
    async0  - Execute -
    async1  - Execute -
    async2  - Execute -
    async3  - Execute -
    stockticker  - Execute -
    Comet processing example 
    - Example that demonstrates asynchronous request processing - using Comet API. See "Advanced IO" chapter in the - User Guide for details. It works only with connectors that support - Comet processing (APR or NIO - HTTP connectors).
    Comet Chat  - Execute -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/Functions.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/Functions.java.html deleted file mode 100755 index 91abc754..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/Functions.java.html +++ /dev/null @@ -1,47 +0,0 @@ -

    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -package jsp2.examples.el;
    -
    -import java.util.Locale;
    -
    -/**
    - * Defines the functions for the jsp2 example tag library.
    - *
    - * <p>Each function is defined as a static method.</p>
    - */
    -public class Functions {
    -    public static String reverse( String text ) {
    -        return new StringBuilder( text ).reverse().toString();
    -    }
    -
    -    public static int numVowels( String text ) {
    -        String vowels = "aeiouAEIOU";
    -        int result = 0;
    -        for( int i = 0; i < text.length(); i++ ) {
    -            if( vowels.indexOf( text.charAt( i ) ) != -1 ) {
    -                result++;
    -            }
    -        }
    -        return result;
    -    }
    -
    -    public static String caps( String text ) {
    -        return text.toUpperCase(Locale.ENGLISH);
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/ValuesBean.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/ValuesBean.java.html deleted file mode 100755 index beadf721..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/ValuesBean.java.html +++ /dev/null @@ -1,54 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples;
    -
    -/**
    - * Accept and display a value.
    - */
    -public class ValuesBean {
    -    private String string;
    -    private double doubleValue;
    -    private long longValue;
    -
    -    public String getStringValue() {
    -        return this.string;
    -    }
    -
    -    public void setStringValue(String string) {
    -        this.string = string;
    -    }
    -
    -    public double getDoubleValue() {
    -        return doubleValue;
    -    }
    -
    -    public void setDoubleValue(double doubleValue) {
    -        this.doubleValue = doubleValue;
    -    }
    -
    -    public long getLongValue() {
    -        return longValue;
    -    }
    -
    -    public void setLongValue(long longValue) {
    -        this.longValue = longValue;
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/ValuesTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/ValuesTag.java.html deleted file mode 100755 index 16f62aba..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/ValuesTag.java.html +++ /dev/null @@ -1,81 +0,0 @@ -
    -/*
    - * Licensed to the Apache Software Foundation (ASF) under one or more
    - * contributor license agreements.  See the NOTICE file distributed with
    - * this work for additional information regarding copyright ownership.
    - * The ASF licenses this file to You under the Apache License, Version 2.0
    - * (the "License"); you may not use this file except in compliance with
    - * the License.  You may obtain a copy of the License at
    - *
    - *     http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - */
    -package examples;
    -
    -import java.io.IOException;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.JspTagException;
    -import javax.servlet.jsp.JspWriter;
    -import javax.servlet.jsp.tagext.TagSupport;
    -
    -/**
    - * Accept and display a value.
    - */
    -public class ValuesTag extends TagSupport {
    -
    -    private static final long serialVersionUID = 1L;
    -
    -    // Using "-1" as the default value,
    -    // in the assumption that it won't be used as the value.
    -    // Cannot use null here, because null is an important case
    -    // that should be present in the tests.
    -    private Object objectValue = "-1";
    -    private String stringValue = "-1";
    -    private long longValue = -1;
    -    private double doubleValue = -1;
    -
    -    public void setObject(Object objectValue) {
    -        this.objectValue = objectValue;
    -    }
    -
    -    public void setString(String stringValue) {
    -        this.stringValue = stringValue;
    -    }
    -
    -    public void setLong(long longValue) {
    -        this.longValue = longValue;
    -    }
    -
    -    public void setDouble(double doubleValue) {
    -        this.doubleValue = doubleValue;
    -    }
    -
    -    @Override
    -    public int doEndTag() throws JspException {
    -        JspWriter out = pageContext.getOut();
    -
    -        try {
    -            if (!"-1".equals(objectValue)) {
    -                out.print(objectValue);
    -            } else if (!"-1".equals(stringValue)) {
    -                out.print(stringValue);
    -            } else if (longValue != -1) {
    -                out.print(longValue);
    -            } else if (doubleValue != -1) {
    -                out.print(doubleValue);
    -            } else {
    -                out.print("-1");
    -            }
    -        } catch (IOException ex) {
    -            throw new JspTagException("IOException: " + ex.toString(), ex);
    -        }
    -        return super.doEndTag();
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.html deleted file mode 100755 index ca88b7f7..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -View Source Code - - - - -

    - -

    Source Code for Basic Arithmetic Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp deleted file mode 100755 index a3b3e7af..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp +++ /dev/null @@ -1,88 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - JSP 2.0 Expression Language - Basic Arithmetic - - -

    JSP 2.0 Expression Language - Basic Arithmetic

    -
    - This example illustrates basic Expression Language arithmetic. - Addition (+), subtraction (-), multiplication (*), division (/ or div), - and modulus (% or mod) are all supported. Error conditions, like - division by zero, are handled gracefully. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EL ExpressionResult
    \${1}${1}
    \${1 + 2}${1 + 2}
    \${1.2 + 2.3}${1.2 + 2.3}
    \${1.2E4 + 1.4}${1.2E4 + 1.4}
    \${-4 - 2}${-4 - 2}
    \${21 * 2}${21 * 2}
    \${3/4}${3/4}
    \${3 div 4}${3 div 4}
    \${3/0}${3/0}
    \${10%4}${10%4}
    \${10 mod 4}${10 mod 4}
    \${(1==2) ? 3 : 4}${(1==2) ? 3 : 4}
    -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp.html deleted file mode 100755 index e703cde4..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp.html +++ /dev/null @@ -1,90 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Expression Language - Basic Arithmetic</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Expression Language - Basic Arithmetic</h1>
    -    <hr>
    -    This example illustrates basic Expression Language arithmetic.
    -    Addition (+), subtraction (-), multiplication (*), division (/ or div),
    -    and modulus (% or mod) are all supported.  Error conditions, like
    -    division by zero, are handled gracefully.
    -    <br>
    -    <blockquote>
    -      <code>
    -        <table border="1">
    -          <thead>
    -        <td><b>EL Expression</b></td>
    -        <td><b>Result</b></td>
    -      </thead>
    -      <tr>
    -        <td>\${1}</td>
    -        <td>${1}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1 + 2}</td>
    -        <td>${1 + 2}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1.2 + 2.3}</td>
    -        <td>${1.2 + 2.3}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1.2E4 + 1.4}</td>
    -        <td>${1.2E4 + 1.4}</td>
    -      </tr>
    -      <tr>
    -        <td>\${-4 - 2}</td>
    -        <td>${-4 - 2}</td>
    -      </tr>
    -      <tr>
    -        <td>\${21 * 2}</td>
    -        <td>${21 * 2}</td>
    -      </tr>
    -      <tr>
    -        <td>\${3/4}</td>
    -        <td>${3/4}</td>
    -      </tr>
    -      <tr>
    -        <td>\${3 div 4}</td>
    -        <td>${3 div 4}</td>
    -      </tr>
    -      <tr>
    -        <td>\${3/0}</td>
    -        <td>${3/0}</td>
    -      </tr>
    -      <tr>
    -        <td>\${10%4}</td>
    -        <td>${10%4}</td>
    -      </tr>
    -      <tr>
    -        <td>\${10 mod 4}</td>
    -        <td>${10 mod 4}</td>
    -      </tr>
    -    <tr>
    -      <td>\${(1==2) ? 3 : 4}</td>
    -      <td>${(1==2) ? 3 : 4}</td>
    -    </tr>
    -    </table>
    -      </code>
    -    </blockquote>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.html deleted file mode 100755 index 01022320..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -View Source Code - - - - -

    - -

    Source Code for Basic Comparisons Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp deleted file mode 100755 index ce63d5a4..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp +++ /dev/null @@ -1,116 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - JSP 2.0 Expression Language - Basic Comparisons - - -

    JSP 2.0 Expression Language - Basic Comparisons

    -
    - This example illustrates basic Expression Language comparisons. - The following comparison operators are supported: -
      -
    • Less-than (< or lt)
    • -
    • Greater-than (> or gt)
    • -
    • Less-than-or-equal (<= or le)
    • -
    • Greater-than-or-equal (>= or ge)
    • -
    • Equal (== or eq)
    • -
    • Not Equal (!= or ne)
    • -
    -
    - Numeric - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EL ExpressionResult
    \${1 < 2}${1 < 2}
    \${1 lt 2}${1 lt 2}
    \${1 > (4/2)}${1 > (4/2)}
    \${1 gt (4/2)}${1 gt (4/2)}
    \${4.0 >= 3}${4.0 >= 3}
    \${4.0 ge 3}${4.0 ge 3}
    \${4 <= 3}${4 <= 3}
    \${4 le 3}${4 le 3}
    \${100.0 == 100}${100.0 == 100}
    \${100.0 eq 100}${100.0 eq 100}
    \${(10*10) != 100}${(10*10) != 100}
    \${(10*10) ne 100}${(10*10) ne 100}
    -
    -
    - Alphabetic - - - - - - - - - - - - - - - - - - -
    EL ExpressionResult
    \${'a' < 'b'}${'a' < 'b'}
    \${'hip' > 'hit'}${'hip' > 'hit'}
    \${'4' > 3}${'4' > 3}
    -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp.html deleted file mode 100755 index c5db858f..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp.html +++ /dev/null @@ -1,118 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Expression Language - Basic Comparisons</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Expression Language - Basic Comparisons</h1>
    -    <hr>
    -    This example illustrates basic Expression Language comparisons.
    -    The following comparison operators are supported:
    -    <ul>
    -      <li>Less-than (&lt; or lt)</li>
    -      <li>Greater-than (&gt; or gt)</li>
    -      <li>Less-than-or-equal (&lt;= or le)</li>
    -      <li>Greater-than-or-equal (&gt;= or ge)</li>
    -      <li>Equal (== or eq)</li>
    -      <li>Not Equal (!= or ne)</li>
    -    </ul>
    -    <blockquote>
    -      <u><b>Numeric</b></u>
    -      <code>
    -        <table border="1">
    -          <thead>
    -        <td><b>EL Expression</b></td>
    -        <td><b>Result</b></td>
    -      </thead>
    -      <tr>
    -        <td>\${1 &lt; 2}</td>
    -        <td>${1 < 2}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1 lt 2}</td>
    -        <td>${1 lt 2}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1 &gt; (4/2)}</td>
    -        <td>${1 > (4/2)}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1 gt (4/2)}</td>
    -        <td>${1 gt (4/2)}</td>
    -      </tr>
    -      <tr>
    -        <td>\${4.0 &gt;= 3}</td>
    -        <td>${4.0 >= 3}</td>
    -      </tr>
    -      <tr>
    -        <td>\${4.0 ge 3}</td>
    -        <td>${4.0 ge 3}</td>
    -      </tr>
    -      <tr>
    -        <td>\${4 &lt;= 3}</td>
    -        <td>${4 <= 3}</td>
    -      </tr>
    -      <tr>
    -        <td>\${4 le 3}</td>
    -        <td>${4 le 3}</td>
    -      </tr>
    -      <tr>
    -        <td>\${100.0 == 100}</td>
    -        <td>${100.0 == 100}</td>
    -      </tr>
    -      <tr>
    -        <td>\${100.0 eq 100}</td>
    -        <td>${100.0 eq 100}</td>
    -      </tr>
    -      <tr>
    -        <td>\${(10*10) != 100}</td>
    -        <td>${(10*10) != 100}</td>
    -      </tr>
    -      <tr>
    -        <td>\${(10*10) ne 100}</td>
    -        <td>${(10*10) ne 100}</td>
    -      </tr>
    -    </table>
    -      </code>
    -      <br>
    -      <u><b>Alphabetic</b></u>
    -      <code>
    -        <table border="1">
    -          <thead>
    -            <td><b>EL Expression</b></td>
    -            <td><b>Result</b></td>
    -          </thead>
    -          <tr>
    -            <td>\${'a' &lt; 'b'}</td>
    -            <td>${'a' < 'b'}</td>
    -          </tr>
    -          <tr>
    -            <td>\${'hip' &gt; 'hit'}</td>
    -            <td>${'hip' > 'hit'}</td>
    -          </tr>
    -          <tr>
    -            <td>\${'4' &gt; 3}</td>
    -            <td>${'4' > 3}</td>
    -          </tr>
    -        </table>
    -      </code>
    -    </blockquote>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.html deleted file mode 100755 index b8bfa0e6..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.html +++ /dev/null @@ -1,31 +0,0 @@ - - - -View Source Code - - - - -

    - -

    Source Code for composite.jsp

    -

    Source Code for ValuesTag.java

    -

    Source Code for ValuesBean.java

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.jsp deleted file mode 100755 index a8824951..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.jsp +++ /dev/null @@ -1,110 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="my" uri="http://tomcat.apache.org/example-taglib" %> - - - - JSP 2.0 Expression Language - Composite Expressions - - -

    JSP 2.0 Expression Language - Composite Expressions

    -
    - This example illustrates EL composite expressions. Composite expressions - are formed by grouping together multiple EL expressions. Each of them is - evaluated from left to right, coerced to String, all those strings are - concatenated, and the result is coerced to the expected type. - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EL ExpressionTypeResult
    \${'hello'} wo\${'rld'}String${values.stringValue}
    \${'hello'} wo\${'rld'}String
    \${1+2}.\${220}Double${values.doubleValue}
    \${1+2}.\${220}Double
    000\${1}\${7}Long${values.longValue}
    000\${1}\${7}Long
    \${undefinedFoo}hello world\${undefinedBar}String${values.stringValue}
    \${undefinedFoo}hello world\${undefinedBar}String
    \${undefinedFoo}\${undefinedBar}Double${values.doubleValue}
    \${undefinedFoo}\${undefinedBar}Double
    \${undefinedFoo}\${undefinedBar}Long${values.longValue}
    \${undefinedFoo}\${undefinedBar}Long
    -
    -
    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.jsp.html deleted file mode 100755 index 46cae1ca..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/composite.jsp.html +++ /dev/null @@ -1,112 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="my" uri="http://tomcat.apache.org/example-taglib" %>
    -
    -<html>
    -  <head>
    -    <title>JSP 2.0 Expression Language - Composite Expressions</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Expression Language - Composite Expressions</h1>
    -    <hr>
    -    This example illustrates EL composite expressions. Composite expressions
    -    are formed by grouping together multiple EL expressions. Each of them is
    -    evaluated from left to right, coerced to String, all those strings are
    -    concatenated, and the result is coerced to the expected type.
    -
    -    <jsp:useBean id="values" class="jsp2.examples.ValuesBean" />
    -
    -    <blockquote>
    -      <code>
    -        <table border="1">
    -          <thead>
    -        <td><b>EL Expression</b></td>
    -        <td><b>Type</b></td>
    -        <td><b>Result</b></td>
    -      </thead>
    -      <tr>
    -        <td>\${'hello'} wo\${'rld'}</td>
    -        <td>String</td>
    -        <td><jsp:setProperty name="values" property="stringValue" value="${'hello'} wo${'rld'}"/>${values.stringValue}</td>
    -      </tr>
    -      <tr>
    -        <td>\${'hello'} wo\${'rld'}</td>
    -        <td>String</td>
    -        <td><my:values string="${'hello'} wo${'rld'}"/></td>
    -      </tr>
    -      <tr>
    -        <td>\${1+2}.\${220}</td>
    -        <td>Double</td>
    -        <td><jsp:setProperty name="values" property="doubleValue" value="${1+2}.${220}"/>${values.doubleValue}</td>
    -      </tr>
    -      <tr>
    -        <td>\${1+2}.\${220}</td>
    -        <td>Double</td>
    -        <td><my:values double="${1+2}.${220}"/></td>
    -      </tr>
    -      <tr>
    -        <td>000\${1}\${7}</td>
    -        <td>Long</td>
    -        <td><jsp:setProperty name="values" property="longValue" value="000${1}${7}"/>${values.longValue}</td>
    -      </tr>
    -      <tr>
    -        <td>000\${1}\${7}</td>
    -        <td>Long</td>
    -        <td><my:values long="000${1}${7}"/></td>
    -      </tr>
    -      <!--
    -         Undefined values are to be coerced to String, to be "",
    -         https://issues.apache.org/bugzilla/show_bug.cgi?id=47413
    -       -->
    -      <tr>
    -        <td>\${undefinedFoo}hello world\${undefinedBar}</td>
    -        <td>String</td>
    -        <td><jsp:setProperty name="values" property="stringValue" value="${undefinedFoo}hello world${undefinedBar}"/>${values.stringValue}</td>
    -      </tr>
    -      <tr>
    -        <td>\${undefinedFoo}hello world\${undefinedBar}</td>
    -        <td>String</td>
    -        <td><my:values string="${undefinedFoo}hello world${undefinedBar}"/></td>
    -      </tr>
    -      <tr>
    -        <td>\${undefinedFoo}\${undefinedBar}</td>
    -        <td>Double</td>
    -        <td><jsp:setProperty name="values" property="doubleValue" value="${undefinedFoo}${undefinedBar}"/>${values.doubleValue}</td>
    -      </tr>
    -      <tr>
    -        <td>\${undefinedFoo}\${undefinedBar}</td>
    -        <td>Double</td>
    -        <td><my:values double="${undefinedFoo}${undefinedBar}"/></td>
    -      </tr>
    -      <tr>
    -        <td>\${undefinedFoo}\${undefinedBar}</td>
    -        <td>Long</td>
    -        <td><jsp:setProperty name="values" property="longValue" value="${undefinedFoo}${undefinedBar}"/>${values.longValue}</td>
    -      </tr>
    -      <tr>
    -        <td>\${undefinedFoo}\${undefinedBar}</td>
    -        <td>Long</td>
    -        <td><my:values long="${undefinedFoo}${undefinedBar}"/></td>
    -      </tr>
    -    </table>
    -      </code>
    -    </blockquote>
    -  </body>
    -</html>
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.html deleted file mode 100755 index 0fdb080d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.html +++ /dev/null @@ -1,32 +0,0 @@ - - - -View Source Code - - - - -

    - -

    Source Code for functions.jsp -

    -

    Source Code for Functions.java -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.jsp deleted file mode 100755 index 90895aaf..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.jsp +++ /dev/null @@ -1,66 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%> - - - - JSP 2.0 Expression Language - Functions - - -

    JSP 2.0 Expression Language - Functions

    -
    - An upgrade from the JSTL expression language, the JSP 2.0 EL also - allows for simple function invocation. Functions are defined - by tag libraries and are implemented by a Java programmer as - static methods. - -
    - Change Parameter -
    - foo = - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    EL ExpressionResult
    \${param["foo"]}${fn:escapeXml(param["foo"])} 
    \${my:reverse(param["foo"])}${my:reverse(fn:escapeXml(param["foo"]))} 
    \${my:reverse(my:reverse(param["foo"]))}${my:reverse(my:reverse(fn:escapeXml(param["foo"])))} 
    \${my:countVowels(param["foo"])}${my:countVowels(fn:escapeXml(param["foo"]))} 
    -
    -
    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.jsp.html deleted file mode 100755 index ecb761bb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/functions.jsp.html +++ /dev/null @@ -1,68 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%>
    -
    -<html>
    -  <head>
    -    <title>JSP 2.0 Expression Language - Functions</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Expression Language - Functions</h1>
    -    <hr>
    -    An upgrade from the JSTL expression language, the JSP 2.0 EL also
    -    allows for simple function invocation.  Functions are defined
    -    by tag libraries and are implemented by a Java programmer as
    -    static methods.
    -
    -    <blockquote>
    -      <u><b>Change Parameter</b></u>
    -      <form action="functions.jsp" method="GET">
    -          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
    -          <input type="submit">
    -      </form>
    -      <br>
    -      <code>
    -        <table border="1">
    -          <thead>
    -            <td><b>EL Expression</b></td>
    -            <td><b>Result</b></td>
    -          </thead>
    -          <tr>
    -            <td>\${param["foo"]}</td>
    -            <td>${fn:escapeXml(param["foo"])}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${my:reverse(param["foo"])}</td>
    -            <td>${my:reverse(fn:escapeXml(param["foo"]))}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${my:reverse(my:reverse(param["foo"]))}</td>
    -            <td>${my:reverse(my:reverse(fn:escapeXml(param["foo"])))}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${my:countVowels(param["foo"])}</td>
    -            <td>${my:countVowels(fn:escapeXml(param["foo"]))}&nbsp;</td>
    -          </tr>
    -        </table>
    -      </code>
    -    </blockquote>
    -  </body>
    -</html>
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.html deleted file mode 100755 index 2046603a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.html +++ /dev/null @@ -1,31 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for Implicit Objects Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.jsp deleted file mode 100755 index 999ad138..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.jsp +++ /dev/null @@ -1,89 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> - - - - JSP 2.0 Expression Language - Implicit Objects - - -

    JSP 2.0 Expression Language - Implicit Objects

    -
    - This example illustrates some of the implicit objects available - in the Expression Language. The following implicit objects are - available (not all illustrated here): -
      -
    • pageContext - the PageContext object
    • -
    • pageScope - a Map that maps page-scoped attribute names to - their values
    • -
    • requestScope - a Map that maps request-scoped attribute names - to their values
    • -
    • sessionScope - a Map that maps session-scoped attribute names - to their values
    • -
    • applicationScope - a Map that maps application-scoped attribute - names to their values
    • -
    • param - a Map that maps parameter names to a single String - parameter value
    • -
    • paramValues - a Map that maps parameter names to a String[] of - all values for that parameter
    • -
    • header - a Map that maps header names to a single String - header value
    • -
    • headerValues - a Map that maps header names to a String[] of - all values for that header
    • -
    • initParam - a Map that maps context initialization parameter - names to their String parameter value
    • -
    • cookie - a Map that maps cookie names to a single Cookie object.
    • -
    - -
    - Change Parameter -
    - foo = - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EL ExpressionResult
    \${param.foo}${fn:escapeXml(param["foo"])} 
    \${param["foo"]}${fn:escapeXml(param["foo"])} 
    \${header["host"]}${fn:escapeXml(header["host"])} 
    \${header["accept"]}${fn:escapeXml(header["accept"])} 
    \${header["user-agent"]}${fn:escapeXml(header["user-agent"])} 
    -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.jsp.html deleted file mode 100755 index a036a071..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/el/implicit-objects.jsp.html +++ /dev/null @@ -1,91 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    -
    -<html>
    -  <head>
    -    <title>JSP 2.0 Expression Language - Implicit Objects</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    -    <hr>
    -    This example illustrates some of the implicit objects available
    -    in the Expression Language.  The following implicit objects are
    -    available (not all illustrated here):
    -    <ul>
    -      <li>pageContext - the PageContext object</li>
    -      <li>pageScope - a Map that maps page-scoped attribute names to
    -          their values</li>
    -      <li>requestScope - a Map that maps request-scoped attribute names
    -          to their values</li>
    -      <li>sessionScope - a Map that maps session-scoped attribute names
    -          to their values</li>
    -      <li>applicationScope - a Map that maps application-scoped attribute
    -          names to their values</li>
    -      <li>param - a Map that maps parameter names to a single String
    -          parameter value</li>
    -      <li>paramValues - a Map that maps parameter names to a String[] of
    -          all values for that parameter</li>
    -      <li>header - a Map that maps header names to a single String
    -          header value</li>
    -      <li>headerValues - a Map that maps header names to a String[] of
    -          all values for that header</li>
    -      <li>initParam - a Map that maps context initialization parameter
    -          names to their String parameter value</li>
    -      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    -    </ul>
    -
    -    <blockquote>
    -      <u><b>Change Parameter</b></u>
    -      <form action="implicit-objects.jsp" method="GET">
    -          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
    -          <input type="submit">
    -      </form>
    -      <br>
    -      <code>
    -        <table border="1">
    -          <thead>
    -            <td><b>EL Expression</b></td>
    -            <td><b>Result</b></td>
    -          </thead>
    -          <tr>
    -            <td>\${param.foo}</td>
    -            <td>${fn:escapeXml(param["foo"])}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${param["foo"]}</td>
    -            <td>${fn:escapeXml(param["foo"])}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${header["host"]}</td>
    -            <td>${fn:escapeXml(header["host"])}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${header["accept"]}</td>
    -            <td>${fn:escapeXml(header["accept"])}&nbsp;</td>
    -          </tr>
    -          <tr>
    -            <td>\${header["user-agent"]}</td>
    -            <td>${fn:escapeXml(header["user-agent"])}&nbsp;</td>
    -          </tr>
    -        </table>
    -      </code>
    -    </blockquote>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/FooBean.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/FooBean.java.html deleted file mode 100755 index 2711b30a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/FooBean.java.html +++ /dev/null @@ -1,38 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples;
    -
    -public class FooBean {
    -    private String bar;
    -
    -    public FooBean() {
    -        bar = "Initial value";
    -    }
    -
    -    public String getBar() {
    -        return this.bar;
    -    }
    -
    -    public void setBar(String bar) {
    -        this.bar = bar;
    -    }
    -
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/HelloWorldSimpleTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/HelloWorldSimpleTag.java.html deleted file mode 100755 index 6fb9b0dc..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/HelloWorldSimpleTag.java.html +++ /dev/null @@ -1,36 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import java.io.IOException;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -/**
    - * SimpleTag handler that prints "Hello, world!"
    - */
    -public class HelloWorldSimpleTag extends SimpleTagSupport {
    -    @Override
    -    public void doTag() throws JspException, IOException {
    -        getJspContext().getOut().write( "Hello, world!" );
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/ShuffleSimpleTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/ShuffleSimpleTag.java.html deleted file mode 100755 index 806cf7b9..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/ShuffleSimpleTag.java.html +++ /dev/null @@ -1,89 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import java.io.IOException;
    -import java.util.Random;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.tagext.JspFragment;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -/**
    - * SimpleTag handler that accepts takes three attributes of type
    - * JspFragment and invokes then in a random order.
    - */
    -public class ShuffleSimpleTag extends SimpleTagSupport {
    -    // No need for this to use SecureRandom
    -    private static Random random = new Random();
    -
    -    private JspFragment fragment1;
    -    private JspFragment fragment2;
    -    private JspFragment fragment3;
    -
    -    @Override
    -    public void doTag() throws JspException, IOException {
    -        switch(random.nextInt(6)) {
    -            case 0:
    -                fragment1.invoke( null );
    -                fragment2.invoke( null );
    -                fragment3.invoke( null );
    -                break;
    -            case 1:
    -                fragment1.invoke( null );
    -                fragment3.invoke( null );
    -                fragment2.invoke( null );
    -                break;
    -            case 2:
    -                fragment2.invoke( null );
    -                fragment1.invoke( null );
    -                fragment3.invoke( null );
    -                break;
    -            case 3:
    -                fragment2.invoke( null );
    -                fragment3.invoke( null );
    -                fragment1.invoke( null );
    -                break;
    -            case 4:
    -                fragment3.invoke( null );
    -                fragment1.invoke( null );
    -                fragment2.invoke( null );
    -                break;
    -            case 5:
    -                fragment3.invoke( null );
    -                fragment2.invoke( null );
    -                fragment1.invoke( null );
    -                break;
    -        }
    -    }
    -
    -    public void setFragment1( JspFragment fragment1 ) {
    -        this.fragment1 = fragment1;
    -    }
    -
    -    public void setFragment2( JspFragment fragment2 ) {
    -        this.fragment2 = fragment2;
    -    }
    -
    -    public void setFragment3( JspFragment fragment3 ) {
    -        this.fragment3 = fragment3;
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/TileSimpleTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/TileSimpleTag.java.html deleted file mode 100755 index 2cd454b0..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/TileSimpleTag.java.html +++ /dev/null @@ -1,50 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import java.io.IOException;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -/**
    - * Displays a tile as a single cell in a table.
    - */
    -public class TileSimpleTag extends SimpleTagSupport {
    -    private String color;
    -    private String label;
    -
    -    @Override
    -    public void doTag() throws JspException, IOException {
    -        getJspContext().getOut().write(
    -                "<td width=\"32\" height=\"32\" bgcolor=\"" + this.color +
    -                "\"><font color=\"#ffffff\"><center>" + this.label +
    -                "</center></font></td>" );
    -    }
    -
    -    public void setColor( String color ) {
    -        this.color = color;
    -    }
    -
    -    public void setLabel( String label ) {
    -        this.label = label;
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.html deleted file mode 100755 index b949da95..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.html +++ /dev/null @@ -1,37 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for jspattribute.jsp -

    - -

    Source Code for HelloWorldSimpleTag.java -

    - -

    Source Code for FooBean.java -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp deleted file mode 100755 index 02abbd14..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp +++ /dev/null @@ -1,46 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%> - - - - JSP 2.0 Examples - jsp:attribute and jsp:body - - -

    JSP 2.0 Examples - jsp:attribute and jsp:body

    -
    -

    The new <jsp:attribute> and <jsp:body> - standard actions can be used to specify the value of any standard - action or custom action attribute.

    -

    This example uses the <jsp:attribute> - standard action to use the output of a custom action invocation - (one that simply outputs "Hello, World!") to set the value of a - bean property. This would normally require an intermediary - step, such as using JSTL's <c:set> action.

    -
    - - Bean created! Setting foo.bar...
    - - - - - -
    -
    - Result: ${foo.bar} - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp.html deleted file mode 100755 index 088ed206..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp.html +++ /dev/null @@ -1,48 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%>
    -
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - jsp:attribute and jsp:body</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - jsp:attribute and jsp:body</h1>
    -    <hr>
    -    <p>The new &lt;jsp:attribute&gt; and &lt;jsp:body&gt;
    -    standard actions can be used to specify the value of any standard
    -    action or custom action attribute.</p>
    -    <p>This example uses the &lt;jsp:attribute&gt;
    -    standard action to use the output of a custom action invocation
    -    (one that simply outputs "Hello, World!") to set the value of a
    -    bean property.  This would normally require an intermediary
    -    step, such as using JSTL's &lt;c:set&gt; action.</p>
    -    <br>
    -    <jsp:useBean id="foo" class="jsp2.examples.FooBean">
    -      Bean created!  Setting foo.bar...<br>
    -      <jsp:setProperty name="foo" property="bar">
    -        <jsp:attribute name="value">
    -          <my:helloWorld/>
    -        </jsp:attribute>
    -      </jsp:setProperty>
    -    </jsp:useBean>
    -    <br>
    -    Result: ${foo.bar}
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.html deleted file mode 100755 index b7a4cb6e..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.html +++ /dev/null @@ -1,37 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for shuffle.jsp -

    - -

    Source Code for ShuffleSimpleTag.java -

    - -

    Source Code for TileSimpleTag.java -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp deleted file mode 100755 index 424af355..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp +++ /dev/null @@ -1,90 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%> - - - - JSP 2.0 Examples - Shuffle Example - - -

    JSP 2.0 Examples - Shuffle Example

    -
    -

    Try reloading the page a few times. Both the rows and the columns - are shuffled and appear different each time.

    -

    Here's how the code works. The SimpleTag handler called - <my:shuffle> accepts three attributes. Each attribute is a - JSP Fragment, meaning it is a fragment of JSP code that can be - dynamically executed by the shuffle tag handler on demand. The - shuffle tag handler executes the three fragments in a random order. - To shuffle both the rows and the columns, the shuffle tag is used - with itself as a parameter.

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp.html deleted file mode 100755 index 231eba61..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp.html +++ /dev/null @@ -1,92 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%>
    -
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Shuffle Example</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Shuffle Example</h1>
    -    <hr>
    -    <p>Try reloading the page a few times.  Both the rows and the columns
    -    are shuffled and appear different each time.</p>
    -    <p>Here's how the code works.  The SimpleTag handler called
    -    &lt;my:shuffle&gt; accepts three attributes.  Each attribute is a
    -    JSP Fragment, meaning it is a fragment of JSP code that can be
    -    dynamically executed by the shuffle tag handler on demand.  The
    -    shuffle tag handler executes the three fragments in a random order.
    -    To shuffle both the rows and the columns, the shuffle tag is used
    -    with itself as a parameter.</p>
    -    <hr>
    -    <blockquote>
    -     <font color="#ffffff">
    -      <table>
    -        <my:shuffle>
    -          <jsp:attribute name="fragment1">
    -            <tr>
    -              <my:shuffle>
    -                <jsp:attribute name="fragment1">
    -                  <my:tile color="#ff0000" label="A"/>
    -                </jsp:attribute>
    -                <jsp:attribute name="fragment2">
    -                  <my:tile color="#00ff00" label="B"/>
    -                </jsp:attribute>
    -                <jsp:attribute name="fragment3">
    -                  <my:tile color="#0000ff" label="C"/>
    -                </jsp:attribute>
    -              </my:shuffle>
    -            </tr>
    -          </jsp:attribute>
    -          <jsp:attribute name="fragment2">
    -            <tr>
    -              <my:shuffle>
    -                <jsp:attribute name="fragment1">
    -                  <my:tile color="#ff0000" label="1"/>
    -                </jsp:attribute>
    -                <jsp:attribute name="fragment2">
    -                  <my:tile color="#00ff00" label="2"/>
    -                </jsp:attribute>
    -                <jsp:attribute name="fragment3">
    -                  <my:tile color="#0000ff" label="3"/>
    -                </jsp:attribute>
    -              </my:shuffle>
    -            </tr>
    -          </jsp:attribute>
    -          <jsp:attribute name="fragment3">
    -            <tr>
    -              <my:shuffle>
    -                <jsp:attribute name="fragment1">
    -                  <my:tile color="#ff0000" label="!"/>
    -                </jsp:attribute>
    -                <jsp:attribute name="fragment2">
    -                  <my:tile color="#00ff00" label="@"/>
    -                </jsp:attribute>
    -                <jsp:attribute name="fragment3">
    -                  <my:tile color="#0000ff" label="#"/>
    -                </jsp:attribute>
    -              </my:shuffle>
    -            </tr>
    -          </jsp:attribute>
    -        </my:shuffle>
    -      </table>
    -     </font>
    -    </blockquote>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.html deleted file mode 100755 index 2e58dffa..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.html +++ /dev/null @@ -1,31 +0,0 @@ - - - -View Source Code - - - - -

    - -

    Source Code for XHTML Basic Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.jspx b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.jspx deleted file mode 100755 index ba53d8da..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.jspx +++ /dev/null @@ -1,46 +0,0 @@ - - - - - JSPX - XHTML Basic Example - - -

    JSPX - XHTML Basic Example

    -
    - This example illustrates how to use JSPX to produce an XHTML basic - document suitable for use with mobile phones, televisions, - PDAs, vending machines, pagers, car navigation systems, - mobile game machines, digital book readers, smart watches, etc. -

    - JSPX lets you create dynamic documents in a pure XML syntax compatible - with existing XML tools. The XML syntax in JSP 1.2 was awkward and - required &lt;jsp:root&gt; to be the root element of the document. - This is no longer the case in JSP 2.0. -

    - This particular example uses a tag file to produce the DOCTYPE and - namespace declarations to make the output of this page a valid XHTML - Basic document. -

    - Just to prove this is live, here's some dynamic content: - - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.jspx.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.jspx.html deleted file mode 100755 index 21165389..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/basic.jspx.html +++ /dev/null @@ -1,48 +0,0 @@ -

    -<!--
    -  Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<tags:xhtmlbasic xmlns:tags="urn:jsptagdir:/WEB-INF/tags"
    -                 xmlns:jsp="http://java.sun.com/JSP/Page"
    -                 xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
    -                 xmlns="http://www.w3.org/1999/xhtml">
    -  <jsp:directive.page contentType="text/html" />
    -  <head>
    -    <title>JSPX - XHTML Basic Example</title>
    -  </head>
    -  <body>
    -    <h1>JSPX - XHTML Basic Example</h1>
    -    <hr/>
    -    This example illustrates how to use JSPX to produce an XHTML basic
    -    document suitable for use with mobile phones, televisions,
    -    PDAs, vending machines, pagers, car navigation systems,
    -    mobile game machines, digital book readers, smart watches, etc.
    -    <p/>
    -    JSPX lets you create dynamic documents in a pure XML syntax compatible
    -    with existing XML tools.  The XML syntax in JSP 1.2 was awkward and
    -    required &amp;lt;jsp:root&amp;gt; to be the root element of the document.
    -    This is no longer the case in JSP 2.0.
    -    <p/>
    -    This particular example uses a tag file to produce the DOCTYPE and
    -    namespace declarations to make the output of this page a valid XHTML
    -    Basic document.
    -    <p/>
    -    Just to prove this is live, here's some dynamic content:
    -    <jsp:useBean id="now" class="java.util.Date" />
    -    <fmt:formatDate value="${now}" pattern="MMMM d, yyyy, H:mm:ss"/>
    -  </body>
    -</tags:xhtmlbasic>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/svgexample.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/svgexample.html deleted file mode 100755 index 6ef1b445..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/svgexample.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - JSP 2.0 SVG Example - - -

    JSP 2.0 SVG Example

    -
    - This example uses JSP 2.0's new, simplified JSPX syntax to render a - Scalable Vector Graphics (SVG) document. When you view the source, - notice the lack of a <jsp:root> element! The text to be rendered - can be modified by changing the value of the name parameter. -

    - SVG has many potential uses, such as searchable images, or images - customized with the name of your site's visitor (e.g. a "Susan's Store" - tab image). JSPX is a natural fit for generating dynamic XML content - such as SVG. -

    - To execute this example, follow these steps: -

      -
    1. Download Apache Batik, - or any other SVG viewer.
    2. -
    3. Copy the following URL: - - http://localhost:8080/examples/jsp/jsp2/jspx/textRotate.jspx?name=JSPX -
    4. -
    5. Paste the URL into Batik's Location field and press Enter
    6. -
    7. Customize by changing the name=JSPX parameter
    8. -
    -
    - The following is a screenshot of the resulting image, for those that - don't have an SVG viewer: -
    - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.html deleted file mode 100755 index e54588ff..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.html +++ /dev/null @@ -1,32 +0,0 @@ - - - -View Source Code - - - - -

    - -

    Source Code for SVG (Scalable Vector Graphics) -Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jpg b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jpg deleted file mode 100755 index 9e987367..00000000 Binary files a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jpg and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jspx b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jspx deleted file mode 100755 index 2ade5d18..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jspx +++ /dev/null @@ -1,52 +0,0 @@ - - - - - JSP 2.0 JSPX - - - - - JSP 2.0 XML Syntax (.jspx) Demo - - Try changing the name parameter! - - - - <g opacity="0.95" transform="scale(1.05) rotate(15)"> - - ${name} - - - </g> - - ${name} - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jspx.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jspx.html deleted file mode 100755 index 03138385..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/jspx/textRotate.jspx.html +++ /dev/null @@ -1,54 +0,0 @@ -
    -<!--
    -  Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<!--
    -  - This example is based off the textRotate.svg example that comes
    -  - with Apache Batik.  The original example was written by Bill Haneman.
    -  - This version by Mark Roth.
    -  -->
    -<svg xmlns="http://www.w3.org/2000/svg"
    -     width="450" height="500" viewBox="0 0 450 500"
    -     xmlns:c="http://java.sun.com/jsp/jstl/core"
    -     xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    -     xmlns:jsp="http://java.sun.com/JSP/Page">
    -  <jsp:directive.page contentType="image/svg+xml" />
    -  <title>JSP 2.0 JSPX</title>
    -  <!-- select name parameter, or default to JSPX -->
    -  <c:set var="name" value='${empty fn:escapeXml(param["name"]) ? "JSPX" : fn:escapeXml(param["name"])}'/>
    -  <g id="testContent">
    -    <text class="title" x="50%" y="10%" font-size="15" text-anchor="middle" >
    -            JSP 2.0 XML Syntax (.jspx) Demo</text>
    -    <text class="title" x="50%" y="15%" font-size="15" text-anchor="middle" >
    -            Try changing the name parameter!</text>
    -    <g opacity="1.0" transform="translate(225, 250)" id="rotatedText">
    -      <c:forEach var="i" begin="1" end="24">
    -        <jsp:text>
    -          <![CDATA[<g opacity="0.95" transform="scale(1.05) rotate(15)">]]>
    -        </jsp:text>
    -        <text x="0" y="0" transform="scale(1.6, 1.6)" fill="DarkSlateBlue"
    -              text-anchor="middle" font-size="40" font-family="Serif"
    -              id="words">${name}</text>
    -      </c:forEach>
    -      <c:forEach var="i" begin="1" end="24">
    -        <jsp:text><![CDATA[</g>]]></jsp:text>
    -      </c:forEach>
    -      <text style="font-size:75;font-family:Serif;fill:white"
    -            text-anchor="middle">${name}</text>
    -    </g>
    -  </g>
    -</svg>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/EchoAttributesTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/EchoAttributesTag.java.html deleted file mode 100755 index 9b25ba0c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/EchoAttributesTag.java.html +++ /dev/null @@ -1,59 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import java.io.IOException;
    -import java.util.ArrayList;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.JspWriter;
    -import javax.servlet.jsp.tagext.DynamicAttributes;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -/**
    - * SimpleTag handler that echoes all its attributes
    - */
    -public class EchoAttributesTag
    -    extends SimpleTagSupport
    -    implements DynamicAttributes
    -{
    -    private ArrayList<String> keys = new ArrayList<String>();
    -    private ArrayList<Object> values = new ArrayList<Object>();
    -
    -    @Override
    -    public void doTag() throws JspException, IOException {
    -        JspWriter out = getJspContext().getOut();
    -        for( int i = 0; i < keys.size(); i++ ) {
    -            String key = keys.get( i );
    -            Object value = values.get( i );
    -            out.println( "<li>" + key + " = " + value + "</li>" );
    -        }
    -    }
    -
    -    @Override
    -    public void setDynamicAttribute( String uri, String localName,
    -        Object value )
    -        throws JspException
    -    {
    -        keys.add( localName );
    -        values.add( value );
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/coda.jspf b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/coda.jspf deleted file mode 100755 index 20de7f62..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/coda.jspf +++ /dev/null @@ -1,21 +0,0 @@ - -
    -
    -This banner included with <include-coda> -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/coda.jspf.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/coda.jspf.html deleted file mode 100755 index ef5a1b3a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/coda.jspf.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -<!--
    -  Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<hr>
    -<center>
    -This banner included with &lt;include-coda&gt;
    -</center>
    -<hr>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.html deleted file mode 100755 index ebd2f4cb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for config.jsp -

    -

    Source Code for prelude.jspf -

    -

    Source Code for coda.jspf -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.jsp deleted file mode 100755 index 51608c7e..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.jsp +++ /dev/null @@ -1,32 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%> -

    JSP 2.0 Examples - JSP Configuration

    -
    -

    Using a <jsp-property-group> element in the web.xml - deployment descriptor, this JSP page has been configured in the - following ways:

    -
      -
    • Uses <include-prelude> to include the top banner.
    • -
    • Uses <include-coda> to include the bottom banner.
    • -
    • Uses <scripting-invalid> true to disable - <% scripting %> elements
    • -
    • Uses <el-ignored> true to disable ${EL} elements
    • -
    • Uses <page-encoding> ISO-8859-1 to set the page encoding (though this is the default anyway)
    • -
    - There are various other configuration options that can be used. - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.jsp.html deleted file mode 100755 index dbfc450a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/config.jsp.html +++ /dev/null @@ -1,34 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%>
    -    <h1>JSP 2.0 Examples - JSP Configuration</h1>
    -    <hr>
    -    <p>Using a &lt;jsp-property-group&gt; element in the web.xml
    -    deployment descriptor, this JSP page has been configured in the
    -    following ways:</p>
    -    <ul>
    -      <li>Uses &lt;include-prelude&gt; to include the top banner.</li>
    -      <li>Uses &lt;include-coda&gt; to include the bottom banner.</li>
    -      <li>Uses &lt;scripting-invalid&gt; true to disable
    -          &lt;% scripting %&gt; elements</li>
    -      <li>Uses &lt;el-ignored&gt; true to disable ${EL} elements</li>
    -      <li>Uses &lt;page-encoding&gt; ISO-8859-1 to set the page encoding (though this is the default anyway)</li>
    -    </ul>
    -    There are various other configuration options that can be used.
    -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.html deleted file mode 100755 index a02a987a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for dynamicattrs.jsp -

    -

    Source Code for EchoAttributesTag.java -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp deleted file mode 100755 index b351741a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp +++ /dev/null @@ -1,44 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%> - - - JSP 2.0 Examples - Dynamic Attributes - - -

    JSP 2.0 Examples - Dynamic Attributes

    -
    -

    This JSP page invokes a custom tag that accepts a dynamic set - of attributes. The tag echoes the name and value of all attributes - passed to it.

    -
    -

    Invocation 1 (six attributes)

    -
      - -
    -

    Invocation 2 (zero attributes)

    -
      - -
    -

    Invocation 3 (three attributes)

    -
      - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp.html deleted file mode 100755 index 1179f82d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="my" uri="http://tomcat.apache.org/jsp2-example-taglib"%>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Dynamic Attributes</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Dynamic Attributes</h1>
    -    <hr>
    -    <p>This JSP page invokes a custom tag that accepts a dynamic set
    -    of attributes.  The tag echoes the name and value of all attributes
    -    passed to it.</p>
    -    <hr>
    -    <h2>Invocation 1 (six attributes)</h2>
    -    <ul>
    -      <my:echoAttributes x="1" y="2" z="3" r="red" g="green" b="blue"/>
    -    </ul>
    -    <h2>Invocation 2 (zero attributes)</h2>
    -    <ul>
    -      <my:echoAttributes/>
    -    </ul>
    -    <h2>Invocation 3 (three attributes)</h2>
    -    <ul>
    -      <my:echoAttributes dogName="Scruffy"
    -                         catName="Fluffy"
    -                         blowfishName="Puffy"/>
    -    </ul>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/prelude.jspf b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/prelude.jspf deleted file mode 100755 index 9772e1c4..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/prelude.jspf +++ /dev/null @@ -1,21 +0,0 @@ - -
    -
    -This banner included with <include-prelude> -
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/prelude.jspf.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/prelude.jspf.html deleted file mode 100755 index f928f180..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/misc/prelude.jspf.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -<!--
    -  Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<hr>
    -<center>
    -This banner included with &lt;include-prelude&gt;
    -</center>
    -<hr>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/BookBean.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/BookBean.java.html deleted file mode 100755 index 143d7544..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/BookBean.java.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples;
    -
    -public class BookBean {
    -    private String title;
    -    private String author;
    -    private String isbn;
    -
    -    public BookBean( String title, String author, String isbn ) {
    -        this.title = title;
    -        this.author = author;
    -        this.isbn = isbn;
    -    }
    -
    -    public String getTitle() {
    -        return this.title;
    -    }
    -
    -    public String getAuthor() {
    -        return this.author;
    -    }
    -
    -    public String getIsbn() {
    -        return this.isbn;
    -    }
    -
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/FindBookSimpleTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/FindBookSimpleTag.java.html deleted file mode 100755 index 246df1fe..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/FindBookSimpleTag.java.html +++ /dev/null @@ -1,48 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -import jsp2.examples.BookBean;
    -
    -/**
    - * SimpleTag handler that pretends to search for a book, and stores
    - * the result in a scoped variable.
    - */
    -public class FindBookSimpleTag extends SimpleTagSupport {
    -    private String var;
    -
    -    private static final String BOOK_TITLE = "The Lord of the Rings";
    -    private static final String BOOK_AUTHOR = "J. R. R. Tolkein";
    -    private static final String BOOK_ISBN = "0618002251";
    -
    -    @Override
    -    public void doTag() throws JspException {
    -        BookBean book = new BookBean( BOOK_TITLE, BOOK_AUTHOR, BOOK_ISBN );
    -        getJspContext().setAttribute( this.var, book );
    -    }
    -
    -    public void setVar( String var ) {
    -        this.var = var;
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/Functions.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/Functions.java.html deleted file mode 100755 index 91abc754..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/Functions.java.html +++ /dev/null @@ -1,47 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -package jsp2.examples.el;
    -
    -import java.util.Locale;
    -
    -/**
    - * Defines the functions for the jsp2 example tag library.
    - *
    - * <p>Each function is defined as a static method.</p>
    - */
    -public class Functions {
    -    public static String reverse( String text ) {
    -        return new StringBuilder( text ).reverse().toString();
    -    }
    -
    -    public static int numVowels( String text ) {
    -        String vowels = "aeiouAEIOU";
    -        int result = 0;
    -        for( int i = 0; i < text.length(); i++ ) {
    -            if( vowels.indexOf( text.charAt( i ) ) != -1 ) {
    -                result++;
    -            }
    -        }
    -        return result;
    -    }
    -
    -    public static String caps( String text ) {
    -        return text.toUpperCase(Locale.ENGLISH);
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/HelloWorldSimpleTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/HelloWorldSimpleTag.java.html deleted file mode 100755 index 6fb9b0dc..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/HelloWorldSimpleTag.java.html +++ /dev/null @@ -1,36 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import java.io.IOException;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -/**
    - * SimpleTag handler that prints "Hello, world!"
    - */
    -public class HelloWorldSimpleTag extends SimpleTagSupport {
    -    @Override
    -    public void doTag() throws JspException, IOException {
    -        getJspContext().getOut().write( "Hello, world!" );
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/RepeatSimpleTag.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/RepeatSimpleTag.java.html deleted file mode 100755 index 852ac2ab..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/RepeatSimpleTag.java.html +++ /dev/null @@ -1,46 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -
    -package jsp2.examples.simpletag;
    -
    -import java.io.IOException;
    -
    -import javax.servlet.jsp.JspException;
    -import javax.servlet.jsp.tagext.SimpleTagSupport;
    -
    -/**
    - * SimpleTag handler that accepts a num attribute and
    - * invokes its body 'num' times.
    - */
    -public class RepeatSimpleTag extends SimpleTagSupport {
    -    private int num;
    -
    -    @Override
    -    public void doTag() throws JspException, IOException {
    -        for (int i=0; i<num; i++) {
    -            getJspContext().setAttribute("count", String.valueOf( i + 1 ) );
    -            getJspBody().invoke(null);
    -        }
    -    }
    -
    -    public void setNum(int num) {
    -        this.num = num;
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.html deleted file mode 100755 index 62cf2843..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.html +++ /dev/null @@ -1,37 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for the Book Example JSP -

    -

    Source Code for the FindBook SimpleTag Handler -

    -

    Source Code for BookBean -

    -

    Source Code for the EL Functions -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.jsp deleted file mode 100755 index 069bd372..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.jsp +++ /dev/null @@ -1,55 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="my" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %> - - - JSP 2.0 Examples - Book SimpleTag Handler - - -

    JSP 2.0 Examples - Book SimpleTag Handler

    -
    -

    Illustrates a semi-realistic use of SimpleTag and the Expression - Language. First, a <my:findBook> tag is invoked to populate - the page context with a BookBean. Then, the books fields are printed - in all caps.

    -
    - Result:
    - - - - - - - - - - - - - - - - - - - - - - -
    FieldValueCapitalized
    Title${book.title}${my:caps(book.title)}
    Author${book.author}${my:caps(book.author)}
    ISBN${book.isbn}${my:caps(book.isbn)}
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.jsp.html deleted file mode 100755 index 4d242ab3..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/book.jsp.html +++ /dev/null @@ -1,57 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="my" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Book SimpleTag Handler</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Book SimpleTag Handler</h1>
    -    <hr>
    -    <p>Illustrates a semi-realistic use of SimpleTag and the Expression
    -    Language.  First, a &lt;my:findBook&gt; tag is invoked to populate
    -    the page context with a BookBean.  Then, the books fields are printed
    -    in all caps.</p>
    -    <br>
    -    <b><u>Result:</u></b><br>
    -    <my:findBook var="book"/>
    -    <table border="1">
    -        <thead>
    -        <td><b>Field</b></td>
    -        <td><b>Value</b></td>
    -        <td><b>Capitalized</b></td>
    -    </thead>
    -    <tr>
    -        <td>Title</td>
    -        <td>${book.title}</td>
    -        <td>${my:caps(book.title)}</td>
    -    </tr>
    -    <tr>
    -        <td>Author</td>
    -        <td>${book.author}</td>
    -        <td>${my:caps(book.author)}</td>
    -    </tr>
    -    <tr>
    -        <td>ISBN</td>
    -        <td>${book.isbn}</td>
    -        <td>${my:caps(book.isbn)}</td>
    -    </tr>
    -    </table>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.html deleted file mode 100755 index 1e7dfcb9..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for the Hello World Tag Example JSP -

    -

    Source Code for the Hello World SimpleTag Handler -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.jsp deleted file mode 100755 index d5ebf98d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.jsp +++ /dev/null @@ -1,31 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %> - - - JSP 2.0 Examples - Hello World SimpleTag Handler - - -

    JSP 2.0 Examples - Hello World SimpleTag Handler

    -
    -

    This tag handler simply echos "Hello, World!" It's an example of - a very basic SimpleTag handler with no body.

    -
    - Result: - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.jsp.html deleted file mode 100755 index e43a05f1..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/hello.jsp.html +++ /dev/null @@ -1,33 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Hello World SimpleTag Handler</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Hello World SimpleTag Handler</h1>
    -    <hr>
    -    <p>This tag handler simply echos "Hello, World!"  It's an example of
    -    a very basic SimpleTag handler with no body.</p>
    -    <br>
    -    <b><u>Result:</u></b>
    -    <mytag:helloWorld/>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.html deleted file mode 100755 index 18ff5ed3..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for the Repeat Tag Example JSP -

    -

    Source Code for the Repeat SimpleTag Handler -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.jsp deleted file mode 100755 index f66bdded..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.jsp +++ /dev/null @@ -1,39 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %> - - - JSP 2.0 Examples - Repeat SimpleTag Handler - - -

    JSP 2.0 Examples - Repeat SimpleTag Handler

    -
    -

    This tag handler accepts a "num" parameter and repeats the body of the - tag "num" times. It's a simple example, but the implementation of - such a tag in JSP 2.0 is substantially simpler than the equivalent - JSP 1.2-style classic tag handler.

    -

    The body of the tag is encapsulated in a "JSP Fragment" and passed - to the tag handler, which then executes it five times, inside a - for loop. The tag handler passes in the current invocation in a - scoped variable called count, which can be accessed using the EL.

    -
    - Result:
    - - Invocation ${count} of 5
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.jsp.html deleted file mode 100755 index a3bd71ec..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/simpletag/repeat.jsp.html +++ /dev/null @@ -1,41 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Repeat SimpleTag Handler</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Repeat SimpleTag Handler</h1>
    -    <hr>
    -    <p>This tag handler accepts a "num" parameter and repeats the body of the
    -    tag "num" times.  It's a simple example, but the implementation of
    -    such a tag in JSP 2.0 is substantially simpler than the equivalent
    -    JSP 1.2-style classic tag handler.</p>
    -    <p>The body of the tag is encapsulated in a "JSP Fragment" and passed
    -    to the tag handler, which then executes it five times, inside a
    -    for loop.  The tag handler passes in the current invocation in a
    -    scoped variable called count, which can be accessed using the EL.</p>
    -    <br>
    -    <b><u>Result:</u></b><br>
    -    <mytag:repeat num="5">
    -      Invocation ${count} of 5<br>
    -    </mytag:repeat>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/displayProducts.tag.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/displayProducts.tag.html deleted file mode 100755 index 7898fe26..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/displayProducts.tag.html +++ /dev/null @@ -1,57 +0,0 @@ -
    -<!--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    -<%@ attribute name="normalPrice" fragment="true" %>
    -<%@ attribute name="onSale" fragment="true" %>
    -<%@ variable name-given="name" %>
    -<%@ variable name-given="price" %>
    -<%@ variable name-given="origPrice" %>
    -<%@ variable name-given="salePrice" %>
    -
    -<table border="1">
    -  <tr>
    -    <td>
    -      <c:set var="name" value="Hand-held Color PDA"/>
    -      <c:set var="price" value="$298.86"/>
    -      <jsp:invoke fragment="normalPrice"/>
    -    </td>
    -    <td>
    -      <c:set var="name" value="4-Pack 150 Watt Light Bulbs"/>
    -      <c:set var="origPrice" value="$2.98"/>
    -      <c:set var="salePrice" value="$2.32"/>
    -      <jsp:invoke fragment="onSale"/>
    -    </td>
    -    <td>
    -      <c:set var="name" value="Digital Cellular Phone"/>
    -      <c:set var="price" value="$68.74"/>
    -      <jsp:invoke fragment="normalPrice"/>
    -    </td>
    -    <td>
    -      <c:set var="name" value="Baby Grand Piano"/>
    -      <c:set var="price" value="$10,800.00"/>
    -      <jsp:invoke fragment="normalPrice"/>
    -    </td>
    -    <td>
    -      <c:set var="name" value="Luxury Car w/ Leather Seats"/>
    -      <c:set var="origPrice" value="$23,980.00"/>
    -      <c:set var="salePrice" value="$21,070.00"/>
    -      <jsp:invoke fragment="onSale"/>
    -    </td>
    -  </tr>
    -</table>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.html deleted file mode 100755 index aab12a7f..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for hello.jsp -

    -

    Source Code for helloWorld.tag -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.jsp deleted file mode 100755 index a5d99990..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.jsp +++ /dev/null @@ -1,35 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> - - - JSP 2.0 Examples - Hello World Using a Tag File - - -

    JSP 2.0 Examples - Hello World Using a Tag File

    -
    -

    This JSP page invokes a custom tag that simply echos "Hello, World!" - The custom tag is generated from a tag file in the /WEB-INF/tags - directory.

    -

    Notice that we did not need to write a TLD for this tag. We just - created /WEB-INF/tags/helloWorld.tag, imported it using the taglib - directive, and used it!

    -
    - Result: - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.jsp.html deleted file mode 100755 index 4fbd217c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/hello.jsp.html +++ /dev/null @@ -1,37 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Hello World Using a Tag File</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Hello World Using a Tag File</h1>
    -    <hr>
    -    <p>This JSP page invokes a custom tag that simply echos "Hello, World!"
    -    The custom tag is generated from a tag file in the /WEB-INF/tags
    -    directory.</p>
    -    <p>Notice that we did not need to write a TLD for this tag.  We just
    -    created /WEB-INF/tags/helloWorld.tag, imported it using the taglib
    -    directive, and used it!</p>
    -    <br>
    -    <b><u>Result:</u></b>
    -    <tags:helloWorld/>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/helloWorld.tag.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/helloWorld.tag.html deleted file mode 100755 index e3359862..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/helloWorld.tag.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -<!--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -Hello, world!
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.html deleted file mode 100755 index 161b70de..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for panel.jsp -

    -

    Source Code for panel.tag -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.jsp deleted file mode 100755 index 56f73b6d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.jsp +++ /dev/null @@ -1,58 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> - - - JSP 2.0 Examples - Panels using Tag Files - - -

    JSP 2.0 Examples - Panels using Tag Files

    -
    -

    This JSP page invokes a custom tag that draws a - panel around the contents of the tag body. Normally, such a tag - implementation would require a Java class with many println() statements, - outputting HTML. Instead, we can use a .tag file as a template, - and we don't need to write a single line of Java or even a TLD!

    -
    - - - - - - -
    - - First panel.
    -
    -
    - - Second panel.
    - Second panel.
    - Second panel.
    - Second panel.
    -
    -
    - - Third panel.
    - - A panel in a panel. - - Third panel.
    -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.jsp.html deleted file mode 100755 index 4a8277c7..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.jsp.html +++ /dev/null @@ -1,60 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Panels using Tag Files</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Panels using Tag Files</h1>
    -    <hr>
    -    <p>This JSP page invokes a custom tag that draws a
    -    panel around the contents of the tag body.  Normally, such a tag
    -    implementation would require a Java class with many println() statements,
    -    outputting HTML.  Instead, we can use a .tag file as a template,
    -    and we don't need to write a single line of Java or even a TLD!</p>
    -    <hr>
    -    <table border="0">
    -      <tr valign="top">
    -        <td>
    -          <tags:panel color="#ff8080" bgcolor="#ffc0c0" title="Panel 1">
    -            First panel.<br/>
    -          </tags:panel>
    -        </td>
    -        <td>
    -          <tags:panel color="#80ff80" bgcolor="#c0ffc0" title="Panel 2">
    -            Second panel.<br/>
    -            Second panel.<br/>
    -            Second panel.<br/>
    -            Second panel.<br/>
    -          </tags:panel>
    -        </td>
    -        <td>
    -          <tags:panel color="#8080ff" bgcolor="#c0c0ff" title="Panel 3">
    -            Third panel.<br/>
    -            <tags:panel color="#ff80ff" bgcolor="#ffc0ff" title="Inner">
    -              A panel in a panel.
    -            </tags:panel>
    -            Third panel.<br/>
    -          </tags:panel>
    -        </td>
    -      </tr>
    -    </table>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.tag.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.tag.html deleted file mode 100755 index df1c2145..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/panel.tag.html +++ /dev/null @@ -1,31 +0,0 @@ -
    -<!--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<%@ attribute name="color" %>
    -<%@ attribute name="bgcolor" %>
    -<%@ attribute name="title" %>
    -<table border="1" bgcolor="${color}">
    -  <tr>
    -    <td><b>${title}</b></td>
    -  </tr>
    -  <tr>
    -    <td bgcolor="${bgcolor}">
    -      <jsp:doBody/>
    -    </td>
    -  </tr>
    -</table>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.html deleted file mode 100755 index e4780b9b..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -View Source Code - - - - -

    -

    - -

    Source Code for products.jsp -

    -

    Source Code for displayProducts.tag -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.jsp deleted file mode 100755 index 23b84f12..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> - - - JSP 2.0 Examples - Display Products Tag File - - -

    JSP 2.0 Examples - Display Products Tag File

    -
    -

    This JSP page invokes a tag file that displays a listing of - products. The custom tag accepts two fragments that enable - customization of appearance. One for when the product is on sale - and one for normal price.

    -

    The tag is invoked twice, using different styles

    -
    -

    Products

    - - - Item: ${name}
    - Price: ${price} -
    - - Item: ${name}
    - Was: ${origPrice}
    - Now: ${salePrice} -
    -
    -
    -

    Products (Same tag, alternate style)

    - - - ${name} @ ${price} ea. - - - ${name} @ ${salePrice} ea. (was: ${origPrice}) - - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.jsp.html deleted file mode 100755 index a081b23e..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/products.jsp.html +++ /dev/null @@ -1,56 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
    -<html>
    -  <head>
    -    <title>JSP 2.0 Examples - Display Products Tag File</title>
    -  </head>
    -  <body>
    -    <h1>JSP 2.0 Examples - Display Products Tag File</h1>
    -    <hr>
    -    <p>This JSP page invokes a tag file that displays a listing of
    -    products.  The custom tag accepts two fragments that enable
    -    customization of appearance.  One for when the product is on sale
    -    and one for normal price.</p>
    -    <p>The tag is invoked twice, using different styles</p>
    -    <hr>
    -    <h2>Products</h2>
    -    <tags:displayProducts>
    -      <jsp:attribute name="normalPrice">
    -        Item: ${name}<br/>
    -        Price: ${price}
    -      </jsp:attribute>
    -      <jsp:attribute name="onSale">
    -        Item: ${name}<br/>
    -        <font color="red"><strike>Was: ${origPrice}</strike></font><br/>
    -        <b>Now: ${salePrice}</b>
    -      </jsp:attribute>
    -    </tags:displayProducts>
    -    <hr>
    -    <h2>Products (Same tag, alternate style)</h2>
    -    <tags:displayProducts>
    -      <jsp:attribute name="normalPrice">
    -        <b>${name}</b> @ ${price} ea.
    -      </jsp:attribute>
    -      <jsp:attribute name="onSale">
    -        <b>${name}</b> @ ${salePrice} ea. (was: ${origPrice})
    -      </jsp:attribute>
    -    </tags:displayProducts>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/xhtmlbasic.tag.html b/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/xhtmlbasic.tag.html deleted file mode 100755 index a8bd4973..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsp2/tagfiles/xhtmlbasic.tag.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -<!--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
    -"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
    -<html xmlns="http://www.w3.org/1999/xhtml">
    -<jsp:doBody/>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/ServletToJsp.java.html b/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/ServletToJsp.java.html deleted file mode 100755 index 9e30da5a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/ServletToJsp.java.html +++ /dev/null @@ -1,41 +0,0 @@ -
    -/*
    -* Licensed to the Apache Software Foundation (ASF) under one or more
    -* contributor license agreements.  See the NOTICE file distributed with
    -* this work for additional information regarding copyright ownership.
    -* The ASF licenses this file to You under the Apache License, Version 2.0
    -* (the "License"); you may not use this file except in compliance with
    -* the License.  You may obtain a copy of the License at
    -*
    -*     http://www.apache.org/licenses/LICENSE-2.0
    -*
    -* Unless required by applicable law or agreed to in writing, software
    -* distributed under the License is distributed on an "AS IS" BASIS,
    -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -* See the License for the specific language governing permissions and
    -* limitations under the License.
    -*/
    -
    -import javax.servlet.http.HttpServlet;
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
    -public class ServletToJsp extends HttpServlet {
    -
    -    private static final long serialVersionUID = 1L;
    -
    -    @Override
    -    public void doGet (HttpServletRequest request,
    -            HttpServletResponse response) {
    -
    -       try {
    -           // Set the attribute and Forward to hello.jsp
    -           request.setAttribute ("servletName", "servletToJsp");
    -           getServletConfig().getServletContext().getRequestDispatcher(
    -                   "/jsp/jsptoserv/hello.jsp").forward(request, response);
    -       } catch (Exception ex) {
    -           ex.printStackTrace ();
    -       }
    -    }
    -}
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/hello.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/hello.jsp deleted file mode 100755 index 1b2b9fcb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/hello.jsp +++ /dev/null @@ -1,26 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - -

    -I have been invoked by -<% out.print (request.getAttribute("servletName").toString()); %> -Servlet. -

    - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/hello.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/hello.jsp.html deleted file mode 100755 index d9e61383..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/hello.jsp.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<body bgcolor="white">
    -
    -<h1>
    -I have been invoked by
    -<% out.print (request.getAttribute("servletName").toString()); %>
    -Servlet.
    -</h1>
    -
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp b/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp deleted file mode 100755 index c2a460ae..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp.html deleted file mode 100755 index 9e8ea564..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<body bgcolor="white">
    -
    -<!-- Forward to a servlet -->
    -<jsp:forward page="/servletToJsp" />
    -
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jts.html b/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jts.html deleted file mode 100755 index ef8bc01b..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/jsptoserv/jts.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for JSP calling servlet -

    - -

    Source Code for Servlet calling JSP -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/num/numguess.html b/bundledApps/tomcat/webapps/examples/jsp/num/numguess.html deleted file mode 100755 index 431fda08..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/num/numguess.html +++ /dev/null @@ -1,34 +0,0 @@ - - - -Untitled Document - - - - -

    - -

    Source Code for Numguess Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/num/numguess.jsp b/bundledApps/tomcat/webapps/examples/jsp/num/numguess.jsp deleted file mode 100755 index a30eeb5d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/num/numguess.jsp +++ /dev/null @@ -1,69 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Number Guess Game - Written by Jason Hunter, CTO, K&A Software - http://www.servlets.com ---%> - -<%@ page import = "num.NumberGuessBean" %> - - - - - -Number Guess - - - -<% if (numguess.getSuccess()) { %> - - Congratulations! You got it. - And after just <%= numguess.getNumGuesses() %> tries.

    - - <% numguess.reset(); %> - - Care to try again? - -<% } else if (numguess.getNumGuesses() == 0) { %> - - Welcome to the Number Guess game.

    - - I'm thinking of a number between 1 and 100.

    - -

    - What's your guess? - -
    - -<% } else { %> - - Good guess, but nope. Try <%= numguess.getHint() %>. - - You have made <%= numguess.getNumGuesses() %> guesses.

    - - I'm thinking of a number between 1 and 100.

    - -

    - What's your guess? - -
    - -<% } %> - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/num/numguess.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/num/numguess.jsp.html deleted file mode 100755 index 3362ac48..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/num/numguess.jsp.html +++ /dev/null @@ -1,71 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    -
    -  Number Guess Game
    -  Written by Jason Hunter, CTO, K&A Software
    -  http://www.servlets.com
    ---%>
    -
    -<%@ page import = "num.NumberGuessBean" %>
    -
    -<jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/>
    -<jsp:setProperty name="numguess" property="*"/>
    -
    -<html>
    -<head><title>Number Guess</title></head>
    -<body bgcolor="white">
    -<font size=4>
    -
    -<% if (numguess.getSuccess()) { %>
    -
    -  Congratulations!  You got it.
    -  And after just <%= numguess.getNumGuesses() %> tries.<p>
    -
    -  <% numguess.reset(); %>
    -
    -  Care to <a href="numguess.jsp">try again</a>?
    -
    -<% } else if (numguess.getNumGuesses() == 0) { %>
    -
    -  Welcome to the Number Guess game.<p>
    -
    -  I'm thinking of a number between 1 and 100.<p>
    -
    -  <form method=get>
    -  What's your guess? <input type=text name=guess>
    -  <input type=submit value="Submit">
    -  </form>
    -
    -<% } else { %>
    -
    -  Good guess, but nope.  Try <b><%= numguess.getHint() %></b>.
    -
    -  You have made <%= numguess.getNumGuesses() %> guesses.<p>
    -
    -  I'm thinking of a number between 1 and 100.<p>
    -
    -  <form method=get>
    -  What's your guess? <input type=text name=guess>
    -  <input type=submit value="Submit">
    -  </form>
    -
    -<% } %>
    -
    -</font>
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/plugin/applet/Clock2.class b/bundledApps/tomcat/webapps/examples/jsp/plugin/applet/Clock2.class deleted file mode 100755 index cc968cd2..00000000 Binary files a/bundledApps/tomcat/webapps/examples/jsp/plugin/applet/Clock2.class and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/jsp/plugin/applet/Clock2.java b/bundledApps/tomcat/webapps/examples/jsp/plugin/applet/Clock2.java deleted file mode 100755 index ccc96d1c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/plugin/applet/Clock2.java +++ /dev/null @@ -1,224 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import java.applet.Applet; -import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -/** - * Time! - * - * @author Rachel Gollub - */ - -public class Clock2 extends Applet implements Runnable { - private static final long serialVersionUID = 1L; - Thread timer; // The thread that displays clock - int lastxs, lastys, lastxm, - lastym, lastxh, lastyh; // Dimensions used to draw hands - SimpleDateFormat formatter; // Formats the date displayed - String lastdate; // String to hold date displayed - Font clockFaceFont; // Font for number display on clock - Date currentDate; // Used to get date to display - Color handColor; // Color of main hands and dial - Color numberColor; // Color of second hand and numbers - - @Override - public void init() { - lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0; - formatter = new SimpleDateFormat ("EEE MMM dd hh:mm:ss yyyy", Locale.getDefault()); - currentDate = new Date(); - lastdate = formatter.format(currentDate); - clockFaceFont = new Font("Serif", Font.PLAIN, 14); - handColor = Color.blue; - numberColor = Color.darkGray; - - try { - setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16))); - } catch (Exception E) { } - try { - handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16)); - } catch (Exception E) { } - try { - numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16)); - } catch (Exception E) { } - resize(300,300); // Set clock window size - } - - // Plotpoints allows calculation to only cover 45 degrees of the circle, - // and then mirror - public void plotpoints(int x0, int y0, int x, int y, Graphics g) { - g.drawLine(x0+x,y0+y,x0+x,y0+y); - g.drawLine(x0+y,y0+x,x0+y,y0+x); - g.drawLine(x0+y,y0-x,x0+y,y0-x); - g.drawLine(x0+x,y0-y,x0+x,y0-y); - g.drawLine(x0-x,y0-y,x0-x,y0-y); - g.drawLine(x0-y,y0-x,x0-y,y0-x); - g.drawLine(x0-y,y0+x,x0-y,y0+x); - g.drawLine(x0-x,y0+y,x0-x,y0+y); - } - - // Circle is just Bresenham's algorithm for a scan converted circle - public void circle(int x0, int y0, int r, Graphics g) { - int x,y; - float d; - x=0; - y=r; - d=5/4-r; - plotpoints(x0,y0,x,y,g); - - while (y>x){ - if (d<0) { - d=d+2*x+3; - x++; - } - else { - d=d+2*(x-y)+5; - x++; - y--; - } - plotpoints(x0,y0,x,y,g); - } - } - - // Paint is the main part of the program - @Override - public void paint(Graphics g) { - int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter; - String today; - - currentDate = new Date(); - SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault()); - try { - s = Integer.parseInt(formatter.format(currentDate)); - } catch (NumberFormatException n) { - s = 0; - } - formatter.applyPattern("m"); - try { - m = Integer.parseInt(formatter.format(currentDate)); - } catch (NumberFormatException n) { - m = 10; - } - formatter.applyPattern("h"); - try { - h = Integer.parseInt(formatter.format(currentDate)); - } catch (NumberFormatException n) { - h = 10; - } - formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy"); - today = formatter.format(currentDate); - xcenter=80; - ycenter=55; - - // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00) - // x = r(cos a) + xcenter, y = r(sin a) + ycenter - - xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter); - ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter); - xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter); - ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter); - xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + xcenter); - yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + ycenter); - - // Draw the circle and numbers - - g.setFont(clockFaceFont); - g.setColor(handColor); - circle(xcenter,ycenter,50,g); - g.setColor(numberColor); - g.drawString("9",xcenter-45,ycenter+3); - g.drawString("3",xcenter+40,ycenter+3); - g.drawString("12",xcenter-5,ycenter-37); - g.drawString("6",xcenter-3,ycenter+45); - - // Erase if necessary, and redraw - - g.setColor(getBackground()); - if (xs != lastxs || ys != lastys) { - g.drawLine(xcenter, ycenter, lastxs, lastys); - g.drawString(lastdate, 5, 125); - } - if (xm != lastxm || ym != lastym) { - g.drawLine(xcenter, ycenter-1, lastxm, lastym); - g.drawLine(xcenter-1, ycenter, lastxm, lastym); } - if (xh != lastxh || yh != lastyh) { - g.drawLine(xcenter, ycenter-1, lastxh, lastyh); - g.drawLine(xcenter-1, ycenter, lastxh, lastyh); } - g.setColor(numberColor); - g.drawString("", 5, 125); - g.drawString(today, 5, 125); - g.drawLine(xcenter, ycenter, xs, ys); - g.setColor(handColor); - g.drawLine(xcenter, ycenter-1, xm, ym); - g.drawLine(xcenter-1, ycenter, xm, ym); - g.drawLine(xcenter, ycenter-1, xh, yh); - g.drawLine(xcenter-1, ycenter, xh, yh); - lastxs=xs; lastys=ys; - lastxm=xm; lastym=ym; - lastxh=xh; lastyh=yh; - lastdate = today; - currentDate=null; - } - - @Override - public void start() { - timer = new Thread(this); - timer.start(); - } - - @Override - public void stop() { - timer = null; - } - - @Override - public void run() { - Thread me = Thread.currentThread(); - while (timer == me) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - } - repaint(); - } - } - - @Override - public void update(Graphics g) { - paint(g); - } - - @Override - public String getAppletInfo() { - return "Title: A Clock \nAuthor: Rachel Gollub, 1995 \nAn analog clock."; - } - - @Override - public String[][] getParameterInfo() { - String[][] info = { - {"bgcolor", "hexadecimal RGB number", "The background color. Default is the color of your browser."}, - {"fgcolor1", "hexadecimal RGB number", "The color of the hands and dial. Default is blue."}, - {"fgcolor2", "hexadecimal RGB number", "The color of the seconds hand and numbers. Default is dark gray."} - }; - return info; - } -} diff --git a/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.html b/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.html deleted file mode 100755 index 036ce72a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -Untitled Document - - - - -

    - -

    Source Code for Plugin Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.jsp b/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.jsp deleted file mode 100755 index 3347f6ef..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.jsp +++ /dev/null @@ -1,34 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - Plugin example - -

    Current time is :

    - - - Plugin tag OBJECT or EMBED not supported by browser. - - -

    -

    - -The above applet is loaded using the Java Plugin from a jsp page using the -plugin tag. - -

    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.jsp.html deleted file mode 100755 index 121b3750..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/plugin/plugin.jsp.html +++ /dev/null @@ -1,36 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<title> Plugin example </title>
    -<body bgcolor="white">
    -<h3> Current time is : </h3>
    -<jsp:plugin type="applet" code="Clock2.class" codebase="applet" jreversion="1.2" width="160" height="150" >
    -    <jsp:fallback>
    -        Plugin tag OBJECT or EMBED not supported by browser.
    -    </jsp:fallback>
    -</jsp:plugin>
    -<p>
    -<h4>
    -<font color=red>
    -The above applet is loaded using the Java Plugin from a jsp page using the
    -plugin tag.
    -</font>
    -</h4>
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/security/protected/error.jsp b/bundledApps/tomcat/webapps/examples/jsp/security/protected/error.jsp deleted file mode 100755 index db7a4662..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/security/protected/error.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - -Error Page For Examples - - -Invalid username and/or password, please try -again. - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/security/protected/error.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/security/protected/error.jsp.html deleted file mode 100755 index 950029ef..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/security/protected/error.jsp.html +++ /dev/null @@ -1,27 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<head>
    -<title>Error Page For Examples</title>
    -</head>
    -<body bgcolor="white">
    -Invalid username and/or password, please try
    -<a href='<%= response.encodeURL("index.jsp") %>'>again</a>.
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/security/protected/index.jsp b/bundledApps/tomcat/webapps/examples/jsp/security/protected/index.jsp deleted file mode 100755 index 1d6495ca..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/security/protected/index.jsp +++ /dev/null @@ -1,81 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<% - if (request.getParameter("logoff") != null) { - session.invalidate(); - response.sendRedirect("index.jsp"); - return; - } -%> - - -Protected Page for Examples - - - -You are logged in as remote user -<%= util.HTMLFilter.filter(request.getRemoteUser()) %> -in session <%= session.getId() %>

    - -<% - if (request.getUserPrincipal() != null) { -%> - Your user principal name is - <%= util.HTMLFilter.filter(request.getUserPrincipal().getName()) %> -

    -<% - } else { -%> - No user principal could be identified.

    -<% - } -%> - -<% - String role = request.getParameter("role"); - if (role == null) - role = ""; - if (role.length() > 0) { - if (request.isUserInRole(role)) { -%> - You have been granted role - <%= util.HTMLFilter.filter(role) %>

    -<% - } else { -%> - You have not been granted role - <%= util.HTMLFilter.filter(role) %>

    -<% - } - } -%> - -To check whether your username has been granted a particular role, -enter it here: -
    - -
    -

    - -If you have configured this app for form-based authentication, you can log -off by clicking -here. -This should cause you to be returned to the logon page after the redirect -that is performed. - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/security/protected/index.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/security/protected/index.jsp.html deleted file mode 100755 index 399f05c0..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/security/protected/index.jsp.html +++ /dev/null @@ -1,83 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%
    -  if (request.getParameter("logoff") != null) {
    -    session.invalidate();
    -    response.sendRedirect("index.jsp");
    -    return;
    -  }
    -%>
    -<html>
    -<head>
    -<title>Protected Page for Examples</title>
    -</head>
    -<body bgcolor="white">
    -
    -You are logged in as remote user
    -<b><%= util.HTMLFilter.filter(request.getRemoteUser()) %></b>
    -in session <b><%= session.getId() %></b><br><br>
    -
    -<%
    -  if (request.getUserPrincipal() != null) {
    -%>
    -    Your user principal name is
    -    <b><%= util.HTMLFilter.filter(request.getUserPrincipal().getName()) %></b>
    -    <br><br>
    -<%
    -  } else {
    -%>
    -    No user principal could be identified.<br><br>
    -<%
    -  }
    -%>
    -
    -<%
    -  String role = request.getParameter("role");
    -  if (role == null)
    -    role = "";
    -  if (role.length() > 0) {
    -    if (request.isUserInRole(role)) {
    -%>
    -      You have been granted role
    -      <b><%= util.HTMLFilter.filter(role) %></b><br><br>
    -<%
    -    } else {
    -%>
    -      You have <i>not</i> been granted role
    -      <b><%= util.HTMLFilter.filter(role) %></b><br><br>
    -<%
    -    }
    -  }
    -%>
    -
    -To check whether your username has been granted a particular role,
    -enter it here:
    -<form method="GET" action='<%= response.encodeURL("index.jsp") %>'>
    -<input type="text" name="role" value="<%= util.HTMLFilter.filter(role) %>">
    -</form>
    -<br><br>
    -
    -If you have configured this app for form-based authentication, you can log
    -off by clicking
    -<a href='<%= response.encodeURL("index.jsp?logoff=true") %>'>here</a>.
    -This should cause you to be returned to the logon page after the redirect
    -that is performed.
    -
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/security/protected/login.jsp b/bundledApps/tomcat/webapps/examples/jsp/security/protected/login.jsp deleted file mode 100755 index 8b6d4839..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/security/protected/login.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - -Login Page for Examples - -
    - - - - - - - - - - - - - -
    Username:
    Password:
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/security/protected/login.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/security/protected/login.jsp.html deleted file mode 100755 index a5167640..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/security/protected/login.jsp.html +++ /dev/null @@ -1,40 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<head>
    -<title>Login Page for Examples</title>
    -<body bgcolor="white">
    -<form method="POST" action='<%= response.encodeURL("j_security_check") %>' >
    -  <table border="0" cellspacing="5">
    -    <tr>
    -      <th align="right">Username:</th>
    -      <td align="left"><input type="text" name="j_username"></td>
    -    </tr>
    -    <tr>
    -      <th align="right">Password:</th>
    -      <td align="left"><input type="password" name="j_password"></td>
    -    </tr>
    -    <tr>
    -      <td align="right"><input type="submit" value="Log In"></td>
    -      <td align="left"><input type="reset"></td>
    -    </tr>
    -  </table>
    -</form>
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/sessions/DummyCart.html b/bundledApps/tomcat/webapps/examples/jsp/sessions/DummyCart.html deleted file mode 100755 index 317523f3..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/sessions/DummyCart.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - -sessions.DummyCart Bean Properties - - -

    -sessions.DummyCart Bean Properties -

    -
    -
    -
    public class DummyCart
    extends Object
    - -

    -


    - -

    - - - - - - - - - -
    -Properties Summary
    - -String -DummyCart:items -
    -
    - -Multi -
    -


    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.html b/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.html deleted file mode 100755 index e9723278..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - carts - - - - - -
    -
    -Please enter item to add or remove: -
    -Add Item: - - - - -

    - - - -
    - -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.jsp b/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.jsp deleted file mode 100755 index 8847e58c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.jsp +++ /dev/null @@ -1,43 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - -<% - cart.processRequest(); -%> - - - -
    You have the following items in your cart: -
      -<% - String[] items = cart.getItems(); - for (int i=0; i -
    1. <% out.print(util.HTMLFilter.filter(items[i])); %> -<% - } -%> -
    - -
    - -
    -<%@ include file ="carts.html" %> - diff --git a/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.jsp.html deleted file mode 100755 index 9c7add04..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/sessions/carts.jsp.html +++ /dev/null @@ -1,45 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<jsp:useBean id="cart" scope="session" class="sessions.DummyCart" />
    -
    -<jsp:setProperty name="cart" property="*" />
    -<%
    -    cart.processRequest();
    -%>
    -
    -
    -<FONT size = 5 COLOR="#CC0000">
    -<br> You have the following items in your cart:
    -<ol>
    -<%
    -    String[] items = cart.getItems();
    -    for (int i=0; i<items.length; i++) {
    -%>
    -<li> <% out.print(util.HTMLFilter.filter(items[i])); %>
    -<%
    -    }
    -%>
    -</ol>
    -
    -</FONT>
    -
    -<hr>
    -<%@ include file ="carts.html" %>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/sessions/crt.html b/bundledApps/tomcat/webapps/examples/jsp/sessions/crt.html deleted file mode 100755 index 28804e9e..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/sessions/crt.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Cart Example -

    - -

    Property Sheet for DummyCart -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.html b/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.html deleted file mode 100755 index 334b6bcb..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -Untitled Document - - - - -

    - -

    Source Code for the Simple Tag Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.jsp b/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.jsp deleted file mode 100755 index a31890ca..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - -<%@ taglib uri="http://tomcat.apache.org/example-taglib" prefix="eg"%> - -Radio stations that rock: - -
      - -
    • <%= member %>
    • -
      -
    - - -Did you see me on the stderr window? - - - -Did you see me on the browser window as well? - - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.jsp.html deleted file mode 100755 index 30c6272b..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/simpletag/foo.jsp.html +++ /dev/null @@ -1,40 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<body>
    -<%@ taglib uri="http://tomcat.apache.org/example-taglib" prefix="eg"%>
    -
    -Radio stations that rock:
    -
    -<ul>
    -<eg:foo att1="98.5" att2="92.3" att3="107.7">
    -<li><%= member %></li>
    -</eg:foo>
    -</ul>
    -
    -<eg:log>
    -Did you see me on the stderr window?
    -</eg:log>
    -
    -<eg:log toBrowser="true">
    -Did you see me on the browser window as well?
    -</eg:log>
    -
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.html b/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.html deleted file mode 100755 index c00aca7c..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for Request Parameters Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.jsp b/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.jsp deleted file mode 100755 index 500a6488..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.jsp +++ /dev/null @@ -1,56 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - -

    Request Information

    - -JSP Request Method: <%= util.HTMLFilter.filter(request.getMethod()) %> -
    -Request URI: <%= util.HTMLFilter.filter(request.getRequestURI()) %> -
    -Request Protocol: <%= util.HTMLFilter.filter(request.getProtocol()) %> -
    -Servlet path: <%= util.HTMLFilter.filter(request.getServletPath()) %> -
    -Path info: <%= util.HTMLFilter.filter(request.getPathInfo()) %> -
    -Query string: <%= util.HTMLFilter.filter(request.getQueryString()) %> -
    -Content length: <%= request.getContentLength() %> -
    -Content type: <%= util.HTMLFilter.filter(request.getContentType()) %> -
    -Server name: <%= util.HTMLFilter.filter(request.getServerName()) %> -
    -Server port: <%= request.getServerPort() %> -
    -Remote user: <%= util.HTMLFilter.filter(request.getRemoteUser()) %> -
    -Remote address: <%= util.HTMLFilter.filter(request.getRemoteAddr()) %> -
    -Remote host: <%= util.HTMLFilter.filter(request.getRemoteHost()) %> -
    -Authorization scheme: <%= util.HTMLFilter.filter(request.getAuthType()) %> -
    -Locale: <%= request.getLocale() %> -
    -The browser you are using is -<%= util.HTMLFilter.filter(request.getHeader("User-Agent")) %> -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.jsp.html deleted file mode 100755 index ad7be577..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/snp/snoop.jsp.html +++ /dev/null @@ -1,58 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -<body bgcolor="white">
    -<h1> Request Information </h1>
    -<font size="4">
    -JSP Request Method: <%= util.HTMLFilter.filter(request.getMethod()) %>
    -<br>
    -Request URI: <%= util.HTMLFilter.filter(request.getRequestURI()) %>
    -<br>
    -Request Protocol: <%= util.HTMLFilter.filter(request.getProtocol()) %>
    -<br>
    -Servlet path: <%= util.HTMLFilter.filter(request.getServletPath()) %>
    -<br>
    -Path info: <%= util.HTMLFilter.filter(request.getPathInfo()) %>
    -<br>
    -Query string: <%= util.HTMLFilter.filter(request.getQueryString()) %>
    -<br>
    -Content length: <%= request.getContentLength() %>
    -<br>
    -Content type: <%= util.HTMLFilter.filter(request.getContentType()) %>
    -<br>
    -Server name: <%= util.HTMLFilter.filter(request.getServerName()) %>
    -<br>
    -Server port: <%= request.getServerPort() %>
    -<br>
    -Remote user: <%= util.HTMLFilter.filter(request.getRemoteUser()) %>
    -<br>
    -Remote address: <%= util.HTMLFilter.filter(request.getRemoteAddr()) %>
    -<br>
    -Remote host: <%= util.HTMLFilter.filter(request.getRemoteHost()) %>
    -<br>
    -Authorization scheme: <%= util.HTMLFilter.filter(request.getAuthType()) %>
    -<br>
    -Locale: <%= request.getLocale() %>
    -<hr>
    -The browser you are using is
    -<%= util.HTMLFilter.filter(request.getHeader("User-Agent")) %>
    -<hr>
    -</font>
    -</body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/source.jsp b/bundledApps/tomcat/webapps/examples/jsp/source.jsp deleted file mode 100755 index 12a660c8..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/source.jsp +++ /dev/null @@ -1,20 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ taglib uri="http://tomcat.apache.org/example-taglib" - prefix="eg" %> - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/source.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/source.jsp.html deleted file mode 100755 index 8c3f367d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/source.jsp.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<%@ taglib uri="http://tomcat.apache.org/example-taglib"
    -        prefix="eg" %>
    -
    -<eg:ShowSource jspFile="<%= util.HTMLFilter.filter(request.getQueryString()) %>"/>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.html deleted file mode 100755 index fdec6177..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.html +++ /dev/null @@ -1,36 +0,0 @@ - - - -View Source Code - - - -

    - - - - - -

    - -

    - Source Code for choose.jsp -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.jsp b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.jsp deleted file mode 100755 index 52a90112..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - Tag Examples - choose - - -

    Tag Plugin Examples - <c:choose>

    - -
    -
    - Plugin Introductory Notes -
    - Brief Instructions for Writing Plugins -

    -
    - -
    - - <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - - - # ${index}: - - - One!
    -
    - - Four!
    -
    - - Three!
    -
    - - Huh?
    -
    -
    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.jsp.html deleted file mode 100755 index 5d70edec..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/choose.jsp.html +++ /dev/null @@ -1,56 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -  <head>
    -    <title>Tag Examples - choose</title>
    -  </head>
    -  <body>
    -    <h1>Tag Plugin Examples - &lt;c:choose></h1>
    -
    -    <hr/>
    -    <br/>
    -    <a href="notes.html">Plugin Introductory Notes</a>
    -    <br/>
    -    <a href="howto.html">Brief Instructions for Writing Plugins</a>
    -    <br/> <br/>
    -    <hr/>
    -
    -    <br/>
    -
    -    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    -
    -    <c:forEach var="index" begin="0" end="4">
    -      # ${index}:
    -      <c:choose>
    -        <c:when test="${index == 1}">
    -          One!<br/>
    -        </c:when>
    -        <c:when test="${index == 4}">
    -          Four!<br/>
    -        </c:when>
    -        <c:when test="${index == 3}">
    -          Three!<br/>
    -        </c:when>
    -        <c:otherwise>
    -          Huh?<br/>
    -        </c:otherwise>
    -      </c:choose>
    -    </c:forEach>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.html deleted file mode 100755 index f1a9c1dc..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.html +++ /dev/null @@ -1,36 +0,0 @@ - - - -View Source Code - - - -

    - - - - - -

    - -

    - Source Code for foreach.jsp -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.jsp b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.jsp deleted file mode 100755 index a7a57c56..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - Tag Plugin Examples: forEach - - -

    Tag Plugin Examples - <c:forEach>

    - -
    -
    - Plugin Introductory Notes -
    - Brief Instructions for Writing Plugins -

    -
    - -
    - - <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - <%@ page import="java.util.Vector" %> - -

    Iterating over a range

    - - ${item} - - - <% Vector v = new Vector(); - v.add("One"); v.add("Two"); v.add("Three"); v.add("Four"); - - pageContext.setAttribute("vector", v); - %> - -

    Iterating over a Vector

    - - - ${item} - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.jsp.html deleted file mode 100755 index 1f63f15d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/foreach.jsp.html +++ /dev/null @@ -1,56 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -  <head>
    -    <title>Tag Plugin Examples: forEach</title>
    -  </head>
    -  <body>
    -    <h1>Tag Plugin Examples - &lt;c:forEach></h1>
    -
    -    <hr/>
    -    <br/>
    -    <a href="notes.html">Plugin Introductory Notes</a>
    -    <br/>
    -    <a href="howto.html">Brief Instructions for Writing Plugins</a>
    -    <br/> <br/>
    -    <hr/>
    -
    -    <br/>
    -
    -    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    -    <%@ page import="java.util.Vector" %>
    -
    -    <h3>Iterating over a range</h3>
    -    <c:forEach var="item" begin="1" end="10">
    -        ${item}
    -    </c:forEach>
    -
    -    <% Vector v = new Vector();
    -        v.add("One"); v.add("Two"); v.add("Three"); v.add("Four");
    -
    -        pageContext.setAttribute("vector", v);
    -    %>
    -
    -    <h3>Iterating over a Vector</h3>
    -
    -    <c:forEach items="${vector}" var="item" >
    -        ${item}
    -    </c:forEach>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/howto.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/howto.html deleted file mode 100755 index a1932280..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/howto.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - Tag Plugin Implementation - - -

    How to write tag plugins

    -

    - To write a plugin, you'll need to download the source for Tomcat. - There are two steps: -

      -
    1. - Implement the plugin class.

      - This class, which implements - org.apache.jasper.compiler.tagplugin.TagPlugin - instructs Jasper what Java codes to generate in place of the tag - handler calls. - See Javadoc for org.apache.jasper.compiler.tagplugin.TagPlugin - for details. -

    2. - -
    3. - Create the plugin descriptor file WEB-INF/tagPlugins.xml

      - This file - specifies the plugin classes and their corresponding tag handler - classes. -

    4. -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.html deleted file mode 100755 index a338e174..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.html +++ /dev/null @@ -1,36 +0,0 @@ - - - -View Source Code - - - -

    - - - - - -

    - -

    - Source Code for if.jsp -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.jsp b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.jsp deleted file mode 100755 index 70ad14e2..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.jsp +++ /dev/null @@ -1,47 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - Tag Plugin Examples: if - - -

    Tag Plugin Examples - <c:if>

    - -
    -
    - Plugin Introductory Notes -
    - Brief Instructions for Writing Plugins -

    -
    - -
    - <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - -

    Set the test result to a variable

    - - The result of testing for (1==1) is: ${theTruth} - -

    Conditionally execute the body

    - -

    It's true that (2>0)! Working.

    -
    - -

    It's not true that (0>2)! Failed.

    -
    - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.jsp.html deleted file mode 100755 index ca05498a..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/if.jsp.html +++ /dev/null @@ -1,49 +0,0 @@ -
    -<%--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    ---%>
    -<html>
    -  <head>
    -    <title>Tag Plugin Examples: if</title>
    -  </head>
    -  <body>
    -    <h1>Tag Plugin Examples - &lt;c:if></h1>
    -
    -    <hr/>
    -    <br/>
    -    <a href="notes.html">Plugin Introductory Notes</a>
    -    <br/>
    -    <a href="howto.html">Brief Instructions for Writing Plugins</a>
    -    <br/> <br/>
    -    <hr/>
    -
    -    <br/>
    -    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    -
    -    <h3>Set the test result to a variable</h3>
    -    <c:if test="${1==1}" var="theTruth" scope="page"/>
    -    The result of testing for (1==1) is: ${theTruth}
    -
    -    <h3>Conditionally execute the body</h3>
    -    <c:if test="${2>0}">
    -        <p>It's true that (2>0)! Working.</p>
    -    </c:if>
    -    <c:if test="${0>2}">
    -        <p>It's not true that (0>2)! Failed.</p>
    -    </c:if>
    -  </body>
    -</html>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/notes.html b/bundledApps/tomcat/webapps/examples/jsp/tagplugin/notes.html deleted file mode 100755 index 0b10d400..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/tagplugin/notes.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - Tag Plugin Introduction - - -

    Tag Plugins: Introductory Notes

    -

    - Tomcat provides a framework for implementing tag plugins. The - plugins instruct Jasper, at translation time, to replace tag handler - calls with Java scriptlets. - The framework allows tag library authors to implement plugins for - their tags. -

    -

    - Tomcat is released with plugins for several JSTL tags. Note - that these plugins work with JSTL 1.1 as well as JSTL 1.0, though - the examples uses JSTL 1.1 and JSP 2.0. - These plugins are not complete (for instance, some item types are not - handled in <c:if>). - They do serve as examples to show plugins in action (just - examine the generated Java files), and how they can be implemented. -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/xml/xml.html b/bundledApps/tomcat/webapps/examples/jsp/xml/xml.html deleted file mode 100755 index 80907a5d..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/xml/xml.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - -Untitled Document - - - - -

    - -

    Source Code for XML syntax Example -

    - - - diff --git a/bundledApps/tomcat/webapps/examples/jsp/xml/xml.jsp b/bundledApps/tomcat/webapps/examples/jsp/xml/xml.jsp deleted file mode 100755 index 9b0c1fc2..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/xml/xml.jsp +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - String getDateTimeStr(Locale l) { - DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, l); - return df.format(new Date()); - } - - - - - Example JSP in XML format - - - -This is the output of a simple JSP using XML format. -
    - -
    Use a jsp:scriptlet to loop from 1 to 10:
    - -// Note we need to declare CDATA because we don't escape the less than symbol - - - - -
    -]]> - -
    - Use a jsp:expression to write the date and time in the browser's locale: - getDateTimeStr(request.getLocale()) -
    - - - - <p>This sentence is enclosed in a jsp:text element.</p> - - - - -
    diff --git a/bundledApps/tomcat/webapps/examples/jsp/xml/xml.jsp.html b/bundledApps/tomcat/webapps/examples/jsp/xml/xml.jsp.html deleted file mode 100755 index b0b82741..00000000 --- a/bundledApps/tomcat/webapps/examples/jsp/xml/xml.jsp.html +++ /dev/null @@ -1,72 +0,0 @@ -
    -<?xml version="1.0"?>
    -<!--
    - Licensed to the Apache Software Foundation (ASF) under one or more
    -  contributor license agreements.  See the NOTICE file distributed with
    -  this work for additional information regarding copyright ownership.
    -  The ASF licenses this file to You under the Apache License, Version 2.0
    -  (the "License"); you may not use this file except in compliance with
    -  the License.  You may obtain a copy of the License at
    -
    -      http://www.apache.org/licenses/LICENSE-2.0
    -
    -  Unless required by applicable law or agreed to in writing, software
    -  distributed under the License is distributed on an "AS IS" BASIS,
    -  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -  See the License for the specific language governing permissions and
    -  limitations under the License.
    --->
    -<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
    -  version="1.2">
    -<jsp:directive.page contentType="text/html"/>
    -<jsp:directive.page import="java.util.Date, java.util.Locale"/>
    -<jsp:directive.page import="java.text.*"/>
    -
    -<jsp:declaration>
    -  String getDateTimeStr(Locale l) {
    -    DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, l);
    -    return df.format(new Date());
    -  }
    -</jsp:declaration>
    -
    -<html>
    -<head>
    -  <title>Example JSP in XML format</title>
    -</head>
    -
    -<body>
    -This is the output of a simple JSP using XML format.
    -<br />
    -
    -<div>Use a jsp:scriptlet to loop from 1 to 10: </div>
    -<jsp:scriptlet>
    -// Note we need to declare CDATA because we don't escape the less than symbol
    -<![CDATA[
    -  for (int i = 1; i<=10; i++) {
    -    out.println(i);
    -    if (i < 10) {
    -      out.println(", ");
    -    }
    -  }
    -]]>
    -</jsp:scriptlet>
    -
    -<!-- Because I omit br's end tag, declare it as CDATA -->
    -<![CDATA[
    -  <br><br>
    -]]>
    -
    -<div align="left">
    -  Use a jsp:expression to write the date and time in the browser's locale:
    -  <jsp:expression>getDateTimeStr(request.getLocale())</jsp:expression>
    -</div>
    -
    -
    -<jsp:text>
    -  &lt;p&gt;This sentence is enclosed in a jsp:text element.&lt;/p&gt;
    -</jsp:text>
    -
    -</body>
    -</html>
    -</jsp:root>
    -
    diff --git a/bundledApps/tomcat/webapps/examples/servlets/cookies.html b/bundledApps/tomcat/webapps/examples/servlets/cookies.html deleted file mode 100755 index 91ee5849..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/cookies.html +++ /dev/null @@ -1,61 +0,0 @@ - - - -Untitled Document - - - - -

    -

    Source Code for Cookie Example
    -

    - -
    import java.io.*;
    -import javax.servlet.*;
    -import javax.servlet.http.*;
    -
    -public class CookieExample extends HttpServlet {
    -
    -    public void doGet(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        response.setContentType("text/html");
    -        PrintWriter out = response.getWriter();
    -
    -        // print out cookies
    -
    -        Cookie[] cookies = request.getCookies();
    -        for (int i = 0; i < cookies.length; i++) {
    -            Cookie c = cookies[i];
    -            String name = c.getName();
    -            String value = c.getValue();
    -            out.println(name + " = " + value);
    -        }
    -
    -        // set a cookie
    -
    -        String name = request.getParameter("cookieName");
    -        if (name != null && name.length() > 0) {
    -            String value = request.getParameter("cookieValue");
    -            Cookie c = new Cookie(name, value);
    -            response.addCookie(c);
    -        }
    -    }
    -}
    - - diff --git a/bundledApps/tomcat/webapps/examples/servlets/helloworld.html b/bundledApps/tomcat/webapps/examples/servlets/helloworld.html deleted file mode 100755 index e30810a8..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/helloworld.html +++ /dev/null @@ -1,50 +0,0 @@ - - - -Untitled Document - - - - -

    -

    Source Code for HelloWorld Example
    -

    - -
    import java.io.*;
    -import javax.servlet.*;
    -import javax.servlet.http.*;
    -
    -public class HelloWorld extends HttpServlet {
    -
    -    public void doGet(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        response.setContentType("text/html");
    -        PrintWriter out = response.getWriter();
    -        out.println("<html>");
    -        out.println("<head>");
    -        out.println("<title>Hello World!</title>");
    -        out.println("</head>");
    -        out.println("<body>");
    -        out.println("<h1>Hello World!</h1>");
    -        out.println("</body>");
    -        out.println("</html>");
    -    }
    -}
    - - diff --git a/bundledApps/tomcat/webapps/examples/servlets/images/code.gif b/bundledApps/tomcat/webapps/examples/servlets/images/code.gif deleted file mode 100755 index 93af2cd1..00000000 Binary files a/bundledApps/tomcat/webapps/examples/servlets/images/code.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/servlets/images/execute.gif b/bundledApps/tomcat/webapps/examples/servlets/images/execute.gif deleted file mode 100755 index f64d70fd..00000000 Binary files a/bundledApps/tomcat/webapps/examples/servlets/images/execute.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/servlets/images/return.gif b/bundledApps/tomcat/webapps/examples/servlets/images/return.gif deleted file mode 100755 index af4f68f4..00000000 Binary files a/bundledApps/tomcat/webapps/examples/servlets/images/return.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/examples/servlets/index.html b/bundledApps/tomcat/webapps/examples/servlets/index.html deleted file mode 100755 index b7787067..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/index.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - Servlet Examples - - -Servlet -Examples with Code -

    This is a collection of examples which demonstrate some of the more -frequently used parts of the Servlet API. Familiarity with the Java(tm) -Programming Language is assumed. -

    These examples will only work when viewed via an http URL. They will -not work if you are viewing these pages via a "file://..." URL. Please -refer to the README file provide with this Tomcat release regarding -how to configure and start the provided web server. -

    Wherever you see a form, enter some data and see how the servlet reacts. -When playing with the Cookie and Session Examples, jump back to the Headers -Example to see exactly what your browser is sending the server. -

    To navigate your way through the examples, the following icons will -help: -
      - - - - - - - - - - - - - - - - - - -
    Execute the example
    Look at the source code for the example
    Return to this screen
    - -

    Tip: To see the cookie interactions with your browser, try turning on -the "notify when setting a cookie" option in your browser preferences. -This will let you see when a session is created and give some feedback -when looking at the cookie demo. -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Hello WorldExecuteSource
    Request InfoExecuteSource
    Request HeadersExecuteSource
    Request ParametersExecuteSource
    CookiesExecuteSource
    SessionsExecuteSource
    - -

    Note: The source code for these examples does not contain all of the -source code that is actually in the example, only the important sections -of code. Code not important to understand the example has been removed -for clarity. - - diff --git a/bundledApps/tomcat/webapps/examples/servlets/reqheaders.html b/bundledApps/tomcat/webapps/examples/servlets/reqheaders.html deleted file mode 100755 index 4cb80c28..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/reqheaders.html +++ /dev/null @@ -1,49 +0,0 @@ - - - -Untitled Document - - - - -

    -

    Source Code for RequestHeader Example
    -

    - -
    import java.io.*;
    -import java.util.*;
    -import javax.servlet.*;
    -import javax.servlet.http.*;
    -
    -public class RequestHeaderExample extends HttpServlet {
    -
    -    public void doGet(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        response.setContentType("text/html");
    -        PrintWriter out = response.getWriter();
    -        Enumeration e = request.getHeaderNames();
    -        while (e.hasMoreElements()) {
    -            String name = (String)e.nextElement();
    -            String value = request.getHeader(name);
    -            out.println(name + " = " + value);
    -        }
    -    }
    -}
    - - diff --git a/bundledApps/tomcat/webapps/examples/servlets/reqinfo.html b/bundledApps/tomcat/webapps/examples/servlets/reqinfo.html deleted file mode 100755 index 97a54ce6..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/reqinfo.html +++ /dev/null @@ -1,68 +0,0 @@ - - - -Untitled Document - - - - -

    -

    Source Code for Request Info Example
    -

    - -
    import java.io.*;
    -import javax.servlet.*;
    -import javax.servlet.http.*;
    -
    -public class RequestInfo extends HttpServlet {
    -
    -    public void doGet(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        response.setContentType("text/html");
    -        PrintWriter out = response.getWriter();
    -        out.println("<html>");
    -        out.println("<body>");
    -        out.println("<head>");
    -        out.println("<title>Request Information Example</title>");
    -        out.println("</head>");
    -        out.println("<body>");
    -        out.println("<h3>Request Information Example</h3>");
    -        out.println("Method: " + request.getMethod());
    -        out.println("Request URI: " + request.getRequestURI());
    -        out.println("Protocol: " + request.getProtocol());
    -        out.println("PathInfo: " + request.getPathInfo());
    -        out.println("Remote Address: " + request.getRemoteAddr());
    -        out.println("</body>");
    -        out.println("</html>");
    -    }
    -
    -    /**
    -     * We are going to perform the same operations for POST requests
    -     * as for GET methods, so this method just sends the request to
    -     * the doGet method.
    -     */
    -
    -    public void doPost(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        doGet(request, response);
    -    }
    -}
    - - diff --git a/bundledApps/tomcat/webapps/examples/servlets/reqparams.html b/bundledApps/tomcat/webapps/examples/servlets/reqparams.html deleted file mode 100755 index 42ec5070..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/reqparams.html +++ /dev/null @@ -1,78 +0,0 @@ - - - -Untitled Document - - - - -

    -

    Source Code for Request Parameter Example
    -

    - -
    import java.io.*;
    -import java.util.*;
    -import javax.servlet.*;
    -import javax.servlet.http.*;
    -
    -public class RequestParamExample extends HttpServlet {
    -
    -    public void doGet(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        response.setContentType("text/html");
    -        PrintWriter out = response.getWriter();
    -        out.println("<html>");
    -        out.println("<head>");
    -        out.println("<title>Request Parameters Example</title>");
    -        out.println("</head>");
    -        out.println("<body>");
    -        out.println("<h3>Request Parameters Example</h3>");
    -        out.println("Parameters in this request:<br>");
    -        if (firstName != null || lastName != null) {
    -            out.println("First Name:");
    -            out.println(" = " + HTMLFilter.filter(firstName) + "<br>");
    -            out.println("Last Name:");
    -            out.println(" = " + HTMLFilter.filter(lastName));
    -        } else {
    -            out.println("No Parameters, Please enter some");
    -        }
    -        out.println("<P>");
    -        out.print("<form action=\"");
    -        out.print("RequestParamExample\" ");
    -        out.println("method=POST>");
    -        out.println("First Name:");
    -        out.println("<input type=text size=20 name=firstname>");
    -        out.println("<br>");
    -        out.println("Last Name:");
    -        out.println("<input type=text size=20 name=lastname>");
    -        out.println("<br>");
    -        out.println("<input type=submit>");
    -        out.println("</form>");
    -        out.println("</body>");
    -        out.println("</html>");
    -    }
    -
    -    public void doPost(HttpServletRequest request, HttpServletResponse res)
    -    throws IOException, ServletException
    -    {
    -        doGet(request, response);
    -    }
    -}
    - - diff --git a/bundledApps/tomcat/webapps/examples/servlets/sessions.html b/bundledApps/tomcat/webapps/examples/servlets/sessions.html deleted file mode 100755 index febef83b..00000000 --- a/bundledApps/tomcat/webapps/examples/servlets/sessions.html +++ /dev/null @@ -1,70 +0,0 @@ - - - -Untitled Document - - - - -

    -

    Source Code for Session Example
    -

    - -
    import java.io.*;
    -import java.util.*;
    -import javax.servlet.*;
    -import javax.servlet.http.*;
    -
    -public class SessionExample extends HttpServlet {
    -
    -    public void doGet(HttpServletRequest request, HttpServletResponse response)
    -    throws IOException, ServletException
    -    {
    -        response.setContentType("text/html");
    -        PrintWriter out = response.getWriter();
    -
    -        HttpSession session = request.getSession(true);
    -
    -        // print session info
    -
    -        Date created = new Date(session.getCreationTime());
    -        Date accessed = new Date(session.getLastAccessedTime());
    -        out.println("ID " + session.getId());
    -        out.println("Created: " + created);
    -        out.println("Last Accessed: " + accessed);
    -
    -        // set session info if needed
    -
    -        String dataName = request.getParameter("dataName");
    -        if (dataName != null && dataName.length() > 0) {
    -            String dataValue = request.getParameter("dataValue");
    -            session.setAttribute(dataName, dataValue);
    -        }
    -
    -        // print session contents
    -
    -        Enumeration e = session.getAttributeNames();
    -        while (e.hasMoreElements()) {
    -            String name = (String)e.nextElement();
    -            String value = session.getAttribute(name).toString();
    -            out.println(name + " = " + value);
    -        }
    -    }
    -}
    - - diff --git a/bundledApps/tomcat/webapps/examples/websocket/chat.html b/bundledApps/tomcat/webapps/examples/websocket/chat.html deleted file mode 100755 index b835b142..00000000 --- a/bundledApps/tomcat/webapps/examples/websocket/chat.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - Apache Tomcat WebSocket Examples: Chat - - - - - -
    -

    - -

    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/websocket/echo.html b/bundledApps/tomcat/webapps/examples/websocket/echo.html deleted file mode 100755 index 8927a7b5..00000000 --- a/bundledApps/tomcat/webapps/examples/websocket/echo.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - Apache Tomcat WebSocket Examples: Echo - - - - - -
    -
    -
    - Connect using: - - - - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/websocket/index.html b/bundledApps/tomcat/webapps/examples/websocket/index.html deleted file mode 100755 index 0b18770d..00000000 --- a/bundledApps/tomcat/webapps/examples/websocket/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - Apache Tomcat WebSocket Examples - - -

    Apache Tomcat WebSocket Examples

    - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/examples/websocket/snake.html b/bundledApps/tomcat/webapps/examples/websocket/snake.html deleted file mode 100755 index e7240de4..00000000 --- a/bundledApps/tomcat/webapps/examples/websocket/snake.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - Apache Tomcat WebSocket Examples: Multiplayer Snake - - - - -
    - -
    -
    -
    -
    - - - diff --git a/bundledApps/tomcat/webapps/host-manager/META-INF/context.xml b/bundledApps/tomcat/webapps/host-manager/META-INF/context.xml deleted file mode 100755 index c31d376d..00000000 --- a/bundledApps/tomcat/webapps/host-manager/META-INF/context.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/401.jsp b/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/401.jsp deleted file mode 100755 index dc608d94..00000000 --- a/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/401.jsp +++ /dev/null @@ -1,70 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - 401 Unauthorized - - - -

    401 Unauthorized

    -

    - You are not authorized to view this page. If you have not changed - any configuration files, please examine the file - conf/tomcat-users.xml in your installation. That - file must contain the credentials to let you use this webapp. -

    -

    - For example, to add the admin-gui role to a user named - tomcat with a password of s3cret, add the following to the - config file listed above. -

    -
    -<role rolename="admin-gui"/>
    -<user username="tomcat" password="s3cret" roles="admin-gui"/>
    -
    -

    - Note that for Tomcat 7 onwards, the roles required to use the host manager - application were changed from the single admin role to the - following two roles. You will need to assign the role(s) required for - the functionality you wish to access. -

    -
      -
    • admin-gui - allows access to the HTML GUI
    • -
    • admin-script - allows access to the text interface
    • -
    -

    - The HTML interface is protected against CSRF but the text interface is not. - To maintain the CSRF protection: -

    -
      -
    • Users with the admin-gui role should not be granted the - admin-script role.
    • -
    • If the text interface is accessed through a browser (e.g. for testing - since this interface is intended for tools not humans) then the browser - must be closed afterwards to terminate the session.
    • -
    - - - diff --git a/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/403.jsp b/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/403.jsp deleted file mode 100755 index 60f998a6..00000000 --- a/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/403.jsp +++ /dev/null @@ -1,84 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - 403 Access Denied - - - -

    403 Access Denied

    -

    - You are not authorized to view this page. -

    -

    - If you have already configured the Host Manager application to allow access - and you have used your browsers back button, used a saved book-mark or - similar then you may have triggered the cross-site request forgery (CSRF) - protection that has been enabled for the HTML interface of the Host Manager - application. You will need to reset this protection by returning to the - main Host Manager page. - Once you return to this page, you will be able to continue using the Host - Manager appliction's HTML interface normally. If you continue to see this - access denied message, check that you have the necessary permissions to - access this application. -

    -

    If you have not changed - any configuration files, please examine the file - conf/tomcat-users.xml in your installation. That - file must contain the credentials to let you use this webapp. -

    -

    - For example, to add the admin-gui role to a user named - tomcat with a password of s3cret, add the following to the - config file listed above. -

    -
    -<role rolename="admin-gui"/>
    -<user username="tomcat" password="s3cret" roles="admin-gui"/>
    -
    -

    - Note that for Tomcat 7 onwards, the roles required to use the host manager - application were changed from the single admin role to the - following two roles. You will need to assign the role(s) required for - the functionality you wish to access. -

    -
      -
    • admin-gui - allows access to the HTML GUI
    • -
    • admin-script - allows access to the text interface
    • -
    -

    - The HTML interface is protected against CSRF but the text interface is not. - To maintain the CSRF protection: -

    -
      -
    • Users with the admin-gui role should not be granted the - admin-script role.
    • -
    • If the text interface is accessed through a browser (e.g. for testing - since this interface is intended for tools not humans) then the browser - must be closed afterwards to terminate the session.
    • -
    - - - diff --git a/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/404.jsp b/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/404.jsp deleted file mode 100755 index 2d364d3a..00000000 --- a/bundledApps/tomcat/webapps/host-manager/WEB-INF/jsp/404.jsp +++ /dev/null @@ -1,61 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ page import="org.apache.catalina.util.RequestUtil" %> - - - - 404 Not found - - - -

    404 Not found

    -

    - The page you tried to access - (<%=RequestUtil.filter((String) request.getAttribute( - "javax.servlet.error.request_uri"))%>) - does not exist. -

    -

    - The Host Manager application has been re-structured for Tomcat 7 onwards and - some URLs have changed. All URLs used to access the Manager application - should now start with one of the following options: -

    -
      -
    • <%=request.getContextPath()%>/html for the HTML GUI
    • -
    • <%=request.getContextPath()%>/text for the text interface
    • -
    -

    - Note that the URL for the text interface has changed from - "<%=request.getContextPath()%>" to - "<%=request.getContextPath()%>/text". -

    -

    - You probably need to adjust the URL you are using to access the Host Manager - application. However, there is always a chance you have found a bug in the - Host Manager application. If you are sure you have found a bug, and that the - bug has not already been reported, please report it to the Apache Tomcat - team. -

    - - diff --git a/bundledApps/tomcat/webapps/host-manager/WEB-INF/web.xml b/bundledApps/tomcat/webapps/host-manager/WEB-INF/web.xml deleted file mode 100755 index 01716c81..00000000 --- a/bundledApps/tomcat/webapps/host-manager/WEB-INF/web.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - Tomcat Host Manager Application - - A scriptable host management web application for the Tomcat Web Server; - Manager lets you view, create and remove virtual hosts. - - - - HostManager - org.apache.catalina.manager.host.HostManagerServlet - - debug - 2 - - - - HTMLHostManager - org.apache.catalina.manager.host.HTMLHostManagerServlet - - debug - 2 - - - - - SetCharacterEncoding - org.apache.catalina.filters.SetCharacterEncodingFilter - - encoding - UTF-8 - - - - - SetCharacterEncoding - /* - - - - CSRF - org.apache.catalina.filters.CsrfPreventionFilter - - entryPoints - /html,/html/,/html/list,/index.jsp - - - - - CSRF - HTMLHostManager - - - - - HostManager - /text/* - - - HTMLHostManager - /html/* - - - - - - HostManager commands - /text/* - - - - admin-script - - - - - HTMLHostManager commands - /html/* - - - - admin-gui - - - - - - BASIC - Tomcat Host Manager Application - - - - - - The role that is required to log in to the Host Manager Application HTML - interface - - admin-gui - - - - The role that is required to log in to the Host Manager Application text - interface - - admin-script - - - - 401 - /WEB-INF/jsp/401.jsp - - - 403 - /WEB-INF/jsp/403.jsp - - - 404 - /WEB-INF/jsp/404.jsp - - - diff --git a/bundledApps/tomcat/webapps/host-manager/images/add.gif b/bundledApps/tomcat/webapps/host-manager/images/add.gif deleted file mode 100755 index 0774d074..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/add.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/asf-logo.gif b/bundledApps/tomcat/webapps/host-manager/images/asf-logo.gif deleted file mode 100755 index 22eb9d73..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/asf-logo.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/code.gif b/bundledApps/tomcat/webapps/host-manager/images/code.gif deleted file mode 100755 index d27307b5..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/code.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/design.gif b/bundledApps/tomcat/webapps/host-manager/images/design.gif deleted file mode 100755 index f5db0a9f..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/design.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/docs.gif b/bundledApps/tomcat/webapps/host-manager/images/docs.gif deleted file mode 100755 index d64a4a18..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/docs.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/fix.gif b/bundledApps/tomcat/webapps/host-manager/images/fix.gif deleted file mode 100755 index d59ad642..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/fix.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/tomcat.gif b/bundledApps/tomcat/webapps/host-manager/images/tomcat.gif deleted file mode 100755 index 61756736..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/tomcat.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/update.gif b/bundledApps/tomcat/webapps/host-manager/images/update.gif deleted file mode 100755 index 31e22abb..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/update.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/images/void.gif b/bundledApps/tomcat/webapps/host-manager/images/void.gif deleted file mode 100755 index e565824a..00000000 Binary files a/bundledApps/tomcat/webapps/host-manager/images/void.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/host-manager/index.jsp b/bundledApps/tomcat/webapps/host-manager/index.jsp deleted file mode 100755 index 3cf5cae3..00000000 --- a/bundledApps/tomcat/webapps/host-manager/index.jsp +++ /dev/null @@ -1,18 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<% response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + - "/html")); %> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/host-manager/manager.xml b/bundledApps/tomcat/webapps/host-manager/manager.xml deleted file mode 100755 index b86a8c9f..00000000 --- a/bundledApps/tomcat/webapps/host-manager/manager.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - diff --git a/bundledApps/tomcat/webapps/lib/aopalliance-1.0.jar b/bundledApps/tomcat/webapps/lib/aopalliance-1.0.jar deleted file mode 100755 index 578b1a0c..00000000 Binary files a/bundledApps/tomcat/webapps/lib/aopalliance-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/bsh-2.0b4.jar b/bundledApps/tomcat/webapps/lib/bsh-2.0b4.jar deleted file mode 100755 index 36fe03d7..00000000 Binary files a/bundledApps/tomcat/webapps/lib/bsh-2.0b4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-cli-1.2.jar b/bundledApps/tomcat/webapps/lib/commons-cli-1.2.jar deleted file mode 100755 index ce4b9fff..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-cli-1.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-codec-1.6.jar b/bundledApps/tomcat/webapps/lib/commons-codec-1.6.jar deleted file mode 100755 index ee1bc49a..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-codec-1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-collections-3.2.1.jar b/bundledApps/tomcat/webapps/lib/commons-collections-3.2.1.jar deleted file mode 100755 index c35fa1fe..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-collections-3.2.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-configuration-1.8.jar b/bundledApps/tomcat/webapps/lib/commons-configuration-1.8.jar deleted file mode 100755 index ae9ae996..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-configuration-1.8.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-dbcp-1.2.2.jar b/bundledApps/tomcat/webapps/lib/commons-dbcp-1.2.2.jar deleted file mode 100755 index faea0562..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-dbcp-1.2.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-el-1.0.jar b/bundledApps/tomcat/webapps/lib/commons-el-1.0.jar deleted file mode 100755 index 608ed796..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-el-1.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-httpclient-3.1.jar b/bundledApps/tomcat/webapps/lib/commons-httpclient-3.1.jar deleted file mode 100755 index 7c59774a..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-httpclient-3.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-io-2.4.jar b/bundledApps/tomcat/webapps/lib/commons-io-2.4.jar deleted file mode 100755 index 90035a4f..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-io-2.4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-lang-2.5.jar b/bundledApps/tomcat/webapps/lib/commons-lang-2.5.jar deleted file mode 100755 index ae491da8..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-lang-2.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-logging-1.1.1.jar b/bundledApps/tomcat/webapps/lib/commons-logging-1.1.1.jar deleted file mode 100755 index 1deef144..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-logging-1.1.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-math3-3.1.1.jar b/bundledApps/tomcat/webapps/lib/commons-math3-3.1.1.jar deleted file mode 100755 index 43b52159..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-math3-3.1.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-net-1.4.1.jar b/bundledApps/tomcat/webapps/lib/commons-net-1.4.1.jar deleted file mode 100755 index 9666a92c..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-net-1.4.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/commons-pool-1.5.5.jar b/bundledApps/tomcat/webapps/lib/commons-pool-1.5.5.jar deleted file mode 100755 index 7a96587c..00000000 Binary files a/bundledApps/tomcat/webapps/lib/commons-pool-1.5.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/core-3.1.1.jar b/bundledApps/tomcat/webapps/lib/core-3.1.1.jar deleted file mode 100755 index ae0b6358..00000000 Binary files a/bundledApps/tomcat/webapps/lib/core-3.1.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/dsiutils-2.0.12.jar b/bundledApps/tomcat/webapps/lib/dsiutils-2.0.12.jar deleted file mode 100755 index 18ab6f12..00000000 Binary files a/bundledApps/tomcat/webapps/lib/dsiutils-2.0.12.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/fastutil-6.5.2.jar b/bundledApps/tomcat/webapps/lib/fastutil-6.5.2.jar deleted file mode 100755 index 0b4c0984..00000000 Binary files a/bundledApps/tomcat/webapps/lib/fastutil-6.5.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/guava-17.0.jar b/bundledApps/tomcat/webapps/lib/guava-17.0.jar deleted file mode 100755 index 661fc747..00000000 Binary files a/bundledApps/tomcat/webapps/lib/guava-17.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/guava-r09-jarjar.jar b/bundledApps/tomcat/webapps/lib/guava-r09-jarjar.jar deleted file mode 100755 index 695078e9..00000000 Binary files a/bundledApps/tomcat/webapps/lib/guava-r09-jarjar.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/hadoop-ant-0.20.2-cdh3u4.pom b/bundledApps/tomcat/webapps/lib/hadoop-ant-0.20.2-cdh3u4.pom deleted file mode 100755 index a86925f6..00000000 --- a/bundledApps/tomcat/webapps/lib/hadoop-ant-0.20.2-cdh3u4.pom +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - 4.0.0 - - - com.cloudera.cdh - hadoop-root - 0.20.2-cdh3u4 - cloudera/maven-packaging/pom.xml - - - com.cloudera.cdh - hadoop-ant - ${cdh.hadoop.version} - pom - - Maven wrapper for Ant Hadoop build - CDH Hadoop Maven Wrapper - - - - - - - cdh.repos - - false - - use.cdh.repos - !false - - - - - cdh.releases.repo - https://repository.cloudera.com/content/groups/cdh-releases-rcs - CDH Releases Repository - - false - - - - cdh.snapshots.repo - https://repository.cloudera.com/content/repositories/snapshots - CDH Snapshots Repository - - true - - - - - - - - - non.release.build - - false - - not.cdh.release.build - !false - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.6 - false - - - clean - - - - - - - - - - - run - - clean - - - compile - - - - - - - - - - - run - - compile - - - test - - - - - - - - - - - run - - test - - - - - - - - - - cdh.release.build - - false - - not.cdh.release.build - false - - - - - - org.apache.maven.plugins - maven-antrun-plugin - false - - - tar - - - - - - - - - - - run - - compile - - - - - - - - - - - - - com.cloudera.kitchen - maven-deps-to-props-plugin - - - - build.properties - - ${basedir}/cloudera/maven-packaging/templates/build.template - ${basedir}/build.properties - - - generate - - process-resources - - - - - - - diff --git a/bundledApps/tomcat/webapps/lib/hadoop-core-0.20.2-cdh3u4.jar b/bundledApps/tomcat/webapps/lib/hadoop-core-0.20.2-cdh3u4.jar deleted file mode 100755 index 800ea59d..00000000 Binary files a/bundledApps/tomcat/webapps/lib/hadoop-core-0.20.2-cdh3u4.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/htmlparser-1.6.jar b/bundledApps/tomcat/webapps/lib/htmlparser-1.6.jar deleted file mode 100755 index 2981ca55..00000000 Binary files a/bundledApps/tomcat/webapps/lib/htmlparser-1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/httpclient-4.3.5.jar b/bundledApps/tomcat/webapps/lib/httpclient-4.3.5.jar deleted file mode 100755 index 1db1225f..00000000 Binary files a/bundledApps/tomcat/webapps/lib/httpclient-4.3.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/httpcore-4.3.jar b/bundledApps/tomcat/webapps/lib/httpcore-4.3.jar deleted file mode 100755 index ddfe6dac..00000000 Binary files a/bundledApps/tomcat/webapps/lib/httpcore-4.3.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jackson-core-asl-1.5.2.jar b/bundledApps/tomcat/webapps/lib/jackson-core-asl-1.5.2.jar deleted file mode 100755 index 24107e68..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jackson-core-asl-1.5.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jackson-mapper-asl-1.5.2.jar b/bundledApps/tomcat/webapps/lib/jackson-mapper-asl-1.5.2.jar deleted file mode 100755 index ebf9b5ef..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jackson-mapper-asl-1.5.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/je-4.1.6.jar b/bundledApps/tomcat/webapps/lib/je-4.1.6.jar deleted file mode 100755 index 866543a8..00000000 Binary files a/bundledApps/tomcat/webapps/lib/je-4.1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jedis-2.0.0.jar b/bundledApps/tomcat/webapps/lib/jedis-2.0.0.jar deleted file mode 100755 index aaf61e78..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jedis-2.0.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jets3t-0.6.1.jar b/bundledApps/tomcat/webapps/lib/jets3t-0.6.1.jar deleted file mode 100755 index e4048dd6..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jets3t-0.6.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jettison-1.0-beta-1.jar b/bundledApps/tomcat/webapps/lib/jettison-1.0-beta-1.jar deleted file mode 100755 index 146e0d47..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jettison-1.0-beta-1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/joda-time-1.6.jar b/bundledApps/tomcat/webapps/lib/joda-time-1.6.jar deleted file mode 100755 index 68068a4b..00000000 Binary files a/bundledApps/tomcat/webapps/lib/joda-time-1.6.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jsap-2.1.jar b/bundledApps/tomcat/webapps/lib/jsap-2.1.jar deleted file mode 100755 index 15d1f37a..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jsap-2.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/json-20131018.jar b/bundledApps/tomcat/webapps/lib/json-20131018.jar deleted file mode 100755 index 394caded..00000000 Binary files a/bundledApps/tomcat/webapps/lib/json-20131018.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/juniversalchardet-1.0.3.jar b/bundledApps/tomcat/webapps/lib/juniversalchardet-1.0.3.jar deleted file mode 100755 index ef4d7af5..00000000 Binary files a/bundledApps/tomcat/webapps/lib/juniversalchardet-1.0.3.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jwat-arc-1.0.1.jar b/bundledApps/tomcat/webapps/lib/jwat-arc-1.0.1.jar deleted file mode 100755 index 01893efc..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jwat-arc-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jwat-archive-common-1.0.1.jar b/bundledApps/tomcat/webapps/lib/jwat-archive-common-1.0.1.jar deleted file mode 100755 index 4aae191c..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jwat-archive-common-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jwat-common-1.0.1.jar b/bundledApps/tomcat/webapps/lib/jwat-common-1.0.1.jar deleted file mode 100755 index a17358c7..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jwat-common-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jwat-gzip-1.0.1.jar b/bundledApps/tomcat/webapps/lib/jwat-gzip-1.0.1.jar deleted file mode 100755 index 12adfa79..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jwat-gzip-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/jwat-warc-1.0.1.jar b/bundledApps/tomcat/webapps/lib/jwat-warc-1.0.1.jar deleted file mode 100755 index fd23bc7f..00000000 Binary files a/bundledApps/tomcat/webapps/lib/jwat-warc-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/libidn-1.15.jar b/bundledApps/tomcat/webapps/lib/libidn-1.15.jar deleted file mode 100755 index 79a44f92..00000000 Binary files a/bundledApps/tomcat/webapps/lib/libidn-1.15.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/log4j-1.2.17.jar b/bundledApps/tomcat/webapps/lib/log4j-1.2.17.jar deleted file mode 100755 index 1d425cf7..00000000 Binary files a/bundledApps/tomcat/webapps/lib/log4j-1.2.17.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/openwayback-access-control-core-1.0.2.jar b/bundledApps/tomcat/webapps/lib/openwayback-access-control-core-1.0.2.jar deleted file mode 100755 index a312aba5..00000000 Binary files a/bundledApps/tomcat/webapps/lib/openwayback-access-control-core-1.0.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/openwayback-cdx-server-2.3.0.jar b/bundledApps/tomcat/webapps/lib/openwayback-cdx-server-2.3.0.jar deleted file mode 100755 index 54fbfa29..00000000 Binary files a/bundledApps/tomcat/webapps/lib/openwayback-cdx-server-2.3.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/openwayback-core-2.3.0.jar b/bundledApps/tomcat/webapps/lib/openwayback-core-2.3.0.jar deleted file mode 100755 index 91c1b5b7..00000000 Binary files a/bundledApps/tomcat/webapps/lib/openwayback-core-2.3.0.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/oro-2.0.8.jar b/bundledApps/tomcat/webapps/lib/oro-2.0.8.jar deleted file mode 100755 index 23488d26..00000000 Binary files a/bundledApps/tomcat/webapps/lib/oro-2.0.8.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/slf4j-api-1.7.2.jar b/bundledApps/tomcat/webapps/lib/slf4j-api-1.7.2.jar deleted file mode 100755 index 1a887083..00000000 Binary files a/bundledApps/tomcat/webapps/lib/slf4j-api-1.7.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-aop-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-aop-3.0.6.RELEASE.jar deleted file mode 100755 index 37206d38..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-aop-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-asm-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-asm-3.0.6.RELEASE.jar deleted file mode 100755 index be6a913d..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-asm-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-beans-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-beans-3.0.6.RELEASE.jar deleted file mode 100755 index c4bc8507..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-beans-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-context-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-context-3.0.6.RELEASE.jar deleted file mode 100755 index 57f75703..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-context-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-context-support-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-context-support-3.0.6.RELEASE.jar deleted file mode 100755 index e957f85f..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-context-support-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-core-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-core-3.0.6.RELEASE.jar deleted file mode 100755 index c65358d1..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-core-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-expression-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-expression-3.0.6.RELEASE.jar deleted file mode 100755 index 40648588..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-expression-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-web-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-web-3.0.6.RELEASE.jar deleted file mode 100755 index 761578b0..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-web-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/spring-webmvc-3.0.6.RELEASE.jar b/bundledApps/tomcat/webapps/lib/spring-webmvc-3.0.6.RELEASE.jar deleted file mode 100755 index 4f041975..00000000 Binary files a/bundledApps/tomcat/webapps/lib/spring-webmvc-3.0.6.RELEASE.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/stax-api-1.0.1.jar b/bundledApps/tomcat/webapps/lib/stax-api-1.0.1.jar deleted file mode 100755 index d9a16651..00000000 Binary files a/bundledApps/tomcat/webapps/lib/stax-api-1.0.1.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/transform-3.0.2.jar b/bundledApps/tomcat/webapps/lib/transform-3.0.2.jar deleted file mode 100755 index f8d82528..00000000 Binary files a/bundledApps/tomcat/webapps/lib/transform-3.0.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/webarchive-commons-1.1.5.jar b/bundledApps/tomcat/webapps/lib/webarchive-commons-1.1.5.jar deleted file mode 100755 index 0809d561..00000000 Binary files a/bundledApps/tomcat/webapps/lib/webarchive-commons-1.1.5.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/xmlenc-0.52.jar b/bundledApps/tomcat/webapps/lib/xmlenc-0.52.jar deleted file mode 100755 index ec568b4c..00000000 Binary files a/bundledApps/tomcat/webapps/lib/xmlenc-0.52.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/xpp3_min-1.1.3.4.O.jar b/bundledApps/tomcat/webapps/lib/xpp3_min-1.1.3.4.O.jar deleted file mode 100755 index 640441da..00000000 Binary files a/bundledApps/tomcat/webapps/lib/xpp3_min-1.1.3.4.O.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/lib/xstream-1.2.2.jar b/bundledApps/tomcat/webapps/lib/xstream-1.2.2.jar deleted file mode 100755 index 31721c5f..00000000 Binary files a/bundledApps/tomcat/webapps/lib/xstream-1.2.2.jar and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/META-INF/context.xml b/bundledApps/tomcat/webapps/manager/META-INF/context.xml deleted file mode 100755 index 7afc3a81..00000000 --- a/bundledApps/tomcat/webapps/manager/META-INF/context.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - diff --git a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/401.jsp b/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/401.jsp deleted file mode 100755 index f3f064c6..00000000 --- a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/401.jsp +++ /dev/null @@ -1,79 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - 401 Unauthorized - - - -

    401 Unauthorized

    -

    - You are not authorized to view this page. If you have not changed - any configuration files, please examine the file - conf/tomcat-users.xml in your installation. That - file must contain the credentials to let you use this webapp. -

    -

    - For example, to add the manager-gui role to a user named - tomcat with a password of s3cret, add the following to the - config file listed above. -

    -
    -<role rolename="manager-gui"/>
    -<user username="tomcat" password="s3cret" roles="manager-gui"/>
    -
    -

    - Note that for Tomcat 7 onwards, the roles required to use the manager - application were changed from the single manager role to the - following four roles. You will need to assign the role(s) required for - the functionality you wish to access. -

    -
      -
    • manager-gui - allows access to the HTML GUI and the status - pages
    • -
    • manager-script - allows access to the text interface and the - status pages
    • -
    • manager-jmx - allows access to the JMX proxy and the status - pages
    • -
    • manager-status - allows access to the status pages only
    • -
    -

    - The HTML interface is protected against CSRF but the text and JMX interfaces - are not. To maintain the CSRF protection: -

    -
      -
    • Users with the manager-gui role should not be granted either - the manager-script or manager-jmx roles.
    • -
    • If the text or jmx interfaces are accessed through a browser (e.g. for - testing since these interfaces are intended for tools not humans) then - the browser must be closed afterwards to terminate the session.
    • -
    -

    - For more information - please see the - Manager App HOW-TO. -

    - - - diff --git a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/403.jsp b/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/403.jsp deleted file mode 100755 index 33a6b006..00000000 --- a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/403.jsp +++ /dev/null @@ -1,94 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - - - - 403 Access Denied - - - -

    403 Access Denied

    -

    - You are not authorized to view this page. -

    -

    - If you have already configured the Manager application to allow access and - you have used your browsers back button, used a saved book-mark or similar - then you may have triggered the cross-site request forgery (CSRF) protection - that has been enabled for the HTML interface of the Manager application. You - will need to reset this protection by returning to the - main Manager page. Once you - return to this page, you will be able to continue using the Manager - appliction's HTML interface normally. If you continue to see this access - denied message, check that you have the necessary permissions to access this - application. -

    -

    - If you have not changed - any configuration files, please examine the file - conf/tomcat-users.xml in your installation. That - file must contain the credentials to let you use this webapp. -

    -

    - For example, to add the manager-gui role to a user named - tomcat with a password of s3cret, add the following to the - config file listed above. -

    -
    -<role rolename="manager-gui"/>
    -<user username="tomcat" password="s3cret" roles="manager-gui"/>
    -
    -

    - Note that for Tomcat 7 onwards, the roles required to use the manager - application were changed from the single manager role to the - following four roles. You will need to assign the role(s) required for - the functionality you wish to access. -

    -
      -
    • manager-gui - allows access to the HTML GUI and the status - pages
    • -
    • manager-script - allows access to the text interface and the - status pages
    • -
    • manager-jmx - allows access to the JMX proxy and the status - pages
    • -
    • manager-status - allows access to the status pages only
    • -
    -

    - The HTML interface is protected against CSRF but the text and JMX interfaces - are not. To maintain the CSRF protection: -

    -
      -
    • Users with the manager-gui role should not be granted either - the manager-script or manager-jmx roles.
    • -
    • If the text or jmx interfaces are accessed through a browser (e.g. for - testing since these interfaces are intended for tools not humans) then - the browser must be closed afterwards to terminate the session.
    • -
    -

    - For more information - please see the - Manager App HOW-TO. -

    - - - diff --git a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/404.jsp b/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/404.jsp deleted file mode 100755 index 2b8b0b70..00000000 --- a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/404.jsp +++ /dev/null @@ -1,62 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ page import="org.apache.catalina.util.RequestUtil" %> - - - - 404 Not found - - - -

    404 Not found

    -

    - The page you tried to access - (<%=RequestUtil.filter((String) request.getAttribute( - "javax.servlet.error.request_uri"))%>) - does not exist. -

    -

    - The Manager application has been re-structured for Tomcat 7 onwards and some - of URLs have changed. All URLs used to access the Manager application should - now start with one of the following options: -

    -
      -
    • <%=request.getContextPath()%>/html for the HTML GUI
    • -
    • <%=request.getContextPath()%>/text for the text interface
    • -
    • <%=request.getContextPath()%>/jmxproxy for the JMX proxy
    • -
    • <%=request.getContextPath()%>/status for the status pages
    • -
    -

    - Note that the URL for the text interface has changed from - "<%=request.getContextPath()%>" to - "<%=request.getContextPath()%>/text". -

    -

    - You probably need to adjust the URL you are using to access the Manager - application. However, there is always a chance you have found a bug in the - Manager application. If you are sure you have found a bug, and that the bug - has not already been reported, please report it to the Apache Tomcat team. -

    - - diff --git a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/sessionDetail.jsp b/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/sessionDetail.jsp deleted file mode 100755 index ad1be8f6..00000000 --- a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/sessionDetail.jsp +++ /dev/null @@ -1,197 +0,0 @@ - -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page session="false" contentType="text/html; charset=ISO-8859-1" %> -<%@page import="java.util.Enumeration" %> -<%@page import="javax.servlet.http.HttpSession" %> -<%@page import="org.apache.catalina.Session" %> -<%@page import="org.apache.catalina.manager.JspHelper" %> -<%@page import="org.apache.catalina.util.ContextName" %> - -<%--!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" - "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"--%> - - -<% String path = (String) request.getAttribute("path"); - String version = (String) request.getAttribute("version"); - ContextName cn = new ContextName(path, version); - Session currentSession = (Session)request.getAttribute("currentSession"); - String currentSessionId = null; - HttpSession currentHttpSession = null; - if (currentSession != null) { - currentHttpSession = currentSession.getSession(); - currentSessionId = JspHelper.escapeXml(currentSession.getId()); - } else { - currentSessionId = "Session invalidated"; - } - String submitUrl = JspHelper.escapeXml(response.encodeURL( - ((HttpServletRequest) pageContext.getRequest()).getRequestURI() + - "?path=" + path + "&version=" + version)); -%> - - - - - - - - - - Sessions Administration: details for <%= currentSessionId %> - - -<% if (currentHttpSession == null) { %> -

    <%=currentSessionId%>

    -<% } else { %> -

    Details for Session <%= currentSessionId %>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Session Id<%= currentSessionId %>
    Guessed Locale<%= JspHelper.guessDisplayLocaleFromSession(currentSession) %>
    Guessed User<%= JspHelper.guessDisplayUserFromSession(currentSession) %>
    Creation Time<%= JspHelper.getDisplayCreationTimeForSession(currentSession) %>
    Last Accessed Time<%= JspHelper.getDisplayLastAccessedTimeForSession(currentSession) %>
    Session Max Inactive Interval<%= JspHelper.secondsToTimeString(currentSession.getMaxInactiveInterval()) %>
    Used Time<%= JspHelper.getDisplayUsedTimeForSession(currentSession) %>
    Inactive Time<%= JspHelper.getDisplayInactiveTimeForSession(currentSession) %>
    TTL<%= JspHelper.getDisplayTTLForSession(currentSession) %>
    - -
    -
    - - - <% - if ("Primary".equals(request.getParameter("sessionType"))) { - %> - - <% - } - %> -
    -
    - -
    <%= JspHelper.escapeXml(request.getAttribute("error")) %>
    -
    <%= JspHelper.escapeXml(request.getAttribute("message")) %>
    - - - <% int nAttributes = 0; - Enumeration attributeNamesEnumeration = currentHttpSession.getAttributeNames(); - while (attributeNamesEnumeration.hasMoreElements()) { - attributeNamesEnumeration.nextElement(); - ++nAttributes; - } - %> - - - - - - - - - <%--tfoot> - - - - - - <% attributeNamesEnumeration = currentHttpSession.getAttributeNames(); - while (attributeNamesEnumeration.hasMoreElements()) { - String attributeName = (String) attributeNamesEnumeration.nextElement(); - %> - - - - - - <% } // end while %> - -
    <%= JspHelper.formatNumber(nAttributes) %> attributes
    Remove AttributeAttribute nameAttribute value
    - TODO: set Max Inactive Interval on sessions -
    -
    -
    - - - - <% - if ("Primary".equals(request.getParameter("sessionType"))) { - %> - - - <% - } else { - out.print("Primary sessions only"); - } - %> -
    -
    -
    <%= JspHelper.escapeXml(attributeName) %><% Object attributeValue = currentHttpSession.getAttribute(attributeName); %>"><%= JspHelper.escapeXml(attributeValue) %>
    -<% } // endif%> - -
    -

    - -

    -
    - -<%--div style="display: none;"> -

    - Valid HTML 4.01! - Valid XHTML 1.0! - Valid XHTML 1.1! -

    - - - - diff --git a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/sessionsList.jsp b/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/sessionsList.jsp deleted file mode 100755 index 53964960..00000000 --- a/bundledApps/tomcat/webapps/manager/WEB-INF/jsp/sessionsList.jsp +++ /dev/null @@ -1,172 +0,0 @@ - -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page session="false" contentType="text/html; charset=ISO-8859-1" %> -<%@page import="java.util.Collection" %> -<%@page import="java.util.Iterator" %> -<%@page import="org.apache.catalina.manager.JspHelper" %> -<%@page import="org.apache.catalina.Session" %> -<%@page import="org.apache.catalina.ha.session.DeltaSession" %> -<%@page import="org.apache.catalina.util.ContextName" %> - - - -<%@page import="org.apache.catalina.manager.DummyProxySession"%> -<% String path = (String) request.getAttribute("path"); - String version = (String) request.getAttribute("version"); - ContextName cn = new ContextName(path, version); - String submitUrl = JspHelper.escapeXml(response.encodeURL( - ((HttpServletRequest) pageContext.getRequest()).getRequestURI() + - "?path=" + path + "&version=" + version)); - Collection activeSessions = (Collection) request.getAttribute("activeSessions"); -%> - - - - - - - - - - Sessions Administration for <%= JspHelper.escapeXml(cn.getDisplayName()) %> - - -

    Sessions Administration for <%= JspHelper.escapeXml(cn.getDisplayName()) %>

    - -

    Tips:

    -
      -
    • Click on a column to sort.
    • -
    • To view a session details and/or remove a session attributes, click on its id.
    • -
    - -
    <%= JspHelper.escapeXml(request.getAttribute("error")) %>
    -
    <%= JspHelper.escapeXml(request.getAttribute("message")) %>
    - -
    -
    Active HttpSessions informations - - "/> - <% String order = (String) request.getAttribute("order"); - if (order == null || "".equals(order)) { - order = "ASC"; - } - %> - - - <%= JspHelper.formatNumber(activeSessions.size()) %> active Sessions
    - - - - - - - - - - - - - - - <% if (activeSessions.size() > 10) { %> - <%-- is the same as --%> - - - - - - - - - - - - - <% } // end if %> - -<% Iterator iter = activeSessions.iterator(); - while (iter.hasNext()) { - Session currentSession = (Session) iter.next(); - String currentSessionId = JspHelper.escapeXml(currentSession.getId()); - String type; - if (currentSession instanceof DeltaSession) { - if (((DeltaSession) currentSession).isPrimarySession()) { - type = "Primary"; - } else { - type = "Backup"; - } - } else if (currentSession instanceof DummyProxySession) { - type = "Proxy"; - } else { - type = "Primary"; - } -%> - - - - - - - - - - - -<% } // end while %> - -
    Session IdTypeGuessed LocaleGuessed User nameCreation TimeLast Accessed TimeUsed TimeInactive TimeTTL
    Session IdTypeGuessed LocaleGuessed User nameCreation TimeLast Accessed TimeUsed TimeInactive TimeTTL
    - <% - if ("Proxy".equals(type)) { - out.print(currentSessionId); - } else { - %> - <%= currentSessionId %> - <% - } - %> - <%= type %><%= JspHelper.guessDisplayLocaleFromSession(currentSession) %><%= JspHelper.guessDisplayUserFromSession(currentSession) %><%= JspHelper.getDisplayCreationTimeForSession(currentSession) %><%= JspHelper.getDisplayLastAccessedTimeForSession(currentSession) %><%= JspHelper.getDisplayUsedTimeForSession(currentSession) %><%= JspHelper.getDisplayInactiveTimeForSession(currentSession) %><%= JspHelper.getDisplayTTLForSession(currentSession) %>
    -

    - -

    -
    -
    - -
    -

    - -

    -
    - -<%--div style="display: none;"> -

    - Valid HTML 4.01! - Valid XHTML 1.0! - Valid XHTML 1.1! -

    - - - - diff --git a/bundledApps/tomcat/webapps/manager/WEB-INF/web.xml b/bundledApps/tomcat/webapps/manager/WEB-INF/web.xml deleted file mode 100755 index 49c3693d..00000000 --- a/bundledApps/tomcat/webapps/manager/WEB-INF/web.xml +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - Tomcat Manager Application - - A scriptable management web application for the Tomcat Web Server; - Manager lets you view, load/unload/etc particular web applications. - - - - Manager - org.apache.catalina.manager.ManagerServlet - - debug - 2 - - - - HTMLManager - org.apache.catalina.manager.HTMLManagerServlet - - debug - 2 - - - - - 52428800 - 52428800 - 0 - - - - Status - org.apache.catalina.manager.StatusManagerServlet - - debug - 0 - - - - - JMXProxy - org.apache.catalina.manager.JMXProxyServlet - - - - - Manager - /text/* - - - Status - /status/* - - - JMXProxy - /jmxproxy/* - - - HTMLManager - /html/* - - - - SetCharacterEncoding - org.apache.catalina.filters.SetCharacterEncodingFilter - - encoding - UTF-8 - - - - - SetCharacterEncoding - /* - - - - CSRF - org.apache.catalina.filters.CsrfPreventionFilter - - entryPoints - /html,/html/,/html/list,/index.jsp - - - - - CSRF - HTMLManager - jsp - - - - - - - HTML Manager interface (for humans) - /html/* - - - manager-gui - - - - - Text Manager interface (for scripts) - /text/* - - - manager-script - - - - - JMX Proxy interface - /jmxproxy/* - - - manager-jmx - - - - - Status interface - /status/* - - - manager-gui - manager-script - manager-jmx - manager-status - - - - - - BASIC - Tomcat Manager Application - - - - - - The role that is required to access the HTML Manager pages - - manager-gui - - - - The role that is required to access the text Manager pages - - manager-script - - - - The role that is required to access the HTML JMX Proxy - - manager-jmx - - - - The role that is required to access to the Manager Status pages - - manager-status - - - - 401 - /WEB-INF/jsp/401.jsp - - - 403 - /WEB-INF/jsp/403.jsp - - - 404 - /WEB-INF/jsp/404.jsp - - - diff --git a/bundledApps/tomcat/webapps/manager/images/add.gif b/bundledApps/tomcat/webapps/manager/images/add.gif deleted file mode 100755 index 0774d074..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/add.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/asf-logo.gif b/bundledApps/tomcat/webapps/manager/images/asf-logo.gif deleted file mode 100755 index 22eb9d73..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/asf-logo.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/code.gif b/bundledApps/tomcat/webapps/manager/images/code.gif deleted file mode 100755 index d27307b5..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/code.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/design.gif b/bundledApps/tomcat/webapps/manager/images/design.gif deleted file mode 100755 index f5db0a9f..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/design.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/docs.gif b/bundledApps/tomcat/webapps/manager/images/docs.gif deleted file mode 100755 index d64a4a18..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/docs.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/fix.gif b/bundledApps/tomcat/webapps/manager/images/fix.gif deleted file mode 100755 index d59ad642..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/fix.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/tomcat.gif b/bundledApps/tomcat/webapps/manager/images/tomcat.gif deleted file mode 100755 index f2aa6f86..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/tomcat.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/update.gif b/bundledApps/tomcat/webapps/manager/images/update.gif deleted file mode 100755 index 31e22abb..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/update.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/images/void.gif b/bundledApps/tomcat/webapps/manager/images/void.gif deleted file mode 100755 index e565824a..00000000 Binary files a/bundledApps/tomcat/webapps/manager/images/void.gif and /dev/null differ diff --git a/bundledApps/tomcat/webapps/manager/index.jsp b/bundledApps/tomcat/webapps/manager/index.jsp deleted file mode 100755 index 3cf5cae3..00000000 --- a/bundledApps/tomcat/webapps/manager/index.jsp +++ /dev/null @@ -1,18 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<% response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + - "/html")); %> \ No newline at end of file diff --git a/bundledApps/tomcat/webapps/manager/status.xsd b/bundledApps/tomcat/webapps/manager/status.xsd deleted file mode 100755 index 32b7e010..00000000 --- a/bundledApps/tomcat/webapps/manager/status.xsd +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundledApps/tomcat/webapps/manager/xform.xsl b/bundledApps/tomcat/webapps/manager/xform.xsl deleted file mode 100755 index c6da0933..00000000 --- a/bundledApps/tomcat/webapps/manager/xform.xsl +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - Tomcat Status - - - -
    Tomcat Status
    - - - - - -
    - - - - - - - - - - - - -
    JVM:free: total: max:

    -
    - - - Connector --
    - - - - -
    - - - - - - - - - -
    threadInfo maxThreads: minSpareThreads: currentThreadCount: currentThreadsBusy:

    -
    - - - - - - - - - - - -
    requestInfo maxTime: processingTime: requestCount: errorCount: bytesReceived: bytesSent:

    -
    - - - - - - -
    StageTimeB SentB RecvClientVHostRequest

    -
    - - - - - - - - - - ? - - - -
    diff --git a/bundledApps/wailpy/MAKEFILE.bat b/bundledApps/wailpy/MAKEFILE.bat deleted file mode 100644 index de0c6fec..00000000 --- a/bundledApps/wailpy/MAKEFILE.bat +++ /dev/null @@ -1,7 +0,0 @@ -pyinstaller --onefile --windowed --version-file=build/version.txt --icon=build/icons/whale_1024.ico bundledApps/WAIL.py - -::Windows shell (CMD.exe) -move /Y ".\dist\WAIL.exe" ".\WAIL.exe" - -::Unix shell (e.g., from Git Bash on Windows) -::mv "./dist/WAIL.exe" "./WAIL.exe" \ No newline at end of file diff --git a/bundledApps/wailpy/MAKEFILE.sh b/bundledApps/wailpy/MAKEFILE.sh deleted file mode 100644 index 2634699a..00000000 --- a/bundledApps/wailpy/MAKEFILE.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/bash - -# This is the Makefile for WAIL for MacOS X -# http://matkelly.com/wail/ - -#cd /Applications/WAIL - -# You need python to execute it - -#if [ ! -z "$1" -a "$1" = "clean" ]; then -# if [ -e tomcat/webapps/ROOT/file-db ]; then -# rm -r tomcat/webapps/ROOT/file-db -# fi -# if [ -e tomcat/webapps/ROOT/index ]; then -# rm -r tomcat/webapps/ROOT/index -# fi -# if [ -e tomcat/webapps/ROOT/index-data ]; then -# rm -r tomcat/webapps/ROOT/index-data -# fi -# rm -r heritrix-3.2.0/jobs/* -# rm tomcat/webapps/ROOT/files1/* -#fi - - -#pyVersion=$(python -c 'import sys; print(sys.version_info[:])') - -DIRECTORY="/Applications/WAIL.app/" - -# Check if WAIL.app exists. Ask the user whether to nuke old binary. Exit if 'no' -if [ -d "$DIRECTORY" ]; then - echo $DIRECTORY" already exists!" - while true; do - read -p "Do you want me to delete the old app and continue (y/n)?" yn - case $yn in - [Yy]* ) echo "Continuing to build"; break;; - [Nn]* ) exit;; - * ) echo "Please answer y or n.";; - esac - done -fi - -read -p "Would you like to install binary, create dmg, or both? (i/d/b) " ans - -case "$ans" in - i|d|b) - ;; - *) - echo "Invalid choice, choose one of i/d/b" - exit - ;; -esac - - - -createBinary () -{ - pyinstaller ./bundledApps/WAIL.py --onefile --windowed --clean --icon="./build/icons/whale_1024.icns" - # Replace default version and icon information from pyinstaller - cp ./build/Info.plist ./dist/WAIL.app/Contents/Info.plist - # Copy the bundledApps and support directories to inside WAIL.app/ - cp -r ./bundledApps ./support ./build ./config ./archives ./archiveIndexes ./dist/WAIL.app/ - #pkgbuild --install-location=/Applications --component ./dist/WAIL.app ~/Downloads/WAIL.pkg -} - -deleteBinary () -{ - rm -rf /Applications/WAIL.app -} - -mvProducts () -{ - mv ./dist/WAIL.app /Applications/ - mv ./dist/WAIL /Applications/WAIL_cli -} - -cleanupByproducts () -{ - # Remove installation remnants - rm -r ./dist - rm -r ./build/WAIL -} - -buildDiskImage () -{ - # Create a dmg - dmgbuild -s ./build/dmgbuild_settings.py "WAIL" WAIL.dmg -} - -tweakOS () -{ - # Instruct the system to update the version string - defaults read /Applications/WAIL.app/Contents/Info.plist > /dev/null - - # Associate defined file types with WAIL - /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -f /Applications/WAIL.app -} - -createBinary -deleteBinary # Remove previous version -mvProducts -cleanupByproducts - -# install binary, create dmg, or both? (i/d/b) - -# Just build dmg, delete binary, no system tweaks required -if [ $ans = "b" ] || [ $ans = "d" ]; then - buildDiskImage - if [ $ans = "d" ]; then # Remove the installed binary if only making dmg - deleteBinary - fi -fi - -if [ $ans = "i" ] || [ $ans = "d" ]; then # Tweak system for binary - tweakOS -fi -#killall Finder - -#cleanup -#rm -r dist -#rm WAIL.spec -#rm -r build diff --git a/bundledApps/wailpy/MakeWaybackAndInstall.sh b/bundledApps/wailpy/MakeWaybackAndInstall.sh deleted file mode 100644 index 0f039458..00000000 --- a/bundledApps/wailpy/MakeWaybackAndInstall.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -#set context -cd /Applications/WAIL/bundledApps/tomcat/webapps/wayback-src/wayback-master - -#make -mvn validate /Applications/WAIL/tomcat/webapps/wayback-src/wayback-master -mvn compile -mvn package - -#move -cp -r /Applications/WAIL/bundledApps/tomcat/webapps/wayback-src/wayback-master/wayback-webapp/target/wayback-1.7.1-SNAPSHOT /Applications/WAIL/tomcat/webapps/ -rm -r /Applications/WAIL/bundledApps/tomcat/webapps/wayback-1.7.1-SNAPSHOT/WEB-INF -cp -r /Applications/WAIL/bundledApps/tomcat/webapps/wayback-1.6/WEB-INF /Applications/WAIL/tomcat/webapps/wayback-1.7.1-SNAPSHOT/WEB-INF -cp -r /Applications/WAIL/bundledApps/tomcat/webapps/ROOT/files1 /Applications/WAIL/tomcat/webapps/wayback-1.7.1-SNAPSHOT/ - - -#install -mv /Applications/WAIL/bundledApps/tomcat/webapps/ROOT /Applications/WAIL/tomcat/webapps/ROOT_old -mv /Applications/WAIL/bundledApps/tomcat/webapps/wayback-1.7.1-SNAPSHOT/ /Applications/WAIL/tomcat/webapps/ROOT/ \ No newline at end of file diff --git a/bundledApps/wailpy/WAIL.py b/bundledApps/wailpy/WAIL.py deleted file mode 100644 index 46c6634f..00000000 --- a/bundledApps/wailpy/WAIL.py +++ /dev/null @@ -1,2215 +0,0 @@ -#!/usr/bin/env python -#-*- coding:utf-8 -*- - -# Web Archiving Integration Layer (WAIL) -# This tool ties together web archiving applications including Wayback, -# Heritrix, and Tomcat. -# Mat Kelly 2013 - -import wx -import subprocess -import shlex -import webbrowser -import os -import schedule -import time -import sys -import datetime -import urllib -import urllib2 -import base64 -import glob -import re -import ssl -import shutil -import errno -import json -from urlparse import urlparse - -# from wx import * -import waybackConfigWriter -from subprocess import Popen, PIPE -from subprocess import check_output - -# For a more asynchronous UI, esp with accessible()s -from multiprocessing import Pool as Thread -import logging -import requests -import threading # Necessary for polling/indexing -import thread # For a more responsive UI -from requests.auth import HTTPDigestAuth - -from os import listdir -from os.path import isfile, join - -import wxversion - -import tarfile # For updater - -ssl._create_default_https_context = ssl._create_unverified_context - -# from pync import Notifier # OS X notifications - -WAIL_VERSION = "-1" -INDEX_TIMER_SECONDS = 10.0 - -try: - with open ("/Applications/WAIL.app/Contents/Info.plist", "r") as myfile: - data=myfile.read() - m = re.search(r"CFBundleShortVersionString\n\t(.*)", - data) - WAIL_VERSION = m.groups()[0].strip() -except: - print "User likely has the binary in the wrong location." - -osx_java7DMG = "http://matkelly.com/wail/support/jdk-7u79-macosx-x64.dmg" - -############################### -# Platform independent Messages -############################### -msg_stoppingTomcat = "Stopping Tomcat..." -msg_startingTomcat = "Starting Tomcat..." -msg_waybackEnabled = "Currently Enabled" -msg_waybackDisabled = "Currently Disabled" -msg_waybackNotStarted_title = "Wayback does not appear to be running." -msg_waybackNotStarted_body = "Launch Wayback and re-check?" -msg_uriNotInArchives = "The URL is not yet in the archives." -msg_uriInArchives_title = "This page has been archived!" -msg_uriInArchives_body = ("This URL is currently in the archives!" - " Hit the \"View Archive\" Button") -msg_wrongLocation_body = "WAIL must reside in your Applications directory. Move it there then relaunch.\n\nCurrent Location: " -msg_wrongLocation_title = "Wrong Location" -msg_noJavaRuntime = "No Java runtime present, requesting install." -msg_fetchingMementos = "Fetching memento count from public archives..." - -tabLabel_basic = "Basic" -tabLabel_advanced = "Advanced" - -tabLabel_advanced_general = "General" -tabLabel_advanced_wayback = "Wayback" -tabLabel_advanced_heritrix = "Heritrix" -tabLabel_advanced_miscellaneous = "Miscellaneous" -tabLabel_advanced_general_serviceStatus = "SERVICE STATUS" - -serviceEnabledLabel_YES = "OK" # "✓" -serviceEnabledLabel_NO = "X" # "✗" - -# Basic Tab Buttons -buttonLabel_archiveNow = "Archive Now!" -buttonLabel_archiveNow_initializing = "INITIALIZING" -buttonLabel_checkStatus = "Check Archived Status" -buttonLabel_viewArchive = "View Archive" -buttonLabel_uri = "URL:" -buttonLabel_fix = "Fix" -buttonLabel_kill = "Kill" -buttonLabel_refresh = "Refresh" - -textLabel_defaultURI = "http://matkelly.com/wail" -textLabel_defaultURI_title = "WAIL homepage" - -aboutWindow_appName = "Web Archiving Integration Layer (WAIL)" -aboutWindow_author = "By Mat Kelly " -aboutWindow_iconPath = "/build/icons/whale.ico" -aboutWindow_iconWidth = 128 -aboutWindow_iconHeight = 128 - -# Advanced Tab Buttons -buttonLabel_wayback = "View Wayback in Browser" -buttonLabel_wayback_launching = "Launching Wayback..." -buttonLabel_editWaybackConfig = "Edit Wayback Configuration" -buttonLabel_resetWaybackConfig = "Reset Wayback Configuration" -buttonLabel_startHeritrix = "Start Heritrix Process" -buttonLabel_viewHeritrix = "View Heritrix in Browser" -buttonLabel_setupCrawl = "Setup One-Off Crawl" -buttonLabel_viewArchiveFiles = "View Archive Files" -buttonLabel_heritrix_launchWebUI = "Launch WebUI" -buttonLabel_heritrix_launchWebUI_launching = "Launching..." -buttonLabel_heritrix_newCrawl = "New Crawl" - -groupLabel_window = "Web Archiving Integration Layer" - -menuTitle_about = "&About WAIL" -menuTitle_help = "&Help" -menu_destroyJob = "Destroy Job (Does not delete archive)" -menu_forceCrawlFinish = "Force crawl to finish" -menu_viewJobInWebBrowser = "View job in web browser" - -heritrixCredentials_username = "lorem" -heritrixCredentials_password = "ipsum" - - -uri_tomcat = "http://localhost:8080/" -uri_wayback = "http://localhost:8080/wayback/" -uri_wayback_allMementos = uri_wayback + "*/" -uri_heritrix = "https://" + heritrixCredentials_username + ":" + heritrixCredentials_password + "@localhost:8443" -uri_heritrix_accessiblityURI = "https://" + heritrixCredentials_username + ":" + heritrixCredentials_password + "@localhost:8443" -uri_heritrixJob = uri_heritrix + "/engine/job/" - -############################### -# Platform-specific paths -############################### - -heritrixPath = "" -heritrixBinPath = "" -heritrixJobPath = "" -warcsFolder = "" -tomcatPath = "" -tomcatPathStart = "" -tomcatPathStop = "" -wailPath = os.path.dirname(os.path.realpath(__file__)) -fontSize = 8 -wailWindowSize = (400,250) - -if 'darwin' in sys.platform: # OS X Specific Code here - # This should be dynamic but doesn't work with WAIL binary - wailPath = "/Applications/WAIL.app" - heritrixPath = wailPath + "/bundledApps/heritrix-3.2.0/" - heritrixBinPath = "sh " + heritrixPath+"bin/heritrix" - heritrixJobPath = heritrixPath+"jobs/" - fontSize = 10 - tomcatPath = wailPath + "/bundledApps/tomcat" - warcsFolder = wailPath + "/archives" - tomcatPathStart = tomcatPath + "/bin/startup.sh" - tomcatPathStop = tomcatPath + "/bin/shutdown.sh" - - aboutWindow_iconPath = wailPath + aboutWindow_iconPath - - memGatorPath = wailPath + "/bundledApps/memgator" - archivesJSON = wailPath + "/config/archives.json" - - # Fix tomcat control scripts' permissions - os.chmod(tomcatPathStart, 0744) - os.chmod(tomcatPathStop, 0744) - os.chmod(tomcatPath + "/bin/catalina.sh", 0744) - # TODO, variable encode paths, ^ needed for startup.sh to execute - - # Change all permissions within the app bundle (a big hammer) - for r, d, f in os.walk(wailPath): - os.chmod(r, 0777) -elif sys.platform.startswith('linux'): - '''Linux Specific Code here''' -elif sys.platform.startswith('win32'): - # Win Specific Code here, this applies to both 32 and 64 bit - # Consider using http://code.google.com/p/platinfo/ in the future for finer refinement - - aboutWindow_iconPath = wailPath + aboutWindow_iconPath - - heritrixPath = "C:/WAIL/bundledApps/heritrix-3.2.0/" - heritrixBinPath = heritrixPath+"bin/heritrix.cmd" - heritrixJobPath = "C:\\WAIL\\jobs\\" - tomcatPath = "C:/WAIL/bundledApps/tomcat" - warcsFolder = wailPathPath + "archives" - tomcatPathStart = "C:/WAIL/support/catalina_start.bat" - tomcatPathStop = "C:/WAIL/support/catalina_stop.bat" -############################### -# Tab Controller (Notebook) -############################### - - -class TabController(wx.Frame): - def __init__(self): - wx.Frame.__init__(self, None, title=groupLabel_window, size=wailWindowSize, style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) - panel = wx.Panel(self) - vbox = wx.BoxSizer(wx.VERTICAL) - - self.Notebook = wx.Notebook(panel) - vbox.Add(self.Notebook, 2, flag=wx.EXPAND) - - panel.SetSizer(vbox) - - # Add basic config page/tab - self.basicConfig = WAILGUIFrame_Basic(self.Notebook) - self.Notebook.AddPage(self.basicConfig, tabLabel_basic) - - # Add advanced config page/tab - self.advConfig = WAILGUIFrame_Advanced(self.Notebook) - self.Notebook.AddPage(self.advConfig, tabLabel_advanced) - self.createMenu() - - self.indexingTimer = threading.Timer(INDEX_TIMER_SECONDS,Wayback().index) - self.indexingTimer.daemon = True - self.indexingTimer.start() - def createMenu(self): - self.menu_bar = wx.MenuBar() - self.help_menu = wx.Menu() - - self.help_menu.Append(wx.ID_ABOUT, menuTitle_about) - self.help_menu.Append(wx.ID_EXIT, "&QUIT") - self.menu_bar.Append(self.help_menu, menuTitle_help) - - self.Bind(wx.EVT_MENU, self.displayAboutMenu, id=wx.ID_ABOUT) - self.Bind(wx.EVT_MENU, self.quit, id=wx.ID_EXIT) - self.SetMenuBar(self.menu_bar) - - def displayAboutMenu(self, button): - info = wx.AboutDialogInfo() - info.Name = aboutWindow_appName - info.Version = "v. " + WAIL_VERSION - info.Copyright = aboutWindow_author - # info.Description = "foo" - info.WebSite = (textLabel_defaultURI, textLabel_defaultURI_title) - # info.Developers = ["Mat Kelly"] - # info.License = "lic info" - info.SetIcon(wx.Icon(aboutWindow_iconPath, wx.BITMAP_TYPE_ICO, aboutWindow_iconWidth, aboutWindow_iconHeight)) - wx.AboutBox(info) - - def ensureCorrectInstallation(self): - # TODO: properly implement this - # Check that the file is being executed from the correct location - if 'darwin' in sys.platform and os.path.dirname(os.path.abspath(__file__)) != "/Applications": - # Alert the user to move the file. Exit the program - wx.MessageBox(msg_wrongLocation_body + os.path.dirname(os.path.abspath(__file__)), msg_wrongLocation_title,) - print msg_wrongLocation_body + os.path.dirname(os.path.abspath(__file__)) - #sys.exit() - - def quit(self, button): - print "Quitting!" - if mainAppWindow.indexingTimer: - mainAppWindow.indexingTimer.cancel() - #os._exit(0) #Quit without buffer cleanup - sys.exit(1) #Be a good citizen. Cleanup your memory footprint - - -class WAILGUIFrame_Basic(wx.Panel): - def __init__(self, parent): - wx.Panel.__init__(self, parent) - self.uriLabel = wx.StaticText(self, -1, buttonLabel_uri, pos=(0, 5)) - self.uri = wx.TextCtrl(self, -1, pos=(30, 0), value=textLabel_defaultURI, size=(350, 25)) - self.archiveNowButton = wx.Button(self, -1, buttonLabel_archiveNow, pos=(0, 30)) - self.checkArchiveStatus = wx.Button(self, -1, buttonLabel_checkStatus, pos=(105, 30)) - self.viewArchive = wx.Button(self, -1, buttonLabel_viewArchive, pos=(270, 30)) - - self.archiveNowButton.SetDefault() - - # Basic interface button actions - self.archiveNowButton.Bind(wx.EVT_BUTTON, self.archiveNow) - self.checkArchiveStatus.Bind(wx.EVT_BUTTON, self.checkIfURLIsInArchive) - self.viewArchive.Bind(wx.EVT_BUTTON, self.viewArchiveInBrowser) - # hJob = HeritrixJob([self.uri.GetValue()]) - - # TODO: check environment variables - self.ensureEnvironmentVariablesAreSet() - - self.setMementoCount(None) - #self.setMessage("Type a URL and click \"Archive Now!\" to begin archiving"); - - # Bind changes in URI to query MemGator - self.memgatorDelayTimer = None - - thread.start_new_thread(self.fetchMementos,()) - self.uri.Bind(wx.EVT_KEY_UP, self.uriChanged) # Call memgator on URI change - - def setMementoCount(self, count): - if hasattr(self,'mementoStatus'): - self.mementoStatus.Destroy() - - if count: - memCountMsg = "Public archives: " + str(count) + " mementos available" - else: - memCountMsg = msg_fetchingMementos - #self.status = wx.HyperlinkCtrl(self, -1, label=str(count) + " mementos available", url=" ", pos=(5, 65), size=(300,20)) - #self.status.SetNormalColour(wx.Colour(0,0,255)) - #self.status.SetVisitedColour(wx.Colour(0,0,255)) - #self.status.SetHoverColour(wx.Colour(0,0,255)) - self.mementoStatus = wx.StaticText(self, -1, label=memCountMsg, pos=(5, 85), size=(300,20)) - - - - def setMessage(self, msg): - if hasattr(self,'status'): - self.status.Destroy() - self.status = wx.StaticText(self, -1, msg, pos=(5, 65), size=(300,20)) - - def fetchMementos(self): - # TODO: Use CDXJ for counting the mementos - out = check_output([memGatorPath, "-a", archivesJSON, self.uri.GetValue()]) - print "memgator command:" - print memGatorPath+" -a " + archivesJSON + self.uri.GetValue() - - # TODO: bug, on Gogo internet MemGator cannot hit aggregator, which results in 0 mementos, which MemGator throws exception - - # TODO: Once we are using the local web service, we can curl -I to get a - self.setMementoCount(out.count("memento")) - # TODO: cache the TM - def uriChanged(self, event): - self.setMementoCount(None) - - if self.memgatorDelayTimer: # Kill any currently running timer - self.memgatorDelayTimer.cancel() - self.memgatorDelayTimer = None - - self.memgatorDelayTimer = threading.Timer(1.0, thread.start_new_thread, [self.fetchMementos, ()]) - self.memgatorDelayTimer.daemon = True - self.memgatorDelayTimer.start() - - # TODO: start timer on below, kill if another key is hit - #thread.start_new_thread(self.fetchMementos,()) - event.Skip() - - - def testCallback(self): - print "callback executed!" - - def ensureEnvironmentVariablesAreSet(self): - JAVA_HOME_defined = 'JAVA_HOME' in os.environ - JRE_HOME_defined = 'JRE_HOME' in os.environ - if not JAVA_HOME_defined or not JRE_HOME_defined: - # Find java 1.7 - #/usr/libexec/java_home -v 1.7 - jdkInstalled = os.path.isdir("/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk") - - if jdkInstalled: - os.environ["JAVA_HOME"] = "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home" - os.environ["JRE_HOME"] = "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home" - self.ensureEnvironmentVariablesAreSet() - else: - d = wx.MessageDialog(self, 'Java needs to be installed for Heritrix and Wayback', "Install now?", wx.YES_NO|wx.YES_DEFAULT|wx.ICON_QUESTION) - result = d.ShowModal() - d.Destroy() - if result == wx.ID_NO: - sys.exit() - else: - #self.javaInstalled() - self.installJava() - - def installJava(self): - urllib.urlretrieve(osx_java7DMG, '/tmp/java7.dmg'); - p = Popen(["hdiutil","attach","/tmp/java7.dmg"], stdout=PIPE, stderr=PIPE) - stdout, stderr = p.communicate() - q = Popen(["open","JDK 7 Update 79.pkg"], cwd=r'/Volumes/JDK 7 Update 79/', stdout=PIPE, stderr=PIPE) - stdout, stderr = q.communicate() - sys.exit() - def archiveNow(self, button): - self.archiveNowButton.SetLabel(buttonLabel_archiveNow_initializing) - self.setMessage('Starting Archiving Process...'); - self.archiveNowButton.Disable() - thread.start_new_thread(self.archiveNow2Async,()) - - def archiveNow2Async(self): - self.setMessage('Writing Crawl Configuration...'); - self.writeHeritrixLogWithURI() - # First check to be sure Java SE is installed. - if self.javaInstalled(): - self.setMessage('Launching Crawler...'); - if not Heritrix().accessible(): - self.launchHeritrix() - self.setMessage('Launching Wayback...'); - mainAppWindow.advConfig.startTomcat(None) - # time.sleep(4) - self.setMessage('Initializing Crawl Job...'); - self.startHeritrixJob() - mainAppWindow.advConfig.heritrixPanel.populateListboxWithJobs() - self.setMessage('Crawl of ' + self.uri.GetValue() + ' Started!'); - wx.CallAfter(mainAppWindow.advConfig.generalPanel.updateServiceStatuses) - #if sys.platform.startswith('darwin'): #show a notification of success in OS X - # Notifier.notify('Archival process successfully initiated.',title="WAIL") - else: - print "Java SE 6 needs to be installed. WAIL should invoke the installer here." - self.setMessage('Archive Now failed due to Java JRE Requirements'); - - wx.CallAfter(self.onLongRunDone) - - def onLongRunDone(self): - print "DONE!" - self.archiveNowButton.SetLabel(buttonLabel_archiveNow) - self.archiveNowButton.Enable() - - def writeHeritrixLogWithURI(self): - self.hJob = HeritrixJob([self.uri.GetValue()]) - self.hJob.write() - - def javaInstalled(self): - # First check to be sure Java SE is installed. Move this logic elsewhere in production - noJava = msg_noJavaRuntime - p = Popen(["java","-version"], stdout=PIPE, stderr=PIPE) - stdout, stderr = p.communicate() - return (noJava not in stdout) and (noJava not in stderr) - - def launchHeritrix(self): - cmd = heritrixBinPath + " -a " + heritrixCredentials_username + ":" + heritrixCredentials_password - #TODO: shell=True was added for OS X, verify that functionality persists on Win64 - ret = subprocess.Popen(cmd, shell=True) - time.sleep(3) - mainAppWindow.advConfig.generalPanel.updateServiceStatuses() - - def startHeritrixJob(self): - self.buildHeritrixJob() - self.launchHeritrixJob() - - def launchHeritrixJob(self): - logging.basicConfig(level=logging.DEBUG) - print "Launching heririx job" - data = {"action":"launch"} - headers = {"Accept":"application/xml","Content-type":"application/x-www-form-urlencoded"} - r =requests.post('https://localhost:8443/engine/job/' + self.hJob.jobNumber, - auth=HTTPDigestAuth(heritrixCredentials_username,heritrixCredentials_password), - data=data,headers=headers,verify=False,stream=True) - - print r - print r.headers - print r.text - - def buildHeritrixJob(self): - logging.basicConfig(level=logging.DEBUG) - print "Building heririx job" - data = {"action":"build"} - headers = {"Accept":"application/xml","Content-type":"application/x-www-form-urlencoded"} - r =requests.post('https://localhost:8443/engine/job/'+self.hJob.jobNumber,auth=HTTPDigestAuth(heritrixCredentials_username,heritrixCredentials_password),data=data,headers=headers,verify=False,stream=True) - - print r - print r.headers - print r.text - - #curl -v -d "action=launch" -k -u lorem:ipsum --anyauth --location -H "Accept: application/xml" https://127.0.0.1:8443/engine/job/1425431848 - return - - def checkIfURLIsInArchive(self, button): - url = "http://localhost:8080/wayback/*/" + self.uri.GetValue() - req = urllib2.Request(url) - statusCode = None - try: - resp = urllib2.urlopen(req) - statusCode = resp.getcode() - except urllib2.HTTPError, e: - statusCode = e.code - except: # When the server is unavailable, keep the default. This is necessary, as unavailability will still cause an exception - '''''' - #print statusCode - print statusCode - if statusCode is None: - launchWaybackDialog = wx.MessageDialog(None, msg_waybackNotStarted_body, msg_waybackNotStarted_title, wx.YES_NO|wx.YES_DEFAULT) - launchWayback = launchWaybackDialog.ShowModal() - if launchWayback == wx.ID_YES: - Wayback().fix(None) - self.checkIfURLIsInArchive(button) - elif 200 != statusCode: - wx.MessageBox(msg_uriNotInArchives,"Checking for " + self.uri.GetValue()) - else: - wx.MessageBox(msg_uriInArchives_body,msg_uriInArchives_title) - - def viewArchiveInBrowser(self, button): - if Wayback().accessible(): - webbrowser.open_new_tab(uri_wayback_allMementos + self.uri.GetValue()) - else: - d = wx.MessageDialog(self, "Launch now?", - "Wayback is not running", wx.YES_NO|wx.YES_DEFAULT|wx.ICON_QUESTION) - result = d.ShowModal() - d.Destroy() - if result == wx.ID_YES: # Launch Wayback - Wayback().fix(None) - # TODO: artificial delay here while we wait for Wayback to launch - # TODO: change button to fixing - self.archiveNowButton.SetLabel("Initializing Wayback...") - #self.viewArchiveInBrowser(None) - - -class WAILGUIFrame_Advanced(wx.Panel): - class GeneralPanel(wx.Panel, threading.Thread): - def __init__(self, parent): - wx.Panel.__init__(self, parent) - colWidth = 60 - rowHeight = 20#18 - cellSize = (150, rowHeight) - - col0 = colWidth*0+10 - wx.StaticText(self, 100, tabLabel_advanced_general_serviceStatus, (col0-10, rowHeight*0), cellSize) - wx.StaticText(self, 100, tabLabel_advanced_wayback, (col0, rowHeight*1), cellSize) - wx.StaticText(self, 100, tabLabel_advanced_heritrix, (col0, rowHeight*2), cellSize) - - col1 = 65+colWidth*1 - - thread.start_new_thread(self.updateServiceStatuses,()) - - col2 = col1+colWidth - cellSize_versionFix = (50,rowHeight) - wx.StaticText(self, 100, "VERSION", (col2, rowHeight*0), cellSize_versionFix) - wx.StaticText(self, 100, self.getWaybackVersion(), (col2, rowHeight*1), cellSize_versionFix) - wx.StaticText(self, 100, self.getHeritrixVersion(True), (col2, rowHeight*2), cellSize_versionFix) - - col3 = col2+colWidth - buttonSize = (50, rowHeight-6) - buttonSize = (50, rowHeight) #redefining for Windows, needs regression testing on OS X - smallFont = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL) - self.fix_wayback = wx.Button(self, 1, buttonLabel_fix, (col3, rowHeight*1), buttonSize,wx.BU_EXACTFIT) - self.fix_wayback.SetFont(smallFont) - self.fix_heritrix = wx.Button(self, 1, buttonLabel_fix, (col3, rowHeight*2), buttonSize,wx.BU_EXACTFIT) - self.fix_heritrix.SetFont(smallFont) - - #self.stopAllServices = wx.Button(self, 1, "Stop All Services", (col2, rowHeight*4+10), (150,rowHeight)) - - self.fix_wayback.Bind(wx.EVT_BUTTON, Wayback().fix) - self.fix_heritrix.Bind(wx.EVT_BUTTON, Heritrix().fix) - - col4 = col3+colWidth - - self.kill_wayback = wx.Button(self, 1, buttonLabel_kill, (col4, rowHeight*1), buttonSize, wx.BU_EXACTFIT) - self.kill_wayback.SetFont(smallFont) - self.kill_heritrix = wx.Button(self, 1, buttonLabel_kill, (col4, rowHeight*2), buttonSize, wx.BU_EXACTFIT) - self.kill_heritrix.SetFont(smallFont) - - self.kill_wayback.Bind(wx.EVT_BUTTON, Wayback().kill) - self.kill_heritrix.Bind(wx.EVT_BUTTON, Heritrix().kill) - - - #wx.CallLater(2000, self.updateServiceStatuses) - #pool.apply_async(self.updateServiceStatuses) - thread.start_new_thread(self.updateServiceStatuses,()) - - def setHeritrixStatus(self, status): - colWidth = 60 - rowHeight = 20 - col1 = 65+colWidth*1 - cellSize = (40, rowHeight) - - if hasattr(self,'status_heritrix'): - self.status_heritrix.Destroy() - self.status_heritrix = wx.StaticText(self, 100, status, (col1, rowHeight*2), cellSize) - - def setWaybackStatus(self, status): - colWidth = 60 - rowHeight = 20 - col1 = 65+colWidth*1 - cellSize = (40, rowHeight) - - if hasattr(self,'status_wayback'): - self.status_wayback.Destroy() - self.status_wayback = wx.StaticText(self, 100, status, (col1, rowHeight*1), cellSize) - - def getHeritrixVersion(self, abbr=True): - for file in os.listdir(heritrixPath + "lib/"): - if file.startswith("heritrix-commons"): - regex = re.compile("commons-(.*)\.") - return regex.findall(file)[0] - - def getWaybackVersion(self): - for file in os.listdir(tomcatPath + "/webapps/lib/"): - if file.startswith("openwayback-core"): - regex = re.compile("core-(.*)\.") - return regex.findall(file)[0] - - def getTomcatVersion(self): - #Apache Tomcat Version 7.0.30 - if not os.path.exists(tomcatPath+"/RELEASE-NOTES"): return "?" - f = open(tomcatPath+"/RELEASE-NOTES",'r') - version = "" - for line in f.readlines(): - if "Apache Tomcat Version " in line: - version = re.sub("[^0-9^\.]", "", line) - break - f.close() - return version - - def updateServiceStatuses(self, serviceId=None, transitionalStatus=None): - ################################## - # Check if each service is enabled and set the GUI elements accordingly - ################################## - - colWidth = 60 - rowHeight = 20 - col1 = 65+colWidth*1 - cellSize = (40, rowHeight) - serviceEnabled = {True: serviceEnabledLabel_YES, False: serviceEnabledLabel_NO} - - heritrixAccessible = serviceEnabled[Heritrix().accessible()] - waybackAccessible = serviceEnabled[Wayback().accessible()] - - if waybackAccessible is serviceEnabledLabel_YES: - tomcatAccessible = waybackAccessible - else: - tomcatAccessible = serviceEnabled[Tomcat().accessible()] - - # Update a transitional status and short circuit - if serviceId and transitionalStatus: - if serviceId is "wayback": - self.setWaybackStatus(transitionalStatus) - return - elif serviceId is "heritrix": - self.setHeritrixStatus(transitionalStatus) - return - else: - print "Invalid transitional service id specified. Updating status per usual." - - - if not hasattr(self,'stateLabel'): - self.stateLabel = wx.StaticText(self, 100, "STATE", (col1, rowHeight*0), cellSize) - - self.setHeritrixStatus(heritrixAccessible) - self.setWaybackStatus(tomcatAccessible) - - - - #For eventual icons instead of text - #bmp = wx.Bitmap("./build/icons/famYes.png", wx.BITMAP_TYPE_ANY) - #bmapBtn = wx.BitmapButton(self, id=wx.ID_ANY, bitmap=bmp,pos=(col1, rowHeight*3),size=(bmp.GetWidth()+14, bmp.GetHeight()+14),style=wx.BU_EXACTFIT) - #bmapBtn.SetMargins(0,0) - #bmapBtn.SetBackgroundColour('RED') - - if not hasattr(self,'fix_heritrix'): - print "First call, UI has not been setup" - return #initial setup call will return here, ui elements haven't been created - - #enable/disable FIX buttons based on service status - if heritrixAccessible is serviceEnabledLabel_YES: - self.fix_heritrix.Disable() - self.kill_heritrix.Enable() - else: - self.fix_heritrix.Enable() - self.kill_heritrix.Disable() - - if tomcatAccessible is serviceEnabledLabel_YES: - self.fix_wayback.Disable() - self.kill_wayback.Enable() - else: - self.fix_wayback.Enable() - self.kill_wayback.Disable() - - - ################################## - class WaybackPanel(wx.Panel): - def __init__(self, parent): - wx.Panel.__init__(self, parent) - bsize = self.width, self.height = (340, 25*.75) - #wx.Button(self, 1, "Show All Archived URIs", (0,0),bsize) - #wx.Button(self, 1, "Setup Options (e.g. port), modify wayback.xml, reboot tomcat", (0,25),bsize) - #wx.Button(self, 1, "Control Tomcat", (0,50),bsize) - self.viewWaybackInBrowserButton = wx.Button(self, 1, buttonLabel_wayback, (0, 0), bsize) - self.editWaybackConfiguration = wx.Button(self, 1, buttonLabel_editWaybackConfig, (0, 25), bsize) - #self.resetWaybackConfiguration = wx.Button(self, 1, buttonLabel_resetWaybackConfig, (0, 50), bsize) - - self.viewWaybackInBrowserButton.Bind(wx.EVT_BUTTON, self.openWaybackInBrowser) - self.editWaybackConfiguration.Bind(wx.EVT_BUTTON, self.openWaybackConfiguration) - #self.resetWaybackConfiguration.Bind(wx.EVT_BUTTON, waybackConfigWriter.writeConfig) - - def openWaybackInBrowser(self, button): - if Wayback().accessible(): - webbrowser.open_new_tab(uri_wayback) - self.viewWaybackInBrowserButton.SetLabel(buttonLabel_wayback) - self.viewWaybackInBrowserButton.Enable() - else: - d = wx.MessageDialog(self, "Launch now?", - "Wayback is not running", wx.YES_NO|wx.YES_DEFAULT|wx.ICON_QUESTION) - result = d.ShowModal() - d.Destroy() - if result == wx.ID_YES: # Launch Wayback - Wayback().fix(None, lambda: self.openWaybackInBrowser(None)) - self.viewWaybackInBrowserButton.SetLabel(buttonLabel_wayback_launching) - self.viewWaybackInBrowserButton.Disable() - #time.sleep(3) - #self.openWaybackInBrowser(None) - def openWaybackConfiguration(self,button): - filepath = tomcatPath+"/webapps/ROOT/WEB-INF/wayback.xml" - if sys.platform.startswith('darwin'): - subprocess.call(('open', filepath)) - elif os.name == 'nt': - os.startfile(filepath) - elif os.name == 'posix': - subprocess.call(('xdg-open', filepath)) - class HeritrixPanel(wx.Panel): - def __init__(self, parent): - wx.Panel.__init__(self, parent) - - self.listbox = wx.ListBox(self, 100) - self.populateListboxWithJobs() - - self.statusMsg = wx.StaticText(self, -1, "", pos=(150, 0)) - - self.listbox.Bind(wx.EVT_LISTBOX, self.clickedListboxItem) - self.listbox.Bind(wx.EVT_RIGHT_UP, self.manageJobs) - - #Button layout - bsize = self.width, self.height = (125, 25*.75) - self.setupNewCrawlButton = wx.Button(self, 1, buttonLabel_heritrix_newCrawl, (0, 70), bsize) - self.launchWebUIButton = wx.Button(self, 1, buttonLabel_heritrix_launchWebUI, (0, 92), bsize) - - #Button functionality - self.setupNewCrawlButton.Bind(wx.EVT_BUTTON, self.setupNewCrawl) - self.launchWebUIButton.Bind(wx.EVT_BUTTON, self.launchWebUI) - - self.panelUpdater = None # For updating stats UI - def populateListboxWithJobs(self): - list = Heritrix().getListOfJobs() - list.reverse() # set to reverse chronological so newest jobs are at the top - self.listbox.Set(list) - - def clickedListboxItem(self, event): - self.hideNewCrawlUIElements() - self.statusMsg.Show() - - active = self.listbox.GetString(self.listbox.GetSelection()) - print tail(heritrixJobPath + active + "/job.log") - jobLaunches = Heritrix().getJobLaunches(active) - if self.panelUpdater: # Kill any currently running timer - self.panelUpdater.cancel() - self.panelUpdater = None - self.updateInfoPanel(active) - def updateInfoPanel(self, active): - self.statusMsg.SetLabel(Heritrix().getCurrentStats(active)) - self.panelUpdater = threading.Timer(1.0, self.updateInfoPanel, [active]) - self.panelUpdater.daemon = True - self.panelUpdater.start() - - def launchWebUI(self, button): - self.launchWebUIButton.SetLabel(buttonLabel_heritrix_launchWebUI_launching) - self.launchWebUIButton.Disable() - thread.start_new_thread(self.launchWebUIAsync,()) - - def launchWebUIAsync(self): - if not Heritrix().accessible(): - mainAppWindow.basicConfig.launchHeritrix() - webbrowser.open_new_tab(uri_heritrix) - self.launchWebUIButton.SetLabel(buttonLabel_heritrix_launchWebUI) - self.launchWebUIButton.Enable() - - def launchHeritrixProcess(self, button): - Heritrix().kill(None) - time.sleep(3) - mainAppWindow.basicConfig.launchHeritrix() - - def manageJobs(self, evt): - if self.listbox.GetCount() == 0: # Do not show context menu without context - return - - # Start of fix for #233 - #print evt.GetPosition() - #print self.listbox.GetPosition().x - #print self.listbox.GetPosition().y - # Require right button mouseup to be performed on WAIL UI - #if evt.GetPosition()[0] < 0 or evt.GetPosition()[0] > wailWindowSize[0] or \ - # evt.GetPosition()[1] < 0 or evt.GetPosition()[1] > wailWindowSize[1]: - # return - - self.listbox.SetSelection(self.listbox.HitTest(evt.GetPosition())) - self.clickedListboxItem(None) - - menu = wx.Menu() - #menu.Append( 1, "Restart Job" ) #TODO - #menu.Bind(wx.EVT_MENU, self.restartJob, id=1) - menu.Append( 1, menu_forceCrawlFinish ) - menu.Bind(wx.EVT_MENU, self.forceCrawlFinish, id=1) - menu.Append( 2, menu_destroyJob ) - menu.Bind(wx.EVT_MENU, self.deleteHeritrixJob, id=2) - #menu.Append( 3, "Open crawl configuration" ) - #menu.Bind(wx.EVT_MENU, self.openConfigInTextEditor, id=3) - menu.Append( 3, menu_viewJobInWebBrowser ) - menu.Bind(wx.EVT_MENU, self.viewJobInWebBrowser, id=3) - mainAppWindow.PopupMenu( menu, mainAppWindow.ScreenToClient(wx.GetMousePosition()) ) - menu.Destroy() - - def forceCrawlFinish(self, evt): - jobId = str(self.listbox.GetString(self.listbox.GetSelection())) - self.sendActionToHeritrix("terminate", jobId) - self.sendActionToHeritrix("teardown", jobId) - - def sendActionToHeritrix(self, action, jobId): - data = {"action": action} - headers = {"Accept":"application/xml","Content-type":"application/x-www-form-urlencoded"} - r =requests.post(uri_heritrixJob + jobId, auth = HTTPDigestAuth(heritrixCredentials_username, heritrixCredentials_password), data=data, headers=headers, verify=False, stream=True) - - def deleteHeritrixJob(self, evt): - jobPath = heritrixJobPath + str(self.listbox.GetString(self.listbox.GetSelection())) - print "Deleting Job at "+jobPath - shutil.rmtree(jobPath) - self.populateListboxWithJobs() - - def viewJobInWebBrowser(self, evt): - jobId = str(self.listbox.GetString(self.listbox.GetSelection())) - webbrowser.open_new_tab(uri_heritrixJob + jobId) - - def openConfigInTextEditor(self, evt): - #TODO, most systems don't know how to open a cxml file. Is there a way to create a system mapping from python? - # Issue #22 prevents the context of the right-click item from being obtained and used here. - file = heritrixJobPath + str(self.listbox.GetString(self.listbox.GetSelection())) + "/crawler-beans.cxml" - if sys.platform.startswith('darwin'): - subprocess.call(('open', file)) - elif os.name == 'nt': - os.startfile(file) - elif os.name == 'posix': - subprocess.call(('xdg-open', file)) - - def restartJob(self, evt): - print "Restarting job" - - def setupNewCrawl(self, evt): - # TODO: check if the UI elements already exist before adding them - if hasattr(self, 'newCrawlTextCtrlLabel'): - print "The UI has already been setup." - return - - self.statusMsg.Hide() - - self.newCrawlTextCtrlLabel = wx.StaticText(self, -1, "Enter one URI per line to crawl", pos=(135, 0)) - multiLineAndNoWrapStyle = wx.TE_MULTILINE + wx.TE_DONTWRAP - self.newCrawlTextCtrl = wx.TextCtrl(self, -1, pos=(135, 20), size=(225, 90), style=multiLineAndNoWrapStyle) - - self.newCrawlDepthTextCtrlLabel = wx.StaticText(self, -1, "Depth", pos=(135, 112)) - self.newCrawlDepthTextCtrl = wx.TextCtrl(self, -1, pos=(180, 110), size=(40, 25)) - self.newCrawlDepthTextCtrl.SetValue("1") - self.newCrawlDepthTextCtrl.Bind(wx.EVT_KILL_FOCUS, self.validateCrawlDepth) - self.newCrawlDepthTextCtrl.Bind(wx.EVT_CHAR, self.handleCrawlDepthKeypress) - - #self.crawlOptionsButton = wx.Button(self, -1, "More options", pos=(150,125)) - self.startCrawlButton = wx.Button(self, -1, "Start Crawl", pos=(265, 110)) - self.startCrawlButton.SetDefault() - self.startCrawlButton.Bind(wx.EVT_BUTTON, self.crawlURIsListed) - - self.showNewCrawlUIElements() - - def handleCrawlDepthKeypress(self, event): - keycode = event.GetKeyCode() - if keycode < 255: - # valid ASCII - if chr(keycode).isdigit(): - # Valid alphanumeric character - event.Skip() - - def validateCrawlDepth(self, event): - print len(self.newCrawlDepthTextCtrl.GetValue()) - if len(self.newCrawlDepthTextCtrl.GetValue()) == 0: - self.newCrawlDepthTextCtrl.SetValue("1") - event.Skip() - def hideNewCrawlUIElements(self): - if not hasattr(self,'newCrawlTextCtrlLabel'): return - self.newCrawlTextCtrlLabel.Hide() - self.newCrawlTextCtrl.Hide() - #self.crawlOptionsButton.Hide() - self.startCrawlButton.Hide() - - def showNewCrawlUIElements(self): - self.newCrawlTextCtrlLabel.Show() - self.newCrawlTextCtrl.Show() - #self.crawlOptionsButton.Show() - self.startCrawlButton.Show() - - def crawlURIsListed(self, evt): - uris = self.newCrawlTextCtrl.GetValue().split("\n") - depth = self.newCrawlDepthTextCtrl.GetValue() - self.hJob = HeritrixJob(uris, depth) - self.hJob.write() - self.populateListboxWithJobs() - - if not Heritrix().accessible(): - mainAppWindow.basicConfig.launchHeritrix() - - self.hJob.buildHeritrixJob() - self.hJob.launchHeritrixJob() - - - class MiscellaneousPanel(wx.Panel): - def __init__(self, parent): - wx.Panel.__init__(self, parent) - bsize = self.width, self.height = (340, 25*.75) - viewArchivesFolderButtonButton = wx.Button(self, 1, buttonLabel_viewArchiveFiles, (0, 0), bsize) - #wx.Button(self, 1, "Control Other Tools", (0,50), bsize) - - viewArchivesFolderButtonButton.Bind(wx.EVT_BUTTON, self.openArchivesFolder) - self.testUpdate = wx.Button(self, 1, "Check for Updates", (0, 25), bsize) - self.testUpdate.Bind(wx.EVT_BUTTON, self.checkForUpdates) - self.testUpdate.Disable() - - def openArchivesFolder(self, button): - if not os.path.exists(warcsFolder): os.makedirs(warcsFolder) - - if sys.platform.startswith('win32'): - os.startfile(warcsFolder) - else: - subprocess.call(["open", warcsFolder]) - #subprocess.check_call(['open', '--', tomcatPath+"/webapps/root/"]) - #subprocess.Popen(["open", tomcatPath+"/webapps/root/"]) - - def checkForUpdates(self, button): - updateWindow = UpdateSoftwareWindow(parent=self, id=-1) - updateWindow.Show() - #return - # check if an updates version is available - - # if an updated version is available and the user wants it, copy the /Application/WAIL.app/Contents folder - - def __init__(self, parent): - wx.Panel.__init__(self, parent) - - self.Notebook = wx.Notebook(self) - vbox = wx.BoxSizer(wx.VERTICAL) - vbox.Add(self.Notebook, 10, flag=wx.EXPAND) - - self.SetSizer(vbox) - - self.generalPanel = WAILGUIFrame_Advanced.GeneralPanel(self.Notebook) - self.waybackPanel = WAILGUIFrame_Advanced.WaybackPanel(self.Notebook) - self.heritrixPanel = WAILGUIFrame_Advanced.HeritrixPanel(self.Notebook) - self.miscellaneousPanel = WAILGUIFrame_Advanced.MiscellaneousPanel(self.Notebook) - - self.Notebook.AddPage(self.generalPanel, tabLabel_advanced_general) - self.Notebook.AddPage(self.waybackPanel, tabLabel_advanced_wayback) - self.Notebook.AddPage(self.heritrixPanel, tabLabel_advanced_heritrix) - self.Notebook.AddPage(self.miscellaneousPanel, tabLabel_advanced_miscellaneous) - - self.x, self.y = (15, 5) - bsize = self.width, self.height = (150, 25*.80) - - smallFont = wx.Font(fontSize, wx.SWISS, wx.NORMAL, wx.NORMAL) - -################################## -# "View Archive" Group -################################## - def tomcatMessageOff(self): - #self.tomcatStatus.SetLabel(msg_waybackDisabled) - self.tomcatStatus.SetForegroundColour((255, 0, 0)) - self.startTomcatButton.SetLabel(self.startTomcatLabel) - - def tomcatMessageOn(self): - #self.tomcatStatus.SetLabel(msg_waybackEnabled) - self.tomcatStatus.SetForegroundColour((0, 200, 0)) - self.startTomcatButton.SetLabel(self.stopTomcatLabel) - - def startTomcat(self, button): - #self.tomcatStatus.SetLabel(msg_startingTomcat) - cmd = tomcatPathStart - ret = subprocess.Popen(cmd) - waitingForTomcat = True - while waitingForTomcat: - if Wayback().accessible(): waitingForTomcat = False - time.sleep(2) - - self.waybackPanel.viewWaybackInBrowserButton.Enable() #TODO: error here - #self.tomcatMessageOn() - # toggleTomcat needs to be broken up into start and stop Tomcat function, already done above - - def toggleTomcat(self, button, suppressAlert=False): #Optimize me, Seymour - cmd = "" - - if self.startTomcatButton.GetLabel() == self.startTomcatLabel : - self.tomcatStatus.SetLabel(msg_startingTomcat) - cmd = tomcatPathStart - ret = subprocess.Popen(cmd) - waitingForTomcat = True - while waitingForTomcat: - if Wayback.accessible(): waitingForTomcat = False - time.sleep(2) - self.viewWaybackInBrowserButton.Enable() - #self.tomcatMessageOn() - else: - self.tomcatStatus.SetLabel(msg_stoppingTomcat) - cmd = tomcatPathStop - ret = subprocess.Popen(cmd) - waitingForTomcat = True - - tomcatChecks = 0 - tomcatStopped = False - while waitingForTomcat and tomcatChecks < 6: - if Wayback.accessible(): - tomcatChecks += 1 - else: - waitingForTomcat = False - tomcatStopped = True - time.sleep(2) - if tomcatStopped: - self.viewWaybackInBrowserButton.Disable() - self.tomcatMessageOff() - else: - if not suppressAlert: message = wx.MessageBox("Tomcat could not be stopped", "Command Failed") - #self.tomcatMessageOn() - - def launchHeritrix(self, button): - #self.heritrixStatus.SetLabel("Launching Heritrix") - cmd = heritrixBinPath + " -a " + heritrixCredentials_username + ":" + heritrixCredentials_password - #TODO: shell=True was added for OS X, verify that functionality persists on Win64 - ret = subprocess.Popen(cmd, shell=True) - time.sleep(6) #urlib won't respond to https, hard-coded sleep until I can ping like Tomcat - self.viewHeritrixButton.Enable() - - def viewWayback(self, button): - webbrowser.open_new_tab(uri_wayback) - - def viewHeritrix(self, button): - webbrowser.open_new_tab(uri_heritrix) - - def createListBox(self): - - self.uriListBoxTitle = wx.StaticText(self, 7, 'URIs to Crawl:', (self.x, 5+self.height*7+30)) - self.uriListBox = wx.ListBox(self, 99, (self.x, 5+self.height*8+25), (400-50, 100), [""]) - #self.uriListBox.Bind(wx.EVT_LISTBOX_DCLICK,self.addURI) - self.uriListBox.Bind(wx.EVT_LISTBOX, self.addURI) - self.SetSize((self.GetSize().x, self.GetSize().y+300)) - #self.archiveViewGroup.SetSize((self.archiveViewGroup.GetSize().x,100)) - self.archiveViewGroup.SetSize((self.archiveViewGroup.GetSize().x, 235)) - mainAppWindow.SetSize((mainAppWindow.GetSize().x, 400)) - - def setupOneOffCrawl(self, button): - if(self.uriListBox <> None): return #this function has already been done - self.createListBox() - - #This should say, "Commence Crawl" but it currently only writes the config file - self.writeConfig = wx.Button(self, 33, "Write Heritrix Config", (self.GetSize().x-175, 280), (self.width, self.height)) - self.writeConfig.SetFont(wx.Font(fontSize, wx.SWISS, wx.NORMAL, wx.NORMAL)) - self.writeConfig.Bind(wx.EVT_BUTTON, self.crawlURIs) - self.writeConfig.Disable() - self.launchCrawlButton = wx.Button(self, 33, "Launch Crawl", (self.GetSize().x-175, 305), (self.width, self.height)) - self.launchCrawlButton.SetFont(wx.Font(fontSize, wx.SWISS, wx.NORMAL, wx.NORMAL)) - self.launchCrawlButton.Bind(wx.EVT_BUTTON, self.launchCrawl) - self.launchCrawlButton.Disable() - - def crawlURIs(self, button): - uris = self.uriListBox.GetStrings() - self.hJob = HeritrixJob(uris) - self.hJob.write() - self.writeConfig.Disable() - self.uriListBox.Set([""]) - self.launchCrawlButton.Enable() - - def launchCrawl(self, button): - mainAppWindow.basicConfig.hJob = self.hJob - mainAppWindow.basicConfig.launchHeritrix() - mainAppWindow.basicConfig.startHeritrixJob() - - def addURI(self, listbox): - defaultMessage = "" - try: - defaultMessage = self.uriListBox.GetString(self.uriListBox.GetSelection()) - except: - defaultMessage = "" - message = wx.GetTextFromUser("Enter a URI to be crawled", default_value=defaultMessage) - if message == "" and message == defaultMessage: return - url = urlparse(message) - self.uriListBox.InsertItems([url.geturl()], 0) - self.writeConfig.Enable() - - -class Service(): - def accessible(self): - try: - print "Trying to access " + self.__class__.__name__ + " service at " + self.uri - handle = urllib2.urlopen(self.uri, None, 3) - print self.__class__.__name__ + " is a go! " - return True - except IOError, e: - if hasattr(e, 'code'): # HTTPError - print "Pseudo-Success in accessing " + self.uri - return True - # if hasattr(e, - - print "Failed to access " + self.__class__.__name__+" service at " + self.uri - return False - except: - print "Some other error occurred in trying to check service accessibility." - return False - -class Wayback(Service): - uri = uri_wayback - - def fix(self, button, *cb): - thread.start_new_thread(self.fixAsync, cb) - - def fixAsync(self, cb=None): - mainAppWindow.advConfig.generalPanel.updateServiceStatuses("wayback","FIXING") - cmd = tomcatPathStart; - ret = subprocess.Popen(cmd) - time.sleep(3) - wx.CallAfter(mainAppWindow.advConfig.generalPanel.updateServiceStatuses) - if cb: - wx.CallAfter(cb) -# mainAppWindow.advConfig.generalPanel.updateServiceStatuses() - - def kill(self,button): - thread.start_new_thread(self.killAsync,()) - - def killAsync(self): - mainAppWindow.advConfig.generalPanel.updateServiceStatuses("wayback","KILLING") - cmd = tomcatPathStop - ret = subprocess.Popen(cmd) - time.sleep(3) - wx.CallAfter(mainAppWindow.advConfig.generalPanel.updateServiceStatuses) - #mainAppWindow.advConfig.generalPanel.updateServiceStatuses() - - def index(self): - self.generatePathIndex() - self.generateCDX() - - def generatePathIndex(self): - dest = "/Applications/WAIL.app/config/path-index.txt" - warcsPath = "/Applications/WAIL.app/archives/" - - outputContents = "" - for file in listdir(warcsPath): - if file.endswith(".warc"): - outputContents += file + "\t" + join(warcsPath,file) + "\n" - - print "Writing path-index.txt file" - pathIndexFile = open(dest, "w") - pathIndexFile.write(outputContents) - pathIndexFile.close() - print "Done writing path-index.txt file" - - def generateCDX(self): - #/Applications/WAIL.app/bundledApps/tomcat/webapps/bin/cdx-indexer (file) (file.cdx) - dest = "/Applications/WAIL.app/config/path-index.txt" - warcsPath = "/Applications/WAIL.app/archives/" - - outputContents = "" - for file in listdir(warcsPath): - if file.endswith(".warc"): - cdxFilePath = "/Applications/WAIL.app/archiveIndexes/" + file.replace('.warc','.cdx') - process = subprocess.Popen(["/Applications/WAIL.app/bundledApps/tomcat/webapps/bin/cdx-indexer",join(warcsPath,file),cdxFilePath], stdout=PIPE, stderr=PIPE) - stdout, stderr = process.communicate() - - # Combine CDX files - filenames = glob.glob("/Applications/WAIL.app/archiveIndexes/*.cdx") - cdxHeaderIncluded = False - print "CDX files generated for each WARC, merging..." - with open('/Applications/WAIL.app/archiveIndexes/combined_unsorted.cdxt', 'w') as outfile: - for fname in filenames: - with open(fname) as infile: - for i,line in enumerate(infile): - if i>0: - outfile.write(line) - elif not cdxHeaderIncluded: #Only include first CDX header - outfile.write(line) - cdxHeaderIncluded = True - print "Done merging CDX files, removing old source CDX files." - filelist = glob.glob("/Applications/WAIL.app/archiveIndexes/*.cdx") - for f in filelist: - os.remove(f) - - print "Sorting CDX entries" - os.system("export LC_ALL=C; sort -u /Applications/WAIL.app/archiveIndexes/combined_unsorted.cdxt > /Applications/WAIL.app/archiveIndexes/index.cdx") - print "Removing unsorted temp file" - os.remove("/Applications/WAIL.app/archiveIndexes/combined_unsorted.cdxt") - - print "Done creating sorted CDX file!" - - # Queue next iteration of indexing - if mainAppWindow.indexingTimer: - mainAppWindow.indexingTimer.cancel() - mainAppWindow.indexingTimer = threading.Timer(INDEX_TIMER_SECONDS,Wayback().index) - mainAppWindow.indexingTimer.daemon = True - mainAppWindow.indexingTimer.start() - -class Tomcat(Service): - uri = uri_wayback - - -class Heritrix(Service): - #uri = uri_heritrix_accessiblityURI - uri = "https://127.0.0.1:8443" #TODO: remove magic hard-coded Heritrix address/port - - def getListOfJobs(self): - def justFile(fullPath): - return os.path.basename(fullPath) - #str = '\n'.join(map(justFile,glob.glob(os.path.join(heritrixJobPath, '*')))) - return map(justFile, glob.glob(os.path.join(heritrixJobPath, '*'))) - ''' # getListOfJobs - rewrite to use the Heritrix API, will need to parse XML - -H "Accept: application/xml" - # replicate curl -v -d "action=rescan" -k -u lorem:ipsum --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine - ''' - - def getJobLaunches(self, jobId): - jobPath = heritrixJobPath+jobId - return [f for f in os.listdir(heritrixJobPath+jobId) if re.search(r'^[0-9]+$', f)] - - def getCurrentStats(self, jobId): - launches = self.getJobLaunches(jobId) - ret = "" - for launch in launches: - #print heritrixJobPath+jobId+"/"+launch+"/logs/progress-statistics.log" - print heritrixJobPath+jobId+"/"+launch+"/logs/progress-statistics.log" - lastLine = tail(heritrixJobPath+jobId+"/"+launch+"/logs/progress-statistics.log") - - ll = lastLine[0].replace(" ","|") - logData = re.sub(r'[|]+', '|', ll).split("|") - timeStamp, discovered, queued, downloaded = logData[0:4] - ret = ret + "JobID: "+jobId+"\n Discovered: "+discovered+"\n Queued: "+queued+"\n Downloaded: "+downloaded+"\n" - - return ret - - def fix(self, button, *cb): - thread.start_new_thread(self.fixAsync, cb) - - def fixAsync(self, cb=None): - mainAppWindow.advConfig.generalPanel.updateServiceStatuses("heritrix","FIXING") - mainAppWindow.basicConfig.launchHeritrix() - time.sleep(3) - wx.CallAfter(mainAppWindow.advConfig.generalPanel.updateServiceStatuses) - if cb: - wx.CallAfter(cb) - - def kill(self,button): - thread.start_new_thread(self.killAsync,()) - - def killAsync(self): - mainAppWindow.advConfig.generalPanel.updateServiceStatuses("heritrix", "KILLING") - #Ideally, the Heritrix API would have support for this. This will have to do. Won't work in Wintel - cmd = """ps ax | grep 'heritrix' | grep -v grep | awk '{print "kill -9 " $1}' | sh""" - print "Trying to kill Heritrix..." - ret = subprocess.Popen(cmd,stderr=subprocess.STDOUT,shell=True) - time.sleep(3) - wx.CallAfter(mainAppWindow.advConfig.generalPanel.updateServiceStatuses) - - -class HeritrixJob: - def write(self): - self.jobNumber = str(int(time.time())) - path = heritrixJobPath + self.jobNumber - if not os.path.exists(path): os.makedirs(path) - beansFilePath = path - if sys.platform.startswith('win32'): - beansFilePath += "\\" - else: - beansFilePath += "/" - with open(beansFilePath+"crawler-beans.cxml","w") as f: - f.write(self.sampleXML) - #print beansFilePath+"crawler-beans.cxml" - - def launchHeritrixJob(self): - logging.basicConfig(level=logging.DEBUG) - print "Launching heririx job" - data = {"action":"launch"} - headers = {"Accept":"application/xml","Content-type":"application/x-www-form-urlencoded"} - r =requests.post('https://localhost:8443/engine/job/'+self.jobNumber,auth=HTTPDigestAuth(heritrixCredentials_username, heritrixCredentials_password),data=data,headers=headers,verify=False,stream=True) - - def buildHeritrixJob(self): - logging.basicConfig(level=logging.DEBUG) - print "Building heririx job" - data = {"action":"build"} - headers = {"Accept":"application/xml","Content-type":"application/x-www-form-urlencoded"} - r =requests.post('https://localhost:8443/engine/job/'+self.jobNumber,auth=HTTPDigestAuth(heritrixCredentials_username, heritrixCredentials_password),data=data,headers=headers,verify=False,stream=True) - - def __init__(self, uris, depth=1): - self.sampleXML = ''' - - - - - - - - - - -# This Properties map is specified in the Java 'property list' text format -# http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 - -metadata.operatorContactUrl=http://yourdomain.com -metadata.jobName=basic -metadata.description=Basic crawl starting with useful defaults - -##..more?..## - - - - - - - - - - -# URLS HERE -''' + "\r\n".join(uris) + ''' - - - - - - - - - - - - - - -# [see override above] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ''' + warcsFolder + ''' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -''' - - -#from http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail -def tail(filename, lines=1, _buffer=4098): - try: - f = open(filename,"r") - except: - return "No job info yet\nYou must run a job before stats can be shown here" - lines_found = [] - block_counter = -1 - while len(lines_found) < lines: - try: - f.seek(block_counter * _buffer, os.SEEK_END) - except IOError: # either file is too small, or too many lines requested - f.seek(0) - lines_found = f.readlines() - break - - lines_found = f.readlines() - if len(lines_found) > lines: - break - block_counter -= 1 - return lines_found[-lines:] - -def copyanything(src, dst): - try: - shutil.copytree(src, dst) - except OSError as exc: # python >2.5 - if exc.errno == errno.ENOTDIR: - shutil.copy(src, dst) - else: raise - -class UpdateSoftwareWindow(wx.Frame): - panels = () - updateJSONData = '' - currentVersion_wail = "0.2015.10.11" - latestVersion_wail = "0.2015.12.25" - currentVersion_heritrix = "" - latestVersion_heritrix = "" - currentVersion_wayback = "" - latestVersion_wayback = "" - - def updateWAIL(self, button): - print "Downloading " + self.updateJSONData['wail-core']['uri'] - wailcorefile = urllib2.urlopen(self.updateJSONData['wail-core']['uri']) - output = open('/Applications/WAIL.app/support/temp.tar.gz','wb') - output.write(wailcorefile.read()) - output.close() - print "Done downloading WAIL update, backing up." - - try: - copyanything("/Applications/WAIL.app/Contents/","/Applications/WAIL.app/Contents_bkp/") - print "Done backing up. Nuking obsolete version." - except: - print "Back up previously done, continuing." - shutil.rmtree("/Applications/WAIL.app/Contents/") - print "Done nuking, decompressing update." - - tar = tarfile.open("/Applications/WAIL.app/support/temp.tar.gz") - tar.extractall('/Applications/WAIL.app/') - tar.close() - print "Done, restart now." - os.system("defaults read /Applications/WAIL.app/Contents/Info.plist > /dev/null") - #TODO: flush Info.plist cache (cmd involving defaults within this py script) - def fetchCurrentVersionsFile(self): - self.srcURI = "http://matkelly.com/wail/update.json" - f = urllib2.urlopen(self.srcURI).read() - data = f - self.updateJSONData = json.loads(data) - - def setVersionsInPanel(self): - self.currentVersion_wail = WAIL_VERSION - self.latestVersion_wail = self.updateJSONData['wail-core']['version'] - self.currentVersion_heritrix = self.getHeritrixVersion() - self.currentVersion_wayback = self.getWaybackVersion() - - packages = self.updateJSONData['packages']; - for package in packages: - if package['name'] == 'heritrix-wail': - self.latestVersion_heritrix = package['version'] - elif package['name'] == 'openwayback-wail': - self.latestVersion_wayback = package['version'] - - # TODO: Redundant of Advanced Panel implementation, very inaccessible here - def getHeritrixVersion(self): - for file in os.listdir(heritrixPath + "lib/"): - if file.startswith("heritrix-commons"): - regex = re.compile("commons-(.*)\.") - return regex.findall(file)[0] - - # TODO: Redundant of Advanced Panel implementation, very inaccessible here - def getWaybackVersion(self): - for file in os.listdir(tomcatPath + "/webapps/lib/"): - if file.startswith("openwayback-core"): - regex = re.compile("core-(.*)\.") - return regex.findall(file)[0] - - # TODO: move layout management to responsibility of sub-panels, UNUSED now - class UpdateSoftwarePanel(wx.Frame): - panelTitle = '' - panelSize = (390, 90) - panelPosition = () - panelLogoPath = '' - def __init__(self, parent, panelI, indexInPanel=0, panelTitle=''): - self.panelPosition = (5, 10*85*panelI) - self.panelTitle = panelTitle - self.parent = parent - ''' ''' - def draw(self): - #TODO: draw icon - - - self.panel = wx.StaticBox(self.parent, -1, self.panelTitle, size=self.panelSize, pos=self.panelPosition) - box = wx.StaticBoxSizer(self.panel, wx.VERTICAL) - - def __init__(self,parent,id): - self.fetchCurrentVersionsFile() - self.setVersionsInPanel() - - wx.Frame.__init__(self, parent, id, 'Update WAIL', size=(400,300), style=(wx.FRAME_FLOAT_ON_PARENT | wx.CLOSE_BOX)) - wx.Frame.CenterOnScreen(self) - #self.refresh = wx.Button(self, -1, buttonLabel_refresh, pos=(0, 0), size=(0,20)) - - updateFrameIcons_pos_left = 15 - updateFrameIcons_pos_top = (25, 110, 195) - - updateFrameText_version_pos_tops1 = (updateFrameIcons_pos_top[0] + 5, updateFrameIcons_pos_top[0] + 22) - updateFrameText_version_title_pos1 = ((80, updateFrameText_version_pos_tops1[0]), (80, updateFrameText_version_pos_tops1[1])) - updateFrameText_version_value_pos1 = ((180, updateFrameText_version_pos_tops1[0]), (180, updateFrameText_version_pos_tops1[1])) - - updateFrameText_version_pos_tops2 = (updateFrameIcons_pos_top[1], updateFrameIcons_pos_top[1] + 17) - updateFrameText_version_title_pos2 = ((80, updateFrameText_version_pos_tops2[0]), (80, updateFrameText_version_pos_tops2[1])) - updateFrameText_version_value_pos2 = ((180, updateFrameText_version_pos_tops2[0]), (180, updateFrameText_version_pos_tops2[1])) - - updateFrameText_version_pos_tops3 = (updateFrameIcons_pos_top[2] , updateFrameIcons_pos_top[2] + 17) - updateFrameText_version_title_pos3 = ((80, updateFrameText_version_pos_tops3[0]), (80, updateFrameText_version_pos_tops3[1])) - updateFrameText_version_value_pos3 = ((180, updateFrameText_version_pos_tops3[0]), (180, updateFrameText_version_pos_tops3[1])) - - updateFrameText_version_size = (100,100) - updateFrame_panels_icons = (wailPath + '/build/icons/whaleLogo_64.png', - wailPath + '/build/icons/heritrixLogo_64.png', - wailPath + '/build/icons/openWaybackLogo_64.png') - updateFrame_panels_titles = ('WAIL Core', 'Preservation', 'Replay') - updateFrame_panels_size = (390, 90) - - updateFrame_panels_pos = ((5,10), (5,95), (5,180)) - - #wailPanel = self.UpdateSoftwarePanel(self, 0, 0, 'WAIL') - #wailPanel.draw() - self.panel_wail = wx.StaticBox(self, 1, updateFrame_panels_titles[0], size=updateFrame_panels_size, pos=updateFrame_panels_pos[0]) - box1 = wx.StaticBoxSizer(self.panel_wail, wx.VERTICAL) - - self.panel_preservation = wx.StaticBox(self, 1, updateFrame_panels_titles[1], size=updateFrame_panels_size, pos=updateFrame_panels_pos[1]) - box2 = wx.StaticBoxSizer(self.panel_preservation, wx.VERTICAL) - - self.panel_replay = wx.StaticBox(self, 1, updateFrame_panels_titles[2], size=updateFrame_panels_size, pos=updateFrame_panels_pos[2]) - box3 = wx.StaticBoxSizer(self.panel_replay, wx.VERTICAL) - - # Panel 1 - wx.StaticText(self, 100, "Current Version:", updateFrameText_version_title_pos1[0], updateFrameText_version_size) - wx.StaticText(self, 100, "Latest Version:", updateFrameText_version_title_pos1[1], updateFrameText_version_size) - - wx.StaticText(self, 100, self.currentVersion_wail, updateFrameText_version_value_pos1[0], updateFrameText_version_size) - wx.StaticText(self, 100, self.latestVersion_wail, updateFrameText_version_value_pos1[1], updateFrameText_version_size) - - # Panel 2 - wx.StaticText(self, 100, "Current Version:", updateFrameText_version_title_pos2[0], updateFrameText_version_size) - wx.StaticText(self, 100, "Latest Version:", updateFrameText_version_title_pos2[1], updateFrameText_version_size) - - wx.StaticText(self, 100, self.currentVersion_heritrix, updateFrameText_version_value_pos2[0], updateFrameText_version_size) - wx.StaticText(self, 100, self.latestVersion_heritrix, updateFrameText_version_value_pos2[1], updateFrameText_version_size) - - # Panel 3 - wx.StaticText(self, 100, "Current Version:", updateFrameText_version_title_pos3[0], updateFrameText_version_size) - wx.StaticText(self, 100, "Latest Version:", updateFrameText_version_title_pos3[1], updateFrameText_version_size) - - wx.StaticText(self, 100, self.currentVersion_wayback, updateFrameText_version_value_pos3[0], updateFrameText_version_size) - wx.StaticText(self, 100, self.latestVersion_wayback, updateFrameText_version_value_pos3[1], updateFrameText_version_size) - - self.updateButton_wail = wx.Button(self, 3, "Update", pos=(305, updateFrameIcons_pos_top[0]), size=(75,20)) - self.updateButton_heritrix = wx.Button(self, 3, "Update", pos=(305, updateFrameIcons_pos_top[1]), size=(75,20)) - self.updateButton_wayback = wx.Button(self, 3, "Update", pos=(305, updateFrameIcons_pos_top[2]), size=(75,20)) - - self.updateButton_wail.Bind(wx.EVT_BUTTON, self.updateWAIL) - - if self.currentVersion_wail == self.latestVersion_wail: - self.updateButton_wail.Disable() - if self.currentVersion_wayback == self.latestVersion_wayback: - self.updateButton_wayback.Disable() - if self.currentVersion_heritrix == self.latestVersion_heritrix: - self.updateButton_heritrix.Disable() - - img = wx.Image(updateFrame_panels_icons[0], wx.BITMAP_TYPE_ANY).ConvertToBitmap() - wx.StaticBitmap(self, -1, img, (updateFrameIcons_pos_left, updateFrameIcons_pos_top[0]), (img.GetWidth(), img.GetHeight())) - - heritrix_64 = wx.Image(updateFrame_panels_icons[1], wx.BITMAP_TYPE_ANY).ConvertToBitmap() - wx.StaticBitmap(self, -1, heritrix_64, (updateFrameIcons_pos_left, updateFrameIcons_pos_top[1]), (heritrix_64.GetWidth(), heritrix_64.GetHeight())) - - openwayback_64 = wx.Image(updateFrame_panels_icons[2], wx.BITMAP_TYPE_ANY).ConvertToBitmap() - wx.StaticBitmap(self, -1, openwayback_64, (updateFrameIcons_pos_left, updateFrameIcons_pos_top[2]), (openwayback_64.GetWidth(), openwayback_64.GetHeight())) - - - return - - self.panelLabel2 = wx.StaticBox(self, 1, "XX", size=(400,90)) - dategraphSizer.Add(self.panelLabel2, 0, wx.ALL|wx.LEFT, 5) - - - #self.panelLabel2 = wx.StaticBox(self, -1, "OpenWayback", size=(400,90)) - #self.dategraphSizer2 = wx.BoxSizer(wx.VERTICAL) - #self.dategraphSizer.Add(self.panelLabel2, 0, wx.ALL|wx.LEFT, 5) - - #wx.StaticText(self, 100, "Current Version:", (75,15), (100,100)) - #wx.StaticText(self, 100, "Latest Version:", (75,35), (100,100)) - - #wx.StaticText(self, 100, "0.2015.10.11", (175,15), (100,100)) - #wx.StaticText(self, 100, "0.2015.12.25", (175,35), (100,100)) - - #img = wx.Image('./build/icons/whale_64.png', wx.BITMAP_TYPE_ANY).ConvertToBitmap() - #wx.StaticBitmap(self, -1, img, (5, 45), (img.GetWidth(), img.GetHeight())) - - #self.updateButton_wail = wx.Button(self, 3, "Update", pos=(310, 15), size=(75,20)) - - - - #self.Show(False) - -mainAppWindow = None - -if __name__ == "__main__": - #if len(sys.argv) > 1: - # '''A WARC file was drag-and-dropped onto WAIL''' - # print "WAIL was launched with file parameters." - #else: - # print "WAIL was launched without any file parameters." - - app = wx.App(redirect=False) - mainAppWindow = TabController() - mainAppWindow.ensureCorrectInstallation() - mainAppWindow.Show() - - # Start indexer - #Wayback().index() - - app.MainLoop() diff --git a/bundledApps/wailpy/cdxindexer b/bundledApps/wailpy/cdxindexer deleted file mode 100755 index c541fc89..00000000 Binary files a/bundledApps/wailpy/cdxindexer and /dev/null differ diff --git a/bundledApps/wailpy/wailEndpoint.py b/bundledApps/wailpy/wailEndpoint.py deleted file mode 100644 index f6800ccb..00000000 --- a/bundledApps/wailpy/wailEndpoint.py +++ /dev/null @@ -1,34 +0,0 @@ -import tornado.ioloop -import tornado.web -import requests - -host = 'localhost' -waybackPort = '8080' -archiveConfigFile = '/Applications/WAIL.app/config/archive.json' - -class MainHandler(tornado.web.RequestHandler): - def get(self): - iwa = isWaybackAccessible() - print iwa - self.write(iwa) - -def make_app(): - return tornado.web.Application([ - (r"/", MainHandler), - ]) - -def isWaybackAccessible(): - try: - r = requests.get('http://' + host + ':' + waybackPort) - with open(archiveConfigFile, 'r') as myfile: - data=myfile.read() - return data - except requests.exceptions.ConnectionError as e: - return '' - - - -if __name__ == "__main__": - app = make_app() - app.listen(8888) - tornado.ioloop.IOLoop.current().start() \ No newline at end of file diff --git a/bundledApps/wailpy/waybackConfigWriter.py b/bundledApps/wailpy/waybackConfigWriter.py deleted file mode 100644 index ef5ff34b..00000000 --- a/bundledApps/wailpy/waybackConfigWriter.py +++ /dev/null @@ -1,414 +0,0 @@ -# The purpose of this script is to write the Wayback configuration files dynamically based on -# the location of the script. This is necessary, as absolute paths are required for WARC ingestion - -import os, pystache - -########################################## -# wayback.xml -########################################## - -xml = """ - - - - - - - - wayback.basedir={{waybackBaseDir}} - wayback.urlprefix={{waybackURLPrefix}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{waybackURLPrefix}}list/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{waybackURLPrefix}}memento/ - - - - - - - - - - - - - - - - - - - - - - - - - - -""" - - - -def writeConfig(self): - thisScriptsPath = os.path.dirname(os.path.realpath(__file__)) - waybackRoot = thisScriptsPath+"/tomcat/webapps/ROOT" - filename = 'waybackNEW.xml' - - # Delete the config file if it exists - try: - os.remove(filename) - except OSError: - pass - - waybackXML = pystache.render(xml,{"waybackBaseDir":waybackRoot,"waybackURLPrefix":"http://localhost:8080/wayback/"}) - with open(filename, 'a') as xmlfile: - xmlfile.write(waybackXML) - \ No newline at end of file diff --git a/bundledApps/wayback.bat b/bundledApps/wayback.bat deleted file mode 100755 index 0f610a5e..00000000 --- a/bundledApps/wayback.bat +++ /dev/null @@ -1,26 +0,0 @@ -@echo off - -set here=%cd% -set JAVA_HOME=%here%\openjdk -set JRE_HOME=%here%\openjdk\jre -set CATALINA_HOME=%here%\tomcat -set start=%CATALINA_HOME%\bin\startup.bat -set stop=%CATALINA_HOME%\bin\shutdown.bat - -echo %here% - - -if "%1" == "start" goto runWayback -if "%1" == "stop" goto killWayback - -:runWayback -echo Starting Wayback -%start% -goto end - -:killWayback -echo Killing Wayback -%stop% -goto end - -:end \ No newline at end of file diff --git a/coreData/database/.gitkeep b/coreData/database/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/crawler-beans-old.cxml b/crawler-beans-old.cxml deleted file mode 100644 index 79556b28..00000000 --- a/crawler-beans-old.cxml +++ /dev/null @@ -1,695 +0,0 @@ - - - - - - - - - - - -# This Properties map is specified in the Java 'property list' text format -# http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 - -metadata.operatorContactUrl=http://yourdomain.com -metadata.jobName=basic -metadata.description=Basic crawl starting with useful defaults - -##..more?..## - - - - - - - - - - -# URLS HERE - - - - - - - - - - - - - - - -# [see override above] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/crawler-beans-win.cxml b/crawler-beans-win.cxml index fff8eab2..b5ae0317 100644 --- a/crawler-beans-win.cxml +++ b/crawler-beans-win.cxml @@ -1,13 +1,11 @@ - - - @@ -57,22 +50,19 @@ - - - @@ -105,26 +94,6 @@ --> - - - - - - - - - - @@ -132,12 +101,29 @@ - + + - + + + + + + + - + @@ -148,7 +134,7 @@ - + - @@ -224,7 +208,6 @@ - @@ -328,35 +311,29 @@ - - - - + + - - + - + + + --> - - @@ -383,19 +360,16 @@ - - - @@ -426,12 +400,10 @@ --> - - - @@ -451,7 +422,6 @@ - @@ -478,7 +447,6 @@ - - - - @@ -530,28 +494,23 @@ - - - - - - - - - - - - - @@ -627,10 +578,7 @@ - - - - + @@ -646,7 +594,6 @@ - @@ -654,41 +601,34 @@ - + - - - - - + - - - + + - - @@ -696,7 +636,6 @@ --> - - - - - - - - - - - # This Properties map is specified in the Java 'property list' text format - # http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 - metadata.operatorContactUrl=http://yourdomain.com - metadata.jobName=MyWAILBasedHeritrixCrawl - metadata.description=PersonalWebArchival - ##..more?..## - - - - - - - - - # URLS HERE - - - - - - - - - - - - - # [see override above] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + # This Properties map is specified in the Java 'property list' text format + # http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 + metadata.operatorContactUrl=http://yourdomain.com + metadata.jobName=MyWAILBasedHeritrixCrawl + metadata.description=SampleCrawl + ##..more?..## + + + + + + + + + # URLS HERE + + + + + + + + + + + + + # [see override above] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/crawler-beans_bk.cxml b/crawler-beans_bk.cxml new file mode 100644 index 00000000..e574f4f1 --- /dev/null +++ b/crawler-beans_bk.cxml @@ -0,0 +1,694 @@ + + + + + + + + + + + +# This Properties map is specified in the Java 'property list' text format +# http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 + +metadata.operatorContactUrl=http://yourdomain.com +metadata.jobName=MyWAILBasedHeritrixCrawl +metadata.description=SampleCrawl +##..more?..## + + + + + + + + + + +# URLS HERE + + + + + + + + + + + + + + + + +# [see override above] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/depDifWinRest.txt b/depDifWinRest.txt new file mode 100644 index 00000000..d25c2380 --- /dev/null +++ b/depDifWinRest.txt @@ -0,0 +1,3 @@ +babel-preset-env: + win: 1.1.1 + rest: 1.1.4 \ No newline at end of file diff --git a/images/frontpage.png b/images/frontpage.png new file mode 100644 index 00000000..f4206699 Binary files /dev/null and b/images/frontpage.png differ diff --git a/images/wailHome.png b/images/wailHome.png new file mode 100644 index 00000000..2014cccf Binary files /dev/null and b/images/wailHome.png differ diff --git a/it.json b/it.json new file mode 100644 index 00000000..97432725 --- /dev/null +++ b/it.json @@ -0,0 +1,350 @@ +{ + "name": "WAIL", + "license": "LGPL-3.0", + "version": "1.1.0beta2.5", + "contributors": [ + { + "name": "John Berlin", + "email": "jberlin@cs.odu.edu" + }, + { + "name": "Mat Kelly", + "email": "mkelly@cs.odu.edu" + } + ], + "repository": { + "type": "git", + "url": "git@github.com:N0taN3rd/wail.git" + }, + "bugs": "https://github.com/N0taN3rd/wail/issues", + "scripts": { + "build-main": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config ./webpackConfigs/ui/webpack.config.electron.js --progress --profile --colors", + "build-renderer": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config ./webpackConfigs/ui/webpack.config.production.js --progress --profile --colors", + "build-core": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config ./webpackConfigs/core/webpack.config.production.js --progress --profile --colors", + "build-wail-for-tests": "node --harmony tools/wailBuildTest.js", + "download-externals": "babel-node tools/downloadExternals", + "download-externals-all": "babel-node tools/downloadExternals --all", + "dev-core": "cross-env HOT=1 NODE_ENV=development node --harmony ./node_modules/.bin/webpack-dev-server --config ./webpackConfigs/core/webpack.config.js --port 9001 --content-base ./wail-core/ --hot --inline", + "dev-core-win": "cross-env HOT=1 NODE_ENV=development node_modules\\.bin\\webpack-dev-server.cmd --config ./webpackConfigs/core/webpack.config.js --port 9001 --content-base ./wail-core/ --hot --inline", + "dev-ui": "cross-env HOT=1 NODE_ENV=development node --harmony ./node_modules/.bin/webpack-dev-server --config ./webpackConfigs/ui/webpack.config.js --port 9000 --content-base ./wail-ui/ --hot --inline", + "dev-ui-win": "cross-env HOT=1 NODE_ENV=development node_modules\\.bin\\webpack-dev-server.cmd --config ./webpackConfigs/ui/webpack.config.js --port 9000 --content-base ./wail-ui/ --hot --inline", + "dev-ui-electron": "cross-env HOT=1 NODE_ENV=development electron -r babel-register ./wail-ui/ui-main.js", + "dev-only": "cross-env HOT=1 NODE_ENV=development node --max-old-space-size=2024 ./node_modules/.bin/webpack-dev-server --config ./webpackConfigs/deving/webpack.config.js --port 9002 --content-base ./wail-ui/ --hot --inline", + "run-tests": "node --harmony --harmony_async_await ./node_modules/.bin/ava -s --verbose", + "test-aman": "node --harmony --harmony_async_await ./node_modules/.bin/ava --verbose tests/testServiceMan/testServiceManager.js", + "package": "cross-env NODE_ENV=production node --harmony -r babel-register build-binary.js", + "package-all": "npm run package -- --all", + "package-windows": "npm run package -- --win", + "package-linux": "npm run package -- --linux ", + "package-osx": "npm run package -- --osx", + "nightmare": "babel-node tools/testNightmare", + "standard": "standard --verbose | snazzy", + "standard-fix": "standard --fix", + "profile": "./node_modules/.bin/webpack --config ./webpackConfigs/ui/webpack.config.production.js --content-base . --profile --json > stats.json", + "transformOldDb": "node --harmony ./tools/transformOldDb.js", + "general-debug": "node --harmony ./tools/test-xml.js", + "spectron-debug": "node --harmony ./tools/debugSpectron.js", + "onep-debug": "cross-env HOT=1 NODE_ENV=development electron --js-flags=\"--harmony --harmony_async_await\" ./debug/init.js" + }, + "main": "./dist/ui-main.js", + "bin": { + "electron": "./node_modules/.bin/electron", + "ava": "node --harmony ./node_modules/.bin/ava" + }, + "dependencies": { + "autobind-decorator": "^1.4.0", + "bluebird": "^3.5.0", + "bunyan": "^1.8.10", + "bytewise": "^1.1.0", + "checksum": "^0.1.1", + "cheerio": "^1.0.0-rc.1", + "chokidar": "^1.7.0", + "codemirror": "^5.25.2", + "del": "2.2.2", + "drag-drop": "^2.13.2", + "dropbox": "^2.5.2", + "electron": "^1.7.3", + "electron-oauth-twitter": "^1.1.0", + "electron-settings": "1.1.1", + "electron-window": "^0.8.1", + "eventemitter3": "^2.0.3", + "extract-zip": "^1.6.5", + "file-exists": "^4.0.0", + "filenamify": "^2.0.0", + "filenamify-url": "^1.0.0", + "find-process": "^1.0.5", + "flexboxgrid": "^6.3.1", + "fs-extra": "^3.0.1", + "fuse.js": "^3.0.4", + "get-port": "^3.1.0", + "graceful-fs": "^4.1.11", + "history": "^4.6.1", + "http-mitm-proxy": "^0.5.2", + "immutable": "^3.8.1", + "is-running": "^2.1.0", + "joinable": "^1.4.1", + "js-search": "^1.4.2", + "js-yaml": "^3.8.3", + "key-path-helpers": "^0.4.0", + "keymirror": "^0.1.1", + "klaw": "^1.3.1", + "lodash": "^4.17.4", + "material-design-icons-iconfont": "^3.0.3", + "material-ui": "^0.18.3", + "mime-types": "^2.1.15", + "mkdirp": "^0.5.1", + "moment": "^2.18.1", + "moment-round": "^1.0.1", + "moment-timer": "^1.1.5", + "moment-twitter": "^0.2.0", + "named-regexp": "^0.1.1", + "ncp": "^2.0.0", + "nedb": "^1.8.0", + "node-schedule": "^1.2.3", + "normalize-url": "^1.9.1", + "normalizr": "^3.2.2", + "oauth": "^0.9.15", + "path-exists": "^3.0.0", + "pretty-bytes": "^4.0.2", + "pretty-ms": "^2.1.0", + "pretty-seconds": "^0.2.1", + "prop-types": "^15.5.10", + "ps-tree": "^1.1.0", + "react": "15.5.4", + "react-addons-shallow-compare": "^15.5.2", + "react-addons-update": "^15.5.2", + "react-dom": "^15.5.4", + "react-flex": "^2.2.8", + "react-notification-system": "^0.2.14", + "react-redux": "^5.0.5", + "react-router": "^4.1.1", + "react-router-dom": "^4.1.1", + "react-router-redux": "^5.0.0-alpha.6", + "react-swipeable-views": "^0.12.3", + "react-tap-event-plugin": "^2.0.1", + "react-textfit": "^1.0.0", + "recompose": "^0.23.5", + "redux": "^3.6.0", + "redux-batched-actions": "^0.2.0", + "redux-electron-ipc": "^1.1.10", + "redux-form": "^6.8.0", + "redux-form-material-ui": "^4.2.0", + "redux-ignore": "^1.2.4", + "redux-immutable": "^4.0.0", + "redux-observable": "^0.14.1", + "redux-promise": "^0.5.3", + "redux-thunk": "^2.2.0", + "redux-undo": "^0.6.1", + "request": "^2.81.0", + "request-progress": "^3.0.0", + "request-promise": "^4.2.1", + "reselect": "^3.0.1", + "roboto-fontface": "^0.7.0", + "rxjs": "^5.4.0", + "serialize-error": "^2.1.0", + "shelljs": "0.7.7", + "sliced": "^1.0.1", + "sort-stream2": "^1.0.0", + "split2": "^2.1.1", + "stream-each": "^1.2.0", + "string": "^3.3.3", + "string-length": "^1.0.1", + "string-width": "^2.0.0", + "through2": "^2.0.3", + "tldjs": "^1.7.0", + "twit": "^2.2.5", + "twix": "^1.1.5", + "unzip": "^0.1.11", + "url-type": "^0.2.1", + "uuid": "^3.0.1", + "valid-url": "^1.0.9", + "validator": "^7.0.0", + "warning": "^3.0.0", + "yamljs": "^0.2.10" + }, + "devDependencies": { + "ava": "^0.19.1", + "babel-cli": "^6.24.1", + "babel-core": "^6.25.0", + "babel-eslint": "^7.2.3", + "babel-loader": "^7.0.0", + "babel-plugin-add-module-exports": "0.2.1", + "babel-plugin-espower": "^2.3.2", + "babel-plugin-react-html-attrs": "2.0.0", + "babel-plugin-react-transform": "^2.0.2", + "babel-plugin-syntax-function-sent": "^6.13.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-async-to-module-method": "^6.24.1", + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-plugin-transform-object-rest-spread": "^6.23.0", + "babel-plugin-transform-react-constant-elements": "^6.23.0", + "babel-plugin-transform-react-inline-elements": "^6.22.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.5", + "babel-plugin-transform-remove-console": "^6.8.1", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-plugin-webpack-loaders": "^0.9.0", + "babel-polyfill": "^6.23.0", + "babel-preset-env": "^1.5.2", + "babel-preset-react": "^6.24.1", + "babel-preset-react-hmre": "^1.1.1", + "babel-register": "^6.24.1", + "babel-runtime": "6.23.0", + "better-npm-run": "^0.0.15", + "bundle-loader": "^0.5.5", + "classnames": "^2.2.5", + "copy-webpack-plugin": "^4.0.1", + "core-js": "^2.4.1", + "cron-parser": "^2.4.0", + "cross-env": "^5.0.1", + "cross-zip": "^2.1.5", + "css-loader": "^0.28.4", + "debug": "^2.6.4", + "depcheck": "^0.6.7", + "devtron": "^1.4.0", + "electron-chromedriver": "^1.7.1", + "electron-debug": "^1.1.0", + "electron-devtools-installer": "^2.2.0", + "electron-packager": "^8.7.1", + "electron-installer-dmg": "^0.2.1", + "electron-rebuild": "^1.5.7", + "enzyme": "^2.8.2", + "eslint": "^3.19.0", + "eslint-plugin-react": "^7.0.1", + "extract-text-webpack-plugin": "^2.1.2", + "fbjs-scripts": "^0.7.1", + "file-loader": "^0.11.1", + "highlight": "^0.2.4", + "json-loader": "^0.5.4", + "minimist": "^1.2.0", + "pngjs": "^3.0.1", + "postcss-loader": "^1.3.3", + "power-assert": "^1.4.2", + "raw-loader": "^0.5.1", + "react-addons-perf": "^15.4.2", + "react-addons-test-utils": "^15.5.1", + "react-joyride": "^1.10.1", + "request-debug": "^0.2.0", + "run-sequence": "^1.2.2", + "snazzy": "^7.0.0", + "source-map-support": "^0.4.15", + "spectron": "^3.7.0", + "standard": "^10.0.2", + "standard-format": "^2.2.4", + "strip-loader": "^0.1.2", + "style-loader": "^0.18.1", + "url-loader": "^0.5.8", + "webpack": "^2.6.1", + "webpack-dev-middleware": "^1.10.2", + "webpack-dev-server": "^2.4.5", + "webpack-externals-plugin": "^1.0.0", + "webpack-hot-middleware": "^2.18.0", + "webpack-middleware": "^1.5.1", + "why-did-you-update": "^0.0.8" + }, + "eslintConfig": { + "parser": "babel-eslint", + "env": { + "node": true, + "es6": true + }, + "globals": [ + "window", + "React" + ], + "extends": [ + "standard" + ] + }, + "standard": { + "parser": "babel-eslint", + "ignore": [ + "archiveIndexes/*", + "archives/*", + "archives2/*", + "buildResources/*", + "bundledApps", + "collections/*", + "config/*", + "*.cxml", + "dist/*", + "Dockerfile", + "images/*", + "LICENSE", + "*.log", + "*.md", + "memgators/*", + "node_modules/*", + "package.js", + "release/*", + "*.sh", + "support/*", + "sharedUtil/*", + "test/*", + "tools/*", + "twitterDump/*", + "*.txt", + "waillogs/*", + "wail-twitter/vendor/*", + "wail-ui/vendor/*", + "webpack.*", + "*.xml", + "*.yml", + "zips/*" + ], + "globals": [ + "React", + "window" + ], + "env": { + "node": true, + "browser": true, + "es6": true + } + }, + "ava": { + "files": [ + "tests/*.js", + "!tests/test.js" + ], + "require": "babel-register", + "babel": { + "babelrc": false, + "plugins": [ + "transform-function-bind", + "transform-class-properties", + "syntax-trailing-function-commas", + "transform-export-extensions", + "espower" + ], + "presets": [ + [ + "env", + { + "targets": { + "electron": 1.6 + }, + "useBuiltIns": true, + "exclude": [ + "transform-async-to-generator" + ] + } + ] + ] + } + }, + "devEngines": { + "node": ">=7.x", + "npm": ">=3.x" + } +} diff --git a/package.json b/package.json index 161690a9..c03361b5 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,7 @@ { - "name": "wail", - "description": "Web Archiving Integration Layer (WAIL) is a graphical user interface (GUI) atop multiple web archiving tools intended to be used as an easy way for anyone to preserve and replay web page", + "name": "WAIL", "license": "LGPL-3.0", - "version": "1.0.0-rc.1", + "version": "1.2.0-beta3.5", "contributors": [ { "name": "John Berlin", @@ -18,29 +17,247 @@ "url": "git@github.com:N0taN3rd/wail.git" }, "bugs": "https://github.com/N0taN3rd/wail/issues", + "main": "./dist/ui-main.js", "bin": { - "electron": "./node_modules/.bin/electron" + "electron": "./node_modules/.bin/electron", + "ava": "node --harmony ./node_modules/.bin/ava" }, - "main": "./dist/electron-main.js", "scripts": { - "build-main": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config webpack.config.electron.js --progress --profile --colors", - "build-renderer": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config webpack.config.production.js --progress --profile --colors", - "check-dev-engines": "node node_modules/fbjs-scripts/node/check-dev-engines.js package.json", - "dev": "cross-env webpack-dev-server --port 9000 --content-base ./src/ --hot --inline", - "dev-electron": "cross-env HOT=1 NODE_ENV=development electron -r babel-register ./src/electron-main-dev.js", + "build-main": "export NODE_ENV=production; node ./node_modules/webpack/bin/webpack --config ./webpackConfigs/ui/webpack.config.electron.js --progress --profile --colors", + "build-renderer": "export NODE_ENV=production; node ./node_modules/webpack/bin/webpack --config ./webpackConfigs/ui/webpack.config.production.js --progress --profile --colors", + "build-core": "export NODE_ENV=production; node ./node_modules/webpack/bin/webpack --config ./webpackConfigs/core/webpack.config.production.js --progress --profile --colors", + "build-wail-for-tests": "node --harmony tools/wailBuildTest.js", "download-externals": "babel-node tools/downloadExternals", "download-externals-all": "babel-node tools/downloadExternals --all", - "nightmare": "babel-node tools/testNightmare", - "package": "cross-env NODE_ENV=production node -r babel-register build-binary.js", - "package-wextra": "cross-env NODE_ENV=production node -r babel-register build-binary.js --we", + "dev-core": "HOT=1 NODE_ENV=development node --harmony ./node_modules/.bin/webpack-dev-server --config ./webpackConfigs/core/webpack.config.js --port 9001 --content-base ./wail-core/ --hot --inline", + "dev-core-win": "cross-env HOT=1 NODE_ENV=development node_modules\\.bin\\webpack-dev-server.cmd --config ./webpackConfigs/core/webpack.config.js --port 9001 --content-base ./wail-core/ --hot --inline", + "dev-ui": "NODE_ENV=development node --harmony ./node_modules/.bin/webpack-dev-server --config ./webpackConfigs/ui/webpack.config.js --port 9000 --content-base ./wail-ui/ --hot --inline", + "dev-ui-win": "cross-env HOT=1 NODE_ENV=development node_modules\\.bin\\webpack-dev-server.cmd --config ./webpackConfigs/ui/webpack.config.js --port 9000 --content-base ./wail-ui/ --hot --inline", + "dev-ui-electron": "HOT=1 NODE_ENV=development electron -r babel-register ./wail-ui/ui-main.js", + "dev-ui-electron-win": "cross-env HOT=1 NODE_ENV=development electron -r babel-register ./wail-ui/ui-main.js", + "dev-only": "HOT=1 NODE_ENV=development node ./node_modules/.bin/webpack-dev-server --config ./webpackConfigs/deving/webpack.config.js --port 9002 --content-base ./wail-archiver/ --hot --inline", + "run-tests": "node --harmony --harmony_async_await ./node_modules/.bin/ava -s --verbose", + "test-aman": "node --harmony --harmony_async_await ./node_modules/.bin/ava --verbose tests/testServiceMan/testServiceManager.js", + "package": "cross-env NODE_ENV=production node --harmony build-binary.js", "package-all": "npm run package -- --all", "package-windows": "npm run package -- --win", "package-linux": "npm run package -- --linux ", "package-osx": "npm run package -- --osx", - "postinstall": "npm run check-dev-engines", + "nightmare": "babel-node tools/testNightmare", "standard": "standard --verbose | snazzy", - "start-dev": "cross-env concurrently --kill-others \"npm run dev-electron\" \"npm run dev\"", - "test-xml": "babel-node tools/test-xml" + "standard-fix": "standard --fix", + "profile": "./node_modules/.bin/webpack --config ./webpackConfigs/ui/webpack.config.production.js --content-base . --profile --json > stats.json", + "transformOldDb": "node --harmony ./tools/transformOldDb.js", + "general-debug": "node --harmony ./tools/test-xml.js", + "spectron-debug": "node --harmony ./tools/debugSpectron.js", + "onep-debug": "cross-env HOT=1 NODE_ENV=development electron --js-flags=\"--harmony --harmony_async_await\" ./debug/init.js" + }, + "dependencies": { + "autobind-decorator": "^2.1.0", + "bluebird": "^3.5.1", + "bunyan": "^1.8.12", + "bytewise": "^1.1.0", + "checksum": "^0.1.1", + "cheerio": "^1.0.0-rc.2", + "chokidar": "^1.7.0", + "codemirror": "^5.30.0", + "del": "3.0.0", + "drag-drop": "^2.13.2", + "dropbox": "^2.5.11", + "electron": "1.8.1", + "electron-oauth-twitter": "^1.1.0", + "electron-settings": "3.1.2", + "electron-window": "^0.8.1", + "eventemitter3": "^2.0.3", + "extract-zip": "^1.6.5", + "file-exists": "^5.0.0", + "filenamify": "^2.0.0", + "filenamify-url": "^1.0.0", + "find-process": "^1.1.0", + "flexbox-react": "^4.4.0", + "flexboxgrid": "^6.3.1", + "fs-extra": "^4.0.2", + "fuse.js": "^3.1.0", + "get-port": "^3.2.0", + "graceful-fs": "^4.1.11", + "history": "^4.7.2", + "http-mitm-proxy": "^0.5.3", + "immutable": "^3.8.2", + "is-running": "^2.1.0", + "joinable": "^1.5.0", + "js-search": "^1.4.2", + "js-yaml": "^3.10.0", + "key-path-helpers": "^0.4.0", + "keymirror": "^0.1.1", + "klaw": "^2.1.0", + "lodash": "^4.17.4", + "lodash-es": "^4.17.4", + "material-design-icons-iconfont": "^3.0.3", + "material-ui": "^0.19.3", + "mime-types": "^2.1.17", + "mkdirp": "^0.5.1", + "moment": "^2.18.1", + "moment-round": "^1.0.1", + "moment-timer": "^1.2.1", + "moment-twitter": "^0.2.0", + "named-regexp": "^0.1.1", + "ncp": "^2.0.0", + "nedb": "^1.8.0", + "node-schedule": "^1.2.5", + "node-warc": "^1.1.1", + "normalize-url": "^1.9.1", + "normalizr": "^3.2.3", + "oauth": "^0.9.15", + "path-exists": "^3.0.0", + "pretty-bytes": "^4.0.2", + "pretty-ms": "^3.0.1", + "pretty-seconds": "^0.2.1", + "prop-types": "^15.6.0", + "ps-tree": "^1.1.0", + "react": "16.0.0", + "react-addons-shallow-compare": "^15.6.2", + "react-addons-update": "^15.6.2", + "react-dom": "^16.0.0", + "react-flex": "^2.2.8", + "react-notification-system": "^0.2.15", + "react-redux": "^5.0.6", + "react-router": "^4.2.0", + "react-router-dom": "^4.2.2", + "react-router-redux": "^5.0.0-alpha.6", + "react-swipeable-views": "^0.12.8", + "react-tap-event-plugin": "^3.0.2", + "react-textfit": "^1.0.1", + "recompose": "^0.25.1", + "redux": "^3.7.2", + "redux-batched-actions": "^0.2.0", + "redux-electron-ipc": "^1.1.10", + "redux-form": "^7.0.4", + "redux-form-material-ui": "^4.3.0", + "redux-ignore": "^1.2.4", + "redux-immutable": "^4.0.0", + "redux-observable": "^0.16.0", + "redux-promise": "^0.5.3", + "redux-thunk": "^2.2.0", + "redux-undo": "^0.6.1", + "request": "^2.83.0", + "request-progress": "^3.0.0", + "request-promise": "^4.2.2", + "reselect": "^3.0.1", + "roboto-fontface": "^0.8.0", + "rxjs": "^5.4.3", + "serialize-error": "^2.1.0", + "shelljs": "0.7.8", + "sliced": "^1.0.1", + "sort-stream2": "^1.0.0", + "source-map-support": "^0.5.0", + "split2": "^2.2.0", + "stream-each": "^1.2.0", + "string": "^3.3.3", + "string-length": "^2.0.0", + "string-width": "^2.1.1", + "through2": "^2.0.3", + "tldjs": "^2.2.0", + "twit": "^2.2.9", + "twix": "^1.2.1", + "unzip": "^0.1.11", + "url-type": "^0.2.1", + "uuid": "^3.1.0", + "valid-url": "^1.0.9", + "validator": "^9.0.0", + "warning": "^3.0.0", + "yamljs": "^0.3.0" + }, + "devDependencies": { + "ava": "^0.22.0", + "babel-cli": "^6.26.0", + "babel-core": "^6.26.0", + "babel-eslint": "^8.0.1", + "babel-loader": "^7.1.2", + "babel-plugin-add-module-exports": "0.2.1", + "babel-plugin-espower": "^2.3.2", + "babel-plugin-react-html-attrs": "2.0.0", + "babel-plugin-react-transform": "^3.0.0", + "babel-plugin-syntax-function-sent": "^6.13.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-async-to-module-method": "^6.24.1", + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-plugin-transform-react-constant-elements": "^6.23.0", + "babel-plugin-transform-react-inline-elements": "^6.22.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.9", + "babel-plugin-transform-remove-console": "^6.8.5", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-plugin-webpack-loaders": "^0.9.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.6.0", + "babel-preset-react": "^6.24.1", + "babel-preset-react-hmre": "^1.1.1", + "babel-register": "^6.26.0", + "babel-runtime": "6.26.0", + "better-npm-run": "^0.1.0", + "bundle-loader": "^0.5.5", + "classnames": "^2.2.5", + "copy-webpack-plugin": "^4.1.0", + "core-js": "^2.5.1", + "cron-parser": "^2.4.2", + "cross-env": "^5.0.5", + "cross-zip": "^2.1.5", + "css-loader": "^0.28.7", + "debug": "^3.1.0", + "depcheck": "^0.6.7", + "devtron": "^1.4.0", + "electron-chromedriver": "^1.7.1", + "electron-debug": "^1.4.0", + "electron-devtools-installer": "^2.2.0", + "electron-installer-dmg": "^0.2.1", + "electron-packager": "^9.1.0", + "electron-rebuild": "^1.6.0", + "eslint": "^4.8.0", + "eslint-plugin-react": "^7.4.0", + "extract-text-webpack-plugin": "^3.0.1", + "fbjs-scripts": "^0.8.1", + "file-loader": "^1.1.5", + "highlight": "^0.2.4", + "immutable-devtools": "^0.0.7", + "json-loader": "^0.5.7", + "madge": "^2.2.0", + "minimist": "^1.2.0", + "npm-check-updates": "^2.13.0", + "pngjs": "^3.3.0", + "postcss-loader": "^2.0.6", + "power-assert": "^1.4.4", + "raw-loader": "^0.5.1", + "react-hot-loader": "^3.0.0-beta.7", + "react-joyride": "^1.10.1", + "redbox-react": "^1.5.0", + "request-debug": "^0.2.0", + "run-sequence": "^2.2.0", + "snazzy": "^7.0.0", + "source-map-support": "^0.5.0", + "spectron": "^3.7.2", + "standard": "^10.0.3", + "standard-format": "^2.2.4", + "strip-loader": "^0.1.2", + "style-loader": "^0.19.0", + "url-loader": "^0.6.2", + "webpack": "^3.6.0", + "webpack-dev-middleware": "^1.12.0", + "webpack-dev-server": "^2.9.1", + "webpack-externals-plugin": "^1.0.0", + "webpack-hot-middleware": "^2.19.1", + "webpack-middleware": "^1.5.1", + "why-did-you-update": "^0.0.8" }, "eslintConfig": { "parser": "babel-eslint", @@ -49,19 +266,11 @@ "es6": true }, "globals": [ - "React", - "window" + "window", + "React" ], - "rules": { - "comma-dangle": "off", - "react/jsx-boolean-value": "off", - "react/jsx-space-before-closing": "off", - "no-unused-var": "off", - "no-undef": "off" - }, "extends": [ - "standard", - "standard-react" + "standard" ] }, "standard": { @@ -69,24 +278,32 @@ "ignore": [ "archiveIndexes/*", "archives/*", + "archives2/*", "buildResources/*", "bundledApps", + "collections/*", "config/*", "*.cxml", "dist/*", "Dockerfile", + "images/*", "LICENSE", "*.log", "*.md", + "memgators/*", "node_modules/*", "package.js", "release/*", "*.sh", "support/*", + "sharedUtil/*", "test/*", "tools/*", + "twitterDump/*", "*.txt", "waillogs/*", + "wail-twitter/vendor/*", + "wail-ui/vendor/*", "webpack.*", "*.xml", "*.yml", @@ -100,175 +317,45 @@ "node": true, "browser": true, "es6": true - }, - "rules": { - "comma-dangle": "off" } }, - "dependencies": { - "any-promise": "^1.3.0", - "autobind-decorator": "^1.3.3", - "bluebird": "^3.4.1", - "bundle-loader": "^0.5.4", - "bytewise": "^1.1.0", - "checksum": "^0.1.1", - "cheerio": "^0.20.0", - "chokidar": "^1.6.0", - "cls-bluebird": "^1.1.3", - "codemirror": "^5.17.0", - "continuation-local-storage": "^3.1.7", - "cron": "^1.1.0", - "del": "2.2.1", - "dotenv": "^2.0.0", - "electron-editor-context-menu": "^1.1.1", - "electron-settings": "^1.1.1", - "eventemitter3": "^1.2.0", - "extract-zip": "^1.5.0", - "flux": "^2.1.1", - "form-data": "^1.0.0-rc4", - "formsy-material-ui": "^0.5.0", - "formsy-react": "^0.18.1", - "fs-extra": "0.30.0", - "google-auth-library": "^0.9.8", - "googleapis": "^12.0.0", - "graceful-fs": "^4.1.5", - "history": "^3.0.0", - "insafe": "^0.3.0", - "joinable": "^1.2.1", - "keymirror": "^0.1.1", - "lodash": "^4.14.1", - "material-design-icons-iconfont": "^2.0.5", - "material-ui": "^0.15.2", - "mkdirp": "^0.5.1", - "moment": "^2.14.1", - "mz": "^2.4.0", - "named-regexp": "^0.1.1", - "ncp": "^2.0.0", - "node-cron": "^1.1.1", - "node-schedule": "^1.1.1", - "normalize-url": "^1.6.0", - "normalize.css": "^4.2.0", - "pkginfo": "^0.4.0", - "postcss": "^5.1.1", - "pretty-error": "^2.0.0", - "progress": "^1.1.8", - "purl": "^1.0.4", - "queue": "^4.0.0", - "react": "15.3.0", - "react-addons-css-transition-group": "^15.3.0", - "react-addons-test-utils": "^15.3.0", - "react-cellblock": "^2.0.0", - "react-d3-basic": "^1.6.11", - "react-d3-tooltip": "^1.4.14", - "react-dom": "15.3.0", - "react-electron-webview": "^1.0.7", - "react-motion": "^0.4.4", - "react-router": "^2.6.1", - "react-swipeable-views": "^0.6.5", - "react-tap-event-plugin": "^1.0.0", - "request": "^2.74.0", - "request-debug": "^0.2.0", - "request-promise": "^4.1.0", - "roboto-fontface": "^0.5.0", - "rwlock": "^5.0.0", - "shelljs": "0.7.3", - "sliced": "^1.0.1", - "sort-stream2": "^1.0.0", - "source-map-support": "^0.4.2", - "split2": "^2.1.0", - "string": "^3.3.1", - "through2": "^2.0.1", - "tldjs": "^1.6.2", - "twix": "^1.1.0", - "unzip": "^0.1.11", - "valid-url": "^1.0.9", - "validator": "^5.5.0" - }, - "devDependencies": { - "asar": "^0.12.1", - "assets-webpack-plugin": "^3.4.0", - "autoprefixer": "^6.3.7", - "babel-cli": "^6.11.4", - "babel-core": "^6.11.4", - "babel-eslint": "^6.1.2", - "babel-loader": "^6.2.4", - "babel-plugin-add-module-exports": "0.2.1", - "babel-plugin-react-html-attrs": "2.0.0", - "babel-plugin-react-transform": "^2.0.2", - "babel-plugin-transform-class-properties": "6.11.5", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-es2015-destructuring": "^6.9.0", - "babel-plugin-transform-react-constant-elements": "^6.9.1", - "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.2.9", - "babel-plugin-transform-remove-console": "^6.8.0", - "babel-plugin-transform-runtime": "^6.12.0", - "babel-plugin-webpack-loaders": "^0.7.1", - "babel-polyfill": "6.9.1", - "babel-preset-es2015": "^6.9.0", - "babel-preset-node5": "^11.1.0", - "babel-preset-node6": "^11.0.0", - "babel-preset-react": "^6.11.1", - "babel-preset-react-hmre": "^1.1.1", - "babel-preset-react-optimize": "^1.0.1", - "babel-preset-stage-0": "^6.5.0", - "babel-register": "^6.11.6", - "babel-runtime": "6.11.6", - "babelify": "^7.3.0", - "classnames": "^2.2.5", - "concurrently": "^2.2.0", - "copy-webpack-plugin": "^3.0.1", - "cross-env": "^2.0.0", - "cross-zip": "^2.1.4", - "css-loader": "^0.23.1", - "debug": "^2.2.0", - "depcheck": "^0.6.4", - "devtron": "^1.2.1", - "electron-compile": "3.3.5", - "electron-compilers": "3.1.6", - "electron-debug": "^1.0.1", - "electron-devtools-installer": "^2.0.0", - "electron-installer-dmg": "^0.1.1", - "electron-packager": "^7.3.0", - "electron-prebuilt": "^1.3.1", - "electron-react-devtools": "0.3.1", - "electron-rebuild": "^1.1.5", - "electron-reload": "^1.0.1", - "electron-winstaller": "^2.3.3", - "eslint-config-standard": "^5.3.5", - "eslint-config-standard-jsx": "^2.0.0", - "eslint-config-standard-react": "^3.0.0", - "eslint-plugin-react": "^5.2.2", - "extract-text-webpack-plugin": "^1.0.1", - "fbjs-scripts": "^0.7.1", - "file-loader": "^0.9.0", - "highlight": "^0.2.4", - "json-loader": "^0.5.4", - "minimist": "^1.2.0", - "nobin-debian-installer": "0.0.10", - "node-libs-browser": "^1.0.0", - "node-sass": "^3.8.0", - "plist": "^1.2.0", - "raw-loader": "^0.5.1", - "react-addons-perf": "^15.3.0", - "run-sequence": "^1.2.2", - "sass-loader": "^4.0.0", - "snazzy": "^4.0.0", - "standard": "^7.1.2", - "standard-format": "^2.2.2", - "standard-react": "^2.1.0", - "strip-loader": "^0.1.2", - "style-loader": "0.13.1", - "url-loader": "^0.5.7", - "webpack": "^1.13.1", - "webpack-dev-middleware": "^1.6.1", - "webpack-dev-server": "1.14.1", - "webpack-hot-middleware": "^2.12.2", - "webpack-middleware": "^1.5.1", - "webpack-typescript": "^0.5.6" + "ava": { + "files": [ + "tests/*.js", + "!tests/test.js" + ], + "require": "babel-register", + "babel": { + "babelrc": false, + "plugins": [ + "transform-function-bind", + "transform-class-properties", + "syntax-trailing-function-commas", + "transform-export-extensions", + "espower" + ], + "presets": [ + [ + "env", + { + "targets": { + "electron": 1.6 + }, + "useBuiltIns": true, + "exclude": [ + "transform-async-to-generator" + ] + } + ] + ] + } }, "devEngines": { - "node": "6.x", - "npm": "3.x" + "node": ">=7.x", + "npm": ">=3.x" + }, + "resolutions": { + "**/redbox-react": "^1.5.0", + "**/babel-plugin-react-transform": "^3.0.0" } } diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index e7523dba..00000000 --- a/requirements.txt +++ /dev/null @@ -1,13 +0,0 @@ -biplist==1.0.1 -dmgbuild==1.1.0 -ds-store==1.0.1 -mac-alias==1.1.0 -pyobjc-core==3.0.4 -pyobjc-framework-Cocoa==3.0.4 -pyobjc-framework-Quartz==3.0.4 -pystache==0.5.4 -requests==2.9.1 -schedule==0.3.2 -six==1.10.0 -wheel==0.26.0 -wxPython==3.0.2.0 diff --git a/runMemgator.sh b/runMemgator.sh new file mode 100644 index 00000000..0e898c65 --- /dev/null +++ b/runMemgator.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +./memgators/memgator-linux-amd64 -p 3031 -a config/archives.json server \ No newline at end of file diff --git a/runTest.sh b/runTest.sh new file mode 100755 index 00000000..ebccf21e --- /dev/null +++ b/runTest.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +here=$(pwd) +testDir=${here}/tests +ava="node --harmony --harmony_async_await ./node_modules/.bin/ava --verbose" + +${ava} ${testDir}/$1 \ No newline at end of file diff --git a/sharedUtil/constants.js b/sharedUtil/constants.js new file mode 100755 index 00000000..642f7aee --- /dev/null +++ b/sharedUtil/constants.js @@ -0,0 +1,66 @@ +import keyMirror from 'keymirror' + +export default { + Code: { + which: keyMirror({ + WBC: null, + CRAWLBEAN: null + }) + }, + EventTypes: keyMirror({ + BUILD_CRAWL_JOB: null, + BUILT_CRAWL_CONF: null, + BUILT_CRAWL_JOB: null, + CHECK_URI_IN_ARCHIVE: null, + CRAWL_JOB_DELETED: null, + NEW_CRAWL_ADD_URL: null, + NEW_CRAWL_ADD_DEPTH: null, + NEW_CRAWL_EDITED_URL: null, + NEW_CRAWL_REMOVE_URL: null, + FETCH_CODE: null, + EMPTY_URL: null, + GET_HERITRIX_JOB_CONF: null, + GET_MEMENTO_COUNT: null, + GOT_MEMENTO_COUNT: null, + HAS_VAILD_URI: null, + HERITRIX_CRAWL_ALL_STATUS: null, + HERITRIX_STATUS_UPDATE: null, + LAUNCHED_CRAWL_JOB: null, + QUEUE_MESSAGE: null, + REQUEST_HERITRIX: null, + REQUEST_WAYBACK: null, + SAVE_CODE: null, + STORE_HERITRIX_JOB_CONFS: null, + VIEW_ARCHIVED_URI: null, + VIEW_HERITRIX_JOB: null, + WAYBACK_STATUS_UPDATE: null, + WAYBACK_RESTART: null + }), + From: keyMirror({ + BASIC_ARCHIVE_NOW: null, + NEW_CRAWL_DIALOG: null, + MEMENTO_MENU: null + }), + RequestTypes: keyMirror({ + ACCESSIBILITY: null, + ADD_HERITRIX_JOB_DIRECTORY: null, + BUILD_HERITIX_JOB: null, + FORCE_CRAWL_FINISH: null, + TERMINATE_JOB: null, + TEARDOWN_JOB: null, + RESCAN_JOB_DIR: null, + KILL_HERITRIX: null, + LAUNCH_HERITRIX_JOB: null, + SEND_HERITRIX_ACTION: null + }), + Loading: keyMirror({ + JAVA_CHECK_DONE: null, + DOWNLOAD_JAVA: null, + JDK_DOWNLOADING: null, + JDK_DOWNLOADED: null, + SERVICE_HW_UP: null, + SERVICE_HW_DOWN: null, + SERVICE_CHECK_DONE: null, + MIGRATION_DONE: null + }) +} diff --git a/sharedUtil/index.js b/sharedUtil/index.js new file mode 100644 index 00000000..3dd30c02 --- /dev/null +++ b/sharedUtil/index.js @@ -0,0 +1,9 @@ +import Pather from './pather' +import ViewWatcher from './viewWatcher' +import createServiceDaemon from './serviceDaemon' +import {default as wailConsts} from './constants' + +exports.Pather = Pather +exports.ViewWatcher = ViewWatcher +exports.createServiceDaemon = createServiceDaemon +exports.wailConsts = wailConsts diff --git a/sharedUtil/pather.js b/sharedUtil/pather.js new file mode 100644 index 00000000..75232705 --- /dev/null +++ b/sharedUtil/pather.js @@ -0,0 +1,56 @@ +import path from 'path' +import autobind from 'autobind-decorator' + +export default class Pather { + constructor (base) { + this._base = base + } + + @autobind + joinWBase () { + if (arguments.length === 0) { + return path.join(this._base) + } else { + return path.join(this._base, ...arguments) + } + } + + @autobind + join () { + return path.join(...arguments) + } + + @autobind + normalizeJoinWBase () { + if (arguments.length === 0) { + return path.join(this._base) + } else { + return path.normalize(this.join(...arguments)) + } + } + + @autobind + normalizeJoin () { + if (arguments.length === 0) { + return path.join(this._base) + } else { + return path.normalize(path.join(...arguments)) + } + } + + baseName (what) { + return path.basename(what) + } + + baseNameNoExt (what, ext) { + return path.basename(what, ext) + } + + sep () { + return path.sep + } + + get base () { + return this.base + } +} diff --git a/sharedUtil/serviceDaemon.js b/sharedUtil/serviceDaemon.js new file mode 100644 index 00000000..ef78181f --- /dev/null +++ b/sharedUtil/serviceDaemon.js @@ -0,0 +1,171 @@ +import cp from 'child_process' +import named from 'named-regexp' +import S from 'string' +import Promise from 'bluebird' +import isRunning from 'is-running' + +const hpidGetter = named.named(/[a-zA-z0-9\s:]+\(pid+\s(:[0-9]+)\)/) + +export default class ServiceDaemon { + constructor (settings) { + this._monitoring = new Map() + this._isWin = process.platform === 'win32' + this._settings = settings + } + + isServiceUp (which) { + let hpid = this._monitoring.get(which) + if (hpid) { + return isRunning(hpid) + } else { + return false + } + } + + killService (which) { + if (which === 'all') { + let wasError = [] + for (let [k, v] of this._monitoring) { + if (this.isServiceUp(k) && !v.error) { + if (!this._isWin) { + process.kill(v.pid, 'SIGTERM') + } else { + cp.exec('taskkill /PID ' + v.pid + ' /T /F', (error, stdout, stderr) => { + if (error) { + console.error('really bad juju') + } + }) + } + } + } + return wasError + } else { + let killMe = this._monitoring.get(which) + if (killMe) { + if (this.isServiceUp(which) && !killMe.error) { + if (!this._isWin) { + process.kill(killMe.pid, 'SIGTERM') + } else { + cp.exec('taskkill /PID ' + killMe.pid + ' /T /F', (error, stdout, stderr) => { + if (error) { + console.error('really bad juju') + } + }) + } + } + } + } + } + + startHeritrix () { + if (this._monitoring.get('heritrix')) { + return Promise.resolve(true) + } + + return new Promise((resolve, reject) => { + if (this._isWin) { + let heritrixPath = this._settings.get('heritrix.path') + let opts = { + cwd: heritrixPath, + env: { + JAVA_HOME: this._settings.get('jdk'), + JRE_HOME: this._settings.get('jre'), + HERITRIX_HOME: heritrixPath + }, + detached: true, + shell: true, + stdio: [ 'ignore', 'ignore', 'ignore' ] + } + let usrpwrd = `${this._settings.get('heritrix.username')}:${this._settings.get('heritrix.password')}` + try { + let heritrix = cp.spawn('bin\\heritrix.cmd', [ '-a', `${usrpwrd}` ], opts) + this._monitoring.set('heritrix', { + pid: heritrix.pid, + error: false + }) + heritrix.unref() + resolve() + } catch (err) { + // why you no work??? + this._monitoring.set('heritrix', { + pid: '', + error: true + }) + reject(err) + } + } else { + var hStart + if (process.platform === 'darwin') { + hStart = this._settings.get('heritrixStartDarwin') + } else { + hStart = this._settings.get('heritrixStart') + } + cp.exec(hStart, (err, stdout, stderr) => { + // console.log(hStart) + // console.log(err, stdout, stderr) + let wasError = false + if (err) { + wasError = true + this._monitoring.set('heritrix', { + pid: '', + error: wasError + }) + reject(err) + } else { + let pidLine = S(stdout).lines()[ 0 ] + let maybepid = hpidGetter.exec(pidLine) + if (maybepid) { + let pid = maybepid.capture('hpid') + this._monitoring.set('heritrix', { + pid: S(pid).toInt(), + error: wasError + }) + resolve() + } else { + wasError = true + this._monitoring.set('heritrix', { + pid: '', + error: wasError + }) + reject(err) + } + } + }) + } + }) + } + + startWayback () { + if (this._monitoring.get('wayback')) { + return Promise.resolve(true) + } + + return new Promise((resolve, reject) => { + let exec = this._settings.get('pywb.wayback') + let opts = { + cwd: this._settings.get('pywb.home'), + detached: true, + shell: true, + stdio: [ 'ignore', 'ignore', 'ignore' ] + } + let wasError = false + try { + let wayback = cp.spawn(exec, [ '-d', this._settings.get('warcs') ], opts) + this._monitoring.set('wayback', { + pid: wayback.pid, + error: wasError + }) + wayback.unref() + resolve() + } catch (err) { + wasError = true + this._monitoring.set('wayback', { + pid: ' ', + error: wasError + }) + reject(err) + } + }) + } +} + diff --git a/sharedUtil/viewWatcher.js b/sharedUtil/viewWatcher.js new file mode 100644 index 00000000..3aeeb1f7 --- /dev/null +++ b/sharedUtil/viewWatcher.js @@ -0,0 +1,11 @@ +import EventEmitter from 'eventemitter3' + +class _ViewWatcher extends EventEmitter { + view (from, viewing) { + this.emit(`${from}-view`, viewing) + } +} + +const ViewWatcher = new _ViewWatcher() + +export default ViewWatcher diff --git a/src/actions/archive-url-actions.js b/src/actions/archive-url-actions.js deleted file mode 100755 index db8b53ea..00000000 --- a/src/actions/archive-url-actions.js +++ /dev/null @@ -1,107 +0,0 @@ -import childProcess from 'child_process' -import rp from 'request-promise' -import { remote } from 'electron' -import util from 'util' -import UrlDispatcher from '../dispatchers/url-dispatcher' -import MemgatorDispatcher from '../dispatchers/memgatorDispatcher' -import GMessageDispatcher from '../dispatchers/globalMessageDispatcher' -import wailConstants from '../constants/wail-constants' - -const settings = remote.getGlobal('settings') -const EventTypes = wailConstants.EventTypes -const logger = remote.getGlobal('logger') -const logString = 'archive-url-actions %s' -const logStringError = 'archive-url-actions error where[ %s ], stack[ %s ]' - -export function checkUriIsInArchive (uri) { - console.log('checking if uri is in archive', uri) - - GMessageDispatcher.dispatch({ - type: EventTypes.QUEUE_MESSAGE, - message: `Checking if ${uri} is in the archive` - }) - - rp({ uri: `${settings.get('wayback.uri_wayback')}*/${uri}` }) - .then(response => { - // POST succeeded... - GMessageDispatcher.dispatch({ - type: EventTypes.QUEUE_MESSAGE, - message: `The URL ${uri} is in the archive` - }) - }) - .catch(err => { - console.log('error in querying wayback', err) - logger.error(util.format(logStringError, 'checkUriIsInArchive', err.stack)) - GMessageDispatcher.dispatch({ - type: EventTypes.QUEUE_MESSAGE, - message: `The URL ${uri} is not in the archive` - }) - }) - -} - -export function getMementos (url) { - UrlDispatcher.dispatch({ - type: EventTypes.GET_MEMENTO_COUNT, - url: url, - }) -} - -export function emptyURL () { - UrlDispatcher.dispatch({ - type: EventTypes.EMPTY_URL - }) -} - -export function urlUpdated (url) { - UrlDispatcher.dispatch({ - type: EventTypes.HAS_VAILD_URI, - url: url - }) -} - -export async function askMemgator2 (url) { - - childProcess.exec(`${settings.get('memgatorQuery')} ${url}`, (err, stdout, stderr) => { - if (err) { - console.error(err) - let stack - if (Reflect.has(err, 'stack')) { - stack = `${stderr} ${err.stack}` - } else { - stack = `${stderr}` - } - logger.error(util.format(logStringError, `askMemgator ${stderr}`, stack)) - } else { - let mementoCount = (stdout.match(/memento/g) || []).length - MemgatorDispatcher.dispatch({ - type: EventTypes.GOT_MEMENTO_COUNT, - url, - timemap: '', - count: mementoCount - }) - } - }) -} - -export async function askMemgator (url) { - console.log('askingMemegator') - childProcess.exec(`${settings.get('memgatorQuery')} ${url}`, (err, stdout, stderr) => { - if (err) { - let stack - if (Reflect.has(err, 'stack')) { - stack = `${stderr} ${err.stack}` - } else { - stack = `${stderr}` - } - logger.error(util.format(logStringError, `askMemgator ${stdout}`, stack)) - } - let mementoCount = (stdout.match(/memento/g) || []).length - UrlDispatcher.dispatch({ - type: EventTypes.GOT_MEMENTO_COUNT, - url, - mementos: mementoCount - }) - }) -} - diff --git a/src/actions/heritrix-actions.js b/src/actions/heritrix-actions.js deleted file mode 100644 index 7d369aa4..00000000 --- a/src/actions/heritrix-actions.js +++ /dev/null @@ -1,676 +0,0 @@ -import childProcess from 'child_process' -import cheerio from 'cheerio' -import fs from 'fs-extra' -import path from 'path' -import named from 'named-regexp' -import through2 from 'through2' -import S from 'string' -import moment from 'moment' -import _ from 'lodash' -import Promise from 'bluebird' -import os from 'os' -import { remote } from 'electron' -import util from 'util' -import wc from '../constants/wail-constants' -import ServiceStore from '../stores/serviceStore' -import ServiceDispatcher from '../dispatchers/service-dispatcher' -import RequestDispatcher from '../dispatchers/requestDispatcher' -import CrawlDispatcher from '../dispatchers/crawl-dispatcher' - -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' - -const isWindows = process.platform === 'win32' -const EventTypes = wc.EventTypes -const RequestTypes = wc.RequestTypes - -const settings = remote.getGlobal('settings') -const logger = remote.getGlobal('logger') -const logString = 'heritirx-actions %s' -const logStringError = 'heritirx-actions error where[ %s ] stack [ %s ]' - -const jobRunning = /[a-zA-Z0-9\-:]+\s(?:CRAWL\s((?:RUNNING)|(?:EMPTY))\s-\s)(?:(?:Running)|(?:Preparing))/ -const jobEnd = /[a-zA-Z0-9\-:]+\s(?:CRAWL\sEND(?:(?:ING)|(?:ED)).+)/ -const jobStatusRe = /(:[a-zA-Z0-9\-:]+)\s(:[0-9]+)\s(:[0-9]+)\s(:[0-9]+)\s.+/ - -let jobLaunchRe -let jobRe - -if (isWindows) { - jobLaunchRe = /[a-zA-Z0-9-:\\.]+jobs\\(:\d+)\\(:\d+)\\logs\\progress-statistics\.log$/ - jobRe = /[a-zA-Z0-9-:\\.]+jobs\\(:\d+)/ -} else { - jobLaunchRe = /[a-zA-Z0-9-/.]+jobs\/(:\d+)\/(:\d+)\/logs\/progress-statistics\.log$/ - jobRe = /[a-zA-Z0-9-/.]+jobs\/(:\d+)/ -} - -export function heritrixAccesible (startOnDown = false) { - console.log('checking heritrix accessibility') - let optionEngine = _.cloneDeep(settings.get('heritrix.optionEngine')) - - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.ACCESSIBILITY, - opts: optionEngine, - from: `heritrixAccesible[${startOnDown}]`, - timeReceived: null, - startOnDown, - success: function (response) { - console.log('heritrix success') - ServiceDispatcher.dispatch({ - type: EventTypes.HERITRIX_STATUS_UPDATE, - status: true - }) - }, - error: function (err) { - ServiceDispatcher.dispatch({ - type: EventTypes.HERITRIX_STATUS_UPDATE, - status: false, - error: err.message, - }) - if (startOnDown) { - launchHeritrix() - } - } - }) -} - -function * sequentialActions (actions, jobId) { - let index = 0 - let options = _.cloneDeep(settings.get('heritrix.sendActionOptions')) - options.url = `${options.url}${jobId}` - while (index < actions.length) { - options.form.action = actions[ index++ ] - yield options - } -} - -export function launchHeritrix (cb) { - let wasError = false - if (process.platform === 'win32') { - let heritrixPath = settings.get('heritrix.path') - logger.info(util.format(logString, 'win32 launching heritrix')) - let opts = { - cwd: heritrixPath, - env: { - JAVA_HOME: settings.get('jdk'), - JRE_HOME: settings.get('jre'), - HERITRIX_HOME: heritrixPath, - }, - detached: true, - shell: false, - stdio: [ 'ignore', 'ignore', 'ignore' ] - } - let usrpwrd = `${settings.get('heritrix.username')}:${settings.get('heritrix.password')}` - try { - let heritrix = childProcess.spawn('bin\\heritrix.cmd', [ '-a', `${usrpwrd}` ], opts) - heritrix.unref() - } catch (err) { - wasError = true - logger.error(util.format(logStringError, 'win32 launch', err.stack)) - } - ServiceDispatcher.dispatch({ - type: EventTypes.HERITRIX_STATUS_UPDATE, - status: !wasError, - }) - - if (!wasError) { - if (cb) { - cb() - } - } - } else { - var hStart - if (os.platform() === 'darwin') { - hStart = settings.get('heritrixStartDarwin') - } else { - hStart = settings.get('heritrixStart') - } - childProcess.exec(hStart, (err, stdout, stderr) => { - console.log(hStart) - console.log(err, stdout, stderr) - if (err) { - let stack - wasError = true - if (Reflect.has(err, 'stack')) { - stack = `${stderr} ${err.stack}` - } else { - stack = `${stderr}` - } - logger.error(util.format(logStringError, `linux/osx launch ${stdout}`, stack)) - } - - ServiceDispatcher.dispatch({ - type: EventTypes.HERITRIX_STATUS_UPDATE, - status: !wasError, - }) - - if (!wasError) { - if (cb) { - cb() - } - } - }) - } -} - -export function killHeritrix (cb) { - let options = _.cloneDeep(settings.get('heritrix.killOptions')) - // options.agent = httpsAgent - - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.KILL_HERITRIX, - opts: options, - from: 'killHeritrix', - timeReceived: null, - success: function (response) { - console.log('this should never ever be reached', response) - if (cb) { - cb() - } - }, - error: function (err) { - console.log('herritrix kills itself and never replies', err) - if (cb) { - cb() - } - } - }) -} - -export function addJobDirectoryHeritrix (confPath) { - let options = _.cloneDeep(settings.get('heritrix.addJobDirectoryOptions')) - options.form.addPath = confPath - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.ADD_HERITRIX_JOB_DIRECTORY, - opts: options, - from: `addJobToHeritrix[${confPath}]`, - timeReceived: null, - success: function (response) { - console.log('success in addJobDirectoryHeritrix', response) - logger.info(util.format(logString, `'303 success in addJobDirectoryHeritrix ${confPath}`)) - }, - error: function (err) { - if (err.statusCode === 303) { - console.log('303 success in addJobDirectoryHeritrix', err) - logger.info(util.format(logString, `'303 success in addJobDirectoryHeritrix ${confPath}`)) - } else { - // POST failed... - console.log('addJobDirectoryHeritrix failed', err) - logger.error(util.format(logStringError, `addJobDirectoryHeritrix failed ${err.message}`, err.statusCode)) - } - } - }) -} - -export function makeHeritrixJobConf (urls, hops = 1, jobId) { - console.log('in makeHeritrixJobConf') - fs.readFileAsync(settings.get('heritrix.jobConf'), 'utf8') - .then(data => { - let doc = cheerio.load(data, { - xmlMode: true - }) - if (!jobId) { - jobId = new Date().getTime() - } - // console.log(doc.xml()) - let urlConf = doc('bean[id="longerOverrides"]').find('prop[key="seeds.textSource.value"]') - let urlText - if (Array.isArray(urls)) { - console.log('array') - urlText = `${os.EOL}${urls.join(os.EOL)}${os.EOL}` - } else { - urlText = `${os.EOL}${urls}${os.EOL}` - } - urlConf.text(urlText) - - // - let maxHops = doc('bean[class="org.archive.modules.deciderules.TooManyHopsDecideRule"]').find('property[name="maxHops"]') - maxHops.attr('value', `${hops}`) - // console.log(doc('bean[class="org.archive.modules.deciderules.TooManyHopsDecideRule"]').html()) - if (!isWindows) { - let warFolder = doc('bean[id="warcWriter"]').find('property[name="storePaths"]').find('list') - // warFolder.append(`${wc.Paths.warcs}`) - warFolder.append(`${settings.get('warcs')}${os.EOL}`) - } - // let confPath = `${wc.Paths.heritrixJob}/${jobId}` - let confPath = path.join(settings.get('heritrixJob'), `${jobId}`) - fs.ensureDir(confPath, er => { - if (er) { - logger.error(util.format(logStringError, `makeHeritrixJobConf ensureDir ${er.message}`, er.stack)) - } - fs.writeFile(path.join(confPath, 'crawler-beans.cxml'), doc.xml(), 'utf8', error => { - if (error) { - logger.error(util.format(logStringError, `makeHeritrixJobConf writeConf ${error.message}`, error.stack)) - console.log('done writting file with error', error) - } else { - console.log('done writting file') - addJobDirectoryHeritrix(confPath) - CrawlDispatcher.dispatch({ - type: EventTypes.BUILT_CRAWL_CONF, - id: jobId, - path: confPath, - urls: urls - }) - } - }) - }) - }) - .catch(error => { - logger.error(util.format(logStringError, `makeHeritrixJobConf readConf ${error.message}`, error.stack)) - }) -} - -export function rescanJobDir () { - console.log(settings.get('heritrix.reScanJobs')) - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.RESCAN_JOB_DIR, - from: 'rescanJobDir', - opts: settings.get('heritrix.reScanJobs'), - jId: 666, - timeReceived: null, - success: function (response) { - console.log('Yes we rescanned the job directory', response) - }, - error: function (err) { - console.log('There was an error in rescanning the job directory but who cares') - } - }) -} - -export function buildHeritrixJob (jobId) { - // `https://lorem:ipsum@localhost:8443/engine/job/${jobId}` - if (false) { // !ServiceStore.heritrixStatus()) { - launchHeritrix(() => { - buildHeritrixJob(jobId) - }) - } else { - console.log(jobId) - console.log('build heritrix job', util.inspect(settings.get('heritrix.buildOptions'), { - depth: null, - colors: true - })) - let options = _.cloneDeep(settings.get('heritrix.buildOptions')) - console.log('options url before setting', options.url) - options.url = `${options.url}${jobId}` - console.log(options) - console.log('options url before setting', options.url) - // options.agent = httpsAgent - console.log(`building heritrix job ${jobId}`) - console.log('Options after setting options.url', options.url) - logger.info(util.format(logString, `building heritrix job ${jobId} with options ${options}`)) - - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.BUILD_HERITIX_JOB, - opts: options, - from: `buildHeritrixJob[${jobId}]`, - jId: jobId, - timeReceived: null, - success: function (response) { - console.log('sucess in building job', response) - CrawlDispatcher.dispatch({ - type: EventTypes.BUILT_CRAWL_JOB, - id: jobId - }) - }, - error: function (err) { - if (err.statusCode === 303) { - console.log('303 success in building job', err) - CrawlDispatcher.dispatch({ - type: EventTypes.BUILT_CRAWL_JOB, - id: jobId - }) - } else { - // POST failed... - console.log('failur in building job', err) - logger.error(util.format(logStringError, `building hereitrix job ${err.message} the uri ${options.url}`, err.stack)) - } - } - }) - } -} - -export function launchHeritrixJob (jobId) { - // options.agent = httpsAgent - if (false) { - // !ServiceStore.heritrixStatus()) { - launchHeritrix(() => { - launchHeritrixJob(jobId) - }) - } else { - let options = _.cloneDeep(settings.get('heritrix.launchJobOptions')) - console.log('options url before setting', options.url) - console.log('the jobid', jobId) - options.url = `${options.url}${jobId}` - console.log(`launching heritrix job ${jobId}`) - console.log('Options after setting options.url', options.url) - - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.LAUNCH_HERITRIX_JOB, - opts: options, - from: `launchHeritrixJob[${jobId}]`, - jId: jobId, - timeReceived: null, - success: function (response) { - // POST succeeded... - console.log('sucess in launching job', response) - CrawlDispatcher.dispatch({ - type: EventTypes.LAUNCHED_CRAWL_JOB, - id: jobId - }) - }, - error: function (err) { - if (err.statusCode === 303) { - console.log('303 success in launch job', err) - CrawlDispatcher.dispatch({ - type: EventTypes.LAUNCHED_CRAWL_JOB, - id: jobId - }) - } else { - // POST failed... - console.log('failur in launching job', err) - logger.error(util.format(logStringError, `launching hereitrix job ${err.message} the uri ${options.url}`, err.stack)) - } - } - }) - } -} - -export function teardownJob (jobId) { - let teardown = _.cloneDeep(settings.get('heritrix.sendActionOptions')) - teardown.url = `${teardown.url}${jobId}` - teardown.form.action = 'teardown' - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.FORCE_CRAWL_FINISH, - opts: teardown, - from: `tearDownJob[${jobId}]`, - jId: jobId, - timeReceived: null, - success: function (response) { - // POST succeeded... - console.log(`teardownJob post succeeded for ${jobId}`, response) - }, - error: function (err) { - logger.error(util.format(logStringError, `teardownJob for ${jobId} to heritrix ${err.message}`, err.stack)) - console.log(`teardownJob post failed? in sendAction to heritrix for ${jobId}`, err) - } - }) -} - -export function forceCrawlFinish (jobId, cb) { - if (!ServiceStore.heritrixStatus()) { - if (cb) { - cb() - } - return - } - - let terminate = _.cloneDeep(settings.get('heritrix.sendActionOptions')) - terminate.url = `${terminate.url}${jobId}` - terminate.form.action = 'terminate' - - let teardown = _.cloneDeep(settings.get('heritrix.sendActionOptions')) - teardown.url = `${teardown.url}${jobId}` - teardown.form.action = 'teardown' - - // optimization and call stack reasons - // sendActionToHeritrix(sequentialActions([ 'terminate', 'teardown' ], jobId), jobId, cb) - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.FORCE_CRAWL_FINISH, - opts: [ terminate, teardown ], - from: `forceCrawlFinish[${jobId}]`, - jId: jobId, - callback: cb, - timeReceived: null, - success: function (response) { - // POST succeeded... - console.log(`forceCrawlFinish action post succeeded in sendAction to heritrix for ${jobId}`, response) - if (cb) { - cb() - } - }, - error: function (err) { - logger.error(util.format(logStringError, `sendAction for ${jobId} to heritrix ${err.message}`, err.stack)) - console.log(`forceCrawlFinish action post failed? in sendAction to heritrix for ${jobId}`, err) - if (cb) { - cb() - } - } - }) -} - -export function restartJob (jobId) { - buildHeritrixJob(jobId) -} - -export function deleteHeritrixJob (jobId, cb) { - forceCrawlFinish(jobId, cb) -} - -export function sendActionToHeritrix (act, jobId, cb) { - if (!ServiceStore.heritrixStatus()) { - if (cb) { - cb() - } - return - } - - let options - - let isActionGenerator = act instanceof sequentialActions - // let notDone = false - - if (isActionGenerator) { - console.log('We have a actionGenerator') - options = [] - for (let actionOpt of act) { - console.log('Action from that generator', actionOpt.form.action) - options.push(actionOpt) - } - // let nextAction = act.next() - // console.log('We have a actionGenerator', nextAction) - // notDone = !nextAction.done - // if (nextAction.done) { - // if (cb) { - // cb() - // } - // return - // } - - // options = nextAction.value - // console.log(options) - } else { - options = _.cloneDeep(settings.get('heritrix.sendActionOptions')) - options.url = `${options.url}${jobId}` - options.form.action = act - } - // options.agent = httpsAgent - - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_HERITRIX, - rType: RequestTypes.SEND_HERITRIX_ACTION, - opts: options, - from: `sendActionToHeritrix[${jobId}]`, - jId: jobId, - callback: cb, - timeReceived: null, - success: function (response) { - // POST succeeded... - if (isActionGenerator) { - console.log(`sequential action post succeeded in sendAction to heritrix for ${jobId}`, response) - } else { - console.log(`post succeeded in sendAction to heritrix for ${jobId}`, response) - } - }, - error: function (err) { - logger.error(util.format(logStringError, `sendAction for ${jobId} to heritrix ${err.message}`, err.stack)) - if (isActionGenerator) { - console.log(`sequential action post failed? in sendAction to heritrix for ${jobId}`, err) - } else { - console.log(`sequential action post failed? in sendAction to heritrix for ${jobId}`, err) - } - } - }) -} - -function sortJobs (j1, j2) { - if (j1.timestamp.isBefore(j2.timestamp)) { - return 1 - } - - if (j1.timestamp.isAfter(j2.timestamp)) { - return -1 - } - - return 0 -} - -function extractUrlsFromConf (confText) { - let doc = cheerio.load(confText, { - xmlMode: true - }) - let urlElemText = S(doc('bean[id="longerOverrides"]').find('prop[key="seeds.textSource.value"]').text().trim()) - let maybeMultiple = urlElemText.lines() - if (maybeMultiple.length > 1) { - return maybeMultiple - } else { - return maybeMultiple[ 0 ] - } -} - -export function getHeritrixJobsState () { - console.log('Get heritrix Job State') - return new Promise((resolve, reject) => { - let jobLaunch = named.named(jobLaunchRe) - let job = named.named(jobRe) - let jobStatus = named.named(jobStatusRe) - let jobs = {} - let counter = 0 - let jobsConfs = {} - let heritrixJobP = settings.get('heritrixJob') - let onlyJobLaunchsProgress = through2.obj(function (item, enc, next) { - let didMath = jobLaunch.exec(item.path) - if (didMath) { - console.log('Only job launch did match') - jobs[ didMath.capture('job') ].log = true - jobs[ didMath.capture('job') ].launch = didMath.capture('launch') - jobs[ didMath.capture('job') ].logPath = path.normalize(item.path) - this.push(jobs[ didMath.capture('job') ]) - } else { - if (item.stats.isDirectory()) { - let jid = job.exec(item.path) - - if (jid) { - let crawlerBeanP = `${heritrixJobP}/${jid.capture('job')}/crawler-beans.cxml` - console.log('is a directory we have a jobid') - counter += 1 - var cBeanT = 'This file is missing from the job when we tried to access it. This is an auto generated warning message' - var urls - let noConfReadError = true - try { - cBeanT = fs.readFileSync(crawlerBeanP, 'utf8') - } catch (error) { - noConfReadError = false - console.error(error) - } - jobsConfs[ jid.capture('job') ] = cBeanT - if (noConfReadError) { - urls = extractUrlsFromConf(cBeanT) - } else { - urls = 'error reading conf' - } - jobs[ jid.capture('job') ] = { - log: false, - jobId: jid.capture('job'), - launch: '', - path: path.normalize(`${heritrixJobP}/${jid.capture('job')}`), - logPath: ' ', - urls, - runs: [], - } - } - } - } - next() - }) - - let launchStats = through2.obj(function (item, enc, next) { - fs.readFile(item.logPath, 'utf8', (err, data) => { - if (err) throw err - let lines = S(data).lines() - let linesLen = lines.length - 1 - let lastLine = S(lines[ linesLen ]) - if (lastLine.isEmpty()) { - linesLen = linesLen - 1 - lastLine.setValue(lines[ linesLen ]) - } - if (jobEnd.test(lastLine.s)) { - let nextToLast = S(lines[ linesLen - 1 ]) - if (nextToLast.isEmpty() || jobEnd.test(nextToLast.s)) { - nextToLast.setValue(lines[ linesLen - 2 ]) - } - let nextLastfields = nextToLast.collapseWhitespace().s.split(' ') - jobs[ item.jobId ].runs.push({ - ended: true, - timestamp: moment(nextLastfields[ 0 ]), - discovered: nextLastfields[ 1 ], - queued: nextLastfields[ 2 ], - downloaded: nextLastfields[ 3 ], - }) - } else { - let fields = lastLine.collapseWhitespace().s.split(' ') - jobs[ item.jobId ].runs.push({ - ended: false, - timestamp: moment(fields[ 0 ]), - discovered: fields[ 1 ], - queued: fields[ 2 ], - downloaded: fields[ 3 ], - }) - } - }) - this.push(item) - next() - }) - - fs.ensureDir(heritrixJobP, err => { - if (err) { - logger.error(util.format(logStringError, `ensuring ${heritrixJobP} ${err.message}`, err)) - reject(err) - } else { - fs.walk(heritrixJobP) - .pipe(onlyJobLaunchsProgress) - .pipe(launchStats) - .on('data', item => {}) - .on('end', function () { - if (counter > 0) { - let sortedJobs = _.chain(jobs) - .toPairs() - .map(job => { - job[ 1 ].runs.sort(sortJobs) - if (job[ 1 ].runs.length > 1) { - job[ 1 ].runs = job[ 1 ].runs.slice(0, 1) - } - return job[ 1 ] - }) - .value() - resolve({ count: counter, confs: jobsConfs, jobs: sortedJobs, }) - } else { - resolve({ error: 'count zero', count: 0, stack: 'ere' }) - } - }) - .on('error', function (error, item) { - logger.error(util.format(logStringError, `walking ${heritrixJobP} on item: ${item.path}, ${error.message}`, error.stack)) - console.log(error.message) - console.log(item.path) // the file the error occurred on - reject(error) - }) - } - }) - }) -} diff --git a/src/actions/wayback-actions.js b/src/actions/wayback-actions.js deleted file mode 100755 index 56cb7e4e..00000000 --- a/src/actions/wayback-actions.js +++ /dev/null @@ -1,180 +0,0 @@ -import childProcess from 'child_process' -import fs from 'fs-extra' -import os from 'os' -import path from 'path' -import wc from '../constants/wail-constants' -import ServiceDispatcher from '../dispatchers/service-dispatcher' -import RequestDispatcher from '../dispatchers/requestDispatcher' -import cheerio from 'cheerio' -import { remote } from 'electron' -import util from 'util' - -const settings = remote.getGlobal('settings') -const logger = remote.getGlobal('logger') -// const logString = 'wayback-actions %s' -const logStringError = 'wayback-actions error where[ %s ] stack [ %s ]' - -const EventTypes = wc.EventTypes -const RequestTypes = wc.RequestTypes - -export function writeWaybackConf () { - let wayBackConflines = [ - 'wayback.url.scheme.default=http', - 'wayback.url.host.default=localhost', - `wayback.url.port.default=${settings.get('wayback.port')}`, - "wayback.basedir=#{ systemEnvironment['WAYBACK_BASEDIR'] ?: '${wayback.basedir.default}' }", - "wayback.url.scheme=#{ systemEnvironment['WAYBACK_URL_SCHEME'] ?: '${wayback.url.scheme.default}' }", - "wayback.url.host=#{ systemEnvironment['WAYBACK_URL_HOST'] ?: '${wayback.url.host.default}' }", - "wayback.url.port=#{ systemEnvironment['WAYBACK_URL_PORT'] ?: '${wayback.url.port.default}' }", - 'wayback.url.prefix.default=${wayback.url.scheme}://${wayback.url.host}:${wayback.url.port}', - "wayback.url.prefix=#{ systemEnvironment['WAYBACK_URL_PREFIX'] ?: '${wayback.url.prefix.default}' }", - 'wayback.archivedir.1=${wayback.basedir}/files1/', - 'wayback.archivedir.2=${wayback.basedir}/files2/', - ] - let wbConfPath = settings.get('wayBackConf') - let base = settings.get('base') - fs.readFile(wbConfPath, 'utf8', (err, val) => { - if (err) { - console.error(err) - logger.error(util.format(logStringError, `reading WBConf ${err.message}`, err.stack)) - } - /* - 'wail.basedir=/Applications/WAIL.app', - 'wayback.basedir.default=/Applications/WAIL.app/bundledApps/tomcat/webapps/ROOT', - */ - let $ = cheerio.load(val, { xmlMode: true }) - - let config = $('bean[class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"]').find('value') - wayBackConflines.unshift(`wail.basedir=${base}`) - wayBackConflines.unshift(`wayback.basedir.default=${path.normalize(path.join(base, 'bundledApps/tomcat/webapps/ROOT'))}`) - config.text(`${os.EOL}${wayBackConflines.join(os.EOL)}${os.EOL}`) - fs.writeFile(wbConfPath, $.xml(), err => { - if (err) { - console.error(err) - logger.error(util.format(logStringError, 'writting WBConf', err.stack)) - } - }) - }) -} - -export function waybackAccesible (startOnDown = false) { - console.log('checking wayback accessibility') - // let wburi = settings.get('wayback.uri_wayback') - RequestDispatcher.dispatch({ - type: EventTypes.REQUEST_WAYBACK, - rType: RequestTypes.ACCESSIBILITY, - opts: { - uri: settings.get('wayback.uri_wayback') - }, - from: 'waybackAccesible', - timeReceived: null, - startOnDown, - success: (response) => { - console.log('wayback is accessible') - ServiceDispatcher.dispatch({ - type: EventTypes.WAYBACK_STATUS_UPDATE, - status: true, - }) - }, - error: (err) => { - console.log('wayback err', err) - logger.error(util.format(logStringError, 'waybackAccessible', err.stack)) - ServiceDispatcher.dispatch({ - type: EventTypes.WAYBACK_STATUS_UPDATE, - status: false, - }) - if (startOnDown) { - startWayback() - } - } - }) -} - -export function startWayback (cb) { - if (process.platform === 'win32') { - let basePath = settings.get('bundledApps') - let opts = { - cwd: basePath, - detached: true, - shell: false, - stdio: [ 'ignore', 'ignore', 'ignore' ] - } - try { - let wayback = childProcess.spawn('wayback.bat', [ 'start' ], opts) - wayback.unref() - } catch (err) { - logger.error(util.format(logStringError, 'win32 launch wayback', err.stack)) - } - - if (cb) { - cb() - } - } else { - var wStart - if (process.platform === 'darwin') { - wStart = settings.get('tomcatStartDarwin') - } else { - wStart = settings.get('tomcatStart') - } - childProcess.exec(wStart, (err, stdout, stderr) => { - console.log(err, stdout, stderr) - if (err) { - let stack - if (Reflect.has(err, 'stack')) { - stack = `${stderr} ${err.stack}` - } else { - stack = `${stderr}` - } - logger.error(util.format(logStringError, `linux/osx launch wayback ${stdout}`, stack)) - } - if (cb) { - cb() - } - }) - } -} - -export function killWayback (cb) { - if (process.platform === 'win32') { - let basePath = settings.get('bundledApps') - let opts = { - cwd: basePath, - detached: true, - shell: false, - stdio: [ 'ignore', 'ignore', 'ignore' ] - } - try { - let wayback = childProcess.spawn('wayback.bat', [ 'stop' ], opts) - wayback.unref() - } catch (err) { - logger.error(util.format(logStringError, 'win32 kill wayback', err.stack)) - } - if (cb) { - cb() - } - } else { - var wStop - if (process.platform === 'darwin') { - wStop = settings.get('tomcatStopDarwin') - } else { - wStop = settings.get('tomcatStop') - } - childProcess.exec(wStop, (err, stdout, stderr) => { - console.log(stdout) - if (err) { - let stack - console.log(err, stderr) - if (Reflect.has(err, 'stack')) { - stack = `${stdout} ${err.stack}` - } else { - stack = `${stdout}` - } - logger.error(util.format(logStringError, `linux/osx kill heritrix ${stderr}`, stack)) - } - - if (cb) { - cb() - } - }) - } -} diff --git a/src/background/accessibility.js b/src/background/accessibility.js deleted file mode 100755 index 2134a13b..00000000 --- a/src/background/accessibility.js +++ /dev/null @@ -1,129 +0,0 @@ -import 'babel-polyfill' -import autobind from 'autobind-decorator' -import { ipcRenderer, remote } from 'electron' -import rp from 'request-promise' -import schedule from 'node-schedule' -import Logger from '../logger/logger' - -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' - -const settings = remote.getGlobal('settings') -const logger = new Logger({ path: remote.getGlobal('accessLogPath') }) -const logString = 'accessibilityMonitor ' - -const cache = { - accessibility: null -} - -class StatusMonitor { - constructor () { - this.job = null - this.started = false - this.statues = { - heritrix: false, - wayback: false - } - this.lastFinished = true - } - - /* - error codes returned by request library: - ECONNREFUSED: The connection was refused - ETIMEDOUT: - ETIMEDOUT: request timeout two cases - - if connect === true, then the target of the request took its sweet time to reply - - if connect === false, readtime out cause - */ - - @autobind - checkReachability (cb) { - if (!this.started) { - let rule = new schedule.RecurrenceRule() - rule.second = [ 0, 15, 30, 45 ] - this.started = true - this.job = schedule.scheduleJob(rule, () => { - if (this.lastFinished) { - this.lastFinished = false - console.log('checking heritrix accessibility') - rp(settings.get('heritrix.optionEngine')) - .then(response => { - this.statues.heritrix = true - }) - .catch(err => { - if (err.error.code === 'ECONNREFUSED') { - this.statues.heritrix = false - console.log('checking heritrix resulted in an error of connection refused', err.error.code, err.error.message) - } else { - console.log('checking heritrix resulted in an error other than connection refused', err.error.code, err.error.message) - } - console.log('heritrix error') - }) - .finally(() => { - console.log('checking wayback accessibility') - rp({ uri: settings.get('wayback.uri_wayback') }) - .then(success => { - this.statues.wayback = true - }) - .catch(err => { - if (err.error.code === 'ECONNREFUSED') { - this.statues.wayback = false - console.log('checking wayback resulted in an error of connection refused', err.error.code, err.error.message) - } else { - console.log('checking wayback resulted in an error other than connection refused', err.error.code, err.error.message) - } - }) - .finally(() => { - if (cache.accessibility) { - console.log('Accessibility cache is here ', cache) - let wasUpdate = false - if (this.statues.wayback !== cache.accessibility.get('wayback')) { - wasUpdate = true - } - if (this.statues.heritrix !== cache.accessibility.get('heritrix')) { - wasUpdate = true - } - if (wasUpdate) { - logger.info(`${logString} there was an update to service statuses: heritrix[${this.statues.heritrix}] wayback[${this.statues.wayback}]`) - cache.accessibility.set('wayback', this.statues.wayback) - cache.accessibility.set('heritrix', this.statues.heritrix) - console.log('there was an update to service statuses', cache, this.statues) - cb(this.statues) - } else { - console.log('no update to service statuses', cache, this.statues) - logger.info(`${logString} no update to service statuses: heritrix[${this.statues.heritrix}] wayback[${this.statues.wayback}]`) - } - } else { - console.log('Cache has not been created making it') - logger.info(`${logString} cache has not been created making it: heritrix[${this.statues.heritrix}] wayback[${this.statues.wayback}]`) - cache.accessibility = new Map() - cache.accessibility.set('wayback', this.statues.wayback) - cache.accessibility.set('heritrix', this.statues.heritrix) - cb(this.statues) - } - console.log('Done with status checks ', this.statues) - this.lastFinished = true - }) - }) - } - }) - } - } -} - -let Status = new StatusMonitor() - -ipcRenderer.on('start-service-monitoring', (event) => { - console.log('Monitor got start-service-monitoring') - ipcRenderer.send('got-it', { from: 'accessibility', yes: true }) - Status.checkReachability((statues) => { - ipcRenderer.send('service-status-update', statues) - }) -}) - -ipcRenderer.on('stop', (event) => { - console.log('Monitor got stop indexing monitoring') - logger.cleanUp() - Status.job.cancel() - Status.job = null - Status = null -}) diff --git a/src/background/indexer.js b/src/background/indexer.js deleted file mode 100755 index dad73df3..00000000 --- a/src/background/indexer.js +++ /dev/null @@ -1,237 +0,0 @@ -import 'babel-polyfill' -import autobind from 'autobind-decorator' -import { ipcRenderer, remote } from 'electron' -import childProcess from 'child_process' -import os from 'os' -import path from 'path' -import through2 from 'through2' -import S from 'string' -import fs from 'fs-extra' -import del from 'del' -import streamSort from 'sort-stream2' -import bytewise from 'bytewise' -import schedule from 'node-schedule' -import util from 'util' -import Logger from '../logger/logger' -require('pretty-error').start() - -const settings = remote.getGlobal('settings') -const logger = new Logger({ path: remote.getGlobal('indexLogPath') }) -const logString = 'indexer %s' -const logStringError = 'indexer error where[ %s ] stack [ %s ]' - -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' -let prevIndexingDone = true - -function generatePathIndex (genCdx) { - let index = [] - let count = 0 - let onlyWarf = through2.obj(function (item, enc, next) { - if (!item.stats.isDirectory() && path.extname(item.path) === '.warc') { - this.push(item) - count++ - } - next() - }) - fs.walk(settings.get('warcs')) - .on('error', (err) => onlyWarf.emit('error', err)) // forward the error on - .pipe(onlyWarf) - .on('data', item => { - index.push(`${path.basename(item.path)}\t${item.path}`) - }) - .on('end', () => { - if (count > 0) { - console.log('The count was greater than zero') - fs.writeFile(settings.get('index'), index.join(os.EOL), 'utf8', err => { - console.log('Releasing pindex writelock') - if (err) { - console.error('generating path index with error', err) - logger.error(util.format(logStringError, 'generate path index on end', err.stack)) - prevIndexingDone = true - } else { - console.log('done generating path index no error') - logger.info(util.format(logString, 'done generating path index no error')) - genCdx() - } - }) - } else { - console.log('There were no warcs to index') - logger.info(util.format(logString, 'There were no warcs to index')) - prevIndexingDone = true - } - }) - .on('error', err => { - if (Reflect.has(err, 'stack')) { - logger.error(util.format(logStringError, 'generateIndexPath on error', err.stack)) - } else { - logger.error(util.format(logStringError, 'generateIndexPath on error', `${err.message} ${err.fileName} ${err.lineNumber} `)) - } - console.error('generating path index with error', err) - prevIndexingDone = true - }) -} - -// implements bytewise sorting of export LC_ALL=C; sort -function unixSort (a, b) { - return bytewise.compare(bytewise.encode(a), bytewise.encode(b)) -} - -function generateCDX () { - let replace = /.warc+$/g - let cdxHeaderIncluded = false - - let onlyWorf = through2.obj(function (item, enc, next) { - if (!item.stats.isDirectory() && path.extname(item.path) === '.warc') { - this.push(item) - } - next() - }) - - let cdxp = settings.get('cdx') - let cdxIndexer = settings.get('cdxIndexer') - - let worfToCdx = through2.obj(function (item, enc, next) { - let through = this // hope this ensures that this is through2.obj - let cdx = path.basename(item.path).replace(replace, '.cdx') - let cdxFile = `${cdxp}/${cdx}` - childProcess.exec(`${cdxIndexer} ${item.path} ${cdxFile}`, (err, stdout, stderr) => { - if (err) { - logger.error(util.format(logStringError, `generateCDX exec cdxinder ${stderr}`, err.stack)) - next() - } else { - fs.readFile(cdxFile, 'utf8', (errr, value) => { - if (errr) { - logger.error(util.format(logStringError, `generateCDX exec cdxinder read ${cdxFile}`, errr.stack)) - } else { - through.push(value) - } - next() - }) - } - }) - }) - - let uniqueLines = new Set() - - let cdxToLines = through2.obj(function (item, enc, next) { - let through = this - S(item).lines().forEach((line, index) => { - if (!uniqueLines.has(line)) { - if (index > 0) { - if (!S(line).isEmpty()) { - through.push(`${line.trim()}${os.EOL}`) - } - } else if (!cdxHeaderIncluded) { - through.push(`${line}${os.EOL}`) - cdxHeaderIncluded = true - } - uniqueLines.add(line) - } - }) - next() - }) - if (process.platform === 'win32') { - let writeStream = fs.createWriteStream(settings.get('indexCDX')) - fs.walk(settings.get('warcs')) - .on('error', (err) => onlyWorf.emit('error', err)) // forward the error on please.... - .pipe(onlyWorf) - .on('error', (err) => worfToCdx.emit('error', err)) // forward the error on please.... - .pipe(worfToCdx) - .pipe(cdxToLines) - .pipe(streamSort(unixSort)) - .pipe(writeStream) - .on('close', () => { - writeStream.destroy() - console.log('we have closed') - del([ settings.get('wayback.allCDX'), settings.get('wayback.notIndexCDX') ], { force: true }) - .then(paths => { - let deleted = `Deleted files and folders:\n${paths.join('\n')}` - console.log(deleted) - logger.info(util.format(logString, deleted)) - prevIndexingDone = true - }) - }) - .on('error', err => { - logger.error(util.format(logStringError, 'generateCDX on error', err.stack)) - prevIndexingDone = true - }) - } else { - let writeStream = fs.createWriteStream(settings.get('cdxTemp')) - fs.walk(settings.get('warcs')) - .on('error', (err) => onlyWorf.emit('error', err)) // forward the error on please.... - .pipe(onlyWorf) - .on('error', (err) => worfToCdx.emit('error', err)) // forward the error on please.... - .pipe(worfToCdx) - .pipe(cdxToLines) - .pipe(writeStream) - .on('close', () => { - writeStream.destroy() - console.log('we have closed') - childProcess.exec(`export LC_ALL=C; sort -u ${settings.get('cdxTemp')} > ${settings.get('indexCDX')}`, - (error, stdout, stderr) => { - if (error) { - logger.error(util.format(logStringError, `nix sorting cdx temp ${error}`)) - } - del([ settings.get('wayback.allCDX'), settings.get('wayback.notIndexCDX') ], { force: true }) - .then(paths => { - let deleted = `Deleted files and folders:\n${paths.join('\n')}` - console.log(deleted) - fs.remove(settings.get('cdxTemp'), (maybeError) => { - if (maybeError) { - logger.error(util.format(logStringError, `nix sorting cdx temp ${maybeError}`)) - } - logger.info(util.format(logString, deleted)) - prevIndexingDone = true - }) - }) - }) - }) - .on('error', err => { - logger.error(util.format(logStringError, 'generateCDX on error', err.stack)) - prevIndexingDone = true - }) - } - -} - -class Indexer { - constructor () { - this.job = null - this.started = false - } - - @autobind - indexer () { - if (!this.started) { - let rule = new schedule.RecurrenceRule() - // this process can take more than 10 seconds - // so check 3x a minute - rule.second = [ 10, 30, 50 ] - this.job = schedule.scheduleJob(rule, () => { - if (prevIndexingDone) { - prevIndexingDone = false - generatePathIndex(generateCDX) - } - }) - this.started = true - } - } -} - -let indexer = new Indexer() - -ipcRenderer.on('start-index-indexing', (event) => { - console.log('Monitor get start indexing monitoring') - logger.info(util.format(logString, 'got start indexing monitoring')) - ipcRenderer.send('got-it', { from: 'indexer', yes: true }) - indexer.indexer() -}) - -ipcRenderer.on('stop', (event) => { - console.log('Monitor get stop indexing monitoring') - logger.info(util.format(logString, 'got stop indexing monitoring')) - logger.cleanUp() - indexer.job.cancel() - indexer.job = null - indexer = null -}) diff --git a/src/background/requestDaemon.html b/src/background/requestDaemon.html deleted file mode 100644 index d99381c7..00000000 --- a/src/background/requestDaemon.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Request Daemon - - - -

    Request Daemon

    - - \ No newline at end of file diff --git a/src/background/requestDaemon.js b/src/background/requestDaemon.js deleted file mode 100644 index 046a4ff2..00000000 --- a/src/background/requestDaemon.js +++ /dev/null @@ -1,124 +0,0 @@ -import 'babel-polyfill' -import autobind from 'autobind-decorator' -import { ipcRenderer, remote } from 'electron' -import rp from 'request-promise' -import _ from 'lodash' -import util from 'util' -import Logger from '../logger/logger' - -require('request-debug')(rp) - -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' - -const logger = new Logger({ path: remote.getGlobal('requestDaemonLogPath') }) -const logString = 'requestDaemon %s' -const logStringError = 'requestDaemon error where [ %s ] stack [ %s ]' - -process.on('uncaughtException', (err) => { - console.log(`uncaughtException: ${err}`, err, err.stack) - logger.error('error', util.format(logStringError, `uncaughtException ${err.message}`, err.stack)) -}) - -/* - error codes returned by request library: - ECONNREFUSED: The connection was refused - ETIMEDOUT: - ETIMEDOUT: request timeout two cases - - if connect === true, then the target of the request took its sweet time to reply - - if connect === false, readtime out cause - */ - -class RequestDaemon { - constructor () { - this.requestQ = [] - this.working = false - } - - @autobind - queueRequest (request) { - console.log(`RequestDaemon got an incoming request[${request.id},${request.from}]`, request) - logger.info(util.format(logString, `got an incoming request[${request.id},${request.from}]`)) - if (Array.isArray(request.opts)) { - request.opts.forEach(options => { - let newR = _.cloneDeep(request) - newR.opts = options - this.requestQ.push(newR) - }) - } else { - this.requestQ.push(request) - } - if (!this.working) { - console.log('RequestDaemon we are not working but we are now') - this.working = true - this.handleRequest() - } else { - console.log('RequestDaemon we are currently working and will continue to do so') - } - } - - @autobind - maybeMore () { - console.log('Do we have more requests to process?') - if (this.requestQ.length > 0) { - console.log('Yes we do handling them') - logger.info(util.format(logString, 'has more requests, handling them')) - this.handleRequest() - } else { - console.log('No we do not. Waiting for more') - logger.info(util.format(logString, 'has not more requests waiting for more')) - this.working = false - } - } - - @autobind - handleRequest () { - let request = this.requestQ.shift() - console.log(`Handling a request[${request.id},${request.from}]`, request) - logger.info(util.format(logString, `handling a request[${request.id},${request.from}]`)) - let message = `handled request[${request.id},${request.from}]` - rp(request.opts) - .then(response => { - console.log('The request got a response', response) - logger.info(util.format(logString, `request[${request.id},${request.from}] got a successful response`)) - request.response = response - request.wasError = false - ipcRenderer.send('handled-request', request) - this.maybeMore() - }) - .catch(error => { - if (error.error.code === 'ETIMEDOUT' && !request.hadToRetry) { - request.hadToRetry = true - console.log('The request got an error of timeout retrying once') - logger.info(util.format(logString, `${message} and it resulted in an error of timeout retrying once`)) - this.requestQ.unshift(request) - } else { - if (error.error.code === 'ETIMEDOUT' && request.hadToRetry) { - request.timeOutTwice = true - logger.info(util.format(logString, `the request[${request.id},${request.from}] timeout twice not retrying`)) - } - console.log('The request got an error but its error callback will handle', error) - logger.info(util.format(logString, `${message} and it resulted in an error but its callback will handle ${error.message}`)) - request.response = error - request.wasError = true - ipcRenderer.send('handled-request', request) - } - this.maybeMore() - }) - } -} - -let requestDaemon = new RequestDaemon() - -ipcRenderer.on('handle-request', (event, request) => { - console.log('RequestDaemon got handle-request', request) - logger.info(util.format(logString, `got handle-request ${request.from}`)) - // ipcRenderer.send('requestdaemon-ack') - requestDaemon.queueRequest(request) -}) - -ipcRenderer.on('stop', (event) => { - console.log('RequestDaemon got stop') - logger.info(util.format(logString, 'got stop')) - requestDaemon = null - logger.cleanUp() -}) diff --git a/src/childWindows/newCrawl/crawlDepth.js b/src/childWindows/newCrawl/crawlDepth.js deleted file mode 100755 index 769e7958..00000000 --- a/src/childWindows/newCrawl/crawlDepth.js +++ /dev/null @@ -1,49 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import autobind from 'autobind-decorator' -import Snackbar from 'material-ui/Snackbar' -import TextField from 'material-ui/TextField' -import SelectField from 'material-ui/SelectField' -import MenuItem from 'material-ui/MenuItem' -import RaisedButton from 'material-ui/RaisedButton' -import { Row, Column } from 'react-cellblock' -import styles from '../../componets/styles/styles' -import CrawlUrlsDispatcher from './crawlUrlsDispatcher' -import wailConstants from '../../constants/wail-constants' - -const EventTypes = wailConstants.EventTypes -const items = []; -for (let i = 1; i <= 10; i++) { - items.push() -} - -export default class CrawlDepth extends Component { - constructor (props, context) { - super(props, context) - this.state = { - value: 1 - } - } - - @autobind - handleChange (event, index, value) { - this.setState({ value }) - CrawlUrlsDispatcher.dispatch({ - type: EventTypes.NEW_CRAWL_ADD_DEPTH, - depth: parseInt(value) - }) - } - - render () { - return ( - - ) - } -} diff --git a/src/childWindows/newCrawl/crawlUrlList.js b/src/childWindows/newCrawl/crawlUrlList.js deleted file mode 100644 index 0f7e6c77..00000000 --- a/src/childWindows/newCrawl/crawlUrlList.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { Component } from 'react' -import autobind from 'autobind-decorator' -import { List, ListItem } from 'material-ui/List' -import styles from '../../componets/styles/styles' -import CrawlUrlsStore from './crawlUrlsStore' - -export default class UrlList extends Component { - - constructor (props, context) { - super(props, context) - this.state = { - urls: [ ] - } - } - - componentWillMount () { - CrawlUrlsStore.on('urlUpdate', this.getUrls) - CrawlUrlsStore.on('urlEdit', this.getUrls) - } - - componentWillUnmount () { - CrawlUrlsStore.removeListener('urlUpdate', this.getUrls) - CrawlUrlsStore.removeListener('urlEdit', this.getUrls) - } - - @autobind - getUrls () { - let it = CrawlUrlsStore.getCrawlUrlItems() - // console.log('UrlList getUrls',it) - this.setState({ urls: it }) - } - - render () { - return ( - - ) - } -} diff --git a/src/childWindows/newCrawl/crawlUrlsDispatcher.js b/src/childWindows/newCrawl/crawlUrlsDispatcher.js deleted file mode 100644 index 5c3d4a04..00000000 --- a/src/childWindows/newCrawl/crawlUrlsDispatcher.js +++ /dev/null @@ -1,7 +0,0 @@ -import { Dispatcher } from 'flux' - -// use of a variable here allows us to attach our dispatchers to the window -// if desired -const UrlSeedDispatcher = new Dispatcher() - -export default UrlSeedDispatcher diff --git a/src/childWindows/newCrawl/footer.js b/src/childWindows/newCrawl/footer.js deleted file mode 100644 index cdc626a1..00000000 --- a/src/childWindows/newCrawl/footer.js +++ /dev/null @@ -1,50 +0,0 @@ -import React, { Component } from 'react' -import RaisedButton from 'material-ui/RaisedButton' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import ToolTip from 'material-ui/internal/Tooltip' -import { ipcRenderer } from 'electron' -import autobind from 'autobind-decorator' -import CrawlUrlsStore from './crawlUrlsStore' - -export default class Footer extends Component { - - constructor (props, context) { - super(props, context) - this.state = { - cancelHover: false, - - } - } - - @autobind - handleClose () { - ipcRenderer.send('close-newCrawl-window') - } - - @autobind - crawlConfigured () { - let config = CrawlUrlsStore.getCrawlConfig() - if (config) { - ipcRenderer.send('close-newCrawl-window-configured', config) - } - } - - render () { - return ( - - - - - - - - - ) - } -} diff --git a/src/childWindows/newCrawl/header.js b/src/childWindows/newCrawl/header.js deleted file mode 100644 index f3399eb7..00000000 --- a/src/childWindows/newCrawl/header.js +++ /dev/null @@ -1,16 +0,0 @@ -import React, { Component } from 'react' -import AppBar from 'material-ui/AppBar' -import styles from '../../componets/styles/styles' - -export default class Header extends Component { - render () { - return ( - - ) - } -} \ No newline at end of file diff --git a/src/childWindows/newCrawl/layout.js b/src/childWindows/newCrawl/layout.js deleted file mode 100644 index 3ad3e53d..00000000 --- a/src/childWindows/newCrawl/layout.js +++ /dev/null @@ -1,39 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme' -import getMuiTheme from 'material-ui/styles/getMuiTheme' -import Header from './header' -import Footer from './footer' -import styles from '../../componets/styles/styles' - -const baseTheme = getMuiTheme(lightBaseTheme) - -export default class Layout extends Component { - static propTypes = { - children: PropTypes.any.isRequired - } - static childContextTypes = { - muiTheme: PropTypes.object.isRequired - } - - constructor (props, context) { - super(props, context) - this.state = { muiTheme: baseTheme } - } - - getChildContext () { - return { muiTheme: this.state.muiTheme } - } - - render () { - return ( -
    -
    -
    - {this.props.children} -
    -
    -
    - ) - } -} - diff --git a/src/childWindows/newCrawl/newCrawlDialog.js b/src/childWindows/newCrawl/newCrawlDialog.js deleted file mode 100755 index c6c56595..00000000 --- a/src/childWindows/newCrawl/newCrawlDialog.js +++ /dev/null @@ -1,20 +0,0 @@ -import React, { Component } from 'react' -import styles from '../../componets/styles/styles' -import EnterCrawlUrls from './enterCrawlUrls' -import CrawlDepth from './crawlDepth' -import CrawlUrlList from './crawlUrlList' - -export default class NewCrawlDialog extends Component { - render () { - return ( -
    - -
    - -
    - -
    -
    - ) - } -} diff --git a/src/childWindows/settings/heritrixSettings.js b/src/childWindows/settings/heritrixSettings.js deleted file mode 100644 index 707167eb..00000000 --- a/src/childWindows/settings/heritrixSettings.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { ipcRenderer, remote } from 'electron' -import { ListItem } from 'material-ui/List' -import NumberPicker from './numberPicker' -import UserPasswordChanger from './userPasswordChanger' -import Avatar from 'material-ui/Avatar' - -export default class HeritrixSettings extends Component { - static propTypes = { - settings: PropTypes.object.isRequired - } - - render () { - return ( - } - primaryText="Heritrix" - primaryTogglesNestedList={true} - nestedItems={ - [ - , - - - ] - } - /> - ) - } -} diff --git a/src/childWindows/settings/settingsForm.js b/src/childWindows/settings/settingsForm.js deleted file mode 100644 index 8bb57e0a..00000000 --- a/src/childWindows/settings/settingsForm.js +++ /dev/null @@ -1,51 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme' -import getMuiTheme from 'material-ui/styles/getMuiTheme' -import { List } from 'material-ui/List' -import { remote } from 'electron' -import autobind from 'autobind-decorator' -import WailSettings from './wailSettings' -import WaybackSettings from './waybackSettings' -import HeritrixSettings from './heritrixSettings' - -const baseTheme = getMuiTheme(lightBaseTheme) -const settings = remote.getGlobal('settings') - -export default class SettingsForm extends Component { - static childContextTypes = { - muiTheme: PropTypes.object.isRequired, - } - - constructor (props, context) { - super(props, context) - this.state = { - muiTheme: baseTheme, - slideIndex: 0, - } - } - - @autobind - handleChange (value) { - this.setState({ - slideIndex: value, - }) - } - - getChildContext () { - return { muiTheme: this.state.muiTheme } - } - - render () { - return ( - - - - - - ) - } -} diff --git a/src/childWindows/settings/wailSettings.js b/src/childWindows/settings/wailSettings.js deleted file mode 100644 index 3d4fffd3..00000000 --- a/src/childWindows/settings/wailSettings.js +++ /dev/null @@ -1,40 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { ipcRenderer, remote } from 'electron' -import { ListItem } from 'material-ui/List' -import FSLocationChooser from './fsLocationChooser' -import FileChooser from './fileChooser' -import SettingHardReset from './settingHardReset' -import Avatar from 'material-ui/Avatar' - -export default class WailSettings extends Component { - static propTypes = { - settings: PropTypes.object.isRequired - } - - render () { - let count = 1 - let fromSettingsFile = [ 'cdx', 'warcs' ] - .map(it => ) - let otherSettings = [ { which: 'archives', alt: 'Memgator Archive List', useAlt: true } ] - .map(it => ) - - return ( - } - primaryText="WAIL" - primaryTogglesNestedList={true} - nestedItems={ - fromSettingsFile.concat(otherSettings).concat( - ) - } - /> - ) - } -} diff --git a/src/childWindows/settings/waybackSettings.js b/src/childWindows/settings/waybackSettings.js deleted file mode 100644 index 121a45c6..00000000 --- a/src/childWindows/settings/waybackSettings.js +++ /dev/null @@ -1,29 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { ipcRenderer, remote } from 'electron' -import { ListItem } from 'material-ui/List' -import NumberPicker from './numberPicker' -import Avatar from 'material-ui/Avatar' - -export default class WaybackSettings extends Component { - static propTypes = { - settings: PropTypes.object.isRequired - } - - render () { - return ( - } - primaryText="Wayback" - primaryTogglesNestedList={true} - nestedItems={ - [ - - ] - } - /> - ) - } -} diff --git a/src/componets/advanced/advancedTab.js b/src/componets/advanced/advancedTab.js deleted file mode 100755 index cd1b3f31..00000000 --- a/src/componets/advanced/advancedTab.js +++ /dev/null @@ -1,41 +0,0 @@ -import React, { Component } from 'react' -import autobind from 'autobind-decorator' -import { Tabs, Tab } from 'material-ui/Tabs' -import General from './general' -import WayBackTab from './wayback' -import HeritrixTab from './heritrix/heritrix-tab' -import Miscellaneous from './miscellaneous' - -export default class AdvancedTab extends Component { - constructor (props, context) { - super(props, context) - this.state = { key: 'general' } - } - - @autobind - handleSelect (selectedKey) { - this.setState({ key: selectedKey }) - } - - render () { - return ( - - - - - - - - - - - - - - - ) - } -} diff --git a/src/componets/advanced/general.js b/src/componets/advanced/general.js deleted file mode 100755 index 528bdfbc..00000000 --- a/src/componets/advanced/general.js +++ /dev/null @@ -1,138 +0,0 @@ -import React, { Component } from 'react' -import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table' -import autobind from 'autobind-decorator' -import RaisedButton from 'material-ui/RaisedButton' -import FixIcon from 'material-ui/svg-icons/action/build' -import KillIcon from 'material-ui/svg-icons/content/clear' -import { launchHeritrix, killHeritrix } from '../../actions/heritrix-actions' -import { startWayback, killWayback } from '../../actions/wayback-actions' -import ServiceStore from '../../stores/serviceStore' -import style from '../styles/styles' - -export default class General extends Component { - constructor (props, context) { - super(props, context) - this.state = { - wbGood: ServiceStore.waybackStatus(), - hGood: ServiceStore.heritrixStatus() - } - } - - componentWillMount () { - ServiceStore.on('heritrix-status-update', this.updateHeritrixStatus) - ServiceStore.on('wayback-status-update', this.updateWaybackStatus) - ServiceStore.on('monitor-status-update', this.servicesUpdated) - } - - componentWillUnmount () { - ServiceStore.removeListener('heritrix-status-update', this.updateHeritrixStatus) - ServiceStore.removeListener('wayback-status-update', this.updateWaybackStatus) - ServiceStore.removeListener('monitor-status-update', this.servicesUpdated) - } - - @autobind - servicesUpdated () { - let status = ServiceStore.serviceStatus - this.setState({ wbGood: status.wayback, hGood: status.heritrix }) - } - - @autobind - updateWaybackStatus () { - this.setState({ wbGood: ServiceStore.waybackStatus() }) - } - - @autobind - updateHeritrixStatus () { - this.setState({ hGood: ServiceStore.heritrixStatus() }) - } - - wayBackFix (event) { - // console.log('Wayback fix') - startWayback() - } - - wayBackKill (event) { - // console.log('Wayback Kill') - killWayback() - } - - heritrixFix (event) { - // console.log(' Generalv HeritrixTab fix') - launchHeritrix() - } - - heritrixKill (event) { - // console.log('General HeritrixTab Kill') - killHeritrix() - } - - render () { - const waybackStatus = this.state.wbGood ? 'Running' : 'X' - const heritrixStatus = this.state.hGood ? 'Running' : 'X' - return ( - - - - Service - State - Version - Actions - - - - - Wayback - {waybackStatus} - 2.3.1 - - } - /> - } - /> - - - - Heritrix - {heritrixStatus} - 3.3.0 - - } - /> - } - /> - - - -
    - ) - } -} diff --git a/src/componets/advanced/heritrix/heritrix-joblist.js b/src/componets/advanced/heritrix/heritrix-joblist.js deleted file mode 100755 index b583c6a4..00000000 --- a/src/componets/advanced/heritrix/heritrix-joblist.js +++ /dev/null @@ -1,141 +0,0 @@ -import React, { Component } from 'react' -import { List, ListItem } from 'material-ui/List' -import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table' -import Divider from 'material-ui/Divider' -import autobind from 'autobind-decorator' -import CrawlStore from '../.././../stores/crawlStore' -import HeritrixJobItem from './heritrixJobItem' -import styles from '../../styles/styles' - -const { - crawlUrlS, - statusS, - timestampS, - discoveredS, - queuedS, - downloadedS, - actionS -} = styles.heritrixTable - -export default class HeritrixJobList extends Component { - - constructor (props, context) { - super(props, context) - this.state = { - jobs: CrawlStore.jobs() - } - } - - @autobind - getJobs () { - // console.log('Get jobs crawlstore') - this.setState({ jobs: CrawlStore.jobs() }) - } - - componentWillMount () { - CrawlStore.on('jobs-updated', this.getJobs) - } - - componentWillUnmount () { - CrawlStore.removeListener('jobs-updated', this.getJobs) - } - - render () { - // console.log('rendering the joblist', this.state) - let { jobs } = this.state - let JobItems - if (jobs.length > 0) { - JobItems = jobs.map(job => ) - } else { - // JobItems = - JobItems = ( - - - No Jobs - - - To Display - - - 0 - - - 0 - - - 0 - - - 0 - - - No actions available - - - ) - } - return ( - - - - - Crawl Url(s) - - - Status - - - Timestamp - - - Discovered - - - Queued - - - Downloaded - - - Actions - - - - - {JobItems} - -
    - ) - } - - // render () { - // // console.log('rendering the joblist', this.state) - // let { jobs } = this.state - // let JobItems - // if (jobs.length > 0) { - // JobItems = [] - // let len = jobs.length - // let stopAddingDividers = len - 1 - // for (let i = 0; i < len; ++i) { - // let job = jobs[ i ] - // JobItems.push() - // if (i < stopAddingDividers) { - // JobItems.push() - // } - // } - // } else { - // JobItems = - // } - // return ( - // - // {JobItems} - // - // ) - // } -} diff --git a/src/componets/advanced/heritrix/heritrix-tab.js b/src/componets/advanced/heritrix/heritrix-tab.js deleted file mode 100755 index a2160dab..00000000 --- a/src/componets/advanced/heritrix/heritrix-tab.js +++ /dev/null @@ -1,73 +0,0 @@ -import React, { Component } from 'react' -import RaisedButton from 'material-ui/RaisedButton' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import { Grid, Row } from 'react-cellblock' -import autobind from 'autobind-decorator' -import OpenBrowserIcon from 'material-ui/svg-icons/action/open-in-browser' -import AddCrawlIcon from 'material-ui/svg-icons/content/add' -import JobScanIcon from 'material-ui/svg-icons/av/playlist-add-check' -import { ipcRenderer, remote, shell } from 'electron' -import HeritrixJobList from './heritrix-joblist' -import { rescanJobDir } from '../../../actions/heritrix-actions' -const styles = { - button: { - margin: 12 - } -} - -const settings = remote.getGlobal('settings') - -export default class HeritrixTab extends Component { - - @autobind - onClickNewCrawl (event) { - // console.log('New Crawl') - ipcRenderer.send('open-newCrawl-window') - } - - @autobind - onClickLaunchWebUI (event) { - shell.openExternal(settings.get('heritrix.web_ui')) - } - - render () { - return ( - - - - - - - - } - label='New Crawl' - labelPosition='before' - style={styles.button} - onMouseDown={this.onClickNewCrawl} - /> - - - } - label='Rescan Job Directory' - labelPosition='before' - style={styles.button} - onMouseDown={() => rescanJobDir()} - /> - - - } - label='Launch Web UI' - labelPosition='before' - style={styles.button} - onMouseDown={this.onClickLaunchWebUI} - /> - - - - - ) - } -} diff --git a/src/componets/advanced/heritrix/heritrixJobInfo.js b/src/componets/advanced/heritrix/heritrixJobInfo.js deleted file mode 100755 index 9a327d54..00000000 --- a/src/componets/advanced/heritrix/heritrixJobInfo.js +++ /dev/null @@ -1,54 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow } from 'material-ui/Table' - -import HeritrixJobInfoRow from './heritrixJobInfoRow' -import styles from '../../styles/styles' - -export default class HeritrixJobInfo extends Component { - static propTypes = { - jobId: PropTypes.string.isRequired, - runs: PropTypes.array.isRequired - } - - render () { - return ( - - - - - Job Id - - - Status - - - Timestamp - - - Discovered - - - Queued - - - Downloaded - - - - - - -
    - ) - } -} - diff --git a/src/componets/advanced/heritrix/heritrixJobInfoRow.js b/src/componets/advanced/heritrix/heritrixJobInfoRow.js deleted file mode 100755 index a11a42df..00000000 --- a/src/componets/advanced/heritrix/heritrixJobInfoRow.js +++ /dev/null @@ -1,117 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { TableRow, TableRowColumn } from 'material-ui/Table' -import moment from 'moment' -import { joinStrings } from 'joinable' -import styles from '../../styles/styles' - -const { - crawlUrlS, - statusS, - timestampS, - discoveredS, - queuedS, - downloadedS, - actionS -} = styles.heritrixTable - -const style = { - tableHeaderCol: { - paddingLeft: '12px', - paddingRight: '12px', - cursor: 'default' - }, - tableHeader: { - borderBottomStyle: 'none', - cursor: 'default' - }, - tableRowCol: { - paddingLeft: '5px', - paddingRight: '5px', - wordWrap: 'break-word', - textOverflow: 'none', - whiteSpace: 'normal', - cursor: 'default' - }, - trcTextCenter: { - paddingLeft: '5px', - paddingRight: '5px', - wordWrap: 'break-word', - textOverflow: 'none', - whiteSpace: 'normal', - textAlign: 'left', - cursor: 'default' - } - -} - -export default class HeritrixJobInfoRow extends Component { - static propTypes = { - urls: PropTypes.oneOfType([ PropTypes.string, PropTypes.array ]).isRequired, - jobId: PropTypes.string.isRequired, - runs: PropTypes.array.isRequired, - actionMenu: PropTypes.element.isRequired - } - - render () { - let runs = this.props.runs - var url - if (Array.isArray(this.props.urls)) { - url = joinStrings(...this.props.urls, { separator: ',' }) - } else { - url = this.props.urls - } - if (runs.length > 0) { - let job = runs[ 0 ] - let status = job.ended ? 'Ended' : 'Running' - let discovered = job.discovered || '' - let queued = job.queued || '' - let downloaded = job.downloaded || '' - // console.log('the job being displayed', job) - return ( - - - {url} - - - {status} - - - {moment(job.timestamp).format('MM/DD/YYYY h:mm:ssa')} - - - {discovered} - - - {queued} - - - {downloaded} - - - {this.props.actionMenu} - - - ) - } else { - return ( - - - {url} - - - Not Started - - - Not Started - - 0 - 0 - 0 - - {this.props.actionMenu} - - - ) - } - } -} diff --git a/src/componets/advanced/heritrix/heritrixJobItem.js b/src/componets/advanced/heritrix/heritrixJobItem.js deleted file mode 100755 index b71e72a7..00000000 --- a/src/componets/advanced/heritrix/heritrixJobItem.js +++ /dev/null @@ -1,175 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { shell, remote } from 'electron' -import { ListItem } from 'material-ui/List' -import { grey400 } from 'material-ui/styles/colors' -import IconButton from 'material-ui/IconButton' -import MoreVertIcon from 'material-ui/svg-icons/navigation/more-vert' -import IconMenu from 'material-ui/IconMenu' -import MenuItem from 'material-ui/MenuItem' -import Divider from 'material-ui/Divider' -import ArrowDropRight from 'material-ui/svg-icons/navigation-arrow-drop-right' -import fs from 'fs-extra' -import cp from 'child_process' -import path from 'path' -import autobind from 'autobind-decorator' -import wc from '../../../constants/wail-constants' -import CrawlStore from '../../../stores/crawlStore' -import CrawlDispatcher from '../../../dispatchers/crawl-dispatcher' -import { - forceCrawlFinish, - deleteHeritrixJob, - restartJob, - rescanJobDir -} from '../../../actions/heritrix-actions' -import HeritrixJobInfo from './heritrixJobInfo' -import HeritrixJobInfoRow from './heritrixJobInfoRow' - -const style = { - cursor: 'pointer' -} -const settings = remote.getGlobal('settings') - -export default class HeritrixJobItem extends Component { - - static propTypes = { - jobId: PropTypes.string.isRequired, - runs: PropTypes.array.isRequired, - path: PropTypes.string.isRequired, - urls: PropTypes.oneOfType([ PropTypes.string, PropTypes.array ]).isRequired, - } - - constructor (props, context) { - super(props, context) - this.state = { - runs: props.runs - } - } - - componentWillMount () { - CrawlStore.on(`${this.props.jobId}-updated`, this.updateRuns) - } - - componentWillUnmount () { - CrawlStore.removeListener(`${this.props.jobId}-updated`, this.updateRuns) - } - - @autobind - updateRuns () { - console.log('updating runs') - this.setState({ runs: CrawlStore.getRuns(this.props.jobId) }) - } - - @autobind - viewConf (event) { - shell.openItem(`${settings.get('heritrixJob')}/${this.props.jobId}/crawler-beans.cxml`) - } - - @autobind - start (event) { - // console.log('stat') - let runs = this.state.runs - if (runs.length > 0) { - if (runs[ 0 ].ended) { - restartJob(this.props.jobId) - } else { - forceCrawlFinish(this.props.jobId, () => restartJob(this.props.jobId)) - } - } else { - restartJob(this.props.jobId) - } - } - - @autobind - restart (event) { - let runs = this.state.runs - if (runs.length > 0) { - if (!runs[ 0 ].ended) { - forceCrawlFinish(this.props.jobId, () => restartJob(this.props.jobId)) - } else { - restartJob(this.props.jobId) - } - } else { - restartJob(this.props.jobId) - } - } - - @autobind - kill (event) { - forceCrawlFinish(this.props.jobId) - } - - @autobind - deleteJob (event) { - // console.log('Deleting Job') - let runs = this.state.runs - let jPath = `${settings.get('heritrixJob')}${path.sep}${this.props.jobId}` - let cb = () => { - if (process.platform === 'win32') { - cp.execFile(settings.get('winDeleteJob'), [ `${jPath}` ], (error, stdout, stderr) => { - if (error) { - // console.log(stderr) - // console.log(error) - } else { - rescanJobDir() - } - }) - } else { - fs.remove(jPath, error => { - if (error) return // console.error(error) - rescanJobDir() - }) - } - } - if (runs.length > 0) { - if (!runs[ 0 ].ended) { - // console.log('We have runs and the running one has not ended') - forceCrawlFinish(this.props.jobId, () => { - deleteHeritrixJob(this.props.jobId, cb) - }) - } else { - // console.log('We have runs and the run has ended') - deleteHeritrixJob(this.props.jobId, cb) - } - } else { - // console.log('We have no runs delete ok') - deleteHeritrixJob(this.props.jobId, cb) - } - - CrawlDispatcher.dispatch({ - type: wc.EventTypes.CRAWL_JOB_DELETED, - jobId: this.props.jobId - }) - } - - render () { - const actionIcon = ( - - - - ) - - const rightIconMenu = ( - - - - - - - - - ) - - return ( - - ) - } -} diff --git a/src/componets/advanced/miscellaneous.js b/src/componets/advanced/miscellaneous.js deleted file mode 100755 index 7e12eb77..00000000 --- a/src/componets/advanced/miscellaneous.js +++ /dev/null @@ -1,42 +0,0 @@ -import React, { Component } from 'react' -import RaisedButton from 'material-ui/RaisedButton' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import FolderOpen from 'material-ui/svg-icons/file/folder-open' -import CheckUpdateIcon from 'material-ui/svg-icons/action/open-in-browser' -import SettingIcon from 'material-ui/svg-icons/action/settings-applications' -import { shell, remote, ipcRenderer } from 'electron' - -const settings = remote.getGlobal('settings') - -export default class Misc extends Component { - render () { - return ( - - - } - label="Settings" - labelPosition="before" - onMouseDown={() => ipcRenderer.send('open-settings-window', "hi") } - /> - - - } - label="View Archives" - labelPosition="before" - onMouseDown={() => shell.openItem(settings.get('warcs'))} - /> - - - } - label="Check For Updates" - labelPosition="before" - onMouseDown={() => shell.openExternal('https://github.com/N0taN3rd/wail/releases')} - /> - - - ) - } -} diff --git a/src/componets/advanced/wayback.js b/src/componets/advanced/wayback.js deleted file mode 100755 index db2d4a8d..00000000 --- a/src/componets/advanced/wayback.js +++ /dev/null @@ -1,42 +0,0 @@ -import React, { Component } from 'react' -import { shell, remote } from 'electron' -import RaisedButton from 'material-ui/RaisedButton' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import EditIcon from 'material-ui/svg-icons/editor/mode-edit' -import OpenBrowserIcon from 'material-ui/svg-icons/action/open-in-browser' -import FolderOpen from 'material-ui/svg-icons/file/folder-open' - -const settings = remote.getGlobal('settings') - -export default class WayBackTab extends Component { - render () { - return ( - - - } - onMouseDown={() => shell.openExternal(settings.get('wayback.uri_wayback'))} - /> - - - } - label="View Archives" - labelPosition="before" - onMouseDown={() => shell.openItem(settings.get('warcs'))} - /> - - - } - onMouseDown={() => shell.openItem(settings.get('wayBackConf'))} - /> - - - ) - } -} diff --git a/src/componets/basic/MementoActionMenu.js b/src/componets/basic/MementoActionMenu.js deleted file mode 100644 index b17cff31..00000000 --- a/src/componets/basic/MementoActionMenu.js +++ /dev/null @@ -1,118 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { shell, remote } from 'electron' -import { grey400 } from 'material-ui/styles/colors' -import IconButton from 'material-ui/IconButton' -import MoreVertIcon from 'material-ui/svg-icons/navigation/more-vert' -import IconMenu from 'material-ui/IconMenu' -import MenuItem from 'material-ui/MenuItem' -import ViewArchiveIcon from 'material-ui/svg-icons/image/remove-red-eye' -import CheckArchiveStatIcon from 'material-ui/svg-icons/action/schedule' -import ArchiveNowIcon from 'material-ui/svg-icons/content/archive' -import ViewStatsIcon from 'material-ui/svg-icons/editor/show-chart' -import autobind from 'autobind-decorator' -import wailConstants from '../../constants/wail-constants' -import CrawlDispatcher from '../../dispatchers/crawl-dispatcher' -import UrlDispatcher from '../../dispatchers/url-dispatcher' - -const style = { - cursor: 'pointer' -} - -const From = wailConstants.From -const EventTypes = wailConstants.EventTypes -const settings = remote.getGlobal('settings') - -export default class MementoActionMenu extends Component { - - static propTypes = { - url: PropTypes.string.isRequired, - archiving: PropTypes.bool.isRequired - } - - constructor (props, context) { - super(props, context) - this.state = { - archiving: props.archiving - } - } - - componentWillMount () { - - } - - componentWillUnmount () { - - } - - @autobind - viewStats (event) { - console.log(`view stats ${this.props.url}`) - } - - @autobind - archiveNow (event) { - console.log(`archiving now ${this.props.url}`) - // CrawlDispatcher.dispatch({ - // type: EventTypes.BUILD_CRAWL_JOB, - // from: From.MEMENTO_MENU, - // url: this.props.url - // }) - } - - @autobind - checkArchivalStatus (event) { - console.log(`checking archival status ${this.props.url}`) - // UrlDispatcher.dispatch({ - // type: EventTypes.CHECK_URI_IN_ARCHIVE, - // url: this.props.url - // }) - } - - @autobind - viewArchive (event) { - console.log(`view archive ${this.props.url}`) - // UrlDispatcher.dispatch({ - // type: EventTypes.VIEW_ARCHIVED_URI, - // url: this.props.url - // }) - } - - render () { - const actionIcon = ( - - - - ) - - return ( - - } - primaryText='Archive Now' - /> - } - primaryText='Check Archived Status' - /> - } - primaryText='View Archive' - /> - - ) - } -} diff --git a/src/componets/basic/MementoTableItem.js b/src/componets/basic/MementoTableItem.js deleted file mode 100644 index e7cf7b28..00000000 --- a/src/componets/basic/MementoTableItem.js +++ /dev/null @@ -1,118 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import autobind from 'autobind-decorator' -import Avatar from 'material-ui/Avatar' -import { TableRow, TableRowColumn } from 'material-ui/Table' -import Checkbox from 'material-ui/Checkbox' -import MemgatorStore from '../../stores/memgatorStore' -import MementoActionMenu from './MementoActionMenu' -import styles from '../styles/styles' - -const { mementoTable } = styles.basicTab - -export function getNoMementos () { - return ( - - - No url entered - - - 0 - - - Not Started - - - No actions - - - ) -} - -export default class MementoTableItem extends Component { - static propTypes = { - url: PropTypes.string.isRequired, - count: PropTypes.number.isRequired, - timemap: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.object - ]).isRequired, - archivalStatus: PropTypes.string, - canFetchMemento: PropTypes.bool, - maybeArray: PropTypes.bool.isRequired, - jId: PropTypes.number - } - - static defaultProps = { - archivalStatus: 'Not Started', - canFetchMemento: true, - jId: -1 - } - - constructor (props, context) { - super(props, context) - this.state = { - count: this.props.count, - timemap: this.props.timemap, - jId: this.props.jId, - archivalStatus: this.props.archivalStatus - } - } - - componentWillMount () { - MemgatorStore.on(`${this.props.url}-count-gotten`, this.updateCount) - MemgatorStore.on(`${this.props.url}-archival-update`, this.updateArchival) - } - - componentWillUnmount () { - MemgatorStore.removeListener(`${this.props.url}-count-gotten`, this.updateCount) - MemgatorStore.removeListener(`${this.props.url}-archival-update`, this.updateArchival) - } - - @autobind - updateArchival (update) { - this.setState({ - archivalStatus: update - }) - } - - @autobind - updateCount (data) { - console.log(`updating memento list item ${this.props.url}`, data) - this.setState({ - count: data.count, - timemap: data.timemap - }) - } - - render () { - var countOrFetching - if (!this.props.maybeArray) { - if (this.state.count === -1 || this.state.count === -2) { - countOrFetching = ( - - ) - } else { - countOrFetching = this.state.count - } - } else { - countOrFetching = 'Not Available' - } - - return ( - - - {this.props.url} - - - {countOrFetching} - - - {this.state.archivalStatus} - - - - - - ) - } -} \ No newline at end of file diff --git a/src/componets/basic/archivalButtos.js b/src/componets/basic/archivalButtos.js deleted file mode 100644 index 565bb741..00000000 --- a/src/componets/basic/archivalButtos.js +++ /dev/null @@ -1,47 +0,0 @@ -import React, { Component } from 'react' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import RaisedButton from 'material-ui/RaisedButton' -import ViewArchiveIcon from 'material-ui/svg-icons/image/remove-red-eye' -import UrlDispatcher from '../../dispatchers/url-dispatcher' -import wailConstants from '../../constants/wail-constants' -import CrawlDispatcher from '../../dispatchers/crawl-dispatcher' -import ArchiveNowButton from 'material-ui/svg-icons/content/archive' - -const EventTypes = wailConstants.EventTypes -const From = wailConstants.From - -export default class ArchivalButtons extends Component { - - render () { - return ( - - - } - label='View In Wayback' - labelPosition='before' - onMouseDown={() => { - UrlDispatcher.dispatch({ - type: EventTypes.VIEW_ARCHIVED_URI - }) - }} - /> - - - } - label="Archive Via Heritrix!" - primary={true} - labelPosition='before' - onMouseDown={() => { - CrawlDispatcher.dispatch({ - type: EventTypes.BUILD_CRAWL_JOB, - from: From.BASIC_ARCHIVE_NOW - }) - }} - /> - - - ) - } -} diff --git a/src/componets/basic/archive-url.js b/src/componets/basic/archive-url.js deleted file mode 100755 index 0e01b80a..00000000 --- a/src/componets/basic/archive-url.js +++ /dev/null @@ -1,98 +0,0 @@ -import React, { Component } from 'react' -import TextField from 'material-ui/TextField' -import autobind from 'autobind-decorator' -import { Row, Column } from 'react-cellblock' -import RaisedButton from 'material-ui/RaisedButton' -import S from 'string' -import isURL from 'validator/lib/isURL' -import UrlStore from '../../stores/urlStore' -import * as aua from '../../actions/archive-url-actions' -import CrawlDispatcher from '../../dispatchers/crawl-dispatcher' -import ArchiveNowButton from 'material-ui/svg-icons/content/archive' -import wailConstants from '../../constants/wail-constants' -import styles from '../styles/styles' - -const From = wailConstants.From -const EventTypes = wailConstants.EventTypes - -let focusTime = null - -export default class ArchiveUrl extends Component { - constructor (props, context) { - super(props, context) - this.state = { url: UrlStore.getUrl(), underlineStyle: styles.underlineStyle } - } - - componentWillMount () { - UrlStore.on('url-updated', this.getUrl) - } - - componentWillUnmount () { - UrlStore.removeListener('url-updated', this.getUrl) - } - - @autobind - getUrl () { - let maybeUpdate = UrlStore.getUrl() - if (this.state.url.s !== maybeUpdate.s) { - this.setState({ url: this.state.url.setValue(maybeUpdate.s) }) - } - } - - @autobind - handleChange (e) { - let val = e.target.value - clearTimeout(focusTime) - focusTime = setTimeout(() => { - console.log('Timeout focus time') - if (isURL(val)) { - aua.urlUpdated(val) - } - }, 1500) - let value = e.target.value - let err = styles.underlineStyleError - if (isURL(value) || S(value).isEmpty()) { - err = styles.underlineStyle - } - this.setState({ url: this.state.url.setValue(value), underlineStyle: err }) - } - - @autobind - focusLost (event) { - // console.log('checking url for archiving', this.state.url, event.target.value) - clearTimeout(focusTime) - if (isURL(event.target.value)) { - console.log('its valid') - aua.urlUpdated(event.target.value) - } else { - if (S(event.target.value).isEmpty()) { - aua.emptyURL() - } - } - } - - @autobind - onClickArchiveNow (event) { - // console.log('archive now') - CrawlDispatcher.dispatch({ - type: EventTypes.BUILD_CRAWL_JOB, - from: From.BASIC_ARCHIVE_NOW - }) - } - - render () { - return ( -
    - -
    - ) - } -} diff --git a/src/componets/basic/basic-tab.js b/src/componets/basic/basic-tab.js deleted file mode 100755 index 9d039ff4..00000000 --- a/src/componets/basic/basic-tab.js +++ /dev/null @@ -1,47 +0,0 @@ -import React, { Component } from 'react' -import { Grid, Row } from 'react-cellblock' -import ArchiveUrl from './archive-url' -import BasicTabButtons from './basicTab-buttons' -import MementoTable from './mementoTable' -import ArchivalButtons from './archivalButtos' -import MementoMessagePanel from './mementoMessage-panel' -import styles from '../styles/styles' - -const { btBody } = styles.basicTab - -// -export default class BasicTab extends Component { - render () { - return ( -
    - - - - -
    - ) - } -} - -/* - -
    - -
    - -
    - - render () { - return ( - - - - -
    - - - - ) - } - */ - diff --git a/src/componets/basic/basicTab-buttons.js b/src/componets/basic/basicTab-buttons.js deleted file mode 100755 index a3960d9c..00000000 --- a/src/componets/basic/basicTab-buttons.js +++ /dev/null @@ -1,44 +0,0 @@ -import React, { Component } from 'react' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import RaisedButton from 'material-ui/RaisedButton' -import autobind from 'autobind-decorator' -import CheckArchiveStatIcon from 'material-ui/svg-icons/action/schedule' -import UrlDispatcher from '../../dispatchers/url-dispatcher' -import wailConstants from '../../constants/wail-constants' -import SettingIcon from 'material-ui/svg-icons/action/settings-applications' -import { ipcRenderer } from 'electron' - -const EventTypes = wailConstants.EventTypes - -export default class BasicTabButtons extends Component { - - @autobind - onClickCheckArchive (event) { - UrlDispatcher.dispatch({ - type: EventTypes.CHECK_URI_IN_ARCHIVE - }) - } - - render () { - return ( - - - } - label='Check Archived Status' - labelPosition='before' - onMouseDown={this.onClickCheckArchive} - /> - - - } - label="Settings" - labelPosition="before" - onMouseDown={() => ipcRenderer.send('open-settings-window', "hi") } - /> - - - ) - } -} diff --git a/src/componets/basic/basicTabButtons2.js b/src/componets/basic/basicTabButtons2.js deleted file mode 100644 index 9c6b6003..00000000 --- a/src/componets/basic/basicTabButtons2.js +++ /dev/null @@ -1,50 +0,0 @@ -import React, { Component } from 'react' -import { Toolbar, ToolbarGroup } from 'material-ui/Toolbar' -import RaisedButton from 'material-ui/RaisedButton' -import autobind from 'autobind-decorator' -import { Row } from 'react-cellblock' -import ViewArchiveIcon from 'material-ui/svg-icons/image/remove-red-eye' -import CheckArchiveStatIcon from 'material-ui/svg-icons/action/schedule' -import UrlDispatcher from '../../dispatchers/url-dispatcher' -import wailConstants from '../../constants/wail-constants' -import styles from '../styles/styles' - -const EventTypes = wailConstants.EventTypes - -export default class BasicTabButtons extends Component { - - @autobind - onClickCheckArchive (event) { - // console.log('check archive') - UrlDispatcher.dispatch({ - type: EventTypes.CHECK_URI_IN_ARCHIVE - }) - } - - @autobind - onClickViewArchive (event) { - // console.log('view archive') - UrlDispatcher.dispatch({ - type: EventTypes.VIEW_ARCHIVED_URI - }) - } - - render () { - return ( - <> - - } - onMouseDown={this.onClickCheckArchive} - /> - - - } - onMouseDown={this.onClickViewArchive} - /> - - - ) - } -} diff --git a/src/componets/basic/mementoMessage-panel.js b/src/componets/basic/mementoMessage-panel.js deleted file mode 100755 index 0a2b62b3..00000000 --- a/src/componets/basic/mementoMessage-panel.js +++ /dev/null @@ -1,138 +0,0 @@ -import React, { Component } from 'react' -import autobind from 'autobind-decorator' -import UrlStore from '../../stores/urlStore' -import MemgatorStore from '../../stores/memgatorStore' -import { FetchingMementoMessage, MementoCountMessage, DefaultMementoMessage } from './mementoMessages' -import styles from '../styles/styles' -// -// export default class MementoMessagePanel extends Component { -// constructor (props, context) { -// super(props, context) -// let mc = UrlStore.getMementoCount() -// let tState -// this.default = false -// if (UrlStore.getUrl().isEmpty()) { -// this.default = true -// tState = { -// mementoCount: -1 -// } -// } else { -// tState = { -// mementoCount: mc -// } -// } -// this.state = tState -// } -// -// @autobind -// updateMementoCount () { -// this.setState({ mementoCount: UrlStore.getMementoCount() }) -// } -// -// @autobind -// urlUpdated () { -// this.default = UrlStore.getUrl().isEmpty() -// this.setState({ mementoCount: -1 }) -// } -// -// componentDidMount () { -// UrlStore.on('memento-count-updated', this.updateMementoCount) -// UrlStore.on('emptyURL', this.urlUpdated) -// UrlStore.on('memento-count-fetch', this.urlUpdated) -// } -// -// componentWillUnmount () { -// UrlStore.removeListener('memento-count-updated', this.updateMementoCount) -// UrlStore.removeListener('emptyURL', this.urlUpdated) -// UrlStore.removeListener('memento-count-fetch', this.urlUpdated) -// } -// -// render () { -// let message -// if (this.default) { -// message = -// } else { -// if (this.state.mementoCount === -1) { -// message = -// } else { -// message = -// } -// } -// -// return ( -//
    -// {message} -//
    -// ) -// } -// } - -const { container } = { - container: { - marginTop: '5px', - display: 'flex', - height: '100px', - marginBottom: '5px', - flexDirection: 'column' - }, - - fetching: { - display: 'flex', - flexDirection: 'row', - cursor: 'default' - } -} - -export default class MementoMessagePanel extends Component { - - constructor (props, context) { - super(props, context) - this.state = { - count: MemgatorStore.lastCount(), - } - } - - componentDidMount () { - MemgatorStore.on('count-update', this.update) - UrlStore.on('emptyURL', this.empty) - } - - componentWillUnmount () { - MemgatorStore.removeListener('count-update', this.update) - UrlStore.removeListener('emptyURL', this.empty) - - } - - @autobind - empty () { - MemgatorStore.resetCountLast() - this.setState({ - count: -2 - }) - } - - @autobind - update (data) { - this.setState(data) - } - - render () { - var ret - if (this.state.count === -2) { - ret = - } else { - if (this.state.count === -1) { - ret = - } else { - ret = - } - } - - return ( -
    - {ret} -
    - ) - } - -} diff --git a/src/componets/basic/mementoMessages.js b/src/componets/basic/mementoMessages.js deleted file mode 100755 index 990f58ad..00000000 --- a/src/componets/basic/mementoMessages.js +++ /dev/null @@ -1,161 +0,0 @@ -import React, { Component, PropTypes } from 'react' -import { Row, Column } from 'react-cellblock' -import Avatar from 'material-ui/Avatar' -import styles from '../styles/styles' - -const { fetching } ={ - container: { - paddingTop: '32px', - display: 'flex', - height: '90px', - flexDirection: 'column' - }, - - fetching: { - display: 'flex', - flexDirection: 'row', - cursor: 'default', - } -} - -const number = { - display: 'flex', - flexDirection: 'row', - paddingLeft: '20px', - cursor: 'default' -} - -export class DefaultMementoMessage extends Component { - - // render () { - // return ( - // - // - //

    Enter URL to fetch mementos

    - //
    - // - //

    0

    - //
    - //
    - // ) - // } - - /* -
    -
    Enter URL to fetch mementos
    -
    0
    -
    - */ - - render () { - return ( -