You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/01/26 18:23:19 UTC
cvs commit: jakarta-tomcat-connectors/jk/java/org/apache/jk/server JkMain.java
costin 02/01/26 09:23:19
Modified: jk/java/org/apache/jk/server JkMain.java
Log:
Get a worker.properties-like functionality for JkMain. It should be able to
read the same file as mod_jk, so we have to configure the port in a single
file instead of 2.
It can now add dynamically workers and channels, no need to hardcode it.
Revision Changes Path
1.7 +97 -32 jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkMain.java
Index: JkMain.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkMain.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JkMain.java 21 Jan 2002 20:11:52 -0000 1.6
+++ JkMain.java 26 Jan 2002 17:23:19 -0000 1.7
@@ -68,6 +68,7 @@
import org.apache.tomcat.util.buf.*;
import org.apache.tomcat.util.http.*;
+import org.apache.tomcat.util.IntrospectionUtils;
/** Main class used for testing jk core and common code and tunning.
*
@@ -78,20 +79,17 @@
{
WorkerEnv wEnv=new WorkerEnv();
String propFile;
- Properties props;
+ Properties props=new Properties();
Worker defaultWorker;
String jkHome;
- Class channelclass;
-
public JkMain()
{
}
public void setPropFile( String p ) {
propFile=p;
- props=new Properties();
try {
props.load( new FileInputStream(propFile) );
} catch(IOException ex ){
@@ -99,8 +97,24 @@
}
}
- public void setProperties( Properties p ) {
- props=p;
+ public void setProperty( String n, String v ) {
+ props.put( n, v );
+ }
+
+ /**
+ * Set the <code>channelClassName</code> that will used to connect to
+ * httpd.
+ */
+ public void setChannelClassName(String name) {
+ props.put( "channel.default.className",name);
+ }
+
+ /**
+ * Set the <code>channelClassName</code> that will used to connect to
+ * httpd.
+ */
+ public void setWorkerClassName(String name) {
+ props.put( "worker.default.className",name);
}
public void setDefaultWorker( Worker w ) {
@@ -111,47 +125,98 @@
jkHome=s;
}
- public void setChannelClass( Class c ) {
- channelclass = c;
- }
-
- public void start() throws IOException {
- Channel csocket=null;
+ private Object newInstance( String type, String name, String def )
+ throws IOException
+ {
try {
- csocket=(Channel)channelclass.newInstance();
+ String classN=props.getProperty( type + "." + name + ".className",
+ def );
+ Class channelclass = Class.forName(classN);
+ return channelclass.newInstance();
} catch (Exception ex) {
ex.printStackTrace();
throw new IOException("Cannot create channel class");
}
+ }
+
+ public void start() throws IOException
+ {
+ String workers=props.getProperty( "worker.list", "default" );
+ Vector workerNamesV= split( workers, ",");
- // Set file.
- if( jkHome==null )
- csocket.setFile( "/tmp/tomcatUnixSocket" );
- else
- csocket.setFile( jkHome + "/WEB-INF/tomcatUnixSocket" );
- csocket.setJkHome( jkHome );
-
- // Set port number.
- csocket.setPort( 8009 );
+ for( int i=0; i<workerNamesV.size(); i++ ) {
+ String name= (String)workerNamesV.elementAt( i );
+ Worker w=(Worker)newInstance( "worker", name,
+ "org.apache.jk.common.WorkerDummy");
+
+ processProperties( w, "worker."+ name + "." );
- wEnv.addChannel( csocket );
+ wEnv.addWorker( name, w );
+ }
+
+ defaultWorker = wEnv.getWorker( "default" );
- if( defaultWorker == null )
- defaultWorker=new WorkerDummy();
+ // XXX alternatives, setters, etc
+ String channels=props.getProperty( "channel.list", "default" );
+ Vector channelNamesV= split( channels, ",");
+
+ for( int i=0; i<channelNamesV.size(); i++ ) {
+ String name= (String)channelNamesV.elementAt( i );
+ Channel ch=(Channel)newInstance( "channel", name,
+ "org.apache.jk.common.ChannelSocket");
+ processProperties( ch, "channel."+ name + "." );
+
+ if( jkHome != null )
+ this.setProperty( ch, "jkHome", jkHome );
+
+ wEnv.addChannel( name, ch );
+ ch.setWorker( defaultWorker );
+ }
+
+ // channel and handler should _pull_ the worker from we
- csocket.setWorker( defaultWorker );
- wEnv.addWorker( defaultWorker );
-
HandlerRequest hReq=new HandlerRequest();
- wEnv.addHandler( hReq );
hReq.setWorker( defaultWorker );
-
- HandlerEcho hEcho=new HandlerEcho();
- wEnv.addHandler( hEcho );
+ wEnv.addHandler( hReq );
wEnv.start();
}
+ /* A bit of magic to support workers.properties without giving
+ up the clean get/set
+ */
+ public void setProperty( Object target, String name, String val ) {
+ /* XXX we need an improved IntrospectionUtils, to report error
+ without d() */
+ d( "setProperty " + target + " " + name + "=" + val );
+ IntrospectionUtils.setProperty( target, name, val );
+ }
+
+ private void processProperties(Object o, String prefix) {
+ Enumeration keys=props.keys();
+ int plen=prefix.length();
+
+ while( keys.hasMoreElements() ) {
+ String k=(String)keys.nextElement();
+ if( ! k.startsWith( prefix ) )
+ continue;
+
+ String name= k.substring( plen );
+ String propValue=props.getProperty( k );
+ if( "className".equals( name ) )
+ continue;
+ this.setProperty( o, name, propValue );
+ }
+ }
+
+ private Vector split(String s, String delim ) {
+ Vector v=new Vector();
+ StringTokenizer st=new StringTokenizer(s, delim );
+ while( st.hasMoreTokens() ) {
+ v.addElement( st.nextToken());
+ }
+ return v;
+ }
public static void main(String args[]) {
try {
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>