Hi Chris, Yes. I could test with "tomcat-dbcp" library. There is issue in calling getConnection with correct password. "I store encrypted password and decrypt the password before calling getConnection."encrypted password was used to create connection when there is more requests" variable "password" was declared as global variable in ConnectionManager class.Hence the encrypted value is updated before calling getConnection when there is more request"
Thanks for the advice! Thanks Vinoth On Mon, Feb 16, 2015 at 12:27 AM, Vinoth Raja <rbvdvin...@gmail.com> wrote: > Hi, > > I have downloaded tomcat source but couldn't find this dbcp package under > "org.apache.tomcat". > > I have figured out when it happens. > > I have a class "ConnectionManager" which is called to get the connection > object. > > It is singleton class and I call the below method to get the object > public static ConnectionManager getInstance() { > > if (objConnectionManager == null) > objConnectionManager = new ConnectionManager(); > > return objConnectionManager; > } > > > Here is the method which is called to get the connection object and return > it > > // This is original method to get DataSource. > public Connection getDataSource(String dnis) { > > Connection connection = null; > if (!initialized) > createContext(); > try { > ..... > objDataSource = (DataSource) > envContext.lookup(dataSourceName); > try { > connection = objDataSource.getConnection(userName, password); > } catch (SQLException e) { > objLogger.error("[" + ucid + "]" > + "SQLException in connection manager: " > + e.getMessage()); > } > > } catch (NamingException e) { > objLogger.info("[" + ucid + "]" > + "NamingException in connection manager: " > + e.getMessage()); > e.printStackTrace(); > } > return connection; > } > > This issue happens when this class is accessed through singleton object. > It doesn't happen when do one of the following: > 1) make the method as synchronized. > or > 2) remove singleton and initialize an object for every request for > ConnectionManager. > > I could reproduce it by keeping two datasource and sending simultaneous > request to both the datasource using singleton ConnectionManager. > > Please advice what could be the reason. > I have verified the SQL log when this incident happens it throws Login > failed for user "". Reason: "Password didn't match that for login provided". > > Please advice whether singleton object can't be used when using multiple > datasources. > > Thanks > Vinoth > > On Thu, Feb 12, 2015 at 12:09 AM, Christopher Schultz < > ch...@christopherschultz.net> wrote: > >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA256 >> >> Vinoth, >> >> On 2/10/15 10:03 PM, Vinoth Raja wrote: >> > Thanks for the quick response. >> > >> > Please find the stack trace. This happens when there is more >> > requests. I could reproduce it by loading more concurrent request >> > All datasources called with same username/password. 4 datasources >> > are called at a time by 4 different application. >> >> This is a little confusing: >> >> > INFO: Stopping ProtocolHandler ["ajp-bio-8009"] >> > ionFilterChain.java:208) at >> > >> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) >> >> I >> > >> think something has been cut-off, here. >> >> > at >> > >> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) >> > >> > >> at com.avaya.sce.runtime.SCEServlet.forward(SCEServlet.java:1356) >> > at >> > com.avaya.sce.runtime.BasicServlet.handleRequest(BasicServlet.java:116) >> > >> > >> at com.avaya.sce.runtime.AppServlet.processRequest(AppServlet.java:96) >> > at >> > com.avaya.sce.runtime.SCEServlet.requestHandler(SCEServlet.java:285) >> > >> > >> at com.avaya.sce.runtime.SCEServlet.doGet(SCEServlet.java:182) >> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) at >> > javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at >> > >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) >> > >> > >> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) >> > at >> > >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) >> > >> > >> at com.avaya.sce.runtime.SCEServlet.forward(SCEServlet.java:1356) >> > at com.avaya.sce.runtime.Data.handleRequest(Data.java:153) at >> > com.avaya.sce.runtime.AppServlet.processRequest(AppServlet.java:96) >> > >> > >> at com.avaya.sce.runtime.SCEServlet.requestHandler(SCEServlet.java:285) >> > at com.avaya.sce.runtime.SCEServlet.doGet(SCEServlet.java:182) at >> > javax.servlet.http.HttpServlet.service(HttpServlet.java:620) at >> > javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at >> > >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) >> > >> > >> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) >> > at >> > >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) >> > >> > >> at >> > >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) >> > >> > >> at >> > >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) >> > >> > >> at >> > >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) >> > >> > >> at >> > >> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) >> > >> > >> at >> > >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) >> > >> > >> at >> > >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) >> > >> > >> at >> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) >> > at >> > >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) >> > >> > >> at >> > >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) >> > >> > >> at >> > >> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) >> > >> > >> at >> > >> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) >> > >> > >> at >> > >> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) >> > >> > >> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) >> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown >> > Source) at >> > >> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) >> > >> > >> at java.lang.Thread.run(Unknown Source) >> > java.sql.SQLException: Given password did not match password used >> > to create the PooledConnection. at >> > >> org.apache.tomcat.dbcp.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:723) >> > >> > >> at >> > >> com.avaya.aps.sca.selfservice.dm.ConnectionManager.getDataSource(ConnectionManager.java:101) >> > >> > >> at >> > >> com.avaya.aps.sca.selfservice.InteractionFlowServiceDaoImpl.getTransitionMapDetail(InteractionFlowServiceDaoImpl.java:241) >> >> What >> > >> code is being called, here in DBCP? You are calling the >> getConnection method that accepts a username and password. Are you >> sure you are not changing the password? >> >> The code in that area looks like this: >> >> if (!(null == password ? null == info.getPassword() >> 717 : password.equals(info.getPassword()))) { // Password on >> PooledConnectionAndInfo does not match >> 718 try { // See if password has changed by attempting connection >> 719 testCPDS(username, password); >> 720 } catch (SQLException ex) { >> 721 // Password has not changed, so refuse client, but return >> connection to the pool >> 722 closeDueToException(info); >> 723 throw new SQLException("Given password did not match password >> used" >> 724 + " to create the PooledConnection."); >> 725 } catch (javax.naming.NamingException ne) { >> 726 throw (SQLException) new SQLException( >> 727 "NamingException encountered connecting to >> database").initCause(ne); >> 728 } >> 729 >> >> It's possible that a SQLException is occurring that does not represent >> a password problem, but it's being interpreted as such. >> >> I checked, and DBCP 2.0 does the same thing: it swallows the >> SQLException so you'll never know what really happened. >> >> It's possible that, in testCPDS, you are running across this: >> >> 819 if (ds instanceof ConnectionPoolDataSource) { >> 820 cpds = (ConnectionPoolDataSource) ds; >> 821 } else { >> 822 throw new SQLException("Illegal configuration: " >> 823 + "DataSource " + dataSourceName >> 824 + " (" + ds.getClass().getName() + ")" >> 825 + " doesn't implement javax.sql.ConnectionPoolDataSource"); >> 826 } >> >> Can you put a breakpoint in testCBDS and see what happens to these >> connections? >> >> - -chris >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v1 >> Comment: GPGTools - http://gpgtools.org >> >> iQIcBAEBCAAGBQJU237WAAoJEBzwKT+lPKRYkLwP/AkNISPIG6FDjkzZN2Pp7R/y >> zcbyOQLVjiVXvK/hsGdv6Brf/KPTMBaljE7NQ7y/l26BSz5FM2jPkh7iqa91TMB7 >> SjZ0vWXDqDGp1VpNz8EAP63hajsbVzHS4RuFCGHQFDpAFUfPqx/eRkEQm+fMMHj0 >> 8wmEicD4XvrCNvNITSkUW02bkG4Ii14ggJWz4Fix7e6aVq2FivEsDXUao5ma27IX >> QuYxseBFKHqQ8hrTbB74wvB4IIFpveEZmS2vNIL4rKVbXclbmseuwtj8nTyEqNSa >> 1rzcYwhg1jndUbCcZS7POQq+vGcs6mJNplyleR7aSotR1G7ApZ3hMCN68TIuWYzq >> Vg7/5xUg1oMaGxuxiXPUMwKLT7KfA1ATTIhk8rSPATMEEGc8l8a+azHtLuf9ebqv >> fXTU0bdYWL+D0tkDi7Pg9hA47Jm2wK3j0yMgsyv31wIRLLYkHwVwoo/ZiYcWOH/y >> 3H6fXuGB1obX75KR/dAdUL2BrVb7yxBBrILf3sjRIk2gtNk2KikE06gtCU178oct >> 5Q7XMmhbxmiRYlo+M1h8gWKcGwE40dH9jrqD3I8mvCipIXSZTbI3Tn1m0xOdn8RT >> DhDpEFc7L1BoCjjnElC5W9ukFFtpsRgDVN12AsCAoPldbbYH4IDvuQPPGgdL1GnQ >> gphexbRn5miaGnJbpMa1 >> =AyHt >> -----END PGP SIGNATURE----- >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> >> >