当前位置: 首页 > 知识库问答 >
问题:

我如何在Maven中指定WAR项目中的EJB引用?

商瀚
2023-03-14

我目前有一个WAR项目和一个EJB项目,以及一个将它们捆绑在一起的EAR项目。

实际上,它正是NetBeans示例中的project Maven>Enterprise应用程序。

@WebService(serviceName = "NewWebService")
public class NewWebService {


    @EJB
    NewSessionBean bean;

一开始,我的编译器抱怨它找不到这个NewSessionBean类,因为它们在不同的项目中,这个类是足够公平的。

通过Netbeans的“提示”,我看到Netbeans建议我将EJB项目添加为依赖项,所以我就这样做了。

我的Maven XML现在在WAR POM中有以下内容:

<dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>mavenEJBExample-ejb</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>jar</type>
</dependency>

为什么部署EAR不尊重战争对EJB投影的依赖性?即使我的Maven XML中有依赖项?

Schwerwiegend:   Ausnahme beim Deployment der Anwendung [mavenEJBExample-ear]
Schwerwiegend:   Exception during lifecycle processing
java.lang.IllegalArgumentException: Referenz [Remote ejb-ref name=com.mycompany.NewWebService/bean,Remote 3.x interface =com.mycompany.NewSessionBean,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session] kann nicht aufgelöst werden, da [2]-EJBs in der Anwendung mit Schnittstelle com.mycompany.NewSessionBean vorhanden sind. \nEinige der möglichen Gründe: \n1. Die EJB-Bean-Klasse wurde in einer EAR-Library verpackt (oder durch ein anderes Library-Verfahren, das die Library für alle Komponentenmodule sichtbar macht). Dadurch schließen alle Komponentenmodule diese Bean-Klasse indirekt ein. \n2. Die EJB-Bean-Klasse wurde in einem Komponentenmodul verpackt, das das EJB entweder direkt oder indirekt über Manifest, WEB-INF/lib referenziert. \nDie EJB-Bean-Klasse darf nur im deklarierenden EJB-Modul und nicht in den referenzierenden Modulen verpackt werden. Die referenzierenden Module dürfen nur EJB-Schnittstellen einschließen.
    at com.sun.enterprise.deployment.util.ComponentValidator.accept(ComponentValidator.java:356)
    at com.sun.enterprise.deployment.util.DefaultDOLVisitor.accept(DefaultDOLVisitor.java:78)
    at com.sun.enterprise.deployment.util.ComponentValidator.accept(ComponentValidator.java:123)
    at com.sun.enterprise.deployment.util.ApplicationValidator.accept(ApplicationValidator.java:147)

共有1个答案

沈子昂
2023-03-14

就您将要使用EJB代理而言,我建议更改依赖关系的类型。另外,因为您正在部署一个.ear归档文件,所以我希望您已经有了一个jar并将EBJs添加到ear中。你可以通过探索你的耳朵来检查。如果您发现jar中的EJB已经添加到.ear归档文件中,您可能希望将scope设置为provided,这样它就不会被添加两次。

<dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>mavenEJBExample-ejb</artifactId>
    <type>ejb-client</type>
    <scope>provided</scope>
    <version>1.0-SNAPSHOT</version>
</dependency>
 类似资料:
  • 我创建了一个NetBeans企业应用程序,它由包装ejb(jar)项目和web(war)项目的ear组成。 我的web项目中有一个servlet,我想在其中使用ejb项目中的一个ejb。

  • 我有一个Java maven项目,需要使用logback作为日志记录框架。我已经将logback.xml配置文件放在src/main/conf文件夹中。但是,由于src/main/conf不在类路径中,它似乎没有被拾取。在构建项目时,我将该文件夹的所有内容复制到target/root/conf,并希望将该目录作为类路径的一部分。谁能让我知道我该怎么强迫?

  • 用chatgpt问了不下十次 给了各种插件的方案 不知道为啥就是不生效 下面是我的pom.xml中的部分片断

  • 问题内容: 我变得有点疯狂,因为我找不到在将使用Maven构建的Java War项目中设置angular 4应用程序的指南。这是因为我想将其运行到wildfly服务器中。 有什么帮助吗? 谢谢 问题答案: 我有一个类似的要求,即要有一个源项目,其中要有Java Web服务项目以及angular项目(基于angular- cli的项目),并且maven构建应该在其中包含所有角度文件的情况下进行战争。

  • 我有spring mvc应用程序。我尝试通过以下步骤将其转换为spring boot。 添加spring-boot-starter-parent父级POM 添加相关的spring-boot-starter依赖关系 正在删除spring-mvc和其他依赖项。 已删除AbstractAnnotationConfigDispatcherServletInitializer类。 已将@ComponentS

  • 我试图在ejb-jar.xml中配置EJB2.1MDB。我的问题是没有明确的方法来指定MDB要侦听的目标(队列名)。我穷尽了网络,没有找到任何有用的信息。