2012-02-14 5 views
1

У меня есть гибридное веб-приложение, которое запускает файл WAR WAR и файл WAR JRuby в том же Tomcat.Java для JRuby для Resque

Мы решили использовать (JRuby) Resque в качестве нашей очереди заданий. Вызов епдиеих работ выглядит следующим образом:

Resque.enqueue(FooWorker, 111) 

где FooWorker класс работника определяется на и используются боковым JRuby (и включено в WAR файл JRuby), и он вызывается грабли задача JRuby Resque когда он обрабатывает задание из очереди.

Я хотел бы предоставить Java-код возможность запускать задачи в очереди Resque для обработки классом JRuby FooWorker.

Я взглянул на код Томми Чэна по телефону https://github.com/tc/call-jruby-from-java-example. Java файл

//JavaInterfaceExample.java 
interface JavaInterfaceExample{ 
    int add(int a, int b); 
} 

и рубин файл

#JrubyAdderImpl.rb 
require 'java' 

class JrubyAdderImpl 
    include Java::JavaInterfaceExample 

    java_signature 'int add(int, int)' 
    def add(a, b) 
     a+b 
    end 
end 

Я подозреваю, что мой код будет выглядеть следующим образом: Java файл

//ResqueInterfaceExample.java 
interface ResqueInterfaceExample{ 
    int resque_enqueue_foojob(int a); 
} 

рубин файл

#JrubyResqueImpl.rb 
require 'java' 
require 'resque' 

class JrubyResqueImpl 
    include Java::ResqueInterfaceExample 

    java_signature 'int resque_enqueue_foojob(int)' 
    def resque_enqueue_foojob(a) 
    Resque.enqueue(FooWorker, a) 
    end 
end 

My FooWorker - это класс, который находится в каталоге вложенных файлов войны для приложения rails, а файл - app/workers/foo_worker.rb.

Что нужно сделать, чтобы обеспечить компилятор jruby для доступа к обоим классы FooWorker и Resque JRuby для правильной компиляции кода?

ответ

5

Я не уверен в Tomcat, но знаю с Jetty (еще один контейнер сервлетов), вы можете скомпилировать jruby-код в банку и поместить его в каталог lib контейнера.

Или проверить этот проект https://github.com/gresrun/jesque

«Jesque является реализация Resque в Java. Это полностью совместим с реализациями на Ruby и Node.js (кофе-Resque).»

Это позволяет вам выполнять задания изначально из java в resque. Я не использовал его, но он выглядит многообещающим.

+1

хороший! спасибо за указание jesque –

Смежные вопросы