5 Replies Latest reply on Jan 6, 2011 8:10 AM by cernicb

    Unsatisfied dependencies exeption when using bean with interface

    janey

      Hello,


      I am using JBoss M4 with Weld and I am getting a DeploymentException. I generally know the reasons for such exceptions, but this time I cant get rid of it.


      I implemented the following classes:



      @Named
      @ConversationScoped
      @Stateful(name = "AccountHome")
      public class AccountHome extends HomeBean<Account, EntityManager> implements IAccount {
           
           // -- generated attribute, constant + association declarations ----------
           
           @Inject
           private BankHome bankHome;
           
           @Inject
           private CustomerHome customerHome;
         
      [...]
      
      // methods left out for better reading
      }
      
      



      and



      @Named
      @ConversationScoped
      @Stateful(name = "BankHome")
      public class BankHome extends HomeBean<Bank, EntityManager> {
           
           // -- generated attribute, constant + association declarations ----------
           
           @Inject
           private BankgroupHome bankgroupHome;
           
           @Inject
           private AccountHome accountHome;
      
      [...]
      
      // methods left out for better reading
      
      }
      







      and the interface:


      public interface IAccount {
           
           /**
            * method stub for further implementation
            * @param     amount     
            * @return     
            */
           public boolean withdraw(float amount);
           
           /**
            * method stub for further implementation
            * @param     amount     
            * @return     
            */
           public boolean deposit(float amount);
           
           /**
            * method stub for further implementation
            * @return     
            */
           public AccountStateEnum getState();
      
      }
      



      On deployment I am getting the following exception:


      11:10:22,337 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=vfs:///D:/Studium/Masterarbeit/JBoss/jboss-6.0.0.20100721-M4/server/default/deploy/Bank.ear_WeldBootstrapBean state=Create: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Injection point has unsatisfied dependencies.  Injection point:  field Bank_Tutorial_Weld_Server.bankgroupServer.entity.BankHome.accountHome;  Qualifiers:  [@javax.enterprise.inject.Default()]
           at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:276)
           at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:122)
           at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:141)
           at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:331)
           at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:317)
           at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:399)
           at org.jboss.weld.integration.deployer.env.helpers.BootstrapBean.boot(BootstrapBean.java:121) [:6.0.0.20100721-M4]
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_16]
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_16]
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_16]
           at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_16]
           at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:60) [jboss-reflect.jar:2.2.0.Alpha9]
      
      




      I added the interface because I wanted to implement a decorator. So I created the following class:



      @Decorator
      abstract class AccountChecker implements IAccount, Serializable {
           
           // -- generated attribute, constant + association declarations ----------
           
           @Inject
           @Any
           @Delegate
           private IAccount account;
      
      [...]
      
      // methods left out for better reading
      }
      




      Without the interface for class AccountHome and without the decorator I dont get the exception and everything works fine. But with the interface the injection point of the class BankHome cannot be resolved any more.


      What am I missing? I searched the internet, the forum and the specification for answers, but couldnt find anything that explains the situation. I want to use a decorator but I also want to inject the concrete class AccountHome into the BankHome class. Why isnt that possible any more?


      I rather expected to get an ambiguous dependency exception than a unsatisfied dependencies exception.


      Any ideas?


      Thanks Janey