Return-Path: Delivered-To: apmail-jackrabbit-users-archive@locus.apache.org Received: (qmail 74157 invoked from network); 16 Jul 2007 01:33:11 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 16 Jul 2007 01:33:11 -0000 Received: (qmail 63264 invoked by uid 500); 15 Jul 2007 16:33:14 -0000 Delivered-To: apmail-jackrabbit-users-archive@jackrabbit.apache.org Received: (qmail 62900 invoked by uid 500); 15 Jul 2007 16:33:13 -0000 Mailing-List: contact users-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@jackrabbit.apache.org Delivered-To: mailing list users@jackrabbit.apache.org Received: (qmail 62891 invoked by uid 99); 15 Jul 2007 16:33:13 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 15 Jul 2007 09:33:13 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: local policy) Received: from [217.12.11.63] (HELO smtp009.mail.ukl.yahoo.com) (217.12.11.63) by apache.org (qpsmtpd/0.29) with SMTP; Sun, 15 Jul 2007 09:33:07 -0700 Received: (qmail 39881 invoked from network); 15 Jul 2007 16:32:46 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.co.uk; h=Received:X-YMail-OSG:From:To:References:In-Reply-To:Subject:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:X-Mailer:Thread-Index:Content-Language; b=nDAFO5whKDg4ggGuCsXW4YcdFpxvNghzIIjasTwrUsb+94kDvR0kheQHXz66/WvJTOntJW4k2Cq7FSn0gwaohH5bvGZbDIbx6rRCFfr0D/olQ/SVS3VtEsoHrqK3leMn3VqXWMOkgE0n2mXY3Ns24h2pEonyAVuqEf5474TxRSg= ; Received: from unknown (HELO miqsbarriba) (sbarriba@81.149.172.165 with login) by smtp009.mail.ukl.yahoo.com with SMTP; 15 Jul 2007 16:32:45 -0000 X-YMail-OSG: flwOqQgVM1kyZ2tAi34NZdvyGKTCd2SZww2ypZ0EX0cDkNFD6.8S3fqyA.MG8QjbuyLz_O0cccJgp47tLLamEzbUMGsVxgIq3v48dGv8Ewy_GhT44o8dLq9Qylo- From: "sbarriba" To: References: <007e01c7c529$a5175810$ef460830$@co.uk> <4697574F.2020307@consol.de> In-Reply-To: <4697574F.2020307@consol.de> Subject: RE: MySql 5.0 & JackRabbit: Connection issues Date: Sun, 15 Jul 2007 17:32:44 +0100 Message-ID: <00e601c7c6fd$c600df80$52029e80$@co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AcfFOrbct6GfJc3wQtiFSD/86xN9SgBwnLog Content-Language: en-gb X-Virus-Checked: Checked by ClamAV on apache.org Thanks for the responses. The MySql doc states "[autoReconnect] .. is only designed to be used when you are unable to configure your application to handle SQLExceptions resulting from dead = and stale connections properly. Alternatively, investigate setting the MySQL server variable "wait_timeout" to some high value rather than the = default of 8 hours." Given that JackRabbit has specific connection requirements which prevent = the use of DBCP or connection pools it would seem necessary for JackRabbit = to provide native support for the equivalent of "validationQuery" (http://jakarta.apache.org/commons/dbcp/configuration.html) etc to help defend against connection problems. I'll let you know the outcome of increasing the wait_timeout. Regards, Shaun. -----Original Message----- From: Marcel May [mailto:marcel.may@consol.de]=20 Sent: 13 July 2007 11:43 To: users@jackrabbit.apache.org Subject: Re: MySql 5.0 & JackRabbit: Connection issues If you use an Java EE pool, be aware that the pool/datasource must be non managed, as the persistence managers and file systems for Jackrabbit do not use = JTA. Otherwise, you will get problems when the Jackrabbit impl. directly invokes con.commit or con.setAutoCommit on a managed connection. Using auto reconnect can be dangerous with mysql (imagine what happens with an open TX, and a reconnect is performed). There is an additional JDBC property for reconnecting only at the the end of a TX (reconnectAtTxEnd). An auto reconnect for mysql is not recommend (see the docs). That mysql closes connections by default after 8hrs of inactivity is a = pain. Some firewalls do this often enough, too, for any connection. BTW, the automatic connection closing is configurable on the mysql server, so you could inc. the timeout to prevent over the night/over the weekend timouts caused by inactivity. There Cheers, Marcel sbarriba wrote: > Hi all, > > We're testing our application using JackRabbit 1.3 with MySql 5.0.27 = and > mysql-connector-java-5.0.6-bin.jar. After the application has been = running > for a period of time we start getting various persistence failures = within > JCR mainly referencing "Connection.close() has already been called". = The > full exception and our workspace persistence configuration are shown below. > The app has to be restarted. > > =20 > > This situation prompts the question: > > . Are there any other connection related parameters that we = should be > using for MySql? Do I need "autoReconnect=3Dtrue"? I note that this = is > 'false' by default from 5.0.3 onwards > (http://dev.mysql.com/doc/connector/j/en/auto-reconnect.html) > > . I notice Magnolia are using JNDI instead of the bundle persistence > manager. In a previous thread Zukka confirmed "But if you just want to = use > JNDI to externalize the database configuration and understand the > above-mentioned Jackrabbit usage pattern, then there is no downside to using > JNDI" > (http://mail-archives.apache.org/mod_mbox/jackrabbit-users/200705.mbox/%3= C86 > d42bef0705241018l36d74badpb38dc2b0f0376700@mail.gmail.com%3E) . Can = anyone > confirm if the bundle persistence manager will be much more performant that > the JNDI manager? If not, then JNDI would be much more consistent for = us. > > =20 > > Any other guidance for configuring JackRabbit with MySql 5.0 is appreciated. > > Regards, > > Shaun > > =20 > > [Workspace Config] > > =20 > > class=3D"org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceMa= nager > "> > > > > > > > > > > > > > > > > > > =20 > > [Exception Stack] > > =20 > > Caused by: org.apache.jackrabbit.core.state.ItemStateException: = setting > autocommit failed. > > at > org.apache.jackrabbit.core.persistence.bundle.BundleDbPersistenceManager.= sto > re(BundleDbPersistenceManager.java:499) > > at > org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(Shared= Ite > mStateManager.java:688) > > at > org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItem= Sta > teManager.java:855) > > at > org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemSt= ate > Manager.java:326) > > at > org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateMan= age > r.java:313) > > at > org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemSt= ate > Manager.java:302) > > at > org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionIt= emS > tateManager.java:306) > > at = org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1214) > > ... 65 more > > Caused by: = com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: > Connection.close() has already been called. Invalid operation in this state. > > at = com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888) > > at com.mysql.jdbc.Connection.getMutex(Connection.java:3727) > > at = com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5362) > > at > org.apache.jackrabbit.core.persistence.bundle.BundleDbPersistenceManager.= sto > re(BundleDbPersistenceManager.java:494) > > ... 72 more > > org.apache.jackrabbit.core.state.ItemStateException: setting = autocommit > failed. > > at > org.apache.jackrabbit.core.persistence.bundle.BundleDbPersistenceManager.= sto > re(BundleDbPersistenceManager.java:499) > > at > org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(Shared= Ite > mStateManager.java:688) > > at > org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItem= Sta > teManager.java:855) > > at > org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemSt= ate > Manager.java:326) > > at > org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateMan= age > r.java:313) > > at > org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemSt= ate > Manager.java:302) > > at > org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionIt= emS > tateManager.java:306) > > at = org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1214) > > at = org.apache.jackrabbit.core.NodeImpl.lock(NodeImpl.java:4070) > > at > = com.mobileiq.contentrepository.jcr.MIQNodeImpl.lock(MIQNodeImpl.java:343)= > > at > com.mobileiq.cms.gwt.server.model.RepositoryAccessor.lockItem(RepositoryA= cce > ssor.java:697) > > at > com.mobileiq.cms.gwt.server.service.RepositoryAccessorServiceImpl$32.exec= ute > (RepositoryAccessorServiceImpl.java:792) > > at > com.mobileiq.cms.gwt.server.service.RepositoryAccessorServiceImpl.authent= ica > teAndExecute(RepositoryAccessorServiceImpl.java:185) > > at > com.mobileiq.cms.gwt.server.service.RepositoryAccessorServiceImpl.authent= ica > teAndExecute(RepositoryAccessorServiceImpl.java:167) > > at > com.mobileiq.cms.gwt.server.service.RepositoryAccessorServiceImpl.lockIte= m(R > epositoryAccessorServiceImpl.java:790) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java= :39 > ) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI= mpl > .java:25) > > at java.lang.reflect.Method.invoke(Method.java:585) > > at > org.gwtwidgets.server.spring.enhancer.DelegatingCallback.intercept(Delega= tin > gCallback.java:98) > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33. > lockItem() > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java= :39 > ) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI= mpl > .java:25) > > at java.lang.reflect.Method.invoke(Method.java:585) > > at > com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteSer= vic > eServlet.java:262) > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33. > CGLIB$processCall$3() > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33$ > $FastClassByCGLIB$$eae5dacf.invoke() > > at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:167) > > at > org.gwtwidgets.server.spring.enhancer.DelegatingCallback.intercept(Delega= tin > gCallback.java:103) > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33. > processCall() > > at > com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceS= erv > let.java:146) > > at > org.gwtwidgets.server.spring.GWTSpringController.handleRequest(GWTSpringC= ont > roller.java:73) > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33. > CGLIB$handleRequest$1() > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33$ > $FastClassByCGLIB$$eae5dacf.invoke() > > at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:167) > > at > org.gwtwidgets.server.spring.enhancer.DelegatingCallback.intercept(Delega= tin > gCallback.java:103) > > at > org.gwtwidgets.server.spring.GWTSpringController$$EnhancerByCGLIB$$ca4904= 33. > handleRequest() > > at > org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle= (Si > mpleControllerHandlerAdapter.java:45) > > at > org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherSe= rvl > et.java:820) > > at > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherSer= vle > t.java:755) > > at > org.springframework.web.servlet.FrameworkServlet.processRequest(Framework= Ser > vlet.java:396) > > at > org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.= jav > a:360) > > at = javax.servlet.http.HttpServlet.service(HttpServlet.java:709) > > at = javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat= ion > FilterChain.java:252) > > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte= rCh > ain.java:173) > > at > com.mobileiq.contentrepository.springmodule.http.TransactionSynchronizati= onF > ilter.doFilterInternal(TransactionSynchronizationFilter.java:98) > > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReque= stF > ilter.java:77) > > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat= ion > FilterChain.java:202) > > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte= rCh > ain.java:173) > > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve= .ja > va:214) > > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex > t.java:104) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:52= 0) > > at > org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCont= ext > Valve.java:198) > > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve= .ja > va:152) > > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex > t.java:104) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:52= 0) > > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:= 137 > ) > > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex > t.java:104) > > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:= 118 > ) > > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex > t.java:102) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:52= 0) > > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.j= ava > :109) > > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex > t.java:104) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:52= 0) > > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) > > at > = org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) > > at > = org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799= ) > > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processCo= nne > ction(Http11Protocol.java:705) > > at > = org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577= ) > > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.= jav > a:684) > > at java.lang.Thread.run(Thread.java:595) > > Caused by: = com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: > Connection.close() has already been called. Invalid operation in this state. > > at = com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888) > > at com.mysql.jdbc.Connection.getMutex(Connection.java:3727) > > at = com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5362) > > at > org.apache.jackrabbit.core.persistence.bundle.BundleDbPersistenceManager.= sto > re(BundleDbPersistenceManager.java:494) > > ... 72 more > > =20 > > =20 > > > =20 --=20 Marcel May ConSol* Software GmbH Franziskanerstr. 38 81669 M=FCnchen=20 Tel: +49 (0)89-45841-155 Fax: +49-(0)89-45841-111 marcel.may@consol.de http://www.consol.de