[英]Apache wicket - page store - error while using AsynchronousPageStore
I am trying to use AsynchronousPageStore for our Application, by doing the following我正在尝试通过执行以下操作为我们的应用程序使用 AsynchronousPageStore
First I created an asynchronous DiskPageStore首先我创建了一个异步 DiskPageStore
public class McAsynchronousDiskPageStore extends DiskPageStore
{
public McAsynchronousDiskPageStore()
{
super( PortalApp.this.getName(), PortalApp.this.getStoreSettings().getFileStoreFolder(), Bytes.kilobytes( 40000));
}
@Override
public boolean canBeAsynchronous(IPageContext context)
{
return true;
}
}
To pass it as delegate for an implementation of AsynchronousPageStore将其作为 AsynchronousPageStore 实现的委托传递
public class CustomPageStoreManeger extends AsynchronousPageStore
{
private final IPageStore delegate;
public CustomPageStoreManeger(IPageStore delegate)
{
super( delegate, 100);
this.delegate = delegate;
}
@Override
public void destroy()
{
Logger.getLogger( this).logInfo( " page store Size" + ((IPersistentPageStore)delegate).getTotalSize());
}
@Override
public void addPage(IPageContext context, IManageablePage page)
{
if( INotPersistentPage.class.isAssignableFrom( page.getClass()))
{
Logger.getLogger( this).debug( " ignoring page persitence" + page.getClass());
}
else
{
super.addPage( context, page);
}
}
I'm setting it as follows in my WicketApplication class我在我的 WicketApplication class 中设置如下
setPageManagerProvider( new DefaultPageManagerProvider( this)
{
@Override
protected IPageStore newPersistentStore()
{
return new CustomPageStoreManeger( new McAsynchronousDiskPageStore());
}
});
yet, I get the following error in the console然而,我在控制台中收到以下错误
09:31:44,699 ERROR [AsynchronousPageStore$PageAddingRunnable] (Wicket-AsyncPageStor) An error occurred while saving asynchronously 'PendingAdd [sessionId=6A4jzJpJbU8YMgb9J-_npsnLGsywu6xi0jJmkAiY, pageId=7, pageClass=org.apache.wicket.pageStore.SerializedPage]': org.apache.wicket.WicketRuntimeException: session attribute can not be changed asynchronuously
at deployment.xx-12.0.ear//org.apache.wicket.pageStore.AsynchronousPageStore$PendingAdd.getSessionAttribute(AsynchronousPageStore.java:198)
at deployment.xx-12.0.ear//org.apache.wicket.pageStore.AsynchronousPageStore$PendingAdd.getSessionAttribute(AsynchronousPageStore.java:201)
at deployment.xx-12.0.ear//org.apache.wicket.pageStore.AbstractPersistentPageStore.getSessionIdentifier(AbstractPersistentPageStore.java:149)
at deployment.xx-12.0.ear//org.apache.wicket.pageStore.AbstractPersistentPageStore.canBeAsynchronous(AbstractPersistentPageStore.java:76)
at deployment.xx-12.0.ear//org.apache.wicket.pageStore.AsynchronousPageStore.addPage(AsynchronousPageStore.java:369)
at deployment.xx-12.0.ear.web.war/xxx.PortalApp$CustomPageStoreManeger.addPage(PortalApp.java:206)
at deployment.xx-12.0.ear//org.apache.wicket.pageStore.AsynchronousPageStore$PageAddingRunnable.run(AsynchronousPageStore.java:292
any idea what I might be doing wrong here?知道我在这里做错了什么吗?
IMO there is no need of McAsynchronousDiskPageStore
. IMO 不需要
McAsynchronousDiskPageStore
。
Instead of overriding #newPersistentStore()
in DefaultPageManagerProvider
you should override protected IPageStore newAsynchronousStore(IPageStore pageStore)
and return McAsynchronousDiskPageStore
without any delegates.不要覆盖
DefaultPageManagerProvider
中的#newPersistentStore()
,您应该覆盖protected IPageStore newAsynchronousStore(IPageStore pageStore)
并在没有任何委托的情况下返回McAsynchronousDiskPageStore
。
https://github.com/apache/wicket/blob/0c4b88e16a3ec7478fbc8f86991c6b07805ed821/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java#L158 https://github.com/apache/wicket/blob/0c4b88e16a3ec7478fbc8f86991c6b07805ed821/wicket-core/src/main/java/org/apache/wicket/DefaultPageManagerProvider.java#L158
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.