Ben eşzamanlı istek bir çok şeyin üstesinden zorunda olacak bir Wicket web uygulaması inşa ediyorum. Yükleme testi yapmak için bir test ortamı ve bazı jmeter komut dosyaları kurdum ve çoğu sayfayı Stateless yaparsam uygulamamın CPU ve bellek ayak izini azaltabildiğimi farkettim.Wicket'in "AjaxLink" Vatansızlığını nasıl yapabilirim?
Ben durum bilgisi olmak Sayfamı neden olan bileşenlerin hangi bana göstermek için büyük sayfanın onBeforeRender() yöntemine kodunu ekledik. Bu benim tespit etmek için var kod şudur:
Ben durum bilgisi davranış sayfalarında mevcut bileşenlerden bazıları tarafından kullanılan AjaxLinks kaynaklanır görüyoruz çıktısında@Override
protected void onBeforeRender() {
if (!getSession().isTemporary()) {
visitChildren(Component.class, new IVisitor<Component>() {
@Override
public Object component(Component component) {
String pageClassName = AbstractStatelessBasePage.this.getClass().getName();
if (!component.isStateless()) {
String msg = pageClassName+" is stateful because of stateful component " + component.getClass().getName() + " with id " + component.getId() + ".";
List<IBehavior> behaviourList = component.getBehaviors();
for (IBehavior iBehavior : behaviourList) {
if (!iBehavior.getStatelessHint(component)) {
msg += "\n\t" + "The component has stateful behaviour: " + iBehavior.getClass().getName();
}
}
LOG.error(msg);
}
checkedPages.add(pageClassName);
return CONTINUE_TRAVERSAL;
}
});
}
}
:
ERROR - AbstractStatelessBasePage$1.component(45) | HomePage is stateful because of stateful component InfoGrid$InfoButton with id infoButton.
The component has stateful behaviour: org.apache.wicket.ajax.markup.html.AjaxLink$1
Ben Birkaç yerde "true" döndüren getStatelessHint() yöntemlerini eklemeyi denedi, ancak yardımcı olmadı. Ayrıca AjaxLink, üst sınıfları ve bazı çevreleyen kodların Wicket kaynak kodunu da kontrol ettim, ancak AjaxLink'in neden her durumda durumsal olması gerektiğini anlayamıyorum. Benim durumumda
, AjaxLink bir başka Vatansız sayfasında ve bağlantı durumunu saklamaz. Wicket'i bu AjaxLink'in vatansız olabileceğini nasıl anlayabilirim? Yardımlarınız için
sayesinde Rolf
Düzenleme: Kabul cevap Wicket 1.4.19 ile çalışır.
Eklenen maven pom.xml aşağıdaki:
<dependency>
<groupId>com.jolira</groupId>
<artifactId>wicket-stateless</artifactId>
<version>1.0.8</version>
</dependency>
"StatelessAjaxFallbackLink" genişletmek için "AjaxLink" genişletilmiş tüm bileşenleri değiştirildi.
eklemeyi unutmayın sizin WicketApplication sınıfa aşağıdaki size bazı sorun giderme zaman kazandıracak: "benzeri (
@Override
protected IRequestCycleProcessor newRequestCycleProcessor() {
return new StatelessWebRequestCycleProcessor();
}
StatelessForm ve diğer vatansız şeyler tekrarlayıcı içinden çalışmıyor lütfen unutmayın Herhangi bir nedenle ListView ").
Aslında panelleri değiştiriyorum, ancak oturumda bunu kaydediyorum, böylece sayfayı başlatırken doğru "değiştirilen" panelleri oluşturabilirim. Bu, durumu sayfadan oturuma taşır. – Rolf
Jolira'nın StatelessAjaxFallbackLink orijinal sorumu içinde belirttiğim sorunu çözdü. Şu anda, Wicket'in hangi bileşenin hedefleneceğini anlayamadığı, tekrarlayan iç mekanlarda sorunla karşılaşıyorum. Bu yeni bir soruyla sonuçlanabilir :-) – Rolf
Wicket 6.10 için bir şey var mı? –