2012-06-18 54 views
0

我想在Rails 3.2应用程序中使用Trinidad的HBase Java API。 当我将所有的jar文件放入Rails.root/lib/jar文件(这是Trinidad首选的* .jar文件夹)时,一切正常。试图通过JRuby on Rails/Trinidad访问HBase Java API

当我尝试通过java.rb初始化文件(在config/initializers中)从项目中分离出jar文件时,它将无法正常工作。 (随着WebBrick,一切工作进展顺利,但我们不能在生产中使用它。)

java.rb:

require 'java' 

Dir['/var/apps/jars/*.jar'].each do |jar| 
    require jar 
end 

特立尼达启动没有问题,但一旦请求达到使用HBaseConfiguration控制器级以下错误被抛出:

Java::JavaLang::RuntimeException (hbase-default.xml file seems to be for and old version of HBase (null), this version is 0.90.6-cdh3u4): 

看来,HBase的-default.xml中捆绑HBase的-0.90.6-cdh3u4.jar文件中,但不能由HBaseConfiguration类中找到。

你有关于如何解决这个问题的想法?

回答

1

这可能不会是“正确”的答案,但你可以自定义特立尼达的罐子路径指向/var/apps/jars为您的应用程序(使用命令行或与trinidad.yml配置)

比调整初始化程序,所以当它运行在一个Java Web服务器中时,它不会加载罐子(Webrick是一个ruby网络服务器,在JRuby中正常运行,因为它在纯Ruby中编写)例如:

Dir['/var/apps/jars/*.jar'].each do |jar| 
    require jar 
end unless defined?($servlet_context) 

为您遇到它最有可能hbase.jar和/或hadoop.jar特定(类加载器将看在一个简单的JRuby应用程序和JRuby的servlet应用不同)的问题,这是很难告诉没有更多的信息,如堆栈跟踪,jar版本,最重要的是对hadoop的配置/资源加载的一些理解。