我正在运行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类的错误。
我能做些什么?还是我需要做其他事情来链接?
答案 0 :(得分:0)
我能做些什么?还是我需要做其他事情来链接?
有可能,但是您首先需要一些东西:
您的HelloWorld类应实现interface
;我们称为IHelloWorld
。这样的接口将定义您要向API客户端公开的EJB方法...
此外,此类接口必须使用@javax.ejb.Local
或@javax.ejb.Remote
进行注释(我相信@Local应该做正确的事情,因为您将在同一JVM中运行,但是以我的经验,当您计划在另一个应用程序中调用EJB时,应使用@Remote ...您可以在here中阅读更多内容
然后,您应该在通用项目中为WAR应用程序和EJB应用程序创建此类接口。我们称这个项目为:my-proj-interfaces ...
稍后,在EJB和WAR项目中,您将使用compile
范围创建对该项目的依赖项。
在EJB项目中将是实现HelloWorld
接口的IHelloWorld
类。
在您的WAR项目中将是IHelloWorld
使用者;让我们称之为HelloWorldClient
……该类将是这样的:
public class HelloWorldClient {
@EJB(lookup=xxx)
private IHelloWorld ejbService;
}
关键是使用@EJB
批注和lookup
属性,该属性指示如何在服务器中定位EJB ...通常,lookup
的值属性将是您的服务器用于发布EJB的JNDI条目(请检查服务器文档以找到此属性的正确值)...