2 Replies Latest reply: Apr 19, 2012 4:59 PM by Nathan Wallman RSS

    Dependency Injection Not Working in a Rest Resource

    Nathan Wallman Newbie

      I have a couple of JUnit tests working with Dependency Injection already but for whatever reason I can't get this particular test to work.  The one thing that I see is different in this case is the Dependency Injection of the EJB is not happening inside of the unit test itself.  Instead the unit test is calling a Jersey Resource that is deployed along with the War.  My Jersey Resource has an EJB I'm trying to inject which isn't working.  Here is my code:

       

       

      @RunWith(Arquillian.class)
      public class SiteSettingsResourceTest {
      
      
                private static Integer TEST_SITE_ID = 1;
      
      
                @Deployment
                public static Archive<?> createDeployment() {
                          return ShrinkWrap
                                              .create(WebArchive.class, "hapi-web.war")
                                              .addClasses(SiteManager.class, SiteManagerLocal.class, SiteDAO.class, SiteDAOLocal.class, SiteHibernateImpl.class, SiteJDBCImpl.class, AbstractResource.class,
                                                                  SiteSettingsResource.class).addAsResource("embedded/test-persistence.xml", "META-INF/persistence.xml")
                                              .addAsResource("embedded/test-queries.hbm.xml", "META-INF/test-queries.hbm.xml").addAsWebResource("embedded/test-web.xml", "WEB-INF/web.xml")
                                              .addAsWebResource(EmptyAsset.INSTANCE, "beans.xml");
                }
      
                @Test
                public void testGetSettingsHibernate() {
                          Client client = Client.create();
                          WebResource webResource = client.resource("http://0.0.0.0:8181/hapi-web/sitesettings/hibernate/" + TEST_SITE_ID);
                          ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
      
      
                          if (response.getStatus() != 200) {
                                    System.out.println(response.getHeaders());
                                    System.out.println(response.toString());
                                    Assert.assertTrue(false);
                          } else {
                                    Assert.assertTrue(true);
                          }
                }
      }
      
      

       

      Then my JerseyResource looks like:

       

       

       

      @Path("/sitesettings")
      public class SiteSettingsResource extends AbstractResource {
      
      
                private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
      
      
                @EJB(mappedName = "java:global/hapi-web/SiteManager!com.noob.hapi.domain.mgr.SiteManagerLocal")
                private SiteManagerLocal siteManager;
      
      
                @GET
                @Path("/hibernate/{siteid: [0-9]}")
                @Produces({ MediaType.TEXT_XML, MediaType.APPLICATION_JSON })
                public String getAllSettingsHibernate(@PathParam("siteid") int siteID) {
                          try {
                                    SiteSettings settings = siteManager.getSiteSettingsHibernate(siteID);
                                    return this.convertToJSON(settings);
                          } catch (SQLException | ConversionException e) {
                                    log.error("Error getting all settings for siteID: " + siteID);
                                    throw new InternalException(e.getMessage());
                          }
                }
      
      

       

       

      I've tried various things but everytime I see my siteManager EJB is null.  I am assuming for whatever reason the Jersey resources are not being enriched for some reason.  I know my mappedName is correct because I pulled it right from the logs(INFO: EJB5181:Portable JNDI names for EJB SiteManager).  How can I ensure my Jersey Resources get enriched?  Thanks in advance.