Re: New tag ?

2005-07-23 Thread Jason Brittain
On 7/23/05, Mark Thomas [EMAIL PROTECTED] wrote:
 I have been doing some quick tests and my totally unscientific,
 statistically invalid results are that cvs annotate seems to be about 7
 to 8 times faster than svn blame (50s compared with 7s) and cvs log
 seems to be about 2 to 3 times faster than svn log (16s compared to 7s).

I've heard the subversion developers remind people that there are at least a few
different network protocols for accessing svn.  In the http:// case,
it will be the
slowest.  IIRC they say using the svn:// protocol is the fastest.  It looks
as if the Apache svn installation does not support svn:// URLs.  The page that
shows the URLs doesn't mention it:

http://jakarta.apache.org/site/cvsindex.html#Subversion

And when I try to connect to the svn port (tcp 3690) I get a connection refused.
So, maybe the infrastructure people could set up a svnserve server as well as
serving these repositories through Apache httpd?

http://svnbook.red-bean.com/en/1.1/ch06s03.html

I use svn and I'm looking forward to having Tomcat hosted in it.

Remy: isn't svn blame what you're looking for?

-- 
Jason Brittain

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



Re: Tomcat build fails: junit

2005-06-04 Thread Jason Brittain

Jonathan Maasland wrote:

Hi Marco,

First off, this is the dev-list so I don't think this is the right place 
for your question. Use tomcat-user for these types of questions.


He sent this to the dev list because he's building it (more of a developer
thing to do), as opposed to just using the release binary.  He's passing on
the info that one of the build properties no longer works so that the Tomcat
committers can fix that for themselves and for other developers.  This is
the appropriate mailing list for that, not tomcat-user.

--
Jason Brittain

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



Re: [OT] - benchmark on APR stuff

2005-05-02 Thread Jason Brittain
Peter Rossbach wrote:
Hey Peter,
I have download and install Jmeter 2.0.3 and want load your testplans, 
but I got this error:

2005/05/03 06:45:43 INFO  - jmeter.gui.action.Load: Loading file: 
D:\peterlintestplan\concurrent_1.jmx
2005/05/03 06:45:43 ERROR - jmeter.save.SaveService: Problem loading 
part of file 
org.apache.avalon.framework.configuration.ConfigurationException: No 
attribute named class is associated with the configuration element 
testelement at -
[snip]
What I made wrong?
Apparently JMeter 2.0.3 is too old.  :)  I downloaded and built JMeter
from CVS head, and that allowed me to load and run his test plans.
Cheers.
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: cvs commit: jakarta-tomcat-catalina/webapps/docs cluster-howto.xml

2005-04-29 Thread Jason Brittain
[EMAIL PROTECTED] wrote:
pero2005/04/29 13:14:58
  Modified:webapps/docs cluster-howto.xml
  Log:
  Not ready, but add some important information about current cluster modul
  implementation details.
  
  Revision  ChangesPath
  1.6   +428 -7jakarta-tomcat-catalina/webapps/docs/cluster-howto.xml
[snip]
   section name=FAQ
   pTo be completed once I receive questions about session replication:/p
   ol
  -liQ: What happens when I pull the network cord?p/p
  +liQ: What happens when I pull the network card?p/p
Actually, I think this really is supposed to be cord, not card.  Maybe
replacing it with the word cable would be better?
Cheers.
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Tomcat 5.5.9 runs on Kaffe 1.1.5 (was Re: Tomcat and APR)

2005-04-28 Thread Jason Brittain
Jason Brittain wrote:
Remy Maucherat wrote:
Jason Brittain wrote:
This release of Apache Tomcat was packaged to run on J2SE 5.0
or later. It can be run on earlier JVMs by downloading and
installing a compatibility package from the Apache Tomcat
binary download page.
means JMX wasn't found, that's all.
Okay, I confirmed at least one way to make Tomcat 5.5.9 run on Kaffe 1.1.5.
Adding the jmx.jar to the Kaffe's boot classpath works:
# export CATALINA_BASE=/home/$USER/jakarta-tomcat-5.5.9
# export CATALINA_OPTS=-Xbootclasspath/p:$CATALINA_BASE/bin/jmx.jar
# cd $CATALINA_BASE
# bin/catalina.sh start
Now, Tomcat runs.  I tried the JSP examples, and they work.  I'll see
about benchmarking it versus JDK 1.4.x and 1.5.x.  :)
Thanks for the help Remy.
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Tomcat 5.5.9 runs on Kaffe 1.1.5 (was Re: Tomcat and APR)

2005-04-28 Thread Jason Brittain
Remy Maucherat wrote:
Jason Brittain wrote:
Jason Brittain wrote:
Now, Tomcat runs.  I tried the JSP examples, and they work.  I'll see
about benchmarking it versus JDK 1.4.x and 1.5.x.  :)
It's really bad. APR might help a little.
Surprisingly, it looked reasonable when I benchmarked it today.  Here
are the results:
Kaffe 1.1.5
250  users -- 205/sec throughput, 3.3 average, 0% error
500  users -- 307/sec throughput, 11.4 average, 0% error
1000 users -- 325/sec throughput, 370.7 average, 0% error
2000 users -- 138/sec throughput, 3048.8 average, 0% error
JDK 1.5.0
250  users -- 204/sec throughput, 2.8 average, 0% error
500  users -- 307/sec throughput, 42.2 average, 0% error
1000 users -- 390/sec throughput, 124.1 average, 0% error
2000 users -- 294/sec throughput, 130.8 average, 0% error
When the concurrency was high, Kaffe was quite a bit slower.  But,
at the low end, it seems to keep up with Sun JDK 1.5.0 just fine.
I did see some problems though: several webapps I tried didn't work
due to random misc JVM problems in Kaffe.  It's still looking a bit
incompletely implemented.
For the above test, I used jmeter CVS HEAD with Peter Lin's concurrent1
test plan (from http://cvs.apache.org/~woolfel/native_testplans.zip),
modified for my box's IP address, and to request /tomcat.gif.
The tested box is a Fedora Core 2 x86 32 box (running Tocmat 5.5.9).
The tester box is a Fedora Core 3 x86 32 box (running jmeter).
Remy: Maybe the slowness you saw with kaffe is on win32?
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Tomcat and APR

2005-04-25 Thread Jason Brittain
Remy Maucherat wrote:
This has been hinted for a while ;) The purpose of this email is to
propose using APR (Apache Portable Runtime) as the network IO used by
Tomcat, instead of the JVM's IO.
[snip]
Which will allow:
[snip]
- (likely) better performance and reliability on free JVMs
This sounds as though you're implying that Tomcat already runs on one or
more free JVM.  Which ones?  And, any particular version?
All of them that I have tried can't run Tomcat.  Before, it was just that
they each used the GNU Classpath core classes, which were (still are?) too
incomplete, and even though the required classes were found and loaded, they
were either incomplete (missing some methods for instance), or they were wrong
somehow and caused random fatal startup problems.  Most of the problems seemed
to have to do with either reflection or JMX or both.  Here's how my last attempt
went (SableVM Version 1.1.10):
[EMAIL PROTECTED] jakarta-tomcat-5.5.8-with-compat]# java-sablevm 
-Djava.endorsed.dirs=/home/jbrittain/jakarta-tomcat-5.5.8-with-compat/common/endorsed
 -classpath 
:/home/jbrittain/jakarta-tomcat-5.5.8-with-compat/bin/bootstrap.jar:/home/jbrittain/jakarta-tomcat-5.5.8-with-compat/bin/commons-logging-api.jar
 -Dcatalina.base=/home/jbrittain/jakarta-tomcat-5.5.8-with-compat 
-Dcatalina.home=/home/jbrittain/jakarta-tomcat-5.5.8-with-compat 
-Djava.io.tmpdir=/home/jbrittain/jakarta-tomcat-5.5.8-with-compat/temp 
org.apache.catalina.startup.Bootstrap start Created MBeanServer with ID: [UID: 
8594076,1109751203829,-32768]:localhost.localdomain:1
java.lang.IllegalArgumentException: argument of incorrect type
   at java.lang.reflect.Method.invoke (Method.java:461)
   at org.apache.catalina.startup.Bootstrap.setAwait (Bootstrap.java:337)
   at org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:407)
   at java.lang.VirtualMachine.invokeMain (VirtualMachine.java)
   at java.lang.VirtualMachine.main (VirtualMachine.java:108)
So, I'm still looking for even one free/OSS JVM that is capable of
running Tomcat.
--
Jason Brittain

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


Re: Tomcat and APR

