RESTEasy на TJWS с CDI

Я пытаюсь использовать контейнер встраиваемых сервлетов TJWS для запуска приложения RestEasy, используя это руководство пользователя http://docs.jboss.org/resteasy/docs/2.3.3.Final/userguide/html/RESTEasy_Embedded_Container.html#d0e2640

Приложение корректно работает в JBOSS7-AS. Я хочу использовать TJWS для отладки и модульного тестирования, но у меня проблема с внедрением зависимостей.

Я создаю класс ресурсов UserResource, который использует CDI для внедрения служебного класса UserManager:

@Path("users")
@SessionScoped
class UserResource {

  @Inject
  UserManager userManager; // simple interface and imlementation

  public UserResource() {} // constructor with no parameters for bean

    @Path("list")
    @GET
    public List<User> list() {
       List<User> userList = userManager.getList(); // NullPointerException
       return userList;
    }
}

Запустите TJWS в основном:

public static void main(String[] args) throws IOException {
    TJWSEmbeddedJaxrsServer tjws = new TJWSEmbeddedJaxrsServer();
    tjws.setPort(9997);
    tjws.start();

    tjws.getDeployment().getRegistry().addPerRequestResource(User.class);
}

Когда я пытаюсь получить http://localhost/users/list через браузер, я получаю NullPointerException в методе UserResource.list(), потому что userManager не внедряется и имеет значение null.

Есть ли способ внедрить userManager?


person Vitaliy Alekask    schedule 12.05.2012    source источник
comment
Может быть некоторая интеграция CDI, которая не произойдет, если вы запустите ее вручную. Вы смотрели на Arquillian для тестирования в контейнере?   -  person LightGuard    schedule 13.05.2012


Ответы (1)


TJWS — это автономный контейнер сервлетов и веб-сервер, который не поддерживает аннотации EE, такие как @Inject. Чтобы код работал, вы должны использовать контейнер EE, такой как JBoss AS.

person Weinan Li    schedule 14.08.2012