What are you trying to achieve?

2015-02-13 12:36 GMT+03:00 Sleiman Jneidi <[email protected]>:

> To be honest guys I am still confused, especially that that HConnection
> implements Closeable  and hence everyone has the right to close the
> connection. I wrote this code to manage connections but I am not sure about
> its correctness.
>
>
> private static class HConnectionProvider {
>
>   private static HConnection hConnection;
>
>  private static final Lock LOCK = new ReentrantLock();
>
>   static {
>
>  hConnection = createNewConnection();
>
>    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
>
>     @Override
>
>   public void run() {
>
>   if(hConnection!=null && !hConnection.isClosed()){
>
>    try {
>
>    hConnection.close();
>
>    } catch (IOException e) {
>
>    e.printStackTrace();
>
>    }
>
>   }
>
>   }
>
>  }));
>
>  }
>
>   public static HConnection connection(){
>
>  if(!hConnection.isClosed()){
>
>   return hConnection;
>
>  }
>
>  boolean acquired = false;
>
>  try{
>
>   acquired = LOCK.tryLock(5,TimeUnit.SECONDS);
>
>   if(hConnection.isClosed()){
>
>   hConnection = createNewConnection();
>
>   }
>
>   return hConnection;
>
>     } catch (InterruptedException e) {
>
>   throw new RuntimeException(e);
>
>  }finally{
>
>   if(acquired){
>
>   LOCK.unlock();
>
>   }
>
>  }
>
>    }
>
>   private static HConnection createNewConnection(){
>
>  try {
>
>   HConnection connection = HConnectionManager.createConnection(config);
>
>   return connection;
>
>  } catch (IOException e) {
>
>   throw new RuntimeException(e);
>
>  }
>
>  }
>
>   }
>
> On Fri, Feb 13, 2015 at 8:57 AM, Serega Sheypak <[email protected]>
> wrote:
>
> > Hi, really, I can share one Hconnection for the whole application.
> > It's done by design. I have several servlets. Each servlet has 1-2
> > controllers working with hbase internally (put/get/e.t.c)
> > Right now I don't see any reason to refactor code and share single
> > HConnection for all controllers in servlets.
> >
> >
> > 2015-02-13 6:56 GMT+03:00 David chen <[email protected]>:
> >
> > > Hi Serega,
> > > I am very interesting in the reason why per application need to create
> 5
> > > instead of only one HConnection instances during servlet
> initialization?
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > At 2015-02-04 01:01:38, "Serega Sheypak" <[email protected]>
> > wrote:
> > > >Hi, guys from group helped me a lot. I did solve pretty the same
> problem
> > > >(CRUD web-app)
> > > >
> > > >1. Use single instance of HConnection per application.
> > > >2. Instantiate it once.
> > > >3. create HTable instance for each CRUD operation and safely close it
> > > >(try-catch-finally). Use the same HConnection to create any HTable for
> > > CRUD
> > > >operation.
> > > >4. DO NOT close HConnection after CRUD operation
> > > >
> > > >I have logic controllers which get HConnection injection in
> > > >HttpServlet.init method.
> > > >So I have 5 HConnection instances per application created during
> servlet
> > > >initialization
> > > >
> > > >
> > > >2015-02-03 18:12 GMT+03:00 Ted Yu <[email protected]>:
> > > >
> > > >> Please see '61.1. Cluster Connections' under
> > > >> http://hbase.apache.org/book.html#architecture.client
> > > >>
> > > >> Cheers
> > > >>
> > > >> On Tue, Feb 3, 2015 at 6:47 AM, sleimanjneidi <
> > [email protected]
> > > >
> > > >> wrote:
> > > >>
> > > >> > Hi all,
> > > >> > I am using hbase-0.98.1-cdh5.1.4 client and I am a bit confused by
> > the
> > > >> > documentation of HConnection. The document says the following:
> > > >> >
> > > >> > HConnection instances can be shared. Sharing is usually what you
> > want
> > > >> > because rather than each HConnection instance having to do its own
> > > >> > discovery of regions out on the cluster, instead, all clients get
> to
> > > >> share
> > > >> > the one cache of locations. HConnectionManager does the sharing
> for
> > > you
> > > >> if
> > > >> > you go by it getting connections. Sharing makes cleanup of
> > > HConnections
> > > >> > awkward. .
> > > >> >
> > > >> > So now I have a simple question: Can I share the same HConnection
> > > >> instance
> > > >> > in my entire application?
> > > >> > And write some magic code to know when to close or never close at
> > all?
> > > >> > Or I have to create an instance and close it every time I do a
> CRUD
> > > >> > operation ?
> > > >> >
> > > >> > Many thanks
> > > >> >
> > > >> >
> > > >> >
> > > >>
> > >
> >
>

Reply via email to