vaadin 7 - java enterprise edition integration
TRANSCRIPT
![Page 1: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/1.jpg)
Vaadin 7Java Enterprise Edition Integration
Peter Lehto Vaadin Expert @peter_lehto
![Page 2: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/2.jpg)
What is
Vaadin?
Java EE 7
![Page 3: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/3.jpg)
Vaadin CDI
Addon
Structuring
Vaadin
App
Application
architecture
![Page 4: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/4.jpg)
How to
get started
QA
Authentication
Authorization
![Page 5: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/5.jpg)
![Page 6: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/6.jpg)
![Page 7: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/7.jpg)
User interface framework for rich
web applications
![Page 8: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/8.jpg)
User Interface Components
![Page 9: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/9.jpg)
User Interface Components
![Page 10: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/10.jpg)
Developer
Productivity
Rich
UX
![Page 11: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/11.jpg)
How does server-side UI work, really?
![Page 12: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/12.jpg)
![Page 13: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/13.jpg)
• Loader page • CSS Theme • Images • JavaScript
![Page 14: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/14.jpg)
• Loader page • CSS Theme • Images • JavaScript
135k
Compressed & reduced thin client
![Page 15: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/15.jpg)
![Page 16: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/16.jpg)
![Page 17: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/17.jpg)
• name=”Joonas” • button clicked !261 bytes
![Page 18: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/18.jpg)
![Page 19: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/19.jpg)
• name=”Joonas” • button clicked !261 bytes
• Add notification !267 bytes
![Page 20: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/20.jpg)
Java Enterprise Edition 7
![Page 21: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/21.jpg)
Collection of Java Specification Requests (JSRs) for writing (web) applications
![Page 22: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/22.jpg)
Collection of Java Specification Requests (JSRs) for writing (web) applications
Application server implements Java EE specification
![Page 23: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/23.jpg)
![Page 24: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/24.jpg)
![Page 25: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/25.jpg)
Do you know some Java EE specs?
![Page 26: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/26.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)
![Page 27: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/27.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)
![Page 28: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/28.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)
![Page 29: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/29.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
![Page 30: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/30.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
![Page 31: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/31.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)
![Page 32: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/32.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)
![Page 33: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/33.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)Bean Validation 1.1
(JSR-349)
![Page 34: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/34.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)Bean Validation 1.1
(JSR-349)Interceptors 1.2(JSR-318)
![Page 35: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/35.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)Bean Validation 1.1
(JSR-349)Interceptors 1.2(JSR-318)Java Transaction
API 1.2 (JTA)(JSR-907)
![Page 36: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/36.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)Bean Validation 1.1
(JSR-349)Interceptors 1.2(JSR-318)Java Transaction
API 1.2 (JTA)(JSR-907)
Java API for RESTful Web Services 2.0
(JAX-RS)(JSR-907)
![Page 37: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/37.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)Bean Validation 1.1
(JSR-349)Interceptors 1.2(JSR-318)Java Transaction
API 1.2 (JTA)(JSR-907)
Java API for RESTful Web Services 2.0
(JAX-RS)(JSR-907)
Java API for XML based Web Services 2.2
(JAX-WS)(JSR-907)
![Page 38: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/38.jpg)
Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Java Servlet 3.1(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
Context and Dependency
Injection 1.1 (CDI)(JSR-340)
Java Server Faces 2.2 (JSF)
(JSR-344)Java Server Pages
2.3 (JSF)(JSR-245)Bean Validation 1.1
(JSR-349)Interceptors 1.2(JSR-318)Java Transaction
API 1.2 (JTA)(JSR-907)
Java API for RESTful Web Services 2.0
(JAX-RS)(JSR-907)
Java API for XML based Web Services 2.2
(JAX-WS)(JSR-907)
Java Architecture for XML Binding 2.2
(JAX-B)(JSR-222)
![Page 39: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/39.jpg)
APIs that are part of “Web Profile”
Which APIs should I know?
![Page 40: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/40.jpg)
Java Servlet 3.1(JSR-340)
![Page 41: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/41.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)
![Page 42: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/42.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)
![Page 43: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/43.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Context and Dependency
Injection 1.1 (CDI)(JSR-340)
![Page 44: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/44.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Context and Dependency
Injection 1.1 (CDI)(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)
![Page 45: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/45.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Context and Dependency
Injection 1.1 (CDI)(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)Bean Validation 1.1
(JSR-349)
![Page 46: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/46.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Context and Dependency
Injection 1.1 (CDI)(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)Bean Validation 1.1
(JSR-349)Interceptors 1.2
(JSR-318)
![Page 47: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/47.jpg)
Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)
(JSR-338)Enterprise Java Beans 3.2 (EJB)
(JSR-345)Context and Dependency
Injection 1.1 (CDI)(JSR-340)Java Message
Service 2.0 (JMS)(JSR-343)Bean Validation 1.1
(JSR-349)Interceptors 1.2
(JSR-318)Java API for RESTful Web Services 2.0
(JAX-RS)(JSR-907)
![Page 48: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/48.jpg)
Java Persistence API 2.1 (JPA)
![Page 49: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/49.jpg)
!
Customer
@Id@AutoGeneratedLong id;!@Column(nullable = false)String name;!Date birthdate;
@Entity
______________________________
![Page 50: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/50.jpg)
!
Customer
@Entity
______________________________
Customer
Id name birthdate
1 Alex 07.02.1984
2 John 18.2.1992
@Id@AutoGeneratedLong id;!@Column(nullable = false)String name;!Date birthdate;
![Page 51: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/51.jpg)
!
Customer
@Id@AutoGeneratedLong id;!@Column(nullable = false)String name;!Date birthdate;!@OneToMany(mappedBy=“customer”)List<Invoice> invoices;
@Entity
______________________________
Customer
Id name birthdate
1 Alex 07.02.1984
2 John 18.2.1992
Invoice
Id customer number
1 1 123
2 1 124
![Page 52: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/52.jpg)
Enterprise Java Beans 3.2 (EJB)
![Page 53: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/53.jpg)
For defining business layer with service methods
Enterprise Java Beans
![Page 54: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/54.jpg)
For defining business layer with service methods
For local and remote services
Enterprise Java Beans
![Page 55: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/55.jpg)
For defining business layer with service methods
For local and remote services
Enterprise Java Beans
For transaction boundaries
![Page 56: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/56.jpg)
(UI) CustomerView
!
![Page 57: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/57.jpg)
(@Remote) CustomerService
(UI) CustomerView
!
@Remote @Local
![Page 58: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/58.jpg)
(@Remote) CustomerService
(UI) CustomerView
!
(@Stateless) CustomerService
Bean
@Remote @Local
@Stateless @Stateful @Singleton
(@Stateless) CustomerService
Bean
(@Stateless) CustomerService
Bean
![Page 59: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/59.jpg)
(DB) CustomerDatabase
![Page 60: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/60.jpg)
!@Local!public interface CustomerService {!!! void storeCustomers(Collection<Customer> customers);!!! void removeCustomers(Collection<Customer> customers);!!! Collection<Customer> getAllCustomers()!!! Optional<Customer> getCustomerByName(String name);!}
![Page 61: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/61.jpg)
!@Stateless!public class UserServiceBean implements !! UserService {!!! @PersistenceContext!! private EntityManager em;!! !! public void storeUsers(Collection<User> users) {!! ! users.forEach(user -> storeUser(user));!! }!!! public void storeUser(User user) {!! ! em.merge(user);!! }!}
![Page 62: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/62.jpg)
Context and Dependency
Injection 1.1 (CDI)
![Page 63: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/63.jpg)
Instead of saying new say @Inject
Context and Dependency Injection
![Page 64: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/64.jpg)
Instead of saying new say @Inject
Decouples code and lets container manage dependencies
Context and Dependency Injection
![Page 65: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/65.jpg)
Injections occur within a scope
Context and Dependency Injection
![Page 66: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/66.jpg)
Injections occur within a scope
@ApplicationScoped @SessionScoped @RequestScoped
Context and Dependency Injection
![Page 67: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/67.jpg)
Injections occur within a scope
@ApplicationScoped @SessionScoped @RequestScoped
@UIScoped @ViewScoped
Context and Dependency Injection
![Page 68: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/68.jpg)
@Stateless CustomerService
_________________!@EJBInvoiceService invoices;
@UIScoped AppUI
_________________!
@EJBCustomerService service;!@InjectMainMenu mainMenu;!@InjectUser currentUser;
@UIScoped MainMenu
_________________!
@InjectEvent<MenuEvent> menuEventSource;
@Stateless InvoiceService
![Page 69: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/69.jpg)
Integration to EE through
Vaadin CDI
![Page 70: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/70.jpg)
UI and View as managed bean with @CDIUI and @CDIView
![Page 71: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/71.jpg)
UI and View as managed bean with @CDIUI and @CDIView
Allows annotations like @Inject and @EJB to be processed inside Vaadin beans.
![Page 72: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/72.jpg)
UI and View as managed bean with @CDIUI and @CDIView
Allows annotations like @Inject and @EJB to be processed inside Vaadin beans.
Easily reference EE objects
![Page 73: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/73.jpg)
@CDIUI(“”)!public class AppUI extends UI {!!}
![Page 74: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/74.jpg)
@CDIUI(“”)!public class AppUI extends UI {!! !! @Inject!! private MainMenu mainMenu;!!! @Inject! private User currentUser;!!! @Inject!! private ViewManager viewManager;!! !! public void init(VaadinRequest request) {!! ! VerticalLayout layout = new VerticalLayout();!! ! layout.addComponent(mainMenu);!!! ! setContent(layout);!! }!}
![Page 75: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/75.jpg)
@UIScoped AppUI
_____________________________ !@Injectprivate MainMenu menu;!@Injectprivate ViewManager viewMgr;!@Injectprivate User loggedInUser;
<<UIScope>> !
MainMenuViewManager
!
<<SessionScope>> !
User
![Page 76: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/76.jpg)
<<UIScope>> !
MenuBarFooter
ViewManager!
<<SessionScope>> !
User
@UIScoped AppUI
_____________________________ !@Injectprivate MenuBar menu;!!@Injectprivate ViewManager viewMgr;!@Injectprivate User loggedInUser;
<<UIScope>> !
MenuBarFooter
ViewManager!
<<UIScope>> !
MenuBarFooter
ViewManager!
<<UIScope>> !
MenuBarViewManager
!
![Page 77: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/77.jpg)
VaadinServlet
![Page 78: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/78.jpg)
VaadinServlet
HttpSession
1
n
![Page 79: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/79.jpg)
VaadinServlet
HttpSession VaadinSession
1
n
1 1
1
n
![Page 80: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/80.jpg)
VaadinServlet
HttpSession VaadinSession
UI
1
n
1 1
1
n
1
*
![Page 81: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/81.jpg)
@UIScoped
![Page 82: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/82.jpg)
@UIScoped
Necessary to acquire UI specific instances
![Page 83: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/83.jpg)
@UIScoped
Necessary to acquire UI specific instances
CDI context to map beans per UI instance
![Page 84: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/84.jpg)
@UIScoped
Necessary to acquire UI specific instances
CDI context to map beans per UI instance
@UIScoped
![Page 85: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/85.jpg)
@UIScoped!public class MainMenu extends CustomComponent {!!}
![Page 86: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/86.jpg)
@UIScoped!public class MainMenu extends CustomComponent {!!! @Inject!! private Event<NavigationEvent> eventSource;!!!! protected void onMenuItemClicked(MenuItem item) {!! ! eventSource.fireEvent(new NavigationEvent(item));!! }!}
![Page 87: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/87.jpg)
@CDIUI(“”)!public class AppUI extends UI {!! !! …!!! protected void onNavigationEvent(@Observes!! ! ! ! ! ! ! ! ! ! ! ! ! ! NavigationEvent event) {!! viewMgr.navigateTo(event.getView());!! }!}
![Page 88: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/88.jpg)
Structuring Vaadin App with Model View Presenter
![Page 89: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/89.jpg)
Do you like spaghetti?
![Page 90: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/90.jpg)
Do you like spaghetti?
Let’s clean it!
![Page 91: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/91.jpg)
History behind MVP
![Page 92: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/92.jpg)
Late
197
0s
![Page 93: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/93.jpg)
Late
197
0s
Originally Model-View-Controller
![Page 94: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/94.jpg)
Late
197
0s
SmallTalk-80
Originally Model-View-Controller
![Page 95: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/95.jpg)
Late
197
0s
SmallTalk-80
Controller is mediator between end user and application
Originally Model-View-Controller
![Page 96: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/96.jpg)
Late
197
0s
SmallTalk-80
Controller is mediator between end user and application
Model notifies about changes with Observer pattern
Originally Model-View-Controller
![Page 97: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/97.jpg)
1980
s
![Page 98: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/98.jpg)
1980
s
Taligent Model-View-Presenter
![Page 99: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/99.jpg)
1980
s
Influenced by SmallTalk-80
Taligent Model-View-Presenter
![Page 100: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/100.jpg)
1980
s
Influenced by SmallTalk-80
Model, View, Presenter, Interactors, Commands, Selections
Taligent Model-View-Presenter
![Page 101: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/101.jpg)
1980
s
Influenced by SmallTalk-80
Model, View, Presenter, Interactors, Commands, Selections
Taligent Model-View-Presenter
Presenter orchestrates the structure, not the input
![Page 102: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/102.jpg)
late
198
0s
![Page 103: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/103.jpg)
late
198
0s
Simplified Taligent MVP
![Page 104: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/104.jpg)
late
198
0s
Views handle input events initially
Simplified Taligent MVP
![Page 105: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/105.jpg)
late
198
0s
Views handle input events initially
Model may fire events
Simplified Taligent MVP
![Page 106: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/106.jpg)
late
198
0s
Views handle input events initially
Model may fire events
Simplified Taligent MVP
Presenter handles the logic, not the user input control
![Page 107: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/107.jpg)
late
198
0s
Views handle input events initially
Model may fire events
Simplified Taligent MVP
Presenter handles the logic, not the user input control
![Page 108: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/108.jpg)
UI layer MVP targets
Clean code best practices like…
![Page 109: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/109.jpg)
Single responsibility principle Class should change only for one reason
![Page 110: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/110.jpg)
Open closed principle Open for extension, closed for change
![Page 111: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/111.jpg)
Today many MVP variations exists
Here’s one…
![Page 112: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/112.jpg)
Model-View-Presenter
Presenter
View Model
![Page 113: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/113.jpg)
Model-View-Presenter
Presenter
View Model
![Page 114: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/114.jpg)
View Impl
Model-View-Presenter
Presenter
View Model
![Page 115: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/115.jpg)
Example
EditorView- Button saveButton;!- Button cancelButton;!- FieldGroup personFieldGroup;
- saveButtonClicked()!- cancelButtonClicked()
ClickListener+ buttonClicked()
![Page 116: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/116.jpg)
Presenter
+ saveButtonClicked()!+ cancelButtonClicked()!
EditorView- Button saveButton;!- Button cancelButton;!- FieldGroup personFieldGroup;
+ commitChanges()!+ discardChanges()
ClickListener+ buttonClicked()
Example
![Page 117: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/117.jpg)
+ commitChanges()!+ discardChanges()
Presenter
+ saveButtonClicked()!+ cancelButtonClicked()!
EditorViewImpl- Button saveButton;!- Button cancelButton;!- FieldGroup personFieldGroup;
+ commitChanges()!+ discardChanges()
ClickListener+ buttonClicked()
Example
EditorView
![Page 118: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/118.jpg)
Benefits of MVP
![Page 119: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/119.jpg)
Benefits of MVP
Separation of concerns simplifying code
![Page 120: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/120.jpg)
Benefits of MVP
Separation of concerns simplifying code
UI logic becomes separated from rendering providing testability
![Page 121: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/121.jpg)
Benefits of MVP
Separation of concerns simplifying code
UI logic becomes separated from rendering providing testability
Keeps spaghetti in a cup by following clean code principles
![Page 122: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/122.jpg)
Application Architecture
![Page 123: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/123.jpg)
Client Browser
View<<EJB>>
Business Logic
Server-side-UI
Presenter<<JPA>>
Persistency
Business Persistency
![Page 124: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/124.jpg)
Client Browser
View
Server-side-UI
![Page 125: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/125.jpg)
public interface CustomerView extends ApplicationView<CustomerViewPresenter> {!}
![Page 126: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/126.jpg)
public interface CustomerView extends ApplicationView<CustomerViewPresenter> {! void populateCustomers(Collection<Customer> customers);! void openEditorFor(Customer customer); void closeEditor(); void removeTableSelection();}
![Page 127: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/127.jpg)
Client Browser
View
Server-side-UI
Presenter
![Page 128: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/128.jpg)
@ViewScopedpublic class CustomerViewPresenter extends AbstractPresenter<CustomerView> {!}
![Page 129: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/129.jpg)
@ViewScopedpublic class CustomerViewPresenter extends AbstractPresenter<CustomerView> {! @EJB private CustomerService customerService;! @Override protected void onViewEnter() { getView().populateCustomers(customerService.getAllCustomers()); }}
![Page 130: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/130.jpg)
@ViewScopedpublic class CustomerViewPresenter extends AbstractPresenter<CustomerView> {! @EJB private CustomerService customerService;! @Override protected void onViewEnter() { getView().populateCustomers(customerService.getAllCustomers()); }! public void onCustomerSaved(@Observes CustomerSavedEvent event) { … }! public void onCustomerRemoved(@Observes CustomerRemovedEvent event) { … }! public void onCustomerSelected(@Observes CustomerSelectedEvent event) { … }}
![Page 131: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/131.jpg)
Client Browser
View<<EJB>>
Business Logic
Server-side-UI
Presenter
Business
![Page 132: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/132.jpg)
@Localpublic interface CustomerService {! void storeCustomers(Collection<Customer> customers);! void removeCustomers(Collection<Customer> customers);! Collection<Customer> getAllCustomers();! Optional<Customer> getCustomerByUsername(String username);}
![Page 133: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/133.jpg)
Application
Architecture
@Stateless@TransactionAttribute(TransactionAttributeType.REQUIRED)public class CustomerServiceBean implements CustomerService {! @PersistenceContext(unitName = "appUnit") private EntityManager entityManager;! @Override public void storeCustomers(Collection<Customer> customers) { customers.forEach(cu -> entityManager.merge(cu)); }! @Override public Collection<Customer> getAllCustomers() { return entityManager.createQuery(query).getResultList(); }! …}
![Page 134: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/134.jpg)
Client Browser
View<<EJB>>
Business Logic
Server-side-UI
Presenter<<JPA>>
Persistency
Business Persistency
![Page 135: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/135.jpg)
Application
Architecture
@Entitypublic class Customer {! @Id @AutoGenerated private Long id;! private String name;! @Temporal(DATE) private Date birthDate;! public boolean isPersisted() { return id != null; }! …}
![Page 136: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/136.jpg)
<persistence-unit name="appUnit" transaction-type="JTA"> <jta-data-source>jdbc/app-backend</jta-data-source> <class>org.vaadin.example.backend.entity.Customer</class>! <properties> <property name="…" … /> </properties></persistence-unit>
![Page 137: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/137.jpg)
Authentication and Authorization
![Page 138: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/138.jpg)
com.vaadin.cdi.access.AccessControl
![Page 139: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/139.jpg)
com.vaadin.cdi.access.AccessControl
@RolesAllowed
![Page 140: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/140.jpg)
com.vaadin.cdi.access.AccessControl
@RolesAllowed
isUserSignedIn(),isUserInRole(String),getPrincipalName()isUserHavingAccessToView(ViewBean)
![Page 141: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/141.jpg)
com.vaadin.cdi.access.AccessControl
@RolesAllowed
isUserSignedIn(),isUserInRole(String),getPrincipalName()isUserHavingAccessToView(ViewBean)
Can be replaced with @Alternative
![Page 142: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/142.jpg)
How to Get Started?
![Page 143: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/143.jpg)
<dependency <groupId>com.vaadin</groupId> <artifactId>vaadin-cdi</artifactId> <version>1.0.0.beta4</version></dependency>!<repository> <id>vaadin-addons</id> <url>http://maven.vaadin.com/vaadin-addons</url></repository>
![Page 144: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/144.jpg)
Eclipse
Download plugin from Martketplace
![Page 145: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/145.jpg)
IntelliJ IDEA
Built-in support
![Page 146: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/146.jpg)
Netbeans
Download plugin Netbeans Plugin Portal
![Page 148: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/148.jpg)
Lessons learned today
![Page 149: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/149.jpg)
Lessons learned today
1. Java EE contains tons of specifications for enterprise apps
![Page 150: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/150.jpg)
Lessons learned today
1. Java EE contains tons of specifications for enterprise apps
2. Vaadin is a great way to assemble web apps with components
![Page 151: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/151.jpg)
Lessons learned today
1. Java EE contains tons of specifications for enterprise apps
2. Vaadin is a great way to assemble web apps with components
3. Combining Vaadin with Java EE works best through CDI
![Page 152: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/152.jpg)
Lessons learned today
1. Java EE contains tons of specifications for enterprise apps
2. Vaadin is a great way to assemble web apps with components
3. Combining Vaadin with Java EE works best through CDI
4. Following best practices makes your code maintainable
![Page 153: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/153.jpg)
Lessons learned today
1. Java EE contains tons of specifications for enterprise apps
2. Vaadin is a great way to assemble web apps with components
3. Combining Vaadin with Java EE works best through CDI
4. Following best practices makes your code maintainable
5. Vaadin is a Finnish word meaning Reindeer
![Page 154: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/154.jpg)
Download for Freevaadin.com/bookPDF, ePub, HTML
9 789529 319701
ISBN 978-952-93-1970-1
9 789529 319701
ISBN 978-952-93-1970-1
Vol 1 288 pages
Vol 2 434 pages
![Page 155: Vaadin 7 - Java Enterprise Edition integration](https://reader035.vdocument.in/reader035/viewer/2022062419/55a422cf1a28abae278b4745/html5/thumbnails/155.jpg)
Questions or Comments?
Peter Lehto Vaadin Expert @peter_lehto