That solved the problem. I thought that I had ran into a problem where tomcat 
couldn't find the classorg.apache.naming.factory.DataSourceLinkFactory before
but it must have been something else.
________________________________
De: Mark Thomas <ma...@apache.org>
Enviado: quinta-feira, 29 de agosto de 2024 13:48
Para: users@tomcat.apache.org <users@tomcat.apache.org>
Assunto: Re: Understanding ResorceLink property inheritance

On 29/08/2024 15:52, Marcelo de Sena Lacerda wrote:
> The resource definition in server.xml
>
> ...
>    <GlobalNamingResources>
> ...
>      <Resource name="jdbc/mydatabase"
>             global="jdbc/mydatabase"
>             auth="Container"
>             type="javax.sql.DataSource"
>             removeAbandoned="true"
>             removeAbandonedTimeout="120"
>             maxActive="5"
>             maxIdle="5"
>             initialSize="0"
>             minIdle="0"
>             maxWait="200"
>             timeBetweenEvictionRunsMillis="30000"
>             minEvictableIdleTimeMillis="60000"
>             maxAge="120000"
>             validatorClassName="..."
>             testOnBorrow="true"
>             validationInterval="0"
>             fairQueue="false"
>             factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>             alternateUsernameAllowed="true"
>             username="..." password="..."
>             driverClassName="..."
>             url="..."/>

OK. The global resource looks good.

> ...
>
>
>    *
> Wrong factory.
>    *
> driverClassName is not a valid attribute for a ResourceLink
>    *
> url is not a valid attribute for a ResourceLink
>
>  From reading the documentation that was also my initial thought, however if 
> I write my ResourceLink like this:
>
>
> <ResourceLink
>              name="jdbc/mydatabase"
>              global="jdbc/mydatabase"
>              type="javax.sql.DataSource"
>              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>              username="..."
>              password="..."
>
> />

The factory should be org.apache.naming.factory.DataSourceLinkFactory in
the ResoucreLink. Otherwise the above looks OK to me.

(Note: I'm basing this off reading the documentation - I haven't tested
that it actually works).

Mark


>
> I get the following error:
>
> javax.naming.NamingException: Unexpected exception resolving reference [Root 
> exception is java.sql.SQLException: The url cannot be null
>
> When my code tries to obtain the DataSource from the context:
>
> DataSource ds = (DataSource)envContext.lookup("jdbc/mydatabase");
> ________________________________
> De: Mark Thomas <ma...@apache.org>
> Enviado: quinta-feira, 29 de agosto de 2024 10:30
> Para: users@tomcat.apache.org <users@tomcat.apache.org>
> Assunto: Re: Understanding ResorceLink property inheritance
>
> On 29/08/2024 14:19, Marcelo de Sena Lacerda wrote:
>> Understanding ResorceLink property inheritance
>>
>> My scenario is this, I have several applications running on a tomcat, all of 
>> them access the same database I want them to be inside the same pool so the 
>> number of connections oppened can be sensibly managed using the same 
>> parameters. All of that works as of now.
>>
>> Additionally I also want them to connect to the database using different 
>> users so that's easier to identify which application is running which 
>> processes in the database.
>>
>> My understanding is that I could do that with setting a Resource in my 
>> server.xml with all the pool configuration parameters set and a ResourceLink 
>> in the context.xml of the application with only the username and password 
>> set.
>
> Yes, but only under specific circumstances.
>
> https://tomcat.apache.org/tomcat-11.0-doc/config/context.html#Resource_Links
>
>> That more or less works. Indeed if setup the scenario described in the above 
>> paragraph I can set a different username and password for the Resource in 
>> the  ResourceLink, however it seems that tomcat "forgets" every other 
>> parameter of the Resource driverClass,url, and, more importantly maxActive, 
>> maxIdle, initialSize all gets "forgotten" by tomcat.
>>
>> Why is that happening?
>
> We need to see the resource definition in server.xml as there may be
> changes required there as well.
>
>> I'm using tomcat 10.1.28 with java 22.0.2 from openjdk.
>>
>> This is the ResourceLink that inherits all parameters from server.xml:
>>
>> <ResourceLink
>>               name="jdbc/mydatabase"
>>               global="jdbc/mydatabase"
>>               type="javax.sql.DataSource"
>> />
>>
>> And this is one that forgets all parent parameters:
>>
>> <ResourceLink
>>               name="jdbc/mydatabase"
>>               global="jdbc/mydatabase"
>>               type="javax.sql.DataSource"
>>               driverClassName="..."
>>               url="..."
>>               username="..."
>>               password="..."
>>               factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>> />
>
> Wrong factory.
> driverClassName is not a valid attribute for a ResourceLink
> url is not a valid attribute for a ResourceLink
>
> Mark
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

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

Reply via email to