From 2457552ef7f861390f479ff5481aa173cf5873ad Mon Sep 17 00:00:00 2001 From: Jaehong Kim Date: Thu, 19 Mar 2015 16:11:29 +0900 Subject: [PATCH] apply cacheable(ehcache) for api metadata - 1.0.5 --- .../web/dao/hbase/HbaseApiMetaDataDao.java | 6 ++++- .../main/resources/applicationContext-web.xml | 2 +- web/src/main/resources/ehcache.xml | 2 +- .../dao/hbase/HbaseApiMetaDataDaoTest.java | 25 +++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDaoTest.java diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDao.java index 090dbb0a5..c7aa74599 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDao.java @@ -23,6 +23,7 @@ import com.sematext.hbase.wd.RowKeyDistributorByHashPrefix; import org.apache.hadoop.hbase.client.Get; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.cache.annotation.Cacheable; import org.springframework.data.hadoop.hbase.RowMapper; import org.springframework.stereotype.Repository; @@ -36,7 +37,9 @@ import com.navercorp.pinpoint.web.dao.ApiMetaDataDao; */ @Repository public class HbaseApiMetaDataDao implements ApiMetaDataDao { - + static final String SPEL_KEY = "#agentId.toString() + '.' + #time.toString() + '.' + #apiId.toString()"; + + @Autowired private HbaseOperations2 hbaseOperations2; @@ -49,6 +52,7 @@ public class HbaseApiMetaDataDao implements ApiMetaDataDao { private RowKeyDistributorByHashPrefix rowKeyDistributorByHashPrefix; @Override + @Cacheable(value="apiMetaData", key=SPEL_KEY) public List getApiMetaData(String agentId, long time, int apiId) { if (agentId == null) { throw new NullPointerException("agentId must not be null"); diff --git a/web/src/main/resources/applicationContext-web.xml b/web/src/main/resources/applicationContext-web.xml index dbed45242..84de2dc69 100644 --- a/web/src/main/resources/applicationContext-web.xml +++ b/web/src/main/resources/applicationContext-web.xml @@ -53,7 +53,7 @@ --> - + diff --git a/web/src/main/resources/ehcache.xml b/web/src/main/resources/ehcache.xml index ca5a5fc15..6c704ae81 100644 --- a/web/src/main/resources/ehcache.xml +++ b/web/src/main/resources/ehcache.xml @@ -7,7 +7,7 @@ overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" /> - diff --git a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDaoTest.java b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDaoTest.java new file mode 100644 index 000000000..d1de034e1 --- /dev/null +++ b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApiMetaDataDaoTest.java @@ -0,0 +1,25 @@ +package com.navercorp.pinpoint.web.dao.hbase; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +public class HbaseApiMetaDataDaoTest { + + @Test + public void getApiMetaDataCachable() { + // cacheable key - spring expression language + ExpressionParser parser = new SpelExpressionParser(); + StandardEvaluationContext context = new StandardEvaluationContext(); + context.setVariable("agentId", "foo"); + context.setVariable("time", (long) 1); + context.setVariable("apiId", (int) 2); + + String key = (String) parser.parseExpression(HbaseApiMetaDataDao.SPEL_KEY).getValue(context); + assertEquals("foo.1.2", key); + } + +}