SlideShare ist ein Scribd-Unternehmen logo
1 von 108
Downloaden Sie, um offline zu lesen
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?

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie Whats up with 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
 

Ähnlich wie Whats up with 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durbanmasabamasaba
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 

Kürzlich hochgeladen (20)

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 

Whats up with wicket 8 and java 8