20100429-SIG_Java-Szilinski

Werbung
DOAG SIG Java: Grails und Oracle
Rapid Web Application Development mit Grails und Oracle
Referent: Frank Szilinski
Firmenvorstellung
Kernkompetenzen esentri
 Strategieberatung
 Projektmanagement
 Technologie





2
Java/SOA
Software Solutions
Open Source
Oracle
RIA
Technologie Portfolio
3
Ziele des Vortrags
Rapid Web Application Development
mit Grails und Oracle
Overview Technology-Stack
Wo gehört das Framework hin?
Groovy und Grails
Einblick in die Sprache Groovy und das Framework Grails
Grails und Oracle
Zusammenspiel Datenbank, Grails und WebLogic
Real-Life
Plug-In, Integration, Einsatzgebiete, Conclusion
4
Trends – Groovy und Grails
5
Was ist Groovy?
 2003 gestartet
 2004 als JSR-241als Standard
aufgenommen
 2007 Release 1.0
 2007 Jax Innovation Award
 2010 Release 1.7.1






6
Basis für Grails
Allzweck-Programmiersprache für die JVM
Ausdrucksstärke von Ruby, Lisp und Python
Stabile, funktionsreiche Sprache
Objektorientiert
Template Mechanismen
Was ist Grails?
 2005 gestartet
 2006 Release 0.1
 2008 Release 1.0
 2008 Februar
Das Unternehmen Groovy Grails wurde von
SpringSource gekauft
 2008 November
SpringSource wird von VMWare
übernommen
 aktuell Release 1.2.2
7
Was ist Grails?









8
Web Application Development Plattform
Rapid Getting things done
Open Source keine Lizenzkosten
Full-stack MVC Framework
JVM als Laufzeitumgebung
Nahtlose Java Integration
Ausführbar in diversen Containern
Deckt den JEE Development Cycle ab
Verbindet bewährte OSS Frameworks wie
Spring, Hibernate, Sitemesh, HSQLDB, Quartz
Code
Debug
Compile
Test
Package
Deploy
Vergleichbare Frameworks*
Application Development Framework
9
Grails Framework
Grails
Hibernate
Java Language
Sitemesh
Java Development Kit (JDK)
Java Virtual Machine
10
JEE
Groovy
Spring
Integrated Development Environments
SpringSource ToolSuite
 Grails-Nature
 Code-Completion
 Grails Aktionen über Kommandozeile
Eclipse
 Bisher keine Integration
Oracle JDeveloper
 Grails Aktionen über konfigurierbare externe Tools
Oracle NetBeans
 Grails Integration in Projektbaum
 Automatische Generierung und Konfiguration
 Code-Completion
 Bester Support
11
Demo Teil I
Scaffolding Sample
12
Grails Einflussfaktoren
Scaffolding
und
templating
Rock-solid
foundations
Java
Integration
Agiles
Vorgehen
Convertion
over
Configuration
13
Incredible
wetware
Grails
Produktivitäts
Ethos
Begriffe = Best Practices
 Scaffolding
Gerüst um die notwendigsten CRUD Operationen, Controller und
Views eines Domain-Objects generieren zu lassen
 Convention over configuration (CoC)
Ein Entwickler kann sich darauf verlassen, dass ein
Standardverhalten ohne Konfiguration erreicht wird,
was jedoch angepasst werden kann, falls dies notwendig ist
 Don‘t repeate yourself (DRY)
Redundanzen, Mehrfachkonfiguration und Copy&Paste
vermeiden
 Default is what you expect (DIWYE)
Das Verhalten und die Standards sind so definiert,
wie ein Entwickler es erwarten würde
 Domain-driven-Development (DDD)
Die Domain ist die treibende Kraft
14
Der Einstieg in Groovy
Groovy ist eine...
1. dynamische
2. Scriptsprache
Quelle: Bild: http://www.pedantique.org/2010/02/14/life-on-the-jvm/
15
Groovy Interpreter
Groovy
Groovy
Source
16
compile
(groovy)
Java
ByteCode
execute
(Class
Loader)
Der Einstieg in Groovy
 Erfahrener Entwickler spart mit Groovy gegenüber Java
