SlideShare ist ein Scribd-Unternehmen logo
Durchgestartet?
Eine Einführung in Google App Engine / Java – Reloaded!


    Dr. Halil-Cem Gürsoy
                      adesso AG
Der Referent

• Insgesamt über 10 Jahre Beratung und Entwicklung
  rund um Java, davor Entwicklung im
  Forschungsumfeld
• Senior Software Engineer bei adesso AG, Dortmund
• Schwerpunkt EAI und SOA-Projekte im JEE
  Umfeld, aber auch klassische JEE-Projekte
• Autor und Referent auf Konferenzen




Herbstcampus 2011 – GAE Reloaded                     2
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    3
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    4
Cloud? Was ist eine Cloud?




  Quelle: http://geekandpoke.typepad.com/geekandpoke/2008/07/the-cloud-thing.html
Herbstcampus 2011 – GAE Reloaded                                                    5
Die „Cloud“

• „Cloud Computing“ …

…bezeichnet primär den Ansatz, abstrahierte IT-
 Infrastrukturen (z. B. Rechenkapazität,
 Datenspeicher), fertige Programmpakete und
 Programmierumgebungen dynamisch an den Bedarf
 angepasst über Netzwerk zur Verfügung zu stellen.

(Quelle: Wikipedia.de)



Herbstcampus 2011 – GAE Reloaded                     6
IaaS

• IaaS = „Infrastructure as a Service“
• Rechnerinfrastruktur wird zur Verfügung
  dynamisch gestellt
• Die Infrastruktur steht „irgendwo“ virtuell in der
  Cloud
• Weiterentwicklung von klassischen virtuellen
  Maschinen (wie VirtualBox, VMWare usw.)
• Bekanntester Anbieter: Amazon mit EC2
  • Zahlen nur bei Nutzung
  • Verschiedene Images verfügbar


Herbstcampus 2011 – GAE Reloaded                       7
SaaS

• „Software as a Service“
• Software wird über Cloud, meist Webbasiert
• Keine lokale Installation
• Beispiele:
  • Google Docs
  • CloudBees DEV@Cloud




Herbstcampus 2011 – GAE Reloaded               8
PaaS

• „Platform as a Service“
• Es wird eine Plattform (Laufzeitumgebung) in einer
  Cloud angeboten
• Keine Berührung mit dem darunterliegenden
  Betriebssystem
• Beispiele
  • Windows Azure
  • Cloud Foundry
  • Google App Engine




Herbstcampus 2011 – GAE Reloaded                       9
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    10
Google App Engine

• Klassische PaaS-Cloud
• Die Plattform ist eine Runtime-Umgebung für
  Webapplikationen
• Initial wurde „nur“ Python unterstützt
• Seit 2009 (in Beta) auch die Unterstützung von Java
  (Java 5 & 6)
  • Eingeschränkt!
  • Details später…
• Go



Herbstcampus 2011 – GAE Reloaded                        11
GAE/J

• GAE/J ist eine JRE 6
  • Läuft in einer Sandbox mit Restriktionen
• Unterstützt out of the box
  • Servlet API 2.4 (*)
  • JSF 1.1, 2.0 (*)
  • JSP (*)
  • JDO 2.3 (?!)
  • JPA 1(*)
• Support für diverse Google Services
  (*): Eingeschränkt…




Herbstcampus 2011 – GAE Reloaded               12
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    13
Getting started…

• Ein Google-Account
  • Ohne Useraccount keine GAE
• Eine Handynummer
  • Aktivierungs-SMS
• Eclipse (ab Europa / 3.3 unterstützt)
  • Indigo ist OK
  • Alternativ NetBeans oder CLI
• App Engine SDK oder Eclipse Plugin
  • Aktuelle Version der SDK ist 1.3.7 1.5.3 (!)




Herbstcampus 2011 – GAE Reloaded                   14
Anmelden, Installation

• https://appengine.google.com/
• Google Account eingeben
• Handynummer eingeben
  • muss angegeben werden, um GAE freizuschalten
• Installation Eclipse Plugin:
  http://code.google.com/intl/de-DE/eclipse/docs/download.html
  • Eclipse Update Sites dort




Herbstcampus 2011 – GAE Reloaded                             15
„Hallo Welt!“

• Neues Projekt anlegen




