RRiBbit 2.0.1 released

RRiBbit is an Open Source Java application framework that eliminates dependencies and simplifies code structure. It can be used as an Eventbus, but improves upon this by being compatible with existing code and allowing bidirectional communication between components.

It also supports Remoting, so that you can use Eventbuses that run on other machines, complete with failover, loadbalancing and SSL/TLS support. The result is what we call a Request-Response-Bus.


New features are:

  • Made RMI RequestDispatcher and RequestProcessor more extendable.

  • Fixed issue involving concurrent caching of requests.
Over the next months, The RRiBbit Eclipse Plugin will be developed, which will make the "call hierarchy" of RRiBbit calls visible, telling you which listeners get called at a certain request.

Please visit www.rribbit.org to download the latest version.
Gert-Jan Schouten, MSc. is a Senior Software Architect / Engineer specialized in Java and Development Infrastructure. At this blog, he writes about his personal visions and thoughts.

Back to blog-index

Share |

9 thoughts on “RRiBbit 2.0.1 released

  1. Hello, when I integrate spring 3.1 with RRiBbit2.0.1, meet error:

    2012-8-8 10:24:32 org.aspectj.weaver.tools.Jdk14Trace error
    严重: defineClass
    Message: error can’t determine implemented interfaces of missing type org.springframework.context.ApplicationContextAware
    when weaving type org.rribbit.creation.SpringBeanClassBasedListenerObjectCreator
    when weaving classes
    when weaving
    [Xlint:cantFindType]
    org.aspectj.bridge.AbortException: can’t determine implemented interfaces of missing type org.springframework.context.ApplicationContextAware
    when weaving type org.rribbit.creation.SpringBeanClassBasedListenerObjectCreator
    when weaving classes
    when weaving
    [Xlint:cantFindType]
    at org.aspectj.weaver.tools.WeavingAdaptor$WeavingAdaptorMessageHolder.handleMessage(WeavingAdaptor.java:671)
    at org.aspectj.weaver.Lint$Kind.signal(Lint.java:325)
    at org.aspectj.weaver.MissingResolvedTypeWithKnownSignature.raiseCantFindType(MissingResolvedTypeWithKnownSignature.java:232)
    at org.aspectj.weaver.MissingResolvedTypeWithKnownSignature.getDeclaredInterfaces(MissingResolvedTypeWithKnownSignature.java:86)
    at org.aspectj.weaver.ResolvedType$2.get(ResolvedType.java:311)
    at org.aspectj.weaver.ResolvedType$2.get(ResolvedType.java:307)
    at org.aspectj.weaver.ResolvedType$SuperInterfaceWalker.hasNext(ResolvedType.java:2227)
    at org.aspectj.weaver.Iterators$6.hasNext(Iterators.java:288)
    at org.aspectj.weaver.patterns.KindedPointcut.fastMatch(KindedPointcut.java:128)
    at org.aspectj.weaver.patterns.AndPointcut.fastMatch(AndPointcut.java:47)
    at org.aspectj.weaver.patterns.AndPointcut.fastMatch(AndPointcut.java:47)
    at org.aspectj.weaver.patterns.AndPointcut.fastMatch(AndPointcut.java:47)
    at org.aspectj.weaver.patterns.OrPointcut.fastMatch(OrPointcut.java:46)
    at org.aspectj.weaver.bcel.BcelWeaver.fastMatch(BcelWeaver.java:1981)
    at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1671)
    at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1638)
    at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1401)
    at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1187)
    at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:468)
    at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:319)
    at org.aspectj.weaver.loadtime.WeavingURLClassLoader.defineClass(WeavingURLClassLoader.java:136)
    at org.aspectj.weaver.bcel.ExtensibleURLClassLoader.defineClass(ExtensibleURLClassLoader.java:97)
    at org.aspectj.weaver.bcel.ExtensibleURLClassLoader.findClass(ExtensibleURLClassLoader.java:52)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1698)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:258)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:417)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1283)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1254)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1331)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:341)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:312)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:420)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1585)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

    Please help me! Thank you!

  2. >> Message: error can’t determine implemented interfaces of missing type org.springframework.context.ApplicationContextAware

    Are you sure you have the spring-context jar file on your classpath? That is the jar that contains the ApplicationContextAware interface. spring-beans and spring-core will not be enough.

    • Thanks!
      yes, I’m sure the spring-context jar in the classpath.
      and when I use maven:

      org.rribbit
      rribbit
      2.0.1
      jar

      then happen error.
      Is RRiBbit not support maven?
      Thank you!

  3. Hmm, this looks like a maven classpath issue. RRiBbit definitely supports Maven, in fact, it’s built with Maven. In the pom.xml, it has:

    org.springframework
    spring-context
    3.0.6.RELEASE
    jar
    compile
    true

    Maybe the problem is that you use a newer version of Spring. Maven should automatically recognize this and use the newest version. You can use

    mvn dependency:tree

    on your project to find out which version of spring-context is being used by your project. Maybe you can try setting the version of spring-context explicitly in your pom.xml.

    How are you using RRiBbit? Have you copied the RRiBbit jar file to your local Maven repo with an automatically generated pom.xml? In that case, you could try replacing that pom.xml with the pom.xml in the RRiBbit jar file.

    ApplicationContextAware has changed between 3.0 and 3.1. In 3.1, it now extends the Aware interface. This could be an issue. I will try to execute RRiBbit with Spring 3.1, it should just work…

  4. I have tried RRiBbit with Spring 3.1.2 and as I suspected, it just works. The ApplicationContextAware interfaces are different between 3.0 and 3.1 though and I think the problem has to do with that. Either the class is not on the classpath or the wrong version is on the classpath. I would like to see the output of the

    mvn dependency:tree

    command, to further analyze dependency problems. I don’t know how you include the RRiBbit jar in your project, but if you use the RRiBbit pom.xml, you could try to exclude the spring-context artifact and then manually listing your own version.

    In the next version of RRiBbit, I will update the Spring dependency to 3.1.2. In the meantime, you can always copy the RRiBbit pom.xml from the jar file (somewhere in the META-INF directory) and change the Spring version manually. 3.1 is drop-in compatible.

  5. Also, do you use Java 1.4? (I saw org.aspectj.weaver.tools.Jdk14Trace). That could be a problem, it is not supported. And since there are org.apache.catalina items in the stacktrace, I assume that the Exception occurs at runtime, not compile time. The spring dependency in the RRiBbit pom.xml has the flag “optional” set to true, so that the spring-context jar is not automatically packaged. This is because not everyone may use the Spring integration. It could be that the jar is on the compile classpath, but not on the runtime classpath. You might want to check the WEB-INF/lib directory to see which jars are there at runtime.

  6. Hello!

    Yes, this is definitely on our list, but will probably take a while. In order to be published on the Maven Repo, you need a publicly available SVN repo and a hashing system to create checksums of all of your artifacts. After that, you need approval from the people who maintain the Maven Repo. But as I said, it’s on the list and will be done before the end of the year.

    In the meantime, if you want to use RRiBbit with Maven, you can extract the RRiBbit pom.xml from the jar file that is available from http://www.rribbit.org/versions.html (it’s in the META-INF\maven\org.rribbit\rribbit directory inside the jar).

    You can then install both the jar file and the pom file with the following command:

    mvn install:install-file -DgroupId=org.rribbit -DartifactId=rribbit -Dversion=2.2.0 -Dfile=rribbit-2.2.0.jar -DpomFile=pom.xml -DgeneratePom=false -Dpackaging=jar

    If you have any more questions or comments, please don’t hesitate to ask. Thanks for using RRiBbit and let me know what you think of it!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>