I see that you have your resource defined under the context for your jsp. I know you're suppose to be able to do this, but I haven't had much luck with it personally.
Try this just for kicks: 1. Move the TestDB resource to the <GlobalNamingResources> section of server.xml 2. If there is a "context".xml file under conf\Catalina\localhost, then modify it to include a pointer to your resource like so: <ResourceLink name="jdbc/TestDB" type="javax.sql.DataSource" global="jdbc/TestDB"/> if no context file exists, create one (if you're in root, there should be a root.xml file there already). 3. Leave the web.xml file as you have it already. As I said, you're not suppose to have to do this, but I had the same problem that you're having now before I made this change. Have you verified that the db connection works at all with the url that you're using? -marc --- Mark Whitby <[EMAIL PROTECTED]> wrote: > Yeah I know, I was using the wrong guide. I'm using > Tomcat 5.5.15. However I'm now using the right > guide and still have the same problem. I'm getting > the following error: > > javax.servlet.ServletException: Unable to get > connection, DataSource invalid: > "org.apache.tomcat.dbcp.dbcp.SQLNestedException: > Cannot create JDBC driver of class '' for connect > URL 'null'" > > > org.apache.jasper.JasperException: Exception in JSP: > /dbtest.jsp:4 > > 1: <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" > prefix="sql" %> > 2: <%@ taglib > uri="http://java.sun.com/jsp/jstl/core" prefix="c" > %> > 3: > 4: <sql:query var="rs" dataSource="jdbc/TestDB"> > 5: select id, foo, bar from testdata > 6: </sql:query> > 7: > > http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html > > The only thing I haven't done is the .war file thing > at the end, just created the .jsp file straight in > the ROOT directory to test it. > > Any thoughts why I get this error? > > Mark > > Attached below are my server.xml file and web.xml > file > > Web.xml > > <?xml version="1.0" encoding="ISO-8859-1"?> > > <!DOCTYPE web-app PUBLIC > "-//Sun Microsystems, Inc.//DTD Web Application > 2.2//EN" > "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> > > <web-app xmlns="http://java.sun.com/xml/ns/j2ee" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee > http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > version="2.4"> > > > > <!-- > Specifies the first page that users will come to in > the system > --> > <welcome-file-list> > <welcome-file>/index.jsp</welcome-file> > </welcome-file-list> > > <!-- > Specifies the error page that will occur for 404 > errors > --> > > <error-page> > <error-code>404</error-code> > <location>/error.jsp</location> > </error-page> > > <!-- > Database connection test > --> > > <resource-ref> > <description>DB Connection</description> > <res-ref-name>jdbc/TestDB</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-auth>Container</res-auth> > </resource-ref> > > > > > <!-- > Specifies the security area within the system > --> > > <security-constraint> > <web-resource-collection> > <web-resource-name>Secure > Area</web-resource-name> > <url-pattern>/secure/*</url-pattern> > <http-method>GET</http-method> > <http-method>POST</http-method> > </web-resource-collection> > <user-data-constraint> > > <transport-guarantee>CONFIDENTIAL</transport-guarantee> > </user-data-constraint> > </security-constraint> > > > </web-app> > > Server.xml > > <!-- 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.core.AprLifecycleListener" > /> > <Listener > className="org.apache.catalina.mbeans.ServerLifecycleListener" > /> > <Listener > className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" > /> > <Listener > className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/> > > <!-- 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" scheme="https" > secure="true" minSpareThreads="25" > connectionTimeout="60000" clientAuth="false" > keystorePass="?MtHw7!" connectionLinger="-1" > serverSoTimeout="0" > keystoreFile="D:\FYPCode\keystore" > maxSpareThreads="75" maxThreads="150" > tcpNoDelay="true" maxHttpHeaderSize="8192" > 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;.*\.htm;.*\.html;.*\.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"/> > --> > > <Context path="/DBTest" docBase="DBTest" > debug="5" reloadable="true" > crossContext="true"> > > <!-- maxActive: Maximum number of dB connections > in pool. Make sure you > configure your mysqld max_connections large > enough to handle > all of your db connections. Set to 0 for no > limit. > --> > > <!-- maxIdle: Maximum number of idle dB > connections to retain in pool. > Set to -1 for no limit. See also the DBCP > documentation on this > and the minEvictableIdleTimeMillis > configuration parameter. > --> > > <!-- maxWait: Maximum time to wait for a dB > connection to become available > in ms, in this example 10 seconds. An > Exception is thrown if > this timeout is exceeded. Set to -1 to > wait indefinitely. > --> > > <!-- username and password: MySQL dB username > and password for dB connections --> > > <!-- driverClassName: Class name for the old > mm.mysql JDBC driver is > org.gjt.mm.mysql.Driver - we recommend > using Connector/J though. > Class name for the official MySQL > Connector/J driver is com.mysql.jdbc.Driver. > --> > > <!-- url: The JDBC connection url for connecting > to your MySQL dB. > The autoReconnect=true argument to the url > makes sure that the > mm.mysql JDBC Driver will automatically > reconnect if mysqld closed the > connection. mysqld by default closes idle > connections after 8 hours. > --> > > <Resource name="jdbc/TestDB" auth="Container" > type="javax.sql.DataSource" > maxActive="100" maxIdle="30" > maxWait="10000" > username="javauser" password="pilks2" > driverClassName="com.mysql.jdbc.Driver" > > url="jdbc:mysql://localhost:3306/fyptest?autoReconnect=true"/> > > </Context> > > > > </Host> > > </Engine> > > </Service> > > </Server> > > ----- Original Message ----- > From: "Marc Richards" <[EMAIL PROTECTED]> > To: "Tomcat Users List" <[email protected]> > Sent: Monday, February 20, 2006 8:55 PM > Subject: Re: JNDI Datasource Problem > > > >I didn't see any mention of the Tomcat version > here, > > but in 5.5 the <ResourceParams> part of the config > is > > no longer used. All paramters go in the <Resource > > ...> tag with name="value" format just like name > and > > auth from your example below. i.e. maxIdle="30". > > > > -marc > > > > --- Mark Whitby <[EMAIL PROTECTED]> wrote: > > > >> Hey guys, > >> > >> Thanks for the help with the previous problem I > had, > >> I've managed to solve them now thanks to your > help. > >> But now I'm having a problem with setting up a > >> DataSource connection. I've followed the example > >> word for word and got the following error: > >> > >> javax.servlet.ServletException: Unable to get > >> connection, DataSource invalid: > >> "org.apache.tomcat.dbcp.dbcp.SQLNestedException: > >> Cannot create JDBC driver of class '' for connect > >> URL 'null'" > >> > >> I did a google search for this but only managed > to > >> find something on the NetBeans website which > wasn't > >> much help. I've edited the server.xml file as > >> stated, placed the relevent jar file > >> (mysql-connector-java-3.1.12-bin.jar) in the lib > >> folder in my web application and in the > /common/lib > >> folder in the Tomcat home folder and I've reset > the > >> server and I'm still getting the same problem. > >> > >> I'm using MySQL, database is called 'fyptest' and > >> the table is called 'testdata'. So where am I > going > >> wrong? > >> > >> Many thanks > >> > >> Mark Whitby > >> > >> Server.xml file: > >> > >> <Context path="/DBTest" docBase="DBTest" > >> debug="5" reloadable="true" > >> crossContext="true"> > >> > >> <Logger > >> className="org.apache.catalina.logger.FileLogger" > >> prefix="localhost_DBTest_log." > >> suffix=".txt" > >> timestamp="true"/> > >> > >> <Resource name="jdbc/TestDB" > >> auth="Container" > >> type="javax.sql.DataSource"/> > >> > >> <ResourceParams name="jdbc/TestDB"> > >> <parameter> > >> <name>factory</name> > >> > >> > > > <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> > >> </parameter> > >> > >> <!-- Maximum number of dB connections in > pool. > >> Make sure you > >> configure your mysqld max_connections > large > >> enough to handle > >> all of your db connections. Set to 0 for > no > >> limit. > >> --> > >> <parameter> > >> <name>maxActive</name> > >> <value>100</value> > >> </parameter> > >> > >> <!-- Maximum number of idle dB connections to > >> retain in pool. > >> Set to -1 for no limit. See also the > DBCP > >> documentation on this > >> and the minEvictableIdleTimeMillis > >> configuration parameter. > >> --> > >> <parameter> > >> <name>maxIdle</name> > >> <value>30</value> > >> </parameter> > >> > >> <!-- Maximum time to wait for a dB connection > to > >> become available > >> in ms, in this example 10 seconds. An > >> Exception is thrown if > >> this timeout is exceeded. Set to -1 to > >> wait indefinitely. > >> --> > >> <parameter> > >> <name>maxWait</name> > >> <value>10000</value> > >> </parameter> > >> > >> <!-- MySQL dB username and password for dB > >> connections --> > >> <parameter> > >> <name>username</name> > >> <value>javauser</value> > >> </parameter> > >> <parameter> > >> <name>password</name> > >> <value>pilks2</value> > >> </parameter> > >> > >> <!-- Class name for the old mm.mysql JDBC > driver > >> - uncomment this entry and comment next > >> if you want to use this driver - we > >> recommend using Connector/J though > >> <parameter> > >> <name>driverClassName</name> > >> <value>org.gjt.mm.mysql.Driver</value> > >> </parameter> > >> --> > >> > >> <!-- Class name for the official MySQL > >> Connector/J driver --> > >> <parameter> > >> <name>driverClassName</name> > >> <value>com.mysql.jdbc.Driver</value> > >> </parameter> > >> > >> <!-- The JDBC connection url for connecting > to > >> your MySQL dB. > >> The autoReconnect=true argument to the > url > >> makes sure that the > >> mm.mysql JDBC Driver will automatically > >> reconnect if mysqld closed the > >> connection. mysqld by default closes > idle > >> connections after 8 hours. > >> --> > >> <parameter> > >> <name>url</name> > >> > >> > > > <value>jdbc:mysql://localhost:3306/fyptest?autoReconnect=true</value> > >> </parameter> > >> </ResourceParams> > >> </Context> > >> > >> web.xml file: > >> > >> <resource-ref> > >> <description>DB Connection</description> > >> <res-ref-name>jdbc/TestDB</res-ref-name> > >> <res-type>javax.sql.DataSource</res-type> > >> <res-auth>Container</res-auth> > >> </resource-ref> > >> > > > > > > __________________________________________________ > > Do You Yahoo!? > > Tired of spam? Yahoo! Mail has the best spam > protection around > > http://mail.yahoo.com > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: > [EMAIL PROTECTED] > > For additional commands, e-mail: > [EMAIL PROTECTED] > > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
