SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
The current state of the Apache Wicket framework in 2014 as presented at the DEVdev meetup held in Deventer, the Netherlands.
- A critique of ThoughtWorks' Technology Review 2014 where they slam JSF (jay) as a concept (nay)
- A look back at 10 years of Wicket
- A review of the current Wicket versions
- An outlook and roadmap for Wicket 7 and Wicket 8
The DEVdev (Deventer Developers) is a new meetup for any developer in the eastern part of the Netherlands (the right side of the IJssel river). This presentation was delivered at the first meetup, and was kindly sponsored by Topicus B.V.
The current state of the Apache Wicket framework in 2014 as presented at the DEVdev meetup held in Deventer, the Netherlands.
- A critique of ThoughtWorks' Technology Review 2014 where they slam JSF (jay) as a concept (nay)
- A look back at 10 years of Wicket
- A review of the current Wicket versions
- An outlook and roadmap for Wicket 7 and Wicket 8
The DEVdev (Deventer Developers) is a new meetup for any developer in the eastern part of the Netherlands (the right side of the IJssel river). This presentation was delivered at the first meetup, and was kindly sponsored by Topicus B.V.
4.
“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?
5.
“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
6.
“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.
7.
“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
8.
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?
17.
2004 2005
JSF
Wicket
Tapestry
codehaus.org
The Server Side
Struts 2
(originally Webwork)
The web framework sh
oot-out at
JavaOne 2005. Now th
at was fun!
Shale
18.
2004 2005
codehaus.org
The Server Side
JavaOne
19.
2004 2005
codehaus.org
1.0
The Server Side
JavaOne
20.
2004 2005
codehaus.org
The Server Side
1.0
1.1
JavaOne
21.
2004 2005
codehaus.org
The Server Side
1.0
1.1
JavaOne
2006
1.2
38.
Commit activity
Wicket in Action
Wicket Cookbook
39.
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
40.
In a Nutshell, Wicket...
– Ohloh report for Wicket
41.
In a Nutshell, Wicket...
… has had 17,645 commits made by 52 contributors
representing 314,959 lines of code
– Ohloh report for Wicket
42.
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
43.
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
44.
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
55.
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.
85.
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) {
}
86.
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) {
}
87.
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) {
}
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";
!
Object result = nashorn.eval(js);
try {
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";
!
Object result = nashorn.eval(js);
if(!((Boolean)result) {
ValidationError e = new ValidationError();
validatable.error(e);
}
try {
} 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
=
!
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);
93.
java.time
support for this will be for
converters, validations and
possibly wicket-datetime
94.
Roadmap
Anything written here is just
speculation from my side. This is
not set in stone. Dates are mere
guidelines.
99.
master
wicket-1.0.x
wicket-1.1.x
wicket-1.2.x
wicket-1.3.x
wicket-1.4.x
wicket-1.5.x
wicket-6.x
!
Current organisation of
our repository: master is
new development, rest
is maintenance.
100.
master
wicket-1.0.x
wicket-1.1.x
wicket-1.2.x
wicket-1.3.x
wicket-1.4.x
wicket-1.5.x
wicket-6.x
!
x!
cket 7.
wi
Current organisation of
our repository: master is
new development, rest
is maintenance.
101.
master
wicket-1.0.x
wicket-1.1.x
wicket-1.2.x
wicket-1.3.x
wicket-1.4.x
wicket-1.5.x
wicket-6.x
wicket-7.x
wicket-8.x
proposed layout: no more master,
but just product branches.
102.
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.
104.
org.apache.wicket.experimental.wicket-6.x
wicket-atmosphere
wicket-bootstrap
wicket-new-examples
!
tstrap: bootstrap is
No more boo
org.apache.wicket.experimental.wicket-7.x
new examples:
ource reference to
no
just a res
wicket-atmosphere r
time to do anyth
CSS. Write you
t and
ing
JavaScrip
wicket-cdi-1.1 use
useful with them
0 lines of code) or
.
own (~1
’s bootstrap wicket
L0rdn1kk0n
component library.
105.
Wicket 6.x
org.apache.wicket.experimental.wicket-6.x
wicket-atmosphere
!
Wicket 7.x
!
org.apache.wicket.experimental.wicket-7.x
wicket-atmosphere
!
How to separate the same
experimental modules in multiple
product lines?
106.
Wicket 6.x
org.apache.wicket.experimental.wicket-6.x
wicket-atmosphere
!
Wicket 7.x
!
org.apache.wicket.experimental.wicket-7.x
wicket-atmosphere
!
Make the groupId specific to
the
product line, keep code as sim
ilar
as possible.