From 01eb7e168333c1d9ac5016153917cede71c10cca Mon Sep 17 00:00:00 2001 From: Gianlu Date: Sun, 11 Mar 2018 12:41:57 +0100 Subject: [PATCH] Not recreating handler for every request --- .../gianlu/pyxreloaded/paths/AjaxPath.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gianlu/pyxreloaded/paths/AjaxPath.java b/src/main/java/com/gianlu/pyxreloaded/paths/AjaxPath.java index e30705f..ad2cc09 100644 --- a/src/main/java/com/gianlu/pyxreloaded/paths/AjaxPath.java +++ b/src/main/java/com/gianlu/pyxreloaded/paths/AjaxPath.java @@ -14,8 +14,11 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Parameter; +import java.util.HashMap; +import java.util.Map; public class AjaxPath extends BaseCahHandler { + private final Map, BaseHandler> handlers = new HashMap<>(); @Override protected JsonElement handleRequest(@Nullable String op, @Nullable User user, Parameters params, HttpServerExchange exchange) throws StatusException { @@ -25,17 +28,21 @@ protected JsonElement handleRequest(@Nullable String op, @Nullable User user, Pa BaseHandler handler; Class cls = Handlers.LIST.get(op); if (cls != null) { - try { - Constructor constructor = cls.getConstructors()[0]; - Parameter[] parameters = constructor.getParameters(); - Object[] objects = new Object[parameters.length]; - - for (int i = 0; i < parameters.length; i++) - objects[i] = Providers.get(parameters[i].getAnnotations()[0].annotationType()).get(); - - handler = (BaseHandler) constructor.newInstance(objects); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException ex) { - throw new CahException(Consts.ErrorCode.BAD_OP, ex); + handler = handlers.get(cls); + if (handler == null) { + try { + Constructor constructor = cls.getConstructors()[0]; + Parameter[] parameters = constructor.getParameters(); + Object[] objects = new Object[parameters.length]; + + for (int i = 0; i < parameters.length; i++) + objects[i] = Providers.get(parameters[i].getAnnotations()[0].annotationType()).get(); + + handler = (BaseHandler) constructor.newInstance(objects); + handlers.put(cls, handler); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException ex) { + throw new CahException(Consts.ErrorCode.BAD_OP, ex); + } } } else { throw new CahException(Consts.ErrorCode.BAD_OP);