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