Java CDI:2个项目,@Inject->;(WELD-001408)错误

Java CDI:2个项目,@Inject->;(WELD-001408)错误,java,jboss,ejb,cdi,Java,Jboss,Ejb,Cdi,我尝试将bean注入portlet。两者都位于不同的项目中。 Iam使用JBoss 7.1.1和Liferay6.2 SDK。这是我能想象到的最简单的情况,但我仍然得到这个错误。如果bean在同一场战争中被本地化,它就可以正常工作 错误: > package com.test; import javax.ejb.LocalBean; import javax.ejb.Stateless; @Stateless @LocalBean public class Calc { pu

我尝试将bean注入portlet。两者都位于不同的项目中。 Iam使用JBoss 7.1.1和Liferay6.2 SDK。这是我能想象到的最简单的情况,但我仍然得到这个错误。如果bean在同一场战争中被本地化,它就可以正常工作

错误:

> package com.test;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

@Stateless
@LocalBean
public class Calc {

    public Calc() {
    }

    public int add(int a, int b) {
        return a+b;
    }

    public int mult(int a, int b) {
        return a*b;
    }

}
> 
package de.pao.bean;

import java.io.Serializable;    
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.inject.Inject;    
import org.jboss.logging.Logger;    
import com.test.Calc;

@ManagedBean
@RequestScoped
public class DWPortletController implements Serializable {

    private static final Logger log = Logger.getLogger("1234");
    private static final long serialVersionUID = 2056281697556539581L;

    @Inject private Session0Bean sb0;
    @Inject private Calc calc;

    public DWPortletController() {
        // TODO Auto-generated constructor stub
    }

    public void buttonAction() {
        log.info("Hallo");
        sb0.sayHello();
        log.info("2+2 = " + calc.add(2, 2));
    }
}
<?xml version="1.0"?>

<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>
    <info module="portlet_primefaces_tmpl" organisation="com.liferay" />

    <dependencies defaultconf="default">
        <dependency name="jboss-el" org="org.jboss.el" rev="2.0.1.GA" />
        <dependency name="jsf-api" org="com.sun.faces" rev="2.1.27" />
        <dependency name="jsf-impl" org="com.sun.faces" rev="2.1.27" />
        <dependency name="liferay-faces-bridge-api" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-bridge-impl" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-portal" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-util" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="cdi-portlet-bridge-shared" org="com.liferay.cdi" rev="6.2.0.2" />     
        <dependency name="primefaces" org="org.primefaces" rev="4.0" />
        <dependency org="org.jboss.weld" name="weld-api" rev="1.1.Final" />
        <dependency org="org.jboss.weld" name="weld-core" rev="1.1.16.Final" />
        <dependency org="org.jboss.weld" name="weld-spi" rev="1.1.Final" />
    </dependencies>
</ivy-module>
10:31:30704错误[org.jboss.msc.service.fail](msc服务线程1-8)MSC00001:无法启动服务jboss.deployment.unit。“DWPortlet1 portlet.war”。WeldService:org.jboss.msc.service.StartException in service jboss.deployment.unit。“DWPortlet1 portlet.war”.WeldService:org.jboss.weld.exceptions.DeploymentException:weld-001408在注入点[[field]@Inject private de.pao.bean.DWPortletController.Calc]处具有限定符[@Default]的类型[Calc]的未满足依赖项 位于org.jboss.as.weld.services.WeldService.start(WeldService.java:83) 在org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)[jboss-msc-1.0.2.GA.jar:1.0.2.GA] 在org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)[jboss-msc-1.0.2.GA.jar:1.0.2.GA] 位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)[rt.jar:1.7.0_51] 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)[rt.jar:1.7.0_51] 在java.lang.Thread.run(未知源)[rt.jar:1.7.0_51] 原因:org.jboss.weld.exceptions.DeploymentException:weld-001408在注入点[[field]@Inject private de.pao.bean.DWPortletController.Calc]处具有限定符[@Default]的类型[Calc]的未满足依赖项 位于org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275) 在org.jboss.weld.bootstrap.Validator.validateInjectionPoint上(Validator.java:244) 位于org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107) 位于org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127) 位于org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346) 位于org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331) 位于org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366) 在org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83)上 位于org.jboss.as.weld.services.WeldService.start(WeldService.java:76) ... 还有5个

Bean:

> package com.test;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

@Stateless
@LocalBean
public class Calc {

    public Calc() {
    }

    public int add(int a, int b) {
        return a+b;
    }

    public int mult(int a, int b) {
        return a*b;
    }

}
> 
package de.pao.bean;

import java.io.Serializable;    
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.inject.Inject;    
import org.jboss.logging.Logger;    
import com.test.Calc;

@ManagedBean
@RequestScoped
public class DWPortletController implements Serializable {

    private static final Logger log = Logger.getLogger("1234");
    private static final long serialVersionUID = 2056281697556539581L;

    @Inject private Session0Bean sb0;
    @Inject private Calc calc;

    public DWPortletController() {
        // TODO Auto-generated constructor stub
    }

