コード例 #1
0
  /**
   * @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);
    }
  }