Используйте EJB с сервера приложений в JAX-RS - PullRequest
0 голосов
/ 23 января 2019

У меня запущен сервер приложений Payara5.Я развернул JAR, который содержит один EJB без сохранения состояния.

У меня есть второй проект Java EE, который является JAX-RS.Один из классов ресурсов должен иметь доступ к этому EJB.

Я использую Maven.Поэтому я поместил в свой файл pom.xml зависимость для приложения JAX-RS, которое ссылается на проект EJB.

<dependency>
    <groupId>diagro.be</groupId>
    <artifactId>HelloWorld</artifactId> <!-- EJB project -->
    <version>1.0</version>
    <scope>provided</scope>
</dependency>

В своем классе ресурсов я внедряю EJB.

@Inject HelloWorld hw;

JAX-RS компилируется, а пакет war создается.При развертывании я получаю сообщение об ошибке, что класс HelloWorld не найден.

Возможно ли то, что я делаю?Или мне нужно сделать что-то еще для ссылки?

1 Ответ

0 голосов
/ 24 января 2019

Что я могу сделать?Или мне нужно сделать что-то еще для связи?

Это возможно, но сначала нужно кое-что:

  1. Ваш класс HelloWorld должен реализовать interface;давайте позвоним IHelloWorld.Такой интерфейс будет определять методы EJB, которые вы хотите предоставить своим клиентам API ...

  2. Кроме того, такой интерфейс должен быть помечен @javax.ejb.Local или @javax.ejb.Remote (я считаю, что@Local должен работать правильно, потому что вы будете работать в той же JVM, но, по моему опыту, когда вы планируете вызывать EJB в другом приложении, следует использовать @Remote ... вы можете прочитать об этом в здесь )

  3. Затем вы должны создать такой интерфейс в общем проекте для вашего WAR-приложения и EJB-приложения.Давайте назовем проект: my-proj-interfaces ...

  4. Позже, в ваших проектах EJB и WAR, вы создаете зависимость для этого проекта с compile scope.

  5. В проекте EJB будет класс HelloWorld, который реализует интерфейс IHelloWorld.

  6. В вашем проекте WAR будет IHelloWorldпотребитель;давайте назовем это HelloWorldClient ... этот класс будет выглядеть примерно так:

    public class HelloWorldClient {
        @EJB(lookup=xxx)
        private IHelloWorld ejbService;
    }
    

Ключевым моментом является использование аннотации @EJB и lookup атрибут, который указывает, как найти ваш EJB на вашем сервере ... обычно значением атрибута lookup будет запись JNDI, используемая вашим сервером для публикации EJB (проверьте документацию сервера, чтобы найти правильное значение дляэтот атрибут) ...

Это должно быть все (заметьте: это то, что я делаю в wildfly ... Я надеюсь, что на вашем сервере применяется та же процедура, потому что все, что я сказал, стандартно) ...
...