Hi,
I'm learning cdi and don't quite understand how to inject parameterized beans. I use glassfish 3.0.1 final. I have one generic slsb:
@Stateless
@Dependent
public class GenericBean<T extends BaseObject, I extends Serializable> implements Serializable {
...
}
where BaseObject is base class of all entities and is also generic:
public abstract class BaseObject<I extends Serializable> implements Serializable {
...
}
so I use it raw for now. Next I have jsf managed bean:
@SessionScoped
@Named
public class Login implements Serializable {
GenericBean<User, Long> genericBean;
public Login() {
}
@Inject
public Login(GenericBean<User, Long> genericBean) {
this.genericBean = genericBean;
System.out.println(this.genericBean.find(User.class, 1006L));
}
}
where User is my only entity that extends BaseObject<Long>.
In this arrangement everything works fine. However, if I change GenericBean class so that BaseObject param is not raw any more:
@Stateless
@Dependent
public class GenericBean<T extends BaseObject<I>, I extends Serializable> implements Serializable {
...
}
I get a
Exception while loading the app : org.glassfish.deployment.common.DeploymentException: WELD-001408 Injection point has unsatisfied dependencies. Injection point: parameter 1 of constructor public org.login.jsf.Login(org.login.model.Credentials,org.login.session.GenericBean); Qualifiers: [@javax.enterprise.inject.Default()]
when try to deploy application. Is that okay? If it's okay, why is it?
Also, that second id parameter, I
, extends Serializable and I get warning within eclipse that says No bean is eligible for injection to the injection point
on genericBean injection point, but in runtime, everything is fine. If I extend Comparable instead of Serializable, warning disapears. I use Helios Service Release 1.