Programowanie w JEE
Programowanie w JEE (EJB, JPA, JSF)
Kod szkolenia: JAVA-JEE
Szkolenie adresowane jest do osób, które w krótkim czasie chcą poznać JEE na poziomie umożliwiającym samodzielne wytwarzanie kodu.
Tak do programistów warstwy prezentacji, biznesowej, zasobów jak i integracji, chcących wytwarzać oprogramowanie w oparciu o standardy JEE (EJB, JPA, JSF, BeanValidation, CDI).
Celem szkolenie jest nabycie umiejętności programowania wszystkich warstw w oparciu o standardy JEE. Szkolenie łączy w sobie program kilku tygodni innych szkoleń, zatem naszym celem nie jest poznanie wszystkich niuansów technologicznych, a skupienie się na najważniejszych aspektach technologii, wykorzystywanych przez większość czasu wytwarzania oprogramowania w JEE.
Tak jak w zasadzie góry lodowej (20% na wierzchu, 80% pod spodem) - poznajemy te 20% API, które będzie potrzebne przez 80% czasu programowania. Wspomniana metafora nie oddaje prawdziwych proporcji poznanego API, niemniej oddaje ideę i cele szkolenia. Dlatego w ciągu 5 dni uczestnicy są w stanie poznać nie tylko technologie EJB, JPA, JSF i Bean Validation (co daje łącznie 11 dni osobnych szkoleń), a także CDI na poziomie umożliwiającym im swobodną pracę w rzeczywistych projektach.
Na szkoleniu świadomie pomijane, lub minimalizowane są tematyki zaawansowane, które są mniej przydatne w codziennej pracy a na których omówienie i przećwiczenie jest czas na szkoleniach dedykowanych.
5 dni, po 8 godzin. Łącznie 40 godzin(y) szkolenia.
Oczekiwane przygotowanie słuchaczy przed szkoleniem
Od uczestników wymaga się podstawowej znajomości HTML, SQL i umiejętności programowania w języku Java.
Polecane szkolenia uzupełniające
Szkolenie poprzedzające - Programowanie w Java (JAVA-PRO).
W naszej ofercie znajdują się również szkolenia uzupełniające w zakresie JEE:
JAVA-WYD,
JAVA-EJB,
JAVA-JSF,
JAVA-WS,
JAVA-JPA.
A także szkolenia na wyższych poziomach: projektowanie (JAVA-WZO) i architektura (JAVA-ARCH)
- Wprowadzenie do JEE
- 3 modele aplikacji
- Web-centric
- Application-centric
- Enterprise
- Wymagania na systemy klasy Enterprise
- Standardy JEE
- Specyfikacje JEE
- JSTL
- JSF
- JAAS
- JTA
- JPA
- JNDI
- JMS
- Pozostałe specyfikacje JEE
- Komponenty JEE
- Obsługi HTTP
- Servlety
- Strony JSP
- Komponenty EJB
- Sesyjne
- Statefull
- Stateless
- Singleton (od EJB 3.1 - JEE6)
- MDB
- Encyjne (do EJB 2.x)
- Komunikacja z komponentami EJB
- WebService
- Kontenery JEE
- Servletów
- Serwer Aplikacyjny
- Architektura Enterprise
- Architektura oparta na rozproszonych komponentach
- Problemy architektury komponentowej
- Usługi serwera aplikacji JEE
- Architektura wielowarstwowa
- Architektura typu Enterprise w JEE
- Komponenty EJB
- Sesyjne EJB
- Rodzaje dostępów
- Zdalny @Remote
- Lokalny @Local
- Lokalny bezinterfejsowy @LocalBean (od EJB 3.1 - JEE6)
- Klient EJB
- Podstawy JNDI
- Zdalne użycie EJB
- Lokalne użycie EJB
- Lokalne użycie EJB bez interfejsu
- Bezstanowe EJB @Stateless
- Cechy
- Tworzenie
- Cykl życia
- @PostConstruct
- @PreDestroy
- Stanowe EJB @Stateful
- Cechy
- Tworzenie
- Cykl życia
- @PostConstruct
- @PrePassivate
- @PostActivate
- @PreDestroy
- @Remove
- Singleton EJB @Singleton (od EJB 3.1 - JEE6)
- Cechy
- Tworzenie
- Cykl życia
- @PostConstruct
- @PreDestroy
- @Startup
- @DependsOn
- Synchronizacja Singleton EJB
- MDB - Message Driven Bean
- Podstawy JMS
- Kanały kounikacji
- Topic
- Queue
- Słuchacze
- MessageListener
- Message
- Producenci
- ConnectionFactory
- Connection
- Session
- Message
- BytesMessage
- MapMessage
- ObjectMessage
- StreamMessage
- TextMessage
- MessageProducer
- Tworzenie MDB
- @MessageDriven
- @ActivactionConfigProperty
- Komunikacja na kolejkach Queue
- Komunikacja na tematach Topic
- Selekcja odbiorców
- messageSelector
- Message properties
- Trwali odbiorcy (subscriptionDurability)
- Potwierdzanie dostarczenia (acknowdlegeMode)
- Cykl życia
- @PostConstruct
- @PreDestroy
- Zarządzanie zależnościami
- Odnajdywanie elementów w JNDI
- Zależności EJB
- @EJB - wstrzykiwanie
- @EJBs
- Zależności zasobów (JDBC, JMS, obiekty kontekstowe)
- @Resource - wstrzykiwanie
- @Resources
- Obiekty kontekstowe
- EJBContext
- SessionContext
- MessageDrivenContext
- Transakcje
- Założenia - ACID
- Sterowanie transakcjami
- Określanie typu sterowania
- @TransactionManagement
- @TransactionManagementType
- Propagacja kontekstu transakcji
- Transakcje zarządzane przez EJB
- UserTransaction
- Transakcje zarządzane przez kontener
- @TransactionAttribute
- Poziomy transakcyjności @TransactionAttributeType
- REQUIRED
- REQUIRES_NEW
- SUPPORTS
- NOT_SUPPORTED
- MANDATORY
- NEVER
- Transakcje a API EJBContext
- setRolbackOnly
- getRolbackOnly
- Transakcje a wyjątki
- Wyjątki systemowe
- Wyjątki aplikacyjne
- @ApplicationException
- Transakcje rozproszone
- Transakcja lokalna a rozproszona
- Zatwierdzanie dwuetapowe - 2PC
- Standard X/Open
- Manager transakcji (TX)
- Manager zasobów (XA)
- JTA jako rozwiązanie w Javie
- Konfiguracja JDBC
- Przegląd pozostałych cech EJB
- Zadania czasowe i asynchroniczne
- Podstawy Timer'ów EJB
- Metody planowane @Schedule (od EJB 3.1 - JEE6)
- Metody asynchroniczne @Asynchronous (od EJB 3.1 - JEE6)
- Bezpieczeństwo
- Kontrola adnotacją @RolesAllowed
- Przedstawienie pozostałych adnotacji bezpieczeństwa
- @PermitAll
- @DenyAll
- @RunAs
- @DeclareRoles
- Kontrola poprzez API EJBContext
- Konfiguracja
- Intercepting
- Idea AOP
- Interceptory deklarowane w API
- Interceptory deklarowane w XML
- Co dalej - CDI
- Produkcja EJB
- Paczka jar z EJB
- Paczka ear
- EJB w paczkach war (od EJB 3.1 - JEE6)
- EJB lite
- EJB w aplikacjch desktopowych (od EJB 3.1 - JEE6)
- Kontener zagnieżdżony (embedded)
- EJBContainer
- Lokalizacja EJB a nazwa JNDI
- Podstawy JPA
- Czym jest ORM
- Idea mapowania obiektów na relacje
- ORM a DAO
- JPA jako standard ORM
- Tworzenie klas trwałych JPA
- @Entity
- @Id
- @GeneratedValue
- Dostęp do wartości
- Przez pole
- Przez własność (get, set)
- Zarządzanie trwałością JPA
- Konfiguracja JPA
- persistenace.xml
- orm.xml
- EntityManager
- PersistanceUnit
- Cykl życia encji
- New
- Managed
- Deatached
- Removed
- API zarządzania trwałością
- Integracja z JPA
- Poza kontenerem
- Persistance
- EntityManagerFactory
- W kontenerze
- @PersistanceUnit
- @PersistanceContext
- Extended EntityManager
- Relacje w JPA
- Obiekty zagnieżdżone
- @Embeddable
- @Embedded
- Relacje między obiektami
- @OneToOne
- @OneToMany
- @ManyToOne
- @ManyToMany
- Optymalizacje
- @JoinColumn
- Leniwa inicjalizacja (lazy loading)
- Konfiguracja FetchType.LAZY
- LazyInitializationException
- Problem n+1 zapytań
- Relacje dwukierunkowe
- Definiowanie
- Strona bierna - pułapki przy zmianach
- Kaskadowe zatwierdzanie zmian
- CascadeType
- ALL
- DEATACH
- MERGE
- PERSIST
- REFRESH
- REMOVE
- Atrybut orphanRemoval (od JPA 2.0 - JEE6)
- Kolekcje w relacjach typu wiele
- @OrderBy
- @OrderColumn (od JPA 2.0 - JEE6)
- @MapKey
- Dziedziczenie w JPA
- @Inheritance
- Strategie dziedziczenia InheritanceType
- TABLE_PER_CLASS
- JOINED
- @PrimaryKeyJoinColumn
- SINGLE_TABLE
- @DiscriminatorColumn
- @DiscriminatorValue
- Konsekwencje wydajnościowe
- Wyłączenie dziedziczenia ze schematu
- @MappedSuperclass
- @AttributeOverride, @AttributeOverrides
- @AssociationOverride, @AssociationOverrides
- Obiektowy język zapytań JPQL
- Wykonywanie zapytań
- EntityManager
- Query
- TypedQuery<T> (od JPA 2.0 - JEE6)
- Zapytania zmiany danych
- Zapytania z wynikiem
- Ograniczanie wyników zapytania
- Zapytania parametryzowane
- Składnia JPQL
- Podstawowe klauzule zapytania
- Operatory
- Funkcje
- Wyrażenia czasu
- Bieżący czas
- CURRENT_DATE
- CURRENT_TIME
- CURRENT_TIMESTAMP
- Literały czasu (od JPA 2.0 - JEE6)
- Zapytania polimorficzne
- Zapytania zagnieżdżone
- Złączanie tabel
- Obiekty transferowe - SELECT new
- Sprawdzanie typu obiektu
- Sprawdzenie class
- TYPE (od JPA 2.0 - JEE6)
- Instrukcje warunkowe (od JPA 2.0 - JEE6)
- NULLIF
- COALESCE
- CASE
- Kolekcje w JPQL (od JPA 2.0 - JEE6)
- Kolekcje w operatorze IN
- Kolejność w kolekcji - INDEX
- Odwołania do map
- KEY
- VALUE
- ENTRY
- Zapytania nazwane
- Definiowanie
- @NamedQuery
- @NamedQueries
- @QueryHint
- Użycie
- Zalety
- Czym są zapytania natywne
- Definiowanie schematu bazy danych
- Typy
- @Lob
- @Enumerated
- @Temporal
- @Transient
- @Version
- Kolumny
- @Basic
- @Column
- Automatyczne generowanie kluczy
- @GeneratedValue
- GenerationType
- AUTO
- IDENTITY
- SEQUENCE
- @SequenceGenerator
- TABLE
- @TableGenerator
- Klucze złożone
- Definiowanie kluczy złożonych
- @IdClass
- @Id
- @EmbeddedId
- @Embeddable
- @AttributeOverride
- @AttributeOverrides
- @MapsId (od JPA 2.0 - JEE6)
- Wyszukiwanie po kluczach złożonych
- Tabele
- @Table
- @UniqueConstraint
- @JoinTable
- @JoinColumn
- @JoinColumns
- @SecondaryTable, @SecondaryTables
- @PrimaryKeyJoinColumn
- @PrimaryKeyJoinColumns
- @CollectionTable (od JSF 2.0 - JEE6)
- Walidacja danych - Bean Validation (JEE6)
- Reguły w modelu
- Wbudowane reguły walidacji
- @AssertTrue, @AssertFalse
- @Min, @Max
- @DecimalMin, @DecimalMax
- @Digits
- @Size
- @Pattern
- @Null, @NotNull
- @Past, @Future
- Cross Field Validation - walidacja względna
- Grupy ograniczeń
- Grupa domyślna
- Własne grupy
- Hierarchia grup
- Sekwencje grup @GroupSequence
- Własna grupa domyślna dla klasy
- Walidacja w API
- Różne środowiska wykonania
- Użycie w JPA
- Użycie w JSF
- Użycie w kontenerze
- Użycie poza kontenerem
- Zakresy walidacji
- Klasa
- Atrybut
- Wartość dla atrybutu
- Grupa
- Wynik błędu
- Klasa ConstraintViolation
- Komunikaty błędów
- W ograniczeniach
- Internacjonalizacja komunikatów
- Nadpisanie komunikatów domyślnych
- Komunikaty a JSF
- Walidacja struktur obiektów
- Walidacja kolekcji i tablic
- Walidacja obiektów powiązanych (@Valid)
- Grupa domyślna a struktury obiektów
- Integracja JPA z BeanValidation
- Walidacja a relacje JPA
- Obsługa błędów walidacji - ConstraintViolationException
- Zmiana domyślnych opcji walidacji
- W persistance.xlm
- Przez Persistence
- JPA a grupy walidacji
- Walidacja a cykl życia
- Wiązanie grup z cyklem życia
- Podstawy JSF
- Spagetti komunikacyjne
- MVC
- Model obsługi żądania JSF
- Etapy obsługi żądania
- Restore View
- Apply Request Values
- Process Validations
- Update Model values
- Invoke Application
- Render Response
- Obsługa formularzy w JSF
- Żądanie inicjujące
- Żądanie zwrotne
- Wymagania projektu JSF
- Struktura
- Biblioteki
- web.xml
- faces-config.xml
- Podstawy tworzenia aplikacji w JSF
- Proste widoki
- Prosty widok JSP
- Prosty widok XML
- Logika w JSF
- Managed Beans
- Czym jest Managed Bean
- Ograniczenia metod Managed Bean
- Metody parametryzowane (od JSF 2.0)
- Zasięgi widoczności (scopes)
- application
- session
- flash (od JSF 2.0)
- view (od JSF 2.0)
- request
- none
- Własne zasięgi
- Definiowanie Managed Beans
- Za pomocą adnotacji (od JSF 2.0)
- W XML
- EL - odwołania do Manages Beans w widokach
- Wstrzykiwanie zależnych Manages Beans
- Za pomocą adnotacji (od JSF 2.0)
- W XML
- Nawigacja między widokami
- Mapowanie bezpośrednie (od JSF 2.0)
- W widokach
- W logice
- Z parametrami
- Przekierowanie (faces-redirect)
- Bookmarkability (includeViewParams)
- Mapowanie w XML
- Bezwarunkowe
- Warunkowe (od JSF 2.0)
- Reguły wyboru
- Podstawowe komponenty widoków JSF
- Biblioteki komponentów
- Komponenty prezentacji (biblioteka h)
- Komponenty logiki (biblioteka f)
- Komponenty wejściowe
- Pola tekstowe
- h:inputText
- h:inputSecret
- h:inputHidden
- h:inputTextArea
- Pola wyboru
- Definiowanie wartości wyboru
- f:selectItem
- f:selectItems
- Pola jednokrotnego wyboru
- h:selectBooleanCheckbox
- h:selectOneRadio
- h:selectOneMenu
- h:selectOneListbox
- Pola wieokrotnego wyboru
- h:selectManyCheckbox
- h:selectManyMenu
- h:selectManyListbox
- Komponenty wyjściowe
- h:outputText
- h:outputLabel
- h:outputLink
- h:outputFormat
- h:outputScript (od JSF 2.0)
- h:outputStylesheet (od JSF 2.0)
- h:graphicImage
- Komponenty dekorujące
- h:dataTable
- h:column
- f:facet header
- f:facet footer
- h:panelGrid
- h:panelGroup
- h:form
- Komponenty wywołania logiki
- h:commandButton
- h:commandLink
- Internacjonalizacja w JSF
- f:loadBoundle
- Konfiguracja internacjonalizacji
- Inne komponenty JSF
- f:view
- f:subview
- f:metadata (od JSF 2.0)
- f:viewParam
- h:link
- h:button
- f:verbatim
- f:attribute
- f:param
- Podsumowanie komponentów nawigacji
- h:outputLink
- h:commandLink
- h:commandButton
- h:link
- h:button
- Budowa formularzy w JSF
- Formularze powiązane z logiką
- Język wyrażeń EL
- Szczegóły języka EL
- Wyrażenia natychmiastowe a odroczone
- Notacja kropkowa
- Notacja []
- Operatory
- Wywołanie funkcji
- Obiekty EL dostępu do danych
- applicationScope
- sessionScope
- viewScope (od JSF 2.0)
- requestScope
- pageScope
- flash
- param
- paramValues
- header
- headerValues
- cookie
- initParam
- Konwersja danych
- Konwersja a cykl obsługi żądania
- Konwersja standardowa automatyczna
- Konwersja standardowa nieautomatyczna
- f:convertNumber
- f:convertDateTime
- Konwersja niestandardowa
- f:converter
- Walidacja danych
- Walidacja a cykl obsługi żądania
- Natywna walidacja danych w JSF
- Standardowa
- atrybut required
- f:validateRequired (od JSF 2.0)
- f:validateLength
- f:validateLongRange
- f:validateDoubleRange
- f:validateRegex (od JSF 2.0)
- Niestandardowa
- f:validator
- Dynamiczne określenie walidacji
- Problemy walidacji JSF
- Bean Validation - prosta walidacja danych (od JSF 2.0)
- Walidacja na adnotacjach
- @Min, @Max
- @Size
- @Null, @NotNull
- @Future, @Past
- @Pattern
- Reguły w modelu danych
- Integracja z JSF (od JSF 2.0)
- Domyślna
- f:validateBean
- Dynamiczne określenie walidacji
- Komunikaty błędów
- Komunikaty globalne (h:messages)
- Komunikaty powiązane (h:mesage)
- Definiowanie komunikatów własnych
- Poprzez komponenty
- Nadpisując standardowe
- Budowa widoków złożonych - Facelets
- Co daje Facelets
- Szablony (template)
- Znaczniki
- Komponenty złożone
- Facelets w JSF 1.x a 2.0
- Idea szablonów
- Prosta cegiełka
- ui:decorate
- ui:param
- Szablon zewnętrzny
- ui:insert
- ui:include
- Strona używająca szablonu
- ui:composition
- ui:define
- Podstawy modelu zdarzeń
- Model nasłuchu zdarzeń
- Zdarzenia i listenery (FacesListener)
- Podpinanie listenerów
- AJAX i JSF
- Czym jest AJAX
- Natywne wsparcie (od JSF 2.0)
- Zasięg widoku (view)
- f:ajax
- API JavaScript jsf.ajax
- Biblioteka ajax4jsf
- ajax4jsf a f:ajax
- Wybrane komponenty ajax4jsf
- a4j:ajax dawniej a4j:supportv
- a4j:outputPanel
- a4j:status
- a4j:pool
- a4j:commandButton
- a4j:commandLink
- Optymalizacje komunikacji AJAX
- a4j:region
- a4j:queue
- a4j:attachQueue
- Parametry optymalizacyjne
- Instalacja ajax4jsf
- Komponenty RichFaces
- Czym się różni RichFaces od ajax4jsf
- Wybrane komponenty RichFaces
- Walidacja
- rich:graphValidator
- rich:messages
- rich:message
- Struktury danych
- rich:list
- rich:dataTable
- rich:column
- rich:columnGroup
- rich:dataScroller
- rich:tree
- Panele
- rich:panel
- rich:collapsiblePanel
- rich:popupPanel
- rich:togglePanel
- rich:togglePanelItem
- rich:tabPanel
- rich:tab
- rich:accordion
- rich:accordionItem
- Menu
- rich:panelMenu
- rich:panelMenuGroup
- rich:panelMenuItem
- rich:toolbar
- rich:toolbarGroup
- rich:dropdownMenu
- rich:menuGroup
- rich:menuItem
- rich:menuSeparator
- Różne (szybki przegląd)
- rich:autocomplete
- rich:calendar
- rich:editor
- rich:fileUpload
- rich:progressBar
- rich:pickList
- Instalacja RichFaces
- IceFaces jako konkurencja RichFaces
- API JSF
- Wstrzykiwanie zasobów do Managed Beans (od JSF 1.2)
- @Resource, @Resources
- @EJB, @EJBs
- @WebServiceRef, @WebServiceRefs
- @PersistanceContext, @PersistanceContexts
- @PersistanceUnit, @PersistanceUnit
- Metody cyklu życia Managed Beans
- @PostConstruct
- @PreDestroy
- Najważniejsze klasy i interfejsy w JSF
- FacesContext
- FacesMessage
- ExternalContext
- Application
- Dynamiczne definiowanie elementów listy
- SelectItem
- SelectItemGroup
- Obiekty EL dostępu do API
- facesContext
- pageContext
- view
- request
- session
- application
- Wstrzykiwanie zależności - CDI
- Beany zarządzalne
- Po Co CDI?
- Zarządzalne POJO
- @ManagedBean
- @PostConstruct
- @PreDestroy
- Rozszerzenia ManagedBean
- Wdrożenie
- Wspierane środowiska
- beans.xml
- Problemy
- Wstrzykiwanie zależności
- @Inject
- Punkty wstrzyknięć
- Atrybuty klasy
- Atrybuty metod
- Atrybuty konstruktorów
- Ograniczenia
- Set'tery
- Sterowanie wstrzykiwaniem
- Zgodność typów
- Polimorfizm
- Ograniczanie widocznych typów @Typed
- Kwalifikatory
- Dodatkowy mechanizm sterowania wstrzykiwaniem
- Specjalna adnotacja
- Wiele kwalifikatorów
- Miejsca wstawiania kwalifikatorów
- Predefiniowane kwalifikatory
- @Any
- @Named
- @Default
- Kwalifikatory parametryzowane
- Parametry kwalifikatora a wstrzykiwanie
- Wyłączanie parametrów @Nonbinding
- Tworzenie własnych kwalifikatorów
- @Qualifier
- @Nonbinding
- Zakresy i obiekty kontekstowe
- @ApplicationScoped
- @SessionScoped
- @ConversationScoped
- Czym jest konwersacja
- Sterowanie konwersacją (Conversation)
- @RequestScoped
- @Dependent (pseudo zakres)
- Zakresy CDI a inne technologie
- EJB
- JSF
- Fabryki i destruktory obiektów zarządzanych
- Fabryki @Produces
- Pola fabrykujące
- Metody fabrykujące
- @New
- Fabryki a inne technologie JEE
- Definiowanie zasobów
- Użycie zasobu
- Zasoby wbudowane
- Walidacji: Validator, ValidationFactory
- Transakcji: UserTransaction
- Bezpieczeństwa: Principal
- Metody niszczące @Disposes
- Przegląd pozostałych elementów CDI
- Podstawy API CDI
- Punkt wstrzyknięcia InjectionPoint
- Wyszukiwanie przez Instance
- Specjalizaje
- Dziedziczenie a CDI (@Inherited)
- Specjalizacja @Specializes
- Alternatywy
- Czym są alternatywy
- Tworzenie alternatyw @Alternative
- Konfiguracja alternatyw (beans.xml)
- Stereotypy
- Czym są stereotypy
- Predefiniowane stereotypy
- Decorator
- Interceptor
- Model
- Tworzenie własnych stereotypów @Stereotype
- Interceptory
- Działanie jak w EJB
- @InterceptorBinding
- @Interceptor
- @AtoundInvoke
- InvocationContext
- A nawet więcej - parametry adnotacji
- Konfiguracja interceptorów (beans.xml)
- Dekoratory
- Różnice miedzy dekoratorem a interceptorem
- Tworzenie dekoratorów @Decorator
- Wstrzykiwanie dekoratorów @Delegate
- Konfiguracja dekoratorów (beans.xml)
- Model zdarzeń
- Czym jest zdarzenie
- Rozgłaszanie zdarzeń (Event)
- Definiowanie obserwatorów @Observers
- Obserwacja warunkowa
- Nasłuch na fazy transakcji (TransactionPhase)