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);
+ }
}