2005-04-25 Thread Jason Brittain
Remy Maucherat wrote:
Jason Brittain wrote:
Remy Maucherat wrote:
This has been hinted for a while ;) The purpose of this email is to
propose using APR (Apache Portable Runtime) as the network IO used by
Tomcat, instead of the JVM's IO.
[snip]
Which will allow:
[snip]
- (likely) better performance and reliability on free JVMs
This sounds as though you're implying that Tomcat already runs on one or
more free JVM.  Which ones?  And, any particular version?
gij-4.0 (so gcjing portions should work), 
I haven't tried this one yet.  It'll require some time to set up properly.
kaffe 1.1.5, 
Nope:
[EMAIL PROTECTED] jakarta-tomcat-5.5.9]# bin/catalina.sh start
Using CATALINA_BASE:   /home/jbrittain/jakarta-tomcat-5.5.9
Using CATALINA_HOME:   /home/jbrittain/jakarta-tomcat-5.5.9
Using CATALINA_TMPDIR: /home/jbrittain/jakarta-tomcat-5.5.9/temp
Using JRE_HOME:   /usr/local/kaffe
[EMAIL PROTECTED] jakarta-tomcat-5.5.9]# cd logs
[EMAIL PROTECTED] logs]# more catalina.out
WARNING: System property java.util.logging.manager should be the name of a 
subclass of java.util.logging.LogManager
This release of Apache Tomcat was packaged to run on J2SE 5.0
or later. It can be run on earlier JVMs by downloading and
installing a compatibility package from the Apache Tomcat
binary download page.
[EMAIL PROTECTED] logs]# java -version
Kaffe Virtual Machine
Copyright (c) 1996-2004 Kaffe.org project contributors (please see
  the source code for a full list of contributors).  All rights reserved.
Portions Copyright (c) 1996-2002 Transvirtual Technologies, Inc.
The Kaffe virtual machine is free software, licensed under the terms of
the GNU General Public License.  Kaffe.org is a an independent, free software
community project, not directly affiliated with Transvirtual Technologies,
Inc.  Kaffe is a Trademark of Transvirtual Technologies, Inc.  Kaffe comes
with ABSOLUTELY NO WARRANTY.
Engine: Just-in-time v3   Version: 1.1.5   Java Version: 1.1
... And, this is *with* Tomcat's compat package installed properly.  This may
just be a bug in Tomcat's J2SE 5.0 detection code (bad expectations w.r.t. free
JVMs?).  Or, maybe kaffe just doesn't implement what we know we need?  Either
way, it doesn't work.
probably others.
I wish I knew.  None have worked so far for me.
[snip]
Well, if you try the only VM which doesn't work ;)
No, like I said, I tried several brands  versions.
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Tomcat and APR

2005-04-25 Thread Jason Brittain
Remy Maucherat wrote:
Jason Brittain wrote:
Nope:
[EMAIL PROTECTED] jakarta-tomcat-5.5.9]# bin/catalina.sh start
Using CATALINA_BASE:   /home/jbrittain/jakarta-tomcat-5.5.9
Using CATALINA_HOME:   /home/jbrittain/jakarta-tomcat-5.5.9
Using CATALINA_TMPDIR: /home/jbrittain/jakarta-tomcat-5.5.9/temp
Using JRE_HOME:   /usr/local/kaffe
[EMAIL PROTECTED] jakarta-tomcat-5.5.9]# cd logs
[EMAIL PROTECTED] logs]# more catalina.out
WARNING: System property java.util.logging.manager should be the 
name of a subclass of java.util.logging.LogManager
If for some reason the java.util.logging impl isn't compatible with 
classpath, remove it (delete tomcat-juli.jar).
Okay.  I did that, and tried it again.  Now it doesn't give that warning, 
but
Tomcat still fails to run in the same way.
For the rest, install the compat package.
You must not have read the paragraph in my last email that said:
... And, this is *with* Tomcat's compat package installed properly.
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Tomcat and APR

2005-04-25 Thread Jason Brittain
Remy Maucherat wrote:
Jason Brittain wrote:
You must not have read the paragraph in my last email that said:
... And, this is *with* Tomcat's compat package installed properly.
Maybe there's a regression. It used to work long before 1.1.5 anyway, 
I'm curious to know which version of Tomcat ran like that.  I've tried
more than a few versions.
but it could be that the classpath generation using the manifest from 
JARs doesn't work (it does in gij, where you can do a -jar 
bin/boostrap.jar). So add jmx.jar and tomcat-juli.jar to the classpath 
to fix it.
Just so you know, I unjarred bootstrap.jar (from 5.5.9) and here's what
the manifest looks like:
[EMAIL PROTECTED] bootstrap]# cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.4.2_06-b03 (Sun Microsystems Inc.)
Main-Class: org.apache.catalina.startup.Bootstrap
Specification-Title: Catalina
Specification-Version: 1.0
Class-Path: jmx.jar commons-daemon.jar commons-logging-api.jar tomcat-
 juli.jar
Notice the tomcat-\r juli.jar in there!
This release of Apache Tomcat was packaged to run on J2SE 5.0
or later. It can be run on earlier JVMs by downloading and
installing a compatibility package from the Apache Tomcat
binary download page.
means JMX wasn't found, that's all.
Yes.
I did:
[EMAIL PROTECTED] jakarta-tomcat-5.5.9]# export 
CLASSPATH=/home/jbrittain/jakarta-tomcat-5.5.9/bin/jmx.jar
and then started it again, and it still didn't find JMX (same message
in catalina.out).  If that's what you meant, it didn't work.
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Tomcat and APR

2005-04-25 Thread Jason Brittain
Remy Maucherat wrote:
Jason Brittain wrote:
This release of Apache Tomcat was packaged to run on J2SE 5.0
or later. It can be run on earlier JVMs by downloading and
installing a compatibility package from the Apache Tomcat
binary download page.
means JMX wasn't found, that's all.
Yes.
I did:
[EMAIL PROTECTED] jakarta-tomcat-5.5.9]# export 
CLASSPATH=/home/jbrittain/jakarta-tomcat-5.5.9/bin/jmx.jar

and then started it again, and it still didn't find JMX (same message
in catalina.out).  If that's what you meant, it didn't work.
CLASSPATH is obviously ignored. This has been like that for years.
At first I thought that was the case, so I had a brief look in 5.5.9's
catalina.sh script and found this:
# Add on extra jar files to CLASSPATH
if [ -n $JSSE_HOME ]; then
  
CLASSPATH=$CLASSPATH:$JSSE_HOME/lib/jcert.jar:$JSSE_HOME/lib/jnet.jar:$JSSE_HOME/lib/jsse.jar
fi
CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-logging-api.jar
... which is used farther down like:
$_RUNJAVA $JAVA_OPTS $CATALINA_OPTS \
  -Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS -classpath $CLASSPATH \
...
It must not have the effect on the JVM that I thought it may.
So then to what classpath should I add jmx.jar?
--
Jason Brittain
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: cvs commit: jakarta-tomcat-catalina/webapps/docs changelog.xml

2005-04-11 Thread Jason Brittain
  subsection name=Cluster
changelog
  add
   +DeltaManager has now JMX expireAllLocalSessions and processExipre 
 operation
   +for better cluster node shutdown handling (pero)
   +  /add

Why would we want to invalidate all sessions active on one node of the cluster
when bringing it down, as opposed to replicating the session data out to one or
more other available nodes in the cluster and letting the other machine(s)
handle them?  Or, did you add these operations/methods for cases where the
cluster is configured to keep any given session on exactly one node?  (I
wouldn't think so, since in that case what would the session clustering really
be useful for?)

Just curious..

-- 
Jason Brittain

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



Re: In memory session replication, reminder

2002-03-11 Thread Jason Brittain

GOMEZ Henri wrote:
You can start with my doc, there are two references to 
JavaGroups in there
http://www.filip.net/tomcat/tomcat-javagroups.html
http://www.javagroups.com/


- Does it use multicast or others broadcast techniques ?

Virtual Synchrony and Probabilistic broadcasting on top of IP 
Multicasting.
see the docs

 
 Excellent stuff, something which could have its room in
 jakarta !!!

JavaGroups is cool since it is pure, multiplatform Java, although
(from what I know) it cannot fall back to TCP when multicast isn't
available, and the license could be better..  :)

If you liked that, also have a look at Spread:

http://www.spread.org/

The messaging engine (daemon) isn't written in Java, but it's very
fast and efficient, and runs on all the popular OSs.  The Java clients
connect to it via TCP sockets, so the clients can be pure-Java.  The
License is similar to the Apache license, and unlike JavaGroups the
engine does know to fall back to using TCP unicast when multicast is
not available.  It's been around for quite some time, too.

What I'd like to do at some point is take Filip Hanik's TC4 session
replication code (looking nice!) and make it switchable to use either
Spread or JavaGroups, or other communication mechanisms for keeping the
session data in sync. Pluggable messaging back-ends..

