初始提交
diff --git a/tomcat-uidm/webapps/docs/jndi-resources-howto.html b/tomcat-uidm/webapps/docs/jndi-resources-howto.html
new file mode 100644
index 0000000..4ee0e69
--- /dev/null
+++ b/tomcat-uidm/webapps/docs/jndi-resources-howto.html
@@ -0,0 +1,931 @@
+<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Apache Tomcat 6.0 (6.0.39) - JNDI Resources HOW-TO</title><meta name="author" content="Craig R. McClanahan"><meta name="author" content="Yoav Shapira"><style type="text/css" media="print">

+			.noPrint {display: none;}

+			td#mainBody {width: 100%;}

+		</style></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="0"><!--PAGE HEADER--><tr><td><!--PROJECT LOGO--><a href="http://tomcat.apache.org/"><img src="./images/tomcat.gif" align="right" alt="

+      The Apache Tomcat Servlet/JSP Container

+    " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 6.0</font></h1><font face="arial,helvetica,sanserif">Version 6.0.39, Jan 27 2014</font></td><td><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="./images/asf-logo.gif" align="right" alt="Apache Logo" border="0"></a></td></tr></table><table border="0" width="100%" cellspacing="4"><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade="noshade" size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" nowrap="nowrap" class="noPrint"><p><strong>Links</strong></p><ul><li><a href="index.html">Docs Home</a></li><li><a href="http://wiki.apache.org/tomcat/FAQ">FAQ</a></li></ul><p><strong>User Guide</strong></p><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="realm-howto.html">6) Realms and AAA</a></li><li><a href="security-manager-howto.html">7) Security Manager</a></li><li><a href="jndi-resources-howto.html">8) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">9) JDBC DataSources</a></li><li><a href="class-loader-howto.html">10) Classloading</a></li><li><a href="jasper-howto.html">11) JSPs</a></li><li><a href="ssl-howto.html">12) SSL</a></li><li><a href="ssi-howto.html">13) SSI</a></li><li><a href="cgi-howto.html">14) CGI</a></li><li><a href="proxy-howto.html">15) Proxy Support</a></li><li><a href="mbeans-descriptor-howto.html">16) MBean Descriptor</a></li><li><a href="default-servlet.html">17) Default Servlet</a></li><li><a href="cluster-howto.html">18) Clustering</a></li><li><a href="balancer-howto.html">19) Load Balancer</a></li><li><a href="connectors.html">20) Connectors</a></li><li><a href="monitoring.html">21) Monitoring and Management</a></li><li><a href="logging.html">22) Logging</a></li><li><a href="apr.html">23) APR/Native</a></li><li><a href="virtual-hosting-howto.html">24) Virtual Hosting</a></li><li><a href="aio.html">25) Advanced IO</a></li><li><a href="extras.html">26) Additional Components</a></li><li><a href="maven-jars.html">27) Mavenized</a></li></ul><p><strong>Reference</strong></p><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Javadocs</a></li><li><a href="http://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul><p><strong>Apache Tomcat Development</strong></p><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="http://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>Apache Tomcat 6.0</h1><h2>JNDI Resources HOW-TO</h2><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Table of Contents"><!--()--></a><a name="Table_of_Contents"><strong>Table of Contents</strong></a></font></td></tr><tr><td><blockquote>

+<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#web.xml_configuration">web.xml configuration</a></li><li><a href="#context.xml_configuration">context.xml configuration</a></li><li><a href="#Global_configuration">Global configuration</a></li><li><a href="#Using_resources">Using resources</a></li><li><a href="#Tomcat_Standard_Resource_Factories">Tomcat Standard Resource Factories</a><ol><li><a href="#Generic_JavaBean_Resources">Generic JavaBean Resources</a></li><li><a href="#UserDatabase_Resources">UserDatabase Resources</a></li><li><a href="#JavaMail_Sessions">JavaMail Sessions</a></li><li><a href="#JDBC_Data_Sources">JDBC Data Sources</a></li></ol></li><li><a href="#Adding_Custom_Resource_Factories">Adding Custom Resource Factories</a></li></ul>

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote>

+

+<p>Tomcat 6 provides a JNDI <strong>InitialContext</strong> implementation

+instance for each web application running under it, in a manner that is 

+compatible with those provided by a 

+<a href="http://java.sun.com/j2ee">Java2 Enterprise Edition</a> application 

+server. The J2EE standard provides a standard set of elements in the

+<code>/WEB-INF/web.xml</code> file to reference/define resources.</p>

+

+<p>See the following Specifications for more information about programming APIs

+for JNDI, and for the features supported by Java2 Enterprise Edition (J2EE)

+servers, which Tomcat emulates for the services that it provides:</p>

+<ul>

+<li><a href="http://java.sun.com/products/jndi">Java Naming and Directory

+    Interface</a> (included in JDK 1.4 onwards)</li>

+<li><a href="http://java.sun.com/j2ee/download.html">J2EE Platform

+    Specification</a> (in particular, see Chapter 5 on <em>Naming</em>)</li>

+</ul>

+

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="web.xml configuration"><!--()--></a><a name="web.xml_configuration"><strong>web.xml configuration</strong></a></font></td></tr><tr><td><blockquote>

+

+<p>The following elements may be used in the web application deployment

+descriptor (<code>/WEB-INF/web.xml</code>) of your web application to define

+resources:</p>

+<ul>

+<li><code><strong>&lt;env-entry&gt;</strong></code> - Environment entry, a

+    single-value parameter that can be used to configure how the application

