JSF /JavaEEアプリケーションにCDIを使用しようとしています。次のクラス階層があります。
/**
* base controller class
* also contains some final methods and an inner enum class declaration
*/
public abstract class AbstractCrudController<K, E> implements Serializable {
private Class<E> entityClass;
public AbstractCrudController(Class<E> entityClass) {
this.entityClass = entityClass;
}
// ...
}
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class CategoryController extends AbstractCrudController<Long, Category> implements Serializable {
public CategoryController() {
super(Category.class);
}
//...
}
アプリケーションをGF3.1にデプロイしようとすると、次のCDI/Weld例外が発生します。
重大:アプリのロード中の例外:WELD-001435通常のスコープのBeanクラスcom.web.AbstractCrudControllerは、引数なしのコンストラクターがないため、プロキシできません。org.jboss.weld.exceptions.UnproxyableResolutionException:WELD-001435通常のスコープのBeanクラスcom.web.AbstractCrudControllerは、引数なしのコンストラクターがないため、プロキシ可能ではありません。org.jboss.weld.util.Proxies.getUnproxyableClassException(Proxies.java:215)at org.jboss.weld.util.Proxies.getUnproxyableTypeException(Proxies.java:166)at org.jboss.weld.util.Proxies.getUnproxyableTypesException (Proxies.java:191)org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:134)、org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:148)、org.jboss。 weld.bootstrap.Validator。
基本クラスに引数なしのコンストラクターを追加しても、Weldは、finalメソッドがあるため、クラスがプロキシ可能ではないという同じ例外を除いて文句を言います。WELDがクラスの設計を変更するように強制するのはなぜですか?JSF@ManagedBeanアノテーションを使用するとすべてが正常に機能しました。
助けていただければ幸いです。ありがとう、テオ