在JAX-RS中使用来自应用程序服务器的EJB

时间:2019-01-23 19:41:04

标签: java java-ee payara

我正在运行Payara5应用服务器。我已经部署了一个JAR,其中包含一个无状态EJB。

第二个Java EE项目是JAX-RS。资源类之一需要访问此EJB。

我正在使用Maven。因此,我对引用EJB项目的JAX-RS应用程序的pom.xml进行了依赖。

<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 :(得分:0)

  

我能做些什么?还是我需要做其他事情来链接?

有可能,但是您首先需要一些东西:

  1. 您的HelloWorld类应实现interface;我们称为IHelloWorld。这样的接口将定义您要向API客户端公开的EJB方法...

  2. 此外,此类接口必须使用@javax.ejb.Local@javax.ejb.Remote进行注释(我相信@Local应该做正确的事情,因为您将在同一JVM中运行,但是以我的经验,当您计划在另一个应用程序中调用EJB时​​,应使用@Remote ...您可以在here中阅读更多内容

  3. 然后,您应该在通用项目中为WAR应用程序和EJB应用程序创建此类接口。我们称这个项目为:my-proj-interfaces ...

  4. 稍后,在EJB和WAR项目中,您将使用compile范围创建对该项目的依赖项。

  5. 在EJB项目中将是实现HelloWorld接口的IHelloWorld类。

  6. 在您的WAR项目中将是IHelloWorld使用者;让我们称之为HelloWorldClient……该类将是这样的:

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

关键是使用@EJB批注和lookup属性,该属性指示如何在服务器中定位EJB ...通常,lookup的值属性将是您的服务器用于发布EJB的JNDI条目(请检查服务器文档以找到此属性的正确值)...

  1. 那应该是全部(注意:这是我在wildfly中所做的……我希望在您的服务器中应用相同的过程,因为我所说的都是标准的)...