Re: Shared data source (Bug 49543)
Hi, Now it's working! Follows the script: 1) Tomcat 6.0.35: copy tomcat-jdbc.jar to CATALINA_HOME/lib. Tomcat 7.0.x is ready. 2) Create a global resource in CATALINA_HOME/conf/server.xml. Attributes in bold *MUST *be present: Resource name=jdbc/pgserver auth=Container type=javax.sql.DataSource removeAbandoned=true removeAbandonedTimeout=300 maxActive=200 maxIdle=10 maxWait=1 validationQuery=select 1 validationInterval=1 testOnBorrow=true * factory=org.apache.tomcat.jdbc.pool.DataSourceFactory* driverClassName=org.postgresql.Driver url=jdbc:postgresql://localhost:5432/tjse username=globaluser password=globalpassword * alternateUsernameAllowed=true* jdbcInterceptors=org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer / 3) Create a context.xml for apps; The attribute name need not possess the same value of the attribute global. -- CATALINA_HOME/conf/Catalina/localhost/app1.xml (shared connection with different credential) Context ResourceLink name=jdbc/pgserver global=jdbc/pgserver type=javax.sql.DataSource *factory=org.apache.naming.factory.DataSourceLinkFactory* *username=userapp1 password=passwordapp1* / /Context -- CATALINA_HOME/conf/Catalina/localhost/app2.xml (shared connection with default credential) Context ResourceLink name=jdbc/pgserver global=jdbc/pgserver type=javax.sql.DataSource / /Context 4) JSP to test this feature (in both CATALINA_HOME/webapps/app1 and CATALINA_HOME/webapps/app2): ?xml version=1.0 encoding=ISO-8859-1? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd; %@ page session=false import=javax.naming.*, java.sql.*, javax.sql.* % html xmlns=http://www.w3.org/1999/xhtml; xml:lang=en lang=en head titleTest shared data source/title /head body % Context ctx = null; DataSource ds = null; Connection c = null; Statement stm = null; ResultSet rs = null; try { ctx = new InitialContext(); ds = (DataSource)ctx.lookup(java:comp/env/jdbc/pgserver); c = ds.getConnection(); stm = c.createStatement(); rs = stm.executeQuery(select current_user); rs.next(); % Current user: %= rs.getString(1) %br/ % } catch (Exception e) { % Error: %= e.getMessage() % % } finally { if (rs!=null) try { rs.close(); } catch (Exception ignore){} if (stm!=null) try { stm.close(); } catch (Exception ignore){} if (c!=null) try { c.close();} catch (Exception ignore){}} % /body /html 5) App1 output: Current user: userapp1 6) App2 output: Current user: globaluser Thanks and I hope this script can help others with the same problem. Cheers, Robert On Wed, May 23, 2012 at 8:38 PM, Robert Anderson ranom...@gmail.com wrote: Sorry, for the wall of text. :) IIRC there is no support for getConnection(username, password) in Apache Commons DBCP pool at all, and it was a new feature in Tomcat JDBC pool at that time. Yes, it is the problem. I've lost many hours following an example in documentation about ResourceLink and DataSource that does not work as expected/described. Best regards, Robert On Wed, May 23, 2012 at 8:26 PM, Konstantin Kolinko knst.koli...@gmail.com wrote: 2012/5/24 Robert Anderson ranom...@gmail.com: 2. You need to set alternateUsernameAllowed= true on Tomcat JDBC pool [1] Otherwise arguments in ds.getConnection(user,password) method on that datasource are ignored. Good, I'll test it. Anyway, the following description and example in documentation is not valid ( tomcat.apache.org/tomcat-6.0-doc/config/context.html#Resource_Links, tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links): When the attribute factory=org.apache.naming.factory.DataSourceLinkFactory the resource link can be used with two additional attributes to allow a shared data source to be used with different credentials. When these two additional attributes are used in combination with the javax.sql.DataSource type, different contexts can share a global data source with different credentials. Under the hood, what happens is that a call to getConnection() http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28%29 is simply translated to a call getConnection(username, password) http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28java.lang.String,%20java.lang.String%29 on the global data source. This is an easy way to get code to be transparent to what schemas are being used, yet be able to control connections (or pools) in the global
Re: Shared data source (Bug 49543)
2012/5/24 Robert Anderson ranom...@gmail.com: Sorry, for the wall of text. :) IIRC there is no support for getConnection(username, password) in Apache Commons DBCP pool at all, and it was a new feature in Tomcat JDBC pool at that time. Yes, it is the problem. I've lost many hours following an example in documentation about ResourceLink and DataSource that does not work as expected/described. I added it to Bugzilla. https://issues.apache.org/bugzilla/show_bug.cgi?id=53289 Now it's working! Follows the script: 1) ... 2) ... 3) ... Thank you. It is good to have a working example. Best regards, Konstantin Kolinko - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Robert, On 5/24/12 7:50 AM, Robert Anderson wrote: Now it's working! Follows the script: So, how does your script deviate from the Tomcat documentation? It seems that you followed the docs and now it works. Right? - -chris -BEGIN PGP SIGNATURE- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEUEARECAAYFAk++ScsACgkQ9CaO5/Lv0PAy4ACWNsbvFopO5tY0s0SXCDfnmXEb 7wCfTJA3lvlqkl7hXrAcVB70EREQ7EU= =ssa2 -END PGP SIGNATURE- - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
Chris, Basically, the ResourceLink documentation doesn't say that to enable shared pool with different credentials: 1) You have to add tomcat-jdbc.jar in Tomcat 6.0 classpath; 2) You have to put the attributes in global resource definition: factory=org.apache.tomcat.jdbc.pool.DataSourceFactory and alternateUsernameAllowed=true. Cheers, Robert On Thu, May 24, 2012 at 11:46 AM, Christopher Schultz ch...@christopherschultz.net wrote: -BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Robert, On 5/24/12 7:50 AM, Robert Anderson wrote: Now it's working! Follows the script: So, how does your script deviate from the Tomcat documentation? It seems that you followed the docs and now it works. Right? - -chris -BEGIN PGP SIGNATURE- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEUEARECAAYFAk++ScsACgkQ9CaO5/Lv0PAy4ACWNsbvFopO5tY0s0SXCDfnmXEb 7wCfTJA3lvlqkl7hXrAcVB70EREQ7EU= =ssa2 -END PGP SIGNATURE- - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Robert, On 5/24/12 10:57 AM, Robert Anderson wrote: Chris, Basically, the ResourceLink documentation doesn't say that to enable shared pool with different credentials: 1) You have to add tomcat-jdbc.jar in Tomcat 6.0 classpath; 2) You have to put the attributes in global resource definition: factory=org.apache.tomcat.jdbc.pool.DataSourceFactory and alternateUsernameAllowed=true. Gotcha: you didn't know that this was an example only relevant to tomcat-jdbc (not that you should have -- I didn't know, either). I thought you were already using tomcat-jdbc and I believe the docs there are accurate. - -chris -BEGIN PGP SIGNATURE- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk++ToIACgkQ9CaO5/Lv0PDFHQCgrXsXmL3C/Cc3a74Lt8ul8Ton RyQAn0WwW4ZfQVJz3s8pHHh/ulBm7vwX =XrXd -END PGP SIGNATURE- - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
Exactly, I had no way of knowing because the documentation of ResourceLink does not inform these details. :) Konstantin was perfect in his description in bugzilla. On Thu, May 24, 2012 at 12:06 PM, Christopher Schultz ch...@christopherschultz.net wrote: -BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Robert, On 5/24/12 10:57 AM, Robert Anderson wrote: Chris, Basically, the ResourceLink documentation doesn't say that to enable shared pool with different credentials: 1) You have to add tomcat-jdbc.jar in Tomcat 6.0 classpath; 2) You have to put the attributes in global resource definition: factory=org.apache.tomcat.jdbc.pool.DataSourceFactory and alternateUsernameAllowed=true. Gotcha: you didn't know that this was an example only relevant to tomcat-jdbc (not that you should have -- I didn't know, either). I thought you were already using tomcat-jdbc and I believe the docs there are accurate. - -chris -BEGIN PGP SIGNATURE- Version: GnuPG/MacGPG2 v2.0.17 (Darwin) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk++ToIACgkQ9CaO5/Lv0PDFHQCgrXsXmL3C/Cc3a74Lt8ul8Ton RyQAn0WwW4ZfQVJz3s8pHHh/ulBm7vwX =XrXd -END PGP SIGNATURE- - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
2012/5/24 Robert Anderson ranom...@gmail.com: Hi, I'm testing this functionality (versions 6.0.35 and 7.0.27) but it's not working for me (https://issues.apache.org/bugzilla/show_bug.cgi?id=49543 , http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links). --server.xml GlobalNamingResources Resource name=jdbc/globalpg auth=Container type=javax.sql.DataSource removeAbandoned=true removeAbandonedTimeout=300 maxActive=400 maxIdle=30 maxWait=1 validationQuery=select 1 testOnBorrow=true factory=org.apache.tomcat.jdbc.pool.DataSourceFactory driverClassName=org.postgresql.Driver url=jdbc:postgresql:// 172.17.1.5:5432/tjse username=user1 password=validpassword / /GlobalNamingResources --conf/Catalina/localhost/app1.xml Context ResourceLink name=jdbc/localpg global=jdbc/globalpg type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=user2 password=invalidpassword / /Context --webapps/app1/index.jsp ?xml version=1.0 encoding=ISO-8859-1? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd; %@ page session=false import=javax.naming.*, java.sql.*, javax.sql.* % html xmlns=http://www.w3.org/1999/xhtml; xml:lang=en lang=en head titleTest shared data source/title /head body % Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(java:comp/env/jdbc/localpg); Connection c = ds.getConnection(); Statement stm = c.createStatement(); ResultSet rs = stm.executeQuery(select 'this should fail because the password of localpg is invalid but it is working.'); rs.next(); % %= rs.getString(1) %br/ % c.close(); % /body /html Am I doing some wrong? 1. You have to wrap all this with try/finally and invoke close() on ResultSet and Statement before calling that method on Connection (which returns it to the pool, but does not actually close it). I'd have resource leaks otherwise. 2. You need to set alternateUsernameAllowed=true on Tomcat JDBC pool [1] Otherwise arguments in ds.getConnection(user,password) method on that datasource are ignored. [1] http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html Best regards, Konstantin Kolinko - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
Hi The ResourceLink element will use the parameters name, global and type. Everything else is being ignored, as the resource link is but reference to the global shared data source. See http://tomcat.apache.org/tomcat-7.0-doc/config/context.html, searching for ResourceLink. Best regards On 5/23/2012 9:31 PM, Robert Anderson wrote: Hi, I'm testing this functionality (versions 6.0.35 and 7.0.27) but it's not working for me (https://issues.apache.org/bugzilla/show_bug.cgi?id=49543 , http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links). --server.xml GlobalNamingResources Resource name=jdbc/globalpg auth=Container type=javax.sql.DataSource removeAbandoned=true removeAbandonedTimeout=300 maxActive=400 maxIdle=30 maxWait=1 validationQuery=select 1 testOnBorrow=true factory=org.apache.tomcat.jdbc.pool.DataSourceFactory driverClassName=org.postgresql.Driver url=jdbc:postgresql:// 172.17.1.5:5432/tjse username=user1 password=validpassword / /GlobalNamingResources --conf/Catalina/localhost/app1.xml Context ResourceLink name=jdbc/localpg global=jdbc/globalpg type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=user2 password=invalidpassword / /Context --webapps/app1/index.jsp ?xml version=1.0 encoding=ISO-8859-1? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd; %@ page session=false import=javax.naming.*, java.sql.*, javax.sql.* % html xmlns=http://www.w3.org/1999/xhtml; xml:lang=en lang=en head titleTest shared data source/title /head body % Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(java:comp/env/jdbc/localpg); Connection c = ds.getConnection(); Statement stm = c.createStatement(); ResultSet rs = stm.executeQuery(select 'this should fail because the password of localpg is invalid but it is working.'); rs.next(); % %= rs.getString(1) %br/ % c.close(); % /body /html Am I doing some wrong? Thanks in advance, Robert -- *João Silva * * VILT Group * *_http://www.vilt-group.com _ Rua Ivone Silva, 6 - 7º Esq 1050-124 Lisboa - Portugal Mobile +351 926 531 097 Phone +351 210 34 33 00 Fax +351 210 34 33 99 Email _joao.si...@vilt-group.com mailto:joao.si...@vilt-group.com_*
Re: Shared data source (Bug 49543)
Hi, Thanks guys. 1. You have to wrap all this with try/finally and invoke close() on ResultSet and Statement before calling that method on Connection (which returns it to the pool, but does not actually close it). I'd have resource leaks otherwise. Cetainly, in this code I just wanted to test getConnection is not a real application. 2. You need to set alternateUsernameAllowed= true on Tomcat JDBC pool [1] Otherwise arguments in ds.getConnection(user,password) method on that datasource are ignored. Good, I'll test it. Anyway, the following description and example in documentation is not valid ( tomcat.apache.org/tomcat-6.0-doc/config/context.html#Resource_Links, tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links): When the attribute factory=org.apache.naming.factory.DataSourceLinkFactory the resource link can be used with two additional attributes to allow a shared data source to be used with different credentials. When these two additional attributes are used in combination with the javax.sql.DataSource type, different contexts can share a global data source with different credentials. Under the hood, what happens is that a call to getConnection()http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28%29is simply translated to a call getConnection(username, password)http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28java.lang.String,%20java.lang.String%29on the global data source. This is an easy way to get code to be transparent to what schemas are being used, yet be able to control connections (or pools) in the global configuration. GlobalNamingResources ... Resource name=sharedDataSource global=sharedDataSource type=javax.sql.DataSource username=bar password=barpass ... ... /GlobalNamingResources Context path=/foo... ... ResourceLink name=appDataSource global=sharedDataSource type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=foo password=foopass ... /Context Context path=/bar... ... ResourceLink name=appDataSource global=sharedDataSource type=javax.sql.DataSource ... /Context That way, just does not work. Best regards, Robert On Wed, May 23, 2012 at 6:26 PM, Konstantin Kolinko knst.koli...@gmail.comwrote: 2012/5/24 Robert Anderson ranom...@gmail.com: Hi, I'm testing this functionality (versions 6.0.35 and 7.0.27) but it's not working for me (https://issues.apache.org/bugzilla/show_bug.cgi?id=49543, http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links ). --server.xml GlobalNamingResources Resource name=jdbc/globalpg auth=Container type=javax.sql.DataSource removeAbandoned=true removeAbandonedTimeout=300 maxActive=400 maxIdle=30 maxWait=1 validationQuery=select 1 testOnBorrow=true factory=org.apache.tomcat.jdbc.pool.DataSourceFactory driverClassName=org.postgresql.Driver url=jdbc:postgresql:// 172.17.1.5:5432/tjse username=user1 password=validpassword / /GlobalNamingResources --conf/Catalina/localhost/app1.xml Context ResourceLink name=jdbc/localpg global=jdbc/globalpg type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=user2 password=invalidpassword / /Context --webapps/app1/index.jsp ?xml version=1.0 encoding=ISO-8859-1? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd; %@ page session=false import=javax.naming.*, java.sql.*, javax.sql.* % html xmlns=http://www.w3.org/1999/xhtml; xml:lang=en lang=en head titleTest shared data source/title /head body % Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(java:comp/env/jdbc/localpg); Connection c = ds.getConnection(); Statement stm = c.createStatement(); ResultSet rs = stm.executeQuery(select 'this should fail because the password of localpg is invalid but it is working.'); rs.next(); % %= rs.getString(1) %br/ % c.close(); % /body /html Am I doing some wrong? 1. You have to wrap all this with try/finally and invoke close() on ResultSet and Statement before calling that method on Connection (which returns it to the pool, but does not actually close it). I'd have resource leaks otherwise. 2. You need to set alternateUsernameAllowed=true on Tomcat JDBC pool [1] Otherwise arguments in
Re: Shared data source (Bug 49543)
Hi João, This documentation also says: When the attribute factory=org.apache.naming.factory.DataSourceLinkFactorythe resource link can be used with two additional attributes to allow a shared data source to be used with different credentials. When these two additional attributes are used in combination with the javax.sql.DataSourcetype, different contexts can share a global data source with different credentials. Under the hood, what happens is that a call to getConnection()http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28%29is simply translated to a call getConnection(username, password)http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28java.lang.String,%20java.lang.String%29on the global data source. This is an easy way to get code to be transparent to what schemas are being used, yet be able to control connections (or pools) in the global configuration. AttributeDescriptionusername username value for the getConnection(username, password) call on the linked global DataSource. password password value for the getConnection(username, password) call on the linked global DataSource. Thanks, Robert On Wed, May 23, 2012 at 6:26 PM, Joao Silva joao.si...@vilt-group.comwrote: Hi The ResourceLink element will use the parameters name, global and type. Everything else is being ignored, as the resource link is but reference to the global shared data source. See http://tomcat.apache.org/tomcat-7.0-doc/config/context.html, searching for ResourceLink. Best regards On 5/23/2012 9:31 PM, Robert Anderson wrote: Hi, I'm testing this functionality (versions 6.0.35 and 7.0.27) but it's not working for me (https://issues.apache.org/bugzilla/show_bug.cgi?id=49543 ,http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links). --server.xml GlobalNamingResources Resource name=jdbc/globalpg auth=Container type=javax.sql.DataSource removeAbandoned=true removeAbandonedTimeout=300 maxActive=400 maxIdle=30 maxWait=1 validationQuery=select 1 testOnBorrow=true factory=org.apache.tomcat.jdbc.pool.DataSourceFactory driverClassName=org.postgresql.Driver url=jdbc:postgresql://172.17.1.5:5432/tjse username=user1 password=validpassword / /GlobalNamingResources --conf/Catalina/localhost/app1.xml Context ResourceLink name=jdbc/localpg global=jdbc/globalpg type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=user2 password=invalidpassword / /Context --webapps/app1/index.jsp ?xml version=1.0 encoding=ISO-8859-1? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd; http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd %@ page session=false import=javax.naming.*, java.sql.*, javax.sql.* % html xmlns=http://www.w3.org/1999/xhtml; http://www.w3.org/1999/xhtml xml:lang=en lang=en head titleTest shared data source/title /head body % Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(java:comp/env/jdbc/localpg); Connection c = ds.getConnection(); Statement stm = c.createStatement(); ResultSet rs = stm.executeQuery(select 'this should fail because the password of localpg is invalid but it is working.'); rs.next(); % %= rs.getString(1) %br/ % c.close(); % /body /html Am I doing some wrong? Thanks in advance, Robert -- *João Silva * * VILT Group * *http://www.vilt-group.com Rua Ivone Silva, 6 - 7º Esq 1050-124 Lisboa - Portugal Mobile +351 926 531 097 Phone +351 210 34 33 00 Fax +351 210 34 33 99 Email joao.si...@vilt-group.com*
Re: Shared data source (Bug 49543)
2012/5/24 Robert Anderson ranom...@gmail.com: 2. You need to set alternateUsernameAllowed= true on Tomcat JDBC pool [1] Otherwise arguments in ds.getConnection(user,password) method on that datasource are ignored. Good, I'll test it. Anyway, the following description and example in documentation is not valid ( tomcat.apache.org/tomcat-6.0-doc/config/context.html#Resource_Links, tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links): When the attribute factory=org.apache.naming.factory.DataSourceLinkFactory the resource link can be used with two additional attributes to allow a shared data source to be used with different credentials. When these two additional attributes are used in combination with the javax.sql.DataSource type, different contexts can share a global data source with different credentials. Under the hood, what happens is that a call to getConnection()http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28%29is simply translated to a call getConnection(username, password)http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28java.lang.String,%20java.lang.String%29on the global data source. This is an easy way to get code to be transparent to what schemas are being used, yet be able to control connections (or pools) in the global configuration. GlobalNamingResources ... Resource name=sharedDataSource global=sharedDataSource type=javax.sql.DataSource username=bar password=barpass ... ... /GlobalNamingResources Context path=/foo... ... ResourceLink name=appDataSource global=sharedDataSource type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=foo password=foopass ... /Context Context path=/bar... ... ResourceLink name=appDataSource global=sharedDataSource type=javax.sql.DataSource ... /Context That way, just does not work. Can you be more specific? You are just citing a wall of text and it is hard to digest. Can you open an issue in Bugzilla? IIRC there is no support for getConnection(username, password) in Apache Commons DBCP pool at all, and it was a new feature in Tomcat JDBC pool at that time. Is it the problem, or something else is wrong? Best regards, Konstantin Kolinko - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Shared data source (Bug 49543)
Sorry, for the wall of text. :) IIRC there is no support for getConnection(username, password) in Apache Commons DBCP pool at all, and it was a new feature in Tomcat JDBC pool at that time. Yes, it is the problem. I've lost many hours following an example in documentation about ResourceLink and DataSource that does not work as expected/described. Best regards, Robert On Wed, May 23, 2012 at 8:26 PM, Konstantin Kolinko knst.koli...@gmail.comwrote: 2012/5/24 Robert Anderson ranom...@gmail.com: 2. You need to set alternateUsernameAllowed= true on Tomcat JDBC pool [1] Otherwise arguments in ds.getConnection(user,password) method on that datasource are ignored. Good, I'll test it. Anyway, the following description and example in documentation is not valid ( tomcat.apache.org/tomcat-6.0-doc/config/context.html#Resource_Links, tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Links): When the attribute factory=org.apache.naming.factory.DataSourceLinkFactory the resource link can be used with two additional attributes to allow a shared data source to be used with different credentials. When these two additional attributes are used in combination with the javax.sql.DataSource type, different contexts can share a global data source with different credentials. Under the hood, what happens is that a call to getConnection() http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28%29 is simply translated to a call getConnection(username, password) http://download.oracle.com/javase/6/docs/api/javax/sql/DataSource.html#getConnection%28java.lang.String,%20java.lang.String%29 on the global data source. This is an easy way to get code to be transparent to what schemas are being used, yet be able to control connections (or pools) in the global configuration. GlobalNamingResources ... Resource name=sharedDataSource global=sharedDataSource type=javax.sql.DataSource username=bar password=barpass ... ... /GlobalNamingResources Context path=/foo... ... ResourceLink name=appDataSource global=sharedDataSource type=javax.sql.DataSource factory=org.apache.naming.factory.DataSourceLinkFactory username=foo password=foopass ... /Context Context path=/bar... ... ResourceLink name=appDataSource global=sharedDataSource type=javax.sql.DataSource ... /Context That way, just does not work. Can you be more specific? You are just citing a wall of text and it is hard to digest. Can you open an issue in Bugzilla? IIRC there is no support for getConnection(username, password) in Apache Commons DBCP pool at all, and it was a new feature in Tomcat JDBC pool at that time. Is it the problem, or something else is wrong? Best regards, Konstantin Kolinko - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org