Ich muss eine TimerTask starten, die ein PortletPreferences-Objekt verwendet.So erhalten Sie PortletPreferences ohne ein Anforderungsobjekt
hier ist, was ich habe jetzt (MyUpdateTask hier erstreckt 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
einen ScheduledExecutorService verwendet, die einen Dienst erzeugt regelmäßig auf meine Daten zu aktualisieren.
das Problem, das ich gerade habe, ist, dass ((PortletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getPreferences();
wirft UnsupportedOperationException, weil es derzeit keine Anfrage gibt. Wie kann ich PortletPreferences ohne eine Anfrage erhalten?
Ich brauche ein PortletPreferences-Objekt für die Aufgabe.
Wenn Sie die Timereinstellung nicht dynamisch ändern müssen, können Sie alternativ auch eine '' verwenden. Dann könnten Sie die Einstellungen in Ihrer Bean erhalten, indem Sie 'FacesContext.getCurrentInstance(). GetExternalContext.getInitParam (" myTimerSetting ")' stattdessen aufrufen. –
stiemannkj1
Leider verwende ich derzeit kein Liferay Portal. Ich verwende WebSphere – Sirmyself
. Möglicherweise möchten Sie sehen, ob WebSphere Portal über eine herstellerspezifische/proprietäre API verfügt, die der oben beschriebenen Liferay PortletPreferencesFactoryUtil ähnelt. –