Transaction API + webové frameworky + další poznámky. Petr Aubrecht CA

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

KIV/PIA 2013 Jan Tichava

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

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

Spring framework 2.0. Roman Pichlík CZJUG

Platformy / technologie. Jaroslav Žáček jaroslav.zacek@osu.cz

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

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.

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

Platformy / technologie. Jaroslav Žáček

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Co je nového v Java EE 6

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

Technologie Java. Jaroslav Žáček

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

PA165: Úvod do Java EE. Petr Adámek

Session Beans. Petr Aubrecht CA. Vtipy budou tentokrát o krizi:

Enterprise Java Beans 3.0

Tvorba podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU

(Enterprise) JavaBeans. Lekce 7

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

Platformy / technologie. Jaroslav Žáček

Architektury informačních systémů

Architektury informačních systémů

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

Web Frameworks Java Server Faces. Petr Aubrecht CA

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

Obsah přednášky. Technologie. Enterprise Java Beans. Enterprise Java Beans. EJB kontejner. Enterprise Java Beans (EJB)

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

X33EJA Enterprise Java

Tvorba informačních systémů

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

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

Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition

Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging

X33EJA Enterprise Java. Petr Šlechta Sun Microsystems

Distribuované systémy a výpočty

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

Spring portfolio. Tomáš Krátký

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

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

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Čipové karty Lekařská informatika

Java a J2EE. Cleverlance. Lukáš Marek lukas.marek@cleverlance.com

<Insert Picture Here> Vývoj portálových řešení v Javě

Tvorba informačních systémů

Technologie Java. Jaroslav Žáček

Softwarové komponenty a Internet

JavaServer Faces Zdeněk Troníček

SPECIFIKACE PŘEDMĚTU PLNĚNÍ

Zabezpečení platformy SOA. Michal Opatřil Corinex Group

Tvorba informačních systémů

Tvorba informačních systémů

Michal Krátký, Miroslav Beneš

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

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

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

RMI - Distribuované objekty v Javě

Tvorba informačních systémů na platformě J2EE Petr Hetmánek Masarykova Univerzita, Fakulta Informatiky, Botanická 68a, Brno

Server-side technologie pro webové aplikace

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

JAVA Unit testing Java, zimní semestr

Vladimír

Distribuované systémy a výpočty

Převod 4GL aplikací do webového prostředí. Ing. Jan Musil, IBM ČR Community of Practice for

DPKOM_10 Transakce 1

Úvod do Web Services

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

RMI Remote Method Invocation

Ruby on Rails: zapomeňte na Javu

UJO Framework. revoluční architektura beans. verze

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

Ověřování nahraditelnosti EJB komponent. Pavel Stuna

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Tvorba informačních systémů

SOAP & REST služby. Rozdíly, architektury, použití

Spring Framework Handout

Tvorba informačních systémů

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

Návrhové vzory Tvorba objektů

Technologie JavaBeans

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

Programování v Javě I. Leden 2008

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

Pokročilé Webové služby a Caché security. Š. Havlíček

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

Domino 10 nové komponenty a související témata (node.js, ES )

Groovy agilní Java. Pavel Kříž Filip Malý

Tvorba informačních systémů

Web frameworks v praxi Tomáš Krátký

Java Server-side. Štěpán Kuchař. VŠB-TUO FEI Katedra informatiky

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

MySQL sežere vaše data

Java a Caché IV: Manipulace s objekty

Ant aneb Ferda Mravenec, práce všeho druhu

Databázové a informační systémy

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Úvod do Groovy pro Java experty

Transkript:

Transaction API + webové frameworky + další poznámky Petr Aubrecht CA

Co dnes probereme Slíbené JTA Webové frameworky (serverové) Další Třívrstvá architektura Různé z JEE 6 Doporučení pro postup práce v JEE

Java Transaction API (JTA) Něco definice: Java Transaction API (JTA) specifies standard Java interfaces between a transaction manager and the parties involved in a distributed transaction system: the resource manager, the application server, and the transactional applications. The JTA specification was developed by Sun Microsystems in cooperation with leading industry partners in the transaction processing and database system arena. See JSR 907. Also see the Java Transaction Service (JTS) page

Bean Managed Transaction javax.transaction.usertransaction interface begin() commit() rollback()

Container Managed Transactions Probrali jsme u session bean, default nastavení je @Required, tedy transakce je vždy použita pro každou metodu (session beany)

Attributes Transaction Attr. Client s Tr. Business Method s Tr. Required None T2 Required T1 T1 RequiresNew None T2 RequiresNew T1 T2 Mandatory None Error Mandatory T1 T1 NotSupported None None NotSupported T1 None Supports None None Supports T1 T1 Never None None Never T1 Error

