ZZ Coder
私をたくさん導いた答えを要約すると:
オブジェクトを取得するには、メソッドを実装ContainerServlet
してオーバーライドするサーブレットを作成する必要があります。setWrapper
org.apache.catalina.Wrapper
そのためには、タグに含める必要があります。そうしないprivileged="true"
とcontext.xml
Context
、例外がスローされます。Wrapper
次に、オブジェクトを使用して、次のことができます。
StandardContext context = (StandardContext) wrapper.getParent();
StandardHost currentHost = (StandardHost) context.getParent();
StandardEngine engine = (StandardEngine) currentHost.getParent();
StandardHost host = new StandardHost();
host.setAppBase(currentHost.getAppBase()); //in my case I created another instance of the same application
host.setDomain(currentHost.getDomain());
host.setAutoDeploy(false); // not restarting app whenever changes happen
host.setName("domain.com");
host.setThrowOnFailure(true);// tell it to throw an exception here if it fails to create the host
host.setDeployOnStartup(true);
host.setStartChildren(true);
host.setParent(engine);
// you can add multiple aliases
host.addAlias(alias);
StandardContext ctx = new StandardContext();
ctx.setDocBase(context.getDocBase()); //again I reused my same application setting
ctx.setPath("");
if(currentHost.getWorkDir() != null)
{//create a working directory based on your new host's name
ctx.setWorkDir(currentHost.getWorkDir().replace(currentHost.getName(), host.getName()));
}
ctx.setName(host.getDomain());
//some extra config that you can use
ctx.setUseHttpOnly(false);
ctx.setReloadable(false);
ctx.setXmlValidation(false);
ctx.setXmlNamespaceAware(false);
ctx.setCrossContext(false);
ctx.setParent(host);
// you have to have this or it will not work!!
ctx.addLifecycleListener(new ContextConfig());
//you can also create resources and add it to the context like so:
final ContextResource res = new ContextResource();
res.setName("name");
res.setAuth("Container");
res.setType("javax.sql.DataSource");
ctx.getNamingResources().addResource(res);
host.addChild(ctx);
engine.addChild(host);
を呼び出すことで、リソースにプロパティを追加できます。使用できるプロパティは次のres.setProperty("name", "value")
とおり
です。、、、、、、、、、、、、、、。initialSize
maxTotal
maxIdle
maxWaitMillis
removeAbandonedOnBorrow
removeAbandonedTimeout
validationQuery
timeBetweenEvictionRunsMillis
driverClassName
url
username
password
もう1つのエキサイティングなことは、を呼び出して使用することでTomcatエンジンからホストを取得し、独自engine.findChild(domain)
のTomcat管理パネルを用意することです。stop()
start()
getStateName()