能否在Payara 4中部署含@Ejb注解组件及EJB依赖的WAR文件?
能否在Payara 4中部署含EJB依赖与@EJB注解的WAR文件?
当然可以!Payara 4是基于GlassFish 4构建的应用服务器,完全兼容Java EE 7规范,而EJB作为Java EE 7的核心组件之一,这类WAR文件的部署是完全被支持的。下面给你梳理几种常见场景和注意事项:
WAR包内嵌EJB组件:如果你的WAR文件里直接打包了EJB类(比如无状态会话Bean、有状态会话Bean),并且用
@EJB注解注入这些组件,Payara 4会自动识别并管理这些EJB,无需额外配置。只需要确保EJB类符合Java EE 7规范,比如正确标注@Stateless、@Stateful等注解。WAR依赖外部EJB模块:如果WAR依赖的EJB在单独JAR或EAR的其他模块中,需要注意:
- 若属于同EAR包内的EJB模块,Payara 4会自动处理模块间依赖,直接用
@EJB注解注入即可,不用额外配置JNDI查找。 - 若为外部独立EJB JAR,你可以把这个JAR放到Payara 4的
domains/domain1/lib/ext目录,或者在WAR的WEB-INF/lib中包含该JAR,这样Payara才能识别EJB组件并完成注入。
- 若属于同EAR包内的EJB模块,Payara 4会自动处理模块间依赖,直接用
@EJB注解使用的小细节:
- 确保注入的EJB接口正确,Payara会根据接口类型匹配对应的实现类。
- 若存在多个同类型EJB实现,可通过
@EJB(beanName = "xxx")指定具体实现类名称,避免注入歧义。 - 在Web组件(比如Servlet、JSF托管Bean)中使用
@EJB时,Payara会在组件初始化时自动完成注入,无需手动获取上下文。
举个简单示例,先定义一个无状态EJB:
@Stateless public class MyEjbBean implements MyEjbInterface { public String getMessage() { return "Hello from EJB!"; } }
再在Servlet中注入并调用:
@WebServlet("/hello") public class HelloServlet extends HttpServlet { @EJB private MyEjbInterface myEjb; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println(myEjb.getMessage()); } }
把这个Servlet和EJB打包成WAR文件,直接部署到Payara 4的部署目录,或者通过管理控制台上传启动,访问/hello就能看到EJB返回的内容了。
内容的提问来源于stack exchange,提问作者rajvinder
相关产品推荐
相关产品推荐

