diff --git a/pom.xml b/pom.xml index bb243c9aa..99e7c8fbf 100644 --- a/pom.xml +++ b/pom.xml @@ -260,6 +260,40 @@ + + + org.codehaus.jackson + jackson-core-asl + 1.9.9 + true + + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.9 + true + + + + + org.codehaus.jackson + jackson-xc + 1.9.9 + true + + + + + org.codehaus.jackson + jackson-jaxrs + 1.9.9 + true + + + + org.slf4j @@ -283,7 +317,7 @@ test - + junit junit diff --git a/src/main/java/com/profiler/common/hbase/HbaseOperations2.java b/src/main/java/com/profiler/common/hbase/HbaseOperations2.java index 1665d2f07..569d99fe2 100644 --- a/src/main/java/com/profiler/common/hbase/HbaseOperations2.java +++ b/src/main/java/com/profiler/common/hbase/HbaseOperations2.java @@ -3,7 +3,9 @@ package com.profiler.common.hbase; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Put; +import org.apache.hadoop.hbase.client.Scan; import org.springframework.data.hadoop.hbase.HbaseOperations; +import org.springframework.data.hadoop.hbase.ResultsExtractor; import org.springframework.data.hadoop.hbase.RowMapper; import java.util.List; @@ -63,4 +65,8 @@ public interface HbaseOperations2 extends HbaseOperations { void delete(String tableName, final Delete delete); void delete(String tableName, final List deletes); + + List find(String tableName, final List scans, final ResultsExtractor action); + + List> find(String tableName, final List scans, final RowMapper action); } diff --git a/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java b/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java index 22fc83404..3d408d97f 100644 --- a/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java +++ b/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java @@ -2,6 +2,7 @@ package com.profiler.common.hbase; import org.apache.hadoop.hbase.client.*; import org.springframework.data.hadoop.hbase.HbaseTemplate; +import org.springframework.data.hadoop.hbase.ResultsExtractor; import org.springframework.data.hadoop.hbase.RowMapper; import org.springframework.data.hadoop.hbase.TableCallback; @@ -12,7 +13,6 @@ import java.util.List; * */ public class HbaseTemplate2 extends HbaseTemplate implements HbaseOperations2 { -// private HTablePool tablePool; @Override public T get(String tableName, byte[] rowName, RowMapper mapper) { @@ -145,4 +145,28 @@ public class HbaseTemplate2 extends HbaseTemplate implements HbaseOperations2 { }); } + @Override + public List find(String tableName, final List scans, final ResultsExtractor action) { + return execute(tableName, new TableCallback>() { + @Override + public List doInTable(HTable htable) throws Throwable { + List result = new ArrayList(scans.size()); + for (Scan scan : scans) { + ResultScanner scanner = htable.getScanner(scan); + try { + T t = action.extractData(scanner); + result.add(t); + } finally { + scanner.close(); + } + } + return result; + } + }); + } + + @Override + public List> find(String tableName, List scans, RowMapper action) { + return find(tableName, scans, new RowMapperResultsExtractor(action)); + } } diff --git a/src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java b/src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java new file mode 100644 index 000000000..f0d2a7e0c --- /dev/null +++ b/src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java @@ -0,0 +1,40 @@ +package com.profiler.common.hbase; + +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.ResultScanner; +import org.springframework.data.hadoop.hbase.ResultsExtractor; +import org.springframework.data.hadoop.hbase.RowMapper; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; + +/** + * spring꺼가 package라서 그냥 복사해옴. + * Adapter encapsulating the RowMapper callback. + * + * @author Costin Leau + */ +class RowMapperResultsExtractor implements ResultsExtractor> { + + private final RowMapper rowMapper; + + /** + * Create a new RowMapperResultSetExtractor. + * + * @param rowMapper the RowMapper which creates an object for each row + */ + public RowMapperResultsExtractor(RowMapper rowMapper) { + Assert.notNull(rowMapper, "RowMapper is required"); + this.rowMapper = rowMapper; + } + + public List extractData(ResultScanner results) throws Exception { + List rs = new ArrayList(); + int rowNum = 0; + for (Result result : results) { + rs.add(this.rowMapper.mapRow(result, rowNum++)); + } + return rs; + } +} diff --git a/src/main/java/com/profiler/common/util/BytesUtils.java b/src/main/java/com/profiler/common/util/BytesUtils.java index fe15660fe..74c625678 100644 --- a/src/main/java/com/profiler/common/util/BytesUtils.java +++ b/src/main/java/com/profiler/common/util/BytesUtils.java @@ -1,6 +1,8 @@ package com.profiler.common.util; +import org.apache.hadoop.hbase.util.Bytes; + public class BytesUtils { public static byte[] longLongToBytes(long value1, long value2) { @@ -132,4 +134,16 @@ public class BytesUtils { buf[14] = (byte) (value >> 8); buf[15] = (byte) (value); } + + public static byte[] add(String prefix, long postfix) { + byte[] agentByte = Bytes.toBytes(prefix); + return add(agentByte, postfix); + } + + public static byte[] add(byte[] preFix, long fostfix) { + byte[] buf = new byte[preFix.length + 8]; + System.arraycopy(preFix, 0, buf, 0, preFix.length); + writeLong(fostfix, buf, preFix.length); + return buf; + } } diff --git a/src/test/java/com/profiler/common/util/BytesUtilsTest.java b/src/test/java/com/profiler/common/util/BytesUtilsTest.java index 6febeac84..b7b5b229f 100644 --- a/src/test/java/com/profiler/common/util/BytesUtilsTest.java +++ b/src/test/java/com/profiler/common/util/BytesUtilsTest.java @@ -41,4 +41,11 @@ public class BytesUtilsTest { BytesUtils.writeLong(least, bBytes, 8); Assert.assertArrayEquals(add, bBytes); } + + @Test + public void testAddStringLong() throws Exception { + byte[] testAgents = BytesUtils.add("testAgent", 11L); + byte[] buf = Bytes.add(Bytes.toBytes("testAgent"), Bytes.toBytes(11L)); + Assert.assertArrayEquals(testAgents, buf); + } }