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 + -
显示快捷键?