JTA toť vše Je to samozřejmě složitější (např. synchronizaci napříč servery), ale nad rámec našich potřeb.

Webové frameworky Čistě Javascriptové knihovny necháme na příští přednášku Martina Ptáčka. Další možností je použití cloudu (PaaS) např. Amazon (v případě zájmu řekněte Martinovi), dostanete k dispozici celý server, kam můžete dát, co libo Google App Engine neumí JEE, tedy session beany, má vlastní API, JPA 1.0+JDO, umí Java, Python, Go Zabývat se budeme především frameworky nad Javou nebo aspoň JVM (o MS se dozvíte v jiných předmětech). RIA Rich Internet Application

Hlavní rozdělení client/server Serverové frameworky řeší především procesy na serveru, tedy IoC, transakce ap. JEE session beans, JPA Spring (+DataServices, WebFlow) Klientské komponentové nabízejí grafické komponenty: GWT (Vaadin), JSF nekomponentové pomáhají s HTML: Spring MVC, Grails (RoR), Wicket

Spring Framework Spring vznikl jako knihovna pro jednodušší programování JEE při psaní knihy Expert One-on-One J2EE Design and Development Roda Johnsona, později se přetvořila na samostatnou knihovnu konkurující JEE, fungující jako integrační platforma pro mnoho technologií. Spring v mnoha aplikacích slouží na backendu jako IoC, tedy stará se o inicializaci tříd.

Spring IoC, DI <!-- property-based --> <bean id="examplebean" class="examples.examplebean"> <!-- setter injection using the nested <ref/> element --> <property name="beanone"><ref bean="anotherexamplebean"/></property> <!-- setter injection using the neater 'ref' attribute --> <property name="beantwo" ref="yetanotherbean"/> <property name="integerproperty" value="1"/> </bean> <bean id="anotherexamplebean" class="examples.anotherbean"/> <bean id="yetanotherbean" class="examples.yetanotherbean"/> <!-- constructor-based --> <bean id="examplebean" class="examples.examplebean"> <constructor-arg index="0" value="7500000"/> <constructor-arg index="1" value="42"/> </bean>

Spring Web Flow Spring Web Flow is a Spring MVC extension that allows implementing the "flows" of a web application. A flow encapsulates a sequence of steps that guide a user through the execution of some business task. It spans multiple HTTP requests, has state, deals with transactional data, is reusable, and may be dynamic and long-running in nature.

Spring Data Category Relational Databases Sub-project JPA JDBC Extensions Big Data Data-Grid Key Value Stores Apache Hadoop GemFire Redis Riak Document Stores MongoDB CouchDB (planned) Graph Databases Column Stores Neo4j HBase (planned) Cassandra (planned) Blob-Stores Common Infrastructure Blob Commons Grails Mapping

GWT Google Web Toolkit Hlavní idea: programovat UI v Javě, která se potom přeloží do Javascriptu GWT v sobě nese kompilátor Javy, jehož výstup překládá do Javascriptu, pro každý browser zvlášť. Zdrojový kód smí obsahovat importy pouze z java.lang, java.util a z GWT knihoven. Stránka je vytvářena procedurálně, kódem, nikoliv XML definicí, velmi podobně jako Swing. GWT řeší komunikaci client-server asynchronně.

