com.sun.grizzly.jruby.rack.SingleThreadedRackAdapter Maven / Gradle / Ivy
package com.sun.grizzly.jruby.rack;
import com.sun.grizzly.jruby.RackGrizzlyAdapter;
import com.sun.grizzly.scripting.pool.DynamicPool;
import com.sun.grizzly.scripting.pool.DynamicPoolConfig;
import org.glassfish.scripting.jruby.common.config.JRubyRuntimeConfig;
/**
* This is a single threaded Rack Adapter - basically it is used when the Ruby
* framework is single threaded and we need multiple JRuby runtimes to process
* concurrent requests.
*/
public class SingleThreadedRackAdapter implements RackAdapter {
private final RackApplicationFactory myFactory;
private final DynamicPoolConfig myConfig;
private DynamicPool pool;
private final int numThreads;
public SingleThreadedRackAdapter(RackApplicationFactory f, RackGrizzlyAdapter settings) {
JRubyRuntimeConfig config = settings.config.runtimeConfig();
myConfig = new DynamicPoolConfig(config.getInitRuntime(), -1, config.getMaxRuntime(), config.getMinRuntime(), -1, -1, -1, settings.async(), false);
// Using defaults for, in order, maximum generating, downThreshold, queueThreshold, newThreshold
numThreads = settings.getNumThreads();
myFactory = f;
RackApplicationPoolAdapter adapter = new RackApplicationPoolAdapter(myFactory, settings);
pool = new DynamicPool(adapter, myConfig);
pool.start(numThreads);
//TODO: Need to figure out how to update the pool monitoring data
settings.config.jRubyRuntimePoolProvider.runtimePoolStartEvent(settings.config.getAppName(), settings.config.runtimeConfig().getMinRuntime(),
settings.config.runtimeConfig().getMaxRuntime(),
myConfig.getNumberOfObjects(),
settings.config.runtimeConfig().getMaxRuntime() - myConfig.getNumberOfObjects(),
myConfig.getQueueThreashold(),
myConfig.getDownThreashold(),
myConfig.getNewThreashold()
);
}
// Shuts the adapter down
public void shutdown() {
myFactory.destroy();
pool.stop();
}// Returns an application suitable for processing a request
public RackApplication getApp() {
return pool.borrowObject();
}// Indicates that the app is done processing the request
public void returnApp(RackApplication returned) {
pool.returnObject(returned);
}
public RackApplicationFactory getFactory() {
return myFactory;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy