Skip to content

Instantly share code, notes, and snippets.

@f16z
Created January 22, 2013 22:33
Show Gist options
  • Select an option

  • Save f16z/4599296 to your computer and use it in GitHub Desktop.

Select an option

Save f16z/4599296 to your computer and use it in GitHub Desktop.
Calling JRuby code from a Java bean managed by Spring.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms" xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd">
<lang:jruby id="serviceProvider"
script-source="RubyServiceProvider.rb"
script-interfaces="ServiceProvider">
</lang:jruby>
</beans>
require 'java'
include_class 'ServiceProvider'
class RubyServiceProvider < ServiceProvider
def decryptJob(s)
puts "DECRYPT JOB"
end
end
RubyServiceProvider.new
public interface ServiceProvider {
public void decryptJob(String str);
}
package testing;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestJRubyIntegration {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("jruby-applicationContext.xml");
ServiceProvider sp = (ServiceProvider) context.getBean("serviceProvider");
}
}
@f16z
Copy link
Author

f16z commented Jan 22, 2013

/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/bin/java -Didea.launcher.port=7554 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 12.app/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/javafx-doclet.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/htmlconverter.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/JObjC.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Users/panchisco/IdeaProjects/websandbox/out/production/websandbox:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-core-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-jaas-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jcl-over-slf4j-1.6.6.jar:/Users/panchisco/IdeaProjects/websandbox/lib/geronimo-jta_1.0.1B_spec-1.0.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/geronimo-jms_1.1_spec-1.1.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-protobuf-1.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/slf4j-api-1.6.6.jar:/Users/panchisco/IdeaProjects/websandbox/lib/kahadb-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-console-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-web-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/velocity-1.7.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-core-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-spring-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-net-3.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/woodstox-core-asl-4.1.4.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-pool-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/slf4j-log4j12-1.6.6.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activeio-core-3.1.4.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-aop-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-dbcp-1.4.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-oxm-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/httpclient-4.2.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-expression-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/xpp3-1.1.4c.jar:/Users/panchisco/IdeaProjects/websandbox/lib/xbean-spring-3.11.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jmdns-3.4.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-codec-1.6.jar:/Users/panchisco/IdeaProjects/websandbox/lib/httpcore-4.2.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jasypt-spring3-1.9.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-beanutils-1.8.3.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-pool-1.6.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-xmpp-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-beans-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/org.apache.servicemix.bundles.josql-1.5_5.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-context-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/log4j-1.2.17.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jettison-1.3.2.jar:/Users/panchisco/IdeaProjects/websandbox/lib/activemq-optional-5.7.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-lang-2.6.jar:/Users/panchisco/IdeaProjects/websandbox/lib/commons-collections-3.2.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-jms-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-asm-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/stax2-api-3.0.2.jar:/Users/panchisco/IdeaProjects/websandbox/lib/geronimo-j2ee-connector_1.5_spec-2.0.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-tx-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jasypt-1.9.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/xstream-1.4.3.jar:/Users/panchisco/IdeaProjects/websandbox/lib/rome-1.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/geronimo-servlet_2.5_spec-1.2.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jetty-all-server-7.6.7.v20120910.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-webmvc-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/core-3.1.1.jar:/Users/panchisco/IdeaProjects/websandbox/lib/sitemesh-2.4.2.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jsp-2.1-glassfish-2.1.v20100127.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jsp-api-2.1-glassfish-2.1.v20100127.jar:/Users/panchisco/IdeaProjects/websandbox/lib/spring-web-3.0.7.RELEASE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jetty-websocket-7.6.7.v20120910.jar:/Users/panchisco/IdeaProjects/websandbox/lib/jdom-1.0.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_it.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derby.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_fr.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_pl.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_ko_KR.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_ru.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbynet.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyrun.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_pt_BR.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_hu.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbytools.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_zh_CN.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyclient.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_de_DE.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_cs.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_ja_JP.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_es.jar:/Users/panchisco/IdeaProjects/websandbox/lib/derbyLocale_zh_TW.jar:/Users/panchisco/IdeaProjects/websandbox/lib/aopalliance.jar:/Applications/IntelliJ IDEA 12.app/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain TestJRubyIntegration
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serviceProvider': BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scriptFactory.serviceProvider': Resolution of declared constructors on bean Class [org.springframework.scripting.jruby.JRubyScriptFactory] from ClassLoader [sun.misc.Launcher$AppClassLoader@6c5bdfae] failed; nested exception is java.lang.NoClassDefFoundError: org/jruby/exceptions/JumpException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:451)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at TestJRubyIntegration.main(TestJRubyIntegration.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scriptFactory.serviceProvider': Resolution of declared constructors on bean Class [org.springframework.scripting.jruby.JRubyScriptFactory] from ClassLoader [sun.misc.Launcher$AppClassLoader@6c5bdfae] failed; nested exception is java.lang.NoClassDefFoundError: org/jruby/exceptions/JumpException
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:160)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1002)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:906)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:484)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.scripting.support.ScriptFactoryPostProcessor.prepareScriptBeans(ScriptFactoryPostProcessor.java:334)
at org.springframework.scripting.support.ScriptFactoryPostProcessor.postProcessBeforeInstantiation(ScriptFactoryPostProcessor.java:283)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:847)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:819)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:445)
... 15 more
Caused by: java.lang.NoClassDefFoundError: org/jruby/exceptions/JumpException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
at java.lang.Class.getDeclaredConstructors(Class.java:1853)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:157)
... 28 more
Caused by: java.lang.ClassNotFoundException: org.jruby.exceptions.JumpException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 32 more

Process finished with exit code 1

@f16z
Copy link
Author

f16z commented Jan 22, 2013

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scriptFactory.serviceProvider': Resolution of declared constructors on bean Class [org.springframework.scripting.jruby.JRubyScriptFactory] from ClassLoader [sun.misc.Launcher$AppClassLoader@6c5bdfae] failed; nested exception is java.lang.NoClassDefFoundError: org/jruby/exceptions/JumpException

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment