TomEE + Jersey 2: не удалось ввести EJB - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь портировать приложение JavaEE с GlassFish на TomEE.Однако у меня возникают проблемы, препятствующие внедрению EJB.

Вот мои зависимости pom для Jersey 2:

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jersey2.version>2.27</jersey2.version>
    </properties>

            <!-- Jersey -->
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-server</artifactId>
                <version>${jersey2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet</artifactId>
                <version>${jersey2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.inject</groupId>
                <artifactId>jersey-hk2</artifactId>
                <version>${jersey2.version}</version>
            </dependency>

My Rest Controller является суперосновным:

@Path("/foo/")
@Stateless
public class FooService {

    @EJB
    Admin adminEjb;

    @GET
    @Path("bar")
    public fooResponse loginRequest() {
        adminEjb.hello();
        return Response.status(Response.Status.OK).build();
    }
}

Мой web.xml (я использую сервлет Jersey):

    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.foo.ws</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/resource/*</url-pattern>
    </servlet-mapping>

Когда я развертываю это приложение в TomEE и поражаю конечную точку с помощью URL-шаблона / ресурса (используяorg.glassfish.jersey.servlet.ServletContainer):

curl -v 'http://localhost:8080/resource/foo/bar'

Я получаю поговорку 500: "java.lang.NullPointerException: adminEJB равно нулю"

Однако странная часть заключается в том, что я попал в конечную точку без ресурсной части пути (Пропуск org.glassfish.jersey.servlet.ServletContainer).EJB полностью заполнен и правильно введен.

curl -v 'http://localhost:8080/foo/bar'

Возвращает 200.

Итак, мой вопрос: почему Джерси предотвращает инъекцию EJB?Есть ли способ исправить это в TomEE?

Любая помощь будет принята с благодарностью.

...