hibernate search & bean validation
TRANSCRIPT
![Page 1: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/1.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Hibernate Search et Bean Validation
Emmanuel Bernard
21 septembre 2009
![Page 2: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/2.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Emmanuel Bernard
Hibernate Search in Action blog.emmanuelbernard.com twitter.com/emmanuelbernard
lescastcodeurs.com
![Page 3: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/3.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Hibernate Core
Emmanuel BernardJBoss by Red Hat
![Page 4: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/4.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Performance
Transactional write behind sophisticated snapshot comparison load associated objects (join, subselect,
batch) batch changes / bulk operations lazy collections / objects prepared statements pre-compiled queries smart merge ...
![Page 5: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/5.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Flexibility
Override any SQL DDL generation optional stored procedures statistics used named queries stateless session Bulk HQL Database portability
![Page 6: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/6.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Tips
Use conversation scoped persistence contexts aka first level cache
do not 2nd level cache for everything• reference data
set everything as lazy and use queries
Stop maintaining your home-grown ORM
![Page 7: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/7.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
JSR-303 - Bean Validation
Emmanuel BernardJBoss by Red Hat
![Page 8: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/8.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Enable declarative validation in your applications
Constrain Once, Validate Anywhere
![Page 9: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/9.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Constraints
Constraint• restriction on a bean, field or property• not null, between 10 and 45, valid email...
How is that useful• give feedback to the user• ensure that a service will behave correctly
• define service range of usability
• avoid adding crap to the database• unless you like fixing the data manually
![Page 10: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/10.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Constraints in the Java Ecosystem
Where should they be applied
How many model do I have?• 1
DatabaseClient Side
Java
Data Access Layer
Business Layer
Presentation Layer
![Page 11: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/11.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG What is the solution?
Uniform way to express a constraint• everybody speaks the same language• based on the domain model (JavaBeans™)
Standard way to validate constraints• one runtime engine• same validation implementations shared
Bridge for constraints out of Java™ land• API to access the constraint repository
![Page 12: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/12.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Declare a constraintpublic class Address { @NotNull @Size(max=30, message="longer than {max} characters") private String street1; ... @NotNull @Valid private Country country;
}
public class Country { @NotNull @Size(max=30) private String name; ...
}
![Page 13: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/13.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Groups
Subset of constraints
Partial validation• screen of a wizard UI
Constraints applied in a given use case Order constraint validations
• which depends on other validations• when a constraint is resource/time intensive
![Page 14: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/14.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
interface Billable {}
interface BuyInOneClick extends Billable, Default {}
class User { @NotNull(groups=BuyInOneClick.class) PaymentMethod getDefaultCreditCard() {...}
@NotNull //Default group String getUserName() {...}}
@GroupSequence(sequence={Default.class, Heavy.class})interface Complete {}
![Page 15: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/15.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Create your own constraint
Annotations with expressive names List of ConstraintValidators Constraint composition
![Page 16: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/16.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
@Constraint(validatedBy={ SizeValidatorForCollections.class), SizeValidatorForString.class } )public @interface Size { String message() default "{constraint.size}"; Class<?>[] groups() default {}; Class<? extends ConstraintPayload> payload() default {};
//custom attributes int min() default 0; int max() default Integer.MAX_VALUE;}
![Page 17: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/17.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
public class SizeValidatorForString implements ConstraintValidator<Size, String> {
public void initialize(Size annotation) {}
public boolean isValid(String value, ConstraintValidatorContext context) {}}
![Page 18: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/18.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Composition
Reuse constraints Expose meta-informations
@NotNull @Size(min=5, max=5)@Constraint(validatedBy=FrenchZipCodeValidator.class)public @interface FrenchZipCode { String message() default "{constraint.frenchzipcode}"; Class<?>[] groups() default {}; Class<? extends ConstraintPayload>[] payload() default {};}
![Page 19: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/19.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Composition
Reuse constraints Expose meta-informations
@NotNull @Size(min=5, max=5)@Constraint(validatedBy=FrenchZipCodeValidator.class)public @interface FrenchZipCode { String message() default "{constraint.frenchzipcode}"; Class<?>[] groups() default {}; Class<? extends ConstraintPayload>[] payload() default {};}
![Page 20: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/20.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Integration - tools - plain SE - EE 6
![Page 21: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/21.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
extensible support multiple implementations type-safe can override some attributes contextually
XML configuration optional• META-INF/validation.xml
Bootstrap API
![Page 22: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/22.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
ValidatorFactory vf = Validation.byDefaultProvider() .configure() .messageInterpolator( containerMI ) .traversableResolver( jpaTR ) .constraintValidatorFactory( webBeansDI ) .buildValidatorFactory();
ValidatorFactory vf = Validation .byProvider(HibernateValidationProvider.class) .configure() .messageInterpolator( containerMI ) .failFast() .enableLegacyConstraints() .buildValidatorFactory();
![Page 23: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/23.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Message
Can be externalized Internationalization Interpolate constraint parameters
• must be shorter than {min}
Custom MessageInterpolator strategy• Useful for application frameworks• Contextual data• Locale
![Page 24: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/24.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Manual validation
Get a Validator from a ValidatorFactory
ConstraintViolation• error message / message template• invalid value• context
Set<ConstraintViolation<User>> errors = validator.validate(user);
Set<ConstraintViolation<User>> errors = validator.validate(user, BuyInOneClick.class);
![Page 25: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/25.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Accessing the metadata
DDL generation, tools, JavaScript generators
Metadata API
Shines with:• composition• built-in annotations
BeanDescriptor - validator.getConstraintsForClass(User.class)PropertyDescriptor - beanDescr.getConstrainedProperties()ConstraintDescriptor - descr.getConstraintDescriptors() - constrDescr.getComposingConstraints()
![Page 26: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/26.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Accessing the metadata
DDL generation, tools, JavaScript generators
Metadata API
Shines with:• composition• built-in annotations
BeanDescriptor - validator.getConstraintsForClass(User.class)PropertyDescriptor - beanDescr.getConstrainedProperties()ConstraintDescriptor - descr.getConstraintDescriptors() - constrDescr.getComposingConstraints()
![Page 27: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/27.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG JSF 2 integration
Zero conf Validate input components
• find property via Expression Language• call Bean Validation on input value• return localized error messages• use JSF user Locale
• custom MessageInterpolator
![Page 28: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/28.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Java Persistence 2
On entity change• validation• can select the groups validated
Make use of a custom TraversableResolver• do not traverse associations
![Page 29: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/29.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Java EE 6
Validator as an injectable resource
@Resource Validator validator;//or@Resource ValidatorFactory vf;
![Page 30: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/30.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Bean Validation
Status Todo
• Well... nothing
Give us feedback!
![Page 31: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/31.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Hibernate Validator 4
Bean Validation is in proposed final draft• RI available
Road Map• working on the TCK• backward compatible with legacy Hibernate
Validator usage• some cool ideas out of the spec scope
License• ASL 2.0
![Page 32: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/32.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Questions?
JCP.org • http://jcp.org/en/jsr/detail?id=303• http://people.redhat.com/~ebernard/
validation
http://in.relation.to• Search for ‘Bean Validation’
Hibernate Validator• http://validator.hibernate.org
http://forum.hibernate.org/viewforum.php?f=26
![Page 33: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/33.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Hibernate SearchFull-text search for Hibernate Apps
Emmanuel BernardJBoss by Red Hat
![Page 34: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/34.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Understand what full-text search does for you
Understand the magic sauce: analyzers Full-text search and applications: how does
it fit? Bring the Wow! effect to existing
applications
![Page 35: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/35.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Searching is asking a question
Different ways to answer• Categorize data up-front• Offer a detailed search screen• Offer a simple search box
What is searching?
![Page 36: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/36.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
Searching is asking a question
Different ways to answer• Categorize data up-front• Offer a detailed search screen• Offer a simple search box
What is searching?
![Page 37: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/37.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUGHuman search
in a relational world where?
• which columns, which tables
column != word• wildcard queries?
did you say “car” or “vehicle”? cympausium or simposyum? Order results by relevance
How to do that in SQL?
![Page 38: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/38.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Full Text Search
Search by word Dedicated index
• inverted indices (word frequency, position)
Very efficient
Full text products:• embedded in the database engine• black box / appliance• library embeddable like Lucene
![Page 39: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/39.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Some of the interesting problems
bring the “best” document first recover from typos recover from faulty orthography find from words with the same meaning find words from the same family find an exact phrase find similar documents
![Page 40: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/40.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Find by relevance
Best results first• very human sensitive
Prioritize some fields over others The more matches, the better
• for a given key word per document• for a given document the amount of matching
key words
Similarity algorithm
![Page 41: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/41.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Extracting the quintessence
Word: Atomic information
Analyzer• Chunk / tokenize the text into individual words• Apply filters
• remove common words• lower case
One tokenizer Some filters
![Page 42: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/42.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUGApproximation
Recover from typos and other approximations
Fuzzy search• query time operation• Levenshtein distance (edit distance)
Hibernate
Hibrenate
![Page 43: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/43.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
hibernate
hib ibe ber ern nat ate
ybe ber ern nat
ybernat
Index
Query
n-gram• cut the word in parts of n characters• index each piece
Indexing + query time strategy• use a TokenFilter
![Page 44: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/44.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Demo
![Page 45: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/45.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Phonetic search
Is it “jiroscop” or “gyroscope”• not so useful in daily life
Several phonetic algorithms• Soundex• Metaphone (JRSKP)• mostly for latin languages
index the phonetic equivalent of a word
Indexing + query time strategy• use a TokenFilter
![Page 46: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/46.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Synonyms
I like to drive my auto around
I love to drive my banger around
I cherish to drive my car around
I love to drive my auto around
cherish
love
like banger
auto
car
jalopy
Based on a synonym dictionary index a reference word in the index
Indexing + query time strategy• use a TokenFilter
![Page 47: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/47.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Words from the same family
love, lover, loved, loving Brutal force
• index all variations of a word
Stemming• Porter algorithm for English• Snowball Stemmer for most Indo-European
languages
Indexing + query time strategy• use a TokenFilter
![Page 48: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/48.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG What’s the catch
Lucene is quite low level Integration into an application model Index synchronization Object model conversion Programmatic mismatch
![Page 49: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/49.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUGIntegration into a Java SE / EE
app Hibernate Search bridges
• Hibernate Core and Java Persistence• JBoss Cache & Infinispan (More to come)• Apache Lucene
Transparent index synchronization• event based
Metadata driven conversion• annotation based
Unified programmatic model• API• semantic
![Page 50: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/50.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG More on Hibernate Search
Asynchronous clustering (JMS, JGroups) Projection Filters Index sharding Custom DirectoryProvider (eg. JBoss
Cache, Infinispan based) JBoss Cache is full text searchable Native Lucene access
![Page 51: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/51.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Asynchronous cluster
Search local / change sent to master Asynchronous indexing (delay) No front end extra cost / good scalability
DatabaseHibernate +
Hibernate Search
JMS queue
Lucene Directory(Index)Master
Hibernate +
Hibernate SearchProcessIndex update
Index update order
Lucene Directory(Index)Copy
Search request
Copy
Slave
Master
![Page 52: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/52.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG
49
Summary
Search for humans Full text tackles those problems
• relevance• (human) fault tolerance• stemming and synonyms• incremental search
Barrier of entry has lowered: Go for it!• POJO based approach• infrastructural code tackled by frameworks• unified programmatic model
![Page 53: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/53.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Questions?
http://search.hibernate.org http://lucene.apache.org Hibernate Search in Action
• Manning
http://in.relation.to http://blog.emmanuelbernard.com
![Page 54: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/54.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Licence
Les photos et logos appartiennent à leurs auteurs respectifs
Le contenu de la présentation est sous licence Creative Commons 2.0 France• Contrat Paternité• Pas d'Utilisation Commerciale• Pas de Modification
http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
4
![Page 55: Hibernate Search & Bean Validation](https://reader033.vdocument.in/reader033/viewer/2022052523/555c24bfd8b42a09438b4b97/html5/thumbnails/55.jpg)
Copyright © Emmanuel Bernard – License Creative Commons 2.0 France
Ch’ti JUG Buffet
Merci pour votre attention
Merci à Norsys pour son sponsoring
5