6. Contexts and Dependency Injection
|
|
- Joachim Armbruster
- vor 8 Jahren
- Abrufe
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
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
MehrEinfü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
MehrEJB 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.
MehrFWP 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
MehrJava: 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
MehrWebService 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.
MehrContexts 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
MehrVerhindert, 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:
MehrBeispiel: 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
MehrSoftware 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
MehrDer 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
MehrObjektorientierte 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
MehrEinfü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
MehrLog 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
MehrProgrammiermethodik. Ü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
MehrProgrammieren 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
MehrSuche 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
MehrLoggen 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.
MehrWeb 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
MehrZwischenablage (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
MehrBeschreibung 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
MehrSeite 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
MehrSANDBOXIE 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:
MehrDelegatesund Ereignisse
Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses
MehrFORUM 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...
MehrBinä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
MehrOP-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
MehrJavakurs 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,
MehrIm 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:
MehrOutlook 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
MehrBFV 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.
MehrSichtbarkeit & 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
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
MehrAnleitung 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.
MehrKleines 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
MehrObjektorientierte 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 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,
MehrAdami 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
MehrBeispiel 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
MehrFactory 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
Mehr2015-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
MehrLieber 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
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
MehrVermeiden 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
MehrApplet 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
MehrObjektorientierte 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
MehrModeView 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
MehrBenutzerhandbuch. 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
MehrFolge 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
MehrKurzanleitung 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
MehrVersion 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
MehrInhalt. 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...
Mehrphp 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.
MehrFachgebiet 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
MehrBenutzerverwaltung 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...
MehrDrei-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
MehrProgrammierkurs 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
MehrKommunikations-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...
MehrEs 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
MehrObjektorientierte 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)
MehrKlausur 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-
MehrDie 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
MehrTevalo 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
MehrUniversal 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
MehrMultivariate 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
MehrBenachrichtigungsmö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
MehrS 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
MehrBillSAFE 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
MehrJava 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
Mehrteamsync 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
MehrWindows 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
MehrGrafstat 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
MehrPrimzahlen 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
MehrPAUL 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
MehrVorkurs 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:
MehrUpdatebeschreibung 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
MehrWeb 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
MehrProgrammieren 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
MehrInformationen 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:
MehrStep 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
MehrClient/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
MehrModul 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
Mehrvorab 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 und Java Persistence API Client/Server Abstraktes Komponentenmodell Entscheidende Punkte Erweiterung der Invoke-Methode Context-Verwaltung Transaktionsbehandlung
MehrGeoPilot (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
MehrEnigmail 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
Mehrrobotron*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,
MehrWiederholung: 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
MehrFolgende 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
MehrVerteilte 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,
MehrGesicherte 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.
MehrEinrichten 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
MehrDealer 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
MehrHTBVIEWER 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 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
MehrSchiller-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
MehrHandbuch 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
MehrDas 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