我的maven项目结构如下所示:
test_project-parent
|test_project-ejb.jar
|test_project-depl.jar
|test_project-web.war
|test_project-ear.ear
我的3个模块:ejb,depl和web被打包到EAR中。
我的ejb模块中有一个EJB,如下所示:
@Startup
@Singleton
public class StartupBean {
@PersistenceContext
private EntityManager em;
@PostConstruct
private void sayHello () {
System.out.println("HELLO !!!");
}
}
我的问题是sayHello()
方法执行了两次。
这里是日志的输出:
00:16:13,803 INFO [stdout] (ServerService Thread Pool -- 113) HELLO !!!
00:16:13,803 INFO [stdout] (ServerService Thread Pool -- 117) HELLO !!!
我的ejb模块是我的网络模块的依赖项。
当我删除依赖项时,它工作正常(该方法被调用一次)。
我的网络模块的pom.xml如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.testing</groupId>
<artifactId>test_project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>test_project-web</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>test_project-ejb</artifactId>
<version>${test_project.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
</dependencies>
</project>
注意:我已阅读所有相关帖子但未找到答案
答案 0 :(得分:1)
我发现了我的错误。我需要将依赖关系的范围更改为提供,因为依赖关系的方式被打包在war文件夹的lib文件夹中。所以,基本上,我的ejb模块已经部署了两次,因此是@PostConstruct方法的双重执行。
我在我的web模块pom.xml中的ejb依赖项中添加了<scope>provided</scope>
,一切正常。 ejb模块不再打包在war存档的lib文件夹中,而@PostConstruct方法只调用一次。