You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Arttu Tanner <ar...@invian.fi> on 2011/10/02 00:04:31 UTC

Re: Defining JDBC resource and AutoDeploy

Ok, figured it out.
I needed to use InitialContext.lookupLink() instead of
InitialContext.lookup() what I was using before.
Seems obvious now, but I didn't think there would be two similar methods.
I just thought I'll post my solution for further reference. It's
always annoying to find that somebody has the same problem as you, but
then nobody gives the solution...

-Artttu

2011/9/30 Tim Watts <ti...@cliftonfarm.org>:
> Try:
>      * conf/Catalina/localhost/mywebapp.xml  OR
>      * webapps/mywebapp/META-INF/context.xml  OR
>      * If you put it in GlobalNamingResources then you have to add a
>        <Resource-Link> to <Context>. See the Configuration
>        documentation.
>
> http://tomcat.apache.org/tomcat-5.5-doc/config/context.html has all the
> details.
>
>
> On Fri, 2011-09-30 at 06:17 +0300, Arttu Tanner wrote:
>> OS: Linux / CentOS / 2.6.18-028stab092.1
>> Tomcat: 5.5.23
>>
>> I have simple XML-RPC -WebApp, that uses MySQL database.
>> Currently I have defined the JDBC resource in server.xml inside the
>> <Host> -tags as follows:
>>
>> <Context docBase="mywebapp" path="/mywebapp" reloadable="true"
>> source="org.eclipse.jst.j2ee.server:mywebapp">
>>     <Resource name="jdbc/MyDB"
>>         auth="Container"
>>         type="javax.sql.DataSource"
>>         driverClassName="com.mysql.jdbc.Driver"
>>         factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
>>         url="jdbc:mysql://server.com:3306/db_name"
>>         username="db_username"
>>         password="db_password"
>>         maxActive="20"
>>         maxIdle="10"
>>         maxWait="5"
>>         validationQuery="SELECT 1"
>>         testOnBorrow="TRUE"
>>         testWhileIdle="TRUE"
>>         timeBetweenEvictionRunsMillis="10000"
>>         minEvictableIdleTimeMillis="60000"
>>     />
>> </Context>
>>
>> In the WebApp the connection is formed like this:
>>
>> DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/MyDB");
>> Connection conn=ds.getConnection();
>>
>> This works fine, but when resource is defined in server.xml, WebApp
>> AutoDeploy won't work and even the manager application can't undeploy
>> it. If I take the  <Context> -element out of the server.xml (and put
>> it elsewhere) AutoDeploy works, but database connections throw:
>> javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
>>
>> I've tried to put the context element in several different files, including:
>> -webapps/mywebapp/WEB-INF/context.xml
>> -context.xml in SERVERROOT/conf/
>> -server.xml, only the <Resource> -tag in <GlobalNamingResources> -element
>>
>> None of these work, and I end up with the same exception.
>>
>> There must be a way to get both the MySQL connection and
>> AutoDeployment at the same time.
>> Can somebody point me to right direction?
>>
>> -Arttu
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Defining JDBC resource and AutoDeploy

Posted by Christopher Schultz <ch...@christopherschultz.net>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Arttu,

On 10/1/2011 6:04 PM, Arttu Tanner wrote:
> Ok, figured it out. I needed to use InitialContext.lookupLink()
> instead of InitialContext.lookup() what I was using before.

That should not be necessary. Here is the code I have been using for
years using MySQL Connector/J and Tomcat 5.5, 6.0, and 7.0:

        // dataSourceName looks like java:/comp/env/jdbc/myDataSource
        Context context = new InitialContext();
        DataSource ds = (DataSource)context.lookup(dataSourceName);
        if(null == ds)
            throw new NamingException("Found no DataSource for '"
                                      + dataSourceName + "'");
        return ds.getConnection();

It's best to define everything in META-INF/context.xml. Then you don't
need anything anywhere else.

- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk6J6j4ACgkQ9CaO5/Lv0PBC+ACdHIk6h7Jj2oHN+i+rbsAOhJvd
goMAni7mcKwcdp66b90/SNGXqndw8N/y
=bNIC
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org