Created
September 19, 2009 12:27
-
-
Save hakunin/189475 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'java' | |
| require 'rubygems' | |
| rb_root = File.dirname(__FILE__) | |
| app_root = File.dirname(__FILE__)+'/../' | |
| $app_root = app_root | |
| $rb_root = rb_root | |
| # get the jars | |
| Dir[app_root+"./Java/jetty/*.jar"].each { |jar| require jar } | |
| Dir[app_root+"./Java/jsdk/*.jar"].each { |jar| require jar } | |
| Dir[app_root+"./Java/atmosphere/*.jar"].each { |jar| require jar } | |
| Dir[app_root+"./*.jar"].each { |jar| require jar } | |
| require 'rack' | |
| require 'jruby/rack' | |
| require 'json' | |
| #include them, so the namespaces doesn't clog the code | |
| include_class 'org.atmosphere.cpr.AtmosphereHandler' | |
| include_class 'org.atmosphere.cpr.AtmosphereServlet' | |
| include_class 'javax.servlet.http.HttpServlet' | |
| include_class 'org.mortbay.jetty.Server' | |
| include_class 'org.mortbay.jetty.servlet.Context' | |
| include_class 'org.mortbay.jetty.servlet.ServletHolder' | |
| include_class 'org.mortbay.jetty.servlet.DefaultServlet' | |
| include_class 'org.mortbay.jetty.handler.ContextHandlerCollection' | |
| include_class 'org.mortbay.jetty.handler.DefaultHandler' | |
| include_class 'org.mortbay.jetty.handler.ResourceHandler' | |
| include_class 'org.mortbay.jetty.handler.HandlerList' | |
| include_class 'org.mortbay.jetty.Handler' | |
| include_class 'org.jruby.rack.RackServletContextListener' | |
| include_class 'org.jruby.rack.servlet.ServletRackContext' | |
| #setup and start the server | |
| require rb_root+"/echo.rb" | |
| require rb_root+"/../pocket_ruby/pocket_ruby/fw/pocket_ruby.rb" | |
| # All the fun begins here | |
| server = Server.new(80) | |
| # serve static files under '/public' | |
| context_static = Context.new(server, '/public', 0) | |
| resource_handler = ResourceHandler.new | |
| context_static.setHandler(resource_handler) | |
| resource_handler.setResourceBase(app_root+"/public"); | |
| context_static.setResourceBase('./') | |
| context_static.setContextPath('/public') | |
| # atmosphere handlers under '/atmosphere' | |
| Context.new(server, "/atmosphere", Context::SESSIONS). | |
| addServlet( | |
| ServletHolder.new( | |
| servlet = AtmosphereServlet.new() | |
| ), | |
| '/') | |
| servlet.addAtmosphereHandler( | |
| "/echo", $echo_servlet = EchoServlet.new() | |
| ) | |
| #this fixes output from rack middleware and such | |
| class JRuby::Rack::ServletLog | |
| def write(msg) | |
| Kernel.puts msg | |
| end | |
| end | |
| # our rack app gets initialized here | |
| class MyFactory < org.jruby.rack.DefaultRackApplicationFactory | |
| def createRackServletWrapper(runtime, rackup) | |
| # lets create our own app in this runtime insted :) | |
| require 'rack/handler/servlet.rb' | |
| Rack::Handler::Servlet.new(Rack::Builder.new {( | |
| use Rack::CommonLogger | |
| use Rack::ShowExceptions | |
| use Rack::Session::Cookie, { | |
| :key => 'rack.session', | |
| :expire_after => 2592000, | |
| :secret => 'antiperspirant pro zeny' | |
| } | |
| use Rack::Static, :urls => ['/public'], :root => $app_root | |
| runner = PocketRuby::Runner.new($rb_root) | |
| runner.on_app_instantiate = lambda { |app| | |
| app.atmosphere = $echo_servlet | |
| } | |
| run runner | |
| )}.to_app) | |
| end | |
| end | |
| # mount rack factory | |
| c = Context.new(server, "/", Context::SESSIONS) | |
| c.add_filter("org.jruby.rack.RackFilter", "/*", Handler::DEFAULT) | |
| c.set_resource_base(File.dirname(__FILE__)) | |
| c.add_event_listener(RackServletContextListener.new(MyFactory.new)) | |
| c.set_init_params(java.util.HashMap.new( | |
| 'public.root' => app_root+'/public', | |
| 'org.mortbay.jetty.servlet.Default.relativeResourceBase' => '/public', | |
| 'rackup' => 'raise "HAHA! no rackup needed."', | |
| 'jruby.max.runtimes' => '1')) | |
| c.add_servlet(ServletHolder.new(DefaultServlet.new), "/*") | |
| server.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment