als Ober äche für Enterprise Java Projekte Bastian Voigt @BastianVoigt xing.com/pro"le/bastian_voigt ConceptPeople IT-Talk 8.09.

Ähnliche Dokumente
Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen


Eine Anwendung mit InstantRails 1.7

SSI WHITE PAPER Design einer mobilen App in wenigen Stunden

«Integration in WebSite» HTML-/Javascript-Code-Beispiele

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Präsentation Von Laura Baake und Janina Schwemer

Print2CAD 2017, 8th Generation. Netzwerkversionen

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Online Newsletter III

Übungen zur Softwaretechnik

Eine eigene Seite auf Facebook-Fanseiten einbinden und mit einem Tab verbinden.

Lokale Installation von DotNetNuke 4 ohne IIS

Server-centric vs. Client-centric Web Applications. BITKOM Software Summit 2014, Frankfurt

HTML5. Wie funktioniert HTML5? Tags: Attribute:

Ein mobiler Electronic Program Guide

Java Script für die Nutzung unseres Online-Bestellsystems

Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM. Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher

Internet Explorer Version 6

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor:

Alle gehören dazu. Vorwort

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Einführung in PHP. (mit Aufgaben)

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Reporting Services und SharePoint 2010 Teil 1

Tevalo Handbuch v 1.1 vom

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Anleitung zur Webservice Entwicklung unter Eclipse

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

SharePoint Workspace 2010 Installieren & Konfigurieren

Neue Funktionen in Innovator 11 R5

Übung 1: Von einer naiven JavaScript Applikation zu einem modernen Front-End Build:

Wir bringen Ihre Notes/Domino Anwendungen sicher ins Web , Bilster Berg Drive Resort Michael Steinhoff, agentbase AG.

RESTful Web. Representational State Transfer

Webseitenintegration. Dokumentation. v1.0

CSS-Grundlagen. Etwas über Browser. Kapitel. Die Vorbereitung

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

WEBSEITEN ENTWICKELN MIT ASP.NET

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Video-Tutorial: Einrichten einer Facebook Landing Page in der Facebook Chronik (Timeline)

Open Source. Hendrik Ebbers 2015

Kleines Handbuch zur Fotogalerie der Pixel AG

Anleitung über den Umgang mit Schildern

Installations Guide für YAJSW und DTLDAP

Was meinen die Leute eigentlich mit: Grexit?

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

COMPUTERIA VOM Wenn man seine Termine am Computer verwaltet hat dies gegenüber einer Agenda oder einem Wandkalender mehrere Vorteile.

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

Webseiten und Web-Apps grafisch gestalten mit HTML5 Canvas ohne Flash und sonstige Tools

Appery.io Mobile Apps schnell und einfach entwickeln

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

VIP-Programm. Herzlich Willkommen!

Eine Einführung in die Installation und Nutzung von cygwin

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

EIDAMO Webshop-Lösung - White Paper

Bilder zum Upload verkleinern

Georgienseite TYPO3 LTS7 Projekt Georgienseite TYPO3 LTS 7 responsiv Stand: Juni 2016

MetaQuotes Empfehlungen zum Gebrauch von

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

OP-LOG

Look Inside: desite. modellorientiertes Arbeiten im Bauwesen. B.I.M.

Ein UI in zwei Welten - Controls in HTML5 und WPF. Timo Korinth

Idimager ein Bildverwaltungsprogramm-DAM Software

THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

COMPUTER MULTIMEDIA SERVICE

Erstellen einer digitalen Signatur für Adobe-Formulare

AppCenter Handbuch August 2015, Copyright Webland AG 2015

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Verwendung des Terminalservers der MUG

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Projektmanagement. Vorlesung von Thomas Patzelt 9. Vorlesung

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Faclets. Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

mit dem TeXnicCenter von Andreas Both

e-books aus der EBL-Datenbank

Das Leitbild vom Verein WIR

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Die Post hat eine Umfrage gemacht

DOKUMENTATION VOGELZUCHT 2015 PLUS

SEMINAR Modifikation für die Nutzung des Community Builders

Installation der SAS Foundation Software auf Windows

Content Management System mit INTREXX 2002.

Android Remote Desktop & WEB

Softwaren Engineering I

Fotostammtisch-Schaumburg

AJAX DRUPAL 7 AJAX FRAMEWORK. Was ist das Ajax Framework? Ein typischer Ablauf eines Ajax Requests Die Bestandteile des Ajax Frameworks.

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de (c) Michael Behrendt -

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

INSTALLATION VON INSTANTRAILS 1.7

Transkript:

als Ober äche für Enterprise Java Projekte Bastian Voigt @BastianVoigt xing.com/pro"le/bastian_voigt ConceptPeople IT-Talk 8.09.2014

Gliederung 1) Über mich 2) Was ist Enterprise Java Softwareentwicklung? 3) Spaßbremsen bei der Web-Entwicklung mit Java 4) Was ist AngularJS? 5) Wie kann der Buildprozess aussehen? 6) Best Practices

