Hi, > The context.xml file is stored in META-INF during development > but needs > to be placed in <<Tomcat Folder>>/conf/Catalina/localhost/ folder for > deployment with the file name of the context path.
I don't think that's quite true. META-INF is a permanent valid location for context.xml, and does not affect deployment if /conf/Catalina/localhost/ does not have a file for the web application. We always keep context.xml only in META-INF. However, if 2 are present this may cause issues as you say, Allistair. > -----Original Message----- > From: Brian Cook [mailto:[EMAIL PROTECTED] > Sent: 25 August 2005 14:39 > To: Tomcat Users List > Subject: Re: jndi question > > > Sean, > > One thing that stands out in your message is that the conext.xml file > was placed in the META-INF folder. Is it also in <<Tomcat > Folder>>/conf/Catalina/localhost/ as the module name? i.e. If the > context path name of your webapp is "/seansApp" the context.xml file > should appear in this folder as seansApp.xml. > > > The context.xml file is stored in META-INF during development > but needs > to be placed in <<Tomcat Folder>>/conf/Catalina/localhost/ folder for > deployment with the file name of the context path. > > > > > Sean Rowe wrote: > > I have tried again using the method described in the url > brian gave. > > Here is the stack exception I'm receiving: > > > > *type* Exception report > > > > *message* > > > > *description* _The server encountered an internal error () that > > prevented it from fulfilling this request._ > > > > *exception* > > > > javax.servlet.ServletException: Name java:comp is not bound > in this Context > > > org.apache.jasper.runtime.PageContextImpl.doHandlePageExceptio > n(PageContextImpl.java:848) > > > > > org.apache.jasper.runtime.PageContextImpl.handlePageException( > PageContextImpl.java:781) > > > > org.apache.jsp.test_jsp._jspService(org.apache.jsp.test_jsp:69) > > > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) > > javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > > org.apache.jasper.servlet.JspServletWrapper.service(JspServlet > Wrapper.java:322) > > > > > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet > .java:291) > > > > > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) > > javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > > > *root cause* > > > > javax.naming.NameNotFoundException: Name java:comp is not > bound in this > > Context > > org.apache.naming.NamingContext.lookup(NamingContext.java:769) > > org.apache.naming.NamingContext.lookup(NamingContext.java:152) > > javax.naming.InitialContext.lookup(InitialContext.java:351) > > com.transcriptionportal.utils.DBManager.init(DBManager.java:25) > > org.apache.jsp.test_jsp._jspService(org.apache.jsp.test_jsp:53) > > > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) > > javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > > org.apache.jasper.servlet.JspServletWrapper.service(JspServlet > Wrapper.java:322) > > > > > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet > .java:291) > > > > > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) > > javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > > > > > I have enclosed my server.xml, web.xml, context.xml (that i > placed in my > > web/META-INF folder), and the class I'm using to make the > connection. > > Thanks again to everyone who has helped me so far. > > > > sean > > > > Allistair Crossley wrote: > > > >> Hi, > >> > >> He isn't using that method of configuration, that's just 1 > option of > >> 3. He is nesting his Context definition within the server.xml Host > >> element. Although this is now scorned, it's still valid. > The 2 other > >> methods are contextname.xml as you say, and also > META-INF/context.xml > >> within the webapp itself. Allistair. > >> > >> > >> > >>> -----Original Message----- > >>> From: Brian Cook [mailto:[EMAIL PROTECTED] > >>> Sent: 23 August 2005 17:23 > >>> To: Tomcat Users List > >>> Subject: Re: jndi question > >>> > >>> > >>> > >>> Ok but do you have the resource defined in context.xml? > If you go to > >>> <<Tomcat Dir>>/conf/Cataliana/localhost/ do you see a > file with the > >>> name of the module ending with .xml? If so is the > resource defined > >>> in that file? If not you need to add it. > >>> > >>> From the description it sounds like nothing in this set > up has been > >>> done as was show on the example page. > >>> > >>> http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-resources > >>> -howto.html > >>> > >>> If you use the code block that is shown, define that resource in > >>> web.xml and context.xml it will work. But multiple > postings latter > >>> it still sounds like the JNDI resource is not defined in > context.xml > >>> and the code calling the JNDI resource differs greatly from the > >>> example provided. > >>> > >>> > >>> Sean Rowe wrote: > >>> > >>> > >>>> The first post on this included the server.xml, and further > >>> > >>> down in the > >>> > >>>> page is the relevant part of web.xml ( i just double > >>> > >>> checked that ). as > >>> > >>>> for context.xml, i have listed it in my webapp.xml file, > as well as > >>>> server.xml as all other examples have suggested. i then > >>> > >>> tried it in the > >>> > >>>> admin module, where it then put it in server.xml for me. > >>> > >>> i'm willing to > >>> > >>>> try anything at this point, though, if you have any suggestions. > >>>> > >>>> as for my post not being jndi specific, i applogize if > >>> > >>> that's the case. > >>> > >>>> i'm not really familiar with jndi....but when I did a search for > >>>> 'connection pooling', jndi seemed to be what everyone > >>> > >>> suggested i use. > >>> > >>>> what i want to do, if it's not clear, is to create a > >>> > >>> connection pool to > >>> > >>>> my MySql database. > >>>> thanks, > >>>> sean > >>>> > >>>> Brian Cook wrote: > >>>> > >>>> > >>>> > >>>>> Actually the files I listed are NOT in the first post. > It > >>> > >>> shows the > >>> > >>>>> server.xml and the code calling it but does not show web.xml or > >>>>> context.xml. > >>>>> > >>>>> The error you are getting just means that that the JNDI > >>> > >>> resource being > >>> > >>>>> called in the code is not defined in both web.xml and > context.xml. > >>>>> > >>>>> In looking at the code snip it in the first post I am not > >>> > >>> following > >>> > >>>>> what you are trying to do. The post is for a JNDI > >>> > >>> question but in the > >>> > >>>>> code it looks like you are calling the DB URL directly. > The whole > >>>>> point of JDNI being to get specific URL, and configuration info > >>>>> outside of the code base. I am not following what it > is you are > >>>>> trying to do here. > >>>>> > >>>>> > >>>>> > >>>>> Sean Rowe wrote: > >>>>> > >>>>> > >>>>> > >>>>>> Brian, thank you for replying. I was afraid my topic > was > >>> > >>> dead. If > >>> > >>>>>> you could look at my first post, I listed all the > files > >>> > >>> that you have > >>> > >>>>>> suggested I take a look at. I have done everything you have > >>>>>> suggested, but am still getting errors. The error I > am > >>> > >>> getting now is > >>> > >>> > >>>>>> javax.naming.NameNotFoundException: Name java:comp is > not > >>> > >>> bound in > >>> > >>>>>> this Context > >>>>>> > >>>>>> I can't find anything on the net or in any books I've > >>> > >>> looked at that > >>> > >>>>>> explains this. As far as I can tell, java:comp should just be > >>>>>> there. Any ideas? Thanks again. > >>>>>> > >>>>>> Sean > >>>>>> > >>>>>> Brian Cook wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>>> Yes you can use JNDI with out using JSTL. But the > only way to > >>>>>>> configure it is to define the JNDI resources in the > web.xml and > >>>>>>> context.xml files. Technically you should be able > to use the > >>>>>>> globally defined JNDI resources in server.xml, and I > have seen > >>>>>>> configuration set ups doing it when googling. But > could > >>> > >>> never get > >>> > >>>>>>> them to work. > >>>>>>> > >>>>>>> This highlights another area of seemingly unneeded > >>> > >>> complication in > >>> > >>>>>>> Java/Unix development. Using JNDI for data sources which was > >>>>>>> supposed to help you save time requires that you > >>> > >>> redundantly define > >>> > >>>>>>> the JNDI resource in at lest 2 if not 3 places. > >>>>>>> > >>>>>>> The admin tool which was also supposed to help save > time > >>> > >>> defines the > >>> > >>>>>>> JNDI resources in server.xml which does not really > seem > >>> > >>> to be all > >>> > >>>>>>> that helpful. I am sure there is likely a reason for > > >>> > >>> this but I am > >>> > >>>>>>> ignorant of it. The admin tool is also supposed to > let > >>> > >>> you define > >>> > >>>>>>> JNDI resources per context but it errors out when > ever > >>> > >>> I have tried > >>> > >>>>>>> it. > >>>>>>> > >>>>>>> My experience with the Tomcat Admin and Manager tools > is > >>> > >>> that they > >>> > >>>>>>> are worthless. Of the few steps they try to help > with > >>> > >>> more often > >>> > >>>>>>> that not they just return errors when you need to use > > >>> > >>> it. I removed > >>> > >>>>>>> them both and have gone back to doing set ups > manually > >>> > >>> and there has > >>> > >>>>>>> not been much of a time difference doing it this way. > >>>>>>> > >>>>>>> Any way for JNDI to work you will have to add the > >>> > >>> definition for it > >>> > >>>>>>> in both web.xml and context.xml in the <<Tomcat > >>>>>>> Folder>>/conf/Catalina/localhost/ folder. This seems counter > >>>>>>> productive since it makes your app less portable > having the data > >>>>>>> base configuration details inside the context and by > > >>> > >>> extent the WAR > >>> > >>>>>>> file but it is what you have to do to get it to work > right now. > >>>>>>> > >>>>>>> I feel your pain I know it is frustrating spending > hours > >>> > >>> debugging > >>> > >>>>>>> just the DB connection but todate that is the reality > of > >>> > >>> Java web > >>> > >>>>>>> app development. It is why I fear we will all be > .Net > >>> > >>> developers > >>> > >>>>>>> some day. > >>>>>>> > >>>>>>> > >>>>>>> Example : > >>>>>>> > >>>>>>> > >>> > >>> http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-resources > >>> -howto.html > >>> > >>>>>>> <CODE> > >>>>>>> > >>>>>>> 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(); > >>>>>>> > >>>>>>> </CODE> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> <WEB.XML> > >>>>>>> > >>>>>>> <resource-ref> > >>>>>>> <description> > >>>>>>> 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 server.xml file. > >>>>>>> </description> > >>>>>>> <res-ref-name> > >>>>>>> jdbc/EmployeeDB > >>>>>>> </res-ref-name> > >>>>>>> <res-type> > >>>>>>> javax.sql.DataSource > >>>>>>> </res-type> > >>>>>>> <res-auth> > >>>>>>> Container > >>>>>>> </res-auth> > >>>>>>> </resource-ref> > >>>>>>> > >>>>>>> </WEB.XML> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> <CONTEXT FILE> > >>>>>>> > >>>>>>> <Context> > >>>>>>> > >>>>>>> <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"/> > >>>>>>> > >>>>>>> </Context> > >>>>>>> > >>>>>>> </CONTEXT FILE> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> Sean Rowe wrote: > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>> Dirk, I'm sorry I didn't see the difference on the page > >>>>>>>> > >>> > >>> you sent me > >>> > >>>>>>>> to. However, if there is a way I can do this > without > >>> > >>> having to use > >>> > >>>>>>>> jstl, I would really like to know. I was hoping to put > >>>>>>>> > >>> > >>> the code in > >>> > >>>>>>>> a class somewhere that my servlets could use. > >>>>>>>> > >>>>>>>> thanks, > >>>>>>>> sean > >>>>>>>> > >>>>>>>> Dirk Weigenand wrote: > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>>> Sean, > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>> --- Ursprüngliche Nachricht --- > >>>>>>>>>> Von: Sean Rowe <[EMAIL PROTECTED]> > >>>>>>>>>> An: Tomcat Users List <tomcat-user@jakarta.apache.org> > >>>>>>>>>> Betreff: Re: jndi question > >>>>>>>>>> Datum: Mon, 22 Aug 2005 09:24:10 -0500 > >>>>>>>>>> > >>>>>>>>>> Thanks for responding Dirk. I've practically > memorized the > >>>>>>>>>> documentation on the link you sent: > >>>>>>>>>> > >>>>>>>>>> // 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(); > >>>>>>>>>> > >>>>>>>>>> Whenever I try this, here's what I get (which led me > >>>>>>>>>> > >>> > >>> to trying it > >>> > >>>>>>>>>> the way > >>>>>>>>>> I posted): > >>>>>>>>>> > >>>>>>>>>> javax.naming.NameNotFoundException: Name java:comp is > >>>>>>>>>> > >>> > >>> not bound > >>> > >>>>>>>>>> in this > >>>>>>>>>> Context > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> No. Did you look at > >>>>>>>>> > >>>>>>>>> > >>> > >>> http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-datasourc > >>> e-examples-howto.html? > >>> > >>>>>>>>> I recommend putting the context definition in its own > >>>>>>>>> > >>> > >>> content.xml. On > >>> > >>> > >>>>>>>>> redeploying my application tomcat wouldn't find the > > >>> > >>> driver class > >>> > >>>>>>>>> anymore. > >>>>>>>>> > >>>>>>>>> Mind you not the class itself but the definition of > > >>> > >>> what class to > >>> > >>>>>>>>> load. > >>>>>>>>> > >>>>>>>>> This problem was solved by putting the context into > > >>> > >>> context.xml. > >>> > >>> > >>>>>>>>> regards > >>>>>>>>> Dirk > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> > >>>>>>>> To unsubscribe, e-mail: > >>> > >>> [EMAIL PROTECTED] > >>> > >>> > >>>>>>>> For additional commands, e-mail: > >>> > >>> [EMAIL PROTECTED] > >>> > >>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>> > >>> -------------------------------------------------------------- > >>> ---------- > >>> > >>>>>>> > >>>>>>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> > >>>>>>> To unsubscribe, e-mail: > >>> > >>> [EMAIL PROTECTED] > >>> > >>> > >>>>>>> For additional commands, e-mail: > >>> > >>> [EMAIL PROTECTED] > >>> > >>> > >>>>>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> > >>>>>> To unsubscribe, e-mail: > [EMAIL PROTECTED] > >>>>>> For additional commands, e-mail: > >>> > >>> [EMAIL PROTECTED] > >>> > >>> > >>>>>> > >>>>> > >>>>> > >>>>> > >>> > >>> -------------------------------------------------------------- > >>> ---------- > >>> > >>> > >>>>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> > >>>>> To unsubscribe, e-mail: > [EMAIL PROTECTED] > >>>>> For additional commands, e-mail: > >>> > >>> [EMAIL PROTECTED] > >>> > >>> > >>>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> > >>>> To unsubscribe, e-mail: > [EMAIL PROTECTED] > >>>> For additional commands, e-mail: > [EMAIL PROTECTED] > >>>> > >>>> > >>>> > >>> > >>> -- > >>> Brian Cook > >>> Digital Services Analyst > >>> Print Time Inc. > >>> [EMAIL PROTECTED] > >>> 913.345.8900 > >>> > >>> > >>> > >> > >> > >> > >> <FONT SIZE=1 FACE="VERDANA,ARIAL" COLOR=BLUE> > >> ------------------------------------------------------- > >> QAS Ltd. > >> Registered in England: No 2582055 > >> Registered in Australia: No 082 851 474 > >> ------------------------------------------------------- > >> </FONT> > >> > >> > >> > --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: > [EMAIL PROTECTED] > >> > >> > >> > >> > > > > > -------------------------------------------------------------- > ---------- > > > > <?xml version="1.0" encoding="ISO-8859-1"?> > > <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD > Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> > > <web-app> > > <display-name>dbname</display-name> > > > > <resource-ref> > > <description>DB Connection</description> > > <res-ref-name>jdbc/dbname</res-ref-name> > > <res-type>javax.sql.DataSource</res-type> > > <res-auth>Container</res-auth> > > </resource-ref> > > > > <context-param> > > <param-name>dbdriver</param-name> > > <param-value>com.mysql.jdbc.Driver</param-value> > > </context-param> > > <context-param> > > <param-name>dburl</param-name> > > <param-value>jdbc:mysql://localhost:3306/dbname</param-value> > > </context-param> > > <context-param> > > <param-name>dbuser</param-name> > > <param-value>transroot</param-value> > > </context-param> > > <context-param> > > <param-name>dbpw</param-name> > > <param-value>password</param-value> > > </context-param> > > > > <listener> > > > <listener-class>com.dbname.utils.ContextListener</listener-class> > > </listener> > > > > <!-- > > <filter> > > <filter-name>TransFilter</filter-name> > > > <filter-class>com.dbname.utils.TransFilterFilter</filter-class> > > </filter> > > <filter-mapping> > > <filter-name>TransFilter</filter-name> > > <url-pattern>/pages/*</url-pattern> > > </filter-mapping> > > <filter-mapping> > > <filter-name>TransFilterFilter</filter-name> > > <url-pattern>/WEB-INF/*</url-pattern> > > </filter-mapping> --> > > > > <servlet> > > <servlet-name>Login</servlet-name> > > > <servlet-class>com.dbname.servlets.LoginServlet</servlet-class> > > </servlet> > > <servlet-mapping> > > <servlet-name>Login</servlet-name> > > <url-pattern>/Login</url-pattern> > > </servlet-mapping> > > > > <servlet> > > <servlet-name>Signup</servlet-name> > > > <servlet-class>com.dbname.servlets.SignupServlet</servlet-class> > > </servlet> > > <servlet-mapping> > > <servlet-name>Signup</servlet-name> > > <url-pattern>/Signup</url-pattern> > > </servlet-mapping> > > > > <servlet> > > <servlet-name>RecoverPassword</servlet-name> > > > <servlet-class>com.dbname.servlets.RecoverPasswordServlet</ser > vlet-class> > > </servlet> > > <servlet-mapping> > > <servlet-name>RecoverPassword</servlet-name> > > <url-pattern>/RecoverPassword</url-pattern> > > </servlet-mapping> > > > > <servlet> > > <servlet-name>UserDetails</servlet-name> > > > <servlet-class>com.dbname.servlets.UserDetailsServlet</servlet-class> > > </servlet> > > <servlet-mapping> > > <servlet-name>UserDetails</servlet-name> > > <url-pattern>/UserDetails</url-pattern> > > </servlet-mapping> > > > > <welcome-file-list> > > <welcome-file>index.jsp</welcome-file> > > </welcome-file-list> > > > > </web-app> > > > > > > > -------------------------------------------------------------- > ---------- > > > > <?xml version="1.0" encoding="UTF-8"?> > > <Context> > > > > <Resource name="jdbc/dbname" > > auth="Container" > > type="javax.sql.DataSource" > > username="transroot" > > password="password" > > driverClassName="org.hsql.jdbcDriver" > > url="jdbc:mysql://localhost:3306/dbname" > > maxActive="50" > > maxIdle="30"/> > > </Context> > > > > > > > -------------------------------------------------------------- > ---------- > > > > package com.dbname.utils; > > > > import javax.naming.*; > > import javax.sql.*; > > import java.sql.*; > > import java.util.*; > > import org.apache.commons.dbcp.BasicDataSourceFactory; > > import org.apache.commons.collections.*; > > import org.apache.commons.pool.*; > > > > public class DBManager { > > > > String username = ""; > > > > public void init() throws SQLException, NamingException, > Exception{ > > String query = "SELECT * FROM UserDetails"; > > username = "getting the query<br"; > > > > username += "setting initCtx<br>"; > > //Properties p=new Properties(); > > > //p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.commons.db > cp.BasicDataSourceFactory"); > > > //p.put(Context.PROVIDER_URL,"jdbc:mysql://localhost:3306"); > > Context initCtx = new InitialContext(); > > username += "setting envCtx<br>"; > > Context envCtx = (Context) initCtx.lookup("java:comp/env"); > > > > //if(envCtx == null ) { > > //throw new Exception("Boom - No Environment Context"); > > // } > > > > // the following matches the resource name defined > in foo.xml > > username += "setting ds<br>"; > > //DataSource ds = (DataSource) > envCtx.lookup("jdbc/dbname"); > > DataSource ds = (DataSource) envCtx.lookup("jdbc/dbname"); > > > > if (ds != null) { > > username += "setting conn<br>"; > > Connection conn = ds.getConnection(); > > > > if(conn != null) { > > username += "setting stmt<br>"; > > Statement stmt = conn.createStatement (); > > username += "setting rs<br>"; > > ResultSet rs = stmt.executeQuery (query); > > if (!rs.next()) { > > username = "rs.next was false"; > > } else { > > username = rs.getString("username"); > > } > > rs.close(); > > stmt.close(); > > conn.close(); > > } else { > > throw new Exception("No Connection"); > > } > > } else { > > throw new Exception("No Datasource"); > > } > > } > > > > public String getUsername() { > > return username; > > } > > } > > > > > > > -------------------------------------------------------------- > ---------- > > > > <!-- Example Server Configuration File --> > > <!-- Note that component elements are nested corresponding to their > > parent-child relationships with each other --> > > > > <!-- A "Server" is a singleton element that represents the > entire JVM, > > which may contain one or more "Service" instances. The Server > > listens for a shutdown command on the indicated port. > > > > Note: A "Server" is not itself a "Container", so you may not > > define subcomponents such as "Valves" or "Loggers" at > this level. > > --> > > > > <Server port="8005" shutdown="SHUTDOWN"> > > > > <!-- Comment these entries out to disable JMX MBeans > support used for the > > administration web application --> > > <Listener > className="org.apache.catalina.mbeans.ServerLifecycleListener" /> > > <Listener > className="org.apache.catalina.mbeans.GlobalResourcesLifecycle > Listener" /> > > <Listener > className="org.apache.catalina.storeconfig.StoreConfigLifecycl > eListener"/> > > > > <!-- Global JNDI resources --> > > <GlobalNamingResources> > > > > <!-- Test entry for demonstration purposes --> > > <Environment name="simpleValue" > type="java.lang.Integer" value="30"/> > > > > <!-- Editable user database that can also be used by > > UserDatabaseRealm to authenticate users --> > > <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" /> > > > > </GlobalNamingResources> > > > > <!-- A "Service" is a collection of one or more > "Connectors" that share > > a single "Container" (and therefore the web > applications visible > > within that Container). Normally, that Container is > an "Engine", > > but this is not required. > > > > Note: A "Service" is not itself a "Container", so > you may not > > define subcomponents such as "Valves" or "Loggers" > at this level. > > --> > > > > <!-- Define the Tomcat Stand-Alone Service --> > > <Service name="Catalina"> > > > > <!-- A "Connector" represents an endpoint by which > requests are received > > and responses are returned. Each Connector passes > requests on to the > > associated "Container" (normally an Engine) for processing. > > > > By default, a non-SSL HTTP/1.1 Connector is > established on port 8080. > > You can also enable an SSL HTTP/1.1 Connector on > port 8443 by > > following the instructions below and uncommenting > the second Connector > > entry. SSL support requires the following steps > (see the SSL Config > > HOWTO in the Tomcat 5 documentation bundle for > more detailed > > instructions): > > * If your JDK version 1.3 or prior, download and > install JSSE 1.0.2 or > > later, and put the JAR files into > "$JAVA_HOME/jre/lib/ext". > > * Execute: > > %JAVA_HOME%\bin\keytool -genkey -alias tomcat > -keyalg RSA (Windows) > > $JAVA_HOME/bin/keytool -genkey -alias tomcat > -keyalg RSA (Unix) > > with a password value of "changeit" for both the > certificate and > > the keystore itself. > > > > By default, DNS lookups are enabled when a web > application calls > > request.getRemoteHost(). This can have an adverse > impact on > > performance, so you can disable it by setting the > > "enableLookups" attribute to "false". When DNS > lookups are disabled, > > request.getRemoteHost() will return the String > version of the > > IP address of the remote client. > > --> > > > > <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> > > <Connector port="8080" maxHttpHeaderSize="8192" > > maxThreads="150" minSpareThreads="25" > maxSpareThreads="75" > > enableLookups="false" redirectPort="8443" > acceptCount="100" > > connectionTimeout="20000" > disableUploadTimeout="true" /> > > <!-- Note : To disable connection timeouts, set > connectionTimeout value > > to 0 --> > > > > <!-- Note : To use gzip compression you could set the > following properties : > > > > compression="on" > > compressionMinSize="2048" > > noCompressionUserAgents="gozilla, traviata" > > compressableMimeType="text/html,text/xml" > > --> > > > > <!-- Define a SSL HTTP/1.1 Connector on port 8443 --> > > <Connector port="8443" maxHttpHeaderSize="8192" > > maxThreads="150" minSpareThreads="25" > maxSpareThreads="75" > > enableLookups="false" disableUploadTimeout="true" > > acceptCount="100" scheme="https" secure="true" > > clientAuth="false" sslProtocol="TLS" /> > > > > <!-- Define an AJP 1.3 Connector on port 8009 --> > > <Connector port="8009" > > enableLookups="false" redirectPort="8443" > protocol="AJP/1.3" /> > > > > <!-- Define a Proxied HTTP/1.1 Connector on port 8082 --> > > <!-- See proxy documentation for more information about > using this. --> > > <!-- > > <Connector port="8082" > > maxThreads="150" minSpareThreads="25" > maxSpareThreads="75" > > enableLookups="false" acceptCount="100" > connectionTimeout="20000" > > proxyPort="80" disableUploadTimeout="true" /> > > --> > > > > <!-- An Engine represents the entry point (within > Catalina) that processes > > every request. The Engine implementation for > Tomcat stand alone > > analyzes the HTTP headers included with the > request, and passes them > > on to the appropriate Host (virtual host). --> > > > > <!-- You should set jvmRoute to support load-balancing > via AJP ie : > > <Engine name="Standalone" defaultHost="localhost" > jvmRoute="jvm1"> > > --> > > > > <!-- Define the top level container in our container > hierarchy --> > > <Engine name="Catalina" defaultHost="localhost"> > > > > <!-- The request dumper valve dumps useful debugging > information about > > the request headers and cookies that were > received, and the response > > headers and cookies that were sent, for all > requests received by > > this instance of Tomcat. If you care only about > requests to a > > particular virtual host, or a particular > application, nest this > > element inside the corresponding <Host> or > <Context> entry instead. > > > > For a similar mechanism that is portable to all > Servlet 2.4 > > containers, check out the "RequestDumperFilter" > Filter in the > > example application (the source for this filter > may be found in > > > "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters"). > > > > Request dumping is disabled by default. > Uncomment the following > > element to enable it. --> > > <!-- > > <Valve > className="org.apache.catalina.valves.RequestDumperValve"/> > > --> > > > > <!-- Because this Realm is here, an instance will be > shared globally --> > > > > <!-- This Realm uses the UserDatabase configured in > the global JNDI > > resources under the key "UserDatabase". Any edits > > that are performed against this UserDatabase are > immediately > > available for use by the Realm. --> > > <Realm className="org.apache.catalina.realm.UserDatabaseRealm" > > resourceName="UserDatabase"/> > > > > <!-- Comment out the old realm but leave here for now > in case we > > need to go back quickly --> > > <!-- > > <Realm className="org.apache.catalina.realm.MemoryRealm" /> > > --> > > > > <!-- Replace the above Realm with one of the > following to get a Realm > > stored in a database and accessed via JDBC --> > > > > <!-- > > <Realm className="org.apache.catalina.realm.JDBCRealm" > > driverName="org.gjt.mm.mysql.Driver" > > connectionURL="jdbc:mysql://localhost/authority" > > connectionName="test" connectionPassword="test" > > userTable="users" userNameCol="user_name" > userCredCol="user_pass" > > userRoleTable="user_roles" roleNameCol="role_name" /> > > --> > > > > <!-- > > <Realm className="org.apache.catalina.realm.JDBCRealm" > > driverName="oracle.jdbc.driver.OracleDriver" > > connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL" > > connectionName="scott" connectionPassword="tiger" > > userTable="users" userNameCol="user_name" > userCredCol="user_pass" > > userRoleTable="user_roles" roleNameCol="role_name" /> > > --> > > > > <!-- > > <Realm className="org.apache.catalina.realm.JDBCRealm" > > driverName="sun.jdbc.odbc.JdbcOdbcDriver" > > connectionURL="jdbc:odbc:CATALINA" > > userTable="users" userNameCol="user_name" > userCredCol="user_pass" > > userRoleTable="user_roles" roleNameCol="role_name" /> > > --> > > > > <!-- Define the default virtual host > > Note: XML Schema validation will not work with > Xerces 2.2. > > --> > > <Host name="localhost" > > appBase="webapps" > > unpackWARs="true" > > autoDeploy="true" > > xmlValidation="false" > > xmlNamespaceAware="false"> > > > > <!-- Defines a cluster for this node, > > By defining this element, means that every > manager will be changed. > > So when running a cluster, only make sure that > you have webapps in there > > that need to be clustered and remove the other ones. > > A cluster has the following parameters: > > > > className = the fully qualified name of the > cluster class > > > > name = a descriptive name for your cluster, > can be anything > > > > mcastAddr = the multicast address, has to be > the same for all the nodes > > > > mcastPort = the multicast port, has to be the > same for all the nodes > > > > mcastBindAddr = bind the multicast socket to a > specific address > > > > mcastTTL = the multicast TTL if you want to > limit your broadcast > > > > mcastSoTimeout = the multicast readtimeout > > > > mcastFrequency = the number of milliseconds in > between sending a "I'm alive" heartbeat > > > > mcastDropTime = the number a milliseconds > before a node is considered "dead" if no heartbeat is received > > > > tcpThreadCount = the number of threads to > handle incoming replication requests, optimal would be the > same amount of threads as nodes > > > > tcpListenAddress = the listen address (bind > address) for TCP cluster request on this host, > > in case of multiple ethernet cards. > > auto means that address becomes > > > InetAddress.getLocalHost().getHostAddress() > > > > tcpListenPort = the tcp listen port > > > > tcpSelectorTimeout = the timeout (ms) for the > Selector.select() method in case the OS > > has a wakup bug in > java.nio. Set to 0 for no timeout > > > > printToScreen = true means that managers will > also print to std.out > > > > expireSessionsOnShutdown = true means that > > > > useDirtyFlag = true means that we only > replicate a session after setAttribute,removeAttribute has > been called. > > false means to replicate the > session after each request. > > false means that replication > would work for the following piece of code: (only for > SimpleTcpReplicationManager) > > <% > > HashMap map = > (HashMap)session.getAttribute("map"); > > map.put("key","value"); > > %> > > replicationMode = can be either 'pooled', > 'synchronous' or 'asynchronous'. > > * Pooled means that the > replication happens using several sockets in a synchronous > way. Ie, the data gets replicated, then the request return. > This is the same as the 'synchronous' setting except it uses > a pool of sockets, hence it is multithreaded. This is the > fastest and safest configuration. To use this, also increase > the nr of tcp threads that you have dealing with replication. > > * Synchronous means that the > thread that executes the request, is also the > > thread the replicates the > data to the other nodes, and will not return until all > > nodes have received the information. > > * Asynchronous means that > there is a specific 'sender' thread for each cluster node, > > so the request thread will > queue the replication request into a "smart" queue, > > and then return to the client. > > The "smart" queue is a queue > where when a session is added to the queue, and the same session > > already exists in the queue > from a previous request, that session will be replaced > > in the queue instead of > replicating two requests. This almost never happens, unless > there is a > > large network delay. > > --> > > <!-- > > When configuring for clustering, you also add > in a valve to catch all the requests > > coming in, at the end of the request, the > session may or may not be replicated. > > A session is replicated if and only if all the > conditions are met: > > 1. useDirtyFlag is true or setAttribute or > removeAttribute has been called AND > > 2. a session exists (has been created) > > 3. the request is not trapped by the "filter" attribute > > > > The filter attribute is to filter out requests > that could not modify the session, > > hence we don't replicate the session after the > end of this request. > > The filter is negative, ie, anything you put in > the filter, you mean to filter out, > > ie, no replication will be done on requests > that match one of the filters. > > The filter attribute is delimited by ;, so you > can't escape out ; even if you wanted to. > > > > filter=".*\.gif;.*\.js;" means that we will not > replicate the session after requests with the URI > > ending with .gif and .js are intercepted. > > > > The deployer element can be used to deploy apps > cluster wide. > > Currently the deployment only deploys/undeploys > to working members in the cluster > > so no WARs are copied upons startup of a broken node. > > The deployer watches a directory (watchDir) for > WAR files when watchEnabled="true" > > When a new war file is added the war gets > deployed to the local instance, > > and then deployed to the other instances in the cluster. > > When a war file is deleted from the watchDir > the war is undeployed locally > > and cluster wide > > --> > > > > <!-- > > <Cluster > className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" > > > managerClassName="org.apache.catalina.cluster.session.DeltaManager" > > expireSessionsOnShutdown="false" > > useDirtyFlag="true" > > notifyListenersOnReplication="true"> > > > > <Membership > > > className="org.apache.catalina.cluster.mcast.McastService" > > mcastAddr="228.0.0.4" > > mcastPort="45564" > > mcastFrequency="500" > > mcastDropTime="3000"/> > > > > <Receiver > > > className="org.apache.catalina.cluster.tcp.ReplicationListener" > > tcpListenAddress="auto" > > tcpListenPort="4001" > > tcpSelectorTimeout="100" > > tcpThreadCount="6"/> > > > > <Sender > > > className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" > > replicationMode="pooled" > > ackTimeout="15000"/> > > > > <Valve > className="org.apache.catalina.cluster.tcp.ReplicationValve" > > > filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.cs > s;.*\.txt;"/> > > > > <Deployer > className="org.apache.catalina.cluster.deploy.FarmWarDeployer" > > tempDir="/tmp/war-temp/" > > deployDir="/tmp/war-deploy/" > > watchDir="/tmp/war-listen/" > > watchEnabled="false"/> > > </Cluster> > > --> > > > > > > > > <!-- Normally, users must authenticate themselves > to each web app > > individually. Uncomment the following entry > if you would like > > a user to be authenticated the first time they > encounter a > > resource protected by a security constraint, > and then have that > > user identity maintained across *all* web > applications contained > > in this virtual host. --> > > <!-- > > <Valve > className="org.apache.catalina.authenticator.SingleSignOn" /> > > --> > > > > <!-- Access log processes all requests for this > virtual host. By > > default, log files are created in the "logs" > directory relative to > > $CATALINA_HOME. If you wish, you can specify > a different > > directory with the "directory" attribute. > Specify either a relative > > (to $CATALINA_HOME) or absolute path to the > desired directory. > > --> > > <!-- > > <Valve className="org.apache.catalina.valves.AccessLogValve" > > directory="logs" > prefix="localhost_access_log." suffix=".txt" > > pattern="common" resolveHosts="false"/> > > --> > > > > <!-- Access log processes all requests for this > virtual host. By > > default, log files are created in the "logs" > directory relative to > > $CATALINA_HOME. If you wish, you can specify > a different > > directory with the "directory" attribute. > Specify either a relative > > (to $CATALINA_HOME) or absolute path to the > desired directory. > > This access log implementation is optimized > for maximum performance, > > but is hardcoded to support only the "common" > and "combined" patterns. > > --> > > <!-- > > <Valve > className="org.apache.catalina.valves.FastCommonAccessLogValve" > > directory="logs" > prefix="localhost_access_log." suffix=".txt" > > pattern="common" resolveHosts="false"/> > > --> > > <!-- Access log processes all requests for this > virtual host. By > > default, log files are created in the "logs" > directory relative to > > $CATALINA_HOME. If you wish, you can specify > a different > > directory with the "directory" attribute. > Specify either a relative > > (to $CATALINA_HOME) or absolute path to the > desired directory. > > This access log implementation is optimized > for maximum performance, > > but is hardcoded to support only the "common" > and "combined" patterns. > > > > This valve use NIO direct Byte Buffer to > asynchornously store the > > log. > > --> > > <!-- > > <Valve > className="org.apache.catalina.valves.ByteBufferAccessLogValve" > > directory="logs" > prefix="localhost_access_log." suffix=".txt" > > pattern="common" resolveHosts="false"/> > > --> > > > > </Host> > > </Engine> > > </Service> > > </Server> > > > > > > > -------------------------------------------------------------- > ---------- > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- > Brian Cook > Digital Services Analyst > Print Time Inc. > [EMAIL PROTECTED] > 913.345.8900 > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]