craigmcc 02/03/12 13:14:16 Modified: catalina/src/share/org/apache/catalina/servlets LocalStrings.properties ManagerServlet.java webapps/tomcat-docs manager-howto.xml Added: catalina/src/share/org/apache/catalina/ant ResourcesTask.java Log: Add a new "/resources" command that will enumerate the available global JNDI resources (either all of them, or all of them for a specific type like javax.sql.DataSource). This is useful to tools that want to package up webapps and create the <Context> configuration element, with embedded <ResourceLink> elements that link resource references in the web.xml to the corresponding actual resources. Revision Changes Path 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/ant/ResourcesTask.java Index: ResourcesTask.java =================================================================== /* * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/ant/ResourcesTask.java,v 1.1 2002/03/12 21:14:15 craigmcc Exp $ * $Revision: 1.1 $ * $Date: 2002/03/12 21:14:15 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.catalina.ant; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; /** * Ant task that implements the <code>/list</code> command, supported by the * Tomcat manager application. * * @author Craig R. McClanahan * @version $Revision: 1.1 $ $Date: 2002/03/12 21:14:15 $ * @since 4.1 */ public class ResourcesTask extends AbstractCatalinaTask { // ------------------------------------------------------------- Properties /** * The fully qualified class name of the resource type being requested * (if any). */ protected String type = null; public String getType() { return (this.type); } public void setType(String type) { this.type = type; } // --------------------------------------------------------- Public Methods /** * Execute the requested operation. * * @exception BuildException if an error occurs */ public void execute() throws BuildException { super.execute(); if (type != null) { execute("/resources?type=" + type); } else { execute("/resources"); } } } 1.14 +3 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings.properties Index: LocalStrings.properties =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings.properties,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- LocalStrings.properties 27 Feb 2002 22:43:56 -0000 1.13 +++ LocalStrings.properties 12 Mar 2002 21:14:15 -0000 1.14 @@ -24,6 +24,7 @@ managerServlet.noContext=FAIL - No context exists for path {0} managerServlet.noDirectory=FAIL - Non-directory document base for path {0} managerServlet.noDocBase=FAIL - Cannot remove document base for path {0} +managerServlet.noGlobal=FAIL - No global JNDI resources are available managerServlet.noPath=FAIL - No context path was specified managerServlet.noReload=FAIL - Reload not supported on WAR deployed at path {0} managerServlet.noRename=FAIL - Cannot deploy uploaded WAR for path {0} @@ -31,6 +32,8 @@ managerServlet.noWrapper=Container has not called setWrapper() for this servlet managerServlet.reloaded=OK - Reloaded application at context path {0} managerServlet.removed=OK - Removed application at context path {0} +managerServlet.resourcesAll=OK - Listed global resources of all types +managerServlet.resourcesType=OK - Listed global resources of type {0} managerServlet.sessiondefaultmax=Default maximum session inactive interval {0} minutes managerServlet.sessiontimeout={0} minutes:{1} sessions managerServlet.sessions=OK - Session information for application at context path {0} 1.17 +82 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java Index: ManagerServlet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ManagerServlet.java 1 Mar 2002 03:04:44 -0000 1.16 +++ ManagerServlet.java 12 Mar 2002 21:14:15 -0000 1.17 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v 1.16 2002/03/01 03:04:44 craigmcc Exp $ - * $Revision: 1.16 $ - * $Date: 2002/03/01 03:04:44 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v 1.17 2002/03/12 21:14:15 craigmcc Exp $ + * $Revision: 1.17 $ + * $Date: 2002/03/12 21:14:15 $ * * ==================================================================== * @@ -75,6 +75,8 @@ import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import javax.naming.NameClassPair; +import javax.naming.NamingEnumeration; import javax.naming.directory.DirContext; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; @@ -88,8 +90,11 @@ import org.apache.catalina.Deployer; import org.apache.catalina.Globals; import org.apache.catalina.Host; +import org.apache.catalina.Server; +import org.apache.catalina.ServerFactory; import org.apache.catalina.Session; import org.apache.catalina.Wrapper; +import org.apache.catalina.core.StandardServer; import org.apache.catalina.util.StringManager; import org.apache.naming.resources.ProxyDirContext; import org.apache.naming.resources.WARDirContext; @@ -131,6 +136,9 @@ * configuration files.</li> * <li><b>/remove?path=/xxx</b> - Shutdown and remove the web application * attached to context path <code>/xxx</code> for this virtual host.</li> + * <li><b>/resources?type=xxxx</b> - Enumerate the available global JNDI + * resources, optionally limited to those of the specified type + * (fully qualified Java class name), if available.</li> * <li><b>/sessions?path=/xxx</b> - List session information about the web * application attached to context path <code>/xxx</code> for this * virtual host.</li> @@ -182,7 +190,7 @@ * </ul> * * @author Craig R. McClanahan - * @version $Revision: 1.16 $ $Date: 2002/03/01 03:04:44 $ + * @version $Revision: 1.17 $ $Date: 2002/03/12 21:14:15 $ */ public class ManagerServlet @@ -213,6 +221,13 @@ /** + * The global JNDI <code>NamingContext</code> for this server, + * if available. + */ + protected javax.naming.Context global = null; + + + /** * The string manager for this package. */ protected static StringManager sm = @@ -294,6 +309,7 @@ command = request.getServletPath(); String config = request.getParameter("config"); String path = request.getParameter("path"); + String type = request.getParameter("type"); String war = request.getParameter("war"); // Prepare our output writer to generate the response message @@ -311,6 +327,8 @@ reload(writer, path); } else if (command.equals("/remove")) { remove(writer, path); + } else if (command.equals("/resources")) { + resources(writer, type); } else if (command.equals("/sessions")) { sessions(writer, path); } else if (command.equals("/start")) { @@ -403,11 +421,19 @@ ; } + // Acquire global JNDI resources if available + Server server = ServerFactory.getServer(); + if ((server != null) && (server instanceof StandardServer)) { + global = ((StandardServer) server).getGlobalNamingContext(); + } // Log debugging messages as necessary if (debug >= 1) { log("init: Associated with Deployer '" + deployer.getName() + "'"); + if (global != null) { + log("init: Global resources are available"); + } } } @@ -703,6 +729,58 @@ writer.println(sm.getString("managerServlet.removed", displayPath)); } catch (Throwable t) { log("ManagerServlet.remove[" + displayPath + "]", t); + writer.println(sm.getString("managerServlet.exception", + t.toString())); + } + + } + + + /** + * Render a list of available global JNDI resources. + * + * @param type Fully qualified class name of the resource type of interest, + * or <code>null</code> to list resources of all types + */ + protected void resources(PrintWriter writer, String type) { + + if (debug >= 1) { + if (type != null) { + log("resources: Listing resources of type " + type); + } else { + log("resources: Listing resources of all types"); + } + } + + // Is the global JNDI resources context available? + if (global == null) { + writer.println(sm.getString("managerServlet.noGlobal")); + return; + } + + // Enumerate the global JNDI resources of the requested type + if (type != null) { + writer.println(sm.getString("managerServlet.resourcesType", + type)); + } else { + writer.println(sm.getString("managerServlet.resourcesAll")); + } + try { + NamingEnumeration items = global.list(""); + while (items.hasMore()) { + NameClassPair item = (NameClassPair) items.next(); + if ((type != null) && + (!type.equals(item.getClassName()))) { + continue; + } + writer.print(item.getName()); + writer.print(':'); + writer.print(item.getClassName()); + // Do we want a description if available? + writer.println(); + } + } catch (Throwable t) { + log("ManagerServlet.resources[" + type + "]", t); writer.println(sm.getString("managerServlet.exception", t.toString())); } 1.11 +63 -8 jakarta-tomcat-4.0/webapps/tomcat-docs/manager-howto.xml Index: manager-howto.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/tomcat-docs/manager-howto.xml,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- manager-howto.xml 27 Feb 2002 05:40:57 -0000 1.10 +++ manager-howto.xml 12 Mar 2002 21:14:16 -0000 1.11 @@ -36,6 +36,9 @@ <li>Reload an existing web application, to reflect changes in the contents of <code>/WEB-INF/classes</code> or <code>/WEB-INF/lib</code>. </li> +<li>List the available global JNDI resources, for use in deployment + tools that are preparing <code><ResourceLink></code> elements + nested in a <code><Context></code> deployment description.</li> <li>Remove an installed web application.</li> <li>Start a stopped application (thus making it available again).</li> <li>Stop an existing application (so that it becomes unavailable), but @@ -434,6 +437,57 @@ </subsection> +<subsection name="List Available Global JNDI Resources"> + +<source> +http://localhost:8080/manager/resources[?type=xxxxx] +</source> + +<p>List the global JNDI resources that are available for use in resource +links for context configuration files. If you specify the <code>type</code> +request parameter, the value must be the fully qualified Java class name of +the resource type you are interested in (for example, you would specify +<code>javax.sql.DataSource</code> to acquire the names of all available +JDBC data sources). If you do not specify the <code>type</code> request +parameter, resources of all types will be returned.</p> + +<p>Depending on whether the <code>type</code> request parameter is specfied +or not, the first line of a normal response will be:</p> +<pre> + OK - Listed global resources of all types +</pre> +<p>or</p> +<pre> + OK - Listed global resources of type xxxxx +</pre> +<p>followed by one line for each resource. Each line is composed of fields +delimited by colon characters (":"), as follows:</p> +<ul> +<li><em>Global Resource Name</em> - The name of this global JNDI resource, + which would be used in the <code>global</code> attribute of a + <code><ResourceLink></code> element.</li> +<li><em>Global Resource Type</em> - The fully qualified Java class name of + this global JNDI resource.</li> +</ul> + +<p>If an error occurs, the response will start with <code>FAIL</code> and +include an error message. Possible causes for problems include:</p> +<ul> +<li><em>Encountered exception</em> + <blockquote> + <p>An exception was encountered trying to enumerate the global JNDI + resources. Check the Tomcat 4 logs for the details.</p> + </blockquote></li> +<li><em>No global JNDI resources are available</em> + <blockquote> + <p>The Tomcat server you are running has been configured without + global JNDI resources.</p> + </blockquote></li> +</ul> + + +</subsection> + <subsection name="Session Statistics"> <source> @@ -637,14 +691,15 @@ <property name="password" value="mypassword"/> <-- Configure the custom Ant tasks for the Manager application --> - <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/> - <taskdef name="install" classname="org.apache.catalina.ant.InstallTask"/> - <taskdef name="list" classname="org.apache.catalina.ant.ListTask"/> - <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"/> - <taskdef name="remove" classname="org.apache.catalina.ant.RemoveTask"/> - <taskdef name="start" classname="org.apache.catalina.ant.StartTask"/> - <taskdef name="stop" classname="org.apache.catalina.ant.StopTask"/> - <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/> + <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/> + <taskdef name="install" classname="org.apache.catalina.ant.InstallTask"/> + <taskdef name="list" classname="org.apache.catalina.ant.ListTask"/> + <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"/> + <taskdef name="remove" classname="org.apache.catalina.ant.RemoveTask"/> + <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/> + <taskdef name="start" classname="org.apache.catalina.ant.StartTask"/> + <taskdef name="stop" classname="org.apache.catalina.ant.StopTask"/> + <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/> <-- Executable Targets --> <target name="compile" description="Compile web application">
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>