Über mich Dipl.-Inf. Bastian Voigt freier softwareentwickler Freiberuicher Consultant seit 2008 Schwerpunkte: Java-Entwicklung, Projektmanagement Agil und pragmatisch Training und Coaching

Was ist Enterprise Java? Serverbasierte Java-Anwendung mit Web- Ober/äche EJB, Spring, JSP, JSF, Wicket, Hibernate, etc. Langlebige Software Viele Projekte sind heute schon 10-15 Jahre alt Werden immer noch aktiv weiterentwickelt Meist geschäftliche / kaufmännische Anwendungen Geschäftsprozesse, Kundendaten, etc.

Back-End Transaktionale Dienste Geschäftsprozesse Persistente Datenhaltung Ungefähr so sexy wie ein Serverschrank Über die Jahre haben sich große Mengen Daten und Code angesammelt

Front-End Meist komplexe Masken mit vielen Eingabefeldern Über die Jahre gewachsene unübersichtliche Menüstrukturen Sowjet-Charme : in die Jahre gekommenes Aussehen der Eingabemasken Darstellung in aktuellen Browsern wird irgendwann zum Problem

we spend 90% of the TCO of an application post launch source: Gartner analyst (via James Lewis / Thoughtworks)

Neue Ober äche?

Nur welche?

Das beste Webframework? Unmöglich das seriös zu beurteilen. Deshalb eine einfache Theorie: Wer beim Entwickeln Spaß hat, arbeitet konzentrierter, schneller und besser Ziel: Spaßbremsen eliminieren

Spaßbremsen 1: Komponentenbasierte Frameworks Wollen HTTP, HTML und AJAX vor dem Entwickler verstecken, sind dabei nicht besonders erfolgreich. Ziel: Entwickler, die aus dem Desktop-GUI bzw. Client-Server Zeitalter kommen, müssen sich nicht umstellen Tatsächliches Ergebnis: Träge laufende Anwendungen, schwer zu ändern

Spaßbremsen 2: Template-basierte Frameworks Waren mal richtig gut (JSP 2 / JSTL!) Model-2 Architecture Separation of Concern Schnelle Feedback-Zyklen Fühlt sich mit AJAX nicht mehr richtig an (Paradigmenbruch)

Model-2 Architektur Request Controller Services Browser PresentationModel ViewModel Response View (JSP)

Spaßbremsen 3: Java-Serverapplikationen Zu langsame Feedbackzyklen! Application Server Start dauert oft mehrere Minuten Bei Änderungen meist Redeploy der Anwendung nötig wieder 30 Sekunden Nach ein paar Neustarts: OutOfMemoryError PermGen Space

Anforderungen an ein modernes Web-Framework Separation of Concern Förderung sauberer Codestruktur Testbarkeit Änderbarkeit Direkte Arbeit mit HTTP, HTML, CSS, etc. Schnelles Feedback ohne langwierige Neustarts AJAX ohne Paradigmenbruch integrieren Ich möchte nicht der einzige User sein

Features Single Page Application Applikation, nicht Seite Separation of Concern Dependency Injection MVW (Model, View, Whatever) Unit-Test-Framework inklusive AJAX ist der einzige Weg Daten vom Server zu holen Kein Paradigmenbruch mehr Flüssiges Entwickeln Sofort visuelles Feedback Kein langwieriges Neustarten oder Deployen

<html ng-app="phonecatapp"> <head>... <script src="bower_components/angular/angular.js"></script> <script src="js/controllers.js"></script> </head> <body ng-controller="phonelistctrl"> <ul> <li ng-repeat="phone in phones"> {{phone.name}} <p>{{phone.snippet}}</p> </li> </ul> </body> </html>

Direktiven HTML-Elemente oder Attribute mit spezieller Funktionalität anreichern Möglichkeit, Low Level DOM-Manipulation wiederverwendbar auszulagern Es gibt viele vordelnierte Direktiven Third-Party-Bibliotheken delnieren neue Direktiven (bspw. uibootstrap) Man kann auch eigene schreiben Direktiven haben eigenen Scope und eigenen Controller

angular.module('phonecatapp').controller('phonelistctrl', function ($scope) { $scope.phones = [ {'name': 'Nexus S', 'snippet': 'Fast just got faster with Nexus S.'}, {'name': 'Motorola XOOM with Wi-Fi', 'snippet': 'The Next, Next Generation tablet.'}, {'name': 'MOTOROLA XOOM ', 'snippet': 'The Next, Next Generation tablet.'} ]; });

describe('phonelistctrl', function(){ beforeeach(module('phonecatapp')); it('should create "phones" model with 3 phones', inject(function($controller) { var scope = {}, ctrl = $controller('phonelistctrl', {$scope:scope}); expect(scope.phones.length).tobe(3); })); });

angular.module('phonecatapp').controller('phonelistctrl', function ($scope, $http) { $http.get('phones/phones.json').success(function(data) { $scope.phones = data; }); }); $scope.orderprop = 'age'; [ { "age": 13, "id": "motorola-defy-with-motoblur", "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122", "snippet": "Are you ready for everything life throws your way?"... },... ]

