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:



public class SiteSettingsResourceTest {

          private static Integer TEST_SITE_ID = 1;

          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");

          public void testGetSettingsHibernate() {
                    Client client = Client.create();
                    WebResource webResource = client.resource("" + TEST_SITE_ID);
                    ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);

                    if (response.getStatus() != 200) {
                    } else {


Then my JerseyResource looks like:




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;

          @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.