4 Replies Latest reply on Mar 23, 2012 9:12 AM by amberjboss1999

    Cannot inject field annotated with @Resource annotation in JBOSS 6

    amberjboss1999

      I am building a ear project using maven and embed a webservice war in it ;

       

        the testDataSource is the jndi name defined like this under JBOSS AS 6 deploy directory:

       

      <jndi-name>testDataSource</jndi-name>

       

       

      The web service endpoint is defined as:

       

      @Stateless()

       

       

      @TransactionManagement(TransactionManagementType.BEAN)

       

      @WebContext(contextRoot="/testMe")

       

      @WebService(name="TestDataSourceService",

      serviceName = "TestDataSourceServiceBeanService",

      portName = "TestDataSourceServicePort",

      targetNamespace = "http://testMe/")

       

      @SOAPBinding()

      public class TestSEIBean extends TestBaseServiceImpl  {

        @Resource(mappedName="testDataSource")

        protected DataSource dataSource;

       

      ....

      }

       

      the war(webservice) also has a dependency (so under WEB-INF/lib/testDataSource.jar with the same Resource annotation:


      that is class TestBaseServiceImpl  {

      @Resource(mappedName="testDataSource")

      protected DataSource dataSource;

       

      ...}

       

      My question is whether I can have the same @Resource annotation in my sei (service endpoint interface - web service) TestSEIBean  class, as well as in my TestBaseServiceImpl;

       

      When I deployed, I don't get exception and the jndi is bound. But when I use the generated stubs to call my web services, I would get this exception:

      :

      Cannot inject field annotated with @Resource annotation: protected javax.sql.DataSource TestSEIBean.dataSource

       

       

      Why can't Resource, in this case, jndi name be bound the the one I defined in xxxx-ds.xml under deploy directory?

      Thanks!

        • 1. Re: Cannot inject field annotated with @Resource annotation in JBOSS 6
          amberjboss1999

          ANY feedback is appreciated. I cannot imagine I am the only one who has a WebService on SLSB, and injected jndi @Resources for runtime lookup. I am also looking into Arquillian for integration testing, but I'd like to see if there is a simple fix here, as I struggle with the dependencies set up of arquillian in JBoss 6.

          • 2. Re: Cannot inject field annotated with @Resource annotation in JBOSS 6
            amberjboss1999

            I built a Arqullian test case using <arquillian.version>1.0.0.Alpha5</arquillian.version> and <jboss.version>6.0.0.Final</jboss.version>, and annotate a

               @Resource(mappedName = "java:testDataSource")

               protected DataSource dataSource;

             

            mvn -e  test -Pjbossas-managed-6

             

            assert not null on dataSource.getConnection() and the test passed.  I am lost as to why when I deployed on JBoss 6 and ran my test using the web services stub that it fails with :

             

            10:17:00,093 ERROR [org.jboss.wsf.common.injection.InjectionException] Resource 'testDataSource' not found: javax.naming.NameNotFoundException: testDataSource not bound

                    at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) [:5.0.5.Final]

                    at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) [:5.0.5.Final]

             

            when server starts up, the jndi DS is bound:

            10:16:19,865 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=testDataSource' to JNDI name 'java:testDataSource'

             

            Can someone help, please?! What does it take to get a little help here?

            • 3. Re: Cannot inject field annotated with @Resource annotation in JBOSS 6
              ropalka

              EJB3 is responsible for injection on SLSB endpoints.

              Anyway, can I see your full stack trace? I'm curious why

              jbossws-common InjectionHelper is in the stack trace.

              • 4. Re: Cannot inject field annotated with @Resource annotation in JBOSS 6
                amberjboss1999

                I think a lot of developers would probably appreciate the solution. This is simply solved by not using @Resource, instead you can use @Autowired, and/or with combination of @Qualifier, with the point being taking component scanning of @Resource out of the equation.