CDI error: Ambiguous dependencies trying to inject EntityManager
CDI error: Ambiguous dependencies trying to inject EntityManager
我在尝试在 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]]]
如您所见,"possible dependencies" 两次指向同一个 EntityManager
生产者:br.com.sigga.siot.cdi.JPAProducer.entityManager
。该字段声明如下:
@PersistenceContext(unitName = "siotMobility")
@Produces
private EntityManager entityManager;
中有一个类似的案例,但我无法将我的应用程序服务器更改为 Glassfish 4.1。 :-)
我的开发环境:Eclipse Luna,Java7,Maven3.x(eclipse的内嵌版)。我有一个包含 3 个模块 (siot-mobility-[ear|ejb|web]) 的 Maven 项目 (siot-mobility)。
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>
如有更多信息可以帮助您,请随时向我询问。 :-) 提前致谢。
发现错误: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
生产者。
我在尝试在 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]]]
如您所见,"possible dependencies" 两次指向同一个 EntityManager
生产者:br.com.sigga.siot.cdi.JPAProducer.entityManager
。该字段声明如下:
@PersistenceContext(unitName = "siotMobility")
@Produces
private EntityManager entityManager;
我的开发环境:Eclipse Luna,Java7,Maven3.x(eclipse的内嵌版)。我有一个包含 3 个模块 (siot-mobility-[ear|ejb|web]) 的 Maven 项目 (siot-mobility)。
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>
如有更多信息可以帮助您,请随时向我询问。 :-) 提前致谢。
发现错误: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
生产者。