This document provides an overview of the state of the Apache Wicket framework. It discusses Wicket's origins and history from 2004 to present, including major releases and contributions over time. It also summarizes key metrics about Wicket's codebase and community based on an Ohloh report, including lines of code, contributors, and estimated development effort. Finally, it previews possible future directions for Wicket in areas like Java 8 support, JavaScript integration, and semantic versioning.
5. “We continue to see teams run into trouble using
JSF -- JavaServer Faces -- and are recommending
you avoid this technology.”
–ThoughtWorks Technology Radar January 2014
Wicket Developers Rejoice!
!
Our archenemy has been de
nounced!!
!
Or is there more to this stor
y?
6. “We continue to see teams run into trouble using
JSF -- JavaServer Faces -- and are recommending
you avoid this technology. Teams seem to choose
JSF because it is a J2EE standard without really
evaluating whether the programming model suits
them. We think JSF is flawed because it tries to
abstract away HTML, CSS and HTTP, exactly the
reverse of what modern web frameworks orks
from ThoughtW do. JSF,
he full webforms, attempts to create are
TASP.NET quote
like
. stateless od bits HTTP
gy Radthe The go protocol
echnolo top of ar
T
statefulness on
next s ide ..
the a whole lhost.of problems
on
and ends up causing
involving shared server-side state. We are aware
of the improvements in JSF 2.0, but think the
model is fundamentally broken. We recommend
teams use simple frameworks and embrace and
understand web technologies including HTTP,
HTML and CSS.”
–ThoughtWorks Technology Radar January 2014
7. “We continue to see teams run into trouble using
JSF and are recommending you avoid this
technology. We think JSF is flawed because it tries
to abstract away HTML, CSS and HTTP. JSF, like
ASP.NET webforms, attempts to create
statefulness on top of the stateless protocol HTTP.
We think the model is fundamentally broken.”
–ThoughtWorks Technology Radar January 2014
This is not a critique of JSF in part
icular but
(server side) component framework
s. The
grunt of the critique is that JSF att
empts to
create state fullness on top of the
stateless
protocol–which is precisely what J
SF, .Net,
Wicket and Tapestry are doing.
8. “We recommend teams use simple
frameworks and embrace and
understand web technologies
including HTTP, HTML and CSS.”
–ThoughtWorks Technology Radar January 2014
with this assessment:!
I don’t agree
managing frameworks were
server side, state
solution for problems
created to provide a
ifficult to solve with “simple
that are d
frameworks”. !
2004 is not the solution!
Going back to
9. A typical screen in one of our 1000+ pag
e
multi-tenant SaaS applications.!
Would a“simple framework” make it po
ssible
to maintain 3 of these 1M lines of code
applications with just 30 developers?
42. Commit activity
Wicket in Action
Wicket Cookbook
e a dent
used quit
ng has ca
tivities:!
book writi
related ac
ur Wicket
in o
ajor part.
plays a m
burn-out
44. In a Nutshell, Wicket...
… has had 17,645 commits made by 52 contributors
representing 314,959 lines of code
– Ohloh report for Wicket
45. In a Nutshell, Wicket...
… has had 17,645 commits made by 52 contributors
representing 314,959 lines of code
… is mostly written in Java with
a well-commented source code
– Ohloh report for Wicket
46. In a Nutshell, Wicket...
… has had 17,645 commits made by 52 contributors
representing 314,959 lines of code
… is mostly written in Java with
a well-commented source code
… has a well established, mature codebase maintained
by a large development team with stable Y-O-Y
commits
– Ohloh report for Wicket
47. In a Nutshell, Wicket...
… has had 17,645 commits made by 52 contributors
representing 314,959 lines of code
… is mostly written in Java with
a well-commented source code
… has a well established, mature codebase maintained
by a large development team with stable Y-O-Y
commits
… took an estimated 83 years of effort (COCOMO model)
starting with its first commit in September, 2004
ending with its most recent commit 2 days ago
– Ohloh report for Wicket
58. Wicket 8
Anything written here is just
speculation from my side. This is
not set in stone, this is not how
e are going to implement things,
w
or quite reasonably at all.
88. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
try {
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
} catch(Exception e) {
}
89. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
try {
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
} catch(Exception e) {
}
90. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
try {
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
} catch(Exception e) {
}
91. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
try {
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
} catch(Exception e) {
}
92. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
Object result = nashorn.eval(js);
try {
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
} catch(Exception e) {
}
93. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
try {
} catch(Exception e) {
}
94. ScriptEngineManager m
= new ScriptEngineManager();
!
ScriptEngine nashorn
= m.getEngineByName("nashorn");
!
nashorn.put("age", validatable.getValue());
String js = "age >= 18";
!
try {
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
} catch (Exception e) {
}
95. ScriptEngineManager m
=
!
ScriptEngine nashorn
= m.getEngineByName(
!
nashorn.put( was only a proof-of-concept
This
.
String js =is probably won
Th
’t ever fly due
!
to business entities residing on
try
server, and difficult to share those
Object result = nashorn.eval(js);
in browser, including I18N
m e = new
ValidationErroressages. ValidationError()
}
}
}
validatable.error(e);
105. experimental modules
Jay! Many exper
imental modules
have been upgra
ded to core
modules! beanva
lidation, CDI-1.1,
web sockets will
be part of Wicket
core from 6.14 an
d onwards.