jetty 6.1.11.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 6.1.11.1 / 2008-11-02
2
+
3
+ * Inital release based on Jetty Web Server 6.1.11
4
+
data/Manifest.txt ADDED
@@ -0,0 +1,22 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ pom.xml
6
+ assembly.xml
7
+ bin/jetty-service
8
+ lib/jetty.rb
9
+ lib/jetty/base.rb
10
+ lib/jetty/rewrite.rb
11
+ lib/jetty/test-servlets.rb
12
+ src/main/java/com/gravitext/testservlets/PerfTestServlet.java
13
+ src/main/java/com/gravitext/testservlets/SnoopServlet.java
14
+ test/test_jetty.rb
15
+ webapps/test.war
16
+ webapps/test/WEB-INF/web.xml
17
+ webapps/test/index.html
18
+ lib/jetty/jetty-6.1.11.jar
19
+ lib/jetty/jetty-util-6.1.11.jar
20
+ lib/jetty/jetty-rewrite-handler-6.1.11.jar
21
+ lib/jetty/servlet-api-2.5-6.1.11.jar
22
+ lib/jetty/gravitext-testservlets-1.0.jar
data/README.txt ADDED
@@ -0,0 +1,116 @@
1
+ = jetty
2
+
3
+ * http://rjack.rubyforge.org
4
+ * http://rubyforge.org/projects/rjack
5
+
6
+ == Description
7
+
8
+ A gem packaging of the {Jetty Web Server}[http://www.mortbay.org/jetty/]
9
+ for JRuby:
10
+
11
+ * Provides jetty, jetty-util, servlet-api, and jetty-rewrite-handler
12
+ jars.
13
+ * A Jetty::ServerFactory for simple programmatic server setup in ruby.
14
+ * A set of Jetty::TestServlets containing a SnoopServlet and
15
+ PerfTestServlet (implemented in Java).
16
+ * A jetty-service bin script for easy testing from the command line.
17
+
18
+ Note that JSP support is provided separately in the companion
19
+ jetty-jsp[http://rjack.rubyforge.org/jetty-jsp/] gem.
20
+
21
+ == Synopsis
22
+
23
+ % jetty-service -v
24
+ Usage: jetty-service [options]
25
+ -p, --port N Port to listen on (default: auto)
26
+ -t, --threads N Maximum pool threads (default: 20)
27
+ -w, --webapp PATH Load PATH as root context webapp
28
+ (default: gem test.war)
29
+ -j, --jsp Enable JSP support by loading jetty-jsp gem
30
+ -d, --debug Enable debug logging
31
+ -v, --version Show version and exit
32
+
33
+ or
34
+
35
+ require 'jetty'
36
+ require 'jetty/test-servlets'
37
+
38
+ factory = Jetty::ServerFactory.new
39
+ factory.port = 8080
40
+
41
+ factory.set_context_servlets( '/', '/*' => Jetty::TestServlets::SnoopServlet.new )
42
+ server = factory.create
43
+ server.start
44
+ server.join
45
+
46
+ == Requirements
47
+
48
+ No hard requirements, however:
49
+
50
+ * To load webapps with JSPs, the jetty-jsp[http://rjack.rubyforge.org/jetty-jsp/]
51
+ gem must be loaded.
52
+ * Jetty will log to slf4j[http://rjack.rubyforge.org/slf4j] if
53
+ loaded. The jetty-service script will attempt to load
54
+ logback[http://rjack.rubyforge.org/logback], and thus slf4j, if
55
+ available.
56
+
57
+ == License
58
+
59
+ === jetty ruby gem, test servlets
60
+
61
+ Copyright (C) 2008 David Kellum
62
+
63
+ Licensed under the Apache License, Version 2.0 (the "License"); you
64
+ may not use this file except in compliance with the License. You
65
+ may obtain a copy of the License at:
66
+
67
+ http://www.apache.org/licenses/LICENSE-2.0
68
+
69
+ Unless required by applicable law or agreed to in writing, software
70
+ distributed under the License is distributed on an "AS IS" BASIS,
71
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
72
+ implied. See the License for the specific language governing
73
+ permissions and limitations under the License.
74
+
75
+ === Jetty Web Container (Java)
76
+
77
+ Copyright 1995-2008 Mort Bay Consulting Pty Ltd
78
+
79
+ Licensed under the Apache License, Version 2.0 (the "License");
80
+ you may not use this file except in compliance with the License.
81
+ You may obtain a copy of the License at
82
+
83
+ http://www.apache.org/licenses/LICENSE-2.0
84
+
85
+ Unless required by applicable law or agreed to in writing, software
86
+ distributed under the License is distributed on an "AS IS" BASIS,
87
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
88
+ See the License for the specific language governing permissions and
89
+ limitations under the License.
90
+
91
+ The Jetty Web Container is Copyright Mort Bay Consulting Pty Ltd
92
+ unless otherwise noted. It is licensed under the apache 2.0
93
+ license.
94
+
95
+ The javax.servlet package used by Jetty is copyright
96
+ Sun Microsystems, Inc and Apache Software Foundation. It is
97
+ distributed under the Common Development and Distribution License.
98
+ You can obtain a copy of the license at
99
+ https://glassfish.dev.java.net/public/CDDLv1.0.html.
100
+
101
+ The UnixCrypt.java code ~Implements the one way cryptography used by
102
+ Unix systems for simple password protection. Copyright 1996 Aki Yoshida,
103
+ modified April 2001 by Iris Van den Broeke, Daniel Deville.
104
+ Permission to use, copy, modify and distribute UnixCrypt
105
+ for non-commercial or commercial purposes and without fee is
106
+ granted provided that the copyright notice appears in all copies.
107
+
108
+ The default JSP implementation is provided by the Glassfish JSP engine
109
+ from project Glassfish http://glassfish.dev.java.net. Copyright 2005
110
+ Sun Microsystems, Inc. and portions Copyright Apache Software Foundation.
111
+
112
+ Some portions of the code are Copyright:
113
+ 2006 Tim Vernum
114
+ 1999 Jason Gilbert.
115
+
116
+ The jboss integration module contains some LGPL code.
data/Rakefile ADDED
@@ -0,0 +1,93 @@
1
+ # -*- ruby -*-
2
+ #--
3
+ # Copyright (C) 2008 David Kellum
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
6
+ # may not use this file except in compliance with the License. You
7
+ # may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied. See the License for the specific language governing
15
+ # permissions and limitations under the License.
16
+ #++
17
+
18
+ require 'rubygems'
19
+
20
+ ENV['NODOT'] = "no thank you"
21
+ require 'hoe'
22
+
23
+ $LOAD_PATH << './lib'
24
+ require 'jetty/base'
25
+ Jetty = JettyBase
26
+
27
+ JARS = %w{ jetty jetty-util jetty-rewrite-handler }.map do |n|
28
+ "#{n}-#{ Jetty::JETTY_VERSION }.jar"
29
+ end
30
+ JARS << "servlet-api-#{ Jetty::SERVLET_API_VERSION }-#{ Jetty::JETTY_VERSION }.jar"
31
+ JARS << 'gravitext-testservlets-1.0.jar'
32
+ JAR_FILES = JARS.map { |jar| "lib/jetty/#{jar}" }
33
+
34
+
35
+ desc "Update the Manifest with actual jars"
36
+ task :manifest do
37
+ out = File.new( 'Manifest.txt', 'w' )
38
+ begin
39
+ out.write <<END
40
+ History.txt
41
+ Manifest.txt
42
+ README.txt
43
+ Rakefile
44
+ pom.xml
45
+ assembly.xml
46
+ bin/jetty-service
47
+ lib/jetty.rb
48
+ lib/jetty/base.rb
49
+ lib/jetty/rewrite.rb
50
+ lib/jetty/test-servlets.rb
51
+ src/main/java/com/gravitext/testservlets/PerfTestServlet.java
52
+ src/main/java/com/gravitext/testservlets/SnoopServlet.java
53
+ test/test_jetty.rb
54
+ webapps/test.war
55
+ webapps/test/WEB-INF/web.xml
56
+ webapps/test/index.html
57
+ END
58
+ out.puts JAR_FILES
59
+ ensure
60
+ out.close
61
+ end
62
+ end
63
+
64
+ ASSEMBLY = "target/gravitext-testservlets-1.0-bin.dir"
65
+
66
+ file 'webapps/test.war' => [ 'webapps/test/index.html',
67
+ 'webapps/test/WEB-INF/web.xml' ] do
68
+ sh( 'jar cvf webapps/test.war -C webapps/test .' )
69
+ end
70
+
71
+ file ASSEMBLY => [ 'pom.xml', 'assembly.xml' ] do
72
+ sh( 'mvn package' )
73
+ end
74
+
75
+ JARS.each do |jar|
76
+ file "lib/jetty/#{jar}" => [ ASSEMBLY ] do
77
+ cp_r( File.join( ASSEMBLY, jar ), 'lib/jetty' )
78
+ end
79
+ end
80
+
81
+ [ :gem, :test ].each { |t| task t => JAR_FILES }
82
+
83
+ task :mvn_clean do
84
+ rm_f( JAR_FILES )
85
+ sh( 'mvn clean' )
86
+ end
87
+ task :clean => :mvn_clean
88
+
89
+ hoe = Hoe.new( "jetty", Jetty::VERSION ) do |p|
90
+ p.developer( "David Kellum", "dek-ruby@gravitext.com" )
91
+ p.rubyforge_name = "rjack"
92
+ p.rdoc_pattern = /^(lib.*\.(rb|txt))|[^\/]*\.txt$/
93
+ end
data/assembly.xml ADDED
@@ -0,0 +1,19 @@
1
+ <assembly>
2
+ <id>bin</id>
3
+ <formats>
4
+ <format>dir</format>
5
+ </formats>
6
+ <includeBaseDirectory>false</includeBaseDirectory>
7
+ <dependencySets>
8
+ <dependencySet>
9
+ <includes>
10
+ <include>org.mortbay.jetty:jetty</include>
11
+ <include>org.mortbay.jetty:jetty-util</include>
12
+ <include>org.mortbay.jetty:jetty-rewrite-handler</include>
13
+ <include>org.mortbay.jetty:servlet-api-2.5</include>
14
+ <include>com.gravitext:gravitext-testservlets</include>
15
+ </includes>
16
+ </dependencySet>
17
+ </dependencySets>
18
+
19
+ </assembly>
data/bin/jetty-service ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env jruby
2
+ # -*- ruby -*-
3
+ #--
4
+ # Copyright (C) 2008 David Kellum
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
7
+ # may not use this file except in compliance with the License. You
8
+ # may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ # implied. See the License for the specific language governing
16
+ # permissions and limitations under the License.
17
+ #++
18
+
19
+ $LOAD_PATH.unshift File.join( File.dirname(__FILE__), "..", "lib" )
20
+
21
+ require 'rubygems'
22
+
23
+ begin
24
+ gem 'logback'
25
+ require 'logback'
26
+ Logback.configure do
27
+ console = Logback::ConsoleAppender.new do |a|
28
+ a.layout = Logback::PatternLayout.new do |p|
29
+ p.pattern = "%-4r %-5level %logger{35} - %msg %ex%n"
30
+ end
31
+ end
32
+ Logback.root.add_appender( console )
33
+ Logback.root.level = Logback::INFO
34
+ end
35
+ log = SLF4J[ 'jetty-service' ]
36
+ rescue Gem::LoadError => e
37
+ class Log
38
+ def method_missing( method, *args )
39
+ $stderr.puts( "#{method.id2name.upcase}: #{args.join(' ')}" )
40
+ end
41
+ end
42
+ log = Log.new
43
+ log.info( "#{e.to_s.strip}: SLF4J/Logback not loaded, using STDERR." )
44
+ end
45
+
46
+ require 'jetty'
47
+ require 'jetty/test-servlets'
48
+ require 'optparse'
49
+
50
+ factory = Jetty::ServerFactory.new
51
+
52
+ factory.webapp_contexts[ '/' ] = Jetty::TestServlets::WEBAPP_TEST_EXPANDED
53
+
54
+ OptionParser.new do |opts|
55
+ opts.on( "-p", "--port N", Integer,
56
+ "Port to listen on (default: auto)" ) do |v|
57
+ factory.port = v
58
+ end
59
+ opts.on( "-t", "--threads N", Integer,
60
+ "Maximum pool threads (default: #{factory.max_threads})" ) do |v|
61
+ factory.max_threads = v
62
+ end
63
+ opts.on( "-w", "--webapp PATH",
64
+ "Load PATH as root context webapp. (default: gem test.war)" ) do |v|
65
+ factory.webapp_contexts[ '/' ] = v
66
+ end
67
+ opts.on( "-j", "--jsp", "Enable JSP support by loading jetty-jsp gem") do
68
+ gem( 'jetty-jsp', "~> #{Jetty::JETTY_VERSION}" )
69
+ require 'jetty-jsp'
70
+ end
71
+ opts.on_tail( "-d", "--debug", "Enable debug logging") do
72
+ Logback.root.level = Logback::DEBUG if defined?( Logback )
73
+ end
74
+ opts.on_tail( "-v", "--version", "Show version and exit" ) do
75
+ puts "jetty gem (#{$0}) version: #{Jetty::VERSION}"
76
+ exit
77
+ end
78
+ end.parse!
79
+
80
+ server = factory.create
81
+
82
+ server.start
83
+ log.info( "Listening on port: #{server.connectors[0].local_port}" )
84
+ server.join
85
+ log.info( "Server exited." )
data/lib/jetty.rb ADDED
@@ -0,0 +1,268 @@
1
+ #--
2
+ # Copyright (C) 2008 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You
6
+ # may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ require 'jetty/base'
18
+
19
+ # {Jetty Web Server}[http://www.mortbay.org/jetty/] module including
20
+ # a ServerFactory
21
+ module Jetty
22
+ include JettyBase
23
+
24
+ def self.require_jar( name )
25
+ require File.join( JETTY_DIR, "#{name}-#{ JETTY_VERSION }.jar" )
26
+ end
27
+
28
+ require_jar 'jetty'
29
+ require_jar 'jetty-util'
30
+ require_jar "servlet-api-#{ SERVLET_API_VERSION }"
31
+
32
+ import 'org.mortbay.jetty.Connector'
33
+ import 'org.mortbay.jetty.Handler'
34
+ import 'org.mortbay.jetty.NCSARequestLog'
35
+ import 'org.mortbay.jetty.Server'
36
+ import 'org.mortbay.jetty.handler.ContextHandler'
37
+ import 'org.mortbay.jetty.handler.ContextHandlerCollection'
38
+ import 'org.mortbay.jetty.handler.DefaultHandler'
39
+ import 'org.mortbay.jetty.handler.HandlerCollection'
40
+ import 'org.mortbay.jetty.handler.RequestLogHandler'
41
+ import 'org.mortbay.jetty.handler.ResourceHandler'
42
+ import 'org.mortbay.jetty.nio.SelectChannelConnector'
43
+ import 'org.mortbay.jetty.servlet.Context'
44
+ import 'org.mortbay.jetty.servlet.ServletHolder'
45
+ import 'org.mortbay.jetty.webapp.WebAppContext'
46
+ import 'org.mortbay.thread.QueuedThreadPool'
47
+
48
+ # A factory for creating complete org.morbay.jetty.Server
49
+ # instances. Provides a general purpose facade for setup including
50
+ # the Server, a ThreadPool, a Connector, and various Handlers. It
51
+ # is non-exhaustive (not every Jetty facility is provided) but is
52
+ # designed to be easily extended.
53
+ #
54
+ # == Example
55
+ #
56
+ # factory = Jetty::ServerFactory.new
57
+ # factory.max_threads = 20
58
+ # factory.port = 8080
59
+ #
60
+ # # Set static resource context mapping URI to directory
61
+ # factory.static_contexts[ '/html' ] = '/var/www/html'
62
+ #
63
+ # # Implement custom handler and register it.
64
+ # import 'org.mortbay.jetty.handler.AbstractHandler'
65
+ # class RedirectHandler < AbstractHandler
66
+ #
67
+ # def initialize( redirects )
68
+ # super()
69
+ # @redirects = redirects
70
+ # end
71
+ #
72
+ # def handle( target, request, response, dispatch )
73
+ # goto = @redirects[ target ]
74
+ # unless goto.nil?
75
+ # response.send_redirect( goto )
76
+ # request.handled = true
77
+ # end
78
+ # end
79
+ # end
80
+ #
81
+ # def factory.create_pre_handlers
82
+ # [ RedirectHandler.new( '/' => '/html/' ) ] + super
83
+ # end
84
+ #
85
+ # # Create a webapp context (war file or webapp expanded)
86
+ # factory.webapp_contexts[ '/test' ] = Jetty::TestServlets::WEBAPP_TEST_WAR
87
+ #
88
+ # # Create a context for a custom HelloServlet
89
+ # import 'javax.servlet.http.HttpServlet'
90
+ # class HelloServlet < HttpServlet
91
+ # def doGet( request, response )
92
+ # response.content_type = "text/plain"
93
+ # response.writer.write( 'Hello World!' )
94
+ # end
95
+ # end
96
+ #
97
+ # factory.set_context_servlets( '/hello', { '/*' => HelloServlet.new } )
98
+ #
99
+ # # Create, start, and join (wait for shutdown)
100
+ # server = factory.create
101
+ # server.start
102
+ # server.join
103
+ #
104
+ class ServerFactory
105
+ attr_accessor( :port, :max_idle_time_ms,
106
+ :max_threads, :low_threads, :min_threads,
107
+ :static_contexts, :static_welcome_files,
108
+ :webapp_contexts,
109
+ :servlet_contexts,
110
+ :stop_at_shutdown,
111
+ :request_log_file )
112
+
113
+ def initialize
114
+ @port = 0 # Use any available port
115
+ @max_threads = 20
116
+ @low_threads = 0 # No low thread threshold
117
+ @min_threads = nil # Compute from max_threads
118
+ @max_idle_time_ms = 10000
119
+ @static_contexts = {}
120
+ @static_welcome_files = [ 'index.html' ]
121
+ @webapp_contexts = {}
122
+ @request_log_file = nil
123
+ @servlet_contexts = {}
124
+ @stop_at_shutdown = true
125
+ end
126
+
127
+ # Returns a new org.morbay.jetty.Server that is ready to
128
+ # be started.
129
+ def create
130
+ server = Server.new
131
+
132
+ server.thread_pool = create_pool
133
+
134
+ server.connectors = create_connectors.to_java( Connector )
135
+
136
+ hcol = HandlerCollection.new
137
+ hcol.handlers = create_handlers.compact.to_java( Handler )
138
+ server.handler = hcol
139
+
140
+ server.stop_at_shutdown = @stop_at_shutdown
141
+
142
+ server
143
+ end
144
+
145
+ # Return a org.mortbay.thread.ThreadPool implementation.
146
+ #
147
+ # This implementation creates a QueuedThreadPool with min_threads
148
+ # (default max_threads / 4), any low_threads, and max_threads
149
+ # (default 20).
150
+ def create_pool
151
+ pool = QueuedThreadPool.new
152
+ pool.min_threads = [ @min_threads || ( @max_threads / 4 ), 1 ].max
153
+ pool.low_threads = @low_threads
154
+ pool.max_threads = [ @max_threads, 2 ].max
155
+ pool
156
+ end
157
+
158
+ # Return array of org.mortbay.jetty.Connector instances.
159
+ #
160
+ # This implementation returns a single SelectChannelConnector
161
+ # listening to the given port or an auto-selected avaiable
162
+ # port. Connections are retained for max_idle_time_ms.
163
+ def create_connectors
164
+ connector = SelectChannelConnector.new
165
+ connector.port = @port
166
+ connector.max_idle_time = @max_idle_time_ms
167
+ [ connector ]
168
+ end
169
+
170
+ # Returns an Array of org.mortbay.jetty.Handler instances.
171
+ #
172
+ # This implementation concatenates create_pre_handlers and
173
+ # create_post_handlers.
174
+ def create_handlers
175
+ ( create_pre_handlers + create_post_handlers )
176
+ end
177
+
178
+ # Returns an Array of "pre" org.mortbay.jetty.Handler instances.
179
+ #
180
+ # This implementation returns an array containing a single
181
+ # ContextHandlerCollection which itself contains the context
182
+ # handlers set by create_context_handlers, or an empty array
183
+ # if no context handlers were set.
184
+ def create_pre_handlers
185
+ ctx_handlers = ContextHandlerCollection.new
186
+ create_context_handlers( ctx_handlers )
187
+ h = ctx_handlers.handlers
188
+ if( h.nil? || h.length == 0 )
189
+ [ ]
190
+ else
191
+ [ ctx_handlers ]
192
+ end
193
+ end
194
+
195
+ # Returns an Array of "post" org.mortbay.jetty.Handler instances.
196
+ #
197
+ # This implementation returns a DefaultHandler instance, and any
198
+ # handler returned by create_request_log_handler.
199
+ def create_post_handlers
200
+ [ DefaultHandler.new, # Handle errors, etc.
201
+ create_request_log_handler ]
202
+ end
203
+
204
+ # Create context handlers on the provided ContextHandlerCollection
205
+ #
206
+ # This implementation calls create_static_contexts,
207
+ # create_webapp_contexts, and create_servlet_context.
208
+ def create_context_handlers( context_handler_collection )
209
+ create_static_contexts( context_handler_collection )
210
+ create_webapp_contexts( context_handler_collection )
211
+ create_servlet_contexts( context_handler_collection )
212
+ end
213
+
214
+ # Create context handlers for static resources from static_contexts
215
+ def create_static_contexts( context_handler_collection )
216
+ @static_contexts.each do |ctx, rpath|
217
+ ch = ContextHandler.new( context_handler_collection, ctx )
218
+ ch.resource_base = rpath
219
+ ch.handler = ResourceHandler.new
220
+ ch.handler.welcome_files =
221
+ @static_welcome_files.to_java( java.lang.String )
222
+ end
223
+ end
224
+
225
+ # Set a context of servlets given context_path, a servlets hash
226
+ # (mapping path to Servlet), and options.
227
+ def set_context_servlets( context_path, servlets,
228
+ options = Context::NO_SESSIONS )
229
+ @servlet_contexts[ context_path ] = [ servlets, options ]
230
+ end
231
+
232
+ # Create context handlers from servlet_contexts.
233
+ def create_servlet_contexts( context_handler_collection )
234
+ @servlet_contexts.each do |ctx, s_o|
235
+ servlets, options = s_o
236
+ context = Context.new( context_handler_collection, ctx, options )
237
+ servlets.each do |path, servlet|
238
+ context.add_servlet( ServletHolder.new( servlet ), path )
239
+ end
240
+ end
241
+ end
242
+
243
+ # Create webapp context handlers from webapp_contexts.
244
+ def create_webapp_contexts( context_handler_collection )
245
+ @webapp_contexts.each do |ctx, webapp_path|
246
+ WebAppContext.new( context_handler_collection, webapp_path, ctx )
247
+ end
248
+ end
249
+
250
+ # Create RequestLogHandler from any set request_log_file
251
+ def create_request_log_handler
252
+ if @request_log_file
253
+ log_handler = RequestLogHandler.new
254
+ log_handler.request_log = create_request_log( @request_log_file )
255
+ log_handler
256
+ end
257
+ end
258
+
259
+ # Create a NCSARequestLog to append to log_file
260
+ def create_request_log( log_file )
261
+ log = NCSARequestLog.new( log_file )
262
+ log.log_time_zone = java.util.TimeZone::getDefault.getID
263
+ log.append = true;
264
+ log
265
+ end
266
+
267
+ end
268
+ end
data/lib/jetty/base.rb ADDED
@@ -0,0 +1,23 @@
1
+ #--
2
+ # Copyright (C) 2008 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You
6
+ # may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ module JettyBase
18
+ JETTY_VERSION = '6.1.11'
19
+ VERSION = JETTY_VERSION + '.1'
20
+ SERVLET_API_VERSION = '2.5'
21
+
22
+ JETTY_DIR = File.dirname( __FILE__ ) # :nodoc:
23
+ end
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ # Loads jetty-rewrite-handler jar.
2
+ Jetty.require_jar( 'jetty-rewrite-handler' )
@@ -0,0 +1,33 @@
1
+ #--
2
+ # Copyright (C) 2008 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You
6
+ # may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ require 'jetty'
18
+
19
+ module Jetty
20
+
21
+ # Loads testservlets jar.
22
+ module TestServlets
23
+ require File.join( Jetty::JETTY_DIR, "gravitext-testservlets-1.0.jar" )
24
+ import 'com.gravitext.testservlets.SnoopServlet'
25
+ import 'com.gravitext.testservlets.PerfTestServlet'
26
+
27
+ # Webapps directory containing "test/" expanded webapp and "test.war"
28
+ WEBAPPS_DIR = File.join( Jetty::JETTY_DIR, '..', '..', 'webapps' )
29
+
30
+ WEBAPP_TEST_EXPANDED = File.join( WEBAPPS_DIR, 'test' )
31
+ WEBAPP_TEST_WAR = File.join( WEBAPPS_DIR, 'test.war' )
32
+ end
33
+ end
data/pom.xml ADDED
@@ -0,0 +1,72 @@
1
+ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2
+
3
+ <modelVersion>4.0.0</modelVersion>
4
+ <groupId>com.gravitext</groupId>
5
+ <artifactId>gravitext-testservlets</artifactId>
6
+ <packaging>jar</packaging>
7
+ <version>1.0</version>
8
+ <name>Gravitext Test Servlets</name> -->
9
+
10
+ <dependencies>
11
+ <dependency>
12
+ <groupId>org.mortbay.jetty</groupId>
13
+ <artifactId>servlet-api-2.5</artifactId>
14
+ <version>6.1.11</version>
15
+ </dependency>
16
+
17
+ <dependency>
18
+ <groupId>org.mortbay.jetty</groupId>
19
+ <artifactId>jetty</artifactId>
20
+ <version>6.1.11</version>
21
+ </dependency>
22
+
23
+ <dependency>
24
+ <groupId>org.mortbay.jetty</groupId>
25
+ <artifactId>jetty-util</artifactId>
26
+ <version>6.1.11</version>
27
+ </dependency>
28
+
29
+ <dependency>
30
+ <groupId>org.mortbay.jetty</groupId>
31
+ <artifactId>jetty-rewrite-handler</artifactId>
32
+ <version>6.1.11</version>
33
+ </dependency>
34
+
35
+ </dependencies>
36
+
37
+ <build>
38
+ <plugins>
39
+ <plugin>
40
+ <artifactId>maven-assembly-plugin</artifactId>
41
+ <configuration>
42
+ <descriptors>
43
+ <descriptor>assembly.xml</descriptor>
44
+ </descriptors>
45
+ <tarLongFileMode>gnu</tarLongFileMode>
46
+ </configuration>
47
+ <executions>
48
+ <execution>
49
+ <id>assembly</id>
50
+ <phase>package</phase>
51
+ <goals>
52
+ <goal>attached</goal>
53
+ </goals>
54
+ </execution>
55
+ </executions>
56
+ </plugin>
57
+ <plugin>
58
+ <artifactId>maven-compiler-plugin</artifactId>
59
+ <configuration>
60
+ <source>1.5</source>
61
+ <target>1.5</target>
62
+ <optimize>true</optimize>
63
+ <debug>true</debug>
64
+ <encoding>UTF-8</encoding>
65
+ <showDeprecation>true</showDeprecation>
66
+ <showWarnings>true</showWarnings>
67
+ </configuration>
68
+ </plugin>
69
+ </plugins>
70
+ </build>
71
+
72
+ </project>
@@ -0,0 +1,153 @@
1
+ /*
2
+ * Copyright (C) 2008 David Kellum
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.gravitext.testservlets;
18
+
19
+ import java.io.IOException;
20
+ import java.io.PrintWriter;
21
+ import java.math.BigInteger;
22
+ import java.util.Random;
23
+
24
+ import javax.servlet.ServletException;
25
+ import javax.servlet.http.HttpServlet;
26
+ import javax.servlet.http.HttpServletRequest;
27
+ import javax.servlet.http.HttpServletResponse;
28
+
29
+ /**
30
+ * Servlet for perform and chunked output testing.
31
+ * @author David Kellum
32
+ */
33
+ public class PerfTestServlet extends HttpServlet
34
+ {
35
+
36
+ @Override
37
+ protected void doGet( HttpServletRequest req, HttpServletResponse resp )
38
+ throws ServletException, IOException
39
+ {
40
+ int delayConst = getParam( req, "delay", 0 );
41
+ int delayRandom = getParam( req, "rdelay", 0 );
42
+
43
+ int burnConst = getParam( req, "burn", 0 );
44
+ int burnRandom = getParam( req, "rburn", 0 );
45
+
46
+ int size = getParam( req, "size", 0 );
47
+ int sizeRandom = getParam( req, "rsize", 0 );
48
+
49
+ int count = getParam( req, "count", 0 );
50
+ count += random( getParam( req, "rcount", 0 ) );
51
+
52
+ resp.setContentType("text/html; charset=ISO-8859-1" );
53
+
54
+ PrintWriter out = resp.getWriter();
55
+
56
+ out.println( "<html>" );
57
+ out.println( "<head>" );
58
+ out.println( "<title>Wait/Flush Test</title>" );
59
+ out.println( "</head>" );
60
+ out.println( "<body>" );
61
+
62
+ out.println( "<h2>Usage</h2>" );
63
+ out.println( "<table><tr><th>GET Parameter</th><th>Meaning</th></tr>" );
64
+ out.println( "<tr><td>size</td><td>Chunk constant size ~characters.</td></tr>" );
65
+ out.println( "<tr><td>rsize</td><td>Chunk random [0,n) size ~characters.</td></tr>" );
66
+ out.println( "<tr><td>delay</td><td>Constant chunk delay in ms</td></tr>" );
67
+ out.println( "<tr><td>rdelay</td><td>Random [0,n) chunk delay in ms</td></tr>" );
68
+ out.println( "<tr><td>burn</td><td>Constant chunk CPU burn time in ms</td></tr>" );
69
+ out.println( "<tr><td>rburn</td><td>Random [0,n) chunk burn time in ms</td></tr>" );
70
+ out.println( "</table>" );
71
+
72
+ out.println( "<h2>Output</h2>" );
73
+ out.flush();
74
+
75
+ out.println( "<p>Writing " + count + " (delayed) chunks...</p>" );
76
+ out.flush();
77
+
78
+ try {
79
+ for( int b = 0; b < count; ++b ) {
80
+
81
+ long delay = delayConst + random( delayRandom );
82
+ if( delay > 0 ) Thread.sleep( delay );
83
+
84
+ int burn = burnConst + random ( burnRandom );
85
+ if( burn > 0 ) {
86
+ delay += burnTime( burn );
87
+ }
88
+
89
+ out.println( "<p>(Delayed " + delay + " ms) " );
90
+
91
+ int f = size + random( sizeRandom );
92
+ while( f > 0 ) {
93
+ out.print( FILLER );
94
+ f -= FILLER.length();
95
+ }
96
+
97
+ out.println( "</p>" );
98
+ out.flush();
99
+ }
100
+ }
101
+ catch( InterruptedException x ) {}
102
+ out.println( "</body>" );
103
+ out.println( "</html>" );
104
+ out.flush();
105
+ }
106
+
107
+ private long burnTime( int burn_ms )
108
+ {
109
+ long prime = 2;
110
+ long begin = System.currentTimeMillis();
111
+ long endTime = begin + burn_ms;
112
+ long last = 0;
113
+ do {
114
+ prime = BigInteger.probablePrime( 64, new Random() ).longValue();
115
+ last = System.currentTimeMillis();
116
+ } while( last < endTime );
117
+
118
+ if( prime == 2 ) {
119
+ throw new IllegalStateException( "Not a prime!" );
120
+ }
121
+ return last - begin;
122
+ }
123
+
124
+ private int getParam( HttpServletRequest req, String name, int defVal )
125
+ {
126
+ int value = defVal;
127
+ String strVal = req.getParameter( name );
128
+ if( strVal != null ) {
129
+ value = Integer.parseInt( strVal );
130
+ }
131
+
132
+ return value;
133
+ }
134
+
135
+ private int random( int range )
136
+ {
137
+ Random _random = new Random();
138
+ if( range > 0 ) return _random.nextInt( range );
139
+ return 0;
140
+ }
141
+
142
+ private static final String FILLER =
143
+ "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " +
144
+ "sed do eiusmod tempor incididunt ut labore et dolore magna " +
145
+ "aliqua. Ut enim ad minim veniam, quis nostrud exercitation " +
146
+ "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis " +
147
+ "aute irure dolor in reprehenderit in voluptate velit esse cillum " +
148
+ "dolore eu fugiat nulla pariatur. Excepteur sint occaecat " +
149
+ "cupidatat non proident, sunt in culpa qui officia deserunt " +
150
+ "mollit anim id est laborum. ";
151
+
152
+ private static final long serialVersionUID = 1L;
153
+ }
@@ -0,0 +1,97 @@
1
+ /*
2
+ * Copyright (C) 2008 David Kellum
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.gravitext.testservlets;
18
+
19
+ import java.io.IOException;
20
+ import java.io.PrintWriter;
21
+ import java.util.Enumeration;
22
+
23
+ import javax.servlet.ServletException;
24
+ import javax.servlet.http.Cookie;
25
+ import javax.servlet.http.HttpServlet;
26
+ import javax.servlet.http.HttpServletRequest;
27
+ import javax.servlet.http.HttpServletResponse;
28
+
29
+ public class SnoopServlet extends HttpServlet
30
+ {
31
+
32
+ @Override
33
+ protected void doGet( HttpServletRequest request,
34
+ HttpServletResponse response )
35
+ throws ServletException, IOException
36
+ {
37
+ response.setContentType("text/html; charset=UTF-8" );
38
+
39
+ PrintWriter out = response.getWriter();
40
+
41
+ out.println( "<html>" );
42
+ out.println( "<head>" );
43
+ out.println( "<title>Wait/Flush Test</title>" );
44
+ out.println( "</head>" );
45
+ out.println( "<body>" );
46
+
47
+ writeTableHeader( out, "Request Properties", "Property" );
48
+ writeRow( out, "Request URI", request.getRequestURI() );
49
+ writeRow( out, "HTTP Method", request.getMethod() );
50
+ writeRow( out, "Path Info", request.getPathInfo() );
51
+ writeRow( out, "Path Trans", request.getPathTranslated() );
52
+ writeRow( out, "Query String", request.getQueryString() );
53
+ writeRow( out, "Context Path", request.getContextPath() );
54
+ writeRow( out, "Servlet Path", request.getServletPath() );
55
+ writeRow( out, "Is Secure", String.valueOf( request.isSecure() ) );
56
+ writeRow( out, "Auth Type", request.getAuthType() );
57
+ writeRow( out, "Remote User", request.getRemoteUser() );
58
+ out.println( "</table>" );
59
+
60
+ writeTableHeader( out, "Request Headers", "Header" );
61
+ Enumeration<?> hNames = request.getHeaderNames();
62
+ while( hNames.hasMoreElements() ) {
63
+ String hname = hNames.nextElement().toString();
64
+ String hvalue = request.getHeader( hname );
65
+ writeRow( out, hname, hvalue );
66
+ }
67
+ out.println( "</table>" );
68
+
69
+ Cookie[] cookies = request.getCookies();
70
+ if (cookies != null) {
71
+ writeTableHeader( out, "Cookies", "Cookie" );
72
+ for( Cookie cookie : cookies ) {
73
+ writeRow( out, cookie.getName(), cookie.getValue() );
74
+ }
75
+ out.println( "</table>" );
76
+ }
77
+
78
+ out.println( "</body>" );
79
+ out.println( "</html>" );
80
+ out.close();
81
+ }
82
+
83
+ private void writeTableHeader( PrintWriter out,
84
+ String heading, String name )
85
+ {
86
+ out.println( "<h2>" + heading + "</h2>" );
87
+ out.println( "<table><tr><th>" + name + "</th><th>Value</th></tr>" );
88
+ }
89
+
90
+ private void writeRow( PrintWriter out, String name, String value )
91
+ {
92
+ out.println( String.format( "<tr><td>%s</td><td>%s</td></tr>",
93
+ name, value ) );
94
+ }
95
+
96
+ private static final long serialVersionUID = 1L;
97
+ }
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env jruby
2
+ #.hashdot.profile += jruby-shortlived
3
+ #--
4
+ # Copyright (C) 2008 David Kellum
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
7
+ # may not use this file except in compliance with the License. You
8
+ # may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ # implied. See the License for the specific language governing
16
+ # permissions and limitations under the License.
17
+ #++
18
+
19
+ TEST_DIR = File.dirname(__FILE__)
20
+
21
+ $LOAD_PATH.unshift File.join( TEST_DIR, "..", "lib" )
22
+
23
+ require 'rubygems'
24
+
25
+ # Disable jetty logging if slf4j is available
26
+ begin
27
+ gem( 'slf4j', '~> 1.5' )
28
+ require 'slf4j'
29
+ require 'slf4j/nop'
30
+ rescue Gem::LoadError
31
+ end
32
+
33
+ require 'jetty'
34
+ require 'jetty/test-servlets'
35
+ require 'test/unit'
36
+ require 'net/http'
37
+
38
+ class TestJetty < Test::Unit::TestCase
39
+
40
+ def default_factory
41
+ factory = Jetty::ServerFactory.new
42
+ factory.max_threads = 1
43
+ factory.stop_at_shutdown = false
44
+ factory
45
+ end
46
+
47
+ def test_start_stop
48
+ 10.times do
49
+ factory = default_factory
50
+ factory.static_contexts[ '/' ] = TEST_DIR
51
+ server = factory.create
52
+ server.start
53
+ assert( server.is_started )
54
+ assert( server.connectors[0].local_port > 0 )
55
+ server.stop
56
+ assert( server.is_stopped )
57
+ end
58
+ end
59
+
60
+ def test_static_context
61
+ factory = default_factory
62
+ factory.static_contexts[ '/' ] = TEST_DIR
63
+ server = factory.create
64
+ server.start
65
+ port = server.connectors[0].local_port
66
+ test_text = Net::HTTP.get( 'localhost', '/test.txt', port )
67
+ assert_equal( File.read( File.join( TEST_DIR, 'test.txt' ) ), test_text )
68
+ server.stop
69
+ end
70
+
71
+
72
+ import 'org.mortbay.jetty.handler.AbstractHandler'
73
+ class TestHandler < AbstractHandler
74
+ TEST_TEXT = 'test handler text'
75
+
76
+ def handle( target, request, response, dispatch )
77
+ response.content_type = "text/plain"
78
+ response.writer.write( TEST_TEXT )
79
+ request.handled = true
80
+ end
81
+ end
82
+
83
+
84
+ def test_custom_handler
85
+ factory = default_factory
86
+ def factory.create_pre_handlers
87
+ super << TestHandler.new
88
+ end
89
+ server = factory.create
90
+ server.start
91
+ port = server.connectors[0].local_port
92
+ assert_equal( TestHandler::TEST_TEXT,
93
+ Net::HTTP.get( 'localhost', '/whatever', port ) )
94
+ server.stop
95
+ end
96
+
97
+
98
+ import 'javax.servlet.http.HttpServlet'
99
+ class TestServlet < HttpServlet
100
+ def initialize( text )
101
+ super()
102
+ @text = text
103
+ end
104
+
105
+ def doGet( request, response )
106
+ response.content_type = "text/plain"
107
+ response.writer.write( @text )
108
+ end
109
+ end
110
+
111
+ def test_servlet_handler
112
+ factory = default_factory
113
+ factory.set_context_servlets( '/some',
114
+ { '/test' => TestServlet.new( 'resp-test' ),
115
+ '/other' => TestServlet.new( 'resp-other' ) } )
116
+
117
+ factory.set_context_servlets( '/',
118
+ { '/one' => TestServlet.new( 'resp-one' ),
119
+ '/snoop' => Jetty::TestServlets::SnoopServlet.new } )
120
+
121
+ server = factory.create
122
+ server.start
123
+ port = server.connectors[0].local_port
124
+
125
+ assert_equal( 'resp-test',
126
+ Net::HTTP.get( 'localhost', '/some/test', port ) )
127
+ assert_equal( 'resp-other',
128
+ Net::HTTP.get( 'localhost', '/some/other', port ) )
129
+ assert_equal( 'resp-one',
130
+ Net::HTTP.get( 'localhost', '/one', port ) )
131
+
132
+ response = Net::HTTP.get_response( 'localhost', '/', port )
133
+ assert( response.is_a?( Net::HTTPNotFound ) )
134
+
135
+ response = Net::HTTP.get_response( 'localhost', '/snoop', port )
136
+ assert( response.is_a?( Net::HTTPSuccess ) )
137
+
138
+ server.stop
139
+ end
140
+
141
+ def test_webapp
142
+ factory = default_factory
143
+ index_html = File.read(
144
+ File.join( Jetty::TestServlets::WEBAPP_TEST_EXPANDED, 'index.html' ) )
145
+
146
+ factory.webapp_contexts[ '/test' ] = Jetty::TestServlets::WEBAPP_TEST_WAR
147
+ factory.webapp_contexts[ '/expanded' ] = Jetty::TestServlets::WEBAPP_TEST_EXPANDED
148
+
149
+ server = factory.create
150
+ server.start
151
+ port = server.connectors[0].local_port
152
+
153
+ assert_equal( index_html, Net::HTTP.get( 'localhost', '/test/', port ) )
154
+ assert_equal( index_html, Net::HTTP.get( 'localhost', '/expanded/', port ) )
155
+
156
+ response = Net::HTTP.get_response( 'localhost', '/test/snoop/info?i=33', port )
157
+ assert( response.is_a?( Net::HTTPSuccess ) )
158
+
159
+ server.stop
160
+ end
161
+ end
data/webapps/test.war ADDED
Binary file
@@ -0,0 +1,28 @@
1
+ <!DOCTYPE web-app PUBLIC
2
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
3
+ "http://java.sun.com/dtd/web-app_2_3.dtd" >
4
+
5
+ <web-app>
6
+ <display-name>Gravitext Test Webapp</display-name>
7
+
8
+ <servlet>
9
+ <servlet-name>PerfTest</servlet-name>
10
+ <servlet-class>com.gravitext.testservlets.PerfTestServlet</servlet-class>
11
+ </servlet>
12
+
13
+ <servlet>
14
+ <servlet-name>Snoop</servlet-name>
15
+ <servlet-class>com.gravitext.testservlets.SnoopServlet</servlet-class>
16
+ </servlet>
17
+
18
+ <servlet-mapping>
19
+ <servlet-name>PerfTest</servlet-name>
20
+ <url-pattern>/perf</url-pattern>
21
+ </servlet-mapping>
22
+
23
+ <servlet-mapping>
24
+ <servlet-name>Snoop</servlet-name>
25
+ <url-pattern>/snoop/*</url-pattern>
26
+ </servlet-mapping>
27
+
28
+ </web-app>
@@ -0,0 +1,11 @@
1
+ <html>
2
+ <body>
3
+ <h2>RJack Jetty Gem, Test Webapp</h2>
4
+
5
+ <ul>
6
+ <li><a href="perf?size=512&amp;burn=2000&amp;count=3">PerfTestServlet</a></li>
7
+ <li><a href="snoop">SnoopServlet</a></li>
8
+ </ul>
9
+
10
+ </body>
11
+ </html>
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ required_ruby_version: !ruby/object:Gem::Requirement
3
+ requirements:
4
+ - - '>='
5
+ - !ruby/object:Gem::Version
6
+ version: "0"
7
+ version:
8
+ email:
9
+ - dek-ruby@gravitext.com
10
+ cert_chain: []
11
+
12
+ summary: 'A gem packaging of the {Jetty Web Server}[http://www.mortbay.org/jetty/] for
13
+ JRuby: * Provides jetty, jetty-util, servlet-api, and jetty-rewrite-handler jars'
14
+ post_install_message:
15
+ extra_rdoc_files:
16
+ - History.txt
17
+ - Manifest.txt
18
+ - README.txt
19
+ homepage: http://rjack.rubyforge.org
20
+ signing_key:
21
+ name: jetty
22
+ rdoc_options:
23
+ - --main
24
+ - README.txt
25
+ autorequire:
26
+ rubyforge_project: rjack
27
+ executables:
28
+ - jetty-service
29
+ description: 'A gem packaging of the {Jetty Web Server}[http://www.mortbay.org/jetty/] for
30
+ JRuby: * Provides jetty, jetty-util, servlet-api, and jetty-rewrite-handler jars.
31
+ * A Jetty::ServerFactory for simple programmatic server setup in ruby. * A set
32
+ of Jetty::TestServlets containing a SnoopServlet and PerfTestServlet (implemented
33
+ in Java). * A jetty-service bin script for easy testing from the command line. Note
34
+ that JSP support is provided separately in the companion jetty-jsp[http://rjack.rubyforge.org/jetty-jsp/]
35
+ gem.'
36
+ specification_version: 2
37
+ default_executable:
38
+ files:
39
+ - History.txt
40
+ - Manifest.txt
41
+ - README.txt
42
+ - Rakefile
43
+ - pom.xml
44
+ - assembly.xml
45
+ - bin/jetty-service
46
+ - lib/jetty.rb
47
+ - lib/jetty/base.rb
48
+ - lib/jetty/rewrite.rb
49
+ - lib/jetty/test-servlets.rb
50
+ - src/main/java/com/gravitext/testservlets/PerfTestServlet.java
51
+ - src/main/java/com/gravitext/testservlets/SnoopServlet.java
52
+ - test/test_jetty.rb
53
+ - webapps/test.war
54
+ - webapps/test/WEB-INF/web.xml
55
+ - webapps/test/index.html
56
+ - lib/jetty/jetty-6.1.11.jar
57
+ - lib/jetty/jetty-util-6.1.11.jar
58
+ - lib/jetty/jetty-rewrite-handler-6.1.11.jar
59
+ - lib/jetty/servlet-api-2.5-6.1.11.jar
60
+ - lib/jetty/gravitext-testservlets-1.0.jar
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ extensions: []
68
+
69
+ rubygems_version: 1.3.1
70
+ requirements: []
71
+
72
+ authors:
73
+ - David Kellum
74
+ date: 2008-11-03 08:00:00 +00:00
75
+ platform: ruby
76
+ test_files:
77
+ - test/test_jetty.rb
78
+ version: !ruby/object:Gem::Version
79
+ version: 6.1.11.1
80
+ require_paths:
81
+ - lib
82
+ dependencies:
83
+ - !ruby/object:Gem::Dependency
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: 1.8.2
89
+ version:
90
+ type: :development
91
+ version_requirement:
92
+ name: hoe
93
+ bindir: bin
94
+ has_rdoc: true