vaadin 7 - java enterprise edition integration

155
Vaadin 7 Java Enterprise Edition Integration Peter Lehto Vaadin Expert @peter_lehto

Upload: peter-lehto

Post on 14-Jul-2015

1.105 views

Category:

Software


8 download

TRANSCRIPT

Page 1: Vaadin 7 - Java Enterprise Edition integration

Vaadin 7Java Enterprise Edition Integration

Peter Lehto Vaadin Expert @peter_lehto

Page 2: Vaadin 7 - Java Enterprise Edition integration

What is

Vaadin?

Java EE 7

Page 3: Vaadin 7 - Java Enterprise Edition integration

Vaadin CDI

Addon

Structuring

Vaadin

App

Application

architecture

Page 4: Vaadin 7 - Java Enterprise Edition integration

How to

get started

QA

Authentication

Authorization

Page 5: Vaadin 7 - Java Enterprise Edition integration
Page 6: Vaadin 7 - Java Enterprise Edition integration
Page 7: Vaadin 7 - Java Enterprise Edition integration

User interface framework for rich

web applications

Page 8: Vaadin 7 - Java Enterprise Edition integration

User Interface Components

Page 9: Vaadin 7 - Java Enterprise Edition integration

User Interface Components

Page 10: Vaadin 7 - Java Enterprise Edition integration

Developer

Productivity

Rich

UX

Page 11: Vaadin 7 - Java Enterprise Edition integration

How does server-side UI work, really?

Page 12: Vaadin 7 - Java Enterprise Edition integration
Page 13: Vaadin 7 - Java Enterprise Edition integration

• Loader page • CSS Theme • Images • JavaScript

Page 14: Vaadin 7 - Java Enterprise Edition integration

• Loader page • CSS Theme • Images • JavaScript

135k

Compressed & reduced thin client

Page 15: Vaadin 7 - Java Enterprise Edition integration
Page 16: Vaadin 7 - Java Enterprise Edition integration
Page 17: Vaadin 7 - Java Enterprise Edition integration

• name=”Joonas” • button clicked !261 bytes

Page 18: Vaadin 7 - Java Enterprise Edition integration
Page 19: Vaadin 7 - Java Enterprise Edition integration

• name=”Joonas” • button clicked !261 bytes

• Add notification !267 bytes

Page 20: Vaadin 7 - Java Enterprise Edition integration

Java Enterprise Edition 7

Page 21: Vaadin 7 - Java Enterprise Edition integration

Collection of Java Specification Requests (JSRs) for writing (web) applications

Page 22: Vaadin 7 - Java Enterprise Edition integration

Collection of Java Specification Requests (JSRs) for writing (web) applications

Application server implements Java EE specification

Page 23: Vaadin 7 - Java Enterprise Edition integration
Page 24: Vaadin 7 - Java Enterprise Edition integration
Page 25: Vaadin 7 - Java Enterprise Edition integration

Do you know some Java EE specs?

Page 26: Vaadin 7 - Java Enterprise Edition integration

Java Persistence API 2.1 (JPA)

(JSR-338)

Page 27: Vaadin 7 - Java Enterprise Edition integration

Java Persistence API 2.1 (JPA)

(JSR-338)Enterprise Java Beans 3.2 (EJB)

(JSR-345)

Page 28: Vaadin 7 - Java Enterprise Edition integration

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

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

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

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

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

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

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

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

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

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

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

APIs that are part of “Web Profile”

Which APIs should I know?

Page 40: Vaadin 7 - Java Enterprise Edition integration

Java Servlet 3.1(JSR-340)

Page 41: Vaadin 7 - Java Enterprise Edition integration

Java Servlet 3.1(JSR-340)Java Persistence API 2.1 (JPA)

(JSR-338)

Page 42: Vaadin 7 - Java Enterprise Edition integration

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

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

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

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

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

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

Java Persistence API 2.1 (JPA)

Page 49: Vaadin 7 - Java Enterprise Edition integration

!

Customer

@Id@AutoGeneratedLong id;!@Column(nullable = false)String name;!Date birthdate;

@Entity

______________________________

Page 50: Vaadin 7 - Java Enterprise Edition integration

!

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

!

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

Enterprise Java Beans 3.2 (EJB)

Page 53: Vaadin 7 - Java Enterprise Edition integration

For defining business layer with service methods

Enterprise Java Beans

Page 54: Vaadin 7 - Java Enterprise Edition integration

For defining business layer with service methods

For local and remote services

Enterprise Java Beans

Page 55: Vaadin 7 - Java Enterprise Edition integration

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

(UI) CustomerView

!

Page 57: Vaadin 7 - Java Enterprise Edition integration

(@Remote) CustomerService

(UI) CustomerView

!

@Remote @Local

Page 58: Vaadin 7 - Java Enterprise Edition integration

