什么可能导致 Apache Wicket 的页面过期错误,任何版本
What might cause a page expired error with Apache Wicket, any versions
我们在点击时间歇性地出现页面过期异常,这可能是什么原因导致的。
Apache Wicket,旧版本 5.
这也可能是二级缓存的一些原因:
public class HttpSessionStore extends HttpSessionStore {
/**
* Logger instance.
*/
private static final Logger log = Logger.getLogger(PFSHttpSessionStore.class);
private final IPageStore pageStore;
/**
* Construct.
*/
public PFSHttpSessionStore(final Application application, final IPageStore pageStore) {
super(application);
this.pageStore = pageStore;
Application.get().getPageSettings().setAutomaticMultiWindowSupport(false);
}
private static MetaDataKey<Map<String, IntHashMap<Page>>> USED_PAGES = new MetaDataKey<Map<String, IntHashMap<Page>>>() {
private static final long serialVersionUID = 1L;
};
public static IntHashMap<Page> getUsedPages(String pageMapName) {
Map<String, IntHashMap<Page>> usedPages = RequestCycle.get().getMetaData(USED_PAGES);
if (usedPages == null) {
usedPages = new HashMap<String, IntHashMap<Page>>();
RequestCycle.get().setMetaData(USED_PAGES, usedPages);
}
IntHashMap<Page> intHashMap = usedPages.get(pageMapName);
if (intHashMap == null) {
intHashMap = new IntHashMap<Page>();
usedPages.put(pageMapName, intHashMap);
}
return intHashMap;
}
@Override
public IPageMap createPageMap(final String name) {
final IPageMap pageMap = new SecondLevelCachePageMap(Session.get().getId(), Application.get(), name);
log.info("//SYSTEM_INFO//-SESSION STORE : " + " creating new page map, pageMap="+pageMap + " name=" + name);
return pageMap;
}
这里是错误。
[Time:2022.02.17:15:56:25:927][ThreadHashCode:-1365274941][Message:[SYSTEM_INFO] - [ContactManager] ERROR <CRITICAL_ERROR> - On Runtime Exception, Object state at time of err:|sessionId=CAc6_oHyXvRpqJhz6LpVNjN|agentId=CM773|errMsg=Request cannot be processed]
[Time:2022.02.17:15:58:38:602][ThreadHashCode:-879837006][Message:[SYSTEM_INFO] - [ContactManager] ERROR <CRITICAL_ERROR> - On Runtime Exception, Object state at time of err:|sessionId=i_LyvitDoQEKFFxfQA15i49|agentId=SFGX4|errMsg=Cannot find the rendered page in session [pagemap=null,componentPath=0:contactPanel:contact:cForm:contactLookupText,versionNumber=0]]
可能导致此错误的一些直接原因如下:
首先,可能值得检查以确保未超出页面存储大小。如果有,则可能是商店中的某些页面已被删除。
getSession().getApplication().getStoreSettings().getMaxSizePerSession()
其次,我建议检查 http 会话是否已过期。如果有,会话的页面将从页面存储中删除。
((HttpServletRequest)getRequestCycle().getRequest().getContainerRequest()).getSession().getMaxInactiveInterval()
最后,可能是在将页面保存到页面存储的过程中发生了错误。如果是这种情况,您完全有可能因为这个原因而无法从页面存储中接收到该页面。
此外,请记住,Apache Wicket 1.5 是 discontinued 不久前的,因此与此相关的一切都 非常 旧。版本可能不匹配或出现新问题。最好的办法是尽快迁移到较新的版本以避免其他不明显的错误。
我们在点击时间歇性地出现页面过期异常,这可能是什么原因导致的。
Apache Wicket,旧版本 5.
这也可能是二级缓存的一些原因:
public class HttpSessionStore extends HttpSessionStore {
/**
* Logger instance.
*/
private static final Logger log = Logger.getLogger(PFSHttpSessionStore.class);
private final IPageStore pageStore;
/**
* Construct.
*/
public PFSHttpSessionStore(final Application application, final IPageStore pageStore) {
super(application);
this.pageStore = pageStore;
Application.get().getPageSettings().setAutomaticMultiWindowSupport(false);
}
private static MetaDataKey<Map<String, IntHashMap<Page>>> USED_PAGES = new MetaDataKey<Map<String, IntHashMap<Page>>>() {
private static final long serialVersionUID = 1L;
};
public static IntHashMap<Page> getUsedPages(String pageMapName) {
Map<String, IntHashMap<Page>> usedPages = RequestCycle.get().getMetaData(USED_PAGES);
if (usedPages == null) {
usedPages = new HashMap<String, IntHashMap<Page>>();
RequestCycle.get().setMetaData(USED_PAGES, usedPages);
}
IntHashMap<Page> intHashMap = usedPages.get(pageMapName);
if (intHashMap == null) {
intHashMap = new IntHashMap<Page>();
usedPages.put(pageMapName, intHashMap);
}
return intHashMap;
}
@Override
public IPageMap createPageMap(final String name) {
final IPageMap pageMap = new SecondLevelCachePageMap(Session.get().getId(), Application.get(), name);
log.info("//SYSTEM_INFO//-SESSION STORE : " + " creating new page map, pageMap="+pageMap + " name=" + name);
return pageMap;
}
这里是错误。
[Time:2022.02.17:15:56:25:927][ThreadHashCode:-1365274941][Message:[SYSTEM_INFO] - [ContactManager] ERROR <CRITICAL_ERROR> - On Runtime Exception, Object state at time of err:|sessionId=CAc6_oHyXvRpqJhz6LpVNjN|agentId=CM773|errMsg=Request cannot be processed]
[Time:2022.02.17:15:58:38:602][ThreadHashCode:-879837006][Message:[SYSTEM_INFO] - [ContactManager] ERROR <CRITICAL_ERROR> - On Runtime Exception, Object state at time of err:|sessionId=i_LyvitDoQEKFFxfQA15i49|agentId=SFGX4|errMsg=Cannot find the rendered page in session [pagemap=null,componentPath=0:contactPanel:contact:cForm:contactLookupText,versionNumber=0]]
可能导致此错误的一些直接原因如下:
首先,可能值得检查以确保未超出页面存储大小。如果有,则可能是商店中的某些页面已被删除。
getSession().getApplication().getStoreSettings().getMaxSizePerSession()
其次,我建议检查 http 会话是否已过期。如果有,会话的页面将从页面存储中删除。
((HttpServletRequest)getRequestCycle().getRequest().getContainerRequest()).getSession().getMaxInactiveInterval()
最后,可能是在将页面保存到页面存储的过程中发生了错误。如果是这种情况,您完全有可能因为这个原因而无法从页面存储中接收到该页面。
此外,请记住,Apache Wicket 1.5 是 discontinued 不久前的,因此与此相关的一切都 非常 旧。版本可能不匹配或出现新问题。最好的办法是尽快迁移到较新的版本以避免其他不明显的错误。