4 Replies Latest reply on Mar 14, 2013 3:15 PM by lehvolk

    EJB as Resteasy client -> ClassNotFoundException

    korki

      Hi all,

       

      I am trying develop an EJB which is calling an external Webservice using the Resteasy Client Framework. It seems that the modules are integrated in the actual JBoss AS 7.1.1 delivery.

       

       

      import java.net.URI;
      
      import javax.ejb.EJB;
      import javax.ejb.Schedule;
      import javax.ejb.Singleton;
      
      import org.jboss.resteasy.client.ClientRequest;
      
      
      @Singleton
      public class TimerService {
        
          @Schedule(second="*", minute="*",hour="*", persistent=false)
          public void doWork(){
              ClientRequest clientRequest = new ClientRequest("http://uriToMyWebservice:8080/rest");
              // OTHER CODE...      
          }
      }
      

       

      When creating a new ClientRequest I get the following Exception:

       

       

      08:20:26,030 ERROR [org.jboss.as.ejb3] (EJB default - 3) JBAS014122: Error during retrying timeout for timer: [id=d2853aa7-780f-4565-bcf1-dbee60087c6c timedObjectId=server-core-0.0.1-SNAPSHOT.server-core-0.0.1-SNAPSHOT.TimerService auto-timer?:true persistent?:false timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@28a29e6d initialExpiration=Mon Jul 30 00:00:00 CEST 2012 intervalDuration(in milli sec)=0 nextExpiration=Mon Jul 30 08:20:27 CEST 2012 timerState=RETRY_TIMEOUT: javax.ejb.EJBException: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl from [Module "javax.ws.rs.api:main" from local module loader @7ab7b3f9 (roots: /opt/jboss-as-7.1.1.Final/modules)]
          at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.ejb3.tx.TimerCMTTxInterceptor.handleExceptionInOurTx(TimerCMTTxInterceptor.java:52) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:43) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ejb3.timerservice.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:101) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.ejb3.timerservice.task.CalendarTimerTask.callTimeout(CalendarTimerTask.java:60) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.ejb3.timerservice.task.TimerTask.run(TimerTask.java:132) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [rt.jar:1.6.0_31]
          at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [rt.jar:1.6.0_31]
          at java.util.concurrent.FutureTask.run(FutureTask.java:138) [rt.jar:1.6.0_31]
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_31]
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_31]
          at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_31]
          at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.0.0.GA.jar:2.0.0.GA]
      Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl from [Module "javax.ws.rs.api:main" from local module loader @7ab7b3f9 (roots: /opt/jboss-as-7.1.1.Final/modules)]
          at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:134)
          at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:96)
          at org.jboss.resteasy.spi.ResteasyProviderFactory.getInstance(ResteasyProviderFactory.java:351)
          at org.jboss.resteasy.client.ClientRequest.<init>(ClientRequest.java:107)
          at org.jboss.resteasy.client.ClientRequest.<init>(ClientRequest.java:102)
          at realtf.server.core.timer.TimerService.doWork(TimerService.java:32)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_31]
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_31]
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_31]
          at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_31]
          at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:34) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor.processInvocation(ContainerManagedConcurrencyInterceptor.java:104) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ejb3.component.singleton.SingletonComponentInstanceAssociationInterceptor.processInvocation(SingletonComponentInstanceAssociationInterceptor.java:53) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
          at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:228) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
          ... 22 more
      Caused by: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl from [Module "javax.ws.rs.api:main" from local module loader @7ab7b3f9 (roots: /opt/jboss-as-7.1.1.Final/modules)]
          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.1.1.GA]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.1.1.GA]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.1.1.GA]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423) [jboss-modules.jar:1.1.1.GA]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.1.1.GA]
          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.1.1.GA]
          at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_31]
          at java.lang.Class.forName(Class.java:169) [rt.jar:1.6.0_31]
          at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:77)
          at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:201)
          at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:113)
          ... 47 more
      

       

      In my MANIFEST.MF I have added the following line:

       

      Dependencies: org.apache.httpcomponents,org.jboss.resteasy.resteasy-jaxrs
      

       

      Can anybody help me? How can I make things working?

       

      Thx, Georg

        • 1. Re: EJB as Resteasy client -> ClassNotFoundException
          lehvolk

          I think I'm a little bit late for answer but I had same problem and solve it. Problem is that you add module but not export services (which placed into META-INF/services folder). There is two possibilities for exporting services:

          • If you use reaseasy client api in module you should add dependency to api with flag that services should be export too:

                    <dependencies>

                         ....

                         <module name="javax.ws.rs.api" services="export" export="true" />

                         ....

                    </dependencies>

           

          • 2. Re: EJB as Resteasy client -> ClassNotFoundException
            cejupl

            Hi Georg,

             

            Did you resolve the issue as I am facing the exact same issue.

             

            Thanks,

            Ceju

            • 3. Re: EJB as Resteasy client -> ClassNotFoundException
              ramsrib

              Alexey Volkov,

               

              Thanks, your (first) solution works!...   If possible, please explain the second possibility.

              • 4. Re: EJB as Resteasy client -> ClassNotFoundException
                lehvolk

                So, there is two sections  in article:

                • "Global Modules": where placed information of how to declare global modules for all deployed application
                • "JBoss deployment sctructure file": where placed information of how to declare jboss dependencied for deployed application by placing special file inside ear (or war, jar etc).

                 

                Module with Reasteasy dependency can be declared by both of this ways. So all you need is two write <module name="javax.ws.rs.api" services="export" export="true" /> into stanalone.xml (in case of global module) or into jboss-deployment-structure.xml otherwise.