FWIW, I'd like to see the in-memory session replication code as part
of TC4 itself, with a pluggable messaging layer API that allows
a separate messaging system to be used.  But, if people decide that
it's better suited to j-t-c, then that's okay (not quite as good, IMO),
but I'd still like it to have a pluggable messaging layer API.

Cheers.

-- 
Jason Brittain
[EMAIL PROTECTED]
650-228-2644
CollabNet http://www.collab.net


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




Re: [4.0.3] [VOTES] Upcoming release and security fix

2002-02-28 Thread Jason Brittain


Hi Remy and gang..

Below is my non-binding vote (for fun!):

Remy Maucherat wrote:
 Since there are apparently diverging opinions on the subject (and also since
 I didn't get any +1s for a possible 4.0.3 b1, or a 4.0.2a release), here's a
 formal request for vote.
 
 On the security problem reported yesterday, affecting the security manager
 sandboxing. We should:
 ballot
 A [X] Make a full 4.0.3 (or 4.0.2a) release which would only include the
 security fix

This looks to me to be the path of least resistance/hassle for everyone
involved, since it's just a small change to the last release.  Release early,
release often.  :)

 B [ ] Make the security fix available as a binary patch for 4.0.2 (it would
 take the form of an archive to extract in $CATALINA_HOME, and would be
 *small*)

Binary patches make me nervous.  Whether this would work best or not
depends on a whole bunch of unspecified factors, so I won't vote for it.

 C [ ] Accelerate the release schedule of 4.0.3, which would include the
 security fix, as well as fixes for other issues with 4.0.2 (with Beta 1 on
 03/01 and Final on 03/08)
 /ballot

This one would be nice too, but it creates a bunch of extra work for you
it seems (which is my guess as to why you're not voting for it).

 Multiple votes are acceptable. If there are other interesting possibilities,
 let me know.
 
 My vote is 'B'.
 
 In parallel, I'd like to release a first beta of 4.0.3 on 03/01 (depending
 on the vote on item 'C' above, the release cycle may be shorter or longer):
 ballot
 +1 [ ] I support the release, and I will help
 +0 [X] I support the release, and I sure wish I had time to help!!
 -0 [ ] I don't support the release
 -1 [ ] I'm against the release because:


-- 
Jason Brittain
jasonb (at) collab (dot) net
CollabNet http://www.collab.net


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




Re: cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/valves AccessLogValve.java

2001-10-26 Thread Jason Brittain

Remy Maucherat wrote:


Since the bug was likely originally my fault, I felt compelled to
report to you about this missing hunk.  :)
 
 I didn't backport this since I didn't think it was useful. It should just
 save a few operations if there's a race there, I think.
 Maybe it would be safer to add it too.
 
 Remy


Yeah, I was thinking it would be a good idea for consistency
(future patching across more than one branch, etc.).  Thanks
for fixing it..


-- 
Jason Brittain
jasonb(at)collab(dot)net
CollabNet http://www.collab.net




Re: cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/valves AccessLogValve.java

2001-10-25 Thread Jason Brittain


Hi Remy!

Cool bugfix, but you forgot to backport a piece of it:

  @@ -604,11 +612,14 @@
// If the date has changed, switch log files
if (!dateStamp.equals(tsDate)) {
synchronized (this) {
   -close();
   -dateStamp = tsDate;
   -open();
   +if (!dateStamp.equals(tsDate)) {
   +close();
   +dateStamp = tsDate;
   +open();
   +}
}
}
   +
}

// Log this message

Since the bug was likely originally my fault, I felt compelled to
report to you about this missing hunk.  :)

Keep up the excellent work!

-- 
Jason Brittain
jasonb(at)collab(dot)net
CollabNet http://www.collab.net


[EMAIL PROTECTED] wrote:

 remm01/10/23 16:08:10
 
   Modified:catalina/src/share/org/apache/catalina/valves Tag:
 tomcat_40_branch AccessLogValve.java
   Log:
   - Port fix for 4327.
   
   Revision  ChangesPath
   No   revision
   
   
   No   revision
   
   
   1.10.2.1  +10 -2 
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/valves/AccessLogValve.java
   
   Index: AccessLogValve.java
   ===
   RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/valves/AccessLogValve.java,v
   retrieving revision 1.10
   retrieving revision 1.10.2.1
   diff -u -r1.10 -r1.10.2.1
   --- AccessLogValve.java 2001/08/27 19:10:26 1.10
   +++ AccessLogValve.java 2001/10/23 23:08:10 1.10.2.1
   @@ -128,7 +128,7 @@
 *
 * @author Craig R. McClanahan
 * @author Jason Brittain
   - * @version $Revision: 1.10 $ $Date: 2001/08/27 19:10:26 $
   + * @version $Revision: 1.10.2.1 $ $Date: 2001/10/23 23:08:10 $
 */

public final class AccessLogValve
   @@ -300,6 +300,12 @@
private boolean resolveHosts = false;


   +/**
   + * Instant when the log daily rotation was last checked.
   + */
   +private long rotationLastChecked = 0L;
   +
   +
// - Properties


   @@ -594,9 +600,11 @@

// Only do a logfile switch check once a second, max.
long systime = System.currentTimeMillis();
   -if ((systime - currentDate.getTime())  1000) {
   +if ((systime - rotationLastChecked)  1000) {
   +
// We need a new currentDate
currentDate = new Date(systime);
   +rotationLastChecked = systime;

// Check for a change of date
String tsDate = dateFormatter.format(currentDate);
   
   
   
 





You Can't Say WebApp! -- was cvs commit: jakarta-tomcat-4.0/service/java ServiceController.java

2001-06-28 Thread Jason Brittain


[EMAIL PROTECTED] wrote:

 pier01/06/25 18:32:07
 
 Added:   service/java ServiceController.java
 Log:
 Full UNIX service implementation checkin

[snip]

 * 4. The names  The  Jakarta  Project,  WebApp, 
and  Apache  Software *
 *Foundation  must not be used  to endorse or
promote  products derived *
 *from this  software without  prior  written 
permission.  For  written *
 *permission, please contact [EMAIL PROTECTED].
   *

I fully realize the intent of the above clause in the
license for mod_webapp, but I have to ask..  
The term web application and web app have been
used
for years, especially with the word server on the
end, it's become a generic but descriptive label that
is today widely used in all kinds of documentation
for commercial products and open source projects.

Even though you've removed the space between the two
words web and app, to me it doesn't really change
the term significantly.  Am I alone here?

What the license above is saying is that noone can
take
Tomcat 4 (with mod_webapp and its pure-Java-side
connector), modify some part of the source, and use
the term WebApp to endorse or promote their project
or product.

So, are you and/or the Apache Software Foundation now
claiming exclusive rights to the use of the name
WebApp as this license clause claims?

--
Jason Brittain
[EMAIL PROTECTED]



__
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/



Re: FW: [advanced-servlets] Session Load Balancing (was: To avoid

2001-02-28 Thread Jason Brittain

Nick Bauman wrote:

 Jason,
 
 Yes, and the way I've seen people solve this issue is to make each
 server constantly replicate its sessions to another server so that any
 session's state is stored in two servers (not just one).  For example,
 if you've got four servers, A, B, C, and D, you configure A to
 replicate to B, B to replicate to C, C to replicate to D, and D to
 replicate to A.  Then the "composite ID" would contain the primary
 server tag, secondary server tag, and the session ID, like: 
 A:B:sessionXXX.  So, if server A went down, the load balancer could
 still get session info from server B, and at the  same
 time let server D know that A is down and to replicate to B until
 further notice.
 
 
 Nh.
 
 This is once again only making sure a majority of the sessions are saved in
 a rotation. A lot of work for very little real fault tolerance.


Sorry to say, but the folks at BEA disagree with you -- this is exactly
what Weblogic does to facilitate distributed HTTP sessions.  In-memory
replication to a selected "buddy" server is pretty fast and fault tolerant
enough for most failures.  It can also ensure no single point of failure.

 Also I think your english up there indicates a solution that causes
 tremendous hysterysis amongst the servers.


How so?

 This also works when each server replicates sessions to more than one
 backup server so that you've got even higher fault tolerance (but
 you'll probably never need that level of fault tolerance).
 
 
 Now you may have something: a seperate, parallel, session cluster.


Anyone could sure do it that way.  But, I'm not sure that separating it
out from the servers themselves could add much fault tolerance since
the cons to doing this seem to be about as large as the pros.  It seems to
me that making it part of the servers (the servlet containers, for instance)
would work just as well.


-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




Re: FW: [advanced-servlets] Session Load Balancing (was: To avoid

2001-02-26 Thread Jason Brittain

Nick Bauman wrote:

 Pier,
 
 If the next request from that client is routed to server Y, then
 server Y will get a request with that same composite ID of
 "serverX:sessionPPP".  This tells server Y that the first thing it
 needs to do is get the canonical version of Session sessionPPP from
 server X. (The exact method for this may vary, but suffice to say it
 will not involve spawning Threads from Servlets. :-)  In the response
 
 
 The only problem with this is you have N servers in a rotation (sprayed or
 DNS round-robin) and one goes down, you lose 1/N sessions. 
 
 Some people think that if you are going to bother with session load
 balancing / distribution at all, why not try and ensure all the sessions are
 safe, not just a majority.


Yes, and the way I've seen people solve this issue is to make each server
constantly replicate its sessions to another server so that any session's
state is stored in two servers (not just one).  For example, if you've got
four servers, A, B, C, and D, you configure A to replicate to B, B to
replicate to C, C to replicate to D, and D to replicate to A.  Then the
"composite ID" would contain the primary server tag, secondary server tag,
and the session ID, like:  A:B:sessionXXX.  So, if server A went down,
the load balancer could still get session info from server B, and at the 
same
time let server D know that A is down and to replicate to B until further
notice.

This also works when each server replicates sessions to more than one
backup server so that you've got even higher fault tolerance (but you'll
probably never need that level of fault tolerance).

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




Re: cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup CatalinaBlock.java CatalinaBlock.xinfo

2001-02-20 Thread Jason Brittain

Pier P. Fumagalli wrote:

 Remy Maucherat [EMAIL PROTECTED] wrote:
 
 Quoting Jason Brittain [EMAIL PROTECTED]:
 
 Please let me know when you're ready to discuss my TomcatBlock
 patches..  No hurry on my part, I just want to keep the idea warm.  :)
 
 Feel free to see it in action at:
 
 http://eas.betaversion.org
 
 I just went there by accident this morning.
 Stop stealing the bandwidth I'm using for my email (which is
 [EMAIL PROTECTED]) ;)
 
 We'll reintroduce the wrapper when the 4.1 repository is recreated, which
 should happen just after TC 4 beta 2.
 
 
 Actually, eas.betaversion.org is not at my place, Remy, only your email is.
 EAS.BETAVERSION.ORG is Jason's machine, I just aliased the DNS (unless
 someone didn't put it on there without me knowing it :)
 
 Pier