Herbstcampus 2011 – GAE Reloaded   16
„HalloWelt“

• GWT sollte (vorerst)
  nicht ausgewählt sein
• Hier Auswahl der
  GAE API 1.5.0




Herbstcampus 2011 – GAE Reloaded   17
Und das fertige Projekt…

• Default-Pakete und
  Libs werden
  eingefügt
• JDO ist Persistenz-
  Default
• Voreinstellungen für
  Konfigurationen




Herbstcampus 2011 – GAE Reloaded   18
Servlet sagt „Hello, World“
package de.adesso.hgu.hc2010.hallowelt;

import java.io.IOException;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class HalloWeltServlet extends HttpServlet {
     public void doGet(HttpServletRequest req,
                       HttpServletResponse resp) throws IOException {
          resp.setContentType("text/plain");
          resp.getWriter().println("Hello, world");
     }
}

• Starten der Applikation innerhalb von Eclipse
 (RunAs -> Web Application
• http://localhost:8888 ist Standard



Herbstcampus 2011 – GAE Reloaded                                        19
Applikation bei GAE registrieren

• https://appengine.google.com/start/createapp




Herbstcampus 2011 – GAE Reloaded                 20
DD anpassen

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <application>hc2011hallowelt</application>
      <version>1</version>


      <!-- Configure java.util.logging -->
      <system-properties>
             <property name="java.util.logging.config.file“
                                   value="WEB-INF/logging.properties"/>
      </system-properties>


</appengine-web-app>




Herbstcampus 2011 – GAE Reloaded                                          21
GAE Deployment




Herbstcampus 2011 – GAE Reloaded   22
GAE Postdeployment

• GAE DashBoard gibt Infos über Zugriffe,
  verbrauchte Quota, Logs usw.
• Verwaltung von Versionen einer Applikation
  • Fallback auf alte Version möglich
• Aufruf der Applikation über
  http://halloherbstcampus.appspot.com/helloherbstcampus




Herbstcampus 2011 – GAE Reloaded                       23
GAE Dashboard




Herbstcampus 2011 – GAE Reloaded   24
Google API's

• Es stehen viele Google API's zur Verfügung
  •   Analytics Data Export
  •   Apps for your Domain
  •   Books
  •   Calendar
  •   Contacts
  •   Spreadsheet
  •   Webmaster Tools
  •   ...und einigemehr




Herbstcampus 2011 – GAE Reloaded               25
Google Services

• Blobstore
  • Um sehr große Datenblöcke zu speichern
• Mail
  • Mails senden und empfangen
• Memcache
  • Verteiltes in-memory cache
  • Implementiert JSR 107 (JCache)
• User
  • Authentifizierung gegen Google und OpenID Accounts
• XMPP
  • Versenden / Empfangen von XMPP-Messages (GTalk,
    Jabber)

Herbstcampus 2011 – GAE Reloaded                         26
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    27
GAE - Persitenz

• Persistenz über JDO und JPA möglich
  • Als ORM kommt DataNucleus in der Version 1.1 (aktuell ist
     2.x) zum Einsatz (http://www.datanucleus.org)
• In GAE/DN JDO besser dokumentiert als JPA
  (immer noch!)
• Alternativ gibt es eine Lowlevel-API
• Im Hintergrund keine SQL-Datenbank sondern
  Google BigTable
• In memory SQL-DB‘s sind möglich
• Enhancement der Entity-Klassen wegen
  DataNucleus (JDO / JPA)
Herbstcampus 2011 – GAE Reloaded                                28
GAE - JPA

• In persistence.xml Konfiguration des transaktionalen Verhaltens.
• Default:
<persistence-unit name="transactions-optional">


  <provider>org.datanucleus.store.appengine.jpa.DatastorePersistencePro
  vider</provider>
  <properties>
  <property name="datanucleus.NontransactionalRead"
  value="true" />
  <property name="datanucleus.NontransactionalWrite”
  value="true" />
  <property name="datanucleus.ConnectionURL”
  value="appengine" />
  </properties>
</persistence-unit>


Herbstcampus 2011 – GAE Reloaded                                      29
GAE – JPA-Einschränkungen

• Keine @ManyToMany
• Keine Join-Queries
• Bei Vererbung keine Unterstützung für
  • InheritanceType.SINGLE_TABLE
  • InheritanceType.JOINED
• Keine Aggregate queries (group by, having, sum,
  avg, min, max)
• Keine Polymorphe Queries




Herbstcampus 2011 – GAE Reloaded                    30
GAE – Und paar Punkte mehr

• Resultsets sind nicht gefüllt, daher:
      resultSet.size();
• Id-Felder:
   Unsupported primary key type: long

• GenerationType.TABLE:
  javax.persistence.PersistenceException: Transaction
  is still active.

• Klappt besser:
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Key key;



Herbstcampus 2011 – GAE Reloaded                        31
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    32
'JRE Class White List'

• Die ‚JRE Class White List‘ definiert die Klassen,
  die von der GAE Sandbox unterstützt werden
     http://code.google.com/intl/de-DE/appengine/docs/java/jrewhitelist.html
• Die Applikation darf nicht
  • Eigene Threads starten
  • Keine Dateien schreiben
  • Keine „willkürlichen“ Netzwerkverbindungen aufbauen




Herbstcampus 2011 – GAE Reloaded                                               33
"Will it play?"

• Übersicht über gängige Frameworks und Sprache
    http://code.google.com/p/googleappengine/wiki/WillItPlayInJava
• Keine Unterstützung für
  • JAX-RPC
  • JDBC, JMS, JNDI, RMI
• Hibernate – Inkompatibel
• Groovy, Scala usw: Supported (kein Akka!)

• JAX-WS inzwischen teilweise vorhanden
    http://code.google.com/p/googleappengine/issues/detail?id=1270
             http://code.google.com/appengine/articles/soap.html



Herbstcampus 2011 – GAE Reloaded                                     34
Workaround...

• Umgehung Whitelist / erzwungene Kompatibilität
  • JARJAR (http://code.google.com/p/jarjar/)
  • Erstellt eine JAR, Umbenennung von Paketen
  • Bytecode-Transformation für nicht mehr gültige Referenzen
    auf umbenannte Pakete




Herbstcampus 2011 – GAE Reloaded                                35
Spring…

• Spring = Semi-Kompatibel (nicht alle JARs)
• Spring MVC-Applikation mit Spring Beans
• Setup: Spring JARs in WAR/WEB-INF/lib kopieren und in CP
  aufnehmen
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/springgae/*</url-pattern>
    </servlet-mapping>



• Beispiel im Cook Book:            http://peterbacklund.blogspot.com/2009/04/running-spring-on-google-app-engine.html




Herbstcampus 2011 – GAE Reloaded                                                                         36
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    37
Quota

• GAE ist kostenlos innerhalb der Quota-Grenzen
• Stärkere Ausnutzung der Infrastruktur gegen
  Bezahlung möglich, muss explizit eingeschaltet
  werden
• Quota verbraucht = HTTP 403 FORBIDDEN oder
  Exception
• „Per minute quota“ – ca. 500 Req. / min.




Herbstcampus 2011 – GAE Reloaded                   38
Quota – weitere Details

Ressource                          Quota
Request size                       10 mb
Response size                      10 mb
Request max. Dauer                 30 sec.
Maximale Anzahl Files              3000
Maximale Dateigröße                10 mb




Herbstcampus 2011 – GAE Reloaded             39
Performance

• Max. 500 req. / sec. (Quota)
• Simpler Test (schreiben und lesen eines Datensatzes)




Herbstcampus 2011 – GAE Reloaded                         40
Agenda

• Was ist überhaupt eine „Cloud“
• Die Google App Engine
• Getting started: „Hallo Welt“
• Persistenz in Google App Engine
• Limitierungen in GAE/J
• Quota und Performance
• Build-Tools




Herbstcampus 2011 – GAE Reloaded    41
Build…

• Ant wird unterstützt
  • Entity-Klassen müssen „manuell“ Enhanced werden, Ant-
     Task wird von DataNucleus angeboten
• Maven
  • Maven2 Plugin verfügbar
     • (http://code.google.com/p/maven-gae-plugin/)
    • Archtypes für JSP, GWT und Wicket-Projekte
  • Enhancement über Maven-Plugins von DataNucleus




Herbstcampus 2011 – GAE Reloaded                            42
Vielen Dank!

Dr. Halil-Cem Gürsoy
            adesso AG
    halil-cem.guersoy [at] adesso.de
               @hgutwit
           http://goo.gl/hljRS
Wir suchen Sie als
  Software Architekt (m/w)
  Projektleiter (m/w)
  Senior Software Engineer (m/w)


jobs@adesso.de
www.AAAjobs.de
     Herbstcampus 2011 – GAE Reloaded   44

Weitere ähnliche Inhalte

PDF
WebLogic im Docker Container
PDF
Die Java Plattform Strategie
PPTX
Fix & fertig: Best Practises für "XPages-Migranten"
PDF
DB-Schema-Evolution mit LiquiBase
PPTX
Wartbare Oberflächentests mit Open-Source-Software
PDF
Forms and Reports 12c - Processes and Automation in Development and Operations
PDF
b2performance berth
PDF
Tk03 Google App Engine Fr
WebLogic im Docker Container
Die Java Plattform Strategie
Fix & fertig: Best Practises für "XPages-Migranten"
DB-Schema-Evolution mit LiquiBase
Wartbare Oberflächentests mit Open-Source-Software
Forms and Reports 12c - Processes and Automation in Development and Operations
b2performance berth
Tk03 Google App Engine Fr

Andere mochten auch (20)

PDF
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
PPTX
Google App Engine - INTRO
PDF
Nuxeo WebEngine : Etude de cas
PDF
An introduction to Google's App Engine
PPTX
Google Cloud Platform. Google App Engine
PPTX
Search Engine Friendly Design (SEFD) - SMX München 2014
PDF
Google App Engine. Zwei Jahre im Produktiveinsatz
PPT
Google App Engine For Java
PDF
WordPress State of the Word 2012
PDF
Google App Engine
PDF
Introduction à Google App Engine - WAQ 2011
PPT
Cours Search Marketing - 1 Introduction - IAE Lille
PPTX
Cloud & Google app engine Presentation by Ngiambus Marcus
PPT
Web meets Location - Mobile Social Media Relations
PPTX
Intellectual Property Rights
PDF
RoomCloud Booking Engine
PDF
SEFD - Search Engine Friendly Design - SMX München 2015 Kai Spriestersbach
PPT
Codathlon Google App Engine
PPTX
Internal Combustion Engines - Construction and Working (All you need to know,...
PPT
Zk Framework
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
Google App Engine - INTRO
Nuxeo WebEngine : Etude de cas
An introduction to Google's App Engine
Google Cloud Platform. Google App Engine
Search Engine Friendly Design (SEFD) - SMX München 2014
Google App Engine. Zwei Jahre im Produktiveinsatz
Google App Engine For Java
WordPress State of the Word 2012
Google App Engine
Introduction à Google App Engine - WAQ 2011
Cours Search Marketing - 1 Introduction - IAE Lille
Cloud & Google app engine Presentation by Ngiambus Marcus
Web meets Location - Mobile Social Media Relations
Intellectual Property Rights
RoomCloud Booking Engine
SEFD - Search Engine Friendly Design - SMX München 2015 Kai Spriestersbach
Codathlon Google App Engine
Internal Combustion Engines - Construction and Working (All you need to know,...
Zk Framework
Anzeige

Mehr von adesso AG (20)

PDF
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
PDF
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
PDF
Mythos High Performance Teams
PPTX
A Business-Critical SharePoint Solution From adesso AG
PDF
Was Sie über NoSQL Datenbanken wissen sollten!
PDF
Continuous Delivery praktisch
PDF
Agilität, Snapshots und Continuous Delivery
PDF
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
PDF
Getriebene Anwendungslandschaften
PDF
Google App Engine JAX PaaS Parade 2013
PDF
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
PDF
OOP 2013 NoSQL Suche
PDF
NoSQL in der Cloud - Why?
PPTX
Lean web architecture mit jsf 2.0, cdi & co.
PDF
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
PDF
Zehn Hinweise für Architekten
PDF
Agile Praktiken
PDF
Java und Cloud - nicht nur mit PaaS
PDF
Neue EBusiness Perspektiven durch HTML5
PDF
CloudConf2011 Introduction to Google App Engine
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
Mythos High Performance Teams
A Business-Critical SharePoint Solution From adesso AG
Was Sie über NoSQL Datenbanken wissen sollten!
Continuous Delivery praktisch
Agilität, Snapshots und Continuous Delivery
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Getriebene Anwendungslandschaften
Google App Engine JAX PaaS Parade 2013
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
OOP 2013 NoSQL Suche
NoSQL in der Cloud - Why?
Lean web architecture mit jsf 2.0, cdi & co.
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Zehn Hinweise für Architekten
Agile Praktiken
Java und Cloud - nicht nur mit PaaS
Neue EBusiness Perspektiven durch HTML5
CloudConf2011 Introduction to Google App Engine
Anzeige

Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!

  • 1. Durchgestartet? Eine Einführung in Google App Engine / Java – Reloaded! Dr. Halil-Cem Gürsoy adesso AG
  • 2. Der Referent • Insgesamt über 10 Jahre Beratung und Entwicklung rund um Java, davor Entwicklung im Forschungsumfeld • Senior Software Engineer bei adesso AG, Dortmund • Schwerpunkt EAI und SOA-Projekte im JEE Umfeld, aber auch klassische JEE-Projekte • Autor und Referent auf Konferenzen Herbstcampus 2011 – GAE Reloaded 2
  • 3. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 3
  • 4. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 4
  • 5. Cloud? Was ist eine Cloud? Quelle: http://geekandpoke.typepad.com/geekandpoke/2008/07/the-cloud-thing.html Herbstcampus 2011 – GAE Reloaded 5
  • 6. Die „Cloud“ • „Cloud Computing“ … …bezeichnet primär den Ansatz, abstrahierte IT- Infrastrukturen (z. B. Rechenkapazität, Datenspeicher), fertige Programmpakete und Programmierumgebungen dynamisch an den Bedarf angepasst über Netzwerk zur Verfügung zu stellen. (Quelle: Wikipedia.de) Herbstcampus 2011 – GAE Reloaded 6
  • 7. IaaS • IaaS = „Infrastructure as a Service“ • Rechnerinfrastruktur wird zur Verfügung dynamisch gestellt • Die Infrastruktur steht „irgendwo“ virtuell in der Cloud • Weiterentwicklung von klassischen virtuellen Maschinen (wie VirtualBox, VMWare usw.) • Bekanntester Anbieter: Amazon mit EC2 • Zahlen nur bei Nutzung • Verschiedene Images verfügbar Herbstcampus 2011 – GAE Reloaded 7
  • 8. SaaS • „Software as a Service“ • Software wird über Cloud, meist Webbasiert • Keine lokale Installation • Beispiele: • Google Docs • CloudBees DEV@Cloud Herbstcampus 2011 – GAE Reloaded 8
  • 9. PaaS • „Platform as a Service“ • Es wird eine Plattform (Laufzeitumgebung) in einer Cloud angeboten • Keine Berührung mit dem darunterliegenden Betriebssystem • Beispiele • Windows Azure • Cloud Foundry • Google App Engine Herbstcampus 2011 – GAE Reloaded 9
  • 10. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 10
  • 11. Google App Engine • Klassische PaaS-Cloud • Die Plattform ist eine Runtime-Umgebung für Webapplikationen • Initial wurde „nur“ Python unterstützt • Seit 2009 (in Beta) auch die Unterstützung von Java (Java 5 & 6) • Eingeschränkt! • Details später… • Go Herbstcampus 2011 – GAE Reloaded 11
  • 12. GAE/J • GAE/J ist eine JRE 6 • Läuft in einer Sandbox mit Restriktionen • Unterstützt out of the box • Servlet API 2.4 (*) • JSF 1.1, 2.0 (*) • JSP (*) • JDO 2.3 (?!) • JPA 1(*) • Support für diverse Google Services (*): Eingeschränkt… Herbstcampus 2011 – GAE Reloaded 12
  • 13. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 13
  • 14. Getting started… • Ein Google-Account • Ohne Useraccount keine GAE • Eine Handynummer • Aktivierungs-SMS • Eclipse (ab Europa / 3.3 unterstützt) • Indigo ist OK • Alternativ NetBeans oder CLI • App Engine SDK oder Eclipse Plugin • Aktuelle Version der SDK ist 1.3.7 1.5.3 (!) Herbstcampus 2011 – GAE Reloaded 14
  • 15. Anmelden, Installation • https://appengine.google.com/ • Google Account eingeben • Handynummer eingeben • muss angegeben werden, um GAE freizuschalten • Installation Eclipse Plugin: http://code.google.com/intl/de-DE/eclipse/docs/download.html • Eclipse Update Sites dort Herbstcampus 2011 – GAE Reloaded 15
  • 16. „Hallo Welt!“ • Neues Projekt anlegen Herbstcampus 2011 – GAE Reloaded 16
  • 17. „HalloWelt“ • GWT sollte (vorerst) nicht ausgewählt sein • Hier Auswahl der GAE API 1.5.0 Herbstcampus 2011 – GAE Reloaded 17
  • 18. Und das fertige Projekt… • Default-Pakete und Libs werden eingefügt • JDO ist Persistenz- Default • Voreinstellungen für Konfigurationen Herbstcampus 2011 – GAE Reloaded 18
  • 19. Servlet sagt „Hello, World“ package de.adesso.hgu.hc2010.hallowelt; import java.io.IOException; import javax.servlet.http.*; @SuppressWarnings("serial") public class HalloWeltServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println("Hello, world"); } } • Starten der Applikation innerhalb von Eclipse (RunAs -> Web Application • http://localhost:8888 ist Standard Herbstcampus 2011 – GAE Reloaded 19
  • 20. Applikation bei GAE registrieren • https://appengine.google.com/start/createapp Herbstcampus 2011 – GAE Reloaded 20
  • 21. DD anpassen <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>hc2011hallowelt</application> <version>1</version> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file“ value="WEB-INF/logging.properties"/> </system-properties> </appengine-web-app> Herbstcampus 2011 – GAE Reloaded 21
  • 22. GAE Deployment Herbstcampus 2011 – GAE Reloaded 22
  • 23. GAE Postdeployment • GAE DashBoard gibt Infos über Zugriffe, verbrauchte Quota, Logs usw. • Verwaltung von Versionen einer Applikation • Fallback auf alte Version möglich • Aufruf der Applikation über http://halloherbstcampus.appspot.com/helloherbstcampus Herbstcampus 2011 – GAE Reloaded 23
  • 24. GAE Dashboard Herbstcampus 2011 – GAE Reloaded 24
  • 25. Google API's • Es stehen viele Google API's zur Verfügung • Analytics Data Export • Apps for your Domain • Books • Calendar • Contacts • Spreadsheet • Webmaster Tools • ...und einigemehr Herbstcampus 2011 – GAE Reloaded 25
  • 26. Google Services • Blobstore • Um sehr große Datenblöcke zu speichern • Mail • Mails senden und empfangen • Memcache • Verteiltes in-memory cache • Implementiert JSR 107 (JCache) • User • Authentifizierung gegen Google und OpenID Accounts • XMPP • Versenden / Empfangen von XMPP-Messages (GTalk, Jabber) Herbstcampus 2011 – GAE Reloaded 26
  • 27. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 27
  • 28. GAE - Persitenz • Persistenz über JDO und JPA möglich • Als ORM kommt DataNucleus in der Version 1.1 (aktuell ist 2.x) zum Einsatz (http://www.datanucleus.org) • In GAE/DN JDO besser dokumentiert als JPA (immer noch!) • Alternativ gibt es eine Lowlevel-API • Im Hintergrund keine SQL-Datenbank sondern Google BigTable • In memory SQL-DB‘s sind möglich • Enhancement der Entity-Klassen wegen DataNucleus (JDO / JPA) Herbstcampus 2011 – GAE Reloaded 28
  • 29. GAE - JPA • In persistence.xml Konfiguration des transaktionalen Verhaltens. • Default: <persistence-unit name="transactions-optional"> <provider>org.datanucleus.store.appengine.jpa.DatastorePersistencePro vider</provider> <properties> <property name="datanucleus.NontransactionalRead" value="true" /> <property name="datanucleus.NontransactionalWrite” value="true" /> <property name="datanucleus.ConnectionURL” value="appengine" /> </properties> </persistence-unit> Herbstcampus 2011 – GAE Reloaded 29
  • 30. GAE – JPA-Einschränkungen • Keine @ManyToMany • Keine Join-Queries • Bei Vererbung keine Unterstützung für • InheritanceType.SINGLE_TABLE • InheritanceType.JOINED • Keine Aggregate queries (group by, having, sum, avg, min, max) • Keine Polymorphe Queries Herbstcampus 2011 – GAE Reloaded 30
  • 31. GAE – Und paar Punkte mehr • Resultsets sind nicht gefüllt, daher: resultSet.size(); • Id-Felder: Unsupported primary key type: long • GenerationType.TABLE: javax.persistence.PersistenceException: Transaction is still active. • Klappt besser: @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Key key; Herbstcampus 2011 – GAE Reloaded 31
  • 32. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 32
  • 33. 'JRE Class White List' • Die ‚JRE Class White List‘ definiert die Klassen, die von der GAE Sandbox unterstützt werden http://code.google.com/intl/de-DE/appengine/docs/java/jrewhitelist.html • Die Applikation darf nicht • Eigene Threads starten • Keine Dateien schreiben • Keine „willkürlichen“ Netzwerkverbindungen aufbauen Herbstcampus 2011 – GAE Reloaded 33
  • 34. "Will it play?" • Übersicht über gängige Frameworks und Sprache http://code.google.com/p/googleappengine/wiki/WillItPlayInJava • Keine Unterstützung für • JAX-RPC • JDBC, JMS, JNDI, RMI • Hibernate – Inkompatibel • Groovy, Scala usw: Supported (kein Akka!) • JAX-WS inzwischen teilweise vorhanden http://code.google.com/p/googleappengine/issues/detail?id=1270 http://code.google.com/appengine/articles/soap.html Herbstcampus 2011 – GAE Reloaded 34
  • 35. Workaround... • Umgehung Whitelist / erzwungene Kompatibilität • JARJAR (http://code.google.com/p/jarjar/) • Erstellt eine JAR, Umbenennung von Paketen • Bytecode-Transformation für nicht mehr gültige Referenzen auf umbenannte Pakete Herbstcampus 2011 – GAE Reloaded 35
  • 36. Spring… • Spring = Semi-Kompatibel (nicht alle JARs) • Spring MVC-Applikation mit Spring Beans • Setup: Spring JARs in WAR/WEB-INF/lib kopieren und in CP aufnehmen <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/springgae/*</url-pattern> </servlet-mapping> • Beispiel im Cook Book: http://peterbacklund.blogspot.com/2009/04/running-spring-on-google-app-engine.html Herbstcampus 2011 – GAE Reloaded 36
  • 37. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 37
  • 38. Quota • GAE ist kostenlos innerhalb der Quota-Grenzen • Stärkere Ausnutzung der Infrastruktur gegen Bezahlung möglich, muss explizit eingeschaltet werden • Quota verbraucht = HTTP 403 FORBIDDEN oder Exception • „Per minute quota“ – ca. 500 Req. / min. Herbstcampus 2011 – GAE Reloaded 38
  • 39. Quota – weitere Details Ressource Quota Request size 10 mb Response size 10 mb Request max. Dauer 30 sec. Maximale Anzahl Files 3000 Maximale Dateigröße 10 mb Herbstcampus 2011 – GAE Reloaded 39
  • 40. Performance • Max. 500 req. / sec. (Quota) • Simpler Test (schreiben und lesen eines Datensatzes) Herbstcampus 2011 – GAE Reloaded 40
  • 41. Agenda • Was ist überhaupt eine „Cloud“ • Die Google App Engine • Getting started: „Hallo Welt“ • Persistenz in Google App Engine • Limitierungen in GAE/J • Quota und Performance • Build-Tools Herbstcampus 2011 – GAE Reloaded 41
  • 42. Build… • Ant wird unterstützt • Entity-Klassen müssen „manuell“ Enhanced werden, Ant- Task wird von DataNucleus angeboten • Maven • Maven2 Plugin verfügbar • (http://code.google.com/p/maven-gae-plugin/) • Archtypes für JSP, GWT und Wicket-Projekte • Enhancement über Maven-Plugins von DataNucleus Herbstcampus 2011 – GAE Reloaded 42
  • 43. Vielen Dank! Dr. Halil-Cem Gürsoy adesso AG halil-cem.guersoy [at] adesso.de @hgutwit http://goo.gl/hljRS
  • 44. Wir suchen Sie als Software Architekt (m/w) Projektleiter (m/w) Senior Software Engineer (m/w) jobs@adesso.de www.AAAjobs.de Herbstcampus 2011 – GAE Reloaded 44