costin      02/01/06 00:50:56

  Modified:    jk/java/org/apache/jk/server JkMain.java JkServlet.java
  Log:
  JkServlet is now functional. For 3.3 you can just add jk or a symlink to modules.
  For 4.0 you just need to add the declaration for the 'trusted' app in server.xml
  _and_ copy the jar files in servler/lib ( that will not be needed in 4.1 ).
  
  The 3.3 impl is working ( at least simple servlets/jsps). I still have some
  lines to add to the 4.0 impl ( but it starts fine and receives the request ).
  
  Revision  Changes    Path
  1.3       +34 -7     
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JkMain.java       5 Jan 2002 10:03:43 -0000       1.2
  +++ JkMain.java       6 Jan 2002 08:50:56 -0000       1.3
  @@ -78,27 +78,53 @@
   public class JkMain
   {
       WorkerEnv wEnv=new WorkerEnv();
  +    String propFile;
  +    Properties props;
  +
  +    Worker defaultWorker;
       
       public JkMain()
       {
       }
  -    
   
  +    public void setPropFile( String p  ) {
  +        propFile=p;
  +        props=new Properties();
  +        try {
  +            props.load( new FileInputStream(propFile) );
  +        } catch(IOException ex ){
  +            ex.printStackTrace();
  +        }
  +    }
  +
  +    public void setProperties( Properties p ) {
  +        props=p;
  +    }
  +
  +    public void setDefaultWorker( Worker w ) {
  +        defaultWorker=w;
  +    }
  +    
       public void start() throws IOException {
  -        ChannelSocket csocket=new ChannelSocket();
  +        ChannelUn csocket=new ChannelUn();
  +        csocket.setFile( "/tmp/tomcatApr" );
  +        /* ChannelSocket csocket=new ChannelSocket();
           csocket.setPort( 8009 );
  +        */
           /*
           ChannelUnixSocket csocket=new ChannelUnixSocket(); // JFC tests
  -        wEnv.addChannel( csocket );
            */
  +        wEnv.addChannel( csocket );
  +
  +        if( defaultWorker == null ) 
  +            defaultWorker=new WorkerDummy();
   
  -        WorkerDummy wdummy=new WorkerDummy();
  -        csocket.setWorker( wdummy );
  -        wEnv.addWorker( wdummy );
  +        csocket.setWorker( defaultWorker );
  +        wEnv.addWorker( defaultWorker );
           
           HandlerRequest hReq=new HandlerRequest();
           wEnv.addHandler( hReq );
  -        hReq.setWorker( wdummy );
  +        hReq.setWorker( defaultWorker );
           
           HandlerEcho hEcho=new HandlerEcho();
           wEnv.addHandler( hEcho );
  @@ -118,6 +144,7 @@
               String propFile=args[0];
               
               JkMain jkMain=new JkMain();
  +            jkMain.setPropFile(propFile);
               jkMain.start();
           } catch( Exception ex ) {
               ex.printStackTrace();
  
  
  
  1.2       +102 -1    
jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkServlet.java
  
  Index: JkServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JkServlet.java    31 Dec 2001 19:09:59 -0000      1.1
  +++ JkServlet.java    6 Jan 2002 08:50:56 -0000       1.2
  @@ -78,9 +78,110 @@
    *  It'll just start/init jk and use a dummy endpoint ( i.e. no servlet
    *  container ).
    */
  -public class JkServlet
  +public class JkServlet extends HttpServlet
   {
  +    String password;
  +    String user;
  +    /* Parameters for the ajp channel */
  +    String port;
  +    String host; /* If it starts with '/' we'll use ud */
  +    ServletContext sctx;
  +    
       public JkServlet()
       {
       }
  +
  +    protected Properties servletConfig2properties(ServletConfig conf ) {
  +        Properties props=new Properties();
  +        Enumeration paramNE=conf.getInitParameterNames();
  +        while( paramNE.hasMoreElements() ){
  +            String s=(String)paramNE.nextElement();
  +            String v=conf.getInitParameter(s);
  +
  +            props.put( s, v );
  +        }
  +        return props;
  +    }
  +    
  +    
  +    public void init(ServletConfig conf) throws ServletException {
  +        super.init(conf);
  +        sctx=conf.getServletContext();
  +        getServletAdapter();
  +    }
  +
  +    /* Ok, this is a bit hacky - there is ( or I couldn't find ) any clean
  +       way to access tomcat40 internals without implementing the interface,
  +       and that will brake 3.3 ( and probably other things ).
  +
  +       It does seem to work for 4.0, and in future we can add a tomcat40 
valve/whatever
  +       that will provide an Attribute for 'trusted' apps with pointer to
  +       the internals.
  +    */
  +    private void getServletAdapter() {
  +        try40();
  +        try33();
  +    }
  +            
  +    private void try33() {
  +        // 33 ?
  +        try {
  +            JkServlet t33=(JkServlet)newInstance( 
"org.apache.jk.server.tomcat33.JkServlet33" );
  +            if( t33 == null ) {
  +                d("3.3 not detected or untrusted app");
  +                return;
  +            }
  +            t33.initializeContainer( getServletConfig());
  +        } catch( Exception ex ) {
  +            ex.printStackTrace();
  +        }
  +    }
  +
  +    private void try40() {
  +        // 4.x ? 
  +        try {
  +            HttpServletRequest req=(HttpServletRequest)
  +                newInstance( "org.apache.catalina.connector.HttpRequestBase");
  +            if( req==null ) {
  +                d("4.0 not detected or untrusted app");
  +                return;
  +            }
  +            HttpServletResponse res=(HttpServletResponse)
  +                newInstance( "org.apache.catalina.connector.HttpResponseBase");
  +
  +            RequestDispatcher rd=
  +                sctx.getNamedDispatcher( "JkServlet40" );
  +            if( rd==null ) return;
  +            
  +            try {
  +                rd.include( req, res );
  +            } catch( Exception ex ) {
  +                ex.printStackTrace();
  +                // ignore it - what would you expect, we pass dummy objects
  +            }
  +        } catch( Exception ex ) {
  +            ex.printStackTrace();
  +        }
  +    }
  +
  +    private Object newInstance( String s ) {
  +        try {
  +            Class c=Class.forName( s );
  +            return c.newInstance();
  +        } catch( Exception ex ) {
  +            // ex.printStackTrace();
  +            return null;
  +        }
  +    }
  +
  +    public void initializeContainer(ServletConfig cfg) {
  +    }
  +
  +
  +    private static final int dL=0;
  +    private static void d(String s ) {
  +        System.err.println( "JkServlet: " + s );
  +    }
   }
  +
  +
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to