Java EE bean with interface not being created for injection -


i have simple case have rest service myservice should injected bean beanb of type beanb implements interface beanbinterface. error classic weld-001408 1 shown below:

org.jboss.weld.exceptions.deploymentexception: weld-001408: unsatisfied dependencies type beanbinterface qualifiers @beanbqualifier   @ injection point [backedannotatedfield] @inject @beanbqualifier public com.example.myservice.beanb   @ com.example.myservice.beanb(myservice.java:0) 

the rest service:

import javax.ws.rs.path; import javax.inject.inject;  @path("/") public class myservice {     @inject      @beanbqualifier(beanbqualifier.type.prod)     public beanbinterface beanb;      public myservice() {} } 

bean interface:

public interface beanbinterface { } 

bean implementation:

import javax.ejb.singleton; import javax.ejb.startup; import javax.enterprise.inject.produces;  @startup @singleton @beanbqualifier(beanbqualifier.type.prod) public class beanb implements beanbinterface {     private string name = "b";      public beanb() {}      public string getname() {return name;}      public void setname(string name) {this.name = name;} } 

the bean qualifier

import javax.inject.qualifier; import java.lang.annotation.retention; import java.lang.annotation.target; import static java.lang.annotation.elementtype.field; import static java.lang.annotation.elementtype.type; import static java.lang.annotation.retentionpolicy.runtime;  @qualifier @retention(runtime) @target({field, type}) public @interface beanbqualifier {    type value();    enum type{prod, test} } 

beans.xml (tried in meta-inf/beans.xml , tried in web-inf/beans.xml)

<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"     xsi:schemalocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"      bean-discovery-mode="annotated"> </beans> 

i tried bean-discovery-mode="all" no luck.

if make declaration of beanb use concrete class beanb rather interface in myservice works (but defeats purpose of interface):

if add @produces factory method myservice construct bean works defeats purpose of letting container instantiate beans me:

@javax.enterprise.inject.produces public static beanb get() {     return new beanb(); } 

but if @produces factory method returns interface instead won't work:

@javax.enterprise.inject.produces public static beanbinterface get() {     return new beanb(); } 

ejbs have weird rules interfaces exposed implemented. interfaces marked @local/@remote exposed. if want use bean interface , class need add @localbean ejb.

in short: add @local interface or @local(beanbinterface.class) beanb