HTablePool的正确使用模式是什么?我的意思是,假设我有用HTablePool实例初始化的DAO。该DAO是无状态 session Bean的成员实例,因此可以在调用之间重用。
以下各项之间的正确用法是什么?
private HTableInterface aTable;
public XYZDAO(final HTablePool pool)
{
this.aTable = pool.getTable(...);
}
public void doSomething(...)
{
aTable.get(...)
}
或HTablePool应该像数据源一样使用,因此更合适的用法是这样
private HTablePool datasource;
public XYZDAO(final HTablePool pool)
{
this.datasource = pool;
}
public void doSomething(...)
{
HTableInterface aTable = datasource.getTable(...);
aTable.get(...);
aTable.close();
}
最佳答案
第二种方法是最好的,您应该像使用HTablePool
一样使用Datasource
,因为HTable
类不是线程安全的。调用close
的HTableInterface
方法将自动将表返回到池中。
请注意,在较新的HBase版本中,存在HConnection
接口(interface)替换了已弃用的HTablePool
。