+    will operate.</li>

+<li><code><strong>&lt;resource-ref&gt;</strong></code> - Resource reference,

+    which is typically to an object factory for resources such as a JDBC

+    <code>DataSource</code>, a JavaMail <code>Session</code>, or custom

+    object factories configured into Tomcat 6.</li>

+<li><code><strong>&lt;resource-env-ref&gt;</strong></code> - Resource

+    environment reference, a new variation of <code>resource-ref</code>

+    added in Servlet 2.4 that is simpler to configure for resources

+    that do not require authentication information.</li>

+</ul>

+

+<p>Providing that Tomcat is able to identify an appropriate resource factory to

+use to create the resource and that no further configuration information is

+required, Tomcat will use the information in <code>/WEB-INF/web.xml</code> to

+create the resource.</p>

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="context.xml configuration"><!--()--></a><a name="context.xml_configuration"><strong>context.xml configuration</strong></a></font></td></tr><tr><td><blockquote>

+

+<p>If Tomcat is unable to identify the appropriate resource factory and/or

+additional configuration information is required, additional Tomcat specific

+configuration must be specified before Tomcat can create the resource.

+Tomcat specific resource configuration is entered in

+the <a href="config/context.html"><code>&lt;Context&gt;</code></a> elements that

+can be specified in either <code>$CATALINA_BASE/conf/server.xml</code> or,

+preferably, the per-web-application context XML file

+(<code>META-INF/context.xml</code>).</p>

+

+<p>Tomcat specific resource configuration is performed using the following

+elements in the <a href="config/context.html"><code>&lt;Context&gt;</code></a>

+element:</p>

+

+<ul>

+<li><a href="config/context.html#Environment Entries">&lt;Environment&gt;</a> -

+    Configure names and values for scalar environment entries that will be

+    exposed to the web application through the JNDI

+    <code>InitialContext</code> (equivalent to the inclusion of an

+    <code>&lt;env-entry&gt;</code> element in the web application

+    deployment descriptor).</li>

+<li><a href="config/context.html#Resource Definitions">&lt;Resource&gt;</a> -

+    Configure the name and data type of a resource made available to the

+    application (equivalent to the inclusion of a

+    <code>&lt;resource-ref&gt;</code> element in the web application

+    deployment descriptor).</li>

+<li><a href="config/context.html#Resource Links">&lt;ResourceLink&gt;</a> -

+    Add a link to a resource defined in the global JNDI context. Use resource 

+    links to give a web application access to a resource defined in 

+    the <a href="config/globalresources.html">&lt;GlobalNamingResources&gt;</a>

+    child element of the <a href="config/server.html">&lt;Server&gt;</a>

+    element.</li>

+<li><a href="config/context.html#Transaction">&lt;Transaction&gt;</a> -

+    Add a resource factory for instantiating the UserTransaction object 

+    instance that is available at <code>java:comp/UserTransaction</code>.</li>

+

+</ul>

+

+<p>Any number of these elements may be nested inside a

+<a href="config/context.html"><code>&lt;Context&gt;</code></a> element and will

+be associated only with that particular web application.</p>

+

+<p>If a resource has been defined in a

+<a href="config/context.html"><code>&lt;Context&gt;</code></a> element it is not

+necessary for that resource to be defined in <code>/WEB-INF/web.xml</code>.

+However, it is recommended to keep the entry in <code>/WEB-INF/web.xml</code>

+to document the resource requirements for the web application.</p>

+

+<p>Where the same resource name has been defined for a

+<code>&lt;env-entry&gt;</code> element included in the web application

+deployment descriptor (<code>/WEB-INF/web.xml</code>) and in an

+<code>&lt;Environment&gt;</code> element as part of the

+<a href="config/context.html"><code>&lt;Context&gt;</code></a> element for the

+web application, the values in the deployment descriptor will take precedence

+<strong>only</strong> if allowed by the corresponding

+<code>&lt;Environment&gt;</code> element (by setting the <code>override</code>

+attribute to "true").</p>

+

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Global configuration"><!--()--></a><a name="Global_configuration"><strong>Global configuration</strong></a></font></td></tr><tr><td><blockquote>

+

+<p>Tomcat 6 maintains a separate namespace of global resources for the 

+entire server.  These are configured in the 

+<a href="config/globalresources.html">

+<code><strong>&lt;GlobalNamingResources&gt;</strong></code></a> element of 

+<code>$CATALINA_BASE/conf/server.xml</code>. You may expose these resources to 

+web applications by using a 

+<a href="config/context.html#Resource Links">&lt;ResourceLink&gt;</a> to

+include it in the per-web-application context.</p>

+

+<p>If a resource has been defined using a 

+<a href="config/context.html#Resource Links">&lt;ResourceLink&gt;</a>, it is not

+necessary for that resource to be defined in <code>/WEB-INF/web.xml</code>.

+However, it is recommended to keep the entry in <code>/WEB-INF/web.xml</code>

+to document the resource requirements for the web application.</p>

+

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Using resources"><!--()--></a><a name="Using_resources"><strong>Using resources</strong></a></font></td></tr><tr><td><blockquote>

+

+<p>The <code>InitialContext</code> is configured as a web application is

+initially deployed, and is made available to web application components (for

+read-only access).  All configured entries and resources are placed in

+the <code>java:comp/env</code> portion of the JNDI namespace, so a typical

+access to a resource - in this case, to a JDBC <code>DataSource</code> -

+would look something like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+// Obtain our environment naming context

+Context initCtx = new InitialContext();

