21

今天我将本地 Glassfish 服务器升级到 3.1.1,为我公司的服务器升级到相同版本做准备。我正在尝试将我的 Web 服务项目转换为与新服务器配合使用,但遇到了障碍。

在我耳朵的 pom 文件中,我之前将 webapp 和 ejb 都列为依赖项。在 webapp 的 pom 中,我也将 ejb 列为依赖项。尝试将此配置部署到 Glassfish 3.1.1 时,我收到此错误:

部署期间发生错误:部署应用程序 [ear] 时出现异常:无法解析引用本地 ejb-ref name=name,Local 3.x interface =interface,ejb-link=null,lookup=,mappedName=,jndi-name=, refType=Session 因为应用中有2个ejb,有interface接口。一些可能的原因: 1. EJB bean 类被打包在一个ear lib 库中(或通过任何其他使库对所有组件模块可见的库机制),这使得所有组件模块都间接包含这个bean 类。2. EJB bean 类被封装在一个组件模块中,该组件模块直接或间接通过 Manifest、WEB-INF/lib 引用 EJB。EJB bean 类应该只打包在声明的 ejb 模块中,而不是引用模块中。引用模块应该只包含 EJB 接口。

本质上,我相信这是在说,因为我将 EJB 列为两个不同领域的依赖项,Glassfish 3.1.1 不知道要查找哪个依赖项。这在 2.1.1 中不是问题。因此,我删除了 ear 中的依赖项,因为它仍然是 ear 有效 pom 的一部分。

但是,现在当 ear 生成 application.xml 文件时,它会忽略文件中的所有 ejb 信息。我现在可以很好地部署应用程序,但是当我尝试运行任何东西时,我得到关于 ejbs 的 NameNotFoundExceptions。

我尝试使用标签手动将 ejb 模块添加到 ear pom,但是当我尝试构建项目时,我收到错误消息:

Artifact[ejb] 不是项目的依赖项。

尽管事实上当我查看耳朵的有效 pom 时,我可以看到 ejb 被列为依赖项。

如何在仍符合 Glassfish 3.1.1 更严格的规则集的同时正确生成 application.xml 文件?

如果您需要更多信息,请告诉我,感谢您的帮助!

4

1 回答 1

28

答案最终很简单,我为此有点自责。在 webapp 的 pom 文件中,我只需要将范围行添加到 ejb 依赖项:

<dependency>
    <groupId>com.groupId</groupId>
    <artifactId>webservice-service-ejbs</artifactId>
    <version>${project.version}</version>
    <type>ejb</type>
    <scope>provided</scope>
</dependency>

有了这个,我可以在 ear pom 中保留 ejb 依赖,application.xml 生成正确,glassfish 3.1.1 不会因为认为有多个同名的 ejb 类而感到困惑。

编辑:这是 ejb 依赖项在 ear pom 中的样子

<dependency>
    <groupId>com.groupId</groupId>
    <artifactId>webservice-service-ejbs</artifactId>
    <type>ejb</type>
</dependency>

感谢那些帮助我的人。

于 2011-11-21T18:30:18.037 回答