Created
June 7, 2011 11:50
-
-
Save shyiko/1012081 to your computer and use it in GitHub Desktop.
Tomcat Embedded Server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.apache.catalina.Context; | |
import org.apache.catalina.Engine; | |
import org.apache.catalina.Host; | |
import org.apache.catalina.LifecycleException; | |
import org.apache.catalina.connector.Connector; | |
import org.apache.catalina.startup.Embedded; | |
import java.io.File; | |
/** | |
* Adapter to the {@link org.apache.catalina.startup.Embedded} | |
* | |
* @author <a href="mailto:[email protected]">shyiko</a> | |
* @since 07.05.2011 | |
*/ | |
public class TomcatEmbeddedServer { | |
private String homeDirectory; | |
private Embedded embeddedServer; | |
private Host host; | |
/** | |
* Construct new instance using custom Tomcat home directory | |
* @param homeDirectory catalina root directory | |
*/ | |
public TomcatEmbeddedServer(String homeDirectory) { | |
if (homeDirectory == null) { | |
throw new IllegalArgumentException("homeDirectory should not be null"); | |
} | |
this.homeDirectory = homeDirectory.trim(); | |
} | |
/** | |
* Start Tomcat embedded server | |
*/ | |
public void start() { | |
embeddedServer = new Embedded(); | |
embeddedServer.setCatalinaHome(homeDirectory); | |
Engine engine = this.embeddedServer.createEngine(); | |
engine.setDefaultHost("localhost"); | |
File webappsDirectory = new File(homeDirectory, "webapps"); | |
webappsDirectory.mkdirs(); | |
host = this.embeddedServer.createHost(engine.getDefaultHost(), webappsDirectory.getAbsolutePath()); | |
engine.addChild(host); | |
embeddedServer.addEngine(engine); | |
try { | |
Connector connector = new Connector(); | |
connector.setPort(8080); | |
embeddedServer.addConnector(connector); | |
embeddedServer.start(); | |
} catch (Exception e) { | |
throw new RuntimeException(e); | |
} | |
} | |
/** | |
* Deploy web application | |
* @param contextPath context path | |
* @param artifactPath artifact location (e.g. war archive) | |
*/ | |
public void deploy(String contextPath, String artifactPath) { | |
if (embeddedServer == null) { | |
throw new IllegalStateException("Server is not being started"); | |
} | |
Context context = embeddedServer.createContext(getContextPath(contextPath), artifactPath); | |
context.setReloadable(false); | |
host.addChild(context); | |
} | |
/** | |
* Undeploy web application | |
* @param contextPath context path | |
*/ | |
public void undeploy(String contextPath) { | |
if (embeddedServer == null) { | |
throw new IllegalStateException("Server is not being started"); | |
} | |
Context context = host.map(getContextPath(contextPath)); | |
host.removeChild(context); | |
} | |
private String getContextPath(String contextPath) { | |
if (contextPath == null) { | |
throw new IllegalArgumentException("contextPath should not be null"); | |
} | |
contextPath = contextPath.trim(); | |
return contextPath.startsWith("/") ? contextPath : "/" + contextPath; | |
} | |
/** | |
* Stop Tomcat embedded server | |
*/ | |
public void stop() { | |
try { | |
if (embeddedServer != null) { | |
embeddedServer.stop(); | |
} | |
} catch (LifecycleException e) { | |
throw new RuntimeException(e); | |
} finally { | |
embeddedServer = null; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment