Fixed
Details
Assignee
Pothys - MitrahSoftPothys - MitrahSoftReporter
Andrew DixonAndrew DixonPriority
NewFix versions
New Issue warning screen
Before you create a new Issue, please post to the mailing list first https://dev.lucee.org
Once the issue has been verified, one of the Lucee team will ask you to file an issue
Sprint
NoneAffects versions
Details
Details
Assignee
Pothys - MitrahSoft
Pothys - MitrahSoftReporter
Andrew Dixon
Andrew DixonPriority
Fix versions
New Issue warning screen
Before you create a new Issue, please post to the mailing list first https://dev.lucee.org
Once the issue has been verified, one of the Lucee team will ask you to file an issue
Sprint
None
Affects versions
Created 24 May 2024 at 14:10
Updated 8 July 2024 at 07:53
Resolved 8 July 2024 at 07:53
When you attempt to cache a query from MySQL using
cacheput()
and Memcached with extension version 4.0.0.10-SNAPSHOT you get the following error:java.lang.RuntimeException:java.io.NotSerializableException: com.mysql.cj.jdbc.result.ResultSetMetaData
However, if you do the same with a query from
QueryNew()
function, thencachePut()
works fine.This is a regression as this was not a problem in the 3.x version of the extension.
Also If we pass the query through
filter
, e.g.:testQry = queryExecute( sql = "SELECT 1 AS result FROM users LIMIT 1", options = { datasource = 'users'} ).filter( (q) => { return true })
Then it is possible to cache the query using
cachePut()
Tested on Lucee 6.0.1.83 with Memcached 1.6.27 and Memcached extension 4.0.0.10-SNAPSHOT
The Redis Extension, version 3.0.0.51 and 3.0.0.56-SNAPSHOT, will also not store a MySQL query, but instead of erroring fail silently to store the query and when attempting to retrieve it using
cacheGet()
returnnull
as the query is not in the Redis cache (confirmed using Redis Insight desktop tool)Here is the full Stacktrace for the error:
lucee.runtime.exp.NativeException: java.lang.RuntimeException:java.io.NotSerializableException: com.mysql.cj.jdbc.result.ResultSetMetaData at lucee.commons.lang.ExceptionUtil.toIOException(ExceptionUtil.java:194) at lucee.runtime.op.ExceptonImpl.toIOException(ExceptonImpl.java:259) at org.lucee.extension.cache.mc.MemcachedCache.put(MemcachedCache.java:324) at lucee.runtime.functions.cache.CachePut._call(CachePut.java:66) at lucee.runtime.functions.cache.CachePut.call(CachePut.java:43) at index_cfm$cf.call(/index.cfm:22) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1059) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:951) at lucee.runtime.listener.ClassicAppListener._onRequest(ClassicAppListener.java:65) at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:45) at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2715) at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2701) at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2672) at lucee.runtime.engine.Request.exe(Request.java:45) at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1259) at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1205) at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97) at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) at org.cfmlprojects.regexpathinfofilter.RegexPathInfoFilter.doFilter(RegexPathInfoFilter.java:54) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at runwar.undertow.SSLCertHeaderHandler.handleRequest(SSLCertHeaderHandler.java:161) at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275) at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255) at io.undertow.servlet.handlers.ServletInitialHandler.handleRequest(ServletInitialHandler.java:175) at io.undertow.server.handlers.HttpContinueReadHandler.handleRequest(HttpContinueReadHandler.java:69) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at runwar.undertow.WelcomeFileHandler.handleRequest(WelcomeFileHandler.java:39) at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:104) at runwar.undertow.SiteDeployment$1.handleRequest(SiteDeployment.java:162) at io.undertow.predicate.PredicatesHandler.handleRequest(PredicatesHandler.java:141) at io.undertow.server.handlers.DisallowedMethodsHandler.handleRequest(DisallowedMethodsHandler.java:62) at io.undertow.predicate.PredicatesHandler.handleRequest(PredicatesHandler.java:113) at io.undertow.server.handlers.encoding.EncodingHandler.handleRequest(EncodingHandler.java:72) at runwar.undertow.LifecyleHandler.handleRequest(LifecyleHandler.java:143) at runwar.undertow.SiteDeployment$4.handleRequest(SiteDeployment.java:345) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException: java.lang.RuntimeException:java.io.NotSerializableException: com.mysql.cj.jdbc.result.ResultSetMetaData ... 68 more Caused by: java.lang.RuntimeException: java.io.NotSerializableException: com.mysql.cj.jdbc.result.ResultSetMetaData at org.lucee.extension.cache.mc.TranscoderImpl.encode(TranscoderImpl.java:75) at net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:304) at net.spy.memcached.MemcachedClient.set(MemcachedClient.java:928) at org.lucee.extension.cache.mc.MemcachedCache.put(MemcachedCache.java:322) ... 65 more Caused by: java.io.NotSerializableException: com.mysql.cj.jdbc.result.ResultSetMetaData at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source) at org.lucee.extension.cache.mc.TranscoderImpl.toBytes(TranscoderImpl.java:122) at org.lucee.extension.cache.mc.TranscoderImpl.encode(TranscoderImpl.java:57) ... 68 more