我有以下使用java类javax.naming.InitialContext
的jruby代码:
if RUBY_PLATFORM == "java"
require 'java'
import javax.naming.InitialContext
module JndiProperties
def self.getProperty(name)
begin
env.lookup(name).to_s
rescue
nil
end
end
def self.[](name)
getProperty(name)
end
private
def self.env
context = InitialContext.new
environment = context.lookup 'java:comp/env'
environment
end
end
else
module JndiProperties
def self.getProperty(name)
nil
end
def self.[](name)
getProperty(name)
end
end
end
我在database.yml中使用此模块来配置数据库连接。 E.g:
username: <%= JndiProperties['ANTARCTICLE_DB_USER'] || 'root' %>
当我尝试运行rails应用程序时,我得到uninitialized constant JndiProperties::InitialContext
。如果我尝试从irb使用此模块,它将按预期工作。
答案 0 :(得分:1)
只需将导入行放入模块:
module JndiProperties
java_import 'javax.naming.InitialContext'
end
因为它使用const_missing
手动解析或分配常量:
InitialContext = Java::JavaxNaming::InitialContext
甚至应该在模块之外工作