SlideShare a Scribd company logo
1 of 108
Download to read offline
What's up with Wicket 8
and Java 8
Martijn Dashorst
Topicus Education

APACHE WICKET
Martijn Dashorst

Topicus Education
What's Up with Wicket 8
and Java 8?
𝛌
Martijn Dashorst

Topicus Education
twitter: @dashorst
Apache: dashorst
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Lambda's
Migration towards Wicket 8
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
Why Java 8 for Wicket 8?
• Concise, clear code with Java 8

Lambdas, Optional
• Support for Java EE 7 and Java 8 in servers
• Wish to get API right
• Semver
• Versions line up nicely 

Wicket 5 & Java 5 (wicket 1.5.x & Java 2 1.5.x)

Wicket 6 & Java 6

Wicket 7 & Java 7

Wicket 8 & Java 8
Wicket 9 → Java 9
Wicket 8.0.0 final release?
- won't ship with all bells/whistles
- might take a few months to get right (semver)
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
Everything in 7.x
Everything in 7.x
Java Eightyfication
Optional<T>, default methods, lambda's everywhere
"The ecosystem,
stupid!"
"Innovation
happens
elsewhere"
• Short list

http://wicket.apache.org/community/
• WicketStuff

https://github.com/wicketstuff
• Wicket Spring Boot

https://github.com/MarcGiffing/wicket-spring-boot
• Wicket Bootstrap

https://github.com/l0rdn1kk0n/wicket-bootstrap
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
Supported by converters
• LocalDateConverter
• LocalDateTimeConverter
• LocalTimeConverter
• Already registered for your convenience
public	interface	IConverter<C>	extends	IClusterable	
{	
				C	convertToObject(String	value,	Locale	locale)		
	 																							throws	ConversionException;	
				String	convertToString(C	value,	Locale	locale);	
}
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
I've recently ran into a few cases where while
implementing AjaxFallbackLink I forgot to test the passed
in request target for null, causing NPEs when the app was
accessed from browsers where AJAX failed for whatever
reason.
— Igor Vaynberg, 2011
AjaxFallbackLink
AjaxFallbackLink<Void>	link	=	new	AjaxFallbackLink<Void>("link")	{	
	 @Override	
	 public	void	onClick(AjaxRequestTarget	target)	
	 {	
	 	 target.add(label);	
	 }	
};
wicket 7
wicket 8
AjaxFallbackLink
AjaxFallbackLink<Void>	link	=	new	AjaxFallbackLink<Void>("link")	{	
	 @Override	
	 public	void	onClick(AjaxRequestTarget	target)	
	 {	
	 	 target.add(label);	
	 }	
};
wicket 7
wicket 8
NullPointerException
AjaxFallbackLink
AjaxFallbackLink<Void>	link	=	new	AjaxFallbackLink<Void>("link")	{	
	 @Override	
	 public	void	onClick(AjaxRequestTarget	target)	
	 {	
	 	 target.add(label);	
	 }	
};
wicket 7
wicket 8
AjaxFallbackLink<Void>	link	=	new	AjaxFallbackLink<Void>("link")	{	
	 @Override	
	 public	void	onClick(Optional<AjaxRequestTarget>	target)	
	 {	
	 	 target.ifPresent(t	->	t.add(label));	
	 }	
};
RequestCycle.get().find()
AjaxRequestTarget	target	=		
				RequestCycle.get()	
						.find(AjaxRequestTarget.class);	
target.add(studentPanel);
wicket 7
wicket 8
Optional<AjaxRequestTarget>	target	=		
				RequestCycle.get()	
						.find(AjaxRequestTarget.class);	
if(target.isPresent())	
				target.get().add(studentPanel);
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
Models
Components
Behaviors
Difficulties
Critique
𝛌
add(new	Label("lastname",		
								new	PropertyModel(person,	"lastname")));
add(new	Label("message",	"Hello,	World!"));
IModel<Account>	accountModel	=	...;	
add(new	TextField("lastname",		
							new	PropertyModel(accountModel,	"person.lastname")));
add(new	AttributeAppender("class",		
				new	AbstractReadOnlyModel<String>()	{	
								private	static	final	long	serialVersionUID	=	1L;	
			
								@Override	
								public	String	getObject()	{	
												return	isRequired()	?	"wysiwyg_required"	:	"";	
								}	
				},	"	"));