Příklad GWT panel public Widget oninitialize() { VerticalPanel vpanel = new VerticalPanel(); HTML label = new HTML(constants.cwCheckBoxCheckAll()); vpanel.add(label); // Add a checkbox for each day of the week String[] daysofweek = constants.cwcheckboxdays(); for (int i = 0; i < daysofweek.length; i++) { String day = daysofweek[i]; CheckBox checkbox = new CheckBox(day); checkbox.ensuredebugid("cwcheckbox-" + day); // Disable the weekends if (i >= 5) { checkbox.setenabled(false); } vpanel.add(checkbox); } // Return the panel of checkboxes return vpanel; }

Příklad GWT akce public Widget oninitialize() { // Create a panel to align the widgets HorizontalPanel hpanel = new HorizontalPanel(); // Add a normal button Button normalbutton = new Button( constants.cwbasicbuttonnormal(), new ClickHandler() { public void onclick(clickevent event) { Window.alert(constants.cwBasicButtonClickMessage()); } }); hpanel.add(normalbutton); // Add a disabled button Button disabledbutton = new Button(constants.cwBasicButtonDisabled()); disabledbutton.setenabled(false); hpanel.add(disabledbutton); return hpanel; }

Příklad GWT strom // Add a handler that automatically generates some children dynamictree.addopenhandler(new OpenHandler<TreeItem>() { public void onopen(openevent<treeitem> event) { TreeItem item = event.gettarget(); if (item.getchildcount() == 1) { // Close the item immediately item.setstate(false, false); // Add a random number of children to the item String itemtext = item.gettext(); int numchildren = Random.nextInt(5) + 2; for (int i = 0; i < numchildren; i++) { TreeItem child = item.additem(itemtext + "." + i); child.additem(""); } // Remove the temporary item when we finish loading item.getchild(0).remove(); // Reopen the item item.setstate(true, false); }

Asynchronní volání na server https://developers.google.com/web-toolkit/doc/latest/tutorial/rpc?hl=cs

Asynchronní volání na server - kód public class StockPriceServiceImpl extends RemoteServiceServlet implements StockPriceService { private void refreshwatchlist() { public StockPrice getprices(..) { stockpricesvc =... GWT.create(StockPriceService.class); } } return prices; // Set up the callback object. AsyncCallback<StockPrice[]> callback = new AsyncCallback<StockPrice>() { public void onfailure(throwable caught) { // TODO: Do something with errors. } public void onsuccess(stockprice[] result) { updatetable(result); } }; // Make the call to the stock price service. stockpricesvc.getprices(..., callback); }

Příklad GWT internacionalizace ErrorMessages.properties permissiondenied = User ''{0}'' has security clearance ''{1}'' and cannot access ''{2}'' ErrorMessages.java (generated) public interface ErrorMessages extends Messages { String permissiondenied(string username, String securityclearance, String inaccessibleresource); } Example.java private ErrorMessages errormessages = GWT.create(ErrorMessages.class); formattedmessage.settext(errormessages.permissiondenied(user, clearance, resource));

Jak začít s GWT webappcreator -out StockWatcher -junit "C:\eclipse\plugins\org.junit_3.8.2.v20070611173 8\junit.jar" com.google.gwt.sample.stockwatcher.stockwatcher vygeneruje projekt ant devmode Running the development mode code server

Linky http://code.google.com/intl/cs/webtoolkit/ home http://gwt.google.com/samples/showcase/ sada funkčních příkladů se zdrojáky

Vaadin Vaadin zjednodušuje a urychluje práci s GWT, takže získává podobné vlastnosti jako JSF; zavádí i vlastní komponenty

Vaadin příklad public class HelloWorld extends com.vaadin.application { /** * Init is invoked on application load (when a user accesses the application * for the first time). */ @Override public void init() { // Main window is the primary browser window final Window main = new Window("Hello window"); setmainwindow(main); // "Hello world" text is added to window as a Label component main.addcomponent(new Label("Hello World!")); } }

Grails (RoR) rychlý vývoj (rapid development) běží nad JVM, Groovy automaticky generuje CRUD stránky

Grails List class Trip { String name String city Date startdate Date enddate String purpose String notes } class TripController {... def list = { if(!params.max) params.max = 10 [ triplist: Trip.list( params ) ] }... <g:each in="${triplist}" status="i" var="trip"> } <tr class="${(i % 2) == 0? 'odd' : 'even'}"> <td> <g:link action="show" id="${trip.id}">${trip.id?.encodeashtml()}</g:link> </td> </tr> </g:each>

Apache Wicket slavný framework, ceněný pro svou jednoduchost a rychlost, lze dělat vlastní komponenty důraz na server-side stav <html> <body> <span wicket:id="message">message goes here</span> </body> </html> public class HelloWorld extends WebPage { public HelloWorld() { add(new Label("message", "Hello World!")); } }

Drobnější témata Local vs. Remote Vícevrstvá architektura Global JNDI Names Calendar Based Time Services Embeddable Container Profily End-to-end

Local vs Remote 10! L (ms) R (ms) 1 000! L (ms) R (ms) 10x 32 13 10x 3 9 100x 17 57 100x 41 29 1 000x 236 400 1 000x 432 868 10 000x 566 990 10 000x 4,326 6,216 100 000x 2,693 4,259 100 000x 44,342 42,498 1 000 000x 24,498 42,594 1 000 000x 401,302 418,383 100! L (ms) R (ms) 10 000! L (ms) R (ms) 10x 0 1 10x 95 106 100x 4 5 100x 565 307 1 000x 49 124 1 000x 3,552 3,874 10 000x 1,132 758 10 000x 38,518 38,518 100 000x 6,543 8,942 100 000x 380,394 387,810 1 000 000x 67,017 84,830 1 000 000x 4,689,103 4,768,913

Třívrstvá architektura 2 vrstvy obrázky jsem si půjčil od Dagiho (dagblog) 2 vrsvy byly prima v 90. letech kde to nestačí?

Třívrstvá architektura 3 vrstvy zjednodušený model

Třívrstvá architektura 3 vrstvy dnešní architektura

Global JNDI Names v současnosti jsou JNDI názvy specifické pro servery, takže je testování a deployment poněkud magie Glassfish: com.os.ent.customermanagerremote JBoss: ejb3sampleapp/customermanager/remote Oracle: CustomerManager ve 3.1 bude univerzání (alternativní) pojmenování: java:global[/<application-name>]/<modulename>/<bean-name>#<interface-name>

Calendar Based Timer Services možnost spouštět akce v určitý čas, např. každé pondělí v 6:15 podobně jako cron, diskuze se vede, jestli podporovat syntaxi cron (protože ji každý zná) @Stateless public class NewsLetterBean { } @Schedule(minute= 15, hour= 6, dayofweek= Mon ) public void sendnewsletter() { }...

EJB 3.1 Embeddable Container Problém s deploymentem lze řešit pomocí tzv. embeddable containeru. Neběží jako server, je iniciován kódem. Must have pro testování: @Test public void teststates() throws Exception { Properties props = new Properties(); props.setproperty(context.initial_context_factory, "org.apache.openejb.client.localinitialcontextfactory"); InitialContext context = new InitialContext(props); StateRegistry stateone = (StateRegistry) context.lookup("stateregistrybeanlocal"); StateRegistry statetwo = (StateRegistry) context.lookup("stateregistrybeanlocal"); stateone.setstate("maryland", "MD"); statetwo.setstate("virginia", "VA");

Profily JEE Již nyní je JEE opravdu široká technologie s mnoha požadavky, které většina aplikací ani nevyužije (viz oblíbený terč CORBA) Pro JEE 6 je navržena myšlenka profilů, kdy kontejner musí implementovat určité technologie; není potřeba implementovat úplně všechny. Aktuálně je definován pouze Web Profile, který obsahuje webové technologie, EJB mimo JMS a JavaMail, ale nemusí obsahovat CORBA, web services, management a security. Objevují se nové technologie, které budou později začleněny jako nepovinné (např. SIP Servlety, JAX-RS).

End-to-end Postup od začátku do konce... všechno presentation logic servlet, JSP, JSF backing beans business logic session beans, MDB web services Data Access Layer entities, JPA DB

Databáze ER servlet, JSP, JSF backing beans session beans entities, JPA DB Sprint 1,1 0,N Task 1,1 0,N Developer 1,1 0,N Assignment

JPA (DAO, DAL) servlet, JSP, JSF backing beans session beans entities, JPA prostě vygenerujeme doplníme @GeneratedValue(strategy=GenerationType.IDENTITY) a případně opravíme doporučuji mít dopředu připravená data (snáze se kontroluje) DB

Session beans (business logic) servlet, JSP, JSF backing beans session beans entities, JPA budeme potřebovat přístup k Entity manageru: @PersistenceContext private EntityManager em; samozřejmě necháme IDE generovat tyto části funčnost ověříme pomocí web services (buď z webového interface Glassfishe nebo necháme NB vygenerovat ws clienta) DB

Mock prezentační vrstvy servlet, JSP, JSF backing beans session beans entities, JPA vyrobíme webové stránky, jak mají vypadat, se statickým obsahem. Postupně je budeme nahrazovat funkčním obsahem a psát backing beany. Nepište velké části bez dalších návazností, předejdete tak velkým přepisům. Pište vždy funkcionalitu vertikálně, od session beans, backing bean až po JSF. DB

A rozšiřujeme... Budeme dále rozšiřovat; když už máme základ aplikace, přidávání dalších stránek je radost! Postupujte inkrementálně, práce roste viditelně pod rukama a motivuje vás k dalšímu vývoji! Rozdělená práce, kde dlouho nevidíte výsledek, demotivuje! Nesnažte se mít úchvatnou aplikaci hned z počátku, strávíte příliš času nad nedůležitými částmi a nakonec nebude aplikace hotová. Soustřeďte se na předem dohodnutou funkcionalitu. Až ji budete mít hotovou, můžete ji zkusit vylepšit, případně dodat další.

Linky http://java.sun.com/javaee/ http://java.sun.com/developer/technicalarticles/javaee/javaee6overview.html http://java.sun.com/javaee/javaserverfaces/ http://download-book.net/jsf-2.0-book-pdf.html Beginning Java EE 6 with GlassFish 3 JavaServer Faces 2.0, The Complete Reference