6. Contexts and Dependency Injection

Größe: px
Ab Seite anzeigen:

Download "6. Contexts and Dependency Injection"

Transkript

1 6. Contexts and Dependency Injection klassisch Dependency Injection was kennen wir bereits CDI im Detail Aktivierung Qualifier Event Handling Objekte injizieren Produzenten Alternativen Interception Fazit 561

2 Einschub: aktueller Stand Sprinter ist eine klassisch aufgebaute JEE-Applikation wir arbeiten mit Klassen und Objekten davon kritisch betrachtet sind wesentliche Teile der Software nicht objektorientiert oftmals gibt es (pro Nutzer) genau ein Objekt von Steuerungsklassen (alles Singleton, Ausnahme Datenschicht) Teilprogramme rufen Methoden (?? Prozeduren) in anderen Teilprogrammen auf (Oracle Application Express (APEX) nutzt PL/SQL zur Erstellung von Web-Applikationen) generell nichts Schlechtes daran! kritisch, Objekte müssen sich genau kennen 562

3 Dependency Injection klassisch (1/2) woher kommen Objekte für Exemplarvariablen? Variante 1: Werte werden als Parameter übergeben, aus denen Objekte gebaut werden (Objekt baut sich benötigte Objekte selber) Variante 2: Objekte werden als Referenzen übergeben Optimierung: Typen der Objektvariablen sind Interfaces; so konkrete Objekte leicht austauschbar Variante 2 heißt Dependency Injection mit get- und set- Methoden oder über Konstruktoren 563

4 Dependency Injection klassisch (2/2) Nutzer nutzer = new Nutzer(new Inter1RealA(42), new Inter2RealC(43), new Inter3RealD("Hallo")); eng verknüpft mit Factory Pattern 564

5 JSF nutzt bereits public class SprintController implements PersistenzService Objekt steht und festen Namen zur Oberflächengestaltung zur Objekt steht für die gesamte Session (auch allen anderen Objekten) zur Verfügung Umgebung gib (injiziere) mir ein zum Typen passendes garantiert nach Erzeugung, vor Nutzung Hinweis: Annotationen stammen aus dem CDI-Paket; es gibt sehr ähnliche in JSF-Paketen (JSF ohne CDI machbar) 565

6 Ziele CDI Entkopplung von Objekten bestes Beispiel, es wird nur ein passendes Objekt irgendwoher benötigt; dies besorgt CDI- Realisierung Vereinfachte Objekt-Kommunikation Beispiel: Informationen abonnieren (bekannt als Publish Subscribe oder Observer Observable) Vereinfachung von querschnittlich in mehreren Objekten benötigter Funktionalität Beispiel: Logging Hinzufügen von Funktionalität zu bestimmten Ereignissen ohne betroffene Methoden zu verändern Beispiel: Konsistenzprüfung, Benachrichtigung (Aspektorientierung) 566

7 Informationsquellen CDI 1.1 gehört zu JEE 7 JSR 299: Contexts and Dependency Injection for the Java TM EE platform, JSR 346: Contexts and Dependency Injection for Java TM EE 1.1, Spezifikation Referenzimplementierung Weld 2.0 (JBoss) gute Einführung: US/html/intro.html 567

8 NetBeans: kein Deploy on Save gerade bei CDI ist ein vollständiges Clean & Build mit Deploy fast immer sinnvoll, da Server sonst Probleme z. B. mit noch laufenden Sessions hat 568

9 Aktivierung explizit mit beans.xml in WEB-INF Ordner; für reine EJB-Module oder jar-dateien im Ordner META-INF <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" </beans> version="1.1" bean-discovery-mode="all"> implizit, ohne beans.xml oder mit und bean-discoverymode="annotated", werden nur Beans mit Scope gefunden in beans.xml können (und müssen teilweise) weitere Eigenschaften spezifiziert werden 569

