Я успешно создан автономный сервер Scalatra/Jetty, используя официальные инструкции от Scalatra (http://www.scalatra.org/2.3/guides/deployment/standalone.html)Отладка автономного сервера причала - как указать однопоточный режим?
я отладки под Ensime, и хотел бы ограничить количество потоков обработки сообщений к одному один - так что одноэтапный метод сервлетов будет проще.
Я использовал этот код для ее достижения:
package ...
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.{DefaultServlet, ServletContextHandler}
import org.eclipse.jetty.webapp.WebAppContext
import org.scalatra.servlet.ScalatraListener
import org.eclipse.jetty.util.thread.QueuedThreadPool
import org.eclipse.jetty.server.ServerConnector
object JettyLauncher {
def main(args: Array[String]) {
val port =
if (System.getenv("PORT") != null)
System.getenv("PORT").toInt
else
4080
// DEBUGGING MODE BEGINS
val threadPool = new QueuedThreadPool()
threadPool.setMaxThreads(8)
val server = new Server(threadPool)
val connector = new ServerConnector(server)
connector.setPort(port)
server.setConnectors(Array(connector))
// DEBUGGING MODE ENDS
val context = new WebAppContext()
context setContextPath "/"
context.setResourceBase("src/main/webapp")
context.addEventListener(new ScalatraListener)
context.addServlet(classOf[DefaultServlet], "/")
server.setHandler(context)
server.start
server.join
}
}
Он работает отлично - за одной незначительной детали, за исключением ...
Я не могу сказать Jetty использовать 1 нить - минимальный значение равно 8!
Если я делаю, это то, что происходит:
$ sbt assembly
...
$ java -jar ./target/scala-2.11/CurrentVersions-assembly-0.1.0-SNAPSHOT.jar
18:13:27.059 [main] INFO org.eclipse.jetty.util.log - Logging initialized @41ms
18:13:27.206 [main] INFO org.eclipse.jetty.server.Server - jetty-9.1.z-SNAPSHOT
18:13:27.220 [main] WARN o.e.j.u.component.AbstractLifeCycle - FAILED [email protected]: java.lang.IllegalStateException: Insufficient max threads in ThreadPool: max=1 < needed=8
java.lang.IllegalStateException: Insufficient max threads in ThreadPool: max=1 < needed=8
... поэтому вы видите setMaxThreads(8)
вместо setMaxThreads(1)
в моем коде выше.
Любые идеи, почему это происходит?