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类不是线程安全的。调用closeHTableInterface方法将自动将表返回到池中。

请注意,在较新的HBase版本中,存在HConnection接口(interface)替换了已弃用的HTablePool

09-25 17:18