diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy index 3ec1ece..7d2f86b 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -22,6 +22,8 @@ import pl.touk.mockserver.api.response.Parameter import javax.xml.bind.JAXBContext import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArraySet +import java.util.concurrent.Executor +import java.util.concurrent.Executors import static pl.touk.mockserver.server.Util.createResponse @@ -32,12 +34,14 @@ class HttpMockServer { private final Map childServers = new ConcurrentHashMap<>() private final Set mockNames = new CopyOnWriteArraySet<>() private final ConfigObject configuration = new ConfigObject() + private final Executor executor private static final JAXBContext requestJaxbContext = JAXBContext.newInstance(AddMock.package.name, AddMock.classLoader) - HttpMockServer(int port = 9999, ConfigObject initialConfiguration = new ConfigObject()) { - httpServerWraper = new HttpServerWraper(port) + HttpMockServer(int port = 9999, ConfigObject initialConfiguration = new ConfigObject(), int threads = 10) { + executor = Executors.newFixedThreadPool(threads) + httpServerWraper = new HttpServerWraper(port, executor) initialConfiguration.values()?.each { ConfigObject co -> addMock(co) @@ -172,7 +176,7 @@ class HttpMockServer { private HttpServerWraper getOrCreateChildServer(int mockPort) { HttpServerWraper child = childServers[mockPort] if (!child) { - child = new HttpServerWraper(mockPort) + child = new HttpServerWraper(mockPort, executor) childServers.put(mockPort, child) } return child diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy index b13b7a2..e1ef2f8 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy @@ -5,7 +5,7 @@ import com.sun.net.httpserver.HttpServer import groovy.transform.PackageScope import groovy.util.logging.Slf4j -import java.util.concurrent.Executors +import java.util.concurrent.Executor @Slf4j @PackageScope @@ -15,11 +15,11 @@ class HttpServerWraper { private List executors = [] - HttpServerWraper(int port) { + HttpServerWraper(int port, Executor executor) { this.port = port InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port) httpServer = HttpServer.create(addr, 0) - httpServer.executor = Executors.newWorkStealingPool() + httpServer.executor = executor log.info("Http server starting on port $port...") httpServer.start() log.info('Http server is started') diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy index aba7f6e..0b8d42a 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy @@ -21,9 +21,11 @@ class Main { private static HttpMockServer startMockServer(String... args) { switch (args.length) { case 1: - return new HttpMockServer(args[0] as int) + return new HttpMockServer(args[0] as int, new ConfigObject()) case 2: return new HttpMockServer(args[0] as int, new ConfigSlurper().parse(new File(args[1]).toURI().toURL())) + case 3: + return new HttpMockServer(args[0] as int, new ConfigSlurper().parse(new File(args[1]).toURI().toURL()), args[2] as int) default: return new HttpMockServer() } diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy index db67f47..83c3c7e 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -103,7 +103,9 @@ class Mock implements Comparable { } compilerConfiguration.addCompilationCustomizers(customizer) GroovyShell sh = new GroovyShell(this.class.classLoader, compilerConfiguration); - return sh.evaluate(predicate) as Closure + Closure closure = sh.evaluate(predicate) as Closure + sh.resetLoadedClasses() + return closure } void setResponse(String response) { diff --git a/pom.xml b/pom.xml index 35dac1a..635fed9 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ UTF-8 UTF-8 3.1 - 2.4.1 + 2.4.11 4.3.5 1.0-groovy-2.4 3.3.2