java - Ehcache with Spring + Jersey -


i trying experiment try cache json response jersey controller / web service see if has impact on performance.

i have following jersey rest service.

@component @path("/client") @produces(mediatype.application_json) public class clientcontroller {      private static logger logger = loggerfactory.getlogger(clientcontroller.class);      @autowired     iclientservice clientservice;      @get     @cacheable(value = "jerseycache")     public string getclients() {         return "nothing, i'm sync!";     }      @get     @path("/deferred")     public deferredresult<string> getclientsasync() {         deferredresult<string> deferredresult = new deferredresult<>();         deferredresult.setresult("nothing! i'm async!");         return deferredresult;     }      @get     @path("/async")     public void getclientsjaxrsasync(@suspended asyncresponse response) {         new thread(() -> {             response.resume("i async too! using @suspended");         }).start();     }      @get     @path("{id}")     public client getclient(@pathparam("id") long id) {         return new client();     }      @post     @consumes(mediatype.application_json)     public client createclient(@valid client client) {         return new client();     }      @put     @path("{id}")     @consumes(mediatype.application_json)     public void updateclient(@pathparam("id") long id, @valid client client) {         return;     }      @delete     @path("{id}")     public void deleteclient(@pathparam("id")long id) {         return;     } 

when call /api/client following stacktrace.

15:01:55.681 error directjdklog.log - servlet.service() servlet [jerseyservlet] in context path [] threw exception [java.lang.nullpointerexception] root cause java.lang.nullpointerexception: null     @ org.springframework.cache.interceptor.abstractcacheresolver.resolvecaches(abstractcacheresolver.java:78) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.cache.interceptor.cacheaspectsupport.getcaches(cacheaspectsupport.java:216) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.cache.interceptor.cacheaspectsupport$cacheoperationcontext.<init>(cacheaspectsupport.java:568) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.cache.interceptor.cacheaspectsupport.getoperationcontext(cacheaspectsupport.java:229) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.cache.interceptor.cacheaspectsupport$cacheoperationcontexts.<init>(cacheaspectsupport.java:511) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.cache.interceptor.cacheaspectsupport.execute(cacheaspectsupport.java:302) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.cache.interceptor.cacheinterceptor.invoke(cacheinterceptor.java:61) ~[spring-context-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.aop.framework.cglibaopproxy$dynamicadvisedinterceptor.intercept(cglibaopproxy.java:653) ~[spring-aop-4.2.0.rc1.jar:4.2.0.rc1]     @ net.jkratz.agility.web.clientcontroller$$enhancerbyspringcglib$$1ad41944.getclients(<generated>) ~[spring-core-4.2.0.rc1.jar:na]     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[na:1.8.0_45]     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) ~[na:1.8.0_45]     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_45]     @ java.lang.reflect.method.invoke(method.java:497) ~[na:1.8.0_45]     @ org.glassfish.jersey.server.model.internal.resourcemethodinvocationhandlerfactory$1.invoke(resourcemethodinvocationhandlerfactory.java:81) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher$1.run(abstractjavaresourcemethoddispatcher.java:144) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.invoke(abstractjavaresourcemethoddispatcher.java:161) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.internal.javaresourcemethoddispatcherprovider$typeoutinvoker.dodispatch(javaresourcemethoddispatcherprovider.java:205) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.dispatch(abstractjavaresourcemethoddispatcher.java:99) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.resourcemethodinvoker.invoke(resourcemethodinvoker.java:389) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.resourcemethodinvoker.apply(resourcemethodinvoker.java:347) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.model.resourcemethodinvoker.apply(resourcemethodinvoker.java:102) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.serverruntime$2.run(serverruntime.java:308) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.internal.errors$1.call(errors.java:271) ~[jersey-common-2.18.jar:na]     @ org.glassfish.jersey.internal.errors$1.call(errors.java:267) ~[jersey-common-2.18.jar:na]     @ org.glassfish.jersey.internal.errors.process(errors.java:315) ~[jersey-common-2.18.jar:na]     @ org.glassfish.jersey.internal.errors.process(errors.java:297) ~[jersey-common-2.18.jar:na]     @ org.glassfish.jersey.internal.errors.process(errors.java:267) ~[jersey-common-2.18.jar:na]     @ org.glassfish.jersey.process.internal.requestscope.runinscope(requestscope.java:317) ~[jersey-common-2.18.jar:na]     @ org.glassfish.jersey.server.serverruntime.process(serverruntime.java:291) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.server.applicationhandler.handle(applicationhandler.java:1140) ~[jersey-server-2.18.jar:na]     @ org.glassfish.jersey.servlet.webcomponent.service(webcomponent.java:403) ~[jersey-container-servlet-core-2.18.jar:na]     @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:386) ~[jersey-container-servlet-core-2.18.jar:na]     @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:334) ~[jersey-container-servlet-core-2.18.jar:na]     @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:221) ~[jersey-container-servlet-core-2.18.jar:na]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:291) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.tomcat.websocket.server.wsfilter.dofilter(wsfilter.java:52) ~[tomcat-embed-websocket-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.springframework.boot.actuate.autoconfigure.endpointwebmvcautoconfiguration$applicationcontextheaderfilter.dofilterinternal(endpointwebmvcautoconfiguration.java:329) ~[spring-boot-actuator-1.3.0.m1.jar:1.3.0.m1]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.springframework.boot.actuate.trace.webrequesttracefilter.dofilterinternal(webrequesttracefilter.java:102) ~[spring-boot-actuator-1.3.0.m1.jar:1.3.0.m1]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.springframework.web.filter.requestcontextfilter.dofilterinternal(requestcontextfilter.java:99) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.springframework.web.filter.hiddenhttpmethodfilter.dofilterinternal(hiddenhttpmethodfilter.java:77) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:85) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.springframework.boot.actuate.autoconfigure.metricsfilter.dofilterinternal(metricsfilter.java:68) ~[spring-boot-actuator-1.3.0.m1.jar:1.3.0.m1]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.2.0.rc1.jar:4.2.0.rc1]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:239) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:219) ~[tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:106) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:502) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:142) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:79) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:88) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:518) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1091) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:668) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.tomcat.util.net.nioendpoint$socketprocessor.dorun(nioendpoint.java:1521) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ org.apache.tomcat.util.net.nioendpoint$socketprocessor.run(nioendpoint.java:1478) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1142) [na:1.8.0_45]     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:617) [na:1.8.0_45]     @ org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61) [tomcat-embed-core-8.0.23.jar:8.0.23]     @ java.lang.thread.run(thread.java:745) [na:1.8.0_45] 

