title: HBase put fails at second insert
body: <p>I'm using spring data + hbase to write some values into a HBase database.
  Unfortunately the HbaseTemplate seems to close the connection after the first call.</p>
  
  <p>I'm new to Spring and HBase/Hadoop, so i don't know if this is a Spring/HBase Configuration issue or another stupidity</p>
  
  <p>Testclass:</p>
  
  <pre class="lang-java prettyprint-override"><code>package org.springframework.data.hadoop.samples;
  
  import org.apache.hadoop.hbase.client.HTable;
  import org.apache.hadoop.hbase.client.Put;
  import org.apache.hadoop.hbase.util.Bytes;
  import org.junit.Test;
  import org.junit.runner.RunWith;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.ApplicationContext;
  import org.springframework.data.hadoop.hbase.HbaseTemplate;
  import org.springframework.data.hadoop.hbase.TableCallback;
  import org.springframework.test.context.ContextConfiguration;
  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  
  @RunWith(SpringJUnit4ClassRunner.class)
  @ContextConfiguration("/hbase-context.xml")
  public class WordCountWorkflowTest {
  
      @Autowired
      private ApplicationContext ctx;
  
      @Autowired
      private HbaseTemplate hbaseTemplate;
  
      @Test
      public void testWorkflowNS() throws Exception {
          if (hbaseTemplate == null) {
              throw new NullPointerException("template null!");
          }
          // Write to HBase
          InnerTableCallback itc = new InnerTableCallback("JustaString", 42);
          hbaseTemplate.execute("Wordcount", itc);
          itc = new InnerTableCallback("Anotherstring", 23);
          // Here the HBase insert fails
          hbaseTemplate.execute("Wordcount", itc);
      }
  
      @Test
      public void testWorkflowNSSucess() throws Exception {
          System.out.println("done");
      }
  
      /**
       * This is a Inner class providing access to the HBase Table to store the
       * counted words and number of matches.
       * 
       * */
      class InnerTableCallback implements TableCallback&lt;Object&gt; {
  
          String foundStr;
  
          int no;
  
          /**
           * The constructor just saved the given foundStr/no tuple in inner
           * variables.
           * 
           * @param foundstr
           *            string found in the text
           * @param no
           *            number of found matches
           * @return null
           * */
          public InnerTableCallback(String foundStr, int no) {
              this.foundStr = foundStr;
              this.no = no;
          }
  
          /**
           * This Method puts the given String and number of found matches into
           * the HBase table the column family is "cf1" and the column is
           * "matches". The rowname is the found string.
           * */
          @Override
          public Object doInTable(HTable table) throws Throwable {
              Put p = new Put(Bytes.toBytes(foundStr));
              // Put operation on hbase shell:
              // hbase(main):005:0&gt; put 'testtable', 'myrow-2', 'colfam1:q2',
              // 'value-2'
              // add(byte[] family, byte[] qualifier, byte[] value)
              p.add(Bytes.toBytes("cf1"), Bytes.toBytes("matches"),
                      Bytes.toBytes(new Integer(no).toString()));
              table.put(p);
              return null;
          }
      }
  }
  </code></pre>
  
  <p>hbase-context.xml:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;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:p="http://www.springframework.org/schema/p"
      xmlns:hdp="http://www.springframework.org/schema/hadoop"
      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/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd"&gt;
  
      &lt;context:property-placeholder location="classpath:batch.properties,classpath:hadoop.properties"
              ignore-resource-not-found="true" ignore-unresolvable="true" /&gt;
  
      &lt;context:component-scan base-package="org.springframework.data.hadoop.samples" /&gt;
  
      &lt;bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/&gt;
  
      &lt;bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration"/&gt;
  
      &lt;hdp:hbase-configuration&gt;           
      &lt;/hdp:hbase-configuration&gt;
  &lt;/beans&gt;
  </code></pre>
  
  <p>Stacktrace:</p>
  
  <pre><code>org.springframework.data.hadoop.hbase.HbaseSystemException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bb0cc0 closed; nested exception is java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bb0cc0 closed
      at org.springframework.data.hadoop.hbase.HbaseUtils.convertHbaseException(HbaseUtils.java:42)
      at org.springframework.data.hadoop.hbase.HbaseTemplate.convertHbaseAccessException(HbaseTemplate.java:111)
      at org.springframework.data.hadoop.hbase.HbaseTemplate.execute(HbaseTemplate.java:82)
      at org.springframework.data.hadoop.samples.WordCountWorkflowTest.testWorkflowNS(WordCountWorkflowTest.java:35)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:601)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
      ....
  Caused by: java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bb0cc0 closed
      at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:822)
      at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:810)
      at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1492)
      at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1377)
      at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:916)
      at org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:772)
      at org.apache.hadoop.hbase.client.HTable.put(HTable.java:747)
      at org.springframework.data.hadoop.samples.WordCountWorkflowTest$InnerTableCallback.doInTable(WordCountWorkflowTest.java:83)
      at org.springframework.data.hadoop.hbase.HbaseTemplate.execute(HbaseTemplate.java:72)
  </code></pre>
  
  <p>Cheers,R</p>