标签: jruby

如何使用JRuby和JDBC连接到Oracle

第一种方法:裸金属

require 'java'
require 'rubygems'
require "c:/ruby/jruby-1.2.0/lib/ojdbc14.jar"  # should be redundant, but tried it anyway
odriver = Java::JavaClass.for_name("oracle.jdbc.driver.OracleDriver")
puts odriver.java_class
url = "jdbc:oracle:thin:@myhost:1521:mydb"
puts "About to connect..."
con = java.sql.DriverManager.getConnection(url, "myuser", "mypassword");
if con
    puts " connection good"
else
    puts " connection failed"
end
Run Code Online (Sandbox Code Playgroud)

以上结果是:

sqltest.rb:4: cannot load Java class oracle.jdbc.driver.OracleDriver (NameError)
Run Code Online (Sandbox Code Playgroud)

第二种方法:积极记录

require 'rubygems'
gem 'ActiveRecord-JDBC'
require 'jdbc_adapter'
require 'active_record'
require 'active_record/version'
require "c:/ruby/jruby-1.2.0/lib/ojdbc14.jar"  # should be redundant...

ActiveRecord::Base.establish_connection(
   :adapter => 'jdbc',
   :driver => 'oracle.jdbc.driver.OracleDriver',
   :url => 'jdbc:oracle:thin:@myhost:1521:mydb',
   :username=>'myuser', …
Run Code Online (Sandbox Code Playgroud)

oracle jruby jdbc

6
推荐指数
2
解决办法
1万
查看次数

在Java应用程序中使用ERB模板的参考(通过JRuby)

我有一个遗留的Ruby命令行工具,它使用(用户提供的)ERB模板来格式化数据.我需要用Java重写这个工具,但我需要避免让每个人用不同的模板语言重写他们的ERB模板.

我想我可以用嵌入式JRuby做到这一点,但我从未使用它.

从Java应用程序使用ERB有什么好的例子或参考吗?

ruby java jruby erb

6
推荐指数
1
解决办法
2250
查看次数

麻烦在jruby中使用java类

我正试图在jruby中使用Java Opencl,但遇到了一个我无法解决的问题,即使有很多谷歌搜索.

require 'java'
require 'JOCL-0.1.7.jar'

platforms = org.jocl.cl_platform_id.new
puts platforms.class
org.jocl.CL.clGetPlatformIDs(1, platforms, nil)
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令运行此代码时:jruby test.rb当取消注释最后一行时,我收到以下错误:

#<Class:0x10191777e>
TypeError: cannot convert instance of class org.jruby.java.proxies.ConcreteJavaP
roxy to class [Lorg.jocl.cl_platform_id;
  LukeTest at test.rb:29
    (root) at test.rb:4
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有人知道如何解决这个问题?

编辑:好吧所以我想通过使平台成为一个数组我已经解决了这个问题的第一部分:

platforms = org.jocl.cl_platform_id[1].new
Run Code Online (Sandbox Code Playgroud)

但是在添加下几行时会导致此错误:

context_properties = org.jocl.cl_context_properties.new()
context_properties.addProperty(org.jocl.CL::CL_CONTEXT_PLATFORM, platforms[0])
Run Code Online (Sandbox Code Playgroud)
CodegenUtils.java:98:in `human': java.lang.NullPointerException
    from CodegenUtils.java:152:in `prettyParams'
    from CallableSelector.java:462:in `argumentError'
    from CallableSelector.java:436:in `argTypesDoNotMatch'
    from RubyToJavaInvoker.java:248:in `findCallableArityTwo'
    from InstanceMethodInvoker.java:66:in `call'
    from CachingCallSite.java:332:in `cacheAndCall'
    from CachingCallSite.java:203:in `call'
    from test.rb:36:in `module__0$RUBY$LukeTest'
    from test.rb:-1:in `module__0$RUBY$LukeTest'
    from test.rb:4:in `__file__' …
Run Code Online (Sandbox Code Playgroud)

ruby java jruby

6
推荐指数
1
解决办法
236
查看次数

新的 Ruby 1.9 哈希语法

new_hash = {:simon => "Talek", :lorem => "Ipsum"}
Run Code Online (Sandbox Code Playgroud)

可以替换为

new_hash = {simon: "Talek", lorem: "Ipsum"}
Run Code Online (Sandbox Code Playgroud)

还有更短的写法吗

:on => :collection
Run Code Online (Sandbox Code Playgroud)

应用相同的逻辑会引发错误:

on: :collection
Run Code Online (Sandbox Code Playgroud)

更新以提供更多信息:

在我的 routes.rb 中:

get 'detail', { on: :member } 
Run Code Online (Sandbox Code Playgroud)

不起作用。也没有

get 'detail',  on: :member 
Run Code Online (Sandbox Code Playgroud)

错误:

Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23: 
  syntax error, unexpected ':'

      get 'detail', { on: :member }
Run Code Online (Sandbox Code Playgroud)

或者

Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23: 
  syntax error, unexpected ':'

      get 'detail', on: :member
Run Code Online (Sandbox Code Playgroud)

ruby jruby syntax-error

6
推荐指数
1
解决办法
3857
查看次数

JRuby - 如何启动垃圾收集器?

我启动了我的JRuby irb控制台并键入:

irb(main):037:0* GC.enable
(irb):37 warning: GC.enable does nothing on JRuby
=> true
irb(main):038:0> GC.start
=> nil
irb(main):039:0> 
Run Code Online (Sandbox Code Playgroud)

如何在程序中手动启用或启动JVM垃圾?

我问,因为我有一个程序需要生成大约500 MB的测试数据并将其保存在MySQL中.该程序使用大约5个级别的嵌套循环,并且在生成大约100 MB的测试数据后,它因JVM内存堆异常而崩溃,因为没有更多的堆内存.我想让垃圾收集器在外循环的每次运行之后运行,以便可以清除在内循环中创建的所有孤立对象.

garbage-collection jvm jruby

6
推荐指数
1
解决办法
2268
查看次数

访问JRuby中的Scala数据结构

看起来Java数据结构从JRuby访问它们时会有一些神奇的转换; 它们似乎像纯红宝石地图和数组一样工作.但是,Scala数据结构没有.当我在Google上搜索JRuby/Scala互操作时,我发现很少见.例如,你将如何迭代Scala MapList类型?

interop scala jruby

6
推荐指数
1
解决办法
600
查看次数

如何导入jruby中的所有包?

在java中你可以做这样的事情,包括java命名空间下的所有包.

import java.*;
Run Code Online (Sandbox Code Playgroud)

https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby 他们建议使用include_packageimport.我也试过java_packagejava_import.有没有办法像这样导入,或者你只需​​要你需要的pacakges.

ruby java jruby

6
推荐指数
1
解决办法
1176
查看次数

使用--indy执行冒泡排序的速度要慢5倍

我写了一个冒泡排序的实现,与Groovy一起玩,看看是否--indy对性能有任何明显的影响.

从本质上讲,它对一千个随机整数的列表进行了一千次排序,并测量了对列表进行排序的平均执行时间.

列表Integer[]的一半是一个,另一半是一个ArrayList<Integer>.

结果让我很困惑:

$ groovyc BubbleSort.groovy
$ time java -cp ~/.gvm/groovy/current/embeddable/groovy-all-2.4.3.jar:. BubbleSort
Average: 22.926ms
Min: 11.202ms
[...] 26.48s user 0.84s system 109% cpu 25.033 total

$ groovyc --indy BubbleSort.groovy
$ time java -cp ~/.gvm/groovy/current/embeddable/groovy-all-2.4.3-indy.jar:. BubbleSort
Average: 119.766ms
Min: 68.251ms
[...] 166.05s user 1.52s system 135% cpu 2:03.82 total
Run Code Online (Sandbox Code Playgroud)

查看基准测试运行时的CPU使用情况,编译时的CPU使用率--indy要比非编译时高很多.

CPU使用率

这引起了我的兴趣所以我再次运行基准测试 - 但这次启用了Yourkit代理和CPU跟踪.以下是录制的呼叫树:

没有--indy: 不使用<code>--indy</code>:
<a rel=使用<code>--indy</code>代码速度慢得多.</p>

<p>没有<code>--indy</code>(1s比例):
<a rel=没有<code>--indy</code>(60s规模):
<a rel=<code>--indy</code>但在编译时则在12.5%和~35%之间变化很大<code>--indy</code>.更令人困惑的是,Yourkit只报告一个活动线程(我的代码只使用主线程),但仍然设法保留两个半核心.</p>

<p>编译的代码<code>--indy</code>在开始时也使用了大量的内核时间,虽然这会在一段时间内下降并稳定在0% …</p> </div>
        <p>
          <a href=groovy jruby invokedynamic java-8

6
推荐指数
1
解决办法
653
查看次数

为什么truffleruby需要C扩展?

目前的状态truffleruby:

TruffleRuby正在快速发展,但目前可能尚未准备好尝试运行完整的Ruby应用程序.缺少对OpenSSL和Nokogiri等关键C扩展的支持.

为什么truffleruby需要C扩展?它建立在构建于JVM之上的GraalVM之上,它实际上是JRuby的一个分支:

TruffleRuby是JRuby的一个分支,它将它与Rubinius项目的代码结合在一起,并且还包含来自Ruby,MRI标准实现的代码.

难道他们不能使用JRuby世界宝石而不是依赖于他们的C变种吗?

编辑链接到github上的问题

ruby jruby truffleruby graalvm

6
推荐指数
1
解决办法
327
查看次数

为什么 ActiveSupport::JSON.encode 这么慢?

JRuby 9.2,Rails 4.2

我一直在读取/转储大型 JSON 对象,100+MB 的文件,这些文件通常会挂起几分钟,然后在写出它们时内存不足。

我注意到它在使用to_json. 下面是一个 4MB 的文件,所以它实际上完成了:

pry(main)> f = File.open('nvdcve-1.0-recent.json'){|f| JSON.load(f) }
pry(main)> puts Benchmark.measure{ JSON.dump(f) }
  0.230000   0.010000   0.240000 (  0.081894)
=> nil
pry(main)> puts Benchmark.measure{ f.to_json }
  1.020000   0.020000   1.040000 (  0.820851)
=> nil
Run Code Online (Sandbox Code Playgroud)

问题的根源在于 ActiveSupport 覆盖to_json了很多东西:

pry(main)> f.method(:to_json)
=> #<Method: Hash#to_json(to_json_with_active_support_encoder)>
pry(main)> puts Benchmark.measure{ f.to_json_without_active_support_encoder }
  0.040000   0.000000   0.040000 (  0.035408)
pry(main)> puts Benchmark.measure{ f.to_json_with_active_support_encoder }
  1.170000   0.010000   1.180000 (  0.812674)
Run Code Online (Sandbox Code Playgroud)

请参阅此处:https : //apidock.com/rails/Object/to_json_with_active_support_encoder

那么究竟是ActiveSupport::JSON.encode什么与 …

ruby json ruby-on-rails jruby ruby-on-rails-4

6
推荐指数
2
解决办法
884
查看次数