+Context envCtx = (Context) initCtx.lookup("java:comp/env");

+

+// Look up our data source

+DataSource ds = (DataSource)

+  envCtx.lookup("jdbc/EmployeeDB");

+

+// Allocate and use a connection from the pool

+Connection conn = ds.getConnection();

+... use this connection to access the database ...

+conn.close();

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Tomcat Standard Resource Factories"><!--()--></a><a name="Tomcat_Standard_Resource_Factories"><strong>Tomcat Standard Resource Factories</strong></a></font></td></tr><tr><td><blockquote>

+

+  <p>Tomcat 6 includes a series of standard resource factories that can

+  provide services to your web applications, but give you configuration

+  flexibility (via the

+  <a href="config/context.html"><code>&lt;Context&gt;</code></a> element)

+  without modifying the web application or the deployment descriptor. Each

+  subsection below details the configuration and usage of the standard resource

+  factories.</p>

+

+  <p>See <a href="#Adding Custom Resource Factories">Adding Custom

+  Resource Factories</a> for information about how to create, install,

+  configure, and use your own custom resource factory classes with

+  Tomcat 6.</p>

+

+  <p><em>NOTE</em> - Of the standard resource factories, only the

+  "JDBC Data Source" and "User Transaction" factories are mandated to

+  be available on other platforms, and then they are required only if

+  the platform implements the Java2 Enterprise Edition (J2EE) specs.

+  All other standard resource factories, plus custom resource factories

+  that you write yourself, are specific to Tomcat and cannot be assumed

+  to be available on other containers.</p>

+

+  <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Generic JavaBean Resources"><!--()--></a><a name="Generic_JavaBean_Resources"><strong>Generic JavaBean Resources</strong></a></font></td></tr><tr><td><blockquote>

+

+    <h3>0.  Introduction</h3>

+

+    <p>This resource factory can be used to create objects of <em>any</em>

