Je dois démarrer un TimerTask qui utilise un objet PortletPreferences.Comment obtenir un PortletPreferences sans objet de requête
voici ce que j'ai pour l'instant (MyUpdateTask étend ici TimerTask):
@ManagedBean(name = "myManagedBean", eager = true)
@ApplicationScoped
public class MyManagedBean implements Serializable {
static MyUpdateTask updateTask;
@PostConstruct
public void init(){
try {
PortletPreferences portletPrefs = ((PortletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getPreferences();
updateTask = new MyUpdateTask(portletPrefs);
MyTaskService.getInstance().update(updateTask);
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
MyTaskService.update
utilise un ScheduledExecutorService qui génère un service de mettre à jour régulièrement mes données. Le problème que j'ai en ce moment est que ((PortletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getPreferences();
jette un UnsupportedOperationException parce qu'il n'y a actuellement aucune demande. Comment puis-je obtenir une PortletPreferences sans demande?
J'ai besoin d'un objet PortletPreferences pour la tâche.
Alternativement, si vous n'avez pas besoin de modifier dynamiquement le réglage de la minuterie, vous pouvez utiliser un '' à la place. Ensuite, vous pouvez obtenir les paramètres dans votre bean en appelant 'FacesContext.getCurrentInstance(). GetExternalContext.getInitParam (" myTimerSetting ")' à la place. –
stiemannkj1
Malheureusement, je n'utilise pas actuellement Liferay Portal. J'utilise WebSphere – Sirmyself
Vous pouvez vérifier si le portail WebSphere dispose d'une API propriétaire/spécifique au fournisseur similaire à PortletPreferencesFactoryUtil de Liferay décrite ci-dessus. –