Author: remy.maucherat(a)jboss.com
Date: 2007-10-03 11:11:22 -0400 (Wed, 03 Oct 2007)
New Revision: 292
Removed:
trunk/webapps/docs/tribes/faq.xml
trunk/webapps/docs/tribes/introduction.xml
trunk/webapps/docs/tribes/leader-election-initiate-election.dia
trunk/webapps/docs/tribes/leader-election-initiate-election.jpg
trunk/webapps/docs/tribes/leader-election-message-arrives.dia
trunk/webapps/docs/tribes/leader-election-message-arrives.jpg
trunk/webapps/docs/tribes/project.xml
trunk/webapps/docs/tribes/setup.xml
trunk/webapps/docs/tribes/tomcat-docs.xsl
Modified:
trunk/build.xml
Log:
- Remove tribes docs.
- Rename style task (Ant is annoying ...).
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2007-10-03 02:19:19 UTC (rev 291)
+++ trunk/build.xml 2007-10-03 15:11:22 UTC (rev 292)
@@ -326,56 +326,47 @@
<mkdir dir="${tomcat.build}/webapps/docs/funcspec" />
<!-- XSL processing -->
- <style basedir="webapps/docs"
+ <xslt basedir="webapps/docs"
destdir="${tomcat.build}/webapps/docs"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
excludes="build.xml project.xml"
includes="*.xml">
<param name="relative-path" expression="."/>
- </style>
- <style basedir="webapps/docs/appdev"
+ </xslt>
+ <xslt basedir="webapps/docs/appdev"
destdir="${tomcat.build}/webapps/docs/appdev"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
excludes="project.xml"
includes="*.xml">
<param name="relative-path" expression=".."/>
- </style>
- <style basedir="webapps/docs/funcspecs"
+ </xslt>
+ <xslt basedir="webapps/docs/funcspecs"
destdir="${tomcat.build}/webapps/docs/funcspecs"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
excludes="project.xml"
includes="*.xml">
<param name="relative-path" expression="../.."/>
- </style>
- <style basedir="webapps/docs/config"
+ </xslt>
+ <xslt basedir="webapps/docs/config"
destdir="${tomcat.build}/webapps/docs/config"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
excludes="project.xml"
includes="*.xml">
<param name="relative-path" expression=".."/>
- </style>
- <style basedir="webapps/docs/architecture"
+ </xslt>
+ <xslt basedir="webapps/docs/architecture"
destdir="${tomcat.build}/webapps/docs/architecture"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
excludes="project.xml"
includes="*.xml">
<param name="relative-path" expression=".."/>
- </style>
+ </xslt>
- <style basedir="webapps/docs/tribes"
- destdir="${tomcat.build}/webapps/docs/tribes"
- extension=".html"
- style="webapps/docs/tomcat-docs.xsl"
- excludes="project.xml"
- includes="*.xml">
- <param name="relative-path" expression=".."/>
- </style>
-
<!-- Print friendly version -->
<mkdir dir="${tomcat.build}/webapps/docs/printer" />
<copy todir="${tomcat.build}/webapps/docs/printer">
@@ -395,7 +386,7 @@
<mkdir dir="${tomcat.build}/webapps/docs/architecture/printer"/>
<mkdir dir="${tomcat.build}/webapps/docs/config/printer"/>
- <style basedir="webapps/docs"
+ <xslt basedir="webapps/docs"
destdir="${tomcat.build}/webapps/docs/printer"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
@@ -403,8 +394,8 @@
includes="*.xml">
<param name="relative-path" expression="./.."/>
<param name="project-menu" expression="nomenu"/>
- </style>
- <style basedir="webapps/docs/appdev"
+ </xslt>
+ <xslt basedir="webapps/docs/appdev"
destdir="${tomcat.build}/webapps/docs/appdev/printer"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
@@ -412,8 +403,8 @@
includes="*.xml">
<param name="relative-path" expression="../.."/>
<param name="project-menu" expression="nomenu"/>
- </style>
- <style basedir="webapps/docs/funcspecs"
+ </xslt>
+ <xslt basedir="webapps/docs/funcspecs"
destdir="${tomcat.build}/webapps/docs/funcspecs/printer"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
@@ -421,8 +412,8 @@
includes="*.xml">
<param name="relative-path" expression="../../.."/>
<param name="project-menu" expression="nomenu"/>
- </style>
- <style basedir="webapps/docs/config"
+ </xslt>
+ <xslt basedir="webapps/docs/config"
destdir="${tomcat.build}/webapps/docs/config/printer"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
@@ -430,8 +421,8 @@
includes="*.xml">
<param name="relative-path" expression="../.."/>
<param name="project-menu" expression="nomenu"/>
- </style>
- <style basedir="webapps/docs/architecture"
+ </xslt>
+ <xslt basedir="webapps/docs/architecture"
destdir="${tomcat.build}/webapps/docs/architecture/printer"
extension=".html"
style="webapps/docs/tomcat-docs.xsl"
@@ -439,7 +430,7 @@
includes="*.xml">
<param name="relative-path" expression="../.."/>
<param name="project-menu" expression="nomenu"/>
- </style>
+ </xslt>
</target>
Deleted: trunk/webapps/docs/tribes/faq.xml
===================================================================
--- trunk/webapps/docs/tribes/faq.xml 2007-10-03 02:19:19 UTC (rev 291)
+++ trunk/webapps/docs/tribes/faq.xml 2007-10-03 15:11:22 UTC (rev 292)
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE document [
- <!ENTITY project SYSTEM "project.xml">
-]>
-<document url="introduction.html">
-
- &project;
-
- <properties>
- <author email="fhanik(a)apache.org">Filip Hanik</author>
- <title>Apache Tribes - Frequently Asked Questions</title>
- </properties>
-
-<body>
-
-
-<section name="Frequently Asked Questions">
-</section>
-</body>
-
-</document>
Deleted: trunk/webapps/docs/tribes/introduction.xml
===================================================================
--- trunk/webapps/docs/tribes/introduction.xml 2007-10-03 02:19:19 UTC (rev 291)
+++ trunk/webapps/docs/tribes/introduction.xml 2007-10-03 15:11:22 UTC (rev 292)
@@ -1,255 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE document [
- <!ENTITY project SYSTEM "project.xml">
-]>
-<document url="tribes.html">
-
- &project;
-
- <properties>
- <author email="fhanik(a)apache.org">Filip Hanik</author>
- <title>Apache Tribes - Introduction</title>
- </properties>
-
-<body>
-
-
-<section name="Quick Start">
-
- <p>Apache Tribes is a group or peer-to-peer communcation framework that enables
you to easily connect
- your remote objects to communicate with each other.
- </p>
- <ul>
- <li>Import:
<code>org.apache.catalina.tribes.Channel</code></li>
- <li>Import:
<code>org.apache.catalina.tribes.Member</code></li>
- <li>Import:
<code>org.apache.catalina.tribes.MembershipListener</code></li>
- <li>Import:
<code>org.apache.catalina.tribes.ChannelListener</code></li>
- <li>Import:
<code>org.apache.catalina.tribes.group.GroupChannel</code></li>
- <li>Create a class that implements:
<code>org.apache.catalina.tribes.ChannelListener</code></li>
- <li>Create a class that implements:
<code>org.apache.catalina.tribes.MembershipListener</code></li>
- <li>Simple class to demonstrate how to send a message:
- <source>
- //create a channel
- Channel myChannel = new GroupChannel();
-
- //create my listeners
- ChannelListener msgListener = new MyMessageListener();
- MembershipListener mbrListener = new MyMemberListener();
-
- //attach the listeners to the channel
- myChannel.addMembershipListener(mbrListener);
- myChannel.addChannelListener(msgListener);
-
- //start the channel
- myChannel.start(Channel.DEFAULT);
-
- //create a message to be sent, message must implement java.io.Serializable
- //for performance reasons you probably want them to implement
java.io.Externalizable
- Serializable myMsg = new MyMessage();
-
- //retrieve my current members
- Member[] group = myChannel.getMembers();
-
- //send the message
- channel.send(group,myMsg,Channel.SEND_OPTIONS_DEFAULT);
- </source>
- </li>
- </ul>
- <p>
- Simple yeah? There is a lot more to Tribes than we have shown, hopefully the docs
will be able
- to explain more to you. Remember, that we are always interested in suggestions,
improvements, bug fixes
- and anything that you think would help this project.
- </p>
- <p>
- Note: Tribes is currently built for JDK1.5, you can run on JDK1.4 by a small
modifications to locks used from the <code>java.util.concurrent</code>
package.
- </p>
-</section>
-
-
-<section name="What is Tribes">
- <p>
- Tribes is a messaging framework with group communication abilities. Tribes allows you
to send and receive
- messages over a network, it also allows for dynamic discovery of other nodes in the
network.<br/>
- And that is the short story, it really is as simple as that. What makes Tribes useful
and unique will be
- described in the section below.<br/>
- </p>
- <p>
- The Tribes module was started early 2006 and a small part of the code base comes from
the clustering module
- that has been existing since 2003 or 2004.
- The current cluster implementation has several short comings and many work arounds
were created due
- to the complexity in group communication. Long story short, what should have been two
modules a long time
- ago, will be now. Tribes takes out the complexity of messaging from the replication
module and becomes
- a fully independent and highly flexible group communication module.<br/>
- </p>
- <p>
- In Tomcat the old <code>modules/cluster</code> has now become
<code>modules/groupcom</code>(Tribes) and
- <code>modules/ha</code> (replication). This will allow development to
proceed and let the developers
- focus on the issues they are actually working on rather than getting boggled down in
details of a module
- they are not interested in. The understanding is that both communication and
replication are complex enough,
- and when trying to develop them in the same module, well you know, it becomes a
cluster :)<br/>
- </p>
- <p>
- Tribes allows for guaranteed messaging, and can be customized in many ways. Why is
this important?<br/>
- Well, you as a developer want to know that the messages you are sending are reaching
their destination.
- More than that, if a message doesn't reach its destination, the application on
top of Tribes will be notified
- that the message was never sent, and what node it failed.
- </p>
-
-</section>
-
-<section name="Why another messaging framework">
- <p>
- I am a big fan of reusing code and would never dream of developing something if
someone else has already
- done it and it was available to me and the community I try to serve.<br/>
- When I did my research to improve the clustering module I was constantly faced with a
few obstacles:<br/>
- 1. The framework wasn't flexible enough<br/>
- 2. The framework was licensed in a way that neither I nor the community could use
it<br/>
- 3. Several features that I needed were missing<br/>
- 4. Messaging was guaranteed, but no feedback was reported to me<br/>
- 5. The semantics of my message delivery had to be configured before
runtime<br/>
- And the list continues...
- </p>
- <p>
- So I came up with Tribes, to address these issues and other issues that came along.
- When designing Tribes I wanted to make sure I didn't lose any of the flexibility
and
- delivery semantics that the existing frameworks already delivered. The goal was to
create a framework
- that could do everything that the others already did, but to provide more flexibility
for the application
- developer. In the next section will give you the high level overview of what features
tribes offers or will offer.
- </p>
-</section>
-
-<section name="Feature Overview">
- <p>
- To give you an idea of the feature set I will list it out here.
- Some of the features are not yet completed, if that is the case they are marked
accordingly.
- </p>
- <p>
- <b>Pluggable modules</b><br/>
- Tribes is built using interfaces. Any of the modules or components that are part of
Tribes can be swapped out
- to customize your own Tribes implementation.
- </p>
- <p>
- <b>Guaranteed Messaging</b><br/>
- In the default implementation of Tribes uses TCP for messaging. TCP already has
guaranteed message delivery
- and flow control built in. I believe that the performance of Java TCP, will
outperform an implementation of
- Java/UDP/flow-control/message guarantee since the logic happens further down the
stack.<br/>
- Tribes supports both non-blocking and blocking IO operations. The recommended setting
is to use non blocking
- as it promotes better parallelism when sending and receiving messages. The blocking
implementation is available
- for those platforms where NIO is still a trouble child.
- </p>
- <p>
- <b>Different Guarantee Levels</b><br/>
- There are three different levels of delivery guarantee when a message is
sent.<br/>
- <ol>
- <li>IO Based send guarantee. - fastest, least reliable<br/>
- This means that Tribes considers the message transfer to be successful
- if the message was sent to the socket send buffer and accepted.<br/>
- On blocking IO, this would be
<code>socket.getOutputStream().write(msg)</code><br/>
- On non blocking IO, this would be
<code>socketChannel.write()</code>, and the buffer byte buffer gets emptied
- followed by a <code>socketChannel.read()</code> to ensure the
channel still open.
- The <code>read()</code> has been added since
<code>write()</code> will succeed if the connection has been
"closed"
- when using NIO.
- </li>
- <li>ACK based. - recommended, guaranteed delivery<br/>
- When the message has been received on a remote node, an ACK is sent back to the
sender,
- indicating that the message was received successfully.
- </li>
- <li>SYNC_ACK based. - guaranteed delivery, guaranteed processed,
slowest<br/>
- When the message has been received on a remote node, the node will process
- the message and if the message was processed successfully, an ACK is sent back
to the sender
- indicating that the message was received and processed successfully.
- If the message was received, but processing it failed, an ACK_FAIL will be sent
back
- to the sender. This is a unique feature that adds an incredible amount value to
the application
- developer. Most frameworks here will tell you that the message was delivered,
and the application
- developer has to build in logic on whether the message was actually processed
properly by the application
- on the remote node. If configured, Tribes will throw an exception when it
receives an ACK_FAIL
- and associate that exception with the member that didn't process the
message.
- </li>
- </ol>
- You can of course write even more sophisticated guarantee levels, and some of them
will be mentioned later on
- in the documentation. One mentionable level would be a 2-Phase-Commit, where the
remote applications don't receive
- the message until all nodes have received the message. Sort of like a all-or-nothing
protocol.
- </p>
- <p>
- <b>Per Message Delivery Attributes</b><br/>
- Perhaps the feature that makes Tribes stand out from the crowd of group communication
frameworks.
- Tribes enables you to send to decide what delivery semantics a message transfer
should have on a per
- message basis. Meaning, that your messages are not delivered based on some static
configuration
- that remains fixed after the message framework has been started.<br/>
- To give you an example of how powerful this feature is, I'll try to illustrate it
with a simple example.
- Imagine you need to send 10 different messsages, you could send the the following
way:
- <source>
- Message_1 - asynchronous and fast, no guarantee required, fire and forget
- Message_2 - all-or-nothing, either all receivers get it, or none.
- Message_3 - encrypted and SYNC_ACK based
- Message_4 - asynchronous, SYNC_ACK and call back when the message is processed on
the remote nodes
- Message_5 - totally ordered, this message should be received in the same order on
all nodes that have been
- send totally ordered
- Message_6 - asynchronous and totally ordered
- Message_7 - RPC message, send a message, wait for all remote nodes to reply before
returning
- Message_8 - RPC message, wait for the first reply
- Message_9 - RPC message, asynchronous, don't wait for a reply, collect them via
a callback
- Message_10- sent to a member that is not part of this group
- </source>
- As you can imagine by now, these are just examples. The number of different semantics
you can apply on a
- per-message-basis is almost limitless. Tribes allows you to set up to 28 different on
a message
- and then configure Tribes to what flag results in what action on the
message.<br/>
- Imagine a shared transactional cache, probably >90% are reads, and the dirty
reads should be completely
- unordered and delivered as fast as possible. But transactional writes on the other
hand, have to
- be ordered so that no cache gets corrupted. With tribes you would send the write
messages totally ordered,
- while the read messages you simple fire to achieve highest throughput.<br/>
- There are probably better examples on how this powerful feature can be used, so use
your imagination and
- your experience to think of how this could benefit you in your application.
- </p>
- <p>
- <b>Interceptor based message processing</b><br/>
- Tribes uses a customizable interceptor stack to process messages that are sent and
received.<br/>
- <i>So what, all frameworks have this!</i><br/>
- Yes, but in Tribes interceptors can react to a message based on the
per-message-attributes
- that are sent runtime. Meaning, that if you add a encryption interceptor that
encrypts message
- you can decide if this interceptor will encrypt all messages, or only certain
messages that are decided
- by the applications running on top of Tribes.<br/>
- This is how Tribes is able to send some messages totally ordered and others fire and
forget style
- like the example above.<br/>
- The number of interceptors that are available will keep growing, and we would
appreciate any contributions
- that you might have.
- </p>
- <p>
- <b>Threadless Interceptor stack</b>
- The interceptor don't require any separate threads to perform their message
manipulation.<br/>
- Messages that are sent will piggy back on the thread that is sending them all the way
through transmission.
- The exception is the <code>MessageDispatchInterceptor</code> that will
queue up the message
- and send it on a separate thread for asynchronous message delivery.
- Messages received are controlled by a thread pool in the
<code>receiver</code> component.<br/>
- The channel object can send a <code>heartbeat()</code> through the
interceptor stack to allow
- for timeouts, cleanup and other events.<br/>
- The <code>MessageDispatchInterceptor</code> is the only interceptor that
is configured by default.
- </p>
- <p>
- <b>Parallel Delivery</b><br/>
- Tribes support parallel delivery of messages. Meaning that node_A could send three
messages to node_B in
- parallel. This feature becomes useful when sending messages with different delivery
semantics.
- Otherwise if Message_1 was sent totally ordered, Message_2 would have to wait for
that message to complete.<br/>
- Through NIO, Tribes is also able to send a message to several receivers at the same
time on the same thread.
- </p>
- <p>
- <b>Silent Member Messaging</b><br/>
- With Tribes you are able to send messages to members that are not in your group.
- So by default, you can already send messages over a wide area network, even though
the dynamic discover
- module today is limited to local area networks by using multicast for dynamic node
discovery.
- Of course, the membership component will be expanded to support WAN memberships in
the future.
- But this is very useful, when you want to hide members from the rest of the group and
only communicate with them
- </p>
-</section>
-
-<section name="Where can I get Tribes">
- <p>
-
- </p>
-
-
-</section>
-
-</body>
-
-</document>
Deleted: trunk/webapps/docs/tribes/leader-election-initiate-election.dia
===================================================================
(Binary files differ)
Deleted: trunk/webapps/docs/tribes/leader-election-initiate-election.jpg
===================================================================
(Binary files differ)
Deleted: trunk/webapps/docs/tribes/leader-election-message-arrives.dia
===================================================================
(Binary files differ)
Deleted: trunk/webapps/docs/tribes/leader-election-message-arrives.jpg
===================================================================
(Binary files differ)
Deleted: trunk/webapps/docs/tribes/project.xml
===================================================================
--- trunk/webapps/docs/tribes/project.xml 2007-10-03 02:19:19 UTC (rev 291)
+++ trunk/webapps/docs/tribes/project.xml 2007-10-03 15:11:22 UTC (rev 292)
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="Apache Tribes Documentation - Top Level Directory"
-
href="http://tomcat.apache.org/">
-
- <title>Apache Tribes - The Tomcat Cluster Communication Module</title>
-
- <logo href="/images/tomcat.gif">Apache Tomcat</logo>
-
-
- <body>
-
- <menu name="Links">
- <item name="Docs Home"
href="../index.html"/>
- <item name="FAQ"
href="http://tomcat.apache.org/faq" />
- </menu>
-
- <menu name="User Guide">
- <item name="1) Introduction"
href="introduction.html"/>
- <item name="2) Setup" href="setup.html"/>
- <item name="3) FAQ" href="faq.html"/>
- </menu>
-
- <menu name="Reference">
- <item name="Release Notes"
href="RELEASE-NOTES.txt"/>
- <item name="JavaDoc"
href="/api/index.html"/>
- </menu>
-
- <menu name="Apache Tribes Development">
- <item name="Membership"
href="membership.html"/>
- <item name="Transport"
href="transport.html"/>
- <item name="Interceptors"
href="interceptors.html"/>
- <item name="Status"
href="status.html"/>
- <item name="Developers"
href="developers.html"/>
- </menu>
-
- </body>
-
-</project>
Deleted: trunk/webapps/docs/tribes/setup.xml
===================================================================
--- trunk/webapps/docs/tribes/setup.xml 2007-10-03 02:19:19 UTC (rev 291)
+++ trunk/webapps/docs/tribes/setup.xml 2007-10-03 15:11:22 UTC (rev 292)
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE document [
- <!ENTITY project SYSTEM "project.xml">
-]>
-<document url="introduction.html">
-
- &project;
-
- <properties>
- <author email="fhanik(a)apache.org">Filip Hanik</author>
- <title>Apache Tribes - Configuration</title>
- </properties>
-
-<body>
-
-
-<section name="Configuration Overview">
-</section>
-</body>
-
-</document>
Deleted: trunk/webapps/docs/tribes/tomcat-docs.xsl
===================================================================
--- trunk/webapps/docs/tribes/tomcat-docs.xsl 2007-10-03 02:19:19 UTC (rev 291)
+++ trunk/webapps/docs/tribes/tomcat-docs.xsl 2007-10-03 15:11:22 UTC (rev 292)
@@ -1,436 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Content Stylesheet for "tomcat-docs" Documentation -->
-
-<!-- $Id: tomcat-docs.xsl 467215 2006-10-24 03:12:55Z markt $ -->
-
-<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version="1.0">
-
-
- <!-- Output method -->
- <xsl:output method="html"
- encoding="iso-8859-1"
- indent="no"/>
-
-
- <!-- Defined parameters (overrideable) -->
- <xsl:param name="home-name" select="'The Tomcat
Project'"/>
- <xsl:param name="home-href"
select="'http://tomcat.apache.org/'"/>
- <xsl:param name="home-logo"
select="'/images/tomcat.gif'"/>
- <xsl:param name="printer-logo"
select="'/images/printer.gif'"/>
- <xsl:param name="apache-logo"
select="'/images/asf-logo.gif'"/>
- <xsl:param name="relative-path" select="'.'"/>
- <xsl:param name="void-image"
select="'/images/void.gif'"/>
- <xsl:param name="project-menu"
select="'menu'"/>
- <xsl:param name="standalone" select="''"/>
- <xsl:param name="buglink"
select="'http://issues.apache.org/bugzilla/show_bug.cgi?id='...
-
- <!-- Defined variables (non-overrideable) -->
- <xsl:variable name="body-bg"
select="'#ffffff'"/>
- <xsl:variable name="body-fg"
select="'#000000'"/>
- <xsl:variable name="body-link"
select="'#525D76'"/>
- <xsl:variable name="banner-bg"
select="'#525D76'"/>
- <xsl:variable name="banner-fg"
select="'#ffffff'"/>
- <xsl:variable name="sub-banner-bg"
select="'#828DA6'"/>
- <xsl:variable name="sub-banner-fg"
select="'#ffffff'"/>
- <xsl:variable name="source-color"
select="'#023264'"/>
- <xsl:variable name="attributes-color"
select="'#023264'"/>
- <xsl:variable name="table-th-bg"
select="'#039acc'"/>
- <xsl:variable name="table-td-bg"
select="'#a0ddf0'"/>
-
- <!-- Process an entire document into an HTML page -->
- <xsl:template match="document">
- <xsl:variable name="project"
- select="document('project.xml')/project"/>
- <html>
- <head>
- <title><xsl:value-of select="project/title"/> -
<xsl:value-of select="properties/title"/></title>
- <xsl:for-each select="properties/author">
- <xsl:variable name="name">
- <xsl:value-of select="."/>
- </xsl:variable>
- <xsl:variable name="email">
- <xsl:value-of select="@email"/>
- </xsl:variable>
- <meta name="author" value="{$name}"/>
- <meta name="email" value="{$email}"/>
- </xsl:for-each>
- </head>
-
- <body bgcolor="{$body-bg}" text="{$body-fg}"
link="{$body-link}"
- alink="{$body-link}" vlink="{$body-link}">
-
- <table border="0" width="100%" cellspacing="0">
-
- <xsl:comment>PAGE HEADER</xsl:comment>
- <tr>
- <td>
- <xsl:if test="project/logo">
- <xsl:variable name="alt">
- <xsl:value-of select="project/logo"/>
- </xsl:variable>
- <xsl:variable name="home">
- <xsl:value-of select="project/@href"/>
- </xsl:variable>
- <xsl:variable name="src">
- <!--<xsl:value-of
select="$relative-path"/>--><xsl:value-of
select="project/logo/@href"/>
- </xsl:variable>
-
- <xsl:comment>PROJECT LOGO</xsl:comment>
- <a href="{$home}">
- <img src="{$src}" align="right" alt="{$alt}"
border="0"/>
- </a>
- </xsl:if>
- </td>
- <td>
- <font face="arial,helvetica,sanserif">
- <h1><xsl:value-of select="$project/title"/></h1>
- </font>
- </td>
- <td>
- <xsl:comment>APACHE LOGO</xsl:comment>
- <xsl:variable name="src">
- <xsl:value-of select="$relative-path"/><xsl:value-of
select="$apache-logo"/>
- </xsl:variable>
- <a
href="http://www.apache.org/">
- <img
src="http://tomcat.apache.org/tomcat-5.5-doc/images/asf-logo.gif"
align="right" alt="Apache Logo" border="0"/>
- </a>
- </td>
- </tr>
- </table>
-
- <table border="0" width="100%" cellspacing="4">
-
- <xsl:comment>HEADER SEPARATOR</xsl:comment>
- <tr>
- <td colspan="2">
- <hr noshade="noshade" size="1"/>
- </td>
- </tr>
-
- <tr>
-
- <!-- Don't generate a menu if styling printer friendly docs -->
- <xsl:if test="$project-menu = 'menu'">
- <xsl:comment>LEFT SIDE NAVIGATION</xsl:comment>
- <td width="20%" valign="top"
nowrap="true">
- <xsl:apply-templates select="project/body/menu"/>
- </td>
- </xsl:if>
-
- <xsl:comment>RIGHT SIDE MAIN BODY</xsl:comment>
- <td width="80%" valign="top" align="left">
- <table border="0" width="100%"
cellspacing="4">
- <tr>
- <td align="left" valign="top">
- <h1><xsl:value-of
select="project/title"/></h1>
- <h2><xsl:value-of
select="properties/title"/></h2>
- </td>
- <td align="right" valign="top"
nowrap="true">
- <!-- Add the printer friendly link for docs with a menu -->
- <xsl:if test="$project-menu = 'menu'">
- <xsl:variable name="src">
- <xsl:value-of
select="$relative-path"/><xsl:value-of
select="$printer-logo"/>
- </xsl:variable>
- <xsl:variable name="url">
- <xsl:value-of select="/document/@url"/>
- </xsl:variable>
- <small>
- <a href="printer/{$url}">
- <img src="{$src}" border="0"
alt="Printer Friendly Version"/>
- <br />print-friendly<br />version
- </a>
- </small>
- </xsl:if>
- <xsl:if test="$project-menu != 'menu'">
- <xsl:variable name="void">
- <xsl:value-of
select="$relative-path"/><xsl:value-of
select="$void-image"/>
- </xsl:variable>
- <img src="{$void}" width="1"
height="1" vspace="0" hspace="0" border="0"/>
- </xsl:if>
- </td>
- </tr>
- </table>
- <xsl:apply-templates select="body/section"/>
- </td>
-
- </tr>
-
- <xsl:comment>FOOTER SEPARATOR</xsl:comment>
- <tr>
- <td colspan="2">
- <hr noshade="noshade" size="1"/>
- </td>
- </tr>
-
- <xsl:comment>PAGE FOOTER</xsl:comment>
- <tr><td colspan="2">
- <div align="center"><font color="{$body-link}"
size="-1"><em>
- Copyright © 1999-2006, Apache Software Foundation
- </em></font></div>
- </td></tr>
-
- </table>
- </body>
- </html>
-
- </xsl:template>
-
-
- <!-- Process a menu for the navigation bar -->
- <xsl:template match="menu">
- <p><strong><xsl:value-of
select="@name"/></strong></p>
- <ul>
- <xsl:apply-templates select="item"/>
- </ul>
- </xsl:template>
-
-
- <!-- Process a menu item for the navigation bar -->
- <xsl:template match="item">
- <xsl:variable name="href">
- <xsl:value-of select="@href"/>
- </xsl:variable>
- <li><a href="{$href}"><xsl:value-of
select="@name"/></a></li>
- </xsl:template>
-
-
- <!-- Process a documentation section -->
- <xsl:template match="section">
- <xsl:variable name="name">
- <xsl:value-of select="@name"/>
- </xsl:variable>
- <table border="0" cellspacing="0"
cellpadding="2">
- <!-- Section heading -->
- <tr><td bgcolor="{$banner-bg}">
- <font color="{$banner-fg}"
face="arial,helvetica.sanserif">
- <a name="{$name}">
- <strong><xsl:value-of
select="@name"/></strong></a></font>
- </td></tr>
- <!-- Section body -->
- <tr><td><blockquote>
- <xsl:apply-templates/>
- </blockquote></td></tr>
- </table>
- </xsl:template>
-
-
- <!-- Process a documentation subsection -->
- <xsl:template match="subsection">
- <xsl:variable name="name">
- <xsl:value-of select="@name"/>
- </xsl:variable>
- <table border="0" cellspacing="0"
cellpadding="2">
- <!-- Subsection heading -->
- <tr><td bgcolor="{$sub-banner-bg}">
- <font color="{$sub-banner-fg}"
face="arial,helvetica.sanserif">
- <a name="{$name}">
- <strong><xsl:value-of
select="@name"/></strong></a></font>
- </td></tr>
- <!-- Subsection body -->
- <tr><td><blockquote>
- <xsl:apply-templates/>
- </blockquote></td></tr>
- </table>
- </xsl:template>
-
-
- <!-- Process a source code example -->
- <xsl:template match="source">
- <xsl:variable name="void">
- <xsl:value-of select="$relative-path"/><xsl:value-of
select="$void-image"/>
- </xsl:variable>
- <div align="left">
- <table cellspacing="4" cellpadding="0"
border="0">
- <tr>
- <td bgcolor="{$source-color}" width="1"
height="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- <td bgcolor="{$source-color}" height="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- <td bgcolor="{$source-color}" width="1"
height="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- </tr>
- <tr>
- <td bgcolor="{$source-color}" width="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- <td bgcolor="#ffffff" height="1"><pre>
- <xsl:value-of select="."/>
- </pre></td>
- <td bgcolor="{$source-color}" width="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- </tr>
- <tr>
- <td bgcolor="{$source-color}" width="1"
height="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- <td bgcolor="{$source-color}" height="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- <td bgcolor="{$source-color}" width="1"
height="1">
- <img src="{$void}" width="1" height="1"
vspace="0" hspace="0" border="0"/>
- </td>
- </tr>
- </table>
- </div>
- </xsl:template>
-
-
- <!-- Process an attributes list with nested attribute elements -->
- <xsl:template match="attributes">
- <table border="1" cellpadding="5">
- <tr>
- <th width="15%" bgcolor="{$attributes-color}">
- <font color="#ffffff">Attribute</font>
- </th>
- <th width="85%" bgcolor="{$attributes-color}">
- <font color="#ffffff">Description</font>
- </th>
- </tr>
- <xsl:for-each select="attribute">
- <tr>
- <td align="left" valign="center">
- <xsl:if test="@required = 'true'">
- <strong><code><xsl:value-of
select="@name"/></code></strong>
- </xsl:if>
- <xsl:if test="@required != 'true'">
- <code><xsl:value-of select="@name"/></code>
- </xsl:if>
- </td>
- <td align="left" valign="center">
- <xsl:apply-templates/>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </xsl:template>
-
- <!-- Fix relative links in printer friendly versions of the docs -->
- <xsl:template match="a">
- <xsl:variable name="href" select="@href"/>
- <xsl:choose>
- <xsl:when test="$standalone = 'standalone'">
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:when test="$project-menu != 'menu' and
starts-with(@href,'../')">
- <a href="../{$href}"><xsl:apply-templates/></a>
- </xsl:when>
- <xsl:when test="$project-menu != 'menu' and
starts-with((a)href,'./') and contains(substring(@href,3),'/')">
- <a href=".{$href}"><xsl:apply-templates/></a>
- </xsl:when>
- <xsl:when test="$project-menu != 'menu' and
not(contains(@href,'//')) and not(starts-with(@href,'/')) and
not(starts-with(@href,'#')) and contains(@href,'/')">
- <a href="../{$href}"><xsl:apply-templates/></a>
- </xsl:when>
- <xsl:when test="$href != ''">
- <a href="{$href}"><xsl:apply-templates/></a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="name" select="@name"/>
- <a name="{$name}"><xsl:apply-templates/></a>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!-- Changelog related tags -->
- <xsl:template match="changelog">
- <table border="0" cellpadding="2"
cellspacing="2">
- <xsl:apply-templates/>
- </table>
- </xsl:template>
-
- <xsl:template match="changelog/add">
- <tr>
- <xsl:variable name="src"><xsl:value-of
select="$relative-path"/>/images/add.gif</xsl:variable>
- <td><img alt="add" class="icon"
src="{$src}"/></td>
- <td><xsl:apply-templates/></td>
- </tr>
- </xsl:template>
-
- <xsl:template match="changelog/update">
- <tr>
- <xsl:variable name="src"><xsl:value-of
select="$relative-path"/>/images/update.gif</xsl:variable>
- <td><img alt="update" class="icon"
src="{$src}"/></td>
- <td><xsl:apply-templates/></td>
- </tr>
- </xsl:template>
-
- <xsl:template match="changelog/design">
- <tr>
- <xsl:variable name="src"><xsl:value-of
select="$relative-path"/>/images/design.gif</xsl:variable>
- <td><img alt="design" class="icon"
src="{$src}"/></td>
- <td><xsl:apply-templates/></td>
- </tr>
- </xsl:template>
-
- <xsl:template match="changelog/docs">
- <tr>
- <xsl:variable name="src"><xsl:value-of
select="$relative-path"/>/images/docs.gif</xsl:variable>
- <td><img alt="docs" class="icon"
src="{$src}"/></td>
- <td><xsl:apply-templates/></td>
- </tr>
- </xsl:template>
-
- <xsl:template match="changelog/fix">
- <tr>
- <xsl:variable name="src"><xsl:value-of
select="$relative-path"/>/images/fix.gif</xsl:variable>
- <td><img alt="fix" class="icon"
src="{$src}"/></td>
- <td><xsl:apply-templates/></td>
- </tr>
- </xsl:template>
-
- <xsl:template match="changelog/scode">
- <tr>
- <xsl:variable name="src"><xsl:value-of
select="$relative-path"/>/images/code.gif</xsl:variable>
- <td><img alt="code" class="icon"
src="{$src}"/></td>
- <td><xsl:apply-templates/></td>
- </tr>
- </xsl:template>
-
- <!-- Process an attributes list with nested attribute elements -->
- <xsl:template match="status">
- <table border="1" cellpadding="5">
- <tr>
- <th width="15%" bgcolor="{$attributes-color}">
- <font color="#ffffff">Priority</font>
- </th>
- <th width="50%" bgcolor="{$attributes-color}">
- <font color="#ffffff">Action Item</font>
- </th>
- <th width="25%" bgcolor="{$attributes-color}">
- <font color="#ffffff">Volunteers</font>
- </th>
- <xsl:for-each select="item">
- <tr>
- <td align="left" valign="center">
- <xsl:value-of select="@priority"/>
- </td>
- <td align="left" valign="center">
- <xsl:apply-templates/>
- </td>
- <td align="left" valign="center">
- <xsl:value-of select="@owner"/>
- </td>
- </tr>
- </xsl:for-each>
- </tr>
- </table>
- </xsl:template>
-
- <!-- Link to a bug report -->
- <xsl:template match="bug">
- <xsl:variable name="link"><xsl:value-of
select="$buglink"/><xsl:value-of
select="text()"/></xsl:variable>
- <a href="{$link}"><xsl:apply-templates/></a>
- </xsl:template>
-
- <!-- Process everything else by just passing it through -->
- <xsl:template match="*|@*">
- <xsl:copy>
- <xsl:apply-templates select="@*|*|text()"/>
- </xsl:copy>
- </xsl:template>
-
-</xsl:stylesheet>