Are you closing the QueryExecution objects?

I've experienced similar stuff with Apache HTTP Client that would reach the
limit of connections per route and then would just hang without any error
messages.

On Wed, Feb 13, 2019 at 10:04 AM Bart van Leeuwen <
[email protected]> wrote:

> So in the mean time I've been trying to understand the issue a bit better.
>
> From 3.1.0 to 3.2.0 the most notable difference is the HTTPClient package
> which introduces the PoolingHttpClientConnectionManager
> ( this is visibile in the stacktrace )
>
> Since we run in Tomee ( Tomcat with EJB ) this is the cause of our
> problems:
>
> https://stackoverflow.com/questions/27298746/using-poolinghttpclientconnectionmanager-in-ejb-container
>
> After adding the following lines to our constructor:
> HttpClient httpclient = HttpClients.custom().build();
> HttpOp.setDefaultHttpClient(httpclient);
>
> our problems are solved!
>
> Is there some background information on this (or should there be some
> documentation aditions)
>
> Met Vriendelijke Groet / With Kind Regards
> Bart van Leeuwen
>
>
> twitter: @semanticfire
> tel. +31(0)6-53182997
> Netage B.V.
> http://netage.nl
> Esdoornstraat 3
> 3461ER Linschoten
> The Netherlands
>
>
>
>
> From:        Bart van Leeuwen <[email protected]>
> To:        [email protected]
> Date:        12-02-2019 22:49
> Subject:        QueryExecution.exec stops working in Java Web Application
> ------------------------------
>
>
>
> Hi,
>
> We have a web application which uses the following code to connect to a
> external endpoint
>
> QueryExecution exec  =
> QueryExecutionFactory.sparqlService(Config.getConfig("endpoint"), kroQuery);
> ResultSet objects = exec.execSelect();
>
> This runs fine with Jena up to 3.1.0
>
> However with later versions we run into the issue that after 6 requests
> they don't return, upon killing the application ( or server ) this is
> visible on the console:
>
> ====
>
> WARNING - The web application [ROOT] is still processing a request that
> has yet to finish. This is very likely to create a memory leak. You can
> control the time allowed for requests to finish by using the unloadDelay
> attribute of the standard Context implementation. Stack trace of request
> processing thread:
> sun.misc.Unsafe.park(Native Method)
> java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
> org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138)
>
> org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306)
> org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64)
>
> org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192)
>
> org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185)
> org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107)
>
> org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276)
>
> org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263)
>
> org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)
>
> org.apache.http.impl.client.cache.CachingExec.callBackend(CachingExec.java:592)
>
> org.apache.http.impl.client.cache.CachingExec.handleCacheMiss(CachingExec.java:356)
> org.apache.http.impl.client.cache.CachingExec.execute(CachingExec.java:275)
> org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
> org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
> org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
>
> org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
>
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
>
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
> org.apache.jena.riot.web.HttpOp.exec(HttpOp.java:1054)
> org.apache.jena.riot.web.HttpOp.execHttpGet(HttpOp.java:281)
> org.apache.jena.riot.web.HttpOp.execHttpGet(HttpOp.java:340)
> org.apache.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery.java:323)
> org.apache.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:282)
>
> org.apache.jena.sparql.engine.http.QueryEngineHTTP.execResultSetInner(QueryEngineHTTP.java:342)
>
> org.apache.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:334)
> webservice.KroService.getBlockAsJson(KroService.java:90)
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> java.lang.reflect.Method.invoke(Method.java:498)
>
> org.apache.openejb.server.cxf.rs.PojoInvoker.performInvocation(PojoInvoker.java:43)
>
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
> org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:189)
> org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)
>
> org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke(AutoJAXRSInvoker.java:68)
>
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
>
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:252)
>
> org.apache.openejb.server.cxf.rs.CxfRsHttpListener.doInvoke(CxfRsHttpListener.java:251)
>
> org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:94)
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
>
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
>
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
>
> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
>
> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
>
> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
>
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
>
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
> org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:419)
> org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:169)
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
> org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
>
> org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
>
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
>
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
>
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
>
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)
>
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> java.lang.Thread.run(Thread.java:748)
>
> ====
>
> Any hint would be greatly appreciated.
>
> Met Vriendelijke Groet / With Kind Regards
> Bart van Leeuwen
>
>
> twitter: @semanticfire
> tel. +31(0)6-53182997
> Netage B.V.
> *http://netage.nl* <http://netage.nl/>
> Esdoornstraat 3
> 3461ER Linschoten
> The Netherlands
>
>
>

Reply via email to