GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

Podobné dokumenty
Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

UJO Framework. revoluční architektura beans. verze

KIV/PIA 2013 Jan Tichava

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

Web Services na SOAP

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Spring Framework Handout

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Základy objektové orientace I. Únor 2010

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Návrhové vzory Tvorba objektů

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Enterprise Java Beans 3.0

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Architektura aplikace

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Úvod do programovacích jazyků (Java)

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

2012 ET NETERA a.s. Wicket přehled technologie Martin Strejc

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Platformy / technologie. Jaroslav Žáček

Spring framework 2.0. Roman Pichlík CZJUG

(Enterprise) JavaBeans. Lekce 7

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

Multiplatformní osobní organizér v jazyce Java

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Abstract Factory úvod

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Část 1 Moderní JavaScript

RMI Remote Method Invocation

IS pro podporu BOZP na FIT ČVUT

MVVM pro desktop i web

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

JAVA Unit testing Java, zimní semestr

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

Převod LN aplikace do xpages

Formy komunikace s knihovnami

Tvorba informačních systémů

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

PŘEHLED A MOŽNOSTI VYUŽITÍ WEBOVÝCH MAPOVÝCH SLUŽEB

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Programování v Javě I. Leden 2008

Java/QE Akademie - Osnova

Kód, který se nebude často měnit

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Část IV - Bezpečnost 21. Kapitola 19 Bezpečnostní model ASP.NET 23

SPECIFIKACE PŘEDMĚTU PLNĚNÍ

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

PB161 Programování v jazyce C++ Přednáška 7

Generické programování

Sem vložte zadání Vaší práce.

Programování v Javě I. Únor 2009

PB161 Programování v jazyce C++ Přednáška 7

PREPROCESOR POKRAČOVÁNÍ

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)

Teoretické minimum z PJV

DPKOM_06 Dědičnost entit a zpětná volání posluchači

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

Vývojařská Plzeň AngularJS

Proč Angular JS framework?

Vyřešené teoretické otázky do OOP ( )

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

Web frameworks v praxi

Aplikace s grafickým uživatelským rozhraním

Programátorské večery. Tomáš Herceg Microsoft Student Partner

Jak na IoC/DI kontejnery

PHP Best Practices. Please try to fit your code to 80 columns. That's decimal 80. A. Morton

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Specifikace. Odevzdání do

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

Object-relational mapping (JPA, Hibernate)

RESTful API TAMZ 1. Cvičení 11

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Úvod do Groovy pro Java experty

Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET)

Abstraktní datové typy: zásobník

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Transkript:

GWT pro pokročilé MoroSystems, s.r.o. Pavel Klobása Senior Java Developer pavel.klobasa@morosystems.cz

Obsah Co je to GWT? Návrhové vzory a užitečné knihovny Komunikace klient - server ExtGWT GWT+Spring Roo

JavaScript je ZLO... Slabě typovaný neobjektový jazyk Málo datových typů Slabá modularizace Běhové prostředí ani jazyk není paralelní...javascript je v téměř každém prohlížeči...

Co je to GWT? javac gwtc *.java *.class *.js obfuscated *.js GWT je kompilátor z Javy do JavaScriptu

Co je to GWT? GWT je sada komponent

Co je to také GWT? Simulace základních knihoven v JS Základní knihovny (DOM, Cookies...) RPC - asynch. komunikace se serverem i18n Skrytí rozdílu mezi prohlížeči Události

Proč GWT? Protože Java... Dědičnost, kolekce, interface, generické datové typy... Podpora v Eclipse (syntax highlighting, autocomplete, formátování...) Maven (repozitory, building) Debugging FindBugs, CodePro a další...

Nevýhody GWT Některé javové knihovny nejsou dostupné: Calendar, SimpleDateFormat... Reflection, anotace, Class.newInstance() Zůstává: Asynchronní paradigma AJAXu Kód neběží paralelně

...ale něco tomu chybí.. Dependency Injection? MVC a jiné návrhové vzory? Log4J? REST? Elegantní GUI komponenty?

Část druhá: Návrhové vzory a knihovny

Logování pomocí GWT-log Podobné Log4J: Log.debug("spouštím výpočet..."); ConsoleLogger do konzole prohlížeče DIVLogger do HTML stránky RemoteLogger na server pomocí GWT RPC

