简体   繁体   English

Apache wicket - 页面存储 - 使用 AsynchronousPageStore 时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM