1 Reply Latest reply on Nov 19, 2018 2:14 AM by sakkie6yster

    Wildfly 10 - How to call JCA connector from client code

    sakkie6yster

      I need help with calling a JCA connector from my Java client application.

      I am trying to implement the basic resource adapter as described by the Hello World Resource Adapter tutorial: http://www.mastertheboss.com/jboss-frameworks/ironjacamar/create-your-first-jca-connector-tutorial. And calling it from a Java Servlet.

       

      I read through the discussion posted by Ralph Soika: Wildfly 10 - How to setup JCA connector to work with a Session EJB and thanks to a lot of his advice and suggestions, I was able to make a lot of progress in terms of the implementation (i.e. got the resource adapter deployed and the JNDI reference bound), but now I am stuck at one of the same problems that he ran into, i.e. when I attempt to call the Servlet, I get the same exception that he was getting on 23-Jul-2017 17:43. Except that the suggestion Ralph made is not working for me, unless I am missing something small (hopefully).

       

      The code where I attempt the resource injection:

       

      
      @WebServlet("/TestRA")
      public class TestRA extends HttpServlet {
      
      
        @Resource(lookup = "java:/eis/HelloWorld")
        private HelloWorldConnectionFactory connectionFactory;
      
      
      
      
      
      
      
      
      
      

       

      Here is the exception that I am currently getting:

       

      2018-11-16 12:52:31,975 ERROR undertow.request (LoggingExceptionHandler.java:80)- UT005023: Exception handling request to /TestRA
      javax.servlet.ServletException: UT010013: Could not instantiate za.co.fnds.adminweb.servlets.TestRA
      at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:262)
      at io.undertow.servlet.core.ManagedServlet.forceInit(ManagedServlet.java:187)
      at io.undertow.servlet.handlers.ServletChain.forceInit(ServletChain.java:107)
      at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:60)
      at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
      at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
      at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
      at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
      at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
      at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
      at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
      at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
      at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
      at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
      at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
      at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
      at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
      at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
      at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
      at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
      at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
      at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
      at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
      at io.undertow.server.Connectors.executeRootHandler(Connectors.java:332)
      at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
      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.IllegalStateException: WFLYEE0042: Failed to construct component instance
      at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:163)
      at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:134)
      at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:88)
      at org.jboss.as.ee.component.ComponentRegistry$ComponentManagedReferenceFactory.getReference(ComponentRegistry.java:149)
      at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$6.createInstance(UndertowDeploymentInfoService.java:1379)
      at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:260)
      ... 41 more
      Caused by: java.lang.IllegalArgumentException: Can not set za.co.fnds.etm.HelloWorldConnectionFactory field za.co.fnds.adminweb.servlets.TestRA.connectionFactory to za.co.fnds.etm.HelloWorldConnectionFactoryImpl
      at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
      at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
      at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
      at java.lang.reflect.Field.set(Field.java:764)
      at org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:106)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation(WeldInterceptorInjectionInterceptor.java:56)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
      at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
      at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
      at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
      at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:161)
      ... 46 more
      

       

      Ralph suggest using the jboss-deployment-structure-xml file and that the export="true" attribute needs to be set. He also indicates that it should be located in the /META-INF/ folder of my ear (which it is). 

      Herewith an extract of my jboss-deployment-structure.xml file:

       

      <?xml version="1.0" encoding="UTF-8"?> 
      <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
        <!--  <ear-subdeployments-isolated>false</ear-subdeployments-isolated>-->
        <deployment>
        <dependencies>
        <module name="deployment.fnds-etm-rar.rar" export="true" />
        </dependencies>
        </deployment>
      </jboss-deployment-structure>
      
      

       

      I have a Servlet contained in a WAR project that is inside my EAR project that ultimately calls this resource adapter. But like explained already; even with this suggestion, I am still getting the same exception.

      Can anybody help me with this please?

       

      Thank you kindly.

        • 1. Re: Wildfly 10 - How to call JCA connector from client code
          sakkie6yster

          I was able to FINALLY figure this out!

           

          The problem was with regards to my EAR package structure.

          Both the WAR and EAR project POM files contained references to the same JAR, but both were set with a scope of "compile".  I changed the scope of the reference in the WAR project's POM file to "provided" and left the EAR project's POM file as "compile".