向ActiveJDBC添加对Phoenix的支持需要哪些步骤?

向ActiveJDBC添加对Phoenix的支持需要哪些步骤?,phoenix,activejdbc,Phoenix,Activejdbc,我正在尝试向ActiveJDBC添加一些对ApachePhoenix的支持。我正在使用ActiveJDBC简单示例项目作为测试,并对ActiveJDBC 2.0-SNAPSHOT(github的最新版本)的克隆进行更改 到目前为止,在ActiveJDBC 2.0-SNAPSHOT中,我有: 在org.javalite.activejdbc.dialogs中创建了一个PhoenixDialect类来 重写插入方法(Phoenix使用UPSERT) 在中的GetDialogue(String db

我正在尝试向ActiveJDBC添加一些对ApachePhoenix的支持。我正在使用ActiveJDBC简单示例项目作为测试,并对ActiveJDBC 2.0-SNAPSHOT(github的最新版本)的克隆进行更改

到目前为止,在ActiveJDBC 2.0-SNAPSHOT中,我有:

  • 在org.javalite.activejdbc.dialogs中创建了一个PhoenixDialect类来 重写插入方法(Phoenix使用UPSERT)
  • 在中的GetDialogue(String dbType)方法中添加了一个if节 配置
在这个简单的示例项目中,我有:

  • 添加了phoenix客户端作为依赖项(我们使用phoenix作为 HBase 1.1.2.2.5上HortonWorks HDP 2.5.3.0的一部分)
  • 使用Phoenix值设置database.properties
  • 在Phoenix中手动创建相关表(db迁移 (由于明显的原因不能工作)
但是,数据库方言没有被识别,而且我相信,由于我在使用“INSERT”时遇到了Phoenix语法中无法识别的Phoenix错误,因此默认为DefaultDialogue

在添加对其他方言的支持时,是否缺少其他步骤

我还怀疑Phoenix jdbc驱动程序可能不支持getDbName()类型的方法,Phoenix驱动程序在请求getPropertyInfo()时返回空的_信息,请参阅

如果驱动程序不返回DbName,是否有解决方法

值得一提的是,我们正在使用标准Java jdbc类(PreparedStatement和所有这些好东西)成功地与Phoenix进行交互,但ActiveJDBC要优雅得多,我们希望使用它

到目前为止,我们拥有的部分:

PhoenixDialect

import java.util.Iterator;
import java.util.Map;

import org.javalite.activejdbc.MetaModel;
import static org.javalite.common.Util.join;

public class PhoenixDialect extends DefaultDialect {

    @Override
    public String insert(MetaModel metaModel, Map<String, Object> attributes) {
       StringBuilder query = new StringBuilder().append("UPSERT INTO ").append(metaModel.getTableName()).append(' ');
       if (attributes.isEmpty()) {
           appendEmptyRow(metaModel, query);
       } else {
           boolean addIdGeneratorCode = (metaModel.getIdGeneratorCode() != null
                   && attributes.get(metaModel.getIdName()) == null); // do not use containsKey
           query.append('(');
           if (addIdGeneratorCode) {
               query.append(metaModel.getIdName()).append(", ");
           }
           join(query, attributes.keySet(), ", ");
           query.append(") VALUES (");
           if (addIdGeneratorCode) {
               query.append(metaModel.getIdGeneratorCode()).append(", ");
           }
           Iterator<Object> it = attributes.values().iterator();
           appendValue(query, it.next());
           while (it.hasNext()) {
               query.append(", ");
               appendValue(query, it.next());
           }
           query.append(')');
       }
       return query.toString();
   }
}
数据库.properties

development.driver=org.apache.phoenix.jdbc.PhoenixDriver
development.username=anything
development.password=anything
development.url=jdbc:phoenix:hdp-c21:2181:/hbase-unsecure

下面是一个用于将SQLServer与新方言、测试套件和其他相关内容集成的分支:

以下是h2的一个分支:


从那时起,情况可能发生了变化,但本分支将为您提供良好的指导。如果你完成了这个项目,并在完成后以请求的形式提交你的工作,那就最好了

这里有一个分支,用于将SQLServer与新方言、测试套件和其他相关内容集成:

以下是h2的一个分支:

从那时起,情况可能发生了变化,但本分支将为您提供良好的指导。如果你完成了这个项目,并在完成后以请求的形式提交你的工作,那就最好了

development.driver=org.apache.phoenix.jdbc.PhoenixDriver
development.username=anything
development.password=anything
development.url=jdbc:phoenix:hdp-c21:2181:/hbase-unsecure