Running Hystrix in a jBoss WildFly 8.x environment

548 views
Skip to first unread message

Juri Strumpflohner

unread,
Apr 2, 2015, 6:15:56 AM4/2/15
to hystr...@googlegroups.com
Hi,

I'm trying to run Hystrix in a jBoss WildFly 8.x environment together with RestEasy and I'm encountering some issues. Hopefully one can help me out here or give me some hint in the right direction. (Note, I'm quite new to the Java jBoss environment, so bear with me for stupid, newbie questions)

Step 1: Issues with hystrix-core dependencies
Apparently there are some issues with the hystrix compile-time dependencies as already mentioned in this GitHub issue. Solved it like this: https://github.com/Netflix/Hystrix/issues/730#issuecomment-88520313

That solved the issue and I was able to create a simple command, returning a String value.

Step 2: Adding ribbon-httpclient to call remote REST endpoint
As a next step I wanted to implement a more complicated command following this example: https://github.com/Netflix/recipes-rss/blob/master/rss-edge/src/main/java/com/netflix/recipes/rss/hystrix/GetRSSCommand.java

As a result I included the ribbon-httpclient dependency:
<dependency>
 
<groupId>com.netflix.ribbon</groupId>
 
<artifactId>ribbon-httpclient</artifactId>
 
<version>0.1.11</version>
</dependency>

Compilation worked, however when I deployed my project on my WildFly installation I got the following exception:

java.lang.UnsupportedOperationException: JBAS011859: Naming context is read-only
 at org
.jboss.as.naming.WritableServiceBasedNamingStore.requireOwner(WritableServiceBasedNamingStore.java:161)
 at org
.jboss.as.naming.WritableServiceBasedNamingStore.createSubcontext(WritableServiceBasedNamingStore.java:151)
 at org
.jboss.as.naming.NamingContext.createSubcontext(NamingContext.java:390)
 at org
.jboss.as.naming.InitialContext$DefaultInitialContext.createSubcontext(InitialContext.java:296)
 at org
.jboss.as.naming.NamingContext.createSubcontext(NamingContext.java:398)
 at javax
.naming.InitialContext.createSubcontext(InitialContext.java:489)
 at javax
.naming.InitialContext.createSubcontext(InitialContext.java:489)
 at com
.sun.jersey.server.impl.cdi.CDIExtension$1.stepInto(CDIExtension.java:280)
 at com
.sun.jersey.server.impl.cdi.CDIExtension.diveIntoJNDIContext(CDIExtension.java:267)
 at com
.sun.jersey.server.impl.cdi.CDIExtension.createJerseyConfigJNDIContext(CDIExtension.java:273)
 at com
.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:192)
 at com
.sun.jersey.server.impl.cdi.CDIExtension.beforeBeanDiscovery(CDIExtension.java:297)
 at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java
.lang.reflect.Method.invoke(Method.java:483)
 at org
.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
 at org
.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
 at org
.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:125)
 at org
.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
 at org
.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
 at org
.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
 at org
.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:128)
 at org
.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:102)
 at org
.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:63)
 at org
.jboss.weld.bootstrap.events.AbstractDefinitionContainerEvent.fire(AbstractDefinitionContainerEvent.java:35)
 at org
.jboss.weld.bootstrap.events.BeforeBeanDiscoveryImpl.fire(BeforeBeanDiscoveryImpl.java:45)
 at org
.jboss.weld.bootstrap.WeldStartup.startInitialization(WeldStartup.java:324)
 at org
.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootstrap.java:73)
 at org
.jboss.as.weld.WeldStartService.start(WeldStartService.java:91)
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
 at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java
.lang.Thread.run(Thread.java:745)

Browsing on Stackoverflow, this posts explains that apparently the issue can be "resolved" by setting the -Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true flag in the WildFly configuration. By doing so, I now get different exceptions, like

javax.enterprise.event.ObserverException
 at sun
.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun
.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
 at sun
.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java
.lang.reflect.Constructor.newInstance(Constructor.java:408)
 at java
