CDI とクラスの継承に苦労しています。私は次のように宣言されたJAX-RSコントローラーを持っています:
@Path("/share")
public class ControllerShare extends BaseController {
@Inject
private ServiceShare serviceShare;
@PostConstruct
private void verifInit() throws ExceptionTechnique {
log.warn("Checking CDI injection");
if (serviceShare == null) {
log.error("serviceAccount not initialized. Check your EJB configuration");
throw new ExceptionTechnique("serviceShare not initialized. Check your EJB configuration.");
}
}
...
}
このコントローラーは、次のように宣言された基本コントローラーを拡張します。
public abstract class BaseController {
private Logger log = LoggerFactory.getLogger(ControllerShare.class);
@Context protected HttpServletRequest request;
@Inject private ControlerSession ctrlSession;
public BaseController() {}
@PostConstruct
private void verifInit() throws ExceptionTechnique {
log.warn("Checking CDI injection");
if (ctrlSession == null) {
log.error("controllerSession not initialized. Check your CDI configuration");
throw new ExceptionTechnique("serviceAccount not initialized. Check your CDI configuration.");
}
}
...
}
問題は、インジェクションが ControllerShare で正しく行われている (「CDI インジェクションのチェック」が正しく表示されている) ことですが、BaseController クラス (ctrlSession が null) では行われていません。@Named とその他の組み合わせを試してみましたが成功しませんでした。インジェクションは、BaseController ではなく、ControllerShare でのみ行われます。
編集: もう1つ:不思議なことに、@Contextは正常に機能しています。リクエストが設定され、値が正しい。
説明と解決策をありがとう。