Nope, it's on my machine.  Thanks for letting us hitchhike on your
domain, Pier!  It works great..

betaversion.org is cool!  :)

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




Re: [PATCH] CatalinaBlock.java

2001-02-11 Thread Jason Brittain


Sam Ruby wrote:
 
 Jason van Zyl wrote:
 
 
  While playing with Sam Ruby's gump I noticed that
the
  CatalinaBlock is out of sync with Avalon. Not sure
if
  staying right up-to-date is critical but here's
the
  patch anyway.
 
 
 Until Avalon ships, tracking to the current APIs is
the only way to go.
 
 I've committed the changes.  Thanks!
 
 - Sam Ruby

If you like that patch, you'll probably also like
the ones I sent in on Friday -- messages with the
title
"[PATCH] TC4: TomcatBlock on Avalon 3.1a1"..

Cheers.



=====
Jason Brittain
[EMAIL PROTECTED]

__
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail - only $35 
a year!  http://personal.mail.yahoo.com/

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




[PATCH] TC4: TomcatBlock on Avalon 3.1a1: Part 1

2001-02-09 Thread Jason Brittain


Hi guys.

I've just finished a bunch of changes to make Tomcat 4 (Catalina and
Jasper) work on top of Avalon 3.1a1.

Remy: Thanks for CatalinaBlock -- it served as a good starting point!

What I've done is made the necessary modifications to make Tomcat 4
build as a single Avalon .bar (Block ARchive) file that when deployed
into Avalon auto-deploys its own files and directories from the bar
file to the filesystem where Catalina and Jasper can use them.

Some of my goals that are now done:

1) Make Tomcat 4 deployable as a single .bar file.
2) Make Catalina log through Avalon's LogKit package.
3) Make Jasper work so that JSPs also work (this was tough as it
  turned out).
4) Make Tomcat's build system able to build the .bar file.
5) Only patch Catalina's code where absolutely necessary, and then
  only make patches that are sure not to disturb stand-alone behavior.

In the process, I decided that the name of the block should really be
TomcatBlock, not CatalinaBlock, since the block contains Catalina,
Jasper, and the demo/test webapps.  Let me know if you don't agree.
So, I've replaced CatalinaBlock with TomcatBlock, which is based on
CatalinaBlock but is heavily modified.

In order to make Catalina log through Avalon, I rewrote the
AccessLogValve so that we now have FileAccessLogValve and
AvalonAccessLogValve which are both subclasses of AccessLogValveBase.
I also added org.apache.catalina.logger.AvalonFileLogger so that the
other logs can also log through Avalon.

I modified the main build.xml file and also Catalina's build.xml file
so that from the top-level you can do:

./build.sh dist

then

./build.sh dist-opt-avalon

in order to build tomcat-4.0.bar.  I moved that target out of
Catalina's build.xml file because it needs to include more than just
Catalina.  So now it resides in the top-level build.xml file, and its
behavior is quite a bit different.

At first, Catalina ran fine this way, but Jasper didn't.  I narrowed
the problem down to the fact that Jasper needs tools.jar on its
classpath, and that it wasn't finding it.  In order to fix the
problem, I had to make a small patch to the Bootstrap class.  I'll go
into more detail about that in one of my next mails (including the
diff).

What changed overall?

Files removed:
catalina/src/conf/catalina.conf.xml
catalina/src/share/org/apache/catalina/valves/AccessLogValve.java
catalina/src/share/org/apache/catalina/startup/CatalinaBlock.java
catalina/src/share/org/apache/catalina/startup/CatalinaBlock.xinfo

Files patched:
build.xml
catalina/build.xml
catalina/src/share/org/apache/catalina/core/ContainerBase.java
catalina/src/share/org/apache/catalina/startup/Bootstrap.java

Files added:
catalina/src/conf/avalon-MANIFEST.MF
catalina/src/conf/avalon-server.xml
catalina/src/conf/tomcat-4.0.conf.xml
catalina/src/share/org/apache/catalina/logger/AvalonFileLogger.java
catalina/src/share/org/apache/catalina/startup/TomcatBlock.java
catalina/src/share/org/apache/catalina/startup/TomcatBlock.xinfo
catalina/src/share/org/apache/catalina/valves/AccessLogValveBase.java
catalina/src/share/org/apache/catalina/valves/AvalonAccessLogValve.java
catalina/src/share/org/apache/catalina/valves/FileAccessLogValve.java

After all of these changes I made, Tomcat 4 still builds and runs
stand-alone the same as it did before (as far as I can tell by my
somewhat limited testing) and it runs as an Avalon 3.1a1 Block.

I know this is a bunch of new code, but I think I've tested and
documented it enough to make it clear and easy commit.

My next mails will include the diffs and the new source.

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




[PATCH] TC4: TomcatBlock on Avalon 3.1a1: Part 2

2001-02-09 Thread Jason Brittain

Attached are the diffs to the files that I modified to make TomcatBlock
(Tomcat 4 running on Avalon 3.1a1).


Explanation:


build.xml (the top-level build.xml file)

I moved the dist-opt-avalon target (and associated stuff) to this file
since to build the bar file it needs to copy stuff from Catalina,
Jasper, and webapps.


catalina/build.xml

Removed the dist-opt-avalon target from this file, added some more
lines about only compiling Avalon-dependent source if Avalon is
present.


catalina/src/share/org/apache/catalina/core/ContainerBase.java

I needed to fix an obscure bug in this file to get AvalonFileLogger to
work.  What was happening was: When one of the class loaders starts
up, it tries to log some things in some cases.  But, its logger has
not yet been started yet, so the class loader ends up throwing an
exception (can't remember what kind).  To fix this, I switched the
startup order: the loader's logger gets started first, then the loader
that uses it gets started.  I'm not real sure how this could have
worked properly before this patch.  :)


catalina/src/share/org/apache/catalina/startup/Bootstrap.java

This one's the tough one!

I had a hard time getting Jasper to work inside the TomcatBlock, even
after the block deployed all of the usual directories to the
filesystem.  This is because Jasper needs the JDK's tools.jar on its
classpath.  When you run Catalina from the command line (stand-alone),
the startup script catalina.sh puts tools.jar on the classpath:

  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
CP=$CP:"$JAVA_HOME/lib/tools.jar"
  fi

