resin.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,949 行 · 第 1/3 页

JAVA
1,949
字号
  public void setWatchdogManager(ConfigProgram program)  {  }  /**   * Configures the TM.   */  @Deprecated  public TransactionManager createTransactionManager()    throws ConfigException  {    log().warning(L().l("<transaction-manager> tag belongs in <management>"));    return new TransactionManager(this);  }  public Management createManagement()  {    if (_management == null) {      _management = new Management();      _management.setResin(this);    }    return _management;  }  @Deprecated  public Path getManagementPath()  {    return _managementPath;  }  /**   * Adds a new security provider   */  public void addSecurityProvider(Class providerClass)    throws Exception  {    if (! Provider.class.isAssignableFrom(providerClass))      throw new ConfigException(L().l("security-provider {0} must implement java.security.Provider",                                    providerClass.getName()));    Security.addProvider((Provider) providerClass.newInstance());  }  /**   * Configures JSP (backwards compatibility).   */  public JspPropertyGroup createJsp()  {    return new JspPropertyGroup();  }  /**   * Ignore the boot configuration   */  public void addBoot(ContainerProgram program)    throws Exception  {  }  /**   * Sets the initial start time.   */  void setInitialStartTime(long now)  {    _initialStartTime = now;  }  /**   * Returns the initial start time.   */  public Date getInitialStartTime()  {    return new Date(_initialStartTime);  }  /**   * Returns the start time.   */  public Date getStartTime()  {    return new Date(_startTime);  }  /**   * Returns the current lifecycle state.   */  public LifecycleState getLifecycleState()  {    return _lifecycle;  }  /**   * Initialize the server.   */  @PostConstruct  public void init()  {    _lifecycle.toInit();  }  /**   * Returns the active server.   */  public Server getServer()  {    return _server;  }  /**   * Returns the management api.   */  public Management getManagement()  {    return _management;  }  /**   * Starts the server.   */  public void start()  {    if (! _lifecycle.toActive())      return;    long start = Alarm.getExactTime();    Thread thread = Thread.currentThread();    ClassLoader oldLoader = thread.getContextClassLoader();        try {      thread.setContextClassLoader(getClassLoader());            startManagement();      // force a GC on start      System.gc();      ClusterServer clusterServer = null;      if (_dynamicServer != null) {	clusterServer = findClusterServer(_serverId);	if (clusterServer != null)	  throw new ConfigException(L().l("dynamic-server '{0}' must not have a static configuration configured in the resin.xml.",					  _serverId));	Cluster cluster = findCluster(_dynamicServer.getCluster());	if (cluster == null) {	  throw new ConfigException(L().l("dynamic-server cluster '{0}' does not exist.  Dynamic servers must be added to an existing cluster.",					  _dynamicServer.getCluster()));	}	if (! cluster.isDynamicServerEnable()) {	  throw new ConfigException(L().l("cluster '{0}' does not allow dynamic servers.  Add a <dynamic-server-enable/> tag to the <cluster> to enable it.",					  cluster.getId()));	}	cluster.addDynamicServer(_serverId,				 _dynamicServer.getAddress(),				 _dynamicServer.getPort());      }      // XXX: get the server      for (Cluster cluster : _clusters) {	cluster.start();      }      clusterServer = findClusterServer(_serverId);      if (clusterServer == null)	throw new ConfigException(L().l("server-id '{0}' has no matching <server> definition.",					_serverId));      _server = clusterServer.startServer();      _server.start();      Environment.start(getClassLoader());      /*	if (! hasListeningPort()) {	log().warning(L().l("-server \"{0}\" has no matching http or srun ports.  Check the resin.xml and -server values.",	_serverId));	}      */      log().severe(this + " started in " + (Alarm.getExactTime() - _startTime) + "ms");    } finally {      thread.setContextClassLoader(oldLoader);    }  }  /**   * Starts the server.   */  public void stop()  {    if (! _lifecycle.toStop())      return;  }  public boolean isDynamicServer()  {    for (int i = 0; i < _clusters.size(); i++) {      Cluster cluster = _clusters.get(i);      if (cluster.isDynamicServerEnable())	return true;    }    return false;  }  public Cluster findCluster(String id)  {    for (int i = 0; i < _clusters.size(); i++) {      Cluster cluster = _clusters.get(i);      if (cluster.getId().equals(id))	return cluster;    }    return null;  }  public ClusterServer findClusterServer(String id)  {    for (int i = 0; i < _clusters.size(); i++) {      Cluster cluster = _clusters.get(i);      ClusterServer server = cluster.findServer(id);      if (server != null)	return server;    }    return null;  }  /**   * Returns true if active.   */  public boolean isActive()  {    return _lifecycle.isActive();  }  /**   * Returns true if the server is closing.   */  public boolean isClosing()  {    return _lifecycle.isDestroying();  }  /**   * Returns true if the server is closed.   */  public boolean isClosed()  {    return _lifecycle.isDestroyed();  }  /**   * Closes the server.   */  public void destroy()  {    if (! _lifecycle.toDestroying())      return;    try {      try {	// notify watchdog thread before starting shutdown	synchronized (this) {	  notifyAll();	}	Socket socket = _pingSocket;	if (socket != null)	  socket.setSoTimeout(1000);      } catch (Throwable e) {	log().log(Level.WARNING, e.toString(), e);      }      try {	Management management = _management;	_management = null;	if (management != null)	  management.destroy();      } catch (Throwable e) {	log().log(Level.WARNING, e.toString(), e);      }      try {	Server server = _server;	_server = null;	if (server != null)	  server.destroy();      } catch (Throwable e) {	log().log(Level.WARNING, e.toString(), e);      }      _threadPoolAdmin.unregister();      if (_isGlobal)	Environment.closeGlobal();      else	_classLoader.destroy();    } finally {      _lifecycle.toDestroy();      if (_mainThread != null)	System.exit(0); // XXX: check exit code with config errors    }  }  private void parseCommandLine(String []argv)    throws Exception  {    int len = argv.length;    int i = 0;    while (i < len) {      RandomUtil.addRandom(argv[i]);      if (i + 1 < len	  && (argv[i].equals("-stdout")	      || argv[i].equals("--stdout"))) {        Path path = Vfs.lookup(argv[i + 1]);        RotateStream stream = RotateStream.create(path);	stream.init();	WriteStream out = stream.getStream();	out.setDisableClose(true);        EnvironmentStream.setStdout(out);	i += 2;      }      else if (i + 1 < len	       && (argv[i].equals("-stderr")		   || argv[i].equals("--stderr"))) {        Path path = Vfs.lookup(argv[i + 1]);        RotateStream stream = RotateStream.create(path);	stream.init();	WriteStream out = stream.getStream();	out.setDisableClose(true);        EnvironmentStream.setStderr(out);	i += 2;      }      else if (i + 1 < len	       && (argv[i].equals("-conf")		   || argv[i].equals("--conf"))) {        _configFile = argv[i + 1];	i += 2;      }      else if (argv[i].equals("-log-directory")               || argv[i].equals("--log-directory")) {        i += 2;      }      else if (argv[i].equals("-config-server")	       || argv[i].equals("--config-server")) {        _configServer = argv[i + 1];        i += 2;      }      else if (i + 1 < len	       && (argv[i].equals("-dynamic-server")		   || argv[i].equals("--dynamic-server"))) {	String []values = argv[i + 1].split(":");	if (values.length == 3) {	  String clusterId = values[0];	  String address = values[1];	  int port = Integer.parseInt(values[2]);	  addDynamicServer(clusterId, address, port);	} else {	  System.out.println("-dynamic-server requires 'cluster:address:port' at '" + argv[i + 1] + "'");	  System.exit(66);	}	i += 2;      }      else if (i + 1 < len	       && (argv[i].equals("-server")		   || argv[i].equals("--server"))) {	setServerId(argv[i + 1]);	i += 2;      }      else if (argv[i].equals("-resin-home")	       || argv[i].equals("--resin-home")) {	_resinHome = Vfs.lookup(argv[i + 1]);	i += 2;      }      else if (argv[i].equals("-root-directory")               || argv[i].equals("--root-directory")               || argv[i].equals("-resin-root")               || argv[i].equals("--resin-root")) {        _rootDirectory = _resinHome.lookup(argv[i + 1]);        i += 2;      }      else if (argv[i].equals("-server-root") // backwards compat	       || argv[i].equals("--server-root")) {	_rootDirectory = _resinHome.lookup(argv[i + 1]);	i += 2;      }      else if (argv[i].equals("-service")) {	JniCauchoSystem.create().initJniBackground();	// windows service	i += 1;      }      else if (argv[i].equals("-version")	       || argv[i].equals("--version")) {	System.out.println(com.caucho.Version.FULL_VERSION);	System.exit(66);      }      else if (argv[i].equals("-watchdog-port")	       || argv[i].equals("--watchdog-port")) {	// watchdog	i += 2;      }      else if (argv[i].equals("-socketwait")	       || argv[i].equals("--socketwait")	       || argv[i].equals("-pingwait")	       || argv[i].equals("--pingwait")) {        int socketport = Integer.parseInt(argv[i + 1]);        Socket socket = null;        for (int k = 0; k < 15 && socket == null; k++) {          try {            socket = new Socket("127.0.0.1", socketport);          } catch (Throwable e) {	    System.out.println(new Date());	    e.printStackTrace();          }          if (socket == null)            Thread.sleep(1000);        }        if (socket == null) {          System.err.println("Can't connect to parent process through socket " + socketport);          System.err.println("Resin needs to connect to its parent.");          System.exit(0);        }	if (argv[i].equals("-socketwait") || argv[i].equals("--socketwait"))          _waitIn = socket.getInputStream();	else	  _pingSocket = socket;        socket.setSoTimeout(60000);	i += 2;      }      else if ("-port".equals(argv[i]) || "--port".equals(argv[i])) {        int fd = Integer.parseInt(argv[i + 1]);	String addr = argv[i + 2];	if ("null".equals(addr))	  addr = null;	int port = Integer.parseInt(argv[i + 3]);	_boundPortList.add(new BoundPort(QJniServerSocket.openJNI(fd, port),					 addr,					 port));	i += 4;      }      else if ("start".equals(argv[i])	       || "restart".equals(argv[i])) {	JniCauchoSystem.create().initJniBackground();	i++;      }      else if (argv[i].equals("-verbose")	       || argv[i].equals("--verbose")) {	i += 1;      }      else if (argv[i].equals("-fine")	       || argv[i].equals("--fine")) {	i += 1;      }      else if (argv[i].equals("-finer")	       || argv[i].equals("--finer")) {	i += 1;      }      else {        System.out.println(L().l("unknown argument '{0}'", argv[i]));        System.out.println();	usage();	System.exit(66);      }    }  }  private static void usage()  {    System.err.println(L().l("usage: java -jar resin.jar [-options] [start | stop | restart]"));    System.err.println(L().l(""));    System.err.println(L().l("where options include:"));    System.err.println(L().l("   -conf <file>          : select a configuration file"));    System.err.println(L().l("   -log-directory <dir>  : select a logging directory"));    System.err.println(L().l("   -resin-home <dir>     : select a resin home directory"));    System.err.println(L().l("   -root-directory <dir> : select a root directory"));    System.err.println(L().l("   -server <id>          : select a <server> to run"));    System.err.println(L().l("   -watchdog-port <port> : override the watchdog-port"));    System.err.println(L().l("   -verbose              : print verbose starting information"));  }  /**   * Initialize the server, binding to TCP and starting the threads.   */  public void initMain()    throws Throwable  {    _mainThread = Thread.currentThread();    _mainThread.setContextClassLoader(_systemClassLoader);    addRandom();    System.out.println(com.caucho.Version.FULL_VERSION);    System.out.println(com.caucho.Version.COPYRIGHT);    System.out.println();    String licenseMessage = getLicenseMessage();        if (licenseMessage != null) {      log().warning(licenseMessage);      System.out.println(licenseMessage);    }    String licenseErrorMessage = getLicenseErrorMessage();        if (licenseErrorMessage != null) {      log().warning(licenseErrorMessage);      System.err.println(licenseErrorMessage);    }    System.out.println("Starting " + getResinName()		       + " on " + QDate.formatLocal(_startTime));    System.out.println();    EnvironmentClassLoader.initializeEnvironment();    // buildResinClassLoader();    // validateEnvironment();    if (_classLoader != null)      _mainThread.setContextClassLoader(_classLoader);    Path pwd = Vfs.getPwd();    if (_rootDirectory == null)      _rootDirectory = _resinHome;    Vfs.setPwd(_rootDirectory);    Path resinConf = null;    if (_configFile != null) {      if (log().isLoggable(Level.FINER))        log().finer(this + " looking for conf in " +  pwd.lookup(_configFile));      resinConf = pwd.lookup(_configFile);    }    if (_configFile == null) {      if (pwd.lookup("conf/resin.xml").canRead())	_configFile = "conf/resin.xml";      else { // backward compat	_configFile = "conf/resin.conf";      }    }    if (resinConf == null || !resinConf.exists()) {      if (log().isLoggable(Level.FINER))        log().finer(this + " looking for conf in " +  _rootDirectory.lookup(_configFile));      resinConf = _rootDirectory.lookup(_configFile);    }    if (! resinConf.exists() && ! _resinHome.equals(_rootDirectory)) {      if (log().isLoggable(Level.FINER))        log().finer(this + " looking for conf in " +  _resinHome.lookup(_configFile));      resinConf = _resinHome.lookup(_configFile);    }    // for error messages, show path relative to rootDirectory    if (! resinConf.exists())      resinConf = _rootDirectory.lookup(_configFile);    _resinConf = resinConf;    // server.setServerRoot(_serverRoot);    _mainThread.setContextClassLoader(_systemClassLoader);    Vfs.setPwd(getRootDirectory());    Config config = new Config();    // server/10hc    // config.setResinInclude(true);    config.configure(this, resinConf, getSchema());    ClusterServer clusterServer = findClusterServer(_serverId);    for (int i = 0; i < _boundPortList.size(); i++) {      BoundPort port = _boundPortList.get(i);      clusterServer.bind(port.getAddress(),			 port.getPort(),			 port.getServerSocket());    }    start();  }    private void startManagement()  {    //_j2eeDomainManagedObject = J2EEManagedObject.register(new J2EEDomain());    //_jvmManagedObject = J2EEManagedObject.register(new JVM());  }  private void addRandom()  {    RandomUtil.addRandom(System.currentTimeMillis());    RandomUtil.addRandom(Runtime.getRuntime().freeMemory());    RandomUtil.addRandom(System.identityHashCode(_mainThread));    RandomUtil.addRandom(System.identityHashCode(_systemClassLoader));    RandomUtil.addRandom(com.caucho.Version.FULL_VERSION);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?