Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 无法在WebLogic上的EAR中部署WAR_Deployment_War_Jsf 2.2_Weblogic12c_Ear - Fatal编程技术网

Deployment 无法在WebLogic上的EAR中部署WAR

Deployment 无法在WebLogic上的EAR中部署WAR,deployment,war,jsf-2.2,weblogic12c,ear,Deployment,War,Jsf 2.2,Weblogic12c,Ear,我有一个web应用程序运行在WebLogicApplicationServer12.2.1.1上的JSF2.2上 我有一个简单的java类,并尝试使用CDI将其初始化为ApplicationScoped对象。这可以作为一场战争来部署 import javax.enterprise.context.ApplicationScoped; import javax.inject.Named; @Named @ApplicationScoped public class AppContext {

我有一个web应用程序运行在WebLogicApplicationServer12.2.1.1上的JSF2.2上

我有一个简单的java类,并尝试使用CDI将其初始化为ApplicationScoped对象。这可以作为一场战争来部署

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

@Named
@ApplicationScoped
public class AppContext {
    public AppContext() {
    }
}
然而,当我将这场战争添加到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>

非常感谢任何关于修复此问题的提示。

似乎任何bean都已经在bean服务器中注册了名称为“appContext”的bean


要么显式提供不同的bean名称,要么更改类名。

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

IMHO:从上下文初始化的角度来看,这似乎是一个问题,即EAR类加载器将bean加载到上下文中,WAR也将bean再次加载到上下文中。请查看此博客,以便更清楚地了解它。一些J2EE服务器自己管理这一点。请检查应用程序的打包方式以及部署方式

要了解有关类加载检查的其他信息,请参见此处:


  • 从EAR中移除WAR并单独部署。出于某种原因,将战争包装在耳朵里并部署失败了。不确定这是否是WebLogic或EAR配置的问题


    摘自同一个问题和已接受的答案-

    至少给出一个拒绝投票的理由,这样我就可以纠正我的错误。谢谢你的回答!没有其他具有相同名称的类。事实上,这是我整个测试web项目中唯一的类。这是唯一一个添加到新EAR项目中的WAR项目。我仍然得到相同的部署异常。我猜这可能是WebLogic WELD库的问题。可能您的应用程序中没有创建任何此类类,但任何库都可能包含任何具有此名称的类。也许我错了,但重命名类或显式地为其提供bean名称并测试应用程序只需要一点努力。在发布问题之前,我用各种名称尝试过它。同样在@named中显式命名,仍然有相同的结果。我也在Oracle论坛上发布了这篇文章,但没有得到任何有用的回复:同一个用户问了同样的问题,并且已经解决了问题-
    NetBeans IDE 8.2;
    JDK 1.8 b121;
    Mojarra JSF 2.2;
    WebLogic 12.2.1.1;