But, when starting from Avalon, you don't have the shell script to add
it to the classpath for you.  So, I figured all I needed to do was
have TomcatBlock create its own ClassLoader that adds tools.jar (and
maybe some other jars too) and start up the Bootstrap class just like
CatalinaBlock did, but load it from the ClassLoader that TomcatBlock
created.

So, I tried that.  It didn't work.  After tearing out some hair, I
found the problem.  Bootstrap's createCommonLoader() method creates a
new StandardClassLoader with a set of URLs (an array of them) like
this:

  StandardClassLoader loader = new StandardClassLoader(array);

This constructor of StandardClassLoader makes a new
StandardClassLoader with the array of URLs (to jars or other paths)
setting the default parent class loader as its parent, instead of
setting Bootstrap's ClassLoader as its parent.  This caused Jasper to
not use the class loader I created to give it access to tools.jar,
thus making Jasper not work.

Now, if there is some good reason to deliberately not make Bootstrap's
classloader the parent class loader of the common class loader, then
my patch needs to be reworked.  But, I couldn't think of any reasons.
And, I could think of reasons why you would want to make Bootstrap's
class loader the parent of the common class loader..

In the classloader.html doc, it says that the "Common" class loader's
parent is supposed to be the "System" class loader (that is to say,
the class loader created from the contents of CLASSPATH at runtime).
When you run Tomcat stand-alone, this is indeed what happens.  I guess
the "System" class loader is the "default" parent, so it works.  But,
when TomcatBlock created its own class loader, that new class loader
is not the default, so it's never the parent of the "Common" class
loader, so there is no way of adding tools.jar (or other jars) to the
Common class loader's search path.  I suppose this is only a problem
when you're trying to start up Catalina using Bootstrap the way we
need to in order to make the Avalon Block.

Someone else suggested that I use EmbeddedTomcat instead, but from
what I understand that means that I also must implement my own config
system, which I don't really want to do.  :)

So, what my patch to Bootstrap does:  it uses Bootstrap's own class
loader as the parent of the Common class loader.  And, when you run
in stand-alone mode, this is (conveniently) the System class loader.


My next mail shows the files I added.

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




[PATCH] TC4: TomcatBlock on Avalon 3.1a1: Part 2 (for real this time)

2001-02-09 Thread Jason Brittain


Last time I forgot to attach the diffs!  Sorry..  This mail has them.


Attached are the diffs to the files that I modified to make TomcatBlock
(Tomcat 4 running on Avalon 3.1a1).


Explanation:


build.xml (the top-level build.xml file)

I moved the dist-opt-avalon target (and associated stuff) to this file
since to build the bar file it needs to copy stuff from Catalina,
Jasper, and webapps.


catalina/build.xml

Removed the dist-opt-avalon target from this file, added some more
lines about only compiling Avalon-dependent source if Avalon is
present.


catalina/src/share/org/apache/catalina/core/ContainerBase.java

I needed to fix an obscure bug in this file to get AvalonFileLogger to
work.  What was happening was: When one of the class loaders starts
up, it tries to log some things in some cases.  But, its logger has
not yet been started yet, so the class loader ends up throwing an
exception (can't remember what kind).  To fix this, I switched the
startup order: the loader's logger gets started first, then the loader
that uses it gets started.  I'm not real sure how this could have
worked properly before this patch.  :)


catalina/src/share/org/apache/catalina/startup/Bootstrap.java

This one's the tough one!

I had a hard time getting Jasper to work inside the TomcatBlock, even
after the block deployed all of the usual directories to the
filesystem.  This is because Jasper needs the JDK's tools.jar on its
classpath.  When you run Catalina from the command line (stand-alone),
the startup script catalina.sh puts tools.jar on the classpath:

  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
CP=$CP:"$JAVA_HOME/lib/tools.jar"
  fi

But, when starting from Avalon, you don't have the shell script to add
it to the classpath for you.  So, I figured all I needed to do was
have TomcatBlock create its own ClassLoader that adds tools.jar (and
maybe some other jars too) and start up the Bootstrap class just like
CatalinaBlock did, but load it from the ClassLoader that TomcatBlock
created.

So, I tried that.  It didn't work.  After tearing out some hair, I
found the problem.  Bootstrap's createCommonLoader() method creates a
new StandardClassLoader with a set of URLs (an array of them) like
this:

  StandardClassLoader loader = new StandardClassLoader(array);

This constructor of StandardClassLoader makes a new
StandardClassLoader with the array of URLs (to jars or other paths)
setting the default parent class loader as its parent, instead of
setting Bootstrap's ClassLoader as its parent.  This caused Jasper to
not use the class loader I created to give it access to tools.jar,
thus making Jasper not work.

Now, if there is some good reason to deliberately not make Bootstrap's
classloader the parent class loader of the common class loader, then
my patch needs to be reworked.  But, I couldn't think of any reasons.
And, I could think of reasons why you would want to make Bootstrap's
class loader the parent of the common class loader..

In the classloader.html doc, it says that the "Common" class loader's
parent is supposed to be the "System" class loader (that is to say,
the class loader created from the contents of CLASSPATH at runtime).
When you run Tomcat stand-alone, this is indeed what happens.  I guess
the "System" class loader is the "default" parent, so it works.  But,
when TomcatBlock created its own class loader, that new class loader
is not the default, so it's never the parent of the "Common" class
loader, so there is no way of adding tools.jar (or other jars) to the
Common class loader's search path.  I suppose this is only a problem
when you're trying to start up Catalina using Bootstrap the way we
need to in order to make the Avalon Block.

Someone else suggested that I use EmbeddedTomcat instead, but from
what I understand that means that I also must implement my own config
system, which I don't really want to do.  :)

So, what my patch to Bootstrap does:  it uses Bootstrap's own class
loader as the parent of the Common class loader.  And, when you run
in stand-alone mode, this is (conveniently) the System class loader.


My next mail shows the files I added.

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


--- build.xml   Fri Feb  9 14:53:03 2001
+++ build.xml-new   Fri Feb  9 12:00:40 2001
@@ -8,11 +8,13 @@
   property name="tomcat.dist" value="${basedir}/dist"/
   property name="webapps.build"   value="${basedir}/webapps/build"/
   property name="webapps.dist"value="${basedir}/webapps/dist"/
-
   property name="catalina.deploy" value="${tomcat.build}"/
   property name="jasper.deploy"   value="${tomcat.build}"/
   property name="webapps.deploy"  value="${tomcat.build}"/
-
+  property name=

[PATCH] TC4: TomcatBlock on Avalon 3.1a1: Part 3

2001-02-09 Thread Jason Brittain

Attached are the files I added to make TomcatBlock (Tomcat 4 running
on Avalon 3.1a1):

catalina/src/conf/avalon-MANIFEST.MF

This manifest file is used to create tomcat-4.0.bar.  Avalon needs a
special manifest to know which Block is contained in the BAR file.


catalina/src/conf/avalon-server.xml

When Tomcat runs on Avalon, it needs a special/tailored server.xml.
This is it.  It's not really that different from the regular server.xml
file, so we may want to make the build system just apply a diff (?)
instead of copying this whole file in as "server.xml" like I've set
it up to do currently..


catalina/src/conf/tomcat-4.0.conf.xml

This is one of the config files that tells Avalon about the Tomcat
bar file.


catalina/src/share/org/apache/catalina/logger/AvalonFileLogger.java

Allows Catalina to log through Avalon.


catalina/src/share/org/apache/catalina/startup/TomcatBlock.java

The main Block class that makes it all happen.


catalina/src/share/org/apache/catalina/startup/TomcatBlock.xinfo

An Avalon Block descriptor file for TomcatBlock.


catalina/src/share/org/apache/catalina/valves/AccessLogValveBase.java

The superclass of both FileAccessLogValve and AvalonAccessLogValve.


catalina/src/share/org/apache/catalina/valves/AvalonAccessLogValve.java

This is an AccessLogValve that sends the web server access log through
Avalon's logging system.


catalina/src/share/org/apache/catalina/valves/FileAccessLogValve.java

This is the stand-alone AccessLogValve that simply writes the output
to a file on the filesystem.  This class replaces the older, now
obsolete AccessLogValve class.


And that's it.  Let me know what you think..  :)

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


Manifest-Version: 1.0
Created-By: Apache Avalon Project

Name: org/apache/catalina/startup/TomcatBlock.class
Avalon-Block: true


!-- This is an example server configuration file for Tomcat running on  --
!-- top of the Avalon server framework.  Note: these settings won't --
!-- work when you run Tomcat without Avalon!--
!-- Note that component elements are nested corresponding to their
 parent-child relationships with each other --

!-- A "Server" is a singleton element that represents the entire JVM,
 which may contain one or more "Service" instances.  The Server
 listens for a shutdown command on the indicated port.

 Note:  A "Server" is not itself a "Container", so you may not
 define subcomponents such as "Valves" or "Loggers" at this level.
 --

