在jboss中部署包含phoenix客户端的应用程序war时出现的问题

在jboss中部署包含phoenix客户端的应用程序war时出现的问题,jboss,hbase,phoenix,Jboss,Hbase,Phoenix,我一直在尝试开发一个web应用程序,它通过rest获取数据,并使用phoenix在hbase中插入相同的数据。我曾尝试在tomcat上部署我的应用程序,效果很好。但是is在jboss上部署时抛出以下运行时异常 原因:java.lang.RuntimeException:hbase-default.xml文件似乎是针对旧版本的hbase(null),此版本为0.94.7 位于org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersio

我一直在尝试开发一个web应用程序,它通过rest获取数据,并使用phoenix在hbase中插入相同的数据。我曾尝试在tomcat上部署我的应用程序,效果很好。但是is在jboss上部署时抛出以下运行时异常

原因:java.lang.RuntimeException:hbase-default.xml文件似乎是针对旧版本的hbase(null),此版本为0.94.7 位于org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:68) 位于org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:100) 位于org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:111) 位于com.salesforce.phoenix.query.ConfigurationFactory$ConfigurationFactoryImpl.getConfiguration(ConfigurationFactory.java:51) 位于com.salesforce.phoenix.query.QueryServicesOptions.WithDefault(QueryServicesOptions.java:99) 在com.salesforce.phoenix.query.QueryServicesImpl.(QueryServicesImpl.java:44) 位于com.salesforce.phoenix.jdbc.PhoenixDriver(PhoenixDriver.java:67) 位于com.salesforce.phoenix.jdbc.PhoenixDriver(PhoenixDriver.java:58) ... 还有11个

首先,我认为类path有两个默认的xml,它会抛出错误,因为其中一个来自某个旧版本的hbase jar。但是类路径没有hbase jar。它只有一个phoenix-2.0.1-client.jar。在那之后,我尝试了以下的事情

  • 在hbase-site.xml中将“hbase.default.for.version.skip”设置为true,并将其添加到类路径中
  • 在hbase-default.xml中将“hbase.default.for.version.skip”设置为true
  • 为了实验起见,我还尝试删除hbase-default.xml
  • 到目前为止,一切都不起作用。结果是恒定的。我正在使用cloudera hbase cdh 4.4。 任何帮助都将不胜感激。 提前感谢。

    相关:

    解决方案似乎是从phoenix--client.jar(或phoenix-core-.jar)中删除META-INF/services/java.sql.Driver,而是在代码中的某个地方使用Class.forName(“com.salesforce.phoenix.jdbc.PhoenixDriver”),因为Jboss似乎对jar进行了不同于tomcat的重新排序

    这对我来说很有效(假设phoenix安装在本地maven存储库中):

    JBoss/Phoenix集成的附加技巧—JBoss抛出此错误,因为默认情况下它包含Resteasy JAX-RS实现,而Hbase使用Jersey JAX-RS JAR,这会导致冲突(如中所示):

    要修复添加到~/your_phoenix_restservice/src/main/webapp/WEB-INF/WEB.xml的问题,请执行以下操作:

    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>
    
    
    轻松扫描
    假的
    resteasy.scan.providers
    假的
    resteasy.scan.resources
    假的
    
    另外,在启动时初始化hbase连接也是一个好主意,这可以使用InitServlet完成,如中所述

    作为补充说明,您是否介意为phoenix开放RESTAPI版本?这将有助于我们和其他一些人

     "org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011232: Only one JAX-RS Application Class allowed"
    
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>