Nested model example
public	class	AbsenteePreferenceModel		
				extends	LoadableDetachableModel<AbsenteePreference>	{	
		@Inject	private	EmployeeDAO	empDao;	
		@Inject	private	LocationDAO	locDAO;	
		@Override	
		protected	AbsenteePreference	load()	{	
				IridiumContext	ctx	=	IridiumContext.get();	
				AbsentieInvoerVoorkeur	pref	=	
								empDao.getAbsenteePref(ctx.getEmployee());	
				if	(pref	==	null)	{	
						voorkeur	=	locDAO	
										.getAbsenteePref(ctx.getDefaultLocation());	
				}	
				return	pref;	
		}	
}
(1/2)
Nested model example
add(new	CheckBox("showAll",	
							new	PropertyModel<>(prefModel,	"showAll")));	
add(new	CheckBox("studentInfo",	
							new	PropertyModel<>(prefModel,	"showStudentInfo")));	
add(new	CheckBox("barcode",	
							new	PropertyModel<>(prefModel,	"showBarCode")));	
add(new	DropDownChoice("reason",	
							new	PropertyModel<>(prefModel,	"defaultReason"),	
							absenteeReasonsModel));
(2/2)
add(new	Label("lastname",		
								new	PropertyModel(person,	"lastname")));
add(new	Label("message",	"Hello,	World!"));
IModel<Account>	accountModel	=	...;	
add(new	TextField("lastname",		
							new	PropertyModel(accountModel,	"person.lastname")));
LambdaModel example
add(new	Label("message",	"Hello,	World!"));	
wicket 7
wicket 8
add(new	Label("message",	"Hello,	World!"));
LambdaModel example
add(new	Label("lastname",		
								new	PropertyModel(person,	"lastname")));	
wicket 7
wicket 8
add(new	Label("lastname",	()	->	person.getLastName()));	
add(new	Label("lastname",	person::getLastName));
LambdaModel example
add(new	Label("lastName",	
							new	PropertyModel<>(personModel,	"lastName")));
wicket 7
wicket 8
add(new	Label("lastName",	
							LambdaModel.of(personModel,	Person::getLastName)));
LambdaModel example
add(new	Label("lastName",	
						new	PropertyModel<>(accountModel,	"person.lastName")));
wicket 7
wicket 8
add(new	Label("lastName",	
								LambdaModel.of(accountModel,	Account::getPerson)	
																			.map(Person::getLastName)));
LambdaModel example
add(new	AttributeAppender("class",		
				new	AbstractReadOnlyModel<String>()	{	
								private	static	final	long	serialVersionUID	=	1L;	
			
								@Override	
								public	String	getObject()	{	
												return	isRequired()	?	"wysiwyg_required"	:	"";	
								}	
				},	"	"));
wicket 7
wicket 8
add(new	AttributeAppender("class",	
								()	->	isRequired()	?	"wysiwyg_required"	:	""),	"	"));
LambdaModel example
add(new	CheckBox("showAll",	
							new	PropertyModel<>(prefModel,	"showAll")));
wicket 7
wicket 8
add(new	CheckBox("showAll",	
							LambdaModel.of(prefModel,		
											AbsentieInvoerVoorkeur::isShowAll,		
											AbsentieInvoerVoorkeur::setShowAll)));
LambdaModel example
add(new	DropDownChoice("reason",	
							new	PropertyModel<>(prefModel,	"defaultReason"),	
							absenteeReasonsModel));
wicket 7
wicket 8
add(new	DropDownChoice("reason",	
								LambdaModel.of(prefModel,		
												AbsentieInvoerVoorkeur::getDefaultReason,		
												AbsentieInvoerVoorkeur::setDefaultReason)),	
								absenteeReasonsModel));
