| Method from org.apache.jk.config.BaseJkConfig Detail: |
protected boolean addExtensionMapping(String ctxPath,
String ext,
PrintWriter pw) {
return true;
}
Add an extension mapping. Override with method to generate
web server specific configuration |
protected boolean addMapping(String fullPath,
PrintWriter pw) {
return true;
}
Add a fulling specified mapping. Override with method to generate
web server specific configuration |
public void execute(LifecycleEvent evt) {
initProperties();
PrintWriter mod_jk = null;
try {
mod_jk = getWriter();
} catch(IOException iex) {
log.warn("Unable to open config file");
return;
}
Lifecycle who = evt.getLifecycle();
if( who instanceof Server ) {
executeServer((Server)who, mod_jk);
} else if(who instanceof Engine) {
executeEngine((Engine)who, mod_jk);
} else if ( who instanceof Host ) {
executeHost((Host)who, mod_jk);
} else if( who instanceof Context ) {
executeContext((Context)who, mod_jk);
}
mod_jk.close();
}
Generate configuration files. Override with method to generate
web server specific configuration. |
public void executeContext(Context context,
PrintWriter mod_jk) {
if(context.getPath().length() > 0 || ! noRoot ) {
String docRoot = context.getServletContext().getRealPath("/");
if( forwardAll || docRoot == null)
generateStupidMappings( context, mod_jk );
else
generateContextMappings( context, mod_jk);
}
}
executes the ApacheConfig interceptor. This method generates apache
configuration files for use with mod_jk. |
protected void executeEngine(Engine egn,
PrintWriter mod_jk) {
if(egn.getJvmRoute() != null) {
jkWorker = egn.getJvmRoute();
}
executeServer(egn.getService().getServer(), mod_jk);
Container [] children = egn.findChildren();
for(int ii=0; ii < children.length; ii++) {
if( children[ii] instanceof Host ) {
executeHost((Host)children[ii], mod_jk);
} else if( children[ii] instanceof Context ) {
executeContext((Context)children[ii], mod_jk);
}
}
}
Generate configuration files. Override with method to generate
web server specific configuration. |
protected void executeHost(Host hst,
PrintWriter mod_jk) {
generateVhostHead(hst, mod_jk);
Container [] children = hst.findChildren();
for(int ii=0; ii < children.length; ii++) {
if(children[ii] instanceof Context) {
executeContext((Context)children[ii],mod_jk);
}
}
generateVhostTail(hst, mod_jk);
}
Generate configuration files. Override with method to generate
web server specific configuration. |
public void executeServer(Server svr,
PrintWriter mod_jk) {
if(! append ) {
if( ! generateJkHead(mod_jk) )
return;
generateSSLConfig(mod_jk);
generateJkTail(mod_jk);
}
}
Generate configuration files. Override with method to generate
web server specific configuration. |
protected void generateContextMappings(Context context,
PrintWriter mod_jk) {
}
|
protected boolean generateJkHead(PrintWriter mod_jk) {
return true;
}
|
protected void generateJkTail(PrintWriter mod_jk) {
}
|
protected void generateSSLConfig(PrintWriter mod_jk) {
}
|
protected void generateStupidMappings(Context context,
PrintWriter mod_jk) {
}
|
protected void generateVhostHead(Host host,
PrintWriter mod_jk) {
}
Generate Virtual Host start |
protected void generateVhostTail(Host host,
PrintWriter mod_jk) {
}
Generate Virtual Host end |
protected String getAbsoluteDocBase(Context context) {
// Calculate the absolute path of the document base
String docBase = context.getServletContext().getRealPath("/");
docBase = docBase.substring(0,docBase.length()-1);
if (!isAbsolute(docBase)){
docBase = tomcatHome + "/" + docBase;
}
docBase = patch(docBase);
return docBase;
}
|
public static File getConfigFile(File base,
File configDir,
String defaultF) {
if( base==null )
base=new File( defaultF );
if( ! base.isAbsolute() ) {
if( configDir != null )
base=new File( configDir, base.getPath());
else
base=new File( base.getAbsolutePath()); //??
}
File parent=new File(base.getParent());
if(!parent.exists()){
if(!parent.mkdirs()){
throw new RuntimeException(
"Unable to create path to config file :"+
base.getAbsolutePath());
}
}
return base;
}
|
protected Host getHost(Container child) {
while(child != null && ! (child instanceof Host) ) {
child = child.getParent();
}
return (Host)child;
}
Get the host associated with this Container (if any). |
protected PrintWriter getWriter() throws IOException {
return null;
}
Get the output Writer. Override with method to generate
web server specific configuration. |
protected void initProperties() {
tomcatHome = System.getProperty("catalina.home");
File tomcatDir = new File(tomcatHome);
if(configHome==null){
configHome=tomcatDir;
}
}
Initialize defaults for properties that are not set
explicitely |
public static boolean isAbsolute(String path) {
// normal file
if( path.startsWith("/" ) ) return true;
if( path.startsWith(File.separator ) ) return true;
// win c:
if (path.length() >= 3 &&
Character.isLetter(path.charAt(0)) &&
path.charAt(1) == ':")
return true;
// NetWare volume:
if (System.getProperty("os.name").startsWith("NetWare") &&
path.length() >=3 &&
path.indexOf(':") > 0)
return true;
return false;
}
|
public void lifecycleEvent(LifecycleEvent evt) {
// -------------------- Tomcat callbacks --------------------
// Auto-config should be able to react to dynamic config changes,
// and regenerate the config.
if(Lifecycle.START_EVENT.equals(evt.getType())) {
execute( evt );
}
}
Generate the configuration - only when the server is
completely initialized ( before starting ) |
public static String patch(String path) {
String patchPath = path;
// Move drive spec to the front of the path
if (patchPath.length() >= 3 &&
patchPath.charAt(0) == '/" &&
Character.isLetter(patchPath.charAt(1)) &&
patchPath.charAt(2) == ':") {
patchPath=patchPath.substring(1,3)+"/"+patchPath.substring(3);
}
// Eliminate consecutive slashes after the drive spec
if (patchPath.length() >= 2 &&
Character.isLetter(patchPath.charAt(0)) &&
patchPath.charAt(1) == ':") {
char[] ca = patchPath.replace('/", '\\").toCharArray();
char c;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ca.length; i++) {
if ((ca[i] != '\\") ||
(ca[i] == '\\" &&
i > 0 &&
ca[i - 1] != '\\")) {
if (i == 0 &&
Character.isLetter(ca[i]) &&
i < ca.length - 1 &&
ca[i + 1] == ':") {
c = Character.toUpperCase(ca[i]);
} else {
c = ca[i];
}
sb.append(c);
}
}
patchPath = sb.toString();
}
// fix path on NetWare - all '/' become '\\' and remove duplicate '\\'
if (System.getProperty("os.name").startsWith("NetWare") &&
path.length() >=3 &&
path.indexOf(':") > 0) {
char[] ca = patchPath.replace('/", '\\").toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ca.length; i++) {
if ((ca[i] != '\\") ||
(ca[i] == '\\" && i > 0 && ca[i - 1] != '\\")) {
sb.append(ca[i]);
}
}
patchPath = sb.toString();
}
return patchPath;
}
|
public void setAppend(boolean apnd) {
append = apnd;
}
Append to config file.
Set to true if the config information should be
appended. |
public void setConfigHome(String dir) {
if( dir==null ) return;
File f=new File(dir);
if(!f.isDirectory()){
throw new IllegalArgumentException(
"BaseConfig.setConfigHome(): "+
"Configuration Home must be a directory! : "+dir);
}
configHome = f;
}
set a path to the parent directory of the
conf folder. That is, the parent directory
within which path setters would be resolved against,
if relative. For example if ConfigHome is set to "/home/tomcat"
and regConfig is set to "conf/mod_jk.conf" then the resulting
path used would be:
"/home/tomcat/conf/mod_jk.conf".
However, if the path is set to an absolute path,
this attribute is ignored.
If not set, execute() will set this to TOMCAT_HOME. |
public void setForwardAll(boolean b) {
forwardAll=b;
}
If false, we'll try to generate a config that will
let apache serve static files.
The default is true, forward all requests in a context
to tomcat. |
public void setJkDebug(String level) {
jkDebug=level;
}
Set the verbosity level
( use debug, error, etc. ) If not set, no log is written. |
public void setJkLog(String path) {
jkLog = ( path==null ? null : new File(path));
}
set the path to the log file |
public void setJkWorker(String worker) {
jkWorker = worker;
}
|
public void setLegacy(boolean legacy) {
this.legacy = legacy;
}
|
public void setNoRoot(boolean b) {
noRoot=b;
}
Special option - do not generate mappings for the ROOT
context. The default is true, and will not generate the mappings,
not redirecting all pages to tomcat (since /* matches everything).
This means that the web server's root remains intact but isn't
completely servlet/JSP enabled. If the ROOT webapp can be configured
with the web server serving static files, there's no problem setting
this option to false. If not, then setting it true means the web
server will be out of picture for all requests. |
public void setWorkersConfig(String path) {
workersConfig= (path==null?null:new File(path));
}
set a path to the workers.properties file. |