Server port="8005" shutdown="SHUTDOWN" debug="0"


  !-- A "Service" is a collection of one or more "Connectors" that share
   a single "Container" (and therefore the web applications visible
   within that Container).  Normally, that Container is an "Engine",
   but this is not required.

   Note:  A "Service" is not itself a "Container", so you may not
   define subcomponents such as "Valves" or "Loggers" at this level.
   --

  !-- Define the Tomcat Stand-Alone Service --
  Service name="Tomcat-Standalone"

!-- A "Connector" represents an endpoint by which requests are received
 and responses are returned.  Each Connector passes requests on to the
 associated "Container" (normally an Engine) for processing.

 By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
 You can also enable an SSL HTTP/1.1 Connector on port 8443 by
 following the instructions below and uncommenting the second Connector
 entry.  SSL support requires the following steps:
 * Download and install JSSE 1.0.2 or later, and put the JAR files
   into "$JAVA_HOME/jre/lib/ext".
 * Edit "$JAVA_HOME/jre/lib/security/java.security" and add
 security.provider.2=com.sun.net.ssl.internal.ssl.Provider
 * Execute: keytool -genkey -alias tomcat -keyalg RSA
   with a password value of "changeit".

--

!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --
Connector className="org.apache.catalina.connector.http.HttpConnector"
   port="8080" minProcessors="5" maxProcessors="75"
   acceptCount="10" debug="0" connectionTimeout="6"/
!-- Note : To disable connection timeouts, set connectionTimeout value 
 to -1 --

!-- Define an SSL HTTP/1.1 Connector on port 8443 --
!--
Connector className="org.apache.catalina.connector.http.HttpConnector"
   port="8443" minProcessors="5" maxProcessors="75"
	   acceptCount="10&

Re: [PROPOSAL] Tomcat 4.0-beta API Change: Security Manager Facades

2001-01-19 Thread Jason Brittain


Remy Maucherat wrote:

 Quoting "Craig R. McClanahan" [EMAIL PROTECTED]:
 
 org.apache.catalina.facade.XFacade
 
 
 Nice package name. I wonder where you got it :)
 

:)

Unless I understand wrong, isn't a "facade" already a well known feature
that allows Tomcat 3.x to use more than one different version of the
Servlet API?  Am I wrong and it does more than just that?

If I'm right, that means you're proposing to use the name "facade"
in the Tomcat 4 codebase to have a completely different meaning,
right?  If this is the case, could we instead use a different name?  I'm
not sure what name I would use..  "sandbox" maybe?

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




Re: AccessLogValve Patch

2001-01-10 Thread Jason Brittain


In the message I just wrote:

 
 --- AccessLogValve.java Wed Jan 10 15:16:10 2001
 +++ AccessLogValve.java-new Wed Jan 10 15:15:50 2001
 @@ -61,6 +61,7 @@
  package org.apache.catalina.valves;
  
  
 +import java.io.BufferedWriter;
  import java.io.File;
  import java.io.FileWriter;
  import java.io.IOException;


Oops!  I forgot to remove the BufferedWriter import before I made
the patch..  Please remove that line.  Thanks!

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]




Re: Tomcat session replicator

2000-12-22 Thread Jason Brittain
cky Sessions.. what if you use it with two
  other algorithms and they override the Sticky Session and send the
  request elsewhere where it doesn't have its session replicated?).
  So, there should be two main types of load balancing algorithms:
  Democratic algorithms, and Dictator algorithms.  Dictator algorithms
  don't vote on where to send the request, they just send it.
  Democratic algorithms work together, voting about where to send
  a request, and each algorithm's vote is weighted.

  Regardless of the load balancing algorithm(s) used, the request will
  never be redirected to a server that is down.  For this to work, the
  load balancer must be able to maintain contact with each content server.
  This contact should be configurable as well.  Possible choices may
  include:

  - TCP Socket Keepalive: each redirect server opens a single TCP socket
   connection to each content server (to something like an echo service)
   and keeps the connection alive by sending data to the content server
   to be echoed back to the redirect server.  If the TCP connection
   breaks and cannot be reestablished, the redirect server considers
   that content server to be unavailable and will not send any requests
   to it again until the TCP connection can be reestablished.
  - UDP Ping: each redirect server periodically sends a UDP message out
   to a content server (the content server implements a UDP echo service)
   to be echoed back to the redirect server.  If packets are lost for
   longer than a configurable timeout interval, then the redirect server
   considers that content server to be down until it begins echoing back
   the UDP ping messages.


Comments?  Suggestions?

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




Re: Benchmarks: Catalina M5 vs. Apache 1.3.12

2000-12-05 Thread Jason Brittain


Hi there Chris.

You can certainly do just what I did, use ApacheBench and see what numbers
you get with each server.  There's also another tester called Apache JMeter,
which will show you graphical views of the tests as they're happening.  
JMeter
has some bugs, but it's good anyway.  You can find it here:

http://java.apache.org/jmeter/index.html

Try that out too.  And, it would be great if you could share your results,
even if you don't go into the depth about your tests as I did..

Have fun!

-- 
Jason


Curtis Dougherty wrote:

 Jason -
 
 I am attempting to generate some server performance numbers as well.  What
 tool would you recommend to test TOMCAT vs. WebLogic JRun et al.??? 
 
 If you can point me in the right direction for a good test harness to
 plug-in I would be very grateful.
 
 Thank you for your time and consideration of this matter.
 
 Regards,
 Curtis
 QA Engineer
 BusinessThreads
 
 -Original Message-
 From: Jason Brittain [mailto:[EMAIL PROTECTED]]
 Sent: Tuesday, December 05, 2000 12:48 PM
 To: [EMAIL PROTECTED]
 Subject: Benchmarks: Catalina M5 vs. Apache 1.3.12
 
 
 
 I wrote up a text file about benchmarking and comparing Tomcat-4.0-M5 
 (pre-release)
 and Apache 1.3.12.  It's attached to this message.  I wrote it for 
 anyone who is interested
 (even non-Java-saavy people) to know how the raw content serving 
 performance of
 Catalina and its built-in web server compares to that of Apache 1.3.12.  
 It contains lots of
 information to help people understand some of the important differences 
 between the two
 servers.
 
 Feedback, flames, reproduced test results, etc. are welcome!  :)
 
 Cheers.
 




Re: Benchmarks

2000-12-05 Thread Jason Brittain


Hi Costin.

[EMAIL PROTECTED] wrote:

 Hi Jason,
 
 First, it's really great to see the discussions about performance !
 Your tests are extremely usefull


I'm just returning the favor, after sitting through your ApacheCon session
about the Tomcat performance/benchmarking..

 I use ab and apache very often ( I used it as the main tool to tune 
 tomcat
 3.2 and now 3.3 ). 


It's nice, isn't it?  I was going to write something like it, but since 
it was
already there, I just used it.  Like I said, it's got a few bugs, but it 
mostly
gives useful information, and works pretty well.

 One thing that strikes me is the fact that I have a
 slower computer ( Celeron / 363 ) my numbers for apache ( with -c 60 ) 
 are
 usually  much smaller. 


I may know why this is.  Before running my benchmarks, I played with
ab quite a bit on both Apache and on Tomcat4.  I wanted to tune the config
files to give me the best performance that I could get on my machine.
I ran lots of tests, changed config values (mainly threading or processing
limits and defaults), and re-ran tests to see how the changes in the config
files affected the performance outcomes.  I eventually found what I believe
to be about the most optimal settings *for my machine* for both Apache
and Tomcat4.  So, the configs I show in my tests have been tailored to my
machine -- its CPU speed, RAM size, everything.  Another machine that
has different specs may not perform well with my machine's configs..  It
may actually perform worse.

