/** * @param args the command line arguments * @throws IOException * @throws Exception */ public static void main(String[] args) throws IOException, Exception { checkUserHome(); GeneralResourceProvider.registerDrivers(); parseArgs(args); if (url == null || url.isEmpty()) { throw new IllegalArgumentException("Application url (-url parameter) is required."); } SSLContext sslContext = PlatypusConnection.createSSLContext(); ScriptedDatabasesClient serverCoreDbClient; if (url.toLowerCase().startsWith("file")) { File f = new File(new URI(url)); if (f.exists() && f.isDirectory()) { Logger.getLogger(ServerMain.class.getName()) .log(Level.INFO, "Application is located at: {0}", f.getPath()); GeneralResourceProvider.registerDrivers(); ScriptsConfigs scriptsConfigs = new ScriptsConfigs(); ServerTasksScanner tasksScanner = new ServerTasksScanner(scriptsConfigs); ApplicationSourceIndexer indexer = new ApplicationSourceIndexer(f.getPath(), tasksScanner); // TODO: add command line argument "watch" after watcher refactoring // indexer.watch(); Scripts.initBIO(threadsConfig.getMaxServicesTreads()); int maxWorkerThreads = parseNumWorkerThreads(); ThreadPoolExecutor serverProcessor = new ThreadPoolExecutor( maxWorkerThreads, maxWorkerThreads, 3L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new DeamonThreadFactory("TSA-", false)); serverProcessor.allowCoreThreadTimeOut(true); Scripts.initTasks( (Runnable aTask) -> { serverProcessor.submit(aTask); }); serverCoreDbClient = new ScriptedDatabasesClient( defDatasource, indexer, true, tasksScanner.getValidators(), threadsConfig.getMaxJdbcTreads()); QueriesProxy<SqlQuery> queries = new LocalQueriesProxy(serverCoreDbClient, indexer); serverCoreDbClient.setQueries(queries); PlatypusServer server = new PlatypusServer( indexer, new LocalModulesProxy(indexer, new ModelsDocuments(), appElement), queries, serverCoreDbClient, sslContext, parseListenAddresses(), parsePortsProtocols(), parsePortsSessionIdleTimeouts(), parsePortsSessionIdleCheckIntervals(), serverProcessor, scriptsConfigs, appElement); serverCoreDbClient.setContextHost(server); ScriptedResource.init(server, ScriptedResource.lookupPlatypusJs()); SensorsFactory.init(server.getAcceptorsFactory()); RetranslateFactory.init(server.getRetranslateFactory()); // server.start(tasksScanner.getResidents(), tasksScanner.getAcceptors()); } else { throw new IllegalArgumentException( "applicationUrl: " + url + " doesn't point to existent directory."); } } else { throw new Exception("Unknown protocol in url: " + url); } }