+    Java class that conforms to standard JavaBeans naming conventions (i.e.

+    it has a zero-arguments constructor, and has property setters that

+    conform to the setFoo() naming pattern.  The resource factory will

+    create a new instance of the appropriate bean class every time a

+    <code>lookup()</code> for this entry is made.</p>

+

+    <p>The steps required to use this facility are described below.</p>

+

+    <h3>1.  Create Your JavaBean Class</h3>

+

+    <p>Create the JavaBean class which will be instantiated each time

+    that the resource factory is looked up.  For this example, assume

+    you create a class <code>com.mycompany.MyBean</code>, which looks

+    like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+package com.mycompany;

+

+public class MyBean {

+

+  private String foo = "Default Foo";

+

+  public String getFoo() {

+    return (this.foo);

+  }

+

+  public void setFoo(String foo) {

+    this.foo = foo;

+  }

+

+  private int bar = 0;

+

+  public int getBar() {

+    return (this.bar);

+  }

+

+  public void setBar(int bar) {

+    this.bar = bar;

+  }

+

+

+}

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+  <h3>2.  Declare Your Resource Requirements</h3>

+

+  <p>Next, modify your web application deployment descriptor

+  (<code>/WEB-INF/web.xml</code>) to declare the JNDI name under which

+  you will request new instances of this bean.  The simplest approach is

+  to use a <code>&lt;resource-env-ref&gt;</code> element, like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;resource-env-ref&gt;

+  &lt;description&gt;

+    Object factory for MyBean instances.

+  &lt;/description&gt;

+  &lt;resource-env-ref-name&gt;

+    bean/MyBeanFactory

+  &lt;/resource-env-ref-name&gt;

+  &lt;resource-env-ref-type&gt;

+    com.mycompany.MyBean

+  &lt;/resource-env-ref-type&gt;

+&lt;/resource-env-ref&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p><strong>WARNING</strong> - Be sure you respect the element ordering

+    that is required by the DTD for web application deployment descriptors!

+    See the

+    <a href="http://wiki.apache.org/tomcat/Specifications">Servlet

+    Specification</a> for details.</p>

+

+  <h3>3.  Code Your Application's Use Of This Resource</h3>

+

+  <p>A typical use of this resource environment reference might look

+  like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+Context initCtx = new InitialContext();

+Context envCtx = (Context) initCtx.lookup("java:comp/env");

+MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");

+

+writer.println("foo = " + bean.getFoo() + ", bar = " +

+               bean.getBar());

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <h3>4.  Configure Tomcat's Resource Factory</h3>

+

+    <p>To configure Tomcat's resource factory, add an element like this to the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+    this web application.</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;Context ...&gt;

+  ...

+  &lt;Resource name="bean/MyBeanFactory" auth="Container"

+            type="com.mycompany.MyBean"

+            factory="org.apache.naming.factory.BeanFactory"

+            bar="23"/&gt;

+  ...

+&lt;/Context&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>Note that the resource name (here, <code>bean/MyBeanFactory</code>

+    must match the value specified in the web application deployment

+    descriptor.  We are also initializing the value of the <code>bar</code>

+    property, which will cause <code>setBar(23)</code> to be called before

+    the new bean is returned.  Because we are not initializing the

+    <code>foo</code> property (although we could have), the bean will

+    contain whatever default value is set up by its constructor.</p>

+

+  </blockquote></td></tr></table>

+

+

+  <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="UserDatabase Resources"><!--()--></a><a name="UserDatabase_Resources"><strong>UserDatabase Resources</strong></a></font></td></tr><tr><td><blockquote>

+

+    <h3>0.  Introduction</h3>

+

+    <p>UserDatabase resources are typically configured as global resources for

+    use by a UserDatabase realm. Tomcat includes a UserDatabaseFactoory that

+    creates UserDatabase resources backed by an XML file - usually

+    <code>tomcat-users.xml</code></p>

+

+    <p>The steps required to set up a global UserDatabase resource are described

+    below.</p>

+

+    <h3>1. Create/edit the XML file</h3>

+

+    <p>The XMl file is typically located at

+    <code>$CATALINA_BASE/conf/tomcat-users.xml</code> however, you are free to

+    locate the file anywhere on the file system. It is recommended that the XML

+    files are placed in <code>$CATALINA_BASE/conf</code>. A typical XML would

+    look like:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;?xml version='1.0' encoding='utf-8'?&gt;

+&lt;tomcat-users&gt;

+  &lt;role rolename="tomcat"/&gt;

+  &lt;role rolename="role1"/&gt;

+  &lt;user username="tomcat" password="tomcat" roles="tomcat"/&gt;

+  &lt;user username="both" password="tomcat" roles="tomcat,role1"/&gt;

+  &lt;user username="role1" password="tomcat" roles="role1"/&gt;

+&lt;/tomcat-users&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <h3>2.  Declare Your Resource</h3>

+

+    <p>Next, modify <code>$CATALINA_BASE/conf/server.xml</code> to create the

+    UserDatabase resource based on your XMl file. It should look something like

+    this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;Resource name="UserDatabase"

+          auth="Container"

+          type="org.apache.catalina.UserDatabase"

+          description="User database that can be updated and saved"

+          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

+          pathname="conf/tomcat-users.xml"

+          readonly="false" /&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>The <code>pathname</code> attribute can be absolute or relative. If

+    relative, it is relative to <code>$CATALINA_BASE</code>.</p>

+    

+    <p>The <code>readonly</code> attribute is optional and defaults to

+    <code>true</code> if not supplied. If the XML is writeable then it will be

+    written to when Tomcat starts. <strong>WARNING:</strong> When the file is

+    written it will inherit the default file permissions for the user Tomcat

+    is running as. Ensure that these are appropriate to maintain the security

+    of your installation.</p>

+

+    <h3>3.  Configure the Realm</h3>

+

+    <p>Configure a UserDatabase Realm to use this resource as described in the

+    <a href="config/realm.html">Realm configuration documentation</a>.</p>

+

+  </blockquote></td></tr></table>

+

+

+  <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="JavaMail Sessions"><!--()--></a><a name="JavaMail_Sessions"><strong>JavaMail Sessions</strong></a></font></td></tr><tr><td><blockquote>

+

+    <h3>0.  Introduction</h3>

+

+    <p>In many web applications, sending electronic mail messages is a

+    required part of the system's functionality.  The

+    <a href="http://java.sun.com/products/javamail">Java Mail</a> API

+    makes this process relatively straightforward, but requires many

+    configuration details that the client application must be aware of

+    (including the name of the SMTP host to be used for message sending).</p>

+

+    <p>Tomcat 6 includes a standard resource factory that will create

+    <code>javax.mail.Session</code> session instances for you, already

+    configured to connect to an SMTP server.

+    In this way, the application is totally insulated from changes in the

+    email server configuration environment - it simply asks for, and receives,

+    a preconfigured session whenever needed.</p>

+

+    <p>The steps required for this are outlined below.</p>

+

+    <h3>1.  Declare Your Resource Requirements</h3>

+

+    <p>The first thing you should do is modify the web application deployment

+    descriptor (<code>/WEB-INF/web.xml</code>) to declare the JNDI name under

+    which you will look up preconfigured sessions.  By convention, all such

+    names should resolve to the <code>mail</code> subcontext (relative to the

+    standard <code>java:comp/env</code> naming context that is the root of

+    all provided resource factories.  A typical <code>web.xml</code> entry

+    might look like this:</p>

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;resource-ref&gt;

+  &lt;description&gt;

+    Resource reference to a factory for javax.mail.Session

+    instances that may be used for sending electronic mail

+    messages, preconfigured to connect to the appropriate

+    SMTP server.

+  &lt;/description&gt;

+  &lt;res-ref-name&gt;

+    mail/Session

+  &lt;/res-ref-name&gt;

+  &lt;res-type&gt;

+    javax.mail.Session

+  &lt;/res-type&gt;

+  &lt;res-auth&gt;

+    Container

+  &lt;/res-auth&gt;

+&lt;/resource-ref&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p><strong>WARNING</strong> - Be sure you respect the element ordering

+    that is required by the DTD for web application deployment descriptors!

+    See the

+    <a href="http://wiki.apache.org/tomcat/Specifications">Servlet

+    Specification</a> for details.</p>

+

+    <h3>2.  Code Your Application's Use Of This Resource</h3>

+

+    <p>A typical use of this resource reference might look like this:</p>

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+Context initCtx = new InitialContext();

+Context envCtx = (Context) initCtx.lookup("java:comp/env");

+Session session = (Session) envCtx.lookup("mail/Session");

+

+Message message = new MimeMessage(session);

+message.setFrom(new InternetAddress(request.getParameter("from")));

+InternetAddress to[] = new InternetAddress[1];

+to[0] = new InternetAddress(request.getParameter("to"));

+message.setRecipients(Message.RecipientType.TO, to);

+message.setSubject(request.getParameter("subject"));

+message.setContent(request.getParameter("content"), "text/plain");

+Transport.send(message);

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>Note that the application uses the same resource reference name

+    that was declared in the web application deployment descriptor.  This

+    is matched up against the resource factory that is configured in the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element

+    for the web application as described below.</p>

+

+    <h3>3.  Configure Tomcat's Resource Factory</h3>

+

+    <p>To configure Tomcat's resource factory, add an elements like this to the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+    this web application.</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;Context ...&gt;

+  ...

+  &lt;Resource name="mail/Session" auth="Container"

+            type="javax.mail.Session"

+            mail.smtp.host="localhost"/&gt;

+  ...

+&lt;/Context&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>Note that the resource name (here, <code>mail/Session</code>) must

+    match the value specified in the web application deployment descriptor.

+    Customize the value of the <code>mail.smtp.host</code> parameter to

+    point at the server that provides SMTP service for your network.</p>

+

+    <p>Additional resource attributes and values will be converted to properties

+    and values and passed to

+    <code>javax.mail.Session.getInstance(java.util.Properties)</code> as part of

+    the <code>java.util.Properties</code> collection. In addition to the

+    properties defined in Annex A of the JavaMail specification, individual

+    providers may also support additional properties.</p>

+    

+    <p>Tomcat's resource factory provides a <code>password</code> property

+    which can be configured by adding <code>password="yourpassword"</code>

+    to the Resource definition.</p>

+

+    <h3>4.  Install the JavaMail libraries</h3>

+

+    <p><a href="http://www.oracle.com/technetwork/java/index-138643.html">

+    Download the JavaMail API</a>.  The JavaMail API requires the Java Activation

+    Framework (JAF) API as well.  The Java Activation Framework is included in

+    Java SE 6 onwards. Java SE 5 users can download the latest version, 

+    <a href="http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html">

+    JAF 1.1.1</a>.

+    </p>

+

+    <p>Unpackage the distribution(s) and place mail.jar (and activation.jar if

+    required) into $CATALINA_HOME/lib so the JAR(s) is(are) available to Tomcat

+    during the initialization of the mail Session Resource.

+    <strong>Note:</strong> placing jars in both $CATALINA_HOME/lib and a web

+    application's lib folder will cause an error, so ensure mail.jar (and

+    activation.jar) is(are) placed only the $CATALINA_HOME/lib location.

+    </p>

+

+    <h3>Example Application</h3>

+

+    <p>The <code>/examples</code> application included with Tomcat contains

+    an example of utilizing this resource factory.  It is accessed via the

+    "JSP Examples" link.  The source code for the servlet that actually

+    sends the mail message is in

+    <code>/WEB-INF/classes/SendMailServlet.java</code>.</p>

+

+    <p><strong>WARNING</strong> - The default configuration assumes that there

+    is an SMTP server listing on port 25 on <code>localhost</code>. If this is

+    not the case, edit the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+    this web application and modify the parameter value for the

+    <code>mail.smtp.host</code> parameter to be the host name of an SMTP server

+    on your network.</p>

+

+  </blockquote></td></tr></table>

+

+  <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="JDBC Data Sources"><!--()--></a><a name="JDBC_Data_Sources"><strong>JDBC Data Sources</strong></a></font></td></tr><tr><td><blockquote>

+

+    <h3>0.  Introduction</h3>

+

+    <p>Many web applications need to access a database via a JDBC driver,

+    to support the functionality required by that application.  The J2EE

+    Platform Specification requires J2EE Application Servers to make

+    available a <em>DataSource</em> implementation (that is, a connection

+    pool for JDBC connections) for this purpose.  Tomcat 6 offers exactly

+    the same support, so that database-based applications you develop on

+    Tomcat using this service will run unchanged on any J2EE server.</p>

+

+    <p>For information about JDBC, you should consult the following:</p>

+    <ul>

+    <li><a href="http://java.sun.com/products/jdbc/">http://java.sun.com/products/jdbc/</a> -

+        Home page for information about Java Database Connectivity.</li>

+    <li><a href="http://docs.oracle.com/javase/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame.html">http://docs.oracle.com/javase/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame.html</a> -

+        The JDBC 2.1 API Specification.</li>

+    <li><a href="http://java.sun.com/products/jdbc/jdbc20.stdext.pdf">http://java.sun.com/products/jdbc/jdbc20.stdext.pdf</a> -

+        The JDBC 2.0 Standard Extension API (including the

+        <code>javax.sql.DataSource</code> API).  This package is now known

+        as the "JDBC Optional Package".</li>

+    <li><a href="http://java.sun.com/j2ee/download.html">http://java.sun.com/j2ee/download.html</a> -

+        The J2EE Platform Specification (covers the JDBC facilities that

+        all J2EE platforms must provide to applications).</li>

+    </ul>

+

+    <p><strong>NOTE</strong> - The default data source support in Tomcat

+    is based on the <strong>DBCP</strong> connection pool from the

+    <a href="http://commons.apache.org/">Commons</a>

+    project.  However, it is possible to use any other connection pool

+    that implements <code>javax.sql.DataSource</code>, by writing your

+    own custom resource factory, as described

+    <a href="#Adding Custom Resource Factories">below</a>.</p>

+

+    <h3>1.  Install Your JDBC Driver</h3>

+

+    <p>Use of the <em>JDBC Data Sources</em> JNDI Resource Factory requires

+    that you make an appropriate JDBC driver available to both Tomcat internal

+    classes and to your web application.  This is most easily accomplished by

+    installing the driver's JAR file(s) into the

+    <code>$CATALINA_HOME/lib</code> directory, which makes the driver

+    available both to the resource factory and to your application.</p>

+

+    <h3>2.  Declare Your Resource Requirements</h3>

+

+    <p>Next, modify the web application deployment descriptor

+    (<code>/WEB-INF/web.xml</code>) to declare the JNDI name under

+    which you will look up preconfigured data source.  By convention, all such

+    names should resolve to the <code>jdbc</code> subcontext (relative to the

+    standard <code>java:comp/env</code> naming context that is the root of

+    all provided resource factories.  A typical <code>web.xml</code> entry

+    might look like this:</p>

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;resource-ref&gt;

+  &lt;description&gt;

+    Resource reference to a factory for java.sql.Connection

+    instances that may be used for talking to a particular

+    database that is configured in the &lt;Context&gt;

+    configurartion for the web application.

+  &lt;/description&gt;

+  &lt;res-ref-name&gt;

+    jdbc/EmployeeDB

+  &lt;/res-ref-name&gt;

+  &lt;res-type&gt;

+    javax.sql.DataSource

+  &lt;/res-type&gt;

+  &lt;res-auth&gt;

+    Container

+  &lt;/res-auth&gt;

+&lt;/resource-ref&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p><strong>WARNING</strong> - Be sure you respect the element ordering

+    that is required by the DTD for web application deployment descriptors!

+    See the

+    <a href="http://wiki.apache.org/tomcat/Specifications">Servlet

+    Specification</a> for details.</p>

+

+    <h3>3.  Code Your Application's Use Of This Resource</h3>

+

+    <p>A typical use of this resource reference might look like this:</p>

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+Context initCtx = new InitialContext();

+Context envCtx = (Context) initCtx.lookup("java:comp/env");

+DataSource ds = (DataSource)

+  envCtx.lookup("jdbc/EmployeeDB");

+

+Connection conn = ds.getConnection();

+... use this connection to access the database ...

+conn.close();

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>Note that the application uses the same resource reference name that was

+    declared in the web application deployment descriptor. This is matched up

+    against the resource factory that is configured in the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+    the web application as described below.</p>

+

+    <h3>4.  Configure Tomcat's Resource Factory</h3>

+

+    <p>To configure Tomcat's resource factory, add an element like this to the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+    the web application.</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;Context ...&gt;

+  ...

+  &lt;Resource name="jdbc/EmployeeDB"

+            auth="Container"

+            type="javax.sql.DataSource"

+            username="dbusername"

+            password="dbpassword"

+            driverClassName="org.hsql.jdbcDriver"

+            url="jdbc:HypersonicSQL:database"

+            maxActive="8"

+            maxIdle="4"/&gt;

+  ...

+&lt;/Context&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>Note that the resource name (here, <code>jdbc/EmployeeDB</code>) must

+    match the value specified in the web application deployment descriptor.</p>

+

+    <p>This example assumes that you are using the HypersonicSQL database

+    JDBC driver.  Customize the <code>driverClassName</code> and

+    <code>driverName</code> parameters to match your actual database's

+    JDBC driver and connection URL.</p>

+

+    <p>The configuration properties for Tomcat's standard data source

+    resource factory

+    (<code>org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory</code>) are

+    as follows:</p>

+    <ul>

+    <li><strong>driverClassName</strong> - Fully qualified Java class name

+        of the JDBC driver to be used.</li>

+    <li><strong>username</strong> - Database username to be passed to our

+        JDBC driver.</li>

+    <li><strong>password</strong> - Database password to be passed to our

+        JDBC driver.</li>

+    <li><strong>url</strong> - Connection URL to be passed to our JDBC driver.

+        (For backwards compatibility, the property <code>driverName</code>

+        is also recognized.)</li>

+    <li><strong>initialSize</strong> - The initial number of connections

+        that will be created in the pool during pool initialization. Default: 0</li>

+    <li><strong>maxActive</strong> - The maximum number of connections

+        that can be allocated from this pool at the same time. Default: 8</li>

+    <li><strong>minIdle</strong> - The minimum number of connections that

+        will sit idle in this pool at the same time. Default: 0</li>

+    <li><strong>maxIdle</strong> - The maximum number of connections that

+        can sit idle in this pool at the same time. Default: 8</li>

+    <li><strong>maxWait</strong> - The maximum number of milliseconds that the

+        pool will wait (when there are no available connections) for a

+        connection to be returned before throwing an exception. Default: -1 (infinite)</li>

+    </ul>

+    <p>Some additional properties handle connection validation:</p>

+    <ul>

+    <li><strong>validationQuery</strong> - SQL query that can be used by the

+        pool to validate connections before they are returned to the

+        application.  If specified, this query MUST be an SQL SELECT

+        statement that returns at least one row.</li>

+    <li><strong>validationQueryTimeout</strong> - Timeout in seconds

+        for the validation query to return. Default: -1 (infinite)</li>

+    <li><strong>testOnBorrow</strong> - true or false: whether a connection

+        should be validated using the validation query each time it is

+        borrowed from the pool. Default: true</li>

+    <li><strong>testOnReturn</strong> - true or false: whether a connection

+        should be validated using the validation query each time it is

+        returned to the pool. Default: false</li>

+    </ul>

+    <p>The optional evictor thread is responsible for shrinking the pool

+    by removing any conections which are idle for a long time. The evictor

+    does not respect <code>minIdle</code>. Note that you do not need to

+    activate the evictor thread if you only want the pool to shrink according

+    to the configured <code>maxIdle</code> property.</p>

+    <p>The evictor is disabled by default and can be configured using

+    the following properties:</p>

+    <ul>

+    <li><strong>timeBetweenEvictionRunsMillis</strong> - The number of

+        milliseconds between consecutive runs of the evictor.

+        Default: -1 (disabled)</li>

+    <li><strong>numTestsPerEvictionRun</strong> - The number of connections

+        that will be checked for idleness by the evitor during each

+        run of the evictor. Default: 3</li>

+    <li><strong>minEvictableIdleTimeMillis</strong> - The idle time in

+        milliseconds after which a connection can be removed from the pool

+        by the evictor. Default: 30*60*1000 (30 minutes)</li>

+    <li><strong>testWhileIdle</strong> - true or false: whether a connection

+        should be validated by the evictor thread using the validation query

+        while sitting idle in the pool. Default: false</li>

+    </ul>

+    <p>Another optional feature is the removal of abandoned connections.

+    A connection is called abandoned if the application does not return it

+    to the pool for a long time. The pool can close such connections

+    automatically and remove them from the pool. This is a workaround

+    for applications leaking connections.</p>

+    <p>The abandoning feature is disabled by default and can be configured

+    using the following properties:</p>

+    <ul>

+    <li><strong>removeAbandoned</strong> - true or false: whether to

+        remove abandoned connections from the pool. Default: false</li>

+    <li><strong>removeAbandonedTimeout</strong> - The number of

+        seconds after which a borrowed connection is assumed to be abandoned.

+        Default: 300</li>

+    <li><strong>logAbandoned</strong> - true or false: whether to log

+        stack traces for application code which abandoned a statement

+        or connection. This adds serious overhead. Default: false</li>

+    </ul>

+    <p>Finally there are various properties that allow further fine tuning

+    of the pool behaviour:</p>

+    <ul>

+    <li><strong>defaultAutoCommit</strong> - true or false: default

+        auto-commit state of the connections created by this pool.

+        Default: true</li>

+    <li><strong>defaultReadOnly</strong> - true or false: default

+        read-only state of the connections created by this pool.

+        Default: false</li>

+    <li><strong>defaultTransactionIsolation</strong> - This sets the

+        default transaction isolation level. Can be one of

+        <code>NONE</code>, <code>READ_COMMITTED</code>,

+        <code>READ_UNCOMMITTED</code>, <code>REPEATABLE_READ</code>,

+        <code>SERIALIZABLE</code>. Default: no default set</li>

+    <li><strong>poolPreparedStatements</strong> - true or false: whether to

+        pool PreparedStatements and CallableStatements. Default: false</li>

+    <li><strong>maxOpenPreparedStatements</strong> - The maximum number of open

+        statements that can be allocated from the statement pool at the same time.

+        Default: -1 (unlimited)</li>

+    <li><strong>defaultCatalog</strong> - The name of the default catalog.

+        Default: not set</li>

+    <li><strong>connectionInitSqls</strong> - A list of SQL statements

+        run once after a Connection is created. Separate multiple statements

+        by semicolons (<code>;</code>). Default: no statement</li>

+    <li><strong>connectionProperties</strong> - A list of driver specific

+        properties passed to the driver for creating connections. Each

+        property is given as <code>name=value</code>, multiple properties

+        are separated by semicolons (<code>;</code>). Default: no properties</li>

+    <li><strong>accessToUnderlyingConnectionAllowed</strong> - true or false: whether

+        accessing the underlying connections is allowed. Default: false</li>

+    </ul>

+    <p>For more details, please refer to the commons-dbcp documentation.</p>

+

+  </blockquote></td></tr></table>

+

+</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Adding Custom Resource Factories"><!--()--></a><a name="Adding_Custom_Resource_Factories"><strong>Adding Custom Resource Factories</strong></a></font></td></tr><tr><td><blockquote>

+

+  <p>If none of the standard resource factories meet your needs, you can write

+  your own factory and integrate it into Tomcat 6, and then configure the use

+  of this factory in the

+  <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+  the web application. In the example below, we will create a factory that only

+  knows how to create <code>com.mycompany.MyBean</code> beans from the

+  <a href="#Generic JavaBean Resources">Generic JavaBean Resources</a> example

+  above.</p>

+

+  <h3>1.  Write A Resource Factory Class</h3>

+

+  <p>You must write a class that implements the JNDI service provider

+  <code>javax.naming.spi.ObjectFactory</code> inteface.  Every time your

+  web application calls <code>lookup()</code> on a context entry that is

+  bound to this factory, the <code>getObjectInstance()</code> method is

+  called, with the following arguments:</p>

+  <ul>

+  <li><strong>Object obj</strong> - The (possibly null) object containing

+      location or reference information that can be used in creating an object.

+      For Tomcat, this will always be an object of type

+      <code>javax.naming.Reference</code>, which contains the class name of

+      this factory class, as well as the configuration properties (from the

+      <a href="config/context.html"><code>&lt;Context&gt;</code></a> for the

+      web application) to use in creating objects to be returned.</li>

+  <li><strong>Name name</strong> - The name to which this factory is bound

+      relative to <code>nameCtx</code>, or <code>null</code> if no name

+      is specified.</li>

+  <li><strong>Context nameCtx</strong> - The context relative to which the

+      <code>name</code> parameter is specified, or <code>null</code> if

+      <code>name</code> is relative to the default initial context.</li>

+  <li><strong>Hashtable environment</strong> - The (possibly null)

+      environment that is used in creating this object.  This is generally

+      ignored in Tomcat object factories.</li>

+  </ul>

+

+  <p>To create a resource factory that knows how to produce <code>MyBean</code>

+  instances, you might create a class like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+package com.mycompany;

+

+import java.util.Enumeration;

+import java.util.Hashtable;

+import javax.naming.Context;

+import javax.naming.Name;

+import javax.naming.NamingException;

+import javax.naming.RefAddr;

+import javax.naming.Reference;

+import javax.naming.spi.ObjectFactory;

+

+public class MyBeanFactory implements ObjectFactory {

+

+  public Object getObjectInstance(Object obj,

+      Name name, Context nameCtx, Hashtable environment)

+      throws NamingException {

+

+      // Acquire an instance of our specified bean class

+      MyBean bean = new MyBean();

+

+      // Customize the bean properties from our attributes

+      Reference ref = (Reference) obj;

+      Enumeration addrs = ref.getAll();

+      while (addrs.hasMoreElements()) {

+          RefAddr addr = (RefAddr) addrs.nextElement();

+          String name = addr.getType();

+          String value = (String) addr.getContent();

+          if (name.equals("foo")) {

+              bean.setFoo(value);

+          } else if (name.equals("bar")) {

+              try {

+                  bean.setBar(Integer.parseInt(value));

+              } catch (NumberFormatException e) {

+                  throw new NamingException("Invalid 'bar' value " + value);

+              }

+          }

+      }

+

+      // Return the customized instance

+      return (bean);

+

+  }

+

+}

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+  <p>In this example, we are unconditionally creating a new instance of

+  the <code>com.mycompany.MyBean</code> class, and populating its properties

+  based on the parameters included in the <code>&lt;ResourceParams&gt;</code>

+  element that configures this factory (see below).  You should note that any

+  parameter named <code>factory</code> should be skipped - that parameter is

+  used to specify the name of the factory class itself (in this case,

+  <code>com.mycompany.MyBeanFactory</code>) rather than a property of the

+  bean being configured.</p>

+

+  <p>For more information about <code>ObjectFactory</code>, see the

+  <a href="http://java.sun.com/products/jndi/docs.html">JNDI 1.2 Service

+  Provider Interface (SPI) Specification</a>.</p>

+

+  <p>You will need to compile this class against a class path that includes

+  all of the JAR files in the <code>$CATALINA_HOME/lib</code> directory.  When you are through,

+  place the factory class (and the corresponding bean class) unpacked under

+  <code>$CATALINA_HOME/lib</code>, or in a JAR file inside

+  <code>$CATALINA_HOME/lib</code>.  In this way, the required class

+  files are visible to both Catalina internal resources and your web

+  application.</p>

+

+  <h3>2.  Declare Your Resource Requirements</h3>

+

+  <p>Next, modify your web application deployment descriptor

+  (<code>/WEB-INF/web.xml</code>) to declare the JNDI name under which

+  you will request new instances of this bean.  The simplest approach is

+  to use a <code>&lt;resource-env-ref&gt;</code> element, like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;resource-env-ref&gt;

+  &lt;description&gt;

+    Object factory for MyBean instances.

+  &lt;/description&gt;

+  &lt;resource-env-ref-name&gt;

+    bean/MyBeanFactory

+  &lt;/resource-env-ref-name&gt;

+  &lt;resource-env-ref-type&gt;

+    com.mycompany.MyBean

+  &lt;/resource-env-ref-type&gt;

+&lt;resource-env-ref&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p><strong>WARNING</strong> - Be sure you respect the element ordering

+    that is required by the DTD for web application deployment descriptors!

+    See the

+    <a href="http://wiki.apache.org/tomcat/Specifications">Servlet

+    Specification</a> for details.</p>

+

+  <h3>3.  Code Your Application's Use Of This Resource</h3>

+

+  <p>A typical use of this resource environment reference might look

+  like this:</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+Context initCtx = new InitialContext();

+Context envCtx = (Context) initCtx.lookup("java:comp/env");

+MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");

+

+writer.println("foo = " + bean.getFoo() + ", bar = " +

+               bean.getBar());

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <h3>4.  Configure Tomcat's Resource Factory</h3>

+

+    <p>To configure Tomcat's resource factory, add an elements like this to the

+    <a href="config/context.html"><code>&lt;Context&gt;</code></a> element for

+    this web application.</p>

+

+<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>

+&lt;Context ...&gt;

+  ...

+  &lt;Resource name="bean/MyBeanFactory" auth="Container"

+            type="com.mycompany.MyBean"

+            factory="com.mycompany.MyBeanFactory"

+            bar="23"/&gt;

+  ...

+&lt;/Context&gt;

+</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>

+

+    <p>Note that the resource name (here, <code>bean/MyBeanFactory</code>

+    must match the value specified in the web application deployment

+    descriptor.  We are also initializing the value of the <code>bar</code>

+    property, which will cause <code>setBar(23)</code> to be called before

+    the new bean is returned.  Because we are not initializing the

+    <code>foo</code> property (although we could have), the bean will

+    contain whatever default value is set up by its constructor.</p>

+

+    <p>You will also note that, from the application developer's perspective,

+    the declaration of the resource environment reference, and the programming

+    used to request new instances, is identical to the approach used for the

+    <em>Generic JavaBean Resources</em> example.  This illustrates one of the

+    advantages of using JNDI resources to encapsulate functionality - you can

+    change the underlying implementation without necessarily having to

+    modify applications using the resources, as long as you maintain

+    compatible APIs.</p>

+

+</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade="noshade" size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em>

+        Copyright &copy; 1999-2014, Apache Software Foundation

+        </em></font></div></td></tr></table></body></html>
\ No newline at end of file