尝试在JBoss 7.1.1应用服务器中部署EJB 3.1应用程序时遇到一个奇怪的错误:WELD-001409 Ambiguous dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[parameter 1] of [constructor] @Inject public br.com.sigga.siot.dao.masterdata.impl.ProfileDAOImpl(EntityManager)]. Possible dependencies [[Resource Producer Field [EntityManager] with qualifiers [@Any @Default] declared as [[field] @PersistenceContext @Produces private br.com.sigga.siot.cdi.JPAProducer.entityManager], Resource Producer Field [EntityManager] with qualifiers [@Any @Default] declared as [[field] @PersistenceContext @Produces private br.com.sigga.siot.cdi.JPAProducer.entityManager]]]
如您所见,“可能的依赖关系”指向同一EntityManager
生成器的两次:br.com.sigga.siot.cdi.JPAProducer.entityManager
。该字段声明如下:
@PersistenceContext(unitName = "siotMobility")
@Produces
private EntityManager entityManager;
类似的案例在WELD-001409 Ambiguous dependencies中有关,但我无法将我的应用程序服务器更改为Glassfish 4.1。 : - )
我的开发环境:Eclipse Luna,Java 7,Maven 3.x(eclipse的嵌入式版本)。我有一个Maven项目(siot-mobility)有3个模块(siot-mobility- [ear | ejb | web])。
EAR模块的POM声明了以下依赖项:
<dependencies>
<dependency>
<groupId>br.com.sigga</groupId>
<artifactId>siot-mobility-web</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>br.com.sigga</groupId>
<artifactId>siot-mobility-ejb</artifactId>
<version>${project.version}</version>
<type>ejb</type>
</dependency>
</dependencies>
Maven EAR插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
<version>6</version>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<modules>
<webModule>
<groupId>br.com.sigga</groupId>
<artifactId>siot-mobility-web</artifactId>
</webModule>
<ejbModule>
<groupId>br.com.sigga</groupId>
<artifactId>siot-mobility-ejb</artifactId>
</ejbModule>
</modules>
</configuration>
</plugin>
随时向我询问有关可以帮助您的更多信息。 :-)先谢谢。
答案 0 :(得分:1)
发现错误:EJB模块在生成的EAR中出现两次,一次出现在EAR文件的根路径上,另一次出现在WAR文件的WEB-INF/lib
文件夹中。
我从:
更改了WAR项目的POM文件中的依赖项声明<dependency>
<groupId>br.com.sigga</groupId>
<artifactId>siot-mobility-ejb</artifactId>
</dependency>
为:
<dependency>
<groupId>br.com.sigga</groupId>
<artifactId>siot-mobility-ejb</artifactId>
<scope>provided</scope>
</dependency>
这样,EJB模块不会复制到WAR文件的WEB-INF/lib
文件夹中,并且在生成的EAR文件中只有一个EntityManager
生成器。