blob: 5392460e5990f58d67342289b229163e7da2a53e [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jk.core;
import java.util.Hashtable;
import javax.management.ObjectName;
/**
* The controller object. It manages all other jk objects, acting as the root of
* the jk object model.
*
* @author Gal Shachor
* @author Henri Gomez [hgomez@apache.org]
* @author Dan Milstein [danmil@shore.net]
* @author Keith Wannamaker [Keith@Wannamaker.org]
* @author Kevin Seguin
* @author Costin Manolache
*/
public class WorkerEnv {
Hashtable properties;
public static final int ENDPOINT_NOTE=0;
public static final int REQUEST_NOTE=1;
public static final int SSL_CERT_NOTE=16;
int noteId[]=new int[4];
String noteName[][]=new String[4][];
private Object notes[]=new Object[32];
Hashtable handlersMap=new Hashtable();
JkHandler handlersTable[]=new JkHandler[20];
int handlerCount=0;
// base dir for the jk webapp
String home;
int localId=0;
public WorkerEnv() {
for( int i=0; i<noteId.length; i++ ) {
noteId[i]=7;
noteName[i]=new String[20];
}
}
public void setLocalId(int id) {
localId=id;
}
public int getLocalId() {
return localId;
}
public void setJkHome( String s ) {
home=s;
}
public String getJkHome() {
return home;
}
public final Object getNote(int i ) {
return notes[i];
}
public final void setNote(int i, Object o ) {
notes[i]=o;
}
public int getNoteId( int type, String name ) {
for( int i=0; i<noteId[type]; i++ ) {
if( name.equals( noteName[type][i] ))
return i;
}
int id=noteId[type]++;
noteName[type][id]=name;
return id;
}
public void addHandler( String name, JkHandler w ) {
JkHandler oldH = getHandler(name);
if(oldH == w) {
// Already added
return;
}
w.setWorkerEnv( this );
w.setName( name );
handlersMap.put( name, w );
if( handlerCount > handlersTable.length ) {
JkHandler newT[]=new JkHandler[ 2 * handlersTable.length ];
System.arraycopy( handlersTable, 0, newT, 0, handlersTable.length );
handlersTable=newT;
}
if(oldH == null) {
handlersTable[handlerCount]=w;
w.setId( handlerCount );
handlerCount++;
} else {
handlersTable[oldH.getId()]=w;
w.setId(oldH.getId());
}
// Notify all other handlers of the new one
// XXX Could be a Coyote action ?
for( int i=0; i< handlerCount ; i++ ) {
handlersTable[i].addHandlerCallback( w );
}
}
public final JkHandler getHandler( String name ) {
return (JkHandler)handlersMap.get(name);
}
public final JkHandler getHandler( int id ) {
return handlersTable[id];
}
public final int getHandlerCount() {
return handlerCount;
}
public ObjectName[] getHandlersObjectName() {
ObjectName onames[]=new ObjectName[ handlerCount ];
for( int i=0; i<handlerCount; i++ ) {
onames[i]=handlersTable[i].getObjectName();
}
return onames;
}
}