Google Webtool Kit      Übersicht
Was ist GWT?GWT ist ein Framework für AJAX-Anwendungen, welches denEntwickler in die Lage versetzt, Rich Internet Applicat...
Warum AJAX?
Warum AJAX?
Finde den Fehler
Fehler gefunden
JavaScript = Schmerz...cross-browser...memory leak...loading latency...bugs (dynamic language)...security
Von Java zu JavaScript
Von Java zu JavaScriptJava Code:GWT compiler (-style PRETTY)GWT compiler (-style OBFUSCATED)
FeaturesUser InterfacesHistory ManagementLokalisierungClient/Server-KommunikationJavaScript Native InterfaceUnit TestingOp...
User Interfaces                    GWT                GWT Incubator      _________________________________                ...
Aufbau UI mit Code
Aufbau UI mit UIBinder
Styling mit CSS
Styling mit CSS
History ManagementAJAX-Anwendungen verwenden meistens keineBrowser History (==> Frust).Demo
LokalisierungConstants    helloWorld = Hallo, WeltMessages    goodBye = Adios, {0}Plural    @DefaultText(...)    @PluralTe...
Client/Server Kommunikation
HTTP-Requestsz.B.: PHP als Backend und XML, JSONoder ein eigenes Format.
GWT-RPCWarum nicht eine Sprache sprechen?
JavaScript Native InterfaceJava Methode direkt in JavaScript implementieren.Auf Java Members/Methoden zugreifen.Parameter ...
Unit TestingGWTTestCase für die ViewsJUnit für Presenter und ModelSelenium
OptimierungDelayed LogicCode SplittingClientBundle
ToolsEclipse PluginGWT DesignerSpeed Tracer
GWT Designer
Warum mit Java entwickeln?
VorteileClient und Server können eine Sprache verwenden(GWTRPC).Java Entwickler Tools (Eclipse, PMD, JUnit etc).Debugging ...
NachteileGoogle behält sich vor die Lizenzbestimmungen des GWT-Compilers zu ändern.Widgets teilweise sehr groß(bis zu 55k ...
Größe der Komponenten
Fragen ?
Google App EngineWeb Application Hosting Service
Google Infrastrukturautomatische und beliebige Skalierung von WebApps
Development Tools• Java SDK   o Servlet Container• Python SDK   o CGI Runtime Environment• Google Eclipse Plugin   o One-C...
Google Datastore• Bigtable (Object Database)• Google Earth, Google Finance, Google Search
Keine relationale Datenbank                              Umdenken notwendig
Queries• OOP / Sql-like Syntax• Schnelle Zugriffe bei Selects auf den KEY• Automatische Index-Erzeugung  o XML basierte Ko...
Bulk-Loader• Python-Script• Upload / Downloading Data• Backups
Einschränkungen• Indexerzeugung beim deployen kostet Zeit• Kein bulk-delete oder Massen-lesen / -schreiben
Standards: JDO / JPA / Annotations
Standards: JDO / JPA / Annotations
Kosten
•   automatische Skalierung•   Konzentration auf Gamelogik•   kürzere Entwicklungszeiten•   kein administrativer Overhead•...
•   Keine long running background processes•   Kein Streaming•   Kein FTP, Sockets ...•   Datastore: Keine Volltext-Suche•...
Fragen ?
Deferred Binding
GWT
GWT
GWT
GWT
GWT
GWT
GWT
Nächste SlideShare
Wird geladen in …5
×

GWT

1.177 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.177
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
9
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • <mockup version="1.0" skin="sketch" measuredW="971" measuredH="278" mockupW="927" mockupH="236">    <controls>      <control controlID="24" controlTypeID="com.balsamiq.mockups::FieldSet" x="34" y="32" w="927" h="71" measuredW="200" measuredH="170" zOrder="0" locked="false" isInGroup="-1">        <controlProperties>          <text>Client</text>        </controlProperties>      </control>      <control controlID="25" controlTypeID="com.balsamiq.mockups::FieldSet" x="34" y="188" w="927" h="80" measuredW="200" measuredH="170" zOrder="1" locked="false" isInGroup="-1">        <controlProperties>          <text>Server</text>        </controlProperties>      </control>      <control controlID="26" controlTypeID="com.balsamiq.mockups::Arrow" x="44" y="137" w="913" h="11" measuredW="150" measuredH="100" zOrder="2" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text>Zeit</text>        </controlProperties>      </control>      <control controlID="27" controlTypeID="com.balsamiq.mockups::Button" x="90" y="55" w="-1" h="-1" measuredW="92" measuredH="28" zOrder="3" locked="false" isInGroup="-1">        <controlProperties>          <text>Interaktion</text>        </controlProperties>      </control>      <control controlID="28" controlTypeID="com.balsamiq.mockups::Arrow" x="147" y="93" w="137" h="110" measuredW="150" measuredH="100" zOrder="4" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text>Anfrage</text>        </controlProperties>      </control>      <control controlID="29" controlTypeID="com.balsamiq.mockups::Arrow" x="326" y="93" w="139" h="110" measuredW="150" measuredH="100" zOrder="5" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text>%3Chtml%3E...%3C/html%3E</text>        </controlProperties>      </control>      <control controlID="30" controlTypeID="com.balsamiq.mockups::Button" x="254" y="219" w="102" h="28" measuredW="102" measuredH="28" zOrder="6" locked="false" isInGroup="-1">        <controlProperties>          <text>Verarbeitung</text>        </controlProperties>      </control>      <control controlID="31" controlTypeID="com.balsamiq.mockups::Button" x="455" y="55" w="-1" h="-1" measuredW="92" measuredH="28" zOrder="7" locked="false" isInGroup="-1">        <controlProperties>          <text>Interaktion</text>        </controlProperties>      </control>      <control controlID="34" controlTypeID="com.balsamiq.mockups::Arrow" x="505" y="93" w="137" h="110" measuredW="150" measuredH="100" zOrder="8" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text>Anfrage</text>        </controlProperties>      </control>      <control controlID="35" controlTypeID="com.balsamiq.mockups::Arrow" x="684" y="93" w="139" h="110" measuredW="150" measuredH="100" zOrder="9" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text>%3Chtml%3E...%3C/html%3E</text>        </controlProperties>      </control>      <control controlID="36" controlTypeID="com.balsamiq.mockups::Button" x="612" y="219" w="102" h="28" measuredW="102" measuredH="28" zOrder="10" locked="false" isInGroup="-1">        <controlProperties>          <text>Verarbeitung</text>        </controlProperties>      </control>      <control controlID="37" controlTypeID="com.balsamiq.mockups::Button" x="813" y="55" w="-1" h="-1" measuredW="92" measuredH="28" zOrder="11" locked="false" isInGroup="-1">        <controlProperties>          <text>Interaktion</text>        </controlProperties>      </control>    </controls> </mockup>
  • <mockup version="1.0" skin="sketch" measuredW="1819" measuredH="766" mockupW="929" mockupH="342">    <controls>      <control controlID="38" controlTypeID="com.balsamiq.mockups::FieldSet" x="880" y="414" w="929" h="212" measuredW="200" measuredH="170" zOrder="0" locked="false" isInGroup="-1">        <controlProperties>          <text>Client</text>        </controlProperties>      </control>      <control controlID="39" controlTypeID="com.balsamiq.mockups::FieldSet" x="880" y="676" w="929" h="80" measuredW="200" measuredH="170" zOrder="1" locked="false" isInGroup="-1">        <controlProperties>          <text>Server</text>        </controlProperties>      </control>      <control controlID="40" controlTypeID="com.balsamiq.mockups::Arrow" x="880" y="647" w="914" h="10" measuredW="150" measuredH="100" zOrder="2" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text>Zeit</text>        </controlProperties>      </control>      <control controlID="41" controlTypeID="com.balsamiq.mockups::FieldSet" x="898" y="433" w="896" h="63" measuredW="200" measuredH="170" zOrder="3" locked="false" isInGroup="-1">        <controlProperties>          <text>User%20Interface</text>        </controlProperties>      </control>      <control controlID="42" controlTypeID="com.balsamiq.mockups::FieldSet" x="898" y="542" w="896" h="71" measuredW="200" measuredH="170" zOrder="4" locked="false" isInGroup="-1">        <controlProperties>          <text>AJAX%20Engine</text>        </controlProperties>      </control>      <control controlID="43" controlTypeID="com.balsamiq.mockups::Button" x="913" y="453" w="866" h="28" measuredW="106" measuredH="28" zOrder="5" locked="false" isInGroup="-1">        <controlProperties>          <text>Interaktionen</text>        </controlProperties>      </control>      <control controlID="44" controlTypeID="com.balsamiq.mockups::Button" x="913" y="569" w="866" h="28" measuredW="116" measuredH="28" zOrder="6" locked="false" isInGroup="-1">        <controlProperties>          <text>Verarbeitungen</text>        </controlProperties>      </control>      <control controlID="47" controlTypeID="com.balsamiq.mockups::Button" x="1051" y="710" w="102" h="28" measuredW="102" measuredH="28" zOrder="7" locked="false" isInGroup="-1">        <controlProperties>          <text>Verarbeitung</text>        </controlProperties>      </control>      <control controlID="48" controlTypeID="com.balsamiq.mockups::Arrow" x="1001" y="483" w="37" h="78" measuredW="150" measuredH="100" zOrder="8" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="49" controlTypeID="com.balsamiq.mockups::Arrow" x="996" y="601" w="77" h="95" measuredW="150" measuredH="100" zOrder="9" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="50" controlTypeID="com.balsamiq.mockups::Arrow" x="1113" y="607" w="92" h="94" measuredW="150" measuredH="100" zOrder="10" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text>%7B%20data%3A%20%5B%201%2C%202%20%5D%20%7D</text>        </controlProperties>      </control>      <control controlID="53" controlTypeID="com.balsamiq.mockups::Arrow" x="1059" y="490" w="72" h="75" measuredW="150" measuredH="100" zOrder="11" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="56" controlTypeID="com.balsamiq.mockups::Arrow" x="1198" y="486" w="37" h="78" measuredW="150" measuredH="100" zOrder="12" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="57" controlTypeID="com.balsamiq.mockups::Arrow" x="1256" y="493" w="72" h="75" measuredW="150" measuredH="100" zOrder="13" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="58" controlTypeID="com.balsamiq.mockups::Arrow" x="1395" y="486" w="37" h="78" measuredW="150" measuredH="100" zOrder="14" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="59" controlTypeID="com.balsamiq.mockups::Arrow" x="1453" y="493" w="72" h="75" measuredW="150" measuredH="100" zOrder="15" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="60" controlTypeID="com.balsamiq.mockups::Arrow" x="1577" y="486" w="37" h="78" measuredW="150" measuredH="100" zOrder="16" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="61" controlTypeID="com.balsamiq.mockups::Arrow" x="1635" y="493" w="72" h="75" measuredW="150" measuredH="100" zOrder="17" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="62" controlTypeID="com.balsamiq.mockups::Button" x="1311" y="710" w="102" h="28" measuredW="102" measuredH="28" zOrder="18" locked="false" isInGroup="-1">        <controlProperties>          <text>Verarbeitung</text>        </controlProperties>      </control>      <control controlID="63" controlTypeID="com.balsamiq.mockups::Arrow" x="1256" y="601" w="77" h="95" measuredW="150" measuredH="100" zOrder="19" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="64" controlTypeID="com.balsamiq.mockups::Arrow" x="1373" y="607" w="92" h="94" measuredW="150" measuredH="100" zOrder="20" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text>%7B%20data%3A%20%5B%201%2C%202%20%5D%20%7D</text>        </controlProperties>      </control>      <control controlID="65" controlTypeID="com.balsamiq.mockups::Button" x="1571" y="710" w="102" h="28" measuredW="102" measuredH="28" zOrder="21" locked="false" isInGroup="-1">        <controlProperties>          <text>Verarbeitung</text>        </controlProperties>      </control>      <control controlID="66" controlTypeID="com.balsamiq.mockups::Arrow" x="1516" y="601" w="77" h="95" measuredW="150" measuredH="100" zOrder="22" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="67" controlTypeID="com.balsamiq.mockups::Arrow" x="1633" y="607" w="92" h="94" measuredW="150" measuredH="100" zOrder="23" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>false</leftArrow>          <text>%7B%20data%3A%20%5B%201%2C%202%20%5D%20%7D</text>        </controlProperties>      </control>    </controls> </mockup>
  • Tipp: JavaScript ist eine dynamische Sprache
  • Java ist eine statische Sprache. Fehler werden zur compilezeit gefunden
  • GWT beherrscht nur eine Teilmenge der in Java 2 Standart + Enterprise Edition verfügbaren Klassen. JRE Emulated Classes <mockup version="1.0" skin="sketch" measuredW="953" measuredH="390" mockupW="911" mockupH="345">    <controls>      <control controlID="13" controlTypeID="com.balsamiq.mockups::FieldSet" x="32" y="35" w="200" h="129" measuredW="200" measuredH="170" zOrder="0" locked="false" isInGroup="-1">        <controlProperties>          <text>Java%20Runtime%20Library</text>        </controlProperties>      </control>      <control controlID="14" controlTypeID="com.balsamiq.mockups::FieldSet" x="662" y="35" w="281" h="154" measuredW="200" measuredH="170" zOrder="1" locked="false" isInGroup="-1">        <controlProperties>          <text>GWT%20Library</text>        </controlProperties>      </control>      <control controlID="17" controlTypeID="com.balsamiq.mockups::Canvas" x="343" y="39" w="200" h="135" measuredW="100" measuredH="70" zOrder="2" locked="false" isInGroup="-1"/>      <control controlID="18" controlTypeID="com.balsamiq.mockups::Arrow" x="246" y="103" w="82" h="10" measuredW="150" measuredH="100" zOrder="3" locked="false" isInGroup="-1">        <controlProperties>          <direction>top</direction>          <leftArrow>true</leftArrow>          <rightArrow>false</rightArrow>          <text/>        </controlProperties>      </control>      <control controlID="19" controlTypeID="com.balsamiq.mockups::Arrow" x="557" y="107" w="88" h="10" measuredW="150" measuredH="100" zOrder="4" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="20" controlTypeID="com.balsamiq.mockups::Canvas" x="343" y="307" w="199" h="73" measuredW="100" measuredH="70" zOrder="5" locked="false" isInGroup="-1"/>      <control controlID="21" controlTypeID="com.balsamiq.mockups::Arrow" x="425" y="186" w="35" h="100" measuredW="150" measuredH="100" zOrder="6" locked="false" isInGroup="-1">        <controlProperties>          <backgroundAlpha>1</backgroundAlpha>          <direction>top</direction>          <leftArrow>false</leftArrow>          <rightArrow>true</rightArrow>          <text>GWT%20Compiler</text>        </controlProperties>      </control>      <control controlID="22" controlTypeID="com.balsamiq.mockups::Button" x="47" y="53" w="170" h="28" measuredW="78" measuredH="28" zOrder="7" locked="false" isInGroup="-1">        <controlProperties>          <text>java.lang</text>        </controlProperties>      </control>      <control controlID="23" controlTypeID="com.balsamiq.mockups::Button" x="47" y="87" w="170" h="28" measuredW="73" measuredH="28" zOrder="8" locked="false" isInGroup="-1">        <controlProperties>          <text>java.util</text>        </controlProperties>      </control>      <control controlID="24" controlTypeID="com.balsamiq.mockups::Button" x="47" y="121" w="170" h="28" measuredW="62" measuredH="28" zOrder="9" locked="false" isInGroup="-1">        <controlProperties>          <text>java.io</text>        </controlProperties>      </control>      <control controlID="25" controlTypeID="com.balsamiq.mockups::Label" x="343" y="103" w="200" h="26" measuredW="155" measuredH="32" zOrder="10" locked="false" isInGroup="-1">        <controlProperties>          <align>center</align>          <size>20</size>          <text>Application%20code</text>        </controlProperties>      </control>      <control controlID="26" controlTypeID="com.balsamiq.mockups::Button" x="676" y="68" w="-1" h="-1" measuredW="63" measuredH="28" zOrder="11" locked="false" isInGroup="-1">        <controlProperties>          <text>Panels</text>        </controlProperties>      </control>      <control controlID="27" controlTypeID="com.balsamiq.mockups::Button" x="677" y="106" w="-1" h="-1" measuredW="73" measuredH="28" zOrder="12" locked="false" isInGroup="-1">        <controlProperties>          <text>Widgets</text>        </controlProperties>      </control>      <control controlID="28" controlTypeID="com.balsamiq.mockups::Button" x="750" y="68" w="-1" h="-1" measuredW="83" measuredH="28" zOrder="13" locked="false" isInGroup="-1">        <controlProperties>          <text>GWT-RPC</text>        </controlProperties>      </control>      <control controlID="29" controlTypeID="com.balsamiq.mockups::Button" x="754" y="106" w="-1" h="-1" measuredW="107" measuredH="28" zOrder="14" locked="false" isInGroup="-1">        <controlProperties>          <text>HTTP%20Request</text>        </controlProperties>      </control>      <control controlID="30" controlTypeID="com.balsamiq.mockups::Button" x="799" y="146" w="-1" h="-1" measuredW="57" measuredH="28" zOrder="15" locked="false" isInGroup="-1">        <controlProperties>          <text>JSON</text>        </controlProperties>      </control>      <control controlID="31" controlTypeID="com.balsamiq.mockups::Button" x="840" y="68" w="-1" h="-1" measuredW="51" measuredH="28" zOrder="16" locked="false" isInGroup="-1">        <controlProperties>          <text>XML</text>        </controlProperties>      </control>      <control controlID="32" controlTypeID="com.balsamiq.mockups::Button" x="862" y="146" w="-1" h="-1" measuredW="66" measuredH="28" zOrder="17" locked="false" isInGroup="-1">        <controlProperties>          <text>History</text>        </controlProperties>      </control>      <control controlID="33" controlTypeID="com.balsamiq.mockups::Button" x="868" y="106" w="-1" h="-1" measuredW="50" measuredH="28" zOrder="18" locked="false" isInGroup="-1">        <controlProperties>          <text>L18n</text>        </controlProperties>      </control>      <control controlID="34" controlTypeID="com.balsamiq.mockups::Button" x="676" y="146" w="-1" h="-1" measuredW="117" measuredH="28" zOrder="19" locked="false" isInGroup="-1">        <controlProperties>          <text>RequestFactory</text>        </controlProperties>      </control>      <control controlID="35" controlTypeID="com.balsamiq.mockups::Label" x="343" y="310" w="200" h="32" measuredW="103" measuredH="32" zOrder="20" locked="false" isInGroup="-1">        <controlProperties>          <align>center</align>          <size>20</size>          <text>JavaScript</text>        </controlProperties>      </control>      <control controlID="36" controlTypeID="com.balsamiq.mockups::Label" x="343" y="77" w="200" h="26" measuredW="47" measuredH="32" zOrder="21" locked="false" isInGroup="-1">        <controlProperties>          <align>center</align>          <size>20</size>          <text>Java</text>        </controlProperties>      </control>      <control controlID="37" controlTypeID="com.balsamiq.mockups::Label" x="343" y="342" w="200" h="31" measuredW="106" measuredH="32" zOrder="22" locked="false" isInGroup="-1">        <controlProperties>          <align>center</align>          <size>20</size>          <text>Application</text>        </controlProperties>      </control>    </controls> </mockup>
  • PRETTY zum debuggen OBFUSCATED Schutz/Performance
  • Interfaces Property Files
  • Client und Server implementieren Interface Serialisierung (Shared kram)
  • MVP ermöglicht Trennung von Code (siehe Google Tech Talk)
  • Warum GWT-Designer? Was ist GWT-Designer? Wie funktioniert GWT-Designer -> Video Support für GWT, Smart-GWT, Ext-GWT, GWT-Ext
  • Warum GWT-Designer? Was ist GWT-Designer? Wie funktioniert GWT-Designer -> Video Support für GWT, Smart-GWT, Ext-GWT, GWT-Ext
  • <mockup version="1.0" skin="sketch" measuredW="878" measuredH="428" mockupW="813" mockupH="390">    <controls>      <control controlID="38" controlTypeID="com.balsamiq.mockups::Button" x="55" y="28" w="562" h="53" measuredW="216" measuredH="28" zOrder="0" locked="false" isInGroup="-1">        <controlProperties>          <text>Java%20Language%2C%20Tools%20%26%20Runtime</text>        </controlProperties>      </control>      <control controlID="39" controlTypeID="com.balsamiq.mockups::Button" x="67" y="154" w="-1" h="-1" measuredW="129" measuredH="28" zOrder="1" locked="false" isInGroup="-1">        <controlProperties>          <text>Viele%20Tools%20%26%20Libs</text>        </controlProperties>      </control>      <control controlID="40" controlTypeID="com.balsamiq.mockups::Button" x="277" y="154" w="-1" h="-1" measuredW="122" measuredH="28" zOrder="2" locked="false" isInGroup="-1">        <controlProperties>          <text>Gro%DFartige%20IDEs</text>        </controlProperties>      </control>      <control controlID="41" controlTypeID="com.balsamiq.mockups::Button" x="457" y="154" w="-1" h="-1" measuredW="164" measuredH="28" zOrder="3" locked="false" isInGroup="-1">        <controlProperties>          <text>Statische%20Code%20Analyse</text>        </controlProperties>      </control>      <control controlID="42" controlTypeID="com.balsamiq.mockups::Button" x="55" y="258" w="-1" h="-1" measuredW="162" measuredH="28" zOrder="4" locked="false" isInGroup="-1">        <controlProperties>          <text>Leverage%20Existing%20work</text>        </controlProperties>      </control>      <control controlID="43" controlTypeID="com.balsamiq.mockups::Button" x="63" y="368" w="-1" h="-1" measuredW="149" measuredH="28" zOrder="5" locked="false" isInGroup="-1">        <controlProperties>          <text>Schnellere%20Lieferung</text>        </controlProperties>      </control>      <control controlID="44" controlTypeID="com.balsamiq.mockups::Button" x="259" y="258" w="-1" h="-1" measuredW="169" measuredH="28" zOrder="6" locked="false" isInGroup="-1">        <controlProperties>          <text>Entwickler%20Produktivit%E4t</text>        </controlProperties>      </control>      <control controlID="45" controlTypeID="com.balsamiq.mockups::Button" x="267" y="368" w="154" h="28" measuredW="146" measuredH="28" zOrder="7" locked="false" isInGroup="-1">        <controlProperties>          <text>Schnellere%20Iteration</text>        </controlProperties>      </control>      <control controlID="46" controlTypeID="com.balsamiq.mockups::Button" x="453" y="243" w="-1" h="-1" measuredW="164" measuredH="28" zOrder="8" locked="false" isInGroup="-1">        <controlProperties>          <text>Compile%20Time%20Validation</text>        </controlProperties>      </control>      <control controlID="48" controlTypeID="com.balsamiq.mockups::Button" x="463" y="278" w="-1" h="-1" measuredW="147" measuredH="28" zOrder="9" locked="false" isInGroup="-1">        <controlProperties>          <text>Bessere%20Optimierung</text>        </controlProperties>      </control>      <control controlID="49" controlTypeID="com.balsamiq.mockups::Button" x="491" y="353" w="-1" h="-1" measuredW="106" measuredH="28" zOrder="10" locked="false" isInGroup="-1">        <controlProperties>          <text>Weniger%20Bugs</text>        </controlProperties>      </control>      <control controlID="50" controlTypeID="com.balsamiq.mockups::Button" x="483" y="390" w="-1" h="-1" measuredW="126" measuredH="28" zOrder="11" locked="false" isInGroup="-1">        <controlProperties>          <text>Schnellerer%20Code</text>        </controlProperties>      </control>      <control controlID="51" controlTypeID="com.balsamiq.mockups::Arrow" x="126" y="188" w="10" h="61" measuredW="150" measuredH="100" zOrder="12" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="52" controlTypeID="com.balsamiq.mockups::Arrow" x="333" y="188" w="10" h="61" measuredW="150" measuredH="100" zOrder="13" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="53" controlTypeID="com.balsamiq.mockups::Arrow" x="530" y="188" w="10" h="46" measuredW="150" measuredH="100" zOrder="14" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="54" controlTypeID="com.balsamiq.mockups::Arrow" x="333" y="295" w="10" h="54" measuredW="150" measuredH="100" zOrder="15" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="55" controlTypeID="com.balsamiq.mockups::Arrow" x="530" y="311" w="10" h="34" measuredW="150" measuredH="100" zOrder="16" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="56" controlTypeID="com.balsamiq.mockups::Arrow" x="126" y="295" w="10" h="54" measuredW="150" measuredH="100" zOrder="17" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="57" controlTypeID="com.balsamiq.mockups::Label" x="228" y="366" w="-1" h="-1" measuredW="16" measuredH="32" zOrder="18" locked="false" isInGroup="-1">        <controlProperties>          <size>20</size>          <text>+</text>        </controlProperties>      </control>      <control controlID="58" controlTypeID="com.balsamiq.mockups::Label" x="437" y="366" w="-1" h="-1" measuredW="16" measuredH="32" zOrder="19" locked="false" isInGroup="-1">        <controlProperties>          <size>20</size>          <text>+</text>        </controlProperties>      </control>      <control controlID="59" controlTypeID="com.balsamiq.mockups::Label" x="632" y="366" w="-1" h="-1" measuredW="15" measuredH="32" zOrder="20" locked="false" isInGroup="-1">        <controlProperties>          <size>20</size>          <text>%3D</text>        </controlProperties>      </control>      <control controlID="61" controlTypeID="com.balsamiq.mockups::Button" x="693" y="353" w="175" h="65" measuredW="176" measuredH="28" zOrder="21" locked="false" isInGroup="-1">        <controlProperties>          <text>Benutzer.zufriedenheit++</text>        </controlProperties>      </control>      <control controlID="62" controlTypeID="com.balsamiq.mockups::Arrow" x="126" y="88" w="10" h="51" measuredW="150" measuredH="100" zOrder="22" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="63" controlTypeID="com.balsamiq.mockups::Arrow" x="333" y="88" w="10" h="51" measuredW="150" measuredH="100" zOrder="23" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="64" controlTypeID="com.balsamiq.mockups::Arrow" x="530" y="88" w="10" h="51" measuredW="150" measuredH="100" zOrder="24" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>    </controls> </mockup>
  • Permutationen      Lokalisierung      Browserspezifischer Code <mockup version="1.0" skin="sketch" measuredW="890" measuredH="652" mockupW="763" mockupH="555">    <controls>      <control controlID="13" controlTypeID="com.balsamiq.mockups::Button" x="413" y="348" w="-1" h="-1" measuredW="110" measuredH="28" zOrder="0" locked="false" isInGroup="-1">        <controlProperties>          <text>GWT-Compiler</text>        </controlProperties>      </control>      <control controlID="18" controlTypeID="com.balsamiq.mockups::Arrow" x="483" y="396" w="98" h="138" measuredW="150" measuredH="100" zOrder="1" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <rightArrow>true</rightArrow>          <text/>        </controlProperties>      </control>      <control controlID="19" controlTypeID="com.balsamiq.mockups::Arrow" x="541" y="371" w="245" h="163" measuredW="150" measuredH="100" zOrder="2" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <rightArrow>true</rightArrow>          <text/>        </controlProperties>      </control>      <control controlID="20" controlTypeID="com.balsamiq.mockups::Arrow" x="390" y="396" w="60" h="138" measuredW="150" measuredH="100" zOrder="3" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>true</leftArrow>          <rightArrow>false</rightArrow>          <text/>        </controlProperties>      </control>      <control controlID="21" controlTypeID="com.balsamiq.mockups::Arrow" x="195" y="371" w="195" h="163" measuredW="150" measuredH="100" zOrder="4" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>true</leftArrow>          <rightArrow>false</rightArrow>          <text/>        </controlProperties>      </control>      <control controlID="22" controlTypeID="com.balsamiq.mockups::Button" x="342" y="114" w="-1" h="-1" measuredW="75" measuredH="28" zOrder="19" locked="false" isInGroup="-1">        <controlProperties>          <text>Klasse%20A</text>        </controlProperties>      </control>      <control controlID="23" controlTypeID="com.balsamiq.mockups::Button" x="342" y="142" w="-1" h="-1" measuredW="74" measuredH="28" zOrder="20" locked="false" isInGroup="-1">        <controlProperties>          <text>Klasse%20B</text>        </controlProperties>      </control>      <control controlID="24" controlTypeID="com.balsamiq.mockups::Button" x="342" y="170" w="-1" h="-1" measuredW="75" measuredH="28" zOrder="21" locked="false" isInGroup="-1">        <controlProperties>          <text>Klasse%20C</text>        </controlProperties>      </control>      <control controlID="25" controlTypeID="com.balsamiq.mockups::FieldSet" x="117" y="548" w="173" h="94" measuredW="200" measuredH="170" zOrder="5" locked="false" isInGroup="-1">        <controlProperties>          <text>Internet%20Explorer</text>        </controlProperties>      </control>      <control controlID="26" controlTypeID="com.balsamiq.mockups::Button" x="129" y="571" w="-1" h="-1" measuredW="146" measuredH="28" zOrder="6" locked="false" isInGroup="-1">        <controlProperties>          <text>16..1879B.cache.html</text>        </controlProperties>      </control>      <control controlID="27" controlTypeID="com.balsamiq.mockups::Button" x="129" y="599" w="-1" h="-1" measuredW="146" measuredH="28" zOrder="7" locked="false" isInGroup="-1">        <controlProperties>          <text>08..6D53F.cache.png</text>        </controlProperties>      </control>      <control controlID="28" controlTypeID="com.balsamiq.mockups::FieldSet" x="320" y="548" w="173" h="94" measuredW="200" measuredH="170" zOrder="8" locked="false" isInGroup="-1">        <controlProperties>          <text>Mozilla%20Firefox</text>        </controlProperties>      </control>      <control controlID="29" controlTypeID="com.balsamiq.mockups::Button" x="328" y="571" w="-1" h="-1" measuredW="157" measuredH="28" zOrder="9" locked="false" isInGroup="-1">        <controlProperties>          <text>E6..F144D3.cache.html</text>        </controlProperties>      </control>      <control controlID="30" controlTypeID="com.balsamiq.mockups::Button" x="328" y="599" w="-1" h="-1" measuredW="155" measuredH="28" zOrder="10" locked="false" isInGroup="-1">        <controlProperties>          <text>56..4224D3.cache.png</text>        </controlProperties>      </control>      <control controlID="31" controlTypeID="com.balsamiq.mockups::FieldSet" x="513" y="548" w="173" h="94" measuredW="200" measuredH="170" zOrder="11" locked="false" isInGroup="-1">        <controlProperties>          <text>Safari%20/%20Chrome</text>        </controlProperties>      </control>      <control controlID="32" controlTypeID="com.balsamiq.mockups::Button" x="523" y="571" w="-1" h="-1" measuredW="153" measuredH="28" zOrder="12" locked="false" isInGroup="-1">        <controlProperties>          <text>B1..B1E06B.cache.html</text>        </controlProperties>      </control>      <control controlID="33" controlTypeID="com.balsamiq.mockups::Button" x="523" y="599" w="-1" h="-1" measuredW="156" measuredH="28" zOrder="13" locked="false" isInGroup="-1">        <controlProperties>          <text>0D..6DF3C0.cache.png</text>        </controlProperties>      </control>      <control controlID="34" controlTypeID="com.balsamiq.mockups::FieldSet" x="707" y="548" w="173" h="94" measuredW="200" measuredH="170" zOrder="14" locked="false" isInGroup="-1">        <controlProperties>          <text>Opera</text>        </controlProperties>      </control>      <control controlID="35" controlTypeID="com.balsamiq.mockups::Button" x="715" y="571" w="-1" h="-1" measuredW="157" measuredH="28" zOrder="15" locked="false" isInGroup="-1">        <controlProperties>          <text>E3..A353B4.cache.html</text>        </controlProperties>      </control>      <control controlID="36" controlTypeID="com.balsamiq.mockups::Button" x="715" y="599" w="-1" h="-1" measuredW="152" measuredH="28" zOrder="16" locked="false" isInGroup="-1">        <controlProperties>          <text>00..D7FB7F.cache.png</text>        </controlProperties>      </control>      <control controlID="37" controlTypeID="com.balsamiq.mockups::Button" x="502" y="108" w="95" h="28" measuredW="95" measuredH="28" zOrder="22" locked="false" isInGroup="-1">        <controlProperties>          <text>image01.png</text>        </controlProperties>      </control>      <control controlID="38" controlTypeID="com.balsamiq.mockups::Button" x="502" y="136" w="93" h="28" measuredW="93" measuredH="28" zOrder="23" locked="false" isInGroup="-1">        <controlProperties>          <text>image02.gif</text>        </controlProperties>      </control>      <control controlID="39" controlTypeID="com.balsamiq.mockups::Button" x="502" y="164" w="95" h="28" measuredW="95" measuredH="28" zOrder="24" locked="false" isInGroup="-1">        <controlProperties>          <text>image03.jpg</text>        </controlProperties>      </control>      <control controlID="40" controlTypeID="com.balsamiq.mockups::FieldSet" x="328" y="87" w="107" h="126" measuredW="200" measuredH="170" zOrder="17" locked="false" isInGroup="-1">        <controlProperties>          <text>Source%20Code</text>        </controlProperties>      </control>      <control controlID="41" controlTypeID="com.balsamiq.mockups::FieldSet" x="481" y="89" w="131" h="118" measuredW="200" measuredH="170" zOrder="18" locked="false" isInGroup="-1">        <controlProperties>          <text>Resources</text>        </controlProperties>      </control>      <control controlID="42" controlTypeID="com.balsamiq.mockups::Arrow" x="383" y="222" w="61" h="109" measuredW="150" measuredH="100" zOrder="25" locked="false" isInGroup="-1">        <controlProperties>          <leftArrow>false</leftArrow>          <text/>        </controlProperties>      </control>      <control controlID="44" controlTypeID="com.balsamiq.mockups::Arrow" x="493" y="221" w="35" h="109" measuredW="150" measuredH="100" zOrder="26" locked="false" isInGroup="-1">        <controlProperties>          <direction>bottom</direction>          <leftArrow>true</leftArrow>          <rightArrow>false</rightArrow>          <text/>        </controlProperties>      </control>    </controls> </mockup>
  • GWT

    1. 1. Google Webtool Kit Übersicht
    2. 2. Was ist GWT?GWT ist ein Framework für AJAX-Anwendungen, welches denEntwickler in die Lage versetzt, Rich Internet Applications in Java zu entwickeln.Der GWT-Compiler generiert aus dem Java Codeden spezifischen HTML- und JavaScript Code für diejeweiligen Browser.
    3. 3. Warum AJAX?
    4. 4. Warum AJAX?
    5. 5. Finde den Fehler
    6. 6. Fehler gefunden
    7. 7. JavaScript = Schmerz...cross-browser...memory leak...loading latency...bugs (dynamic language)...security
    8. 8. Von Java zu JavaScript
    9. 9. Von Java zu JavaScriptJava Code:GWT compiler (-style PRETTY)GWT compiler (-style OBFUSCATED)
    10. 10. FeaturesUser InterfacesHistory ManagementLokalisierungClient/Server-KommunikationJavaScript Native InterfaceUnit TestingOptimization
    11. 11. User Interfaces GWT GWT Incubator _________________________________ SmartGWT GWT-Ext Ext-GWT und viele mehr...
    12. 12. Aufbau UI mit Code
    13. 13. Aufbau UI mit UIBinder
    14. 14. Styling mit CSS
    15. 15. Styling mit CSS
    16. 16. History ManagementAJAX-Anwendungen verwenden meistens keineBrowser History (==> Frust).Demo
    17. 17. LokalisierungConstants    helloWorld = Hallo, WeltMessages    goodBye = Adios, {0}Plural    @DefaultText(...)    @PluralText(...)UIBinder Support <ui:msg description="helloWorld">Hello, world.</ui:msg></div>Demo
    18. 18. Client/Server Kommunikation
    19. 19. HTTP-Requestsz.B.: PHP als Backend und XML, JSONoder ein eigenes Format.
    20. 20. GWT-RPCWarum nicht eine Sprache sprechen?
    21. 21. JavaScript Native InterfaceJava Methode direkt in JavaScript implementieren.Auf Java Members/Methoden zugreifen.Parameter zwischen Java und JavaScript übergeben.--> Einbindung von (bestehenden) JavaScript Libs
    22. 22. Unit TestingGWTTestCase für die ViewsJUnit für Presenter und ModelSelenium
    23. 23. OptimierungDelayed LogicCode SplittingClientBundle
    24. 24. ToolsEclipse PluginGWT DesignerSpeed Tracer
    25. 25. GWT Designer
    26. 26. Warum mit Java entwickeln?
    27. 27. VorteileClient und Server können eine Sprache verwenden(GWTRPC).Java Entwickler Tools (Eclipse, PMD, JUnit etc).Debugging UmgebungCross-Browser-Support
    28. 28. NachteileGoogle behält sich vor die Lizenzbestimmungen des GWT-Compilers zu ändern.Widgets teilweise sehr groß(bis zu 55k pro Widget).Es wird nur ein Teil der Java APIemuliert.
    29. 29. Größe der Komponenten
    30. 30. Fragen ?
    31. 31. Google App EngineWeb Application Hosting Service
    32. 32. Google Infrastrukturautomatische und beliebige Skalierung von WebApps
    33. 33. Development Tools• Java SDK o Servlet Container• Python SDK o CGI Runtime Environment• Google Eclipse Plugin o One-Click-Deployment o Simulation aller Services in lokaler Sandbox o Leistungsfähiger Debugger
    34. 34. Google Datastore• Bigtable (Object Database)• Google Earth, Google Finance, Google Search
    35. 35. Keine relationale Datenbank Umdenken notwendig
    36. 36. Queries• OOP / Sql-like Syntax• Schnelle Zugriffe bei Selects auf den KEY• Automatische Index-Erzeugung o XML basierte Konfiguration o Google weiß im Voraus welche Queries angefragt werden können o Beim Schreiben werden Indexe automatisch aktualisiert
    37. 37. Bulk-Loader• Python-Script• Upload / Downloading Data• Backups
    38. 38. Einschränkungen• Indexerzeugung beim deployen kostet Zeit• Kein bulk-delete oder Massen-lesen / -schreiben
    39. 39. Standards: JDO / JPA / Annotations
    40. 40. Standards: JDO / JPA / Annotations
    41. 41. Kosten
    42. 42. • automatische Skalierung• Konzentration auf Gamelogik• kürzere Entwicklungszeiten• kein administrativer Overhead• keine Betriebskosten solange App kein Erfolg• IDE (Build, Deploy, Sandbox integriert)• perfektes Zusammenspiel mit GWT
    43. 43. • Keine long running background processes• Kein Streaming• Kein FTP, Sockets ...• Datastore: Keine Volltext-Suche• max. 30 sec/req• max 10 MB/req• max. 3.000 Dateien (Workaroudns ZIP, JAR)• hohe Abhänigkeit von Google-Services
    44. 44. Fragen ?
    45. 45. Deferred Binding

    ×