package org.basex.examples.server;
import java.io.*;
import org.basex.*;
import org.basex.api.client.*;
import org.basex.core.*;
import org.basex.core.cmd.*;
import org.basex.examples.local.*;
/**
* This class sends a query to a database server instance.
* The query result is used to create and query a local database.
* For more information on server functionalities, see {@link ServerCommands}
* For more information on local query processing, see {@link RunQueries}.
*
* @author BaseX Team 2005-17, BSD License
*/
public final class ServerAndLocal {
/**
* Runs the example code.
* @param args (ignored) command-line arguments
* @throws Exception exception
*/
public static void main(final String... args) throws Exception {
System.out.println("=== ServerAndLocal ===");
// Create global context
final Context context = new Context();
// Start server
System.out.println("\n* Start server.");
BaseXServer server = new BaseXServer();
// Create a client session with host name, port, user name and password
System.out.println("\n* Create a client session.");
try(ClientSession session = new ClientSession("localhost", 1984, "admin", "admin")) {
// Locally cache the result of a server-side query
System.out.println("\n* Cache server-side query results.");
String result = send(session,
"XQUERY for $x in doc('src/main/resources/xml/input.xml') return $x");
// Create a local database from the XML result string
System.out.println("\n* Create a local database.");
new CreateDB("LocalDB", result).execute(context);
// Run a query on the locally cached results
System.out.print("\n* Run a local query: ");
System.out.println(new XQuery("//title").execute(context));
}
// Stop the server
System.out.println("\n* Stop the server.");
server.stop();
// Drop the local database
System.out.println("\n* Drop the local database.");
new DropDB("LocalDB").execute(context);
// Close context
context.close();
}
/**
* Executes the specified command on the server and writes the
* response to out.
* Command info is printed to System.out by default.
* @param session client session
* @param command command to be executed
* @return string result of command
* @throws IOException I/O exception
*/
private static String send(final ClientSession session, final String command) throws IOException {
// Execute the command
return session.execute(command);
}
}