10 zentrales Hilfsmittel Qualifier Qualifier sind einfache Annotationen, mit denen gewünschte bzw. geforderte Eigenschaften spezifiziert werden können Normale neue Annotation mit ElementType.METHOD, ElementType.PARAMETER, Info{ folgende Folien: Qualifier nur erwähnt, haben dann die hier angegebene Form 570

11 Event-Model (Observer Observable) auch Publish-Subscribe Observer sagt Bescheid, dass er vom Observable informiert werden möchte Observable schickt Informationen an alle Abonnenten Beispielaufgabe (Balkon): Informiere alle Interessierten, dass gerade ein Objekt persistiert werden soll 571

12 Event Model Übersicht (müssen nicht EJBs Info{ Qualifier class MeinEvent beliebige public class Event<MeinEvent> event MeinEvent me = event.fire(me); Observable public class EventConsumer { public MeinEvent event) { 572

13 Definition des Event-Objekts POJO mit Inhalten, die übertragen werden sollen package cdi.eventing; public class MeinEvent { // POJO private Object obj; public MeinEvent(){ public Object getobj() { return obj; public void setobj(object obj) { this.obj = obj; 573

14 Observable Benachrichtigen public class Event<MeinEvent> = "SprinterPU") private EntityManager em; public void persist(object object) { MeinEvent e = new MeinEvent(); e.setobj(object); event.fire(e); em.persist(object); 574

15 Observer 1 Durch können verschiedenartige Events unterschieden werden beteiligte Objekte sind EJBs oder haben einen Scope (oder übernehmen Scope des nutzenden public class EventConsumer { public MeinEvent event) { System.out.println(event.getObj()); 575

16 Observer public class EventConsumer2 { // Methode zeigt Machbarkeit des Ansatzes, ob dies hier // sinnvoll, ist fraglich public MeinEvent event) { System.out.println(event.getObj().getClass()); if (event.getobj() instanceof Mitarbeit){ Mitarbeit m = (Mitarbeit)event.getObj(); if (m.gettaetigkeit().isempty()){ m.settaetigkeit("intern"); 576

17 Beispiel: neue Mitarbeit persistieren INFO: Mitarbeit [id=0, version=0, geplantestunden=8, verbrauchtestunden=0, fertigstellungsgrad=0] INFO: class entity.mitarbeit 577

18 Konkretisierung injizierter Objekte bisher war immer eindeutig, welches Objekt genutzt wird häufig wird aber eine bestimmte Variante eines Objekts benötigt Ausgangspunkt: gibt Interface (oder abstrakte Klasse) mit mehreren Realisierungen der konkret gewünschte Objekttyp wird dann und die zusätzliche Angabe von Qualifiern festgelegt Beispiel: es gibt zwei verschiedene Ausgabemöglichkeiten, unterschieden durch 578

19 Konkretisierung LogQualifier{ interface Ausgabe { public class AusgabeLog implements Ausgabe public class AusgabeSys implements Ausgabe { Qualifier Qualifier Realisierung public class Ausgabe aus; Angabe gewünschter Variante 579

20 Beispiel (1/4): Realisierungen 1/2 public interface Ausgabe { public void ausgeben(string public class AusgabeSystem implements public void ausgeben(string s) { System.out.println(s); 580

21 Beispiel (2/4): Realisierungen public class AusgabeLog implements Ausgabe{ private final static Logger LOGGER = public void ausgeben(string s) { LOGGER.log(Level.INFO, "AusgabeLog: {0", s); 581

22 Beispiel (3/4): Auswahl der public class Ausgabe aus; public MeinEvent event) { //System.out.println(event.getObj()); aus.ausgeben(event.getobj().tostring()); ein zentrales Logging kann man mit CDI besser durch Interceptors realisieren es können auch mehrere Qualifier angegeben werden 582

23 Beispiel (4/4): Nutzung INFO: AusgabeLog: (0) CDI einbauen INFO: class entity.sprint 583

24 Auswahlregeln Wenn Bean keinen Qualifier hat, wird er automatisch gesetzt (kann man auch hinschreiben) ohne benötigten Qualifier genutzt werden Klassen haben ohne Scope-Angabe den der sich dem Scope des nutzenden Objekts anpasst 584

25 Produzenten bisher wurde nach passenden Klassen gesucht und ein Objekt per Default-Konstruktor erzeugt Objekt-Erzeugung kann aber auch durch annotierte Konstruktoren, Methoden (Rückgabe-Objekt) oder direkt Exemplarvariablen erfolgen Konkretisierung des erzeugten Objekts wieder durch im nächsten Beispiel) Beispiel zeigt kritische Wiederverwendung von Qualifier javax.enterprise.inject.produces nutzen 585

26 Statische Produzenten Übersicht Starttext{ Qualifier Produktionsvarianten Qualifier Qualifier class private public String @Info public String getlogtext2() { class @Info private private String text; Beispielnutzungen 586

27 Beispiel (1/3): Produzenten-Klasse public class Produzent implements Serializable { private String logtext private String meldung; public Produzent() { this.meldung public String getlogtext() { @Info public String getlogtext2() { System.out.println("getLogtext2"); return "2: " + this.logtext; 587

28 Beispiel (2/3): Nutzer der public class AusgabeLog implements Ausgabe{ private final static Logger LOGGER @Info private private String public void ausgeben(string s) { //LOGGER.log(Level.INFO, "AusgabeLog: {0", s); LOGGER.log(Level.INFO, "{0 {1: {2", new Object[]{this.text, this.start, s); 588

29 Beispiel (3/3): Beispielnutzung INFO: getlogtext2 INFO: Hai 2: logtext: (0) Qualifier überlegen INFO: class entity.backlogelement 589

30 Dynamische Produzenten Aktuell{ Produktionsmethode public public String mach(){ Qualifier Beispielnutzung public class Instance<String> datum; public void ausgeben( ) { datum.get()); 590

31 Dynamische Produktion (1/3) : Erzeugung wieder Produzenten-Methode mit üblichen Qualifier (also nichts Neues hier) public class Produzent implements public String mach(){ return new Date().toString(); 591

32 Dynamische Produktion (2/3): public class AusgabeLog Instance<String> public void ausgeben(string s) { LOGGER.log(Level.INFO, "AusgabeLog: {0 - {1", new Object[]{s, datum.get()); // LOGGER.log(Level.INFO, "{0 {1: {2" //, new Object[]{this.text, this.start, s); 592

33 Dynamische Produktion (3/3): Beispielnutzung INFO: AusgabeLog: (7) Kimi Räikkönen - Wed May 21 20:14:24 CEST 2014 INFO: AusgabeLog: (14) Fernando Alonso - Wed May 21 20:15:42 CEST

34 Inject-Varianten an Exemplarvariablen zu schreiben, ist dies auch public Konstruktor(Typ public void methode(typ ichwerdeinjected){ natürlich wieder Qualifier nutzbar weiterführend: an Klasse einschränken, für welche Klassen und Interfaces diese eingesetzt werden kann 594

35 Alternativen über Qualifier können passenden Klassen genau ausgewählt werden z. B. zu Testzwecken, sollte diese Auswahl aber einfach änderbar sein hierzu wird Klasse markiert UND muss in der beans.xml als ausgewählte Alternative angegeben werden durch Änderung der beans.xml sehr einfach Klassenauswahl auf Testphase oder länderspezifische Auswahlen änderbar mehrere Alternativen bei mehreren genutzten jars angebbar, dann Auswahl so + 10) komplexes, sehr flexibles Auswahlsystem, wann welche Klasse genutzt wird (@Specialization) 595

36 Nutzung der Alternative (1/3): weitere Klasse import cdi.qualifier.ausgabe.logqualifier; public class AusgabeLogMock implements public void ausgeben(string s) { System.out.println("LogMock: " + s ); 596

37 Nutzung der Alternative (2/3): bean.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" bean-discovery-mode="all"> <alternatives> <class>cdi.ausgabelogmock</class> </alternatives> </beans> 597

38 Nutzung der Alternative (3/3): Nutzung INFO: LogMock: (0) Alternativen realisieren INFO: class entity.backlogelement 598

39 InterceptQualifier{ Interceptor- Benennung bei Unterbrechung zu nutzen unterbreche alle public class BspKlasse { public void meth1( ) { public void meth2( ) { <interceptors> <class>cdi.meininterceptor public class MeinInterceptor public Object logcall( InvocationContext ctx) throws Exception { Method meth = ctx.getmethod(); for (Object o: ctx.getparameters()) return ctx.proceed(); 599

40 Interception Ansatz: sich in verschiedenen Methoden wiederholende Aufgaben zentral auslagern (Aspekt-Orientierung) (einziger) Klassiker: Logging Ansatz: Werden markierte Methoden oder Methoden in markierten Klassen ausgeführt, wird zunächst zum Interceptor gehörende Methode durchgeführt Interceptor kann auf Methode und Parameter zugreifen Interceptor muss Methodenausführung starten (proceed()) Interceptor muss über bean.xml eingeschaltet werden Interceptor benötigt eigene Art von Qualifier folgendes Beispiel zeigt ungewöhnliche Nutzung (auch Verstoß, dass möglichst wenig beobachtet werden soll) 600

41 Nutzung von Interception (1/5): Annotation import java.lang.annotation.elementtype; import java.lang.annotation.inherited; import java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; import java.lang.annotation.target; @Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, InterceptQualifier{ 601

42 Nutzung von Interception (2/5): Bereich festlegen Hier werden alle Methoden der Klasse beobachtet, man kann die Annotation auch nur für einzelne public class EventConsumer2 { public MeinEvent event) { System.out.println(event.getObj().getClass()); if (event.getobj() instanceof Mitarbeit){ Mitarbeit m = (Mitarbeit)event.getObj(); if (m.gettaetigkeit().isempty()){ m.settaetigkeit("intern"); 602

43 Nutzung von Interception (3/5): public class MeinInterceptor public Object logcall(invocationcontext context) throws Exception { Method meth = context.getmethod(); System.out.println("Methode: " + meth); /* for (Object o : context.getparameters()) { System.out.print(o + " "); */ 603

44 Nutzung von Interception (4/5): Realisierung 2/2 MeinEvent event = (MeinEvent) context.getparameters()[0]; if (event.getobj() instanceof Mitarbeiter) { Mitarbeiter m = (Mitarbeiter) event.getobj(); if (m.getminr() == 999) { m.setminr((int) ( System.nanoTime()%900000)); // m.setminr((int) m.getid()); kann nicht gehen, da 0 return context.proceed(); // wichtig irgendwann aufrufen 604

45 Nutzung von Interception (3/4): beans.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" bean-discovery-mode="all"> <interceptors> <class>cdi.meininterceptor</class> </interceptors> </beans> 605

46 Nutzung von Interception (4/4): Nutzung INFO: getlogtext2 INFO: Hai 2: logtext: (999) Clark Kent INFO: Methode: public void cdi.eventing.eventconsumer2.empfangemeinevent(cdi.eventing. MeinEvent) INFO: class entity.mitarbeiter 606

47 Stereotype mit CDI können große Mengen von Annotationen entstehen häufiger haben ähnliche Klassen die gleichen Annotationen diese können als neue Annotation Aktion { Klassen können auch mit mehreren Stereotypes (auch überlappend) annotiert werden 607

48 Weiterführende verwandt ermöglicht Ergänzung von Funktionalität zu bestimmten Methoden CDI auch zu eigener Transaktionssteuerung nutzbar Meinung: wenn JEE und EJB genutzt werden, spricht wenig für diesen Ansatz (Transaktion über mehrere Methoden) interessant: [Mül 14] B. Müller, JSF und JPA im Tandem, Teil 1, in: Javamagazin, 5/2014, Seiten , Software & Support Media GmbH, Frankfurt a. M., 2014 Auf Spezifikationsseite kann man sich über Version 1.2 informieren 608

49 Fazit CDI ermöglicht eine sehr große Entkopplung der Klassen voneinander Klassen werden so flexibler einsetzbar, evtl. Programmiermodel intuitiver im Beispiel wird Balkon an Projekt programmiert, ausreichen; nicht untypisch für klassisches JEE-Projekt CDI macht SW zur Zeit noch langsamer Annotations-Warfare-Area wird drastisch vergrößert 609

50 7. WebSockets WebSockets Verbreitung zentrale Nachrichten Realisierung eines Chats Encoder Decoder Bedeutung von JavaScript basiert teilweise auf: [Dit14] A. Ditler, Prototypische Realisierung eines Echtzeit-Webchats als Crossplattform- Applikation auf Basis von Websockets, Hochschule Osnabrück, Bachelorarbeit,

51 WebSockets - Motivation HTTP erlaubt nur die Beantwortung von Client-Anfragen ohne Erweiterung keine Möglichkeit, dass der Server den Client nachträglich ohne erneute Anfrage informiert nur mit Workaround z. B. AJAX und Long-Polling möglich WebSockets erlauben die bidirektionale Kommunikation zwischen Client und Server allgemein: The WebSocket API, W3C Candidate Recommendation, , standardisiert in Java: JSR 356: Java TM API for WebSocket, 611

52 Verbreitung (1/2) aktuell wird Ansatz in vielen Projekten evaluiert, Nutzung hängt von Zielplattformen ab Anmerkung: Abkündigung von Win XP-Support lässt alte IE- Browser verschwinden genauer müssen unterstütze Prokollversionen (ab wann) und Zielplattformen zusammen evaluiert werden Beispiel: Android-Browser erst ab Android 4.4, andere Browser für Android schon eher Beispiel: Web-Seite soll auch zur App auf Handys werden, ein Ansatz mit Apache Cordova / Phonegap, unterstützt nur etwas ältere WebSocket-Version 612

53 Verbreitung (2/2) (Stand Dezember 2014) aktueller Stand: IE ab 10.0 (aktuell 11.0) Firefox ab 11.0 (aktuell 33.0) Chrome ab 16 (aktuell 39.0) Safari ab 7.0 (Aktuell 8.0) Opera ab 12.1 (aktuell 26.0) ios Safari ab 6.1 (aktuell 8.1) Android Browser ab 4.4 (aktuell 37, Nachfolger von 4.4.4) Blackberry Browser ab 7.0 (aktuell 10.0) Chrome for Android ab 33.0 (aktuell 39.0) Firefox for Android ab 26.0 (aktuell 33.0) IE Mobile ab 10.0 (aktuell 11.0) 613

54 grobe Funktionsweise / Potenzial Client und Server in Java möglich, genauso gut können aber Clients in anderen Sprachen geschrieben werden (Server auch) Verbindung mit Server wird über HTTP hergestellt, Server dabei auf Upgrade auf WebSocket-Protokoll befragt typische Adresse: new URI("ws://localhost:1790/hallo/echo") wenn Server Upgrade anbietet, wird bidirektional nutzbare Verbindung aufgebaut (ohne dass diese physikalisch gehalten werden muss) wenn Server kein Upgrade anbietet, ist Ansatz gescheitert es gibt verschiedene Protokoll-Versionen, auch hier muss sich auf eine geeinigt werden 614

55 etwas Hintergrund Auf TCP basierendes Netzwerkprotokoll Bidirektionale Vollduplex Kommunikation Verbindung basiert auf einem einzigen Socket Datenübertragung mit geringer Latenzzeit Datenaustausch: binär, utf-8,, nur Zeichenketten oder Byte-Buffer Websocket-Verbindung: ws:// und wss:// keine Probleme bei Firewalls und Proxy-Servern Referenzimplementierung: Tyrus Alternativen: GNU WebSocket4J, Webbit, Tootallnate 615

56 zentrale Nachrichten Server onopen onmessage onclose onerror Client Verbindungsaufbau onopen senden und empfangen onmessage Verbindungsabbau onclose Fehlerfall onerror eigentliches Protokoll, was in welcher Form ausgetauscht wird, muss von Entwicklern festgelegt werden Begriff Socket kann ernst genommen werden 616

57 Erstes Beispiel (1/7): Gewünscht Client Server send(hallo Client) send(hallo (Bestätigung) 617

58 Erstes Beispiel (2/7): Server public class EchoServer public void onopen(session session, EndpointConfig cfg) { System.out.println("@Server Anfrage URI: " + public void onmessage(string message, Session session) throws IOException { System.out.println("@Server Nachricht: " + message); session.getbasicremote().sendtext("hallo Client"); 618

59 Erstes Beispiel (3/7): Server public void onclose(session session, CloseReason closereason) { System.out.println("@Server CloseReason: " + public void onerror(session session, Throwable thr) { System.out.println("@Server Error: " + thr); 619

60 Erstes Beispiel (4/7): Client public class EchoClient public void onopen(session session, EndpointConfig config) { System.out.println("Id: " + session.getid() + "\nnegotiated: " + session.getnegotiatedsubprotocol() + "\nprotocol Version: " + session.getprotocolversion() + "\nquery String: " + session.getquerystring() + "\nrequesturi: " + session.getrequesturi() + "\nmaxidletimeout:" + session.getmaxidletimeout()); 620

61 Erstes Beispiel (5/7): Client public void onmessage(string message, Session session) throws IOException { System.out.println("@Client empfangen: " + public void onclose(session session, CloseReason closereason) { System.out.println("@Client CloseCode: " + closereason.getclosecode() + "\n@client ReasonPhrase:" + public void onerror(session session, Throwable thr) { System.out.println("@Client Error: " + thr); 621

62 Erstes Beispiel (6/7): Client (3/3) public static void main(string[] args) { WebSocketContainer container = ContainerProvider try (Session session = container.getwebsocketcontainer();.connecttoserver(echoclient.class, URI.create( "ws://localhost:8080/websockethelloworld/echo"))) { session.getbasicremote().sendtext("hello"); session.getbasicremote().sendtext("hello again"); System.out.println("1: " + session.isopen()); session.close(new CloseReason( CloseCodes.NORMAL_CLOSURE, "Schicht")); System.out.println("2: " + session.isopen()); catch (Exception e) { e.printstacktrace(); 622

63 Erstes Beispiel (7/7): Ausgabe Id: 2d80aea7-3d60-4a59-aaeb-56844cbbc25e negotiated: Protocol Version: 13 Query String: null RequestURI: ws://localhost:8080/websockethelloworld/echo MaxIdleTimeout:0 1: CloseCode: ReasonPhrase:Schicht 2: empfangen: Hallo Client Anfrage URI: /WebSocketHelloWorld/echo Nachricht: Hello Nachricht: Hello again CloseReason: CloseReason[1000,Schicht] 623

64 Analyse des ersten Beispiels Client und Server unterscheiden sich im Wesentlichen nur durch in JEE-Container automatisch zum Deployen (läuft) @OnClose und zeigt Symmetrie der Kommunikationspartner wichtige (zu verwaltende) Objekte vom Typ Session Beispiel zeigt, dass es vom Timing abhängt, ob Bestätigung der zweiten Nachricht noch ankommt! keine explizite Nutzung von Threads notwendig; da paralleler Zugriff aber Synchronisation eventuell wichtig 624

65 2. Fallstudie (1/7): Realisierung eines Chats Clients können sich beim Server zum Chatten anmelden jede geschickte Nachricht wird an alle anderen verteilt Abmelden mit Nachricht bye möglich (da wieder nur textbasiert, Überlappungen in Ein- und Ausgabe möglich) Server verwaltet Client-Sessions in einer synchronisierten Collection 625

66 2. Fallstudie (2/7): Server public class ChatServer { private static Set<Session> partner = Collections.synchronizedSet(new public void onopen(session session, EndpointConfig config) { public void onmessage(string msg, Session s) throws IOException { public void onclose(session session, CloseReason closereason) { this.partner.remove(session); 626

67 2. Fallstudie (3/7): Server 2/2 private void sende(string nachricht) { try { // nebenbei aufraeumen List<Session> geschlossen = new ArrayList<>(); for (Session s : this.partner) { if (!s.isopen()) { System.err.println("Geschlossen: " + s.getid()); geschlossen.add(s); else { s.getbasicremote().sendtext(nachricht); this.partner.removeall(geschlossen); System.out.println("Sende " + nachricht + " an " + this.partner.size() + " Klienten"); catch (Throwable e) { e.printstacktrace(); 627

68 2. Fallstudie (4/7): Client public class ChatClient public void onopen(session session, EndpointConfig cfg) { public void onmessage(string msg, Session s) throws IOException { System.out.println("@Client empfangen: " + public void onclose(session session, CloseReason closereason) { System.out.println("abgemeldet"); 628

69 2. Fallstudie (5/7): Client 2/2 public static void main(string[] args) { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); try (Session session = container.connecttoserver(chatclient.class, URI.create("ws://localhost:8080/WebSocketChat/chat"))) { String eingabe= ""; while (!eingabe.tolowercase().equals("bye")){ System.out.print("Beitrag: "); eingabe = new Scanner(System.in).nextLine(); session.getbasicremote().sendtext(eingabe); session.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Schicht")); catch (Exception e) { e.printstacktrace(); 629

70 2. Fallstudie (6/7): Ausgabe (Eingaben markiert) Beitrag: verbunden Wer ist da empfangen: Wer ist empfangen: empfangen: ich empfangen: empfangen: bye empfangen: bye abgemeldet Beitrag: empfangen: Wer ist da ich empfangen: empfangen: ich empfangen: bye empfangen: bye abgemeldet Beitrag: empfangen: Wer ist empfangen: ich ich auch empfangen: ich auch empfangen: bye abgemeldet 630

71 2. Fallstudie (7/7): Ausgabe Server INFO: Sende Wer ist da an 3 Klienten INFO: Sende ich an 3 Klienten INFO: Sende ich auch an 3 Klienten INFO: Sende bye an 3 Klienten INFO: Sende bye an 2 Klienten INFO: Sende bye an 1 Klienten 631

72 Ein- und Auspacken Zum Verschicken von Objekten werden sie in einfache Strings verwandelt hier bietet sich wieder JSON an für benötigte Klassen werden Encoder und Decoder geschrieben, die dem Client und Server bekannt gemacht werden folgendes Beispiel: Austausch von Sprint-Informationen mit JavaScript-Client (sehr elementar gehalten) Auch ByteStreams übertragbar 632

73 Sprint- Fallstudie (1/14): Sprints encoden 1/2 public class SprintsEncoder implements Encoder.TextStream<List<Sprint>> was soll codiert werden public void encode(list<sprint> sprints, Writer writer) { JsonProvider provider = JsonProvider.provider(); JsonArrayBuilder elemente = Json.createArrayBuilder(); for (Sprint s : sprints) { elemente.add(jsonsprint(s, false)); // von REST bekannt JsonObject js = Json.createObjectBuilder().add("sprints", elemente).build(); try (JsonWriter jsonwriter = provider.createwriter(writer)) { jsonwriter.write(js); 633

74 Sprint- Fallstudie (2/14): Sprints encoden public void init(endpointconfig config) public void destroy() { //leider Copy & Paste private JsonObject jsonsprint(sprint s, boolean einzeln) {

75 Sprint- Fallstudie (3/14): Sprint decoden 1/2 was soll decodiert werden public class SprintDecoder implements Decoder.TextStream<Sprint> { private SimpleDateFormat formatter = new public Sprint decode(reader reader){ JsonProvider provider = JsonProvider.provider(); JsonReader jsonreader = provider.createreader(reader); JsonObject js = jsonreader.readobject(); Sprint sprint = new Sprint(); sprint.setmotto(js.getstring("motto")); try { sprint.setstarttermin(formatter.parse(js.getstring("starttermin"))); 635

76 Sprint- Fallstudie (4/14): Sprint decoden 2/2 sprint.setendtermin(formatter.parse(js.getstring("endtermin"))); catch (ParseException ex) { try { sprint.setgeplanteraufwand(js.getint("geplanteraufwand")); catch (Exception e){ sprint.setgeplanteraufwand(integer.parseint(js.getstring("geplanteraufwand"))); return public void init(endpointconfig config) public void destroy() { 636

77 Sprint- Fallstudie (5/14): SprintServer encoders={sprintsencoder.class, decoders={sprintdecoder.class) public class SprintServer implements PersistenzService pers; private static Set<Session> partner = Collections.synchronizedSet(new public void onopen(session session, EndpointConfig cfg) { this.partner.add(session); sende(); // besser nur an einen 637

78 Sprint- Fallstudie (6/14): SprintServer public void onmessage(sprint sprint, Session session) throws IOException { try{ this.pers.persist(sprint); hier wird Decodierung sende(); genutzt catch (Exception e){ // Benachrichtigung an den Client public void onclose(session session, CloseReason cr) { this.partner.remove(session); 638

79 Sprint- Fallstudie (7/14): SprintServer 3/3 public void sende() { try { List<Session> geschlossen = new ArrayList<>(); List<Sprint> sprints = pers.findallsprint(); for (Session s : this.partner) { if (!s.isopen()) { System.err.println("Geschlossen: " + s.getid()); geschlossen.add(s); else { s.getasyncremote().sendobject(sprints); this.partner.removeall(geschlossen); catch (Throwable e) { e.printstacktrace(); 639

80 Sprint- Fallstudie (8/14): JavaScript-Client 1/6 <!DOCTYPE html> <html> <head> <title>websocket Client für Sprints</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript" src="js/ws.js"></script> </head> <body> <form name="felder"> <div id="eingabe"> Motto : <input type="text" id="motto"><br> Starttermin: <input type="text" id="starttermin"><br> Endtermin: <input type="text" id="endtermin"><br> geplanter Aufwand: <input type="text" id="geplanteraufwand"><br> </div> 640

81 Sprint- Fallstudie (9/14): JavaScript-Client 2/6 <div id="button"> <input type="button" value="absenden" onclick="sende();"><br> <input type="button" value="beenden" onclick="ws.close();"> </div> <div id="sprints" style="background-color: white; margin:5px;"> </div> </form> </body> </html> 641

82 Sprint- Fallstudie (10/14): JavaScript-Client 3/6 // Zuerst ueberpruefen, ob der Browser Websocket unterstuetzt // wird am Ende des Scripts gestartet if ("WebSocket" in window) { var ws = new WebSocket("ws://localhost:8080/Sprinter/socketsprint"); //wird bei erfolgreichem Verbindungsaufbau aufgerufen ws.onopen = function() { //alert("open"); ; // wird aufgerufen, wenn Server Daten schickt ws.onmessage = function(event) { // geht ohne eval var objjson = eval("(function() {return " + event.data + ";)()"); document.getelementbyid("sprints").innerhtml = table(objjson.sprints); ; 642

83 Sprint- Fallstudie (11/14): JavaScript-Client 4/6 //wird aufgerufen, wenn Verbindung geschlossen wurde ws.onclose = function() { alert("client beendet Verbindung"); ; // Fehlermeldung ws.onerror = function(error) { alert("ein Fehler ist aufgetretten " + error); ; else { alert("dein Browser ist zu alt"); 643

84 Sprint- Fallstudie (12/14): JavaScript-Client 5/6 function sende() { var sprint = { motto: document.getelementbyid("motto").value, starttermin: document.getelementbyid('starttermin').value, endtermin: document.getelementbyid('endtermin').value, geplanteraufwand: document.getelementbyid('geplanteraufwand').value ; //mit stringify zum JSON Objekt kodieren und abschicken ws.send('' + JSON.stringify(sprint)); //Eingabefelder leeren document.getelementbyid('motto').value = ''; document.getelementbyid('starttermin').value = ''; document.getelementbyid('endtermin').value = ''; document.getelementbyid('geplanteraufwand').value = ''; 644

85 Sprint- Fallstudie (13/14): JavaScript-Client 6/6 function table(data) { var erg = "<table border='1'>"; erg += "<tr><th>id</th><th>motto</th><th>start</th>"; erg += "<th>ende</th><th>geplanter Aufwand</th></tr>"; for (var i = 0; i < data.length; i++) { erg += "<tr style='background-color:" + data[i].farbe + "'>"; erg += "<td>" + data[i].id + "</td>"; erg += "<td>" + data[i].motto + "</td>"; erg += "<td>" + data[i].starttermin + "</td>"; erg += "<td>" + data[i].endtermin + "</td>"; erg += "<td>" + data[i].geplanteraufwand + "</td>"; erg += "</tr>"; erg += "</table>"; return erg; 645

86 Sprint- Fallstudie (14/14): Beispielnutzung 646

87 nächste Schritte Anmerkung: Die Seite ist so mit Code-Injection angreifbar HTML-Client bekommt nicht mit, wenn in JSF-Applikation Sprint bearbeitet wird verschiedene Schritte denkbar Methode sende() von SprintServer wird aufgerufen, wenn ein Sprint-Objekt bearbeitet wird (z. B. in Persistieren einbauen) Persistierung erzeugt Events, wenn Sprint-Objekte bearbeitet werden, SprintServer abonniert diese nächste Folie; nur kleine Änderungen im SprintController von JSF (Änderungen durch REST-Client werden so nicht erkannt) 647

88 Verknüpfung JSF public class SprintController implements Serializable SprintServer server;... public String uebernehmen() { // analog loeschen... server.sende();

89 weitere Überlegung Löschen und Bearbeiten prinzipiell kein Problem: es wird aber ein erweitertes Protokoll benötigt z. B. erste Eigenschaft gibt an, was gemacht werden soll dann würde nicht Sprint-Klasse sondern Befehlsklasse zum Dekodieren im Server genutzt Weiterführend Übertragung von Byte-Streams, z. B, zum Verschicken von Bildern 649

90 Bedeutung von JavaScript Ursprünglich war JavaScript nur Hilfssprache, um kleine Berechnungen und Modifikationen im Browser zu ermöglichen mit HTML 5 wurde JavaScript zur zentralen Sprache des Internets Software-Engineering mit JavaScript steckt noch in den Kinderschuhen keine Klassenbibliothek, keine Standard-Frameworks eine unübersichtliche Menge sehr kreativer Lösungen Beispiel Varianten vom MV*-Pattern viele gute Werkzeuge und Hilfsmittel: JQuery, Jasmine, Istanbul, Karma, Selenium, 650

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

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Das Interface Stateful und Stateless s Programmierung einer Stateful

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de EJB Beispiel JEE Vorlesung 10 Ralf Gitzel ralf_gitzel@hotmail.de 1 Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw.

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2018 Michael Theis, Lehrbeauftragter 2 Servlet API Websockets JSF JAX-WS JAX-RS JMS JAXB JSON-P JEE Enterprise Application

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

WebService in Java SE und EE

WebService in Java SE und EE Schlüsselworte Java, JAX-WS, JAX-RS, JAXB, XML. Einleitung WebService in Java SE und EE Wolfgang Nast MT AG Ratingen Es werden die Mölichkeiten von WebServices in Java SE und EE, mit SOAP und REST gezeigt.

Mehr

Contexts and Dependency Injection. W3L AG info@w3l.de

Contexts and Dependency Injection. W3L AG info@w3l.de 1 Contexts and Dependency Injection W3L AG info@w3l.de 2015 2 Inhaltsverzeichnis Teil 1: Motivation Teil 2: Inversion of Control Teil 3: Contexts and Dependency Injection Teil 4: Beispiel zurück 3 Motivation

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Beispiel: DB-Mock (1/7)

Beispiel: DB-Mock (1/7) Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Der lokale und verteilte Fall

Der lokale und verteilte Fall Lokale Beans Der lokale und verteilte Fall RemoteClient Lokaler Client (JSP) RemoteSession/Entity-Bean Lokale Session/Entity-Bean 2 Lokale Beans Die bisher vorgestellten EJBswaren immer in der Lage auf

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade HACK #76 Hack APIs mit dem Façade-Muster vereinfachen Durch die Verwendung des Façade-Entwurfsmusters können Sie die anderen Programmierern zugängliche API vereinfachen. #76 Dies ist ein Muster, von dem

Mehr

Programmiermethodik. Übung 13

Programmiermethodik. Übung 13 Programmiermethodik Übung 13 Sommersemester 2010 Fachgebiet Software Engineering andreas.scharf@cs.uni-kassel.de Agenda Vorstellung Musterlösung HA9 Mancala Showroom Client/Server Kommunikation in Java

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation.

Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation. Ihre Welt spricht teamspace! Anleitung zur Synchronisation 1. Schritt: Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation.

Mehr

Web Sockets mit HTML5. Quelle: www.html5rocks.com/de

Web Sockets mit HTML5. Quelle: www.html5rocks.com/de Web Sockets mit HTML5 Quelle: www.html5rocks.com/de Intensive Client-Server-Kommunikation: Beispiele Online-Spiele mit mehreren Mitspielern Chat-Anwendungen Live-Sport-Ticker Echtzeit-Aktualisierungen

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

Beschreibung E-Mail Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Beschreibung E-Mail Regeln z.b. Abwesenheitsmeldung und Weiterleitung Outlook Weiterleitungen & Abwesenheitsmeldungen Seite 1 von 6 Beschreibung E-Mail Regeln z.b. Abwesenheitsmeldung und Weiterleitung Erstellt: Quelle: 3.12.09/MM \\rsiag-s3aad\install\vnc\email Weiterleitung

Mehr

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser Seite 1 von 14 Cookie-Einstellungen verschiedener Browser Cookie-Einstellungen verschiedener Browser, 7. Dezember 2015 Inhaltsverzeichnis 1.Aktivierung von Cookies... 3 2.Cookies... 3 2.1.Wofu r braucht

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

FORUM HANDREICHUNG (STAND: AUGUST 2013)

FORUM HANDREICHUNG (STAND: AUGUST 2013) FORUM HANDREICHUNG (STAND: AUGUST 2013) Seite 2, Forum Inhalt Ein Forum anlegen... 3 Forumstypen... 4 Beiträge im Forum schreiben... 5 Beiträge im Forum beantworten... 6 Besondere Rechte der Leitung...

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

Outlook Web App 2010 Kurzanleitung

Outlook Web App 2010 Kurzanleitung Seite 1 von 6 Outlook Web App 2010 Einleitung Der Zugriff über Outlook Web App ist von jedem Computer der weltweit mit dem Internet verbunden ist möglich. Die Benutzeroberfläche ist ähnlich zum Microsoft

Mehr

BFV Widgets Kurzdokumentation

BFV Widgets Kurzdokumentation BFV Widgets Kurzdokumentation Mit Hilfe eines BFV-Widgets lassen sich die neuesten Ergebnisse und die aktuellen Tabellen des BFV auf der eigenen nicht kommerziellen Webseite mit wenig Aufwand einbeten.

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

Mehr

Übungen zu Softwaretechnik

Übungen zu Softwaretechnik Prof. Dr. Dr. h.c. M. Broy Lösungsblatt 11 Dr. H. Ehler, S. Wagner 23. Januar 2004 Übungen zu Softwaretechnik Aufgabe 16 Qualitätseigenschaften Broker-Pattern Beurteilen Sie das in Aufgabe 15 benutzte

Mehr

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten Anleitung zum Login über die Mediteam- Homepage und zur Pflege von Praxisnachrichten Stand: 18.Dezember 2013 1. Was ist der Mediteam-Login? Alle Mediteam-Mitglieder können kostenfrei einen Login beantragen.

Mehr

Kleines Handbuch zur Fotogalerie der Pixel AG

Kleines Handbuch zur Fotogalerie der Pixel AG 1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

Mehr

Adami CRM - Outlook Replikation User Dokumentation

Adami CRM - Outlook Replikation User Dokumentation Adami CRM - Outlook Replikation User Dokumentation Die neue Eigenschaft der Adami CRM Applikation macht den Information Austausch mit Microsoft Outlook auf vier Ebenen möglich: Kontakte, Aufgaben, Termine

Mehr

Beispiel droidremoteppt

Beispiel droidremoteppt Arthur Zaczek Nov 2014 1 Beispiel droidremoteppt 1.1 Beschreibung Powerpoint soll mit ein Android Handy über Bluetooth gesteuert werden Folien wechseln (Vor/Zurück) Folien am Handy darstellen Am Handy

Mehr

Factory Method (Virtual Constructor)

Factory Method (Virtual Constructor) Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte

Mehr

2015-06-11 Tagesprogramm

2015-06-11 Tagesprogramm 1 2015-06-11 Tagesprogramm Design-by-Contract 2 Vertragspartner Anbieter (Server) bietet Leistungen (Services) an Kunde (Client) nimmt von Anbietern angebotene Leistungen in Anspruch Details der Inanspruchnahme

Mehr

Lieber SPAMRobin -Kunde!

Lieber SPAMRobin -Kunde! Lieber SPAMRobin -Kunde! Wir freuen uns, dass Sie sich für SPAMRobin entschieden haben. Mit diesem Leitfaden möchten wir Ihnen die Kontoeinrichtung erleichtern und die Funktionen näher bringen. Bitte führen

Mehr

Übungen zur Softwaretechnik

Übungen zur Softwaretechnik Technische Universität München Fakultät für Informatik Lehrstuhl IV: Software & Systems Engineering Markus Pister, Dr. Bernhard Rumpe WS 2002/2003 Lösungsblatt 9 17. Dezember 2002 www4.in.tum.de/~rumpe/se

Mehr

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Vermeiden Sie es sich bei einer deutlich erfahreneren Person dranzuhängen, Sie sind persönlich verantwortlich für Ihren Lernerfolg. 1 2 3 4 Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg. Gerade beim Einstig in der Programmierung muss kontinuierlich

Mehr

Applet Firewall und Freigabe der Objekte

Applet Firewall und Freigabe der Objekte Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

ModeView Bedienungsanleitung

ModeView Bedienungsanleitung ModeView Bedienungsanleitung Inhaltsverzeichnis 1. Easy Photo Software... 2 1.1. Den Zugang zu ModeView prüfen... 2 1.1.1. Kein Zugang... 2 1.1.2. Zugang in Ordnung... 2 1.2. Hochladen von Bildern und

Mehr

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

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. Benutzerhandbuch Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer. 1 Startseite Wenn Sie die Anwendung starten, können Sie zwischen zwei Möglichkeiten wählen 1) Sie können eine Datei für

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Kurzanleitung zu. von Daniel Jettka 18.11.2008

Kurzanleitung zu. von Daniel Jettka 18.11.2008 Kurzanleitung zu Tigris.org Open Source Software Engineering Tools von Daniel Jettka 18.11.2008 Inhaltsverzeichnis 1.Einführung...1 2.Das Projektarchivs...3 2.1.Anlegen des Projektarchivs...3 2.2.Organisation

Mehr

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

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1): Supportanfrage ESN Bitte füllen Sie zu jeder Supportanfrage diese Vorlage aus. Sie helfen uns damit, Ihre Anfrage kompetent und schnell beantworten zu können. Verwenden Sie für jedes einzelne Thema jeweils

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe... php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...7 3.Zugriff auf mysql Daten...11 Verteilte Systeme: php.sxw Prof.

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Benutzerverwaltung Business- & Company-Paket

Benutzerverwaltung Business- & Company-Paket Benutzerverwaltung Business- & Company-Paket Gemeinsames Arbeiten mit der easyfeedback Umfragesoftware. Inhaltsübersicht Freischaltung des Business- oder Company-Paketes... 3 Benutzerverwaltung Business-Paket...

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Kommunikations-Parameter

Kommunikations-Parameter KNX App knxpresso für Android Tablets/Phones Kommunikations-Parameter Ausgabe Dokumentation: Mai. 2015 Doku Version V1.0.0 - Seite 1/8 Inhaltsverzeichnis 1.1 Nützliche Links... 3 1.2 Beschreibung der Kommunikations-Datei...

Mehr

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

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Die Dateiablage Der Weg zur Dateiablage

Die Dateiablage Der Weg zur Dateiablage Die Dateiablage In Ihrem Privatbereich haben Sie die Möglichkeit, Dateien verschiedener Formate abzulegen, zu sortieren, zu archivieren und in andere Dateiablagen der Plattform zu kopieren. In den Gruppen

Mehr

Tevalo Handbuch v 1.1 vom 10.11.2011

Tevalo Handbuch v 1.1 vom 10.11.2011 Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche

Mehr

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

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite. ewon - Technical Note Nr. 003 Version 1.2 Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite. Übersicht 1. Thema 2. Benötigte Komponenten 3. Downloaden der Seiten und aufspielen auf

Mehr

Multivariate Tests mit Google Analytics

Multivariate Tests mit Google Analytics Table of Contents 1. Einleitung 2. Ziele festlegen 3. Einrichtung eines Multivariate Tests in Google Analytics 4. Das JavaScript 5. Die Auswertung der Ergebnisse Multivariate Tests mit Google Analytics

Mehr

Benachrichtigungsmöglichkeiten in SMC 2.6

Benachrichtigungsmöglichkeiten in SMC 2.6 Benachrichtigungsmöglichkeiten in SMC 2.6 Support April 2011 www.avira.de Irrtümer und technische Änderungen vorbehalten Avira GmbH 2011 Benachrichtigungsmöglichkeiten in SMC 2.6 Folgende Benachrichtigungsmöglichkeiten

Mehr

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E S TAND N OVEMBE R 2012 HANDBUCH T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E Herausgeber Referat Informationstechnologie in der Landeskirche und im Oberkirchenrat Evangelischer Oberkirchenrat

Mehr

BillSAFE Payment Layer Integration Guide

BillSAFE Payment Layer Integration Guide BillSAFE Payment Layer Integration Guide letzte Aktualisierung: 10.06.2013 Inhaltsverzeichnis 1 Vorwort...2 1.1 Inhalt...2 1.2 Zielgruppe...2 1.3 Voraussetzungen...2 1.4 Feedback...2 1.5 Versionshistorie...3

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

teamsync Kurzanleitung

teamsync Kurzanleitung 1 teamsync Kurzanleitung Version 4.0-19. November 2012 2 1 Einleitung Mit teamsync können Sie die Produkte teamspace und projectfacts mit Microsoft Outlook synchronisieren.laden Sie sich teamsync hier

Mehr

Windows 10 > Fragen über Fragen

Windows 10 > Fragen über Fragen www.computeria-olten.ch Monatstreff für Menschen ab 50 Merkblatt 103 Windows 10 > Fragen über Fragen Was ist das? Muss ich dieses Upgrade machen? Was bringt mir das neue Programm? Wie / wann muss ich es

Mehr

Grafstat Checkliste Internetbefragung

Grafstat Checkliste Internetbefragung Grafstat Checkliste Internetbefragung ( A ) Datensammelpunkt im Formular eintragen ( B ) Befragung auf dem Datensammelpunkt anmelden ( C ) Formular ins Internet stellen (z.b. Homepage) ( D ) Befragung

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

PAUL App. Anleitung für Studierende und Lehrende

PAUL App. Anleitung für Studierende und Lehrende PAUL App Anleitung für Studierende und Lehrende Stand: 9. Dezember 2014 1 Liebe Studierende, liebe Lehrende, mit der Einführung der PAUL App können verschiedene Funktionalitäten der PAUL Webseite einfacher

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2

Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2 Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2 Hier finden Sie die Beschreibung der letzten Änderungen und Aktualisierungen. Bei Fragen und Anregungen steht das EDI-Real-Team unter +43 732

Mehr

Web Interface für Anwender

Web Interface für Anwender Ing. G. Michel Seite 1/5 Web Interface für Anwender 1) Grundlagen: - Sie benötigen die Zugangsdaten zu Ihrem Interface, welche Sie mit Einrichtung des Servers durch uns oder Ihren Administrator erhalten

Mehr

Programmieren 2 (Prof. Hasbargen) Klausur

Programmieren 2 (Prof. Hasbargen) Klausur Programmieren 2 (Prof. Hasbargen) 1 Klausur Aufgabe 1 (10 Punkte) Dynamisierung von HTML-Seiten HTML-Seiten sind eine gängige Art und Weise, Informationen darzustellen. Nennen Sie die Gründe, welche Vorteile

Mehr

Informationen zum neuen Studmail häufige Fragen

Informationen zum neuen Studmail häufige Fragen 1 Stand: 15.01.2013 Informationen zum neuen Studmail häufige Fragen (Dokument wird bei Bedarf laufend erweitert) Problem: Einloggen funktioniert, aber der Browser lädt dann ewig und zeigt nichts an Lösung:

Mehr

Step by Step Remotedesktopfreigabe unter Windows Server 2003. von Christian Bartl

Step by Step Remotedesktopfreigabe unter Windows Server 2003. von Christian Bartl Step by Step Remotedesktopfreigabe unter Windows Server 2003 von Remotedesktopfreigabe unter Windows Server 2003 Um die Remotedesktopfreigabe zu nutzen muss diese am Server aktiviert werden. Außerdem ist

Mehr

Client/Server-Systeme

Client/Server-Systeme Frühjahrsemester 2011 CS104 Programmieren II / CS108 Programmier-Projekt Java-Projekt Kapitel 3: /Server-Architekturen H. Schuldt /Server-Systeme Ein zweischichtiges /Server-System ist die einfachste Variante

Mehr

Modul 2: Automatisierung des Posteingangs - Regel- und Abwesenheits-Assistent

Modul 2: Automatisierung des Posteingangs - Regel- und Abwesenheits-Assistent Outlook 2003 - Aufbaukurs 19 Modul 2: Automatisierung des Posteingangs - Regel- und Abwesenheits-Assistent Wie kann ich die Bearbeitung von Nachrichten automatisieren? Wie kann ich Nachrichten automatisch

Mehr

vorab noch ein paar allgemeine informationen zur de-mail verschlüsselung:

vorab noch ein paar allgemeine informationen zur de-mail verschlüsselung: Kurzanleitung De-Mail Verschlüsselung so nutzen sie die verschlüsselung von de-mail in vier schritten Schritt 1: Browser-Erweiterung installieren Schritt 2: Schlüsselpaar erstellen Schritt 3: Schlüsselaustausch

Mehr

Übungsaufgabe Transaktion als Middleware

Übungsaufgabe Transaktion als Middleware Übungsaufgabe Transaktion als Middleware und Java Persistence API Client/Server Abstraktes Komponentenmodell Entscheidende Punkte Erweiterung der Invoke-Methode Context-Verwaltung Transaktionsbehandlung

Mehr

GeoPilot (Android) die App

GeoPilot (Android) die App GeoPilot (Android) die App Mit der neuen Rademacher GeoPilot App machen Sie Ihr Android Smartphone zum Sensor und steuern beliebige Szenen über den HomePilot. Die App beinhaltet zwei Funktionen, zum einen

Mehr

Enigmail Konfiguration

Enigmail Konfiguration Enigmail Konfiguration 11.06.2006 Steffen.Teubner@Arcor.de Enigmail ist in der Grundkonfiguration so eingestellt, dass alles funktioniert ohne weitere Einstellungen vornehmen zu müssen. Für alle, die es

Mehr

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 robotron*e count robotron*e sales robotron*e collect Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 Seite 2 von 5 Alle Rechte dieser Dokumentation unterliegen dem deutschen Urheberrecht. Die Vervielfältigung,

Mehr

Wiederholung: Beginn

Wiederholung: Beginn B) Webserivces W3C Web Services Architecture Group: "Ein Web Service ist eine durch einen URI eindeutige identifizierte Softwareanwendung, deren Schnittstellen als XML Artefakte definiert, beschrieben

Mehr

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert: Firewall für Lexware professional konfigurieren Inhaltsverzeichnis: 1. Allgemein... 1 2. Einstellungen... 1 3. Windows XP SP2 und Windows 2003 Server SP1 Firewall...1 4. Bitdefender 9... 5 5. Norton Personal

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Client-Server-Anwendungen: Vom passiven (shared state) Monitor zum aktiven Monitor Monitor (Hoare, Brinch-Hansen,

Mehr

Gesicherte Prozeduren

Gesicherte Prozeduren Gesicherte Prozeduren Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln zurückgeliefert.

Mehr

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000 Folgende Anleitung beschreibt, wie Sie ein bestehendes Postfach in Outlook Express, bzw. Microsoft Outlook bis Version 2000 einrichten können. 1. Öffnen Sie im Menü die Punkte Extras und anschließend Konten

Mehr

Dealer Management Systeme. Bedienungsanleitung. Freicon Software Logistik (FSL) für Updates

Dealer Management Systeme. Bedienungsanleitung. Freicon Software Logistik (FSL) für Updates Bedienungsanleitung Freicon Software Logistik (FSL) für Updates Inhaltsübersicht 1 Allgemeine Voraussetzungen 3 2 Datensicherung 4 3 Download des Updates 6 4 Update 8 5 Programm Update 11 Kundeninformation

Mehr

HTBVIEWER INBETRIEBNAHME

HTBVIEWER INBETRIEBNAHME HTBVIEWER INBETRIEBNAHME Vorbereitungen und Systemvoraussetzungen... 1 Systemvoraussetzungen... 1 Betriebssystem... 1 Vorbereitungen... 1 Installation und Inbetriebnahme... 1 Installation... 1 Assistenten

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Schiller-Gymnasium Hof 20.12.2004

Schiller-Gymnasium Hof 20.12.2004 Erstellen eines HTML-Dokumentes Zum Erstellen einer Homepage benötigen wir lediglich einen Editor. Zum Ansehen der fertigen Site benötigen wir wir natürlich auch einen Browser, z.b. Firefox oder Netscape

Mehr

Handbuch Groupware - Mailserver

Handbuch Groupware - Mailserver Handbuch Inhaltsverzeichnis 1. Einführung...3 2. Ordnerliste...3 2.1 E-Mail...3 2.2 Kalender...3 2.3 Kontakte...3 2.4 Dokumente...3 2.5 Aufgaben...3 2.6 Notizen...3 2.7 Gelöschte Objekte...3 3. Menüleiste...4

Mehr

Das Modul Hilfsmittel ermöglicht den Anwender die Verwaltung der internen Nachrichten, Notizen, Kontakte, Aufgaben und Termine.

Das Modul Hilfsmittel ermöglicht den Anwender die Verwaltung der internen Nachrichten, Notizen, Kontakte, Aufgaben und Termine. Hilfsmittel Das Modul Hilfsmittel ermöglicht den Anwender die Verwaltung der internen Nachrichten, Notizen, Kontakte, Aufgaben und Termine. Interne Nachrichten Mit Hilfe der Funktion Interne Nachrichten

Mehr