    public void buttonAction() {
        log.info("Hallo");
        sb0.sayHello();
        log.info("2+2 = " + calc.add(2, 2));
    }
}
<?xml version="1.0"?>

<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>
    <info module="portlet_primefaces_tmpl" organisation="com.liferay" />

    <dependencies defaultconf="default">
        <dependency name="jboss-el" org="org.jboss.el" rev="2.0.1.GA" />
        <dependency name="jsf-api" org="com.sun.faces" rev="2.1.27" />
        <dependency name="jsf-impl" org="com.sun.faces" rev="2.1.27" />
        <dependency name="liferay-faces-bridge-api" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-bridge-impl" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-portal" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-util" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="cdi-portlet-bridge-shared" org="com.liferay.cdi" rev="6.2.0.2" />     
        <dependency name="primefaces" org="org.primefaces" rev="4.0" />
        <dependency org="org.jboss.weld" name="weld-api" rev="1.1.Final" />
        <dependency org="org.jboss.weld" name="weld-core" rev="1.1.16.Final" />
        <dependency org="org.jboss.weld" name="weld-spi" rev="1.1.Final" />
    </dependencies>
</ivy-module>
Portlet:

> package com.test;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

@Stateless
@LocalBean
public class Calc {

    public Calc() {
    }

    public int add(int a, int b) {
        return a+b;
    }

    public int mult(int a, int b) {
        return a*b;
    }

}
> 
package de.pao.bean;

import java.io.Serializable;    
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.inject.Inject;    
import org.jboss.logging.Logger;    
import com.test.Calc;

@ManagedBean
@RequestScoped
public class DWPortletController implements Serializable {

    private static final Logger log = Logger.getLogger("1234");
    private static final long serialVersionUID = 2056281697556539581L;

    @Inject private Session0Bean sb0;
    @Inject private Calc calc;

    public DWPortletController() {
        // TODO Auto-generated constructor stub
    }

    public void buttonAction() {
        log.info("Hallo");
        sb0.sayHello();
        log.info("2+2 = " + calc.add(2, 2));
    }
}
<?xml version="1.0"?>

<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>
    <info module="portlet_primefaces_tmpl" organisation="com.liferay" />

    <dependencies defaultconf="default">
        <dependency name="jboss-el" org="org.jboss.el" rev="2.0.1.GA" />
        <dependency name="jsf-api" org="com.sun.faces" rev="2.1.27" />
        <dependency name="jsf-impl" org="com.sun.faces" rev="2.1.27" />
        <dependency name="liferay-faces-bridge-api" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-bridge-impl" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-portal" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-util" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="cdi-portlet-bridge-shared" org="com.liferay.cdi" rev="6.2.0.2" />     
        <dependency name="primefaces" org="org.primefaces" rev="4.0" />
        <dependency org="org.jboss.weld" name="weld-api" rev="1.1.Final" />
        <dependency org="org.jboss.weld" name="weld-core" rev="1.1.16.Final" />
        <dependency org="org.jboss.weld" name="weld-spi" rev="1.1.Final" />
    </dependencies>
</ivy-module>
jboss部署structure.xml:(在/portlet/docroot/WEB-INF下):


常春藤xml:

> package com.test;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

@Stateless
@LocalBean
public class Calc {

    public Calc() {
    }

    public int add(int a, int b) {
        return a+b;
    }

    public int mult(int a, int b) {
        return a*b;
    }

}
> 
package de.pao.bean;

import java.io.Serializable;    
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.inject.Inject;    
import org.jboss.logging.Logger;    
import com.test.Calc;

@ManagedBean
@RequestScoped
public class DWPortletController implements Serializable {

    private static final Logger log = Logger.getLogger("1234");
    private static final long serialVersionUID = 2056281697556539581L;

    @Inject private Session0Bean sb0;
    @Inject private Calc calc;

    public DWPortletController() {
        // TODO Auto-generated constructor stub
    }

    public void buttonAction() {
        log.info("Hallo");
        sb0.sayHello();
        log.info("2+2 = " + calc.add(2, 2));
    }
}
<?xml version="1.0"?>

<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>
    <info module="portlet_primefaces_tmpl" organisation="com.liferay" />

    <dependencies defaultconf="default">
        <dependency name="jboss-el" org="org.jboss.el" rev="2.0.1.GA" />
        <dependency name="jsf-api" org="com.sun.faces" rev="2.1.27" />
        <dependency name="jsf-impl" org="com.sun.faces" rev="2.1.27" />
        <dependency name="liferay-faces-bridge-api" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-bridge-impl" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-portal" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="liferay-faces-util" org="com.liferay.faces" rev="3.2.4-ga5" />
        <dependency name="cdi-portlet-bridge-shared" org="com.liferay.cdi" rev="6.2.0.2" />     
        <dependency name="primefaces" org="org.primefaces" rev="4.0" />
        <dependency org="org.jboss.weld" name="weld-api" rev="1.1.Final" />
        <dependency org="org.jboss.weld" name="weld-core" rev="1.1.16.Final" />
        <dependency org="org.jboss.weld" name="weld-spi" rev="1.1.Final" />
    </dependencies>
</ivy-module>

我做错了什么