0

我正在尝试在 Rails 3.2 应用程序中将 HBase Java API 与 Trinidad 一起使用。当我将所有 jar 文件放入特立尼达首选的 *.jar 文件夹 Rails.root/lib/jars 时,一切正常。

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

java.rb:

require 'java'

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

Trinidad 启动时没有问题,但是一旦请求到达使用 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 类找不到。

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

4

1 回答 1

1

这可能不是“正确”的答案,但您可以自定义 Trinidad 的 jars 路径以指向/var/apps/jars您的应用程序(使用命令行或trinidad.yml配置)

而不是调整初始化程序,因此当它在 java web-server 中运行时它不会加载 jars(Webrick 是一个 ruby​​ web-server,碰巧在 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 的配置/资源加载的一些了解。

于 2012-06-20T13:12:49.977 回答