.lang.Class.newInstance(Class.java:433)
 at org
.jboss.weld.security.NewInstanceAction.run(NewInstanceAction.java:33)
 at java
.security.AccessController.doPrivileged(Native Method)
 at org
.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:40)
 at org
.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:78)
 at org
.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:101)
 at org
.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
 at org
.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:125)
 at org
.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
 at org
.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
 at org
.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
 at org
.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:128)
 at org
.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:102)
 at org
.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:63)
 at org
.jboss.weld.bootstrap.events.AbstractDefinitionContainerEvent.fire(AbstractDefinitionContainerEvent.java:35)
 at org
.jboss.weld.bootstrap.events.AfterBeanDiscoveryImpl.fire(AfterBeanDiscoveryImpl.java:55)
 at org
.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:372)
 at org
.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:79)
 at org
.jboss.as.weld.WeldStartService.start(WeldStartService.java:92)
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
 at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java
.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassWriter
 at com
.sun.jersey.server.impl.cdi.BeanGenerator.createBeanClass(BeanGenerator.java:93)
 at com
.sun.jersey.server.impl.cdi.CDIExtension.afterBeanDiscovery(CDIExtension.java:800)
 at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java
.lang.reflect.Method.invoke(Method.java:483)
 at org
.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
 
... 18 more
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassWriter from [Module \"deployment.realmaps.ear.module-maps-rest-1.0-SNAPSHOT.war:main\" from Service Module Loader]
 at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213)
 at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459)
 at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408)
 at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389)
 at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134)
 ... 25 more
"
}}

Again, the poor newbie does a google search and solves the issue adding the asm lib as dependency:
<dependency>
 
<groupId>asm</groupId>
 
<artifactId>asm</artifactId>
 
<version>3.3.1</version>
</dependency>

So far so good, now I'm getting this:
12:14:43,599 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-9) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./maps: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./maps: Failed to start service
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
 at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_20]
 at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_20]
 at java
.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_20]
Caused by: java.lang.NullPointerException
 at com
.sun.jersey.server.impl.cdi.CDIExtension$ParameterBean.later(CDIExtension.java:961)
 at com
.sun.jersey.server.impl.cdi.CDIExtension$ParameterBean.create(CDIExtension.java:977)
 at org
.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69)
 at org
.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733)
 at org
.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:789)
 at org
.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
 at org
.jboss.weld.util.Beans.injectBoundFields(Beans.java:358)
 at org
.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:369)
 at org
.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:72)
 at org
.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:60)
 at org
.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66)
 at org
.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
 at org
.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
 at org
.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90)
 at org
.jboss.resteasy.cdi.JaxrsInjectionTarget.inject(JaxrsInjectionTarget.java:48)
 at org
.jboss.weld.bean.ManagedBean.create(ManagedBean.java:150)
 at org
.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
 at org
.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98)
 at org
.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78)
 at it
.siag.maps.console.rest.RESTConfiguration$Proxy$_$$_WeldClientProxy.getClasses(Unknown Source)
 at org
.jboss.resteasy.spi.ResteasyDeployment.processApplication(ResteasyDeployment.java:481)
 at org
.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:327)
 at org
.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:241)
 at org
.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:112)
 at org
.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:36)
 at io
.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:214)
 at io
.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:119)
 at io
.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:505)
 at org
.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:88)
 at org
.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
 at org
.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
 
... 3 more

:((

Hope someone can give me some suggestions on how I'm able to run hystrix-core and ribbon-httpclient on a jBoss. Or what I'm doing wrong in all this.

Thx a lot!!










Juri Strumpflohner

unread,
Apr 3, 2015, 4:17:06 AM4/3/15
to hystr...@googlegroups.com
Sorry, seems like this was a strange issue within my RestConfiguration class which required a @ServletContext to be injected from CDI. Strangely this worked without the Hystrix libs, but failed as soon as I included them. Will further investigate in this issue.
...
Reply all
Reply to author
Forward
0 new messages