I came to the conclusion that each different machine needs tailored config
files, and that there probably is a process that one could follow to 
find the
optimal settings for a machine.  I've even considered writing some automated
software to run overnight, all night long, benchmarking and tweaking the
configs until the performance of the server on that machine is optimal.
Do you realize how many servers could be substantially more efficient if
everyone did that?  Just an idea, but I think I want to do it..

 ( it happens that I used the same test while
 rewriting the static servlet to StaticInterceptor )
 I did another run, here is the sumarry:
 ( ab -c 60 -n 1 http://localhost/index.html):
 
 - Apache 1.3.12 - DEFAULT CONFIG, no change:
 
 First run: RPS: 344.44
 Total: 67   172   637
 Second run: RPS: 363.40
 Total: 85   163   268
 
 - Apache 1.3.12 - your config file
 
 First run:  RPS: 261.27
 Total:105   228   477
 Second run:  RPS: 253.63
 Total: 81   234   402


I think this is good evidence that what I said above is in fact
happening.  By raising the number of processes on your machine
(from the default) to the number of processes that are optimal
for my machine, your machine gets bogged down a little by
the weight of all those processes, and can't easily perform as
well as it did before with a smaller number of processes.

This also shows why it's a good idea that Apache's default config
file sets the defaults the way it does.

 
 - Tomcat 3.3 - IBM JDK1.3
 
 First run: RPS: 276.07
 Total: 46   216  3265
 Second: RPS: 345.55
 Total: 17   172   228
 
 - Tomcat 3.3 - Hotspot
 First: RPS: 287.5
 Total: 53   206   764
 Second: RPS: 308
 Total: 42   193  1134
 
 ( after another run the number get lower - almost same as IBM1.3 )
 

These numbers look pretty good..  did you also set the VM options
like "-Xms96m -Xmx96m"?  On my machine, that made the maximum
times come down dramatically -- from the thousands of milliseconds
to the hundreds of milliseconds.  Of course, with a different Tomcat.  :)
It might do the same for yours though, again depending on your machine's
specs.

 Of course, tomcat3.3 is not yet completely tuned, and static file 
 handling
 is still far away from what it should be. Also, note that neither apache
 nor tomcat3.3 will cache the file - you should use MMapFile to compare
 with a container that uses caching. ( that adds about 20% performance to
 apache - since Linux is also caching the file accesses are not a very big
 factor )


I think Tomcat4 does cache the file, but also checks just to make sure that
what it's caching hasn't changed on disk.

 ( BTW, last Apache2.0 I tried was almost 2x faster than 1.3  )


Yeah, that's about what I expect too.  It can run in a multithreaded way
just like Java servers do.  So, no more heavyweight processes to lug
around (not entirely sure this is a big deal on Linux, but on Solaris it
is, and on other OSs I think it is).

Cheers.


-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




Re: Kudos to Jason and his benchmarking report

2000-12-05 Thread Jason Brittain
part of a 
 great guide to TCx performance and tuning ala Dean Gaudet's stuff on 
 (Apache?) performance.


That sounds like a much needed guide.  Maybe a HOWTO?

 Now I need to study your stuff more closely and 
 plan for the next round of measurement (and, in my case, modeling).
 
 Roy 
 

Have fun!


-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




Re: Now, am I stupid or what?

2000-11-29 Thread Jason Brittain



Pier P. Fumagalli wrote:

 Ok... So that's a personal preference, let's say... I don't like 'em because
 the look as hacks to me :) :) :)


Sometimes hacks is all we've got.  :)

 As for Windows, ppl can install cygwin and autoconf/automake work just
 fine there as well. I even compiled and installed wget on my Win98 box
 under cygwin with gcc/autoconf/automake/etc without any problems.
 
 
 Ok, but I don't want ppl to download cygwin just to compile the module, when
 MSVC and NMAKE work just fine... 


This is a bad assumption, since just because someone's running Windows does
not mean they're willing to pay Micro$oft for an MSVC license, nor does
everyone want to allocate the hard drive space for all of MSVC just so 
we can
compile a few binaries for Windows.  In my experience, cygwin is smaller,
more UNIX-user friendly, compatible with bash and sh, and gives Windows
a useful/featureful shell (finally!).  I absolutely prefer cygwin/gcc 
over MSVC.

And, of course, it works fine for UNIX build stuff, so it's a way to unify
Windows, UNIX, and MacOS X for native code builds..  :)

 But anyway since for Windows all we want to
 do is building binaries and redistributing DLLs (never heard of anyone
 trying to compile under Win but me!), 


I have, and have used cygwin/gcc.  And, with the Locomotive project, even
though we built binaries for Windows and distributed them, users often
wanted to compile the binaries themselves for whatever reason.  It was still
cost-free to do that as long as we used cygwin.

 The thing I hate about Auto* is that they somehow impose a check on a HUGE
 number of things that we'll never use... And they're hard as hell to
 maintain (once you've done an autoconf/automake you don't want to do it
 twice!)


It isn't easy to maintain.. no.  Even though it isn't as nice as Ant, I 
don't know
of a better tool for building native code binaries.

Do you know of a better one?


-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




Re: AccessLogValve performance fixes

2000-11-29 Thread Jason Brittain


Remy Maucherat wrote:

 Yep!  That's a full 10 seconds slower than the new version, making
 the new version about 44% faster.
 
 
 Great !
 I'll commit the patch later today.
 
 This test is single-threaded, but I think it still shows noticeable
 performance improvement.
 
 Something else that I could do with this that I haven't yet is
 make the valve able to buffer log file output.  From my tests,
 it looks to me like this make the test run about 4 seconds faster,
 a maximum of 1.6% gain (not real big, but it's something).
 
 
 If it's really 4s out of 13s, isn't it more than 1.6% ? If the gain is
 another 4s, then it's significant, and I think we should go for it.
 
 Remy
 
Okay, that's one way to look at it.  I was thinking 4s out of 24s, but 
now that
you mention it, it's now 4s out of 13s.  So, I'll work on that too.

About buffering, I was thinking that not everyone would want the output
buffered..  If you're debugging and you're trying individual requests and
looking at the log information for each request, and the log lines don't 
show
up in the log file after you make the request, that can be annoying/puzzling
to the person trying to debug.  I thought it might be a good idea if you 
could
configure the valve to buffer or not buffer.  Buffering should probably be
turned on as the default.  But, as long as the config says something like
'buffering="true"' then at least people will take note that buffering is
turned on for that log file (it can serve as a sort of a warning).

So, by default, it'll be fast, and the buffering could be turned off.  That
would be nice -- as long as this switchable feature does not really degrade
performance.

Ideas?

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




New Valve Tester and NullValve

2000-11-29 Thread Jason Brittain


In the process of optimizing AccessLogValve, I came to the conclusion that
I needed a tester that would allow me to benchmark (and otherwise test) the
valve without needing to run all of Catalina -- I needed to isolate just the
valve so that I could get clean benchmark times.  So, I thought about 
writing
just a class that would let me instantiate the valve, and use it.  But, 
after
some looking at the code, I realized some things:

1) That it may not be easy to make the valve act the same as it would act
in a regular Catalina Container without making something that acts much
like a Container anyway.

2) Even if I could make something that acts like a Container, it
wouldn't really be a Container, so my custom class would only be
"faking it".
3) Maintaining a fake container to continue to be like the Catalina
Containers wouldn't be easy, and it would certainly be pointless.
4) Making a new class that really *was* a Container didn't look
that tough.
5) If I needed one of these, certainly someone else must have also
wanted one.  :)

So, I set out to write a generic Valve tester.

I wrote it, got it running, and used it for optimizing the
AccessLogValve.  Here's what I wrote:

org.apache.catalina.valves.ValveTesterBase.java
  This is the base abstract class that is a Container that uses the
  Valve you wish to test.
org.apache.catalina.valves.NullValve.java
  I needed this valve to be the basic functionality of the
  ValveTesterBase Container subclasses.  It does absolutely nothing
  other than return control to the caller.  This is good because it
  takes up basically no cpu time, and completes the Container's
  request pipeline.

Then, I wrote one subclass of ValveTesterBase:

org.apache.catalina.connector.http.AccessLogValveTester.java
  This class tests the AccessLogValve in one particular way, and
  has control over the environment in which the AccessLogValve
  operates.  I had to place this class in the http connector
  package only because the HttpRequestImpl and HttpResponseImpl
  classes are not declared public!  Should they be?

With the first two classes, anyone should be able to easily make
a valve tester that tests a valve in exactly the way they want to
test it.  The ValveTesterBase class is intentionally simple, and
small.  The AccessLogValveTester is a good example of a subclass
that uses it.

One idea I had about how ValveTesterBase could be improved is
by writing and integrating a request traffic generator of some
kind (maybe also abstract?) so that the request traffic can be
more like the characteristics of real web traffic, and thus be
a more real-world test of the valves.  I have not begun coding
this yet.  It will need to be multithreaded, though.

Also, in which package should this tester code reside, really?
I'm aprehensive about mixing the tester code in with the regular
Catalina code..

All feedback about this code is welcome!

Cheers.

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




