2017-10-17 150 views
1

我需要啓動一個使用PortletPreferences對象的TimerTask。如何在沒有請求對象的情況下獲得PortletPreferences

這裏就是我現在(MyUpdateTask這裏延伸的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使用,其產生的服務,定期更新我的數據的ScheduledExecutorService的。

我現在的問題是,((PortletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getPreferences();拋出一個UnsupportedOperationException因爲目前沒有請求。如何在沒有請求的情況下獲得PortletPreferences?

我確實需要任務的PortletPreferences對象。

回答

2

如果使用Liferay門戶,那麼......

在門戶生命週期的RENDER_PHASE,Liferay門戶執行render_portlet.jsp(其中規定了PortletPreferences對象爲RenderRequest)。 Lines 52-54 of render_portlet.jsp這個樣子的:

PortletPreferencesIds portletPreferencesIds = 
    PortletPreferencesFactoryUtil.getPortletPreferencesIds(request, portletId); 
PortletPreferences portletPreferences = 
    PortletPreferencesLocalServiceUtil.getStrictPreferences(portletPreferencesIds); 

所以我建議你調用的重載PortletPreferencesFactoryUtil.getPortletPreferencesIds(...)的方法去做採取request對象,以檢索與門戶相關的喜好之一。

由於您無權訪問PortletConfig,因此您需要將portletId硬編碼爲String常量。如果您需要動態獲取portletId,那麼您可以使用@Override GenericFacesPortlet.init(PortletConfig)而不是@ApplicationScoped bean,然後從那裏啓動TimerTask。否則,如果不使用Liferay Portal,那麼我不知道Portlet API的任何部分可以讓您訪問PortletRequest上下文外的PortletPreferences

+0

或者,如果您不需要動態修改計時器設置,則可以使用「」代替。然後,您可以通過調用'FacesContext.getCurrentInstance()。getExternalContext.getInitParam(「myTimerSetting」)'來獲得bean中的設置。 – stiemannkj1

+0

不幸的是,我目前沒有使用Liferay Portal。我正在使用WebSphere – Sirmyself

+0

您可能想看看WebSphere Portal是否具有與上述Liferay的PortletPreferencesFactoryUtil類似的供應商特定/專用API。 –

相關問題