JAX-RS с EJB не работает в EAR, но хорошо работает в WAR

У меня есть веб-проект java, содержащий такие классы ресурсов JAX-RS:

@Stateless
@Path("user")
public class UserResource {
    @EJB
    BooksResource booksResource;

    ...

    @GET
    public String get() {
        return "User Resource";
    }

    @Path("books")
    public BooksResource getBooksResource() {
        System.out.println("booksResource is " + booksResource);
        return booksResource;
    }

    ...

}

@Stateless
public class BooksResource {

    @GET
    public String get() {
        return "Books Resource";
    }
}

Evething отлично работает, когда я запускаю проект WAR.

Но когда я добавляю его в проект EAR, я могу получить доступ только к /user. И /user/books возвращает 404, а консоль выводит «booksResource is null».

Кажется, что EJB не внедряется при запуске в проекте EAR, но почему он работает в проекте WAR?

Я использую Eclipse (индиго JavaEE) и Glassfish3.1.2.


person zhang xuefeng    schedule 02.08.2012    source источник
comment
Попробуйте разместить @LocalBean на BooksResource   -  person Jin Kwon    schedule 09.08.2012


Ответы (1)


После долгих попыток я обнаружил, что с одним и тем же проектом (EAR) иногда он работает хорошо (и /user, и /user/books в порядке), иногда он работает неправильно (ситуация, описанная в моем вопросе), особенно когда Я проверяю [Build Automatically]. Я думаю, что что-то не так с eclipse WTP или Glassfish.

person zhang xuefeng    schedule 04.08.2012