Models
Components
Behaviors
Difficulties
Critique
𝛌
Models accept lambda's directly
add(new	Label<>("name",	PropertyModel.of(person,	"name"));
wicket 7
wicket 8
IModels accept lambda's directly
add(new	Label<>("name",	PropertyModel.of(person,	"name"));
wicket 7
wicket 8
add(new	Label<>("name",	()	->	person.getName()));	
add(new	Label<>("name",	person::getName));
Typical component
add(new	Link<Cheese>("addToCart",	cheeseModel)	{	
		@Override	
		public	void	onClick()	{	
				Cheese	cheese	=	getModelObject();	
				CheesrSession.get().add(cheese);	
		}	
});
wicket 7
wicket 8
Typical component
add(new	Link<Cheese>("addToCart",	cheeseModel)	{	
		@Override	
		public	void	onClick()	{	
				Cheese	cheese	=	getModelObject();	
				CheesrSession.get().add(cheese);	
		}	
});
wicket 7
wicket 8
add(Link.onClick("addToCart",	()	->	{	
				Cheese	cheese	=	cheeseModel.getObject();	
				CheesrSession.get().add(cheese);	
		});
• Form
• Link
• Button
• SubmitLink
• LambdaColumn (for dataview)
Models
Components
Behaviors
Difficulties
Critique
𝛌
Behavior
new	Behavior()	{	
		@Override	
		public	void	onComponentTag(Component	c,	ComponentTag	t)	{	
				tag.getAttributes().put("style",	"color:red");	
		}	
}
wicket 7
wicket 8
Behavior
new	Behavior()	{	
		@Override	
		public	void	onComponentTag(Component	c,	ComponentTag	t)	{	
				tag.getAttributes().put("style",	"color:red");	
		}	
}
wicket 7
wicket 8
Behavior.onComponentTag(t	->	t.getAttributes()	
																														.put("style",	"color:red"));	
Behavior.onAttribute("style",	s	->	"color:red");
Models
Components
Behaviors
Difficulties
Critique
𝛌
Make everything serializable
A first attempt for Lambda's
public	abstract	class	Link	extends	AbstractLink	{	
		public	abstract	void	onClick();	
		public	static	<T>	Link<T>	onClick(String	id,		
																																				Consumer<T>	handler)	{	
				return	new	Link<T>(id)	{	
						@Override	
						public	void	onClick()	{	
								handler.accept(this);	
						}	
				};	
		}	
}
A first attempt for Lambda's
add(Link.onClick("link",	c->	{}));	
Caused by: java.io.NotSerializableException:
com.martijndashorst.wicketbenchmarks.ClosurePage$$Lambda$18/38997010
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
add(Link.onClick("link",	c->	{}));
A first attempt for Lambda's
public	abstract	class	Link	extends	AbstractLink	{	
		public	abstract	void	onClick();	
		public	static	<T>	Link<T>	onClick(String	id,		
																																				Consumer<T>	handler)	{	
}
Not Serializable
Attempt 2: 

Wicket's own Lambda's
interface	WicketConsumer	extends	Serializable	{	
		...	
}	
interface	WicketSupplier	extends	Serializable	{}	
interface	WicketFunction	extends	Serializable	{}	
interface	WicketPredicate	extends	Serializable	{}	
interface	WicketBiConsumer	extends	Serializable{}	
interface	WicketBiSupplier	extends	Serializable{}	
...
• Not reusable outside Wicket
• Conflicts with other Serializable Functional Interfaces
Attempt 3
• jdk-serializable-functional

Jakub Danek

https://github.com/danekja/jdk-serializable-functional
• No dependencies
Attempt 3: 

jdk-serializable-functional
interface	SerializableConsumer	extends	Serializable	{	
		...	
}	
interface	SerializableSupplier	extends	Serializable	{}	
interface	SerializableFunction	extends	Serializable	{}	
interface	SerializablePredicate	extends	Serializable	{}	
interface	SerializableBiConsumer	extends	Serializable{}	
interface	SerializableBiSupplier	extends	Serializable{}	
...
add(Link.onClick("link",	c->	{}));
A first attempt for Lambda's
public	abstract	class	Link	extends	AbstractLink	{	
		public	abstract	void	onClick();	
		public	static	<T>	Link<T>	onClick(String	id,		
																											SerializableConsumer<T>	handler)	{	
}
Serializable
Closures capture too much
Capturing the world
Person	person	=	peopleDAO.find(...);	
add(SubmitLink.onSubmit("save",	c->	{	
				peopleDao.save(person);	
		}));
Capturing the world
Person	person	=	peopleDAO.find(...);	
add(SubmitLink.onSubmit("save",	c->	{	
				peopleDao.save(person);	
		}));	
public	MyPage(Object	o)	{	
		add(Link.onClick("link",	l	->	System.out.println(o)));	
}	
Not Serializable
Capturing the world
Person	person	=	peopleDAO.find(...);	
add(SubmitLink.onSubmit("save",	c->	{	
				peopleDao.save(person);	
		}));	
public	MyPage(Object	o)	{	
		add(Link.onClick("link",	l	->	System.out.println(o)));	
		add(new	Link("link2")	{	
				public	void	onClick()	{	
						System.out.println(o);	
				}	
		}	
}	
Not Serializable
Models
Components
Behaviors
Difficulties
Critique
𝛌
DISCLAIMER
This critique is not about the work of
Wicket developers working hard on
Wicket 8.
Rather it is a measure of the maturity of
the current state of Wicket 8. A lot of work
went into it, there's still work to be done.
Closure clarity
What is the output?
setDefaultModel(Model.of("Page	model"));	
add(Link.onClick("id",	s	->	{	
	 System.out.println("Model:	"	+	getDefaultModelObject());	
}).setDefaultModel(Model.of("Link	model")));	
wicket 7
wicket 8
In a page:
Output:
What is the output?
setDefaultModel(Model.of("Page	model"));	
add(Link.onClick("id",	s	->	{	
	 System.out.println("Model:	"	+	getDefaultModelObject());	
}).setDefaultModel(Model.of("Link	model")));	
wicket 7
wicket 8
Model:	Page	model	
In a page:
Output:
Combinatorial explosion of
factory methods
Typical component
add(new	Link<Cheese>("addToCart",	cheeseModel)	{	
		private	static	final	long	serialVersionUID	=	1L;	
		@Override	
		public	void	onClick()	{	
				Cheese	cheese	=	getModelObject();	
				CheesrSession.get().add(cheese);	
		}	
});
wicket 7
wicket 8
Typical component
add(new	Link<Cheese>("addToCart",	cheeseModel)	{	
		private	static	final	long	serialVersionUID	=	1L;	
		@Override	
		public	void	onClick()	{	
				Cheese	cheese	=	getModelObject();	
				CheesrSession.get().add(cheese);	
		}	
});
wicket 7
wicket 8
add(Link.onClick("addToCart",	cheeseModel,	()	->	{	
				Cheese	cheese	=	cheeseModel.getObject();	
				CheesrSession.get().add(cheese);	
});
Typical component
add(new	Link<Cheese>("addToCart",	cheeseModel)	{	
		private	static	final	long	serialVersionUID	=	1L;	
		@Override	
		public	void	onClick()	{	
				Cheese	cheese	=	getModelObject();	
				CheesrSession.get().add(cheese);	
		}	
		@Override	
		public	void	onConfigure()	{	
				Cheese	cheese	=	getModelObject();	
				setVisible(cheese.isInStock());	
		}	
});
• onInitialize
• onConfigure
• onBeforeRender
• onRender
• onComponentTag
• onAfterRender

• onClick
• onSubmit
• onError
• isVisible
• isEnabled
• ...
Less syntax: less readable
Typical component
add(new	AjaxSubmitLink<Void>("register")	{	
		private	static	final	long	serialVersionUID	=	1L;	
		@Override	
		public	void	onSubmit(AjaxRequestTarget	target)	{	
				Person	person	=	registrationModel.getObject();	
				registrationService.registerNewStudent(person);	
				registrationWizard.next();	
				target.add(registrationWizard);	
		}	
		@Override	
		public	void	onError()	{	
				target.add(feedbackPanel);	
	}	
});
Typical lambda
add(AjaxSubmitLink.onSubmit("register",	
		(target)	->	{	
				Person	person	=	registrationModel.getObject();	
				registrationService.registerNewStudent(person);	
				registrationWizard.next();	
				target.add(registrationWizard);	
		},	(target)	->	{	
				target.add(feedbackPanel);	
	}	
);
Typical lambda
add(AjaxSubmitLink.onSubmit("register",	
		(target)	->	{	
				Person	person	=	registrationModel.getObject();	
				registrationService.registerNewStudent(person);	
				registrationWizard.next();	
				target.add(registrationWizard);	
		},	(target)	->	{	
				target.add(feedbackPanel);	
	}	
);	
add(AjaxSubmitLink.onSubmit("register",	
		page::onRegister,	page::onSubmitError	
	}	
);
Where's the Component?
Bi-Consuming Behavior
add(new	Behavior()	{	
		public	void	onComponentTag(Component	c,	ComponentTag	t)	{	
		}	
}
wicket 7
wicket 8
add(Behavior.onComponentTag(t	->	{	
				//	where's	the	component?	
		});
Model Performance
DISCLAIMER
These benchmarks are based on the
current version. Newer versions will
perform differently (possibly better).
A micro benchmark does not reflect actual
application performance.
Benchmarks
https://github.com/dashorst/wicket-benchmarks
Which construct performs better?
new	AbstractReadOnlyModel<String>()	{	
		@Override	
		public	String	getObject()	{	
				return	accountModel	
						.getObject()	
						.getPerson()	
						.getName();	
		}	
}
PropertyModel	
		.of(accountModel,	"person.name")	
		.getObject();
Model.of(accountModel)	
				.map(Account::getPerson)	
				.map(Person::getName)	
				.getObject();
0
40
80
120
160
200
PropertyM
odel
C
hained
Lam
bda
D
irectLam
bda
AbstractReadO
nlyM
odel
D
irect
164x
120x
99x
70x
1x
Memory efficiency
new Account()
Account Person
name: String
1n
96
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
Account Person
name: String
1n
96
112
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
Account Person
name: String
1n
96
112
16
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
Account Person
name: String
1n
96
112
16
40
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
Account Person
name: String
1n
96
112
16
40
24
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
Account Person
name: String
1n
96
112
16
40
24
56
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
LambdaModel.of(()->am().getPerson().getName())
Account Person
name: String
1n
96
112
16
40
24
56
72
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
LambdaModel.of(()->am().getPerson().getName())
model.map(A::getPerson).map(P::getName)
Account Person
name: String
1n
96
112
16
40
24
56
72
120
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
LambdaModel.of(()->am().getPerson().getName())
model.map(A::getPerson).map(P::getName)
LambdaModel.of(am, A::getPerson).mapP::getNa
Account Person
name: String
1n
96
112
16
40
24
56
72
120
160
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
LambdaModel.of(()->am().getPerson().getName())
model.map(A::getPerson).map(P::getName)
LambdaModel.of(am, A::getPerson).mapP::getNa
PropertyModel.of(am, "person.name")
Account Person
name: String
1n
96
112
16
40
24
56
72
120
160
128
bytes
am: accountModel A: Account P: Person
Serialization efficiency
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
LambdaModel.of(()->am().getPerson().getName())
model.map(A::getPerson).map(P::getName)
LambdaModel.of(am, A::getPerson).mapP::getNa
PropertyModel.of(am, "person.name")
Account Person
name: String
1n
222
302
662
900
123
1025
1343
1691
2271
1128
bytes
am: accountModel A: Account P: Person
new Account()
Model.of(account)
IModel.of(Account::new)
LoadableDetachableModel.of(Account::new)
class LDM extends LoadableDetachableModel
new IModel<>() { getObject() { return ...} }
LambdaModel.of(()->am().getPerson().getName())
model.map(A::getPerson).map(P::getName)
LambdaModel.of(am, A::getPerson).mapP::getNa
PropertyModel.of(am, "person.name")
Account Person
name: String
1n
222
302
662
900
123
1025
1343
1691
2271
1128
bytes
am: accountModel A: Account P: Person
Component Performance
MarkupContainer finding a child
Which performs better?
container.stream()	
				.filter(c->"id".equals(c.getId()))	
				.findFirst()	
				.get()
container	
				.get("id")
for(Component	c	:	container)	
				if("id".equals(c.getId())	
								break;
get for streamchildren
1,000
100,000
100
1 104,453,168 105,431,300 13,050,626
10 26,787,973 18,238,850 7,130,824
23,322,255 1,155,958 1,072,664
24,252,999 125,178 117,638
23,867,853 735 705
Why Java 8 for Wicket 8
Wicket 8 Noteworthy Features
Java 8 Date Time
Java 8 Optional
Java 8 Lambda's
Migration towards Wicket 8
Migration guide
7.x → 8.0.0
In-house framework
• Size: 172k lines of code
• Current Wicket version: 7.5.0
• Compile errors due to 8.0.0-M2: 70
In-house web app #1
• Size: 36k lines of code
• Current Wicket version: 7.5.0
• Compile errors due to 8.0.0-M2: 55

most: bare Link anonymous inner classes didn't inherit
setDefaultModel from IGenericComponent
Deprecations
• IProvider<T> → Supplier<T>
• AbstractReadOnlyModel<T> → IModel<T>
In-house web app #2
• Size: 1M lines of code
• Current Wicket version: 7.5.0
• Compile errors due to 8.0.0-M2: 346

most:

- AjaxFallback made parameter AjaxRequestTarget Optional

- ILinkListener/IChangeListener/* → IRequestListener

Conclusions
• Java 8 & Wicket 8 is GR8
• Almost ready for release
• But, still work to be done
Questions?

More Related Content

What's hot

Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Matt Raible
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Shekhar Gulati
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web FrameworkLuther Baker
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Mihail Stoynov
 
JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011Shreedhar Ganapathy
 
Using React with Grails 3
Using React with Grails 3Using React with Grails 3
Using React with Grails 3Zachary Klein
 
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RSSpark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RSArun Gupta
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudBen Wilcock
 
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...VMware Tanzu
 
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataStacy London
 
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitWojciech Seliga
 

What's hot (20)

From JavaEE to AngularJS
From JavaEE to AngularJSFrom JavaEE to AngularJS
From JavaEE to AngularJS
 
Java 11 OMG
Java 11 OMGJava 11 OMG
Java 11 OMG
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web Framework
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
 
JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011
 
Using React with Grails 3
Using React with Grails 3Using React with Grails 3
Using React with Grails 3
 
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RSSpark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RS
 
DataFX - JavaOne 2013
DataFX - JavaOne 2013DataFX - JavaOne 2013
DataFX - JavaOne 2013
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloud
 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
Apache Lucene for Java EE Developers
Apache Lucene for Java EE DevelopersApache Lucene for Java EE Developers
Apache Lucene for Java EE Developers
 
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
 
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
 
Migrating to Java 9 Modules
Migrating to Java 9 ModulesMigrating to Java 9 Modules
Migrating to Java 9 Modules
 
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
 
Angular beans
Angular beansAngular beans
Angular beans
 

Similar to Wicket 8 and Java 8

Migrating to Jakarta EE 10
Migrating to Jakarta EE 10Migrating to Jakarta EE 10
Migrating to Jakarta EE 10Josh Juneau
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkFabio Tiriticco
 
JUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talkJUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talkVijay Nair
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Stephen Chin
 
Developing Java Microservices Fast with Open Liberty
Developing Java Microservices Fast with Open LibertyDeveloping Java Microservices Fast with Open Liberty
Developing Java Microservices Fast with Open LibertyYK Chang
 
Run-time of Node.js : V8 JavaScript Engine
Run-time of Node.js: V8 JavaScript EngineRun-time of Node.js: V8 JavaScript Engine
Run-time of Node.js : V8 JavaScript EngineGary Yeh
 
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.pptLecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.pptKalsoomTahir2
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)slire
 
Running JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java WorldRunning JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java Worldirbull
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance JavaVikas Goyal
 

Similar to Wicket 8 and Java 8 (20)

Wt unit 3 server side technology
Wt unit 3 server side technologyWt unit 3 server side technology
Wt unit 3 server side technology
 
Wt unit 3 server side technology
Wt unit 3 server side technologyWt unit 3 server side technology
Wt unit 3 server side technology
 
Migrating to Jakarta EE 10
Migrating to Jakarta EE 10Migrating to Jakarta EE 10
Migrating to Jakarta EE 10
 
WebLogic and GraalVM
WebLogic and GraalVMWebLogic and GraalVM
WebLogic and GraalVM
 
Web-Socket
Web-SocketWeb-Socket
Web-Socket
 
Java Desktop 2019
Java Desktop 2019Java Desktop 2019
Java Desktop 2019
 
WebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! FrameworkWebSockets wiith Scala and Play! Framework
WebSockets wiith Scala and Play! Framework
 
Servlets
ServletsServlets
Servlets
 
JUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talkJUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talk
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
 
Developing Java Microservices Fast with Open Liberty
Developing Java Microservices Fast with Open LibertyDeveloping Java Microservices Fast with Open Liberty
Developing Java Microservices Fast with Open Liberty
 
Run-time of Node.js : V8 JavaScript Engine
Run-time of Node.js: V8 JavaScript EngineRun-time of Node.js: V8 JavaScript Engine
Run-time of Node.js : V8 JavaScript Engine
 
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.pptLecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)
 
Servlets
ServletsServlets
Servlets
 
Running JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java WorldRunning JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java World
 
[TW] Node.js
[TW] Node.js[TW] Node.js
[TW] Node.js
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
AJppt.pptx
AJppt.pptxAJppt.pptx
AJppt.pptx
 
Java Servlets & JSP
Java Servlets & JSPJava Servlets & JSP
Java Servlets & JSP
 

More from Martijn Dashorst

HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0Martijn Dashorst
 
From Floppy Disks to Cloud Deployments
From Floppy Disks to Cloud DeploymentsFrom Floppy Disks to Cloud Deployments
From Floppy Disks to Cloud DeploymentsMartijn Dashorst
 
Converting 85% of Dutch Primary Schools from Oracle to PostgreSQL
Converting 85% of Dutch Primary Schools from Oracle to PostgreSQLConverting 85% of Dutch Primary Schools from Oracle to PostgreSQL
Converting 85% of Dutch Primary Schools from Oracle to PostgreSQLMartijn Dashorst
 
Solutions for when documentation fails
Solutions for when documentation fails Solutions for when documentation fails
Solutions for when documentation fails Martijn Dashorst
 
Java Serialization Deep Dive
Java Serialization Deep DiveJava Serialization Deep Dive
Java Serialization Deep DiveMartijn Dashorst
 
Scrum: van praktijk naar onderwijs
Scrum: van praktijk naar onderwijsScrum: van praktijk naar onderwijs
Scrum: van praktijk naar onderwijsMartijn Dashorst
 
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)Martijn Dashorst
 
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a treeApache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a treeMartijn Dashorst
 
Vakmanschap is meesterschap
Vakmanschap is meesterschapVakmanschap is meesterschap
Vakmanschap is meesterschapMartijn Dashorst
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in productionMartijn Dashorst
 
Wicket In Action - oredev2008
Wicket In Action - oredev2008Wicket In Action - oredev2008
Wicket In Action - oredev2008Martijn Dashorst
 
Guide To Successful Graduation at Apache
Guide To Successful Graduation at ApacheGuide To Successful Graduation at Apache
Guide To Successful Graduation at ApacheMartijn Dashorst
 
Apache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just JavaApache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just JavaMartijn Dashorst
 

More from Martijn Dashorst (20)

HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
 
From Floppy Disks to Cloud Deployments
From Floppy Disks to Cloud DeploymentsFrom Floppy Disks to Cloud Deployments
From Floppy Disks to Cloud Deployments
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
Converting 85% of Dutch Primary Schools from Oracle to PostgreSQL
Converting 85% of Dutch Primary Schools from Oracle to PostgreSQLConverting 85% of Dutch Primary Schools from Oracle to PostgreSQL
Converting 85% of Dutch Primary Schools from Oracle to PostgreSQL
 
Solutions for when documentation fails
Solutions for when documentation fails Solutions for when documentation fails
Solutions for when documentation fails
 
Code review drinking game
Code review drinking gameCode review drinking game
Code review drinking game
 
Java Serialization Deep Dive
Java Serialization Deep DiveJava Serialization Deep Dive
Java Serialization Deep Dive
 
Code review drinking game
Code review drinking gameCode review drinking game
Code review drinking game
 
Scrum: van praktijk naar onderwijs
Scrum: van praktijk naar onderwijsScrum: van praktijk naar onderwijs
Scrum: van praktijk naar onderwijs
 
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
 
De schone coder
De schone coderDe schone coder
De schone coder
 
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a treeApache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
 
Wicket 2010
Wicket 2010Wicket 2010
Wicket 2010
 
Vakmanschap is meesterschap
Vakmanschap is meesterschapVakmanschap is meesterschap
Vakmanschap is meesterschap
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
 
Wicket In Action - oredev2008
Wicket In Action - oredev2008Wicket In Action - oredev2008
Wicket In Action - oredev2008
 
Guide To Successful Graduation at Apache
Guide To Successful Graduation at ApacheGuide To Successful Graduation at Apache
Guide To Successful Graduation at Apache
 
Wicket In Action
Wicket In ActionWicket In Action
Wicket In Action
 
Apache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just JavaApache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just Java
 
Wicket Live on Stage
Wicket Live on StageWicket Live on Stage
Wicket Live on Stage
 

Recently uploaded

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxnada99848
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 

Recently uploaded (20)

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptx
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 

Wicket 8 and Java 8