Návrhový vzor Event Bus Tradiční pojetí Příjemce se registruje u producenta Event Bus Příjemce se registruje na sběrnici a přijímá všechny události odpovídajícího typu Výhody EventBus Pro registraci nepotřebujeme znát přímý odkaz na instanci producenta Lze mít více producentů

MVP - Model-View-Presenter Analogie MVC, ale View je chytré (má stav, interaguje s uživatelem) Presenter připraví data a vloží je do View View posílá presenteru požadavky uživatele jako události presenteru ( ulož data )

MVP - Model-View-Presenter zapisuje data ViewInterface server ajax Presenter čte data ViewImpl událost

Dependency Injection - GIN Interface Injector factory pro ostatní případy @Inject na konstruktoru parametry budou injektovány Životní cyklus Prototype i Singleton Styl interface-implementace

DI+MVP+EventBus - ukázka public interface TitleEditorView { void settitle(string title); String gettitle(); public class SaveEvent {... public interface SaveEventHandler { public void onsavetitlerequest(... event);

DI+MVP+EventBus public class TitleEditorPresenter { @Inject public TitleEditorPresenter(final DataProvider provider, final TitleEditorView view, EventBus bus){ provider.load(new DataLoadHandler(){ public void onload(){ view.setdata(provider.gettitle()); ); bus.addhandler(saveevent.type, new SaveEventHandler() { public void onsavedata(saveevent ev){ provider.savetitle(view.gettitle());

public class TitleEditor extends VerticalPanel implements TitleEditorView{ TextBox field; @Inject public TitleEditor(final EventBus bus){ field=new TextBox(); add(field); Button savebtn = new Button("Ulož"); savebtn.addclickhandler(new ClickHandler() { public void onclick(final ClickEvent event) { bus.fireevent(new SaveTitleRequestEvent()); ); add(savebtn); public void settitle(string title){ field.settext(title); public String gettitle(){ field.gettext(); DI+MVP+EventBus

Část třetí: Data

Komunikace server - prohlížeč GWT RPC jako zdroj dat z databáze? Stáhne na klienta všechny atributy entity včetně navázaných entit Problém s Hibernate Lazy asociacemi Na serveru musí být JVM+naše aplikace Entity musí být IsSerializable/Serializable Na serveru máme jiné požadavky na data než na klientu (DTO)

JSON Fragment JS kódu Faktický i formální standard String, Number, Array, Object/Map, NULL REST Bezestavová komunikace Každá služba (a každý objekt) vlastní URL REST API definuje rozhraní server-klient

JSON na serveru - org.json java.io.writer wr=... JSONWriter writer=new JSONWriter(wr); writer.array(); for(product prod:products){ writer.object(); writer.key("id").value(prod.getid()); writer.key("name").value(prod.getname()); writer.endobject(); writer.endarray();

JSON na serveru - GSON Gson gson=new Gson(); String outputjson=gson.tojson(myobj); @Expose, ExclusionStrategy potlačení atributu JSONSerializer<T> vlastní konverzní předpis

JSON na klientu Jak naplnit bean daty bez reflexe: public class MyEntity{ protected Map<String,Object> data= new HashMap<String,Object>(); public void setid(integer id){ data.put("id", id); public Integer getid(){ return (Integer)data.get("id");

Část čtvrtá: ExtGWT

Datový grid v RIA... Požadavky: Stránkování, dotahování dat ze serveru, změna řazení, změna pořadí sloupců, skrývání sloupců, formátování sloupců a políček, inline editace políčka...

ExtGWT vs. SmartGWT GPL/commercial 99% kódu v Javě Přepsané ExtJS LGPL Javové API nad JS SmartClient obalený GWT Komponenty lze mixovat s GWT komp. Vlastní implementace datových zdrojů Placená podpora

ExtGWT ukázky komponent

ExtGWT Widget Component Drag&Drop Field Chart Viewport Toolbar Grid...a další Layout BorderLayout FitLayout TableLayout...a další Data Návrh GUI: GWT Designer nebo Ext Designer.

Část pátá: Spring Roo

GWT+Spring Roo dohromady RestService REST Query ExtGWT data App. logika RestServlet REST Cmd Model Entity.aj Spring Framework Presenter View db prohlížeč (GWT)

Další informace: http://code.google.com/intl/cs/webtoolkit/ http://code.google.com/p/gwt-log/ http://www.sencha.com/products/gwt/ http://code.google.com/p/google-gin/ http://www.json.org http://code.google.com/p/google-gson http://www.youtube.com/watch?v=pduhr18-edm