Skip to content

Commit 27f566a

Browse files
gsmetgunnarmorling
authored andcommitted
HV-1480 Add a benchmark validating a bean containing a lot of beans to
cascade to
1 parent f970b29 commit 27f566a

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

performance/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ a shared _ValidatorFactory_ and once the factory is recreated on each invocation
8585

8686
Simple bean with cascaded validation which gets executed over and over.
8787

88+
### [CascadedWithLotsOfItemsValidation](https://github.com/hibernate/hibernate-validator/blob/master/performance/src/main/java/org/hibernate/validator/performance/cascaded/CascadedWithLotsOfItemsValidation.java)
89+
90+
Validation of a bean containing a lot of beans to cascade to.
91+
8892
### [StatisticalValidation](https://github.com/hibernate/hibernate-validator/blob/master/performance/src/main/java/org/hibernate/validator/performance/statistical/StatisticalValidation.java)
8993

9094
A number of _TestEntity_s is created where each entity contains a property for each built-in constraint type and also a reference
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* Hibernate Validator, declare and validate application constraints
3+
*
4+
* License: Apache License, Version 2.0
5+
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
6+
*/
7+
package org.hibernate.validator.performance.cascaded;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.Set;
14+
import java.util.concurrent.TimeUnit;
15+
16+
import javax.validation.ConstraintViolation;
17+
import javax.validation.Valid;
18+
import javax.validation.Validation;
19+
import javax.validation.Validator;
20+
import javax.validation.ValidatorFactory;
21+
import javax.validation.constraints.NotNull;
22+
23+
import org.openjdk.jmh.annotations.Benchmark;
24+
import org.openjdk.jmh.annotations.BenchmarkMode;
25+
import org.openjdk.jmh.annotations.Fork;
26+
import org.openjdk.jmh.annotations.Measurement;
27+
import org.openjdk.jmh.annotations.Mode;
28+
import org.openjdk.jmh.annotations.OutputTimeUnit;
29+
import org.openjdk.jmh.annotations.Scope;
30+
import org.openjdk.jmh.annotations.State;
31+
import org.openjdk.jmh.annotations.Threads;
32+
import org.openjdk.jmh.annotations.Warmup;
33+
import org.openjdk.jmh.infra.Blackhole;
34+
35+
/**
36+
* @author Guillaume Smet
37+
*/
38+
public class CascadedWithLotsOfItemsValidation {
39+
40+
private static final int NUMBER_OF_ARTICLES_PER_SHOP = 2000;
41+
42+
@State(Scope.Benchmark)
43+
public static class CascadedWithLotsOfItemsValidationState {
44+
public volatile Validator validator;
45+
46+
public volatile Shop shop;
47+
48+
public CascadedWithLotsOfItemsValidationState() {
49+
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
50+
validator = factory.getValidator();
51+
52+
shop = createShop();
53+
}
54+
55+
private Shop createShop() {
56+
Shop shop = new Shop( 1 );
57+
58+
for ( int i = 0; i < NUMBER_OF_ARTICLES_PER_SHOP; i++ ) {
59+
shop.addArticle( new Article( i ) );
60+
}
61+
62+
return shop;
63+
}
64+
}
65+
66+
@Benchmark
67+
@BenchmarkMode(Mode.Throughput)
68+
@OutputTimeUnit(TimeUnit.SECONDS)
69+
@Fork(value = 1)
70+
@Threads(20)
71+
@Warmup(iterations = 10)
72+
@Measurement(iterations = 20)
73+
public void testCascadedValidationWithLotsOfItems(CascadedWithLotsOfItemsValidationState state, Blackhole bh) {
74+
Set<ConstraintViolation<Shop>> violations = state.validator.validate( state.shop );
75+
assertThat( violations ).hasSize( 0 );
76+
77+
bh.consume( violations );
78+
}
79+
80+
public static class Shop {
81+
@NotNull
82+
private Integer id;
83+
84+
@NotNull
85+
@Valid
86+
private List<Article> articles = new ArrayList<>();
87+
88+
public Shop(Integer id) {
89+
this.id = id;
90+
}
91+
92+
public void addArticle(Article article) {
93+
articles.add( article );
94+
}
95+
}
96+
97+
public static class Article {
98+
@NotNull
99+
private Integer id;
100+
101+
public Article(Integer id) {
102+
this.id = id;
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)