提交 a2f179e4 authored 作者: Thomas Mueller's avatar Thomas Mueller

Server.openBrowser no longer writes to System.out directly if opening the URL failed.

上级 56fb3686
...@@ -253,7 +253,7 @@ public class WebServer implements Service { ...@@ -253,7 +253,7 @@ public class WebServer implements Service {
public void init(String... args) { public void init(String... args) {
// set the serverPropertiesDir, because it's used in loadProperties() // set the serverPropertiesDir, because it's used in loadProperties()
for (int i = 0; args != null && i < args.length; i++) { for (int i = 0; args != null && i < args.length; i++) {
if (args[i].equals("-properties")) { if ("-properties".equals(args[i])) {
serverPropertiesDir = args[++i]; serverPropertiesDir = args[++i];
} }
} }
...@@ -276,7 +276,7 @@ public class WebServer implements Service { ...@@ -276,7 +276,7 @@ public class WebServer implements Service {
SysProperties.setBaseDir(baseDir); SysProperties.setBaseDir(baseDir);
} else if ("-ifExists".equals(a)) { } else if ("-ifExists".equals(a)) {
ifExists = true; ifExists = true;
} else if (args[i].equals("-properties")) { } else if ("-properties".equals(args[i])) {
// already set // already set
i++; i++;
} else if ("-trace".equals(a)) { } else if ("-trace".equals(a)) {
...@@ -519,6 +519,9 @@ public class WebServer implements Service { ...@@ -519,6 +519,9 @@ public class WebServer implements Service {
private Properties loadProperties() { private Properties loadProperties() {
try { try {
if ("null".equals(serverPropertiesDir)) {
return new Properties();
}
return SortedProperties.loadProperties(serverPropertiesDir + "/" + Constants.SERVER_PROPERTIES_NAME); return SortedProperties.loadProperties(serverPropertiesDir + "/" + Constants.SERVER_PROPERTIES_NAME);
} catch (Exception e) { } catch (Exception e) {
TraceSystem.traceThrowable(e); TraceSystem.traceThrowable(e);
...@@ -595,9 +598,11 @@ public class WebServer implements Service { ...@@ -595,9 +598,11 @@ public class WebServer implements Service {
prop.setProperty(String.valueOf(len - i - 1), info.getString()); prop.setProperty(String.valueOf(len - i - 1), info.getString());
} }
} }
OutputStream out = IOUtils.openFileOutputStream(serverPropertiesDir + "/" + Constants.SERVER_PROPERTIES_NAME, false); if (!"null".equals(serverPropertiesDir)) {
prop.store(out, "H2 Server Properties"); OutputStream out = IOUtils.openFileOutputStream(serverPropertiesDir + "/" + Constants.SERVER_PROPERTIES_NAME, false);
out.close(); prop.store(out, "H2 Server Properties");
out.close();
}
} catch (Exception e) { } catch (Exception e) {
TraceSystem.traceThrowable(e); TraceSystem.traceThrowable(e);
} }
......
...@@ -170,7 +170,7 @@ ShutdownHandler { ...@@ -170,7 +170,7 @@ ShutdownHandler {
// because some people don't look at the output, // because some people don't look at the output,
// but are wondering why nothing happens // but are wondering why nothing happens
if (browserStart) { if (browserStart) {
Server.openBrowser(web.getURL()); openBrowser(web.getURL());
} }
if (tcpStart) { if (tcpStart) {
...@@ -421,12 +421,20 @@ ShutdownHandler { ...@@ -421,12 +421,20 @@ ShutdownHandler {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if (lastOpen == 0 || lastOpen + 100 < now) { if (lastOpen == 0 || lastOpen + 100 < now) {
lastOpen = now; lastOpen = now;
Server.openBrowser(url); openBrowser(url);
} }
} }
} }
//## AWT end ## //## AWT end ##
private void openBrowser(String url) {
try {
Server.openBrowser(url);
} catch (Exception e) {
out.println(e.getMessage());
}
}
/** /**
* INTERNAL * INTERNAL
*/ */
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
*/ */
package org.h2.tools; package org.h2.tools;
import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -21,6 +20,7 @@ import org.h2.server.pg.PgServer; ...@@ -21,6 +20,7 @@ import org.h2.server.pg.PgServer;
import org.h2.server.web.WebServer; import org.h2.server.web.WebServer;
import org.h2.util.StringUtils; import org.h2.util.StringUtils;
import org.h2.util.Tool; import org.h2.util.Tool;
import org.h2.util.Utils;
/** /**
* Starts the H2 Console (web-) server, TCP, and PG server. * Starts the H2 Console (web-) server, TCP, and PG server.
...@@ -31,6 +31,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -31,6 +31,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
private Service service; private Service service;
private Server web, tcp, pg; private Server web, tcp, pg;
private ShutdownHandler shutdownHandler; private ShutdownHandler shutdownHandler;
private boolean started;
public Server() { public Server() {
// nothing to do // nothing to do
...@@ -95,7 +96,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -95,7 +96,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
* <tr><td>[-pgPort &lt;port&gt;]</td> * <tr><td>[-pgPort &lt;port&gt;]</td>
* <td>The port (default: 5435)</td></tr> * <td>The port (default: 5435)</td></tr>
* <tr><td>[-properties "&lt;dir&gt;"]</td> * <tr><td>[-properties "&lt;dir&gt;"]</td>
* <td>The server properties directory (default: ~)</td></tr> * <td>Server properties (default: ~, disable: null)</td></tr>
* <tr><td>[-baseDir &lt;dir&gt;]</td> * <tr><td>[-baseDir &lt;dir&gt;]</td>
* <td>The base directory for H2 databases (all servers)</td></tr> * <td>The base directory for H2 databases (all servers)</td></tr>
* <tr><td>[-ifExists]</td> * <tr><td>[-ifExists]</td>
...@@ -140,8 +141,6 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -140,8 +141,6 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
// no parameters // no parameters
} else if ("-webPort".equals(arg)) { } else if ("-webPort".equals(arg)) {
i++; i++;
} else if ("-webScript".equals(arg)) {
i++;
} else { } else {
throwUnsupportedOption(arg); throwUnsupportedOption(arg);
} }
...@@ -221,7 +220,11 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -221,7 +220,11 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
// because some people don't look at the output, // because some people don't look at the output,
// but are wondering why nothing happens // but are wondering why nothing happens
if (browserStart) { if (browserStart) {
Server.openBrowser(web.getURL()); try {
openBrowser(web.getURL());
} catch (Exception e) {
out.println(e.getMessage());
}
} }
if (result != null) { if (result != null) {
throw result; throw result;
...@@ -269,7 +272,9 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -269,7 +272,9 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
*/ */
public String getStatus() { public String getStatus() {
StringBuilder buff = new StringBuilder(); StringBuilder buff = new StringBuilder();
if (isRunning(false)) { if (!started) {
buff.append("Not started");
} else if (isRunning(false)) {
buff.append(service.getType()). buff.append(service.getType()).
append(" server running on "). append(" server running on ").
append(service.getURL()). append(service.getURL()).
...@@ -344,6 +349,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -344,6 +349,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
*/ */
public Server start() throws SQLException { public Server start() throws SQLException {
try { try {
started = true;
service.start(); service.start();
Thread t = new Thread(this); Thread t = new Thread(this);
t.setDaemon(service.isDaemon()); t.setDaemon(service.isDaemon());
...@@ -404,6 +410,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -404,6 +410,7 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
* Stops the server. * Stops the server.
*/ */
public void stop() { public void stop() {
started = false;
service.stop(); service.stop();
} }
...@@ -468,13 +475,16 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -468,13 +475,16 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
* *
* @param url the URL to open * @param url the URL to open
*/ */
public static void openBrowser(String url) { public static void openBrowser(String url) throws Exception {
String osName = SysProperties.getStringSetting("os.name", "linux").toLowerCase();
Runtime rt = Runtime.getRuntime();
try { try {
String browser = SysProperties.BROWSER; String osName = SysProperties.getStringSetting("os.name", "linux").toLowerCase();
Runtime rt = Runtime.getRuntime();
String browser = System.getProperty(SysProperties.H2_BROWSER);
if (browser != null) { if (browser != null) {
if (browser.indexOf("%url") >= 0) { if (browser.startsWith("call:")) {
browser = browser.substring("call:".length());
Utils.callStaticMethod(browser, url);
} else if (browser.indexOf("%url") >= 0) {
String[] args = StringUtils.arraySplit(browser, ',', false); String[] args = StringUtils.arraySplit(browser, ',', false);
for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++) {
args[i] = StringUtils.replaceAll(args[i], "%url", url); args[i] = StringUtils.replaceAll(args[i], "%url", url);
...@@ -525,12 +535,11 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -525,12 +535,11 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
} }
if (!ok) { if (!ok) {
// No success in detection. // No success in detection.
System.out.println("Please open a browser and go to " + url); throw new Exception("Browser detection failed and system property " + SysProperties.H2_BROWSER + " not set");
} }
} }
} catch (IOException e) { } catch (Exception e) {
System.out.println("Failed to start a browser to open the URL " + url); throw new Exception("Failed to start a browser to open the URL " + url + ": " + e.getMessage());
e.printStackTrace();
} }
} }
...@@ -550,13 +559,13 @@ public class Server extends Tool implements Runnable, ShutdownHandler { ...@@ -550,13 +559,13 @@ public class Server extends Tool implements Runnable, ShutdownHandler {
server.web = web; server.web = web;
webServer.setShutdownHandler(server); webServer.setShutdownHandler(server);
String url = webServer.addSession(conn); String url = webServer.addSession(conn);
Server.openBrowser(url); try {
while (!webServer.isStopped()) { Server.openBrowser(url);
try { while (!webServer.isStopped()) {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException e) {
// ignore
} }
} catch (Exception e) {
// ignore
} }
} }
......
...@@ -46,11 +46,12 @@ public class WebClient { ...@@ -46,11 +46,12 @@ public class WebClient {
* Read the session ID from a URL. * Read the session ID from a URL.
* *
* @param url the URL * @param url the URL
* @return the session id
*/ */
void readSessionId(String url) { String readSessionId(String url) {
int idx = url.indexOf("jsessionid="); int idx = url.indexOf("jsessionid=");
String id = url.substring(idx + "jsessionid=".length()); String id = url.substring(idx + "jsessionid=".length());
for (int i = 0; i < url.length(); i++) { for (int i = 0; i < id.length(); i++) {
char ch = id.charAt(i); char ch = id.charAt(i);
if (!Character.isLetterOrDigit(ch)) { if (!Character.isLetterOrDigit(ch)) {
id = id.substring(0, i); id = id.substring(0, i);
...@@ -58,6 +59,7 @@ public class WebClient { ...@@ -58,6 +59,7 @@ public class WebClient {
} }
} }
this.sessionId = id; this.sessionId = id;
return id;
} }
/** /**
...@@ -83,4 +85,13 @@ public class WebClient { ...@@ -83,4 +85,13 @@ public class WebClient {
return get(url); return get(url);
} }
String getBaseUrl(String url) {
int idx = url.indexOf("//");
idx = url.indexOf("/", idx + 2);
if (idx >= 0) {
return url.substring(0, idx);
}
return url;
}
} }
...@@ -40,9 +40,9 @@ import org.h2.tools.RunScript; ...@@ -40,9 +40,9 @@ import org.h2.tools.RunScript;
import org.h2.tools.Script; import org.h2.tools.Script;
import org.h2.tools.Server; import org.h2.tools.Server;
import org.h2.tools.SimpleResultSet; import org.h2.tools.SimpleResultSet;
import org.h2.util.Task;
import org.h2.util.IOUtils; import org.h2.util.IOUtils;
import org.h2.util.JdbcUtils; import org.h2.util.JdbcUtils;
import org.h2.util.Task;
/** /**
* Tests the database tools. * Tests the database tools.
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论