Son 10 km y tiene algunas cuestas, así que mejor no salir demasiado revolucionado :)
Perfil
package papidal.hbase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseTest {
private static Configuration conf = null;
static {
conf = HBaseConfiguration.create();
}
public static void createTable(String tableName, String[] familys)
throws Exception {
HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tableName)) {
System.out.println("La tabla todavía existe!");
} else {
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
for (int i = 0; i < familys.length; i++) {
tableDesc.addFamily(new HColumnDescriptor(familys[i]));
}
admin.createTable(tableDesc);
System.out.println("Creada tabla " + tableName);
}
}
public static void deleteTable(String tableName) throws Exception {
try {
HBaseAdmin admin = new HBaseAdmin(conf);
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("Eliminada tabla " + tableName);
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
}
}
public static void addRecord(String tableName, String rowKey,
String family, String qualifier, String value) throws Exception {
try {
HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(rowKey));
put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes
.toBytes(value));
table.put(put);
System.out.println("Insertado registro " + rowKey + " en la tabla "
+ tableName);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deleteRecord(String tableName, String rowKey)
throws IOException {
HTable table = new HTable(conf, tableName);
List<Delete> list = new ArrayList<Delete>();
Delete del = new Delete(rowKey.getBytes());
list.add(del);
table.delete(list);
System.out.println("Eliminado registro " + rowKey + " de la tabla "+tableName);
}
public static void getOneRecord (String tableName, String rowKey) throws IOException{
HTable table = new HTable(conf, tableName);
Get get = new Get(rowKey.getBytes());
Result rs = table.get(get);
for(KeyValue kv : rs.raw()){
System.out.print(new String(kv.getRow()) + " " );
System.out.print(new String(kv.getFamily()) + ":" );
System.out.print(new String(kv.getQualifier()) + " " );
//System.out.print(kv.getTimestamp() + " " );
System.out.println(new String(kv.getValue()));
}
}
public static void getAllRecord (String tableName) {
try{
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
ResultScanner ss = table.getScanner(s);
for(Result r:ss){
for(KeyValue kv : r.raw()){
System.out.print(new String(kv.getRow()) + " ");
System.out.print(new String(kv.getFamily()) + ":");
System.out.print(new String(kv.getQualifier()) + " ");
//System.out.print(kv.getTimestamp() + " ");
System.out.println(new String(kv.getValue()));
}
}
} catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] agrs) {
try {
String tablename = "corredor";
String[] familys = { "carrera", "localidad"};
HBaseTest.createTable(tablename, familys);
// registro identificado por segundo parámetro
HBaseTest.addRecord(tablename, "papidal", "carrera", "memorial lolete", "43:00:00");
HBaseTest.addRecord(tablename, "papidal", "localidad", "", "Ferrol");
HBaseTest.addRecord(tablename, "papidal", "carrera", "ruta naval", "54:00:00");
HBaseTest.addRecord(tablename, "juan", "carrera", "ruta naval", "30:00:00");
HBaseTest.addRecord(tablename, "juan", "localidad", "", "Foz");
System.out.println("===========Consultar datos papidal========");
HBaseTest.getOneRecord(tablename, "papidal");
System.out.println("===========Mostrar todos los registros========");
HBaseTest.getAllRecord(tablename);
System.out.println("===========Eliminar un registro y mostrar resultado========");
HBaseTest.deleteRecord(tablename, "juan");
HBaseTest.getAllRecord(tablename);
} catch (Exception e) {
e.printStackTrace();
}
}
}
<?xml version="1.0"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <artifactId>spring-activemq-sample</artifactId> <modelVersion>4.0.0</modelVersion> <packaging>war</packaging> <groupId>papidal</groupId> <version>1.0</version> <properties> <releaseCandidate>1</releaseCandidate> <spring.version>3.1.1.RELEASE</spring.version> <java.version>1.5</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.javadoc.reporting.version>2.7</maven.javadoc.reporting.version> <commons.logging.version>1.1.1</commons.logging.version> <log4j.version>1.2.16</log4j.version> <context.path>spring-activemq-sample</context.path> </properties> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>${context.path}</warName> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>3.1.0.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> </dependency> </dependencies> </project>
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- Conexión ActiveMQ --> <Resource name="jms/mqConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory" factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="tcp://localhost:61616" /> <!-- Cola 1 --> <Resource name="jms/testQueueOne" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="TestQueueOne"/> <!-- Cola 2 --> <Resource name="jms/testQueueTwo" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="TestQueueTwo"/> </Context>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"> <!-- Recursos jndi --> <jee:jndi-lookup id="mqConnectionFactory" jndi-name="java:comp/env/jms/mqConnectionFactory" /> <jee:jndi-lookup id="testQueueOne" jndi-name="java:comp/env/jms/testQueueOne" /> <jee:jndi-lookup id="testQueueTwo" jndi-name="java:comp/env/jms/testQueueTwo" /> <!-- Clase que recibe los mensajes --> <bean id="testMessageListener" class="papidal.TestMessageListener"> <property name="testMessageSender" ref ="testMessageSender" /> </bean> <bean id="poiMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref ="mqConnectionFactory" /> <property name="destination" ref ="testQueueOne"/> <property name="messageListener" ref ="testMessageListener"/> <property name="concurrentConsumers" value="2" /> </bean> <!-- Clase que envía los mensajes --> <bean id="testMessageSender" class="papidal.TestMessageSender"> <property name="jmsTemplate" ref="jmsTemplate"/> <property name="testQueue" ref="testQueueTwo"/> </bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="mqConnectionFactory" /> </bean> </beans>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- Fichero de configuración de spring --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/spring-config.xml </param-value> </context-param> <!-- Cargamos el contexto de Spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
package papidal; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.apache.log4j.Logger; public class TestMessageListener implements MessageListener { private TestMessageSender messageSender_i; private static final Logger logger_c = Logger.getLogger(TestMessageListener.class); //Escucha los mensajes public void onMessage(Message message) { logger_c.info("Recibo mensaje de la cola [" + message +"]"); if (message instanceof TextMessage) { try { String msgText = ((TextMessage) message).getText(); logger_c.debug("Mensaje recibido: " + msgText); messageSender_i.sendMessage(msgText); } catch (JMSException jmsEx_p) { String errMsg = "Error obteniendo el mensaje"; logger_c.error(errMsg, jmsEx_p); } } else { String errMsg = "El mensaje no es del tipo TextMessage"; logger_c.error(errMsg); throw new RuntimeException(errMsg); } } public void setTestMessageSender(TestMessageSender messageSender_p) { this.messageSender_i = messageSender_p; } }
package papidal; import javax.jms.JMSException; import javax.jms.Queue; import org.apache.log4j.Logger; import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Service; // Enviamos mensajes a una cola @Service public class TestMessageSender { private JmsTemplate jmsTemplate_i; private Queue testQueue_i; private static final Logger logger_c = Logger .getLogger(TestMessageSender.class); // Envio del mensaje public void sendMessage(String message_p) throws JMSException { logger_c.debug("Ponemos el mensaje en la cola[" + testQueue_i.toString() + "] Mensaje[" + message_p + "]"); jmsTemplate_i.convertAndSend(testQueue_i, message_p); } public void setJmsTemplate(JmsTemplate tmpl) { this.jmsTemplate_i = tmpl; } public void setTestQueue(Queue queue) { this.testQueue_i = queue; } }