(@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

(DB) CustomerDatabase

Page 60: Vaadin 7 - Java Enterprise Edition integration

!@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

!@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

Context and Dependency

Injection 1.1 (CDI)

Page 63: Vaadin 7 - Java Enterprise Edition integration

Instead of saying new say @Inject

Context and Dependency Injection

Page 64: Vaadin 7 - Java Enterprise Edition integration

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

Injections occur within a scope

Context and Dependency Injection

Page 66: Vaadin 7 - Java Enterprise Edition integration

Injections occur within a scope

@ApplicationScoped @SessionScoped @RequestScoped

Context and Dependency Injection

Page 67: Vaadin 7 - Java Enterprise Edition integration

Injections occur within a scope

@ApplicationScoped @SessionScoped @RequestScoped

@UIScoped @ViewScoped

Context and Dependency Injection

Page 68: Vaadin 7 - Java Enterprise Edition integration

@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

Integration to EE through

Vaadin CDI

Page 70: Vaadin 7 - Java Enterprise Edition integration

UI and View as managed bean with @CDIUI and @CDIView

Page 71: Vaadin 7 - Java Enterprise Edition integration

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

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

@CDIUI(“”)!public class AppUI extends UI {!!}

Page 74: Vaadin 7 - Java Enterprise Edition integration

@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

@UIScoped AppUI

_____________________________ !@Injectprivate MainMenu menu;!@Injectprivate ViewManager viewMgr;!@Injectprivate User loggedInUser;

<<UIScope>> !

MainMenuViewManager

!

<<SessionScope>> !

User

Page 76: Vaadin 7 - Java Enterprise Edition integration

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

VaadinServlet

Page 78: Vaadin 7 - Java Enterprise Edition integration

VaadinServlet

HttpSession

1

n

Page 79: Vaadin 7 - Java Enterprise Edition integration

VaadinServlet

HttpSession VaadinSession

1

n

1 1

1

n

Page 80: Vaadin 7 - Java Enterprise Edition integration

VaadinServlet

HttpSession VaadinSession

UI

1

n

1 1

1

n

1

*

Page 81: Vaadin 7 - Java Enterprise Edition integration

@UIScoped

Page 82: Vaadin 7 - Java Enterprise Edition integration

@UIScoped

Necessary to acquire UI specific instances

Page 83: Vaadin 7 - Java Enterprise Edition integration

@UIScoped

Necessary to acquire UI specific instances

CDI context to map beans per UI instance

Page 84: Vaadin 7 - Java Enterprise Edition integration

@UIScoped

Necessary to acquire UI specific instances

CDI context to map beans per UI instance

@UIScoped

Page 85: Vaadin 7 - Java Enterprise Edition integration

@UIScoped!public class MainMenu extends CustomComponent {!!}

Page 86: Vaadin 7 - Java Enterprise Edition integration

@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

@CDIUI(“”)!public class AppUI extends UI {!! !! …!!! protected void onNavigationEvent(@Observes!! ! ! ! ! ! ! ! ! ! ! ! ! ! NavigationEvent event) {!! viewMgr.navigateTo(event.getView());!! }!}

Page 88: Vaadin 7 - Java Enterprise Edition integration

Structuring Vaadin App with Model View Presenter

Page 89: Vaadin 7 - Java Enterprise Edition integration

Do you like spaghetti?

Page 90: Vaadin 7 - Java Enterprise Edition integration

Do you like spaghetti?

Let’s clean it!

Page 91: Vaadin 7 - Java Enterprise Edition integration

History behind MVP

Page 92: Vaadin 7 - Java Enterprise Edition integration

Late

197

0s

Page 93: Vaadin 7 - Java Enterprise Edition integration

Late

197

0s

Originally Model-View-Controller

Page 94: Vaadin 7 - Java Enterprise Edition integration

Late

197

0s

SmallTalk-80

Originally Model-View-Controller

Page 95: Vaadin 7 - Java Enterprise Edition integration

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

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

1980

s

Page 98: Vaadin 7 - Java Enterprise Edition integration

1980

s

Taligent Model-View-Presenter

Page 99: Vaadin 7 - Java Enterprise Edition integration

1980

s

Influenced by SmallTalk-80

Taligent Model-View-Presenter

Page 100: Vaadin 7 - Java Enterprise Edition integration

1980

s

Influenced by SmallTalk-80

Model, View, Presenter, Interactors, Commands, Selections

Taligent Model-View-Presenter

Page 101: Vaadin 7 - Java Enterprise Edition integration

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

late

198

0s

Page 103: Vaadin 7 - Java Enterprise Edition integration

late

198

0s

Simplified Taligent MVP

Page 104: Vaadin 7 - Java Enterprise Edition integration

late

198

0s

Views handle input events initially

Simplified Taligent MVP

Page 105: Vaadin 7 - Java Enterprise Edition integration

late

198

0s

Views handle input events initially

Model may fire events

Simplified Taligent MVP

Page 106: Vaadin 7 - Java Enterprise Edition integration

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

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

UI layer MVP targets

Clean code best practices like…

Page 109: Vaadin 7 - Java Enterprise Edition integration

Single responsibility principle Class should change only for one reason

Page 110: Vaadin 7 - Java Enterprise Edition integration

Open closed principle Open for extension, closed for change

Page 111: Vaadin 7 - Java Enterprise Edition integration

Today many MVP variations exists

Here’s one…

Page 112: Vaadin 7 - Java Enterprise Edition integration

Model-View-Presenter

Presenter

View Model

Page 113: Vaadin 7 - Java Enterprise Edition integration

Model-View-Presenter

Presenter

View Model

Page 114: Vaadin 7 - Java Enterprise Edition integration

View Impl

Model-View-Presenter

Presenter

View Model

Page 115: Vaadin 7 - Java Enterprise Edition integration

Example

EditorView- Button saveButton;!- Button cancelButton;!- FieldGroup personFieldGroup;

- saveButtonClicked()!- cancelButtonClicked()

ClickListener+ buttonClicked()

Page 116: Vaadin 7 - Java Enterprise Edition integration

Presenter

+ saveButtonClicked()!+ cancelButtonClicked()!

EditorView- Button saveButton;!- Button cancelButton;!- FieldGroup personFieldGroup;

+ commitChanges()!+ discardChanges()

ClickListener+ buttonClicked()

Example

Page 117: Vaadin 7 - Java Enterprise Edition integration

+ 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

Benefits of MVP

Page 119: Vaadin 7 - Java Enterprise Edition integration

Benefits of MVP

Separation of concerns simplifying code

Page 120: Vaadin 7 - Java Enterprise Edition integration

Benefits of MVP

Separation of concerns simplifying code

UI logic becomes separated from rendering providing testability

Page 121: Vaadin 7 - Java Enterprise Edition integration

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

Application Architecture

Page 123: Vaadin 7 - Java Enterprise Edition integration

Client Browser

View<<EJB>>

Business Logic

Server-side-UI

Presenter<<JPA>>

Persistency

Business Persistency

Page 124: Vaadin 7 - Java Enterprise Edition integration

Client Browser

View

Server-side-UI

Page 125: Vaadin 7 - Java Enterprise Edition integration

public interface CustomerView extends ApplicationView<CustomerViewPresenter> {!}

Page 126: Vaadin 7 - Java Enterprise Edition integration

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

Client Browser

View

Server-side-UI

Presenter

Page 128: Vaadin 7 - Java Enterprise Edition integration

@ViewScopedpublic class CustomerViewPresenter extends AbstractPresenter<CustomerView> {!}

Page 129: Vaadin 7 - Java Enterprise Edition integration

@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

@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

Client Browser

View<<EJB>>

Business Logic

Server-side-UI

Presenter

Business

Page 132: Vaadin 7 - Java Enterprise Edition integration

@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

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

Client Browser

View<<EJB>>

Business Logic

Server-side-UI

Presenter<<JPA>>

Persistency

Business Persistency

Page 135: Vaadin 7 - Java Enterprise Edition integration

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

<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

Authentication and Authorization

Page 138: Vaadin 7 - Java Enterprise Edition integration

com.vaadin.cdi.access.AccessControl

Page 139: Vaadin 7 - Java Enterprise Edition integration

com.vaadin.cdi.access.AccessControl

@RolesAllowed

Page 140: Vaadin 7 - Java Enterprise Edition integration

com.vaadin.cdi.access.AccessControl

@RolesAllowed

isUserSignedIn(),isUserInRole(String),getPrincipalName()isUserHavingAccessToView(ViewBean)

Page 141: Vaadin 7 - Java Enterprise Edition integration

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

How to Get Started?

Page 143: Vaadin 7 - Java Enterprise Edition integration

<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

Eclipse

Download plugin from Martketplace

Page 145: Vaadin 7 - Java Enterprise Edition integration

IntelliJ IDEA

Built-in support

Page 146: Vaadin 7 - Java Enterprise Edition integration

Netbeans

Download plugin Netbeans Plugin Portal

Page 147: Vaadin 7 - Java Enterprise Edition integration

Example App github.com/peterl1084/cdiexample

Page 148: Vaadin 7 - Java Enterprise Edition integration

Lessons learned today

Page 149: Vaadin 7 - Java Enterprise Edition integration

Lessons learned today

1. Java EE contains tons of specifications for enterprise apps

Page 150: Vaadin 7 - Java Enterprise Edition integration

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

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

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

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

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

Questions or Comments?

Peter Lehto Vaadin Expert @peter_lehto