/*
 * 
 *
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 1999 The Apache Software Foundation.  All rights 
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *notice, this list of conditions and the following disclaimer in
 *the documentation and/or other materials provided with the
 *distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *any, must include the following acknowlegement:  
 *   "This product includes software developed by the 
 *Apache Software Foundation (http://www.apache.org/)."
 *Alternately, this acknowlegement may appear in the software itself,
 *if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
 *Foundation" must not be used to endorse or promote products derived
 *from this software without prior written permission. For written 
 *permission, please contact [EMAIL PROTECTED]
 *
 * 5. Products derived from this software may not be called "Apache"
 *nor may "Apache" appear in their names without prior written
 *permission of the Apache Group.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS C

Re: [PROPOSAL] Tomcat 4.0 Milestone 5

2000-11-22 Thread Jason Brittain



Remy Maucherat wrote:

 Just so you know, I've been looking at the AccessLogValve,
 and am working on getting it into shape to be re-enabled
 in the default config.  In the process, I'm writing a Valve
 tester so we can test and benchmark Valves.  It's already
 running, but it's not quite ready for release yet..
 
 
 I would like that by default it doesn't do any kind of pattern matching at
 all (unless one is explicitely specified), and just output the standard log.


You're talking about the AccessLogValve itself, right?  You want an
AccessLogValve that doesn't do any fancy pattern stuff, but built only
to do the common log format?  Yes, that would sure help it to perform,
wouldn't it?  And, we could have another Valve that does the fancy log
patterns of people want that feature.

-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




[TC4] ResourcesBase.setCheckInterval() bug

2000-11-16 Thread Jason Brittain


Hi guys!

In reading through the org.apache.catalina.resources package code, I found
a small omission from the ResourcesBase.setCheckInterval() method:

public void setCheckInterval(int checkInterval) {

  // Perform the property update
  int oldCheckInterval = this.checkInterval;
  this.checkInterval = checkInterval;
  support.firePropertyChange("checkInterval",
 new Integer(oldCheckInterval),
 new Integer(this.checkInterval));

  // Start or stop the background thread (if necessary)
  if (started) {
  if ((oldCheckInterval  0)  (this.checkInterval = 0))
  threadStop();
  else if ((oldCheckInterval = 0)  (this.checkInterval  0))
  threadStart();
  }

}


At the end of this method, we changed the check interval, and then we
need to either start or stop the background thread that periodically
checks for resource updates.  The code in this method handles the
following:

1. When the background thread is already running and we should be shutting
   it down because the new check interval doesn't require a background
   thread at all.
2. When the thread is supposedly already running, the old check interval
   didn't require a background thread (really, an illegal state -- and 
since
   this code looks basically like my patch below, was this just bad 
placement
   of this code?), and the new check interval does require a background
   thread..  In that case the code at least makes sure that we have
   a reference to a thread.

But, what it doesn't handle is:

3. When the background thread isn't already running, the previous check
   interval didn't require a background thread, and the new check interval
   does require a background thread..  It should start one.

So, here's the patch I'd suggest:

280a281,284
else {
if ((oldCheckInterval = 0)  (this.checkInterval  0))
threadStart();
}

Thanks!

-- 
Jason Brittain  (415)354-6645
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




Re: [TC4] ResourcesBase.setCheckInterval() (not a) bug

2000-11-16 Thread Jason Brittain


Hi Remy.

Oops, yes, you're right about this (of course).  I misunderstood the use 
of the
"started" variable to mean whether or not the background thread was already
started, instead of whether the component's lifecycle had started.  Sorry.

BTW: I really like the resources package!  I can think of several useful
implementations that I'd like to use, like one for CVS, or one for JavaMail,
or ...  lots more.

Remy Maucherat wrote:

 At the end of this method, we changed the check interval, and then we
 need to either start or stop the background thread that periodically
 checks for resource updates.  The code in this method handles the
 following:
 
 1. When the background thread is already running and we should be shutting
it down because the new check interval doesn't require a background
thread at all.
 2. When the thread is supposedly already running, the old check interval
didn't require a background thread (really, an illegal state -- and
 since
this code looks basically like my patch below, was this just bad
 placement
of this code?), and the new check interval does require a background
thread..  In that case the code at least makes sure that we have
a reference to a thread.
 
 But, what it doesn't handle is:
 
 3. When the background thread isn't already running, the previous check
interval didn't require a background thread, and the new check interval
does require a background thread..  It should start one.
 
 So, here's the patch I'd suggest:
 
 280a281,284
 else {
 if ((oldCheckInterval = 0)  (this.checkInterval  0))
 threadStart();
 }
 
 
 The "started" flag indicates that the component has been started. It's
 related to the thread state since the thread cannot be started if the
 started flag is not set to true. The flag is set by the start() and stop()
 method. If the component hasn't been started yet, I don't think it should
 start the thread (or try to stop it).
 Does it make sense (or did I miss something ?) ?
 
 Remy (going back to optimizing the HTTP connector)
 
-- 
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org




Re: Tomcat 4.0 Milestone 4

2000-11-01 Thread Jason Brittain


In case you're interested, we've written a short document about
Catalina's Features And Benefits (FAB) that is more geared for
non-geeks (it's very marketingly-written :) that you may want to
include with the M4 docs.  I've attached it to this mail.  It's a
plain text version, but I'm sure it would look better as HTML.
Let us know if there's anything inaccurate about the details it
contains.  It was written by William Abernathy 
([EMAIL PROTECTED]) and myself.  Let us know what you think.

And, BTW, great work on making Catalina the first Servlet 2.3
compliant servlet container!

Cheers!

--
Jason Brittain
Software Engineer, Olliance Inc.http://www.Olliance.com
Current Maintainer, Locomotive Project  http://www.Locomotive.org


"Craig R. McClanahan" wrote:
 
 Hey folks,
 
 I'm planning on cutting a fourth milestone of Tomcat 4.0 tomorrow
 (Wednesday) evening.  This milestone will reflect all of the changes
 that occurred in the servlet 2.3 and JSP 1.2 specifications between
 public draft and proposed final draft (and there were a *bunch* of
 them), completion of the remaining new 2.3/1.2 functionality, and
 several bug fixes.
 
 This will be the last big push of spec-related functionality additions
 for Tomcat 4.0.  Now, we can turn our attention more towards bug fixes
 and performance tuning.  You can help in that process by downloading and
 playing with the Tomcat 4.0 milestone.  I'd like to see us shake it out
 enough to be production quality by Christmas time.
 
 Besides bug fixing and tuning, I know of several pieces of functionality
 yet to be added that are being worked on, including:
 
 * Web connectors (using a new connector protocol
   called mod_warp that is aware of webapp configuration
   settings, so you will not have to configure things twice).
 
 * JNDI context support (like that used in J2EE servers)
   for the env-entry and resource-ref configuration
   parameters in the deployment descriptor.
 
 If you are interested in contributing to Tomcat 4.0, there is a "wish
 list" document in file "catalina/STATUS.html" in the jakarta-tomcat-4.0
 source tree.  Feel free to propose new ideas, or to volunteer to work on
 one of these.
 
 Craig McClanahan


Features and Benefits of the Catalina Servlet Container


Introduction
 
Catalina is a new open source servlet container from the makers of
Apache JServ, engineered to be the fastest, most flexible, and most
modular servlet container available. Hosted by the Apache Software
Foundation, the Catalina server software package project is SUN
Microsystems's next-generation Java Servlet Container Reference
Implementation. This text discusses Catalina's features and benefits.


Modularly-Designed Servlet Container Core

Open source servlet containers have not, historically, been designed
to be modular. Modularity allows much of the container's core
functionalities to be changed out seamlessly when different 
implementations are required. Catalina's servlet container core was
designed to be made of modules, each of which has a well defined
interface to the other core modules. Any module may be replaced at
runtime by new implementations that still adhere to the core's
interfaces. New implementations of these core modules support custom
and/or extended features, including:

-  Direct pluggable integration with legacy systems
-  Diverse implementations of free or proprietary core components
-  Modular embedding of the Catalina servlet container into larger
   applications.


Up to Date With the Latest Java Servlet Specification

New development invariably drives new specification revisions. In
addition to its full compliance with the featureful Java Servlet 2.2
Specification, Catalina's design is pushing servlet container
functionality to new heights. Catalina's development has driven the
Java Servlet 2.3 Specification, which is written to take advantage
of new features that were first implemented as part of the Catalina
servlet container. Catalina brings the enterprise the latest and
greatest servlet functionality -- first, and for free.


Full, Integrally-Designed Virtual Hosting Support

Engineered from the outset to support a complete set of virtual
hosting features, Catalina's core enjoys distinct advantages over
servlet containers that have had to add virtual hosting. Having these
features designed into the core makes the source code easier to
understand, and makes these features easy and efficient to
use. Catalina includes support for running multiple Web Applications
per vhost. Internet providers and web hosting companies need this
hard-to-find feature to help scale their servers to meet high demand
for less cost.


Featureful and Extensible Request Processing

Catalina supports request filtering on multiple levels and better
enables the separation of server and web application
functions. This makes it much easier for an administrator to track web
application usage, track server performance, and add custom