describe('phonecat controllers', function() { describe('phonelistctrl', function(){ var scope, ctrl, $httpbackend; beforeeach(module('phonecatapp')); beforeeach(inject(function(_$httpbackend_, $rootscope, $controller) { $httpbackend = _$httpbackend_; $httpbackend.expectget('phones/phones.json'). respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]); scope = $rootscope.$new(); ctrl = $controller('phonelistctrl', {$scope: scope}); })); it('should create "phones" model with 2 phones fetched from xhr', function() { expect(scope.phones).tobeundefined(); $httpbackend.flush(); expect(scope.phones).toequal([{name: 'Nexus S'}, {name: 'Motorola DROID'}]); });

Historie 2009 gestartet von Miško Hevery and Adam Abrons, die damit eine Geschäftsidee umsetzen wollten Seit 2010 Open Source Version 1.0 released 2012 2012 Launch der neuen Doubleclick-Ober/äche auf AngularJS-Basis 2014 Release des Protractor E2E Framework Angular wird heute von einem 15-köpLgen Team bei Google weiterentwickelt Jährliche Konferenz ng-conf

Komplexe Toolwelt

NodeJS / NPM Kommandozeilen-Ausführungsumgebung für Javascript NPM lädt dependencies für die Entwicklung (Grunt, Karma, Yeoman, etc.) Bower lädt Dependencies der Webanwendung (Bootstrap UI, Compass, Schriftarten,...)

Zur Entwicklungszeit Livereload: Geänderte Dateien erkennen und Teil-Build anstoßen JSHint: Statische Codeanalyse Connect: Ein Webserver, der geänderte Dateien über Websocket zum Browser pusht Connect Proxy: Backend-Anfragen an Java App-Server weitergeben Beim richtigen Bauen: Karma: Tests im Browser ausführen Filerev: Dateinamen um einen Hash ergänzen Usemin/Uglify: Konkatenieren, minilzieren (JS, HTML, Bilder)

Build Best Practices GruntLle und Verzeichnisstruktur durch Yeoman generieren lassen!

Build Best Practices Maven-Build mit dem Grunt-Build integrieren? 1. Fehlversuch: grunt-maven-plugin Irrsinnig kompliziert zu konlgurieren Yeoman kann nicht mehr genutzt werden 2. Fehlversuch: maven-antrun-plugin Der Grunt Build läuft immer doppelt innerhalb des Maven Builds npm install muss jedes Mal neu ausgeführt werden lange Downloadzeiten Akzeptable Lösung: Front-End getrennt vom Back-End bauen und Unit Testen, erst danach zusammenbringen z.b. Apache Mod-Proxy oder NodeJS-Proxy Laufzeitumgebung möglichst automatisch provisionieren!

Best Practices Zusätzliche UI-Bibliothek einbinden Sehr gute Erfahrungen mit ui-bootstrap Bietet Bootstrap-Komponenten als Angular- Direktiven Verwendet bootstrap CSS, aber der Javascript-Teil wurde speziell für Angular neu geschrieben

Best Practices Compass / SCSS für Stylesheets verwenden Vererbung und Modularisierung von Stylesheets Große Bibliothek mit vielen gute Vorlagen, die man nur noch erweitern muss Buildprozess lässt sich sehr einfach in Grunt integrieren

End to End Testing Problem: Tests fallen bei jeder noch so kleinen Änderung um, Entwickler sind genervt Lösungsansatz: Protractor bringt mehr Stabilität durch zusätzliche Angular-speziLsche Selektoren, die man hopentlich seltener anpassen muss

Integration Alte GUI neue GUI Doppelten Login vermeiden JSessionID-Cookie als Bindeglied zwischen JSF und REST Services Oder: Login-Seite der Altanwendung generiert das Access-Token für REST Services mit Angular Views per Frame / IFrame in die Menüstruktur der Altanwendung einbringen Oder umgekehrt

Wie motiviere Entwickler, Javascript und HTML5 zu lernen? Entwickler wollen lernen! 3-tägige Schulung und dann die Leute damit allein lassen riskant Besser: Zeitbegrenzte Unterstützung durch erfahrenen Externen, um Anfängerfehler zu vermeiden Teams richtig zusammensetzen: Es darf kein Loser-Team entstehen, das sich abgehängt fühlt Keine AngularJS-Experten heranzüchten Kultur der gegenseitigen Hilfe im Team etablieren

Nachteile NPM lädt die ganze Welt herunter Es gibt zwar lokales Caching der heruntergeladenen Releases, aber... Transitive Dependencies werden mehrfach heruntergeladen, erst danach durch dedupe zusammengefasst NPM installiert teilweise native libraries, die durch den C- Compiler müssen dabei kann viel schiefgehen Bricht oft ab mit wildesten Fehlermeldungen Das GruntLle ist ein Monster Hohe Komplexität im Buildscript Zum Glück wird es generiert, und wir brauchen es nicht so oft zu ändern

Vielen Dank! Bastian Voigt Softwareentwicklung und Projektmanagement http://bastian-voigt.de @BastianVoigt post@bastian-voigt.de Tel. 0179-4826359