package org.aksw.sparqlify.web;
import java.net.URL;
import java.security.ProtectionDomain;
import org.aksw.sparqlify.core.sparql.QueryExecutionFactoryEx;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
import org.glassfish.jersey.servlet.ServletContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
*
* http://stackoverflow.com/questions/10738816/deploying-a-servlet-
* programmatically-with-jetty
* http://stackoverflow.com/questions/3718221/add-resources
* -to-jetty-programmatically
*
* @author raven
*
*
*/
public class MainSparqlifyPlatform {
private static final Logger logger = LoggerFactory.getLogger(MainSparqlifyPlatform.class);
// Source:
// http://eclipsesource.com/blogs/2009/10/02/executable-wars-with-jetty/
public static void main(String[] args) throws Exception {
int port = 7531;
System.getProperties().setProperty("configDirectory", "/home/raven/Projects/Eclipse/sparqlify-parent/sparqlify-platform/config/example/sparqlify-platform/");
Server server = new Server(port);
//SocketConnector connector = new SocketConnector();
// Set some timeout options to make debugging easier.
// connector.setMaxIdleTime(1000 * 60 * 60);
// connector.setSoLingerTime(-1);
// connector.setPort(port);
// server.setConnectors(new Connector[] { connector });
WebAppContext context = new WebAppContext();
context.setServer(server);
context.setContextPath("/");
ProtectionDomain protectionDomain = MainSparqlifyPlatform.class.getProtectionDomain();
URL location = protectionDomain.getCodeSource().getLocation();
String externalForm = location.toExternalForm();
// Try to detect whether we are being run from an
// archive (uber jar) or just from compiled classes
if(externalForm.endsWith("/classes/")) {
externalForm = "src/main/webapp";
}
logger.debug("Loading webAppContext from " + externalForm);
context.setWar(externalForm);
server.setHandler(context);
try {
server.start();
System.in.read();
server.stop();
server.join();
} catch (Exception e) {
e.printStackTrace();
System.exit(100);
}
}
// public static void main(String[] args) throws Exception {
//
// // Server server = new Server(8090);
// //
// // ServletContextHandler context = new
// ServletContextHandler(ServletContextHandler.SESSIONS);
// // context.setContextPath("/batch");
// //
// // // Setup Spring context
// // context.addEventListener(new ContextLoaderListener());
// // context.setInitParameter("contextConfigLocation",
// "classpath*:**/testContext.xml");
// //
// // server.setHandler(context);
// //
// // // Add servlets
// // context.addServlet(new ServletHolder(new BatchReceiver()),
// "/receiver/*");
// // context.addServlet(new ServletHolder(new BatchSender()), "/sender/*");
// //
// // server.start();
// // server.join();
// //
// int port = 7531;
//
// System.getProperties().setProperty("configDirectory",
// "/home/raven/Projects/Eclipse/sparqlify-parent/sparqlify-platform/config/example/sparqlify-platform/");
//
// WebAppContext webAppContext = new WebAppContext();
// webAppContext.setContextPath("/");
// webAppContext.setWar("src/main/webapp");
//
//
//
//
// Server server = new Server(port);
// server.setHandler(webAppContext);
//
// //ServletContextHandler context = new ServletContextHandler(server, "/",
// ServletContextHandler.SESSIONS);
//
// // context.addServlet(webAppContext, "/");
// // server.addHandler(webAppContext);
// // server.start();
// //
// //
// //
// // //context.getServletContext().setAttribute("queryExecutionFactory",
// qef);
// // context.addServlet(sh, "/*");
//
//
// server.start();
// server.join();
//
// //return server;
//
// }
public static Server createSparqlEndpoint(QueryExecutionFactoryEx qef,
int port) throws Exception {
HttpSparqlEndpoint.sparqler = qef;
ServletHolder sh = new ServletHolder(ServletContainer.class);
// http://stackoverflow.com/questions/805280/loading-up-a-web-xml-for-integration-tests-with-jetty
// WebAppContext webAppContext = new WebAppContext();
// webAppContext.setContextPath("/");
// webAppContext.setWar();
/*
* For 0.8 and later the "com.sun.ws.rest" namespace has been renamed to
* "com.sun.jersey". For 0.7 or early use the commented out code instead
*/
// sh.setInitParameter("com.sun.ws.rest.config.property.resourceConfigClass",
// "com.sun.ws.rest.api.core.PackagesResourceConfig");
// sh.setInitParameter("com.sun.ws.rest.config.property.packages",
// "jetty");
sh.setInitParameter(
"com.sun.jersey.config.property.resourceConfigClass",
"com.sun.jersey.api.core.PackagesResourceConfig");
sh.setInitParameter("com.sun.jersey.config.property.packages",
"org.aksw.sparqlify.web");
Server server = new Server(port);
ServletContextHandler context = new ServletContextHandler(server, "/",
ServletContextHandler.SESSIONS);
context.getServletContext().setAttribute("queryExecutionFactory", qef);
context.addServlet(sh, "/*");
return server;
}
}