From f9b7908c1fe0c04e9dcb93b4261b9fe0b4bb1617 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 14 Jul 2015 19:34:58 +1200 Subject: Reduce dependencies on data manager (fix #954) --- src/org/traccar/Context.java | 24 +++--- src/org/traccar/ServerManager.java | 4 +- src/org/traccar/database/ConnectionManager.java | 17 +++-- src/org/traccar/database/PermissionsManager.java | 10 ++- src/org/traccar/http/WebServer.java | 94 ++++++++++++------------ 5 files changed, 76 insertions(+), 73 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java index 707e6edb6..f1fe443ed 100644 --- a/src/org/traccar/Context.java +++ b/src/org/traccar/Context.java @@ -97,10 +97,7 @@ public class Context { dataManager = new DataManager(config); identityManager = dataManager; - connectionManager = new ConnectionManager(); - if (!config.getBoolean("web.old")) { - permissionsManager = new PermissionsManager(); - } + connectionManager = new ConnectionManager(dataManager); if (config.getBoolean("geocoder.enable")) { String type = config.getString("geocoder.type", "google"); @@ -119,22 +116,21 @@ public class Context { } if (config.getBoolean("web.enable")) { - webServer = new WebServer(config); + if (!config.getBoolean("web.old")) { + permissionsManager = new PermissionsManager(dataManager); + webServer = new WebServer(config); + } else { + webServer = new WebServer(config, dataManager.getDataSource()); + } } serverManager = new ServerManager(); - - connectionManager.init(dataManager); - serverManager.init(); } - /** - * Initialize context for unit testing - */ - public static void init(IdentityManager identityManager) { + public static void init(IdentityManager testIdentityManager) { config = new Config(); - connectionManager = new ConnectionManager(); - Context.identityManager = identityManager; + connectionManager = new ConnectionManager(null); + identityManager = testIdentityManager; } } diff --git a/src/org/traccar/ServerManager.java b/src/org/traccar/ServerManager.java index 7fbefc94e..e42e6dcd6 100644 --- a/src/org/traccar/ServerManager.java +++ b/src/org/traccar/ServerManager.java @@ -33,9 +33,9 @@ public class ServerManager { private final List serverList = new LinkedList<>(); - public void init() throws Exception { + public ServerManager() throws Exception { - List names = new LinkedList(); + List names = new LinkedList<>(); String packageName = "org.traccar.protocol"; String packagePath = packageName.replace('.', '/'); URL packageUrl = Thread.currentThread().getContextClassLoader().getResource(packagePath); diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index 0d357a41c..dc125d7b0 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -31,18 +31,19 @@ import org.traccar.model.Position; public class ConnectionManager { - private Map activeDevices = new HashMap<>(); + private final Map activeDevices = new HashMap<>(); private final Map positions = new HashMap<>(); private final Map> listeners = new HashMap<>(); - public void init(DataManager dataManager) { - try { - Collection positions = dataManager.getLatestPositions(); - for (Position position : positions) { - this.positions.put(position.getDeviceId(), position); + public ConnectionManager(DataManager dataManager) { + if (dataManager != null) { + try { + for (Position position : dataManager.getLatestPositions()) { + this.positions.put(position.getDeviceId(), position); + } + } catch (SQLException error) { + Log.warning(error); } - } catch (SQLException error) { - Log.warning(error); } } diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 40783ad98..cfbbb9a39 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -21,13 +21,14 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import org.traccar.Context; import org.traccar.helper.Log; import org.traccar.model.Permission; import org.traccar.model.User; public class PermissionsManager { + private final DataManager dataManager; + private final Map users = new HashMap<>(); private final Map> permissions = new HashMap<>(); @@ -39,7 +40,8 @@ public class PermissionsManager { return permissions.get(userId); } - public PermissionsManager() { + public PermissionsManager(DataManager dataManager) { + this.dataManager = dataManager; refresh(); } @@ -47,10 +49,10 @@ public class PermissionsManager { users.clear(); permissions.clear(); try { - for (User user : Context.getDataManager().getUsers()) { + for (User user : dataManager.getUsers()) { users.put(user.getId(), user); } - for (Permission permission : Context.getDataManager().getPermissions()) { + for (Permission permission : dataManager.getPermissions()) { getNotNull(permission.getUserId()).add(permission.getDeviceId()); } } catch (SQLException error) { diff --git a/src/org/traccar/http/WebServer.java b/src/org/traccar/http/WebServer.java index a9238964c..785d817e8 100644 --- a/src/org/traccar/http/WebServer.java +++ b/src/org/traccar/http/WebServer.java @@ -17,6 +17,7 @@ package org.traccar.http; import java.net.InetSocketAddress; import javax.naming.InitialContext; +import javax.sql.DataSource; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; @@ -25,7 +26,6 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.webapp.WebAppContext; import org.traccar.Config; -import org.traccar.Context; import org.traccar.helper.Log; /** @@ -34,8 +34,8 @@ import org.traccar.helper.Log; public class WebServer { private Server server; - - public WebServer(Config config) { + + private void initServer(Config config) { String address = config.getString("web.address"); int port = config.getInteger("web.port", 8082); @@ -44,53 +44,57 @@ public class WebServer { } else { server = new Server(new InetSocketAddress(address, port)); } + } + + public WebServer(Config config, DataSource dataSource) { + + initServer(config); + + try { + javax.naming.Context context = new InitialContext(); + context.bind("java:/DefaultDS", dataSource); + } catch (Exception error) { + Log.warning(error); + } - if (!config.getBoolean("web.old")) { - - ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); - servletHandler.setContextPath("/api"); - servletHandler.addServlet(new ServletHolder(new AsyncServlet()), "/async/*"); - servletHandler.addServlet(new ServletHolder(new ServerServlet()), "/server/*"); - servletHandler.addServlet(new ServletHolder(new UserServlet()), "/user/*"); - servletHandler.addServlet(new ServletHolder(new DeviceServlet()), "/device/*"); - servletHandler.addServlet(new ServletHolder(new PositionServlet()), "/position/*"); - servletHandler.addServlet(new ServletHolder(new CommandsServlet()), "/commands/*"); - servletHandler.addServlet(new ServletHolder(new MainServlet()), "/*"); - - /*ResourceHandler mobileResourceHandler = new ResourceHandler(); - mobileResourceHandler.setResourceBase(properties.getProperty("web.mobile")); - mobileResourceHandler.setWelcomeFiles(new String[] {"index.html"}); - ContextHandler mobileContext = new ContextHandler("/m"); - mobileContext.setHandler(mobileResourceHandler);*/ - - ResourceHandler resourceHandler = new ResourceHandler(); - resourceHandler.setResourceBase(config.getString("web.path")); - if (config.getBoolean("web.debug")) { - resourceHandler.setWelcomeFiles(new String[] { "debug.html" }); - } else { - resourceHandler.setWelcomeFiles(new String[] { "release.html" }); - } - - HandlerList handlerList = new HandlerList(); - handlerList.setHandlers(new Handler[] {servletHandler, resourceHandler}); - - server.setHandler(handlerList); + WebAppContext webapp = new WebAppContext(); + webapp.setContextPath("/"); + webapp.setWar(config.getString("web.application")); + server.setHandler(webapp); + } + public WebServer(Config config) { + + initServer(config); + + ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); + servletHandler.setContextPath("/api"); + servletHandler.addServlet(new ServletHolder(new AsyncServlet()), "/async/*"); + servletHandler.addServlet(new ServletHolder(new ServerServlet()), "/server/*"); + servletHandler.addServlet(new ServletHolder(new UserServlet()), "/user/*"); + servletHandler.addServlet(new ServletHolder(new DeviceServlet()), "/device/*"); + servletHandler.addServlet(new ServletHolder(new PositionServlet()), "/position/*"); + servletHandler.addServlet(new ServletHolder(new CommandsServlet()), "/commands/*"); + servletHandler.addServlet(new ServletHolder(new MainServlet()), "/*"); + + /*ResourceHandler mobileResourceHandler = new ResourceHandler(); + mobileResourceHandler.setResourceBase(properties.getProperty("web.mobile")); + mobileResourceHandler.setWelcomeFiles(new String[] {"index.html"}); + ContextHandler mobileContext = new ContextHandler("/m"); + mobileContext.setHandler(mobileResourceHandler);*/ + + ResourceHandler resourceHandler = new ResourceHandler(); + resourceHandler.setResourceBase(config.getString("web.path")); + if (config.getBoolean("web.debug")) { + resourceHandler.setWelcomeFiles(new String[] { "debug.html" }); } else { + resourceHandler.setWelcomeFiles(new String[] { "release.html" }); + } - try { - javax.naming.Context context = new InitialContext(); - context.bind("java:/DefaultDS", Context.getDataManager().getDataSource()); - } catch (Exception error) { - Log.warning(error); - } - - WebAppContext webapp = new WebAppContext(); - webapp.setContextPath("/"); - webapp.setWar(config.getString("web.application")); - server.setHandler(webapp); + HandlerList handlerList = new HandlerList(); + handlerList.setHandlers(new Handler[] {servletHandler, resourceHandler}); - } + server.setHandler(handlerList); } public void start() { -- cgit v1.2.3