Deltaspike (1.4.0) と Quartz (2.2.1) を使用してジョブをスケジュールしています。TestJob Bean では、ResourceBundle が注入されます。ResourceBundle のプロデューサーには、facesContext が必要ですが、これは常に null です。
スケジューラ Bean に適切に ResourceBundle を注入するにはどうすればよいですか? @Scheduled を使用すると、facesContext が常に null になるのはなぜですか?
@Scheduled(cronExpression = "0 0/1 * * * ?")
public class TestJob implements Job {
@Inject private EntityManager em;
@Inject private transient ResourceBundle i18n;
public TestJob() {}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("TestJob executed...");
}
}
ResourceBundle プロデューサー
public class ResourceBundleProducer implements Serializable {
@Inject public FacesContext facesContext;
@Produces
public ResourceBundle getResourceBundle() {
if (facesContext.getViewRoot() != null)
return ResourceBundle.getBundle("i18n.i18n", facesContext.getViewRoot().getLocale());
else
return ResourceBundle.getBundle("i18n.i18n", facesContext.getApplication().getViewHandler().calculateLocale(facesContext));
}
}
FacesContext プロデューサー
public class FacesContextProducer implements Serializable {
@Produces
@RequestScoped
public FacesContext produceFacesContext() {
return FacesContext.getCurrentInstance();
}
}