无法在WebLogic上的EAR中部署WAR

时间:2017-03-17 19:39:23

标签: deployment war jsf-2.2 weblogic12c ear

我在WebLogic应用服务器12.2.1.1上的JSF 2.2上运行了一个Web应用程序。

我有一个简单的java类,并尝试使用CDI将其初始化为ApplicationScoped对象。作为WAR,它可以完美地部署。

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

@Named
@ApplicationScoped
public class AppContext {
    public AppContext() {
    }
}

但是,当我将此WAR添加到EAR时,它无法部署。我正在尝试所有可能的解决方案,此时似乎没有任何工作。异常日志如下:

weblogic.management.DeploymentException: CDI deployment failure:WELD-001414: Bean name is ambiguous. Name appContext resolves to beans: [Managed Bean [class beans.AppContext] with qualifiers [@Default @Any @Named], Managed Bean [class beans.AppContext] with qualifiers [@Default @Any @Named]]:org.jboss.weld.exceptions.DeploymentException:WELD-001414: Bean name is ambiguous. Name appContext resolves to beans: [Managed Bean [class beans.AppContext] with qualifiers [@Default @Any @Named], Managed Bean [class beans.AppContext] with qualifiers [@Default @Any @Named]]
    at org.jboss.weld.bootstrap.Validator.validateBeanNames(Validator.java:641)
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:487)
    at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:446)
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90)
    at com.oracle.injection.provider.weld.WeldInjectionContainer.start(WeldInjectionContainer.java:150)
    Truncated. see log file for complete stacktrace

WEB-INF \ beans.xml也如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

运行应用程序:

NetBeans IDE 8.2;
JDK 1.8 b121;
Mojarra JSF 2.2;
WebLogic 12.2.1.1;

非常感谢任何有关解决此问题的提示。

4 个答案:

答案 0 :(得分:1)

它作为独立的WAR部署但作为EAR失败的事实是一个相当明确的问题指示器。应用程序包含一个来自外部库的具有相同bean名称的对象,或者该类本身已被复制到EAR中的其他位置。检查您是否未将此类(或包含此类的jar)加载到EAR中的任何其他位置;想到了APP-INF。如果您还没有,那么确定它是外部库还是您自己的部署路径的最快方法是将类重命名为您可以确保的内容(例如,MyUniqueBeanName)。如果重命名后问题仍然存在,则最有可能是您的部署。

答案 1 :(得分:1)

恕我直言:从上下文初始化的角度看,这看起来像是一个问题,即EAR类加载器将bean加载到上下文中,WAR也会再次将bean加载到上下文中。请查看此博客CDI in EARs,以便更清楚地了解它。一些J2EE服务器由它们自己管理。请检查您的应用程序的打包方式,并检查其部署方式。

了解有关课程加载检查的其他信息:

  1. Understanding WebLogic Server Application Classloading
  2. Application.xml WAR EJB.jar Module order can cause ClassLoader issues

答案 2 :(得分:1)

从EAR中删除WAR并单独部署它。出于某种原因,在EAR中打包WAR并进行部署失败。不确定这是WebLogic或EAR配置的问题。

采用相同的问题和已接受的答案 - Initializing CDI Bean Name Ambiguous

答案 3 :(得分:0)

似乎任何bean已经注册了名称&#34; appContext&#34;在bean服务器中。

显式提供不同的bean名称或更改类名。