APACHE TOMCAT JK3 CONNECTOR ROADMAP                                   -*-text-*-

ApacheCon EU 2007 DISCUSSION POINTS:

    * Lets make next generation connector and software load balancer
      for application servers.
    * Lets put JK 1.2 in maintenance mode
      - Stop adding things to the JK 1.2 and only fix bugs
      - We'll still need to vote how to maintain this
    * It should be APR based and supported platforms should be
      - Apache Httpd 2+
      - Microsoft IIS 5+ (Windows 2000 and up)
      - Generic API for standalone based programs
    * Java code will be Java5 based
      - Java5 is mandatory
      - Both server and client reference implementation
        will be developed
    * Scripting support for the Load Balancer
      - Load balancer will have some sort of scripting
        to be able to make rule based load balancers
      - We still have to decide if we need a full-blown
        scripting support, or a simple rule engine will do
    * Extended AJP 1.3 protocol
      - Keep AJP 1.3 backward compatible
      - CPING/CPONG will be mandatory when establishing
        new connections.
      - Add connection close notification.
        Done by extending CPING/CPONG
      - See how we can have 64K+ headers
        Idea is to treat them as POST data if the
        header doesn't fit inside header AJP packet
    * Make JK3 protocol independent
      - Although developed with protocol independence in mind
        JK 1.2 is practically unusable for non AJP 1.3 protocols.
        JK3 should allow custom protocols like http or fastcgi
    * Add persistence to the dynamic configuration
      - Have a way to merge the static configuration with
        modified dynamic configuration via jkstatus
    * More powerful log framework
      - Using hierarchical logger names with corresponding
        log levels to be able to debug or trace only
        appropriate parts of the code
    * Add management thread for each child
      - APR_HAS_THREADS presence will be mandatory
      - For each child process in web server a management thread
        will be created that will monitor state and dynamic
        configuration.
    * COMET support
      - Finding our ways how to drop idle connections between web
        server and backend
      - Maybe transporting the backend connector events back to the web
        server
    * Load Balancer methods
      - Round-Robin
        Standard basic requests count method
      - Least Connections
        Number of active sessions
      - Response Time
        Request/reply response time
      - Transferred Data
        Data read/transferred over the channel. Total or within
        a measured interval.
      - All methods have weighted distribution
      - Methods can be combined with different weight for each method
        e.g. 75% Response Time and 25% Transferred Data
      - Load threshold
        Make a load treshold for high load. When node reaches the desired
        treshold (eg. 90%) update the load factors. 

HOW TO REACH THE GOALS: ROADMAP.
Here are the steps to reach the goals.
1 - Branch at a tagged version of mod_jk.
2 - Put APR in the code (specially in place where there are #ifdef).
    As first step support only httpd-2.0 and IIS.
3 - Test and port back the patches from the mod_jk branch.
    Here we should have support for:
      - Apache Httpd 2+
      - Microsoft IIS 5+ (Windows 2000 and up)
      - Generic API for standalone based programs
    No changes in the JAVA part.

    Decide if we want to support netscape too.
4 - Wait for a release cycle to see if the mod_jk branch could go to maintenance mode only.

5 - Branch again to separate configuration from the rest of the code.
6 - Test and port back the patches from the other branche.
    Here we should have support for:
    Persistence of the dynamic configuration.
    A way to merge the static configuration with a dynamic one.
    A dynamic configuration via an extented jkstatus
7 - Test and port back the patches from the old mod_jk branch.
8 - Write the JAVA part so that contexts and nodes could be added/remoted automaticly.
9 - Wait for a release cycle to see if the previous mod_jk branch could go to maintenance mode only.

n - Branch and process the protocol part of the proposal. 
    ...