here cacheconfig

@configuration @enablecaching public class cacheconfig implements cachingconfigurer {      @bean     @override     public cachemanager cachemanager() {         ehcachecachemanager cachemanager = new ehcachecachemanager();         cachemanager.setcachemanager(ehcachemanagerfactorybean().getobject());         return cachemanager;     }      @bean     @override     public keygenerator keygenerator() {         return new simplekeygenerator();     }      @override     public cacheresolver cacheresolver() {         return new simplecacheresolver();     }      @override     public cacheerrorhandler errorhandler() {         return new simplecacheerrorhandler();     }      @bean     public ehcachemanagerfactorybean ehcachemanagerfactorybean() {         ehcachemanagerfactorybean ehcachemanagerfactorybean = new ehcachemanagerfactorybean();         ehcachemanagerfactorybean.setconfiglocation(new classpathresource("ehcache.xml"));         ehcachemanagerfactorybean.setshared(true);         ehcachemanagerfactorybean.setcachemanagername("agilitycachemanager");         return ehcachemanagerfactorybean;     } 

finally ehcache.xml

<?xml version="1.0" encoding="utf-8"?>  <ehcache xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"          xsi:nonamespaceschemalocation="http://ehcache.org/ehcache.xsd"          updatecheck="false"          monitoring="autodetect"          dynamicconfig="true">      <diskstore path="java.io.tmpdir" />      <defaultcache         maxelementsinmemory="10000"         eternal="false"         timetoidleseconds="0"         timetoliveseconds="0"         overflowtodisk="true"         diskspoolbuffersizemb="50"         maxelementsondisk="100000"         diskexpirythreadintervalseconds="300"         memorystoreevictionpolicy="lru"         statistics="true">     </defaultcache>      <cache name="jerseycache"        maxelementsinmemory="10000"        eternal="false"        timetoidleseconds="0"        timetoliveseconds="0"        overflowtodisk="true"        diskspoolbuffersizemb="50"        maxelementsondisk="100000"        diskexpirythreadintervalseconds="300"        memorystoreevictionpolicy="lru"        statistics="true">     </cache>      <cache         name="org.hibernate.cache.spi.updatetimestampscache"         maxelementsinmemory="10000"         eternal="false">     </cache>      <cache         name="org.hibernate.cache.internal.standardquerycache"         maxelementsinmemory="10000"         eternal="false"         timetoliveseconds="300">     </cache>  </ehcache> 

i got similar issue migrating spring 3.2.13 4.2.1 . works replace "implements cachingconfigurer" "extends cachingconfigurersupport".


Comments