40-60% Quellcode und benötigt nur ⅓ der Zeit
 Kann mit Java vermischt werden
 Wird in Java ByteCode übersetzt
 Groovy Klasse = Java Klasse
 Groovy Servlets und Templates bieten optimale Voraussetzung
zur Erstellung nicht nur von Webseiten
 Viele neue Sprachfeatures wie





GPath
GString
Internal iterations
Closures
Meta Object Protocol (MOP)
Dynamics/Expandos, Kategorien, Metaclass, AST Transformations
17
Die Sprache Groovy
Beispiel 1
Parse alle Dateien rekursiv unterhalb des Verzeichnisses „aFolder“,
die mit „TAG“ enden und prüfe die Gültigkeit und Wohlgeformtheit
dieser Dateien:
im Terminal
groovy -e 'new File(“aFolder").eachFileRecurse{
f -> if (!f.isDirectory() && f.name.endsWith(“TAG")){
new XmlParser().parse(f)}}'
18
Die Sprache Groovy
Beispiel 2
Java
((Date)getAttribute("PromotionDate")).compareTo((Date)getAttribute("HireDate")) > 0
Groovy
PromotionDate > HireDate
Beispiel 3
Java
((Number)getAttribute("Salary").multiply(new Number(0.10))
Groovy
Salary * 0.10
19
Die Sprache Groovy
Beispiel 4
Java
List names = new ArrayList();
for (Iterator iterator = people.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
names.add(person.getName());
}
System.out.println(names);
Groovy
def names = people*.name
println names
20
Die Sprache Groovy
Beispiel 5
Java
try {
// Create a URL for the desired page
URL url = new URL("http://hostname:80/index.html");
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
StringBuffer sb = new StringBuffer();
while ((str = in.readLine()) != null) {
sb.append(str);
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
System.out.println(sb.toString());
Groovy
def text = new URL("http://hostname:80/index.html").text
println text
21
Die Sprache Groovy
Beispiel 6: Closures
def adder = {a,b -> a+b }
assert 3 == adder.call(1,2)
def multiplier = {a,b -> a*b }
assert 2 == multiplier(1,2)
def map = {a,b,f -> f(a,b) }
assert 3 == map(1,2,adder)
22
Die Sprache Groovy
Beispiel 7: Expandos
coach = new Expando()
coach.firstName = "Louis"
coach.lastName = "Van Gaal"
coach.victories = 148
coach.matchWon = {
coach.victories++;
}
coach.matchWon()
assert coach.victories == 149
23
Grails Architektur
Dojo
Acegi
Grails
Prototype
Quarz
JUnit
...
Canoo
WebTest
Yahoo UI
Flex
Groovy
Spring
Hibernate
Java
24
Sitemesh
Grails Integration
Presentation
Geschäftslogik
GSP
Controller
Grails
DispatcherServl
et
Service
Domain
Enterprise
Services
Remote Services
25
Integratio
n
GORM
Client
Data
Grails MVC Paradigma
Aufruf von Client: http://localhost/bookapp/Book/show
class BookController {
def show = {
["books": Book.list ]
}
}
Controller
class Book {
String title
Author author
String ISBN
BigDecimal price
def belongsTo = Author
}
Model
26
<html>
<head>
<title> Book list </title>
</head>
<body>
<h1> Book list </h1>
<table>
<tr>
<th> Title </th>
<th> Author </th>
</tr>
<g:each in=" ${ books } ">
<tr>
<td> ${ it.title } </td>
<td> ${ it.author } </td>
</tr>
</g:each>
</table>
</body>
</html>
View
Grails GORM
 GORM = Groovy Object-Relational Mapping
 Basis für GORM ist Hibernate,
kann aber durch Plug-Ins beliebige ausgetauscht werden
 Persistence Management ist ohne Konfiguration verfügbar
 Domain Klassen haben durch Konvention automatisch Methoden



find
findAll
get



count
list
...
 Zugriff über dynamische Finder-Methoden
class User {
String login
String firstName
String lastName
String role
}
User.findByLastNameAndFirstName('Szilinski', 'Robert')
User.findByFirstNameLike('Sz%')
27
Grails GORM
 Automatische Instanzmethoden
user.save(), user.validate(), user.update(), user.delete()
 Uni- und Bi-Direktionale Beziehungen
 id, version, equals, hashCode, toString von Grails generiert
 Domain-Klasse und anwendungsspezifisch Validatoren
class Author {
String firstName
String lastName
class Book {
String title
Author author
Publisher publisher
def hasMany =
[books : Book]
static constraints={
firstName(
blank:false)
lastName(
blank:false)
}
}
28
def belongsTo =
[author:Author]
}
class Publisher {
String name
def hasMany =
[books:Book]
}
Grails DataSource - Oracle Datenbanken
dataSource {
pooled = true
driverClassName = "oracle.jdbc.driver.OracleDriver"
username = "xeuser"
password = "xepass"
dialect = "org.hibernate.dialect.Oracle9Dialect"
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
environments {
development {
dataSource {
dbCreate = "update"
url = "jdbc:oracle:thin:@myXEDatabase:1521:XE"
}
}
test {
...
}
production {
...
}
}
29
Grails und Groovy Server Pages (GSP)
 Meta Tags in den HTML-Dateien oder per Konvention angeben
Konvention: Decorator in entsprechende Verzeichnisse legen
 DecoratorMapper
Beispielsweise PrintDecoratorMapper
 GSP ≈ JSP
eigenen TagLibs und Integration in Sitemesh
 Ajax TagLib unterstützt
Prototype, Rico, Yahoo UI, Dojo, DWR, OpenLazlo, Wicket
30
Verkürzter Entwicklungszyklus
Code
Debug
Compile
Test
Package
Deploy
Entwicklungszyklus
Grails
Entwicklungszyklus
JEE
Code
Debug
31
Test
Deployment-Matrix
Mögliche Application Container ab Grails 1.0
32




Oracle AS
Weblogic 8.1.2
Weblogic 9.2
Weblogic 10






Tomcat 5.5
Tomcat 6.0
JOnAS 5.1
JOnAS 5.2
Geronimo 2.1.1
GlassFish v1 (Sun AS 9.0)
and v2 (Sun AS 9.1)









GlassFish v3 Prelude v3 "Prelude“
IBM Integrated Web Application Server
for i 7.1
Sun App Server 8.2
Resin 3.2
JBoss 4.2
Jetty 6.1
SpringSource Application Platform 1.0
beta
Websphere Application Server
Community Edition 2.0 (WAS CE)
Websphere 6.1
Grails Application on Oracle WebLogic
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
33
Plug-Ins – die Welt liegt Grails zu Füssen
 Grails ist eine Plugin-Laufzeit-Umgebung
 Der Grails Kern besteht aus Plug-Ins
(im Standard MVC, GORM etc.)
 Macht Grails sehr flexibel und Umfangreich
 Grails-Plugin-Community > 390 Plug-Ins







34
Apache Camel
Comet
Cloud Foundry
DataSources
Facebook
Feeds
Flex/BlazeDS







Google Analytics
Google Maps
JPA
JMS
LDAP
Twitter
...
Grails Performance und Zukunft
Problem
Groovy bisher Faktor 5x bis 15x langsamer als Java!!!
Abhilfe
 JRockit JVM *
 InvokeDynamic (Java7)
 Groovy Optimizations (Loop unrolling, etc)
 Groovy++
35
Grails Integration
Ist Grails EnterpriseReady?
Wiederverwendung von
existierenden Anwendungen?
Grails Integration in
existierende
Umgebungen?
Grails auf der Grünen
Wiese?
36
Erfahrungsberichte
http://www.noiteuniversitaria.com.br/
Brasilianische Entertainment-Seite
1 Million Seitenzugriffe im Monat
http://www.virtualtourist.com/
Travel Community
1 Million Benutzer und 3 Millionen Photos
http://www.sky.com
Multi-Channel Television Service mit nahezu 10 Millionen Kunden
http://kontoblick.de/
Persönliches Finanz-Tracking in kürzester Zeit realisiert
37
Demo Teil II
Grails on Oracle
38
Kontakt
Frank Szilinski
Bachelor of Science in Computer Science
[email protected]
Stephanienstr. 36
76133 Karlsruhe
Tel 0721 / 7540 7530
Fax 0721 / 7540 7539
www.esentri.com
[email protected]
39
Herunterladen