Dünner Client, fettes GUI

Größe: px
Ab Seite anzeigen:

Download "Dünner Client, fettes GUI"

Transkript

1 Sonderdruck Rich Thin Clients in der Praxis am von Canoo ULC von Thomas Studer Dünner Client, fettes GUI Wenn es um das Look & Feel und um den Bedienungskomfort geht, besteht immer noch eine große Kluft zwischen lokal installierten Single-User-Anwendungen und Mehrbenutzersystemen. Die Anwender haben sich an die Benutzerfreundlichkeit von Fat Clients gewöhnt zu Recht. Will man bei der Entwicklung einer webbasierten Client/Server-Anwendung die Erwartungen des Anwenders erfüllen, stellt sich die Gretchenfrage: Wie kann ich den Wunsch nach einem attraktiven GUI mit den Anforderungen einer verteilten Mehrbenutzeranwendung vereinen? Die Wahl der richtigen Technologien, Entwicklungsprozesse und Architektur ist entscheidend. Ein gutes Design, verbunden mit der richtigen Technologie, bestimmt den Erfolg meiner Anwendung. Vor knapp zwei Jahren haben wir bei uns in der Firma entschieden, eine webbasierte Zeit- und Projekterfassungsanwendung zu entwickeln. Das System sollte über ein attraktives GUI verfügen, das mehr an eine Office-Anwendung erinnert als an eine typische Webanwendung. Es musste aber eine Webanwendung bleiben, auf die mit jedem Browser aus dem Internet oder Intranet mittels HTTP/HTTPS zugegriffen werden kann. Die zu verwendenden Technologien sollten nicht nur clientseitig, sondern auch serverseitig plattformunabhängig sein. Und nicht zuletzt suchten wir nach einer stabilen, etablierten Technologie, die den Entwickler vor den Komplexitäten der Client/Server-Programmierung wie Kommunikation oder Session-Management abschirmt. Das Umsetzen von schwierigen Use Cases auf eine Art, dass sie für den Anwender (nahezu) selbsterklärend sind, ist schon zeitaufwendig sowie kostspielig genug. Für unsere Anwendung galt es also, eine Architektur zu definieren und die nötigen Technologien zu wählen. Aufgrund persönlicher Erfahrungen fiel die Wahl schnell auf Java als Implementierungssprache. Java erfüllt die wichtige Anforderung, dass unsere Serverkomponenten auf unterschiedlichen Plattformen laufen. Javas write once, run anywhere -Ansatz wenn auch in den späten 90er Jahren speziell im Bereich GUI-Entwicklung etwas in Bedrängnis geraten hat sich zu- Client-Technologie UltraLightClient (ULC) von Canoo [2]. ULC ist ein Thin-Client- GUI-Entwicklungsframework, das dem Programmierer auf dem Server ein Programmiermodell bietet, welches dem eines Fat Client entspricht [3]. Nach sorgfältiger Evaluation entschieden wir uns schließlich dafür. Abbildung 1 zeigt Timeanchor in Aktion. Es handelt sich um das Timesheet für den Mai mit gleichzeitig geöffneter Projektliste. Zellen im Timesheet lassen sich direkt in gewohnter Spreadsheet-Manier bearbeiten. Um TableTree-Komponenten darzustellen, stellt ULC eine eigene Table- Tree-Klasse zur Verfügung. Das manuelle Koppeln einer Tree- mit einer Tablemindest für uns voll erfüllt. Unsere Timeanchor genannte Anwendung [1] läuft inzwischen erfolgreich unter Windows, Linux, Solaris und Mac OS X, ohne dass wir irgendwann eine einzige Zeile Java-Code anpassen mussten. Eine weitere grundsätzliche Architekturentscheidung war die Aufteilung der Anwendung in separate Schichten für die Präsentations- und die Business-Logik. Weitere wichtige Anforderungen waren die feinkörnige Skalierbarkeit des Servers und die Flexibilität bei der Integration unserer Anwendung in bestehende Umgebungen und Sicherheitskonzepte. Bei der Wahl des Frameworks für die Implementierung des GUI fiel unser Augenmerk auf die Thin- Abb. 1: Timeanchor mit zwei offenen Ansichten (Internal Frames) und dem Kontext- Menü für das Timesheet

2 Komponente, wie dies in Swing nötig ist, bleibt dem Programmierer erspart. Wie durch Abbildung 1 ersichtlich wird, läuft hier die ULC-Anwendung als Applet in einem Browser-Fenster. ULC eine Übersicht Ein von Canoo für ihre Technologie verwendetes Schlagwort ist Server-side Swing [4]. Die Idee ist, dass man dem Anwender ein mächtiges, Swing-basiertes GUI zur Verfügung stellt, welches bezüglich Deployment und Unterhalt alle Vorteile von einer webbasierten Thin-Client-Architektur aufweist. Auf der anderen Seite ermöglicht man, die Anwendung auf eine Art und Weise zu realisieren, die mehr dem Entwickeln eines Fat Client entspricht. Es Listing 1 import javax.swing.*; public class HelloSwing public void start() JFrame frame = new JFrame( Hello World ); frame.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); frame.getcontentpane().add(new JLabel ( Hello World! )); frame.setsize(170, 60); frame.setvisible(true); public static void main(string[] args) new HelloSwing().start(); Abb. 2: Serverseitiges Swing in ULC dank dem Half-Object Pattern werden so die Vorteile beider Welten kombiniert, ohne dass die Nachteile mitgenommen werden. Ein großes Versprechen. Im Folgenden wird gezeigt, wie ULC es zu halten vermag. Half-Objects Ein in ULC angewandtes wichtiges Design Pattern ist das Half-Object + Protocol Pattern von Gerard Meszaros [5]. Im Fall von ULC wird jede auf dem Client angezeigte Swing-Komponente mit einem ebenfalls Listing 2 import com.ulcjava.base.application.abstractapplication; import com.ulcjava.base.application.ulcframe; import com.ulcjava.base.application.ulclabel; import com.ulcjava.base.development.developmentrunner; public class HelloULC extends AbstractApplication public void start() ULCFrame frame = new ULCFrame( Hello World ); frame.setdefaultcloseoperation(ulcframe. TERMINATE_ON_CLOSE); frame.add(new ULCLabel( Hello World! )); frame.setsize(170, 60); frame.setvisible(true); public static void main(string[] args) DevelopmentRunner.setApplicationClass (HelloULC.class); DevelopmentRunner.setUseGui(false); DevelopmentRunner.main(args); auf dem Client liegenden Half-Object gekoppelt. Die zweite Hälfte der jeweiligen Half-Objects kommt dann, durch einen Kommunikationspfad verbunden, auf dem Server zu liegen. Der Entwickler programmiert seine Präsentationslogik gegen die serverseitigen Half-Objects und ULC kümmert sich für den Entwickler transparent um die nötige Kommunikation und das Abbilden des programmierten GUI auf dem Client. Der Entwickler schreibt sein Programm in der gleichen Weise, wie er das für eine Fat-Client-Anwendung machen würde. Bei der Ausführung läuft aber sein kompletter Code auf dem Server ab. Der einzige Code, der auf dem Client vorhanden sein muss, ist eine kleine, etwa 400 K große Laufzeitbibliothek. Diese Runtime ist absolut generisch (vergleichbar mit einem Browser- Plug-in) und somit unabhängig von dem auf dem Server ausführenden Code. In der Praxis bedeutet das, dass eine ULC-Anwendung, die auf dem Client als Applet zur Ausführung kommt (eine von drei möglichen Client-Deployment-Methoden) unabhängig von dessen Größe und Komplexität auf dem Client immer nur rund 400 K Java-Code benötigt. Dank der kleinen ULC Runtime und da bei Änderungen oder Erweiterungen des Server-Codes die auf dem Client gecachten JAR-Files nicht verändert werden müssen, wird das Applet-Deployment-Modell für komplexe Anwendungen selbst bei einer kleinen Bandbreite plötzlich praktikabel. Außer einer JRE wird zum Ausführen von ULC-Anwendungen auf den Client-Computern keine weitere Software benötigt. Das explizite Verteilen einer ULC-Anwendung entfällt. Es erfolgt durch den Browser bzw. Web Start automatisch. Hello ULC Wie sieht das in der Praxis aus? Listing 1 zeigt ein Hello World -Programm für Swing. Listing 2 zeigt das gleiche Programm für ULC. Als einigermaßen erfahrener Swing-Programmierer hat man keine Probleme, auf ULC umzustellen. Die Grundkonzepte, die Widget- und das Event-Modell sind gleich oder sehr ähnlich. Alle relevanten Swing- existieren auch in ULC, in der Regel mit einem ULC-Präfix versehen, und lassen sich, mit

3 i sowie der besseren Lesbarkeit. class EinWert<T> private T var; T getelem() return var; EinWert(T wert) var = wert; Stack st = new Stack(); st.push(new Integer(10)); st.push( Neues Element ); stg.push(new Integer(100)); einmal! AUF1, AUF2; <Variablendeklarationen> <Methodendeklarationen> public class Aufz public static final int AUF1 = 10; public static final int AUF2 = 11; public enum Wochentage private final int wert; public int value() return wert; ; Wochentage wt = Wochentage.MONTAG; for(wochentage wt: Wochentage.values()) System.out.println(wt); System.out.println(wt); switch(tag) case MONTAG: case DIENSTAG: case MITTWOCH: import static.interface.*; import static.klasse.*; int abswert = Math.abs(-100); // Datei package xyz; public class Konstanten public static final int KONSTANTE1 = 10; public static final int KONSTANTE2 = 11; // Datei import xyz.*; int i = Konstanten. KONSTANTE1 * 10; // Datei import xyz.*; class xyz implements Konstanten int i = KONSTANTE1 * 10; import static.math.*; int abswert = abs(-100); // Datei public class Konstanten // Datei import xyz.konstanten.*; int i = KONSTANTE1 * 10; Collection coll = ArrayList al = new ArrayList(); al.add(new Integer(10)); al.add(new Integer(11)); for(object o: al) System.out.println((Integer)o); int feld[] = 10, 11, 12; for(int i: feld) System.out.println(i); Integer getint(integer value) int i = value.intvalue(); return new Integer(i); Integer getint(integer value) int i = value; return i; System.out.println(getInt(10)); <Bezeichner> <Type> Memberfunction() [default wert]; <Type> Memberfunction() [default wert]; <Type> ) <Bezeichner> String value(); ToDo String Text() default xxxx ) public <Type> xxxx ) public <Type> Methodenname() Methoden. <Bezeichner>(wert1) <Bezeichner>(wert1, wert2) <Bezeichner>(wert1, wert2, wert3) int summe(int summanden[]) int summe(int summanden) int ergebnis = 0; for(int summand: summanden) ergebnis = ergebnis + summand; return ergebnis; System.out.println(summe(10, 11, 12)); Es wurden Erweiterungen für die Arbeit mit Umgebungsvariablen, der Zeitbestimmung, dem Zugriff auf Systemeigenschaften und Channels hinzugefügt. System Java Compiler javac public static Channel inheritedchannel() public static long nanotime() Java Interpreter java java.util JavaDoc javadoc Formatter Scanner String Scanner scan = new Scanner(System.in); int i = scan.nextint(); double d = scan.nextdouble(); String s2 = scan.next(); scan.close(); Object args) java.util Queue EnumSet EnumMap public static boolean disjoint Arrays public static int hashcode(long[] a) javax.imageio.plugins.bmp BMPImageWriteParam Siehe Sprachneuheiten..annotation Annotation ElementType RetentionPolicy Documented Inherited Retention Target Deprecated Overrides super T> c, T a) (Comparator<T> cmp) pack200 --repack JARDatei pack200 JARZiel.pack.gz JAROriginal unpack200 PackDatei.pack.gz JARDatei java.util.jar Pack200.Packer Pack200.Unpacker Pack200 Klasse Thread public long getid() System.out.println(e); java.awt PointerInfo public GraphicsDevice getdevice() public Point getlocation() MouseInfo public static int getnumberofbuttons() public static PointerInfo getpointerinfo() Window public final boolean isalwaysontop() java.awt.datatransfer Clipboard Vermischtes getallstacktraces() AWT Abstract Window Toolkit Architecture EJB Enterprise JavaBeans GSS Generic Security Service IFR Interface Repository JAAPI Java Accessibility API Service Klasse ProcessBuilder pb.directory( C:\Test ); Process p = pb.start(); java.net CacheRequest CacheResponse CookieHandler InetAddress public boolean isreachable(int timeout) Proxy ProxySelector ResponseCache SecureCacheResponse Authenticator.RequestorType Proxy.Type Es wurde über neue Methoden ein verbesserter Zugriff auf Namen ermöglicht und es gibt weitere zur Unterstützung des LDAP-Protokolls. javax.naming NameClassPair public String getnameinnamespace() javax.naming.ldap BasicControl LdapName ManageReferralControl PagedResultsControl PagedResultsResponseControl Rdn SortControl SortKey SortResponseControl JDI Java Debug Interface JFC Java Foundation Classes JMXMP JMX Messaging Protocol JNI Java Native Interface Instrumentation Services JTS Java Transaction Service JVM Java Virtual Machine MBeans Managed Beans ORB Object Request Broker angeboten. java.util.concurrent BlockingQueue Callable CompletionService ConcurrentMap Delayed Executor ExecutorService Future RejectedExecutionHandler ScheduledExecutorService ScheduledFuture ThreadFactory AbstractExecutorService ArrayBlockingQueue ConcurrentHashMap ConcurrentLinkedQueue CopyOnWriteArrayList CopyOnWriteArraySet CountDownLatch CyclicBarrier DelayQueue Exchanger << ExecutorCompletionService Executors FutureTask LinkedBlockingQueue PriorityBlockingQueue ScheduledThreadPoolExecutor Semaphore SynchronousQueue ThreadPoolExecutor ThreadPoolExecutor.AbortPolicy ThreadPoolExecutor.CallerRunsPolicy ThreadPoolExecutor.DiscardOldestPolicy ThreadPoolExecutor.DiscardPolicy TimeUnit java.util.concurrent.atomic AtomicBoolean AtomicInteger AtomicIntegerArray AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater AtomicStampedReference java.util.concurrent.locks Condition Lock ReadWriteLock AbstractQueuedSynchronizer LockSupport ReentrantLock ReentrantReadWriteLock ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock sem.acquire() // Operationen sem.release(); java.awt Image public float getaccelerationpriority() public ImageCapabilities getcapabilities PI Portable Interceptors PIDL Pseudo-IDL POA Portable Object Adapter Layer SDK Software Developer Kit TSC Thread Scope PICurrent TSP Time Stamp Protocol VM Virtual Machine JAXP 1.3 Xalan JDBC 3.0 JMX 1.2 javax.sql.rowset CachedRowSet FilteredRowSet JdbcRowSet Joinable JoinRowSet Predicate WebRowSet BaseRowSet RowSetMetaDataImpl javax.sql.rowset.serial SerialArray SerialBlob SerialClob SerialDatalink SerialJavaObject SerialRef SerialStruct SQLInputImpl SQLOutputImpl javax.sql.rowset.spi SyncResolver TransactionalWriter XmlReader XmlWriter SyncFactory SyncProvider Über Instrumentation (Java Programming Language Instrumentation Services (JPLIS)) kann der Bytecode von Methoden verändert werden, während sie unter der JVM laufen. Dadurch können Tools wie Profiler und Debugger einfacher die benötigten Informationen hinzufügen. Die Manipulation kann zur Laufzeit, beim Laden der oder direkt in den class-dateien erfolgen..instrument ClassFileTransformer Instrumentation ClassDefinition org.w3c.dom DOMConfiguration DOMError DOMErrorHandler DOMImplementationList DOMImplementationSource DOMLocator DOMStringList NameList TypeInfo UserDataHandler javax.xml.datatype javax.xml.namespace javax.xml.validation javax.xml.xpath org.w3c.dom.bootstrap org.w3c.dom.ls von JMX out of the box im Code import.management.*; List<MemoryPoolMXBean> mem = System.out.println(.management ClassLoadingMXBean CompilationMXBean GarbageCollectorMXBean MemoryManagerMXBean MemoryMXBean MemoryPoolMXBean OperatingSystemMXBean RuntimeMXBean ThreadMXBean ManagementFactory ManagementPermission MemoryNotificationInfo MemoryUsage ThreadInfo MemoryType javax.management javax.management.loading javax.management.modelmbean javax.management.monitor javax.management.openmbean javax.management.relation javax.management.remote javax.management.remote.rmi javax.management.timer javax.swing.plaf.synth javax.swing JComponent public boolean getinheritspopupmenu() JTable public boolean print() public boolean print javax.swing.text DefaultCaret public void setupdatepolicy(int policy) javax.rmi.ssl SslRMIClientSocketFactory SslRMIServerSocketFactory gemacht. java.beans IndexedPropertyChangeEvent PropertyDescriptor // der Konstruktor ist jetzt public PropertyEditorSupport() // der Konstruktor ist jetzt public PropertyEditorSupport(Object source) public static int bitcount(int i) public static int highestonebit(int i) public static int lowestonebit(int i) public static int reverse(int i) public static int reversebytes(int i) public static int signum(int i) Unterstützung von Blindenschrift. javax.accessibility AccessibleExtendedText AccessibleStreamable AccessibleAttributeSequence AccessibleTextSequence Stille Wasser gründen tief Wenn man sich mal hinsetzt und überlegt, was bei ULC alles hinter den Kulissen ablaufen muss, um das Ausführen einer mächtigen Thin-Client-Anwendung in einer verteilten Umgebung zu ermöglichen, ist man beeindruckt. Mit dem in ULC entwickelten Timeanchor lassen sich verschiedene Fenster gleichzeitig öffnen und auf dem Bildschirm ausrichten. Daten werden in Tabellen, Listen, Bäumen oder TableTreewenigen Ausnahmen, gleich einsetzen. Das ist auch anhand der start()-methode in Listing 1 und 2 ersichtlich. Die Unterschiede sind klein. Beim Starten des Programms gibt es einen größeren Unterschied. Das ULC API stellt eine Client/Server-Infrastruktur zur Verfügung, die dafür sorgt, dass die Anwendung auf dem Server ausgeführt und lokal angezeigt wird. ULC bringt erst etwas, wenn es in einer Serverumgebung (z.b. innerhalb eines Servlet Container oder als EJB) deployt wird. Um die ULC-Entwicklung zu erleichtern und aufwendige Build/ Deploy/Test-Zyklen zu vermeiden, stellt ULC einen DevelopmentRunner zur Verfügung, welcher innerhalb der gleichen VM das verteilte Ausführen der Anwendung simuliert. In den letzten drei Zeilen von Listing 2 ist ersichtlich, wie das Hello World -Programm unter ULC gestartet wird. Interessant ist hier der setusegui (false)-aufruf. Er unterbindet die Anzeige des Control Panel des DevelopmentRunner und sorgt dafür, dass die mittels setapplicationclass(..) gesetzte Klasse unmittelbar zur Ausführung kommt. Durch Aufruf von setusegui(true) wird erreicht, dass das DevelopmentRunner Control Panel vor der Programmausfüh- rung erscheint. Dies erlaubt es dem Entwickler, verschiedene Einstellungen vorzunehmen, wie zum die Bandbreite der simulierten Kommunikation zwischen dem Client (UIEngine im ULC-Jargon) und dem Server. Für Debugging und Optimierungszwecke lässt sich hier auch die Kommunikation protokollieren. Abbildung 3 zeigt den DevelopmentRunner nach der Ausführung der HelloULC-Klasse. Es ist anhand der Abbildung ersichtlich, dass zum Ausführen des Programms ein Server Roundtrip nötig war, bei dem Bytes gesendet wurden (der größte Teil davon Initialdaten wie die Liste der Fonts auf der Client-Maschine). Empfangen wurden 268 Bytes für die Definition des Layouts und der Komponenten. Abb. 3: Der ULC DevelopmentRunner Komponenten mit praktisch beliebig vielen Zeilen angezeigt. Zellen lassen sich an Ort und Stelle bearbeiten (In-line Editing). Neu wird in ULC auch Drag&Drop unterstützt und das Ganze mit einem Minimum an Server Roundtrips und selbst über eine 56-K-Modemverbindung mit akzeptabler Performance. ULC erreicht dies u.a. mit den folgenden Konzepten und Optimierungen: Die Kommunikation zwischen dem Client (UIEngine) und dem ULC Server ist per Design kompakt und wird zusätzlich komprimiert. EAZ JM 113 Java TM ist ein eingetragenes Warenzeichen der Sun TM Microsystems, Inc. in den USA und anderen Ländern. Die Software & Support Verlag GmbH ist unabhängig von Sun TM Sie haben das Java Magazin nicht abonniert? Dann sichern Sie sich jetzt das aktuelle J2SE 5-Poster*! Alle Abonnenten bekommen das brandneue J2SE 5-Poster als Dankeschön! J2SE 5 Neue Features JVM Java Virtual Machine Durch das Class Data Sharing wird die Startzeit von Anwendungen verkürzt, da Systemklassen in einem so genannten Shared-Archiv von mehreren Anwendungen gleichzeitig verwendet werden. Über die Kommandozeilenoption -Xshare kann die durch den Java-Interpreter konfiguriert werden. Das Shared-Archiv findet man z.b. unter jre/bin/client/classes.jsa. Weiterhin wurden die Performance und die Arbeitsweise des Garbage Collector verbessert. Neue Systemfunktionen h eibung Spracherweiterungen Generics Die neuen Spracherweiterungen Generics, die verbesserte for-schleife und Auto(un)boxing werden durch das Collection- Framework unterstützt. Weiterhin wurden neue Collection- zur von hinzugefügt. Zusätzliche Erweiterungen betreffen die Nebenläufigkeit von Threads im java.util.concurrent. java.util Queue EnumSet EnumMap public static <T> boolean addall(collection<? super T> c, T a) l disjoint? 2) Die wi Neuer Einige -, Interface- und Methodendefinitionen haben bis auf den Typ der verarbeitenden Elemente den gleichen Aufbau. So lässt sich die Datenstruktur einer Liste auf dieselbe Weise für Zahlen oder Zeichenketten implementieren. Durch die Einführung von generischen Typen ist dies nun auch in Java möglich. Die Vorteile liegen gegenüber den bisherigen Möglichkeiten ( von Elementen des Typs Object) in der Vermeidung von Casts, der automatischen Typprüfung durch den Compiler T steht im Folgenden für einen typisierten Parameter class <Bezeichner><T, > // generischer Type class <Bezeichner><?> // unbekannter Type class <Bezeichner><T extends <Type>> // T ist Subtyp von Type class <Bezeichner><T super <Type>> // T ist Basistyp von Type T <Type><Bezeichner>(<T>) // generische Methode EinWert<Integer> ew = new EinWert<Integer>(new Integer(10)); Integer I = ew.getelem(); // kein Cast notwendig String s = (String)st.pop(); // zusätzlicher Cast notwendig int i = ((Integer)st.pop()).intValue(); // zusätzlicher Cast notwendig Stack<Integer> stg = new Stack<Integer>();// Stack aus Integer-Objekten stg.push(10); // von Autoboxing Integer IG = stg.pop(); // der Cast entfällt int ig = stg.pop(); // Autounboxing Verwenden Sie die für ohne Generics, gibt der Compiler so genannte Unchecked-Warnungen aus, da er keine Typprüfungen vornehmen kann. Sämtliche generische Typinformationen werden durch den Compiler entfernt (Type Erasure). Der Effekt ist, dass notwendige Casts etc. durch den Compiler in die Standardimplementierung einer generischen Klasse eingefügt werden. Damit existiert eine generische Klasse, auch wenn sie mit unterschiedlichen Typen verwendet wird, nur genau Stack<Integer> sti = new Stack<Integer>(); Stack<String> sts = new Stack<String>(); sti.getclass() == sts.getclass() // liefert true! Parametrisierte Typen sind in der Regel nicht zuweisungskompatibel. sti = sts; // Compilerfehler, wegen sts.push( Test ); // lege einen String auf den Stack Integer I = sti.pop(); // Fehler, da sich ein String auf dem Stack befindet Typsichere Java unterstützt, die durch spezielle formuliert werden. Der Compiler kann die Typsicherheit bei deren garantieren (im Gegensatz bei der bloßen von int-konstanten). <Modifizierer> enum <Bezeichner> AUF1, AUF2 <Modifizierer> enum <Bezeichner> Deployme Durch Pack200 wird chive zur Verfügung zeilenunterstützung java.util.jar Zuerst müssen immer die Aufzählungskonstanten angegeben werden. Solche sind implizit immer statisch. Es darf kein Standardkonstruktor deklariert werden. Dieser wird automatisch bereitgestellt, wenn eine Aufzählungskonstante keine Parameter besitzt. Die Konstanten dürfen Parameter besitzen, die einen geeigneten Konstruktor erfordern. Die Klasse besitzt automatisch die Methoden der Klasse.Enumund die Methoden values() und valueof(string). Sie können in der Klasse weitere Felder und Methoden definieren. Diese sind automatisch statisch. public enum Wochentage MONTAG, DIENSTAG, MITTWOCH ; MONTAG(1), DIENSTAG(3), MITTWOCH(5); Wochentage(int wert) this.wert = wert; Pack200.Packer Pack200.Unpac Pack200 Threa Wochentage wtfeld[] = Wochentage.MONTAG, Wochentage.DIENSTAG ; for(wochentage wt: wtfeld) for(wochentage tag: Wochentage.values()) Statischer Import Es werden bei der Ausgabe keine Zahlenwerte, sondern die echten Namen der Aufzählungskonstanten verwendet. Zur besseren Lesbarkeit und einfacheren von statischen Konstanten und Methoden werden durch den statischen Import die statischen Inhalte von importiert. Die Funktionsweise entspricht dabei dem Import von s. Damit soll auch der Missbrauch von als Hülle für Konstanten verhindert werden. import static.interface.bezeichner; import static.klasse.bezeichner; Importiert werden die öffentlichen, statischen Konstanten, Variablen und Methoden einer Klasse oder eines. public static final int KONSTANTE1 = Wert1; public static final int KONSTANTE2 = Wert2; Deklarieren Sie Konstanten zukünftig immer in und verwenden Sie den statischen Import. Vereinfachte for-schleife Eine weitere der for-schleife vereinfacht die Schreibweise zur Iteration über und Arrays. for(<type> Laufvariable: [.Iterable array]) Eine Laufvariable vom Typ <Type> iteriert über die Elemente eines Collection-Objekts, welches das Interface Iterable implementiert, oder über ein Array. Die Collection- wurden deshalb erweitert und implementieren jetzt zusätzlich das Interface Iterable. for(iterator itr = coll.iterator(); itr.hasnext(); ) = (Cast) itr.next(); Die for-schleife kann hier wie folgt gelesen werden: für alle int-werte i im Array feld Die verbesserte for-schleife ist kein Ersatz für for-schleifen, die eine Laufvariable als Zähler und/oder Index benötigen. Durch die von Generics und Auto(un)boxing kann der Code der noch weiter vereinfacht werden. Auto(un)boxing Es erfolgt eine automatische Konvertierung von primitiven Datentypen in die korrespondierenden Wrapper- und umgekehrt. Dies vereinfacht z.b. die Übergabe von primitiven Datentypen an Methoden, die Objekttypen als Parameter verlangen. Verwenden Sie anstelle eines Objektdatentyps den entsprechenden primitiven Datentyp oder umgekehrt. System.out.println(getInt(new Integer(10))); 2004 Software & Support Verlag GmbH Entwicklung: Dirk Frischalowski Gestaltung: Melanie Hahn Annotations (Metadaten) Objektvariablen können null-werte besitzen. Wenn Sie diese automatisch in primitive Datentypen konvertieren, wird eine NullPointerException ausgelöst. Über Annotations (Anmerkungen) können Sie s,,,, Methoden, Variablen und Parametern mit zusätzlichen Informationen versehen. Diese können im Gegensatz zu Kommentaren im Quellcode, einer class-datei oder während der Laufzeit, je nach Konfiguration, automatisiert ausgelesen // auch zur Laufzeit // nur für Methoden verwendbar Die J2SE 5 besitzt sechs vordefinierte Annotations: Documented, Inherited, Retention, Target im.annotation Deprecated, Overrides im Variable Parameterliste Die von Arrays zur Übergabe variabler Parameterlisten wurde durch eine neue ersetzt. Diese erlaubt insbesondere den einfacheren Aufruf solcher <Type> <Bezeichner>(Parameter, <Type> <Name>) Es ist nur eine variable Parameterliste erlaubt, die immer als letzter Parameter angegeben werden muss. Dazu wird dem Typ der Parameterliste eine Ellipse (3 Punkte) direkt oder mit Leerzeichen getrennt angefügt. System.out.println(summe(new int[]10, 11, 12)); System.out.println(summe(10, 11, 12, 13, 14)); Eine variable Parameterliste wird als Sequenz von Werten gelesen. Übersichten Tiger (JSRs) präsentiert J2SE 5 JVM Java Virtual Machine JSRs stellen Vorschläge oder Spezifikationen für die Java-Plattform dar. Sie werden dann z.b. über ein neues JDK zur Verfügung gestellt. Die J2SE 5 implementiert die folgenden JSRs. Im Internet haben Sie Zugriff darauf, in dem Sie der folgenden URL die Nummer des JSR anfügen. Basis-URL: z.b.: 003 Java Management Extensions (JMX) Specification 013 Decimal Arithmetic Enhancement 014 Add Generic Types To The Java Programming Language 028 Java SASL Specification 114 JDBC Rowset Implementations 133 Java Memory Model and Thread Specification Revision 160 Java Management Extensions (JMX) Remote API Java Platform Profiling Architecture 166 Concurrency Utilities 174 Monitoring and Management Specification for the Java Virtual Machine 175 Metadata Facility (Annotations) 200 Network Transfer Format for Java Archives 201 New Language Features: Enumerations, Autoboxing, Enhanced for Loops, Static Import, VarArgs 204 Unicode Supplementary Character Support 206 Java API for XML Processing (JAXP) 1.3 Neue Features Durch das Class Data Sharing wird die Startzeit von Anwendungen verkürzt, da Systemklassen in einem so genannten Shared-Archiv von mehreren Anwendungen gleichzeitig verwendet werden. Über die Kommandozeilenoption -Xshare kann die durch den Java-Interpreter konfiguriert werden. Das Shared-Archiv findet man z.b. unter jre/bin/client/classes.jsa. Weiterhin wurden die Performance und die Arbeitsweise des Garbage Collector verbessert. Neue Systemfunktionen public static String clearproperty(string key) public static Map<String,String> getenv() // die folgende Methode ist nicht mehr deprecated public static String getenv(string name) Formatierte Ein- und Ausgabe Für die formatierte Ausgabe steht in verschiedenen eine printf()-methode, wie Sie auch in der Programmiersprache C vorhanden ist, bereit. Diese vereinfacht die formatierte Ausgabe von Zahlen oder Zeichenketten, z.b. auf der Konsole. Über die Klasse java.util.formatterkönnen die Formatierungen auch für andere Zwecke verwendet werden. Die Klasse String wurde außerdem um die Methoden format() erweitert. Ein Scanner API, welches durch die Klasse Scannerrepräsen- tiert wird, erleichtert das Einlesen und Verarbeiten von Datenwerten, z.b. über die Konsole, Strings oder Dateien. public static String format(string format, Object args) public static String formats(locale l, String format, System.out.printf( \n%n%.2f %s, 12.00, Euro ); String s = String.format( \n%n%.2f %s, 12.00, Euro ); Zur Erzeugung eines Zeilenumbruchs in der Ausgabe wird die Escape-Sequenz \n zwar unterstützt, bevorzugt sollte aber die Zeichenfolge %n verwendet werden. Die neuen Spracherweiterungen Generics, die verbesserte for-schleife und Auto(un)boxing werden durch das Collection- Framework unterstützt. Weiterhin wurden neue Collection- zur von hinzugefügt. Zusätzliche Erweiterungen betreffen die Nebenläufigkeit von Threads im java.util.concurrent. public static <T> boolean addall(collection<? (Collection<?> c1, Collection<?> c2) public static int frequency(collection<?> c, Object o) public static <T> Comparator<T> reverseorder public static boolean deepequals(object[] a1, Object[] a2) public static int deephashcode(object[] a) public static String deeptostring(object[] a) // diese Methode gibt es für alle Array-Typen // diese Methode gibt es für alle Array-Typen public static String tostring(long[] a) Image I/O Die Bildformate BMP und WBMP werden jetzt lesend und schreibend unterstützt. Annotations Annotation-Typen Kommandozeilentools Neuerungen Die wichtigsten Neuerungen Threads Der Zugriff auf den Stack-Trace wird über weitere Methoden ermöglicht. public static Map<Thread, StackTraceElement[]> public StackTraceElement[] getstacktrace() public Thread.State getstate() StackTraceElement ste[] = Thread.currentThread().getStackTrace(); for(stacktraceelement e: ste) System.out.println(Thread.getAllStackTraces()); source 1.5 ist Standardeinstellung (verwendet die 1.5-Sprachfeatures) Factory und eines Processors target 1.5 ist Standardeinstellung (erzeugt class-dateien für diese Version 1.5) factory Angabe einer Annotation-Processing-Factory-Klasse Xlint gibt zusätzliche Warnungen aus AName[=Wert] Angabe von Name-Wert-Paaren als zusätzliche Parameter Xshare:off Deaktivierung des Class Data Sharing Xshare:on Aktivierung des Class Data Sharing Xshare:auto Standardwert, aktiviere Class Data Sharing wenn möglich Annotation-Typen keywords fügt zusätzliche HTML-Meta-Tags in jede generierte Seite ein, z.b. die Namen der Methoden notimestamp verhindert die Aufnahme des Zeitpunktes der Generierung in die HTML-Dateien Deployment Durch Pack200 wird ein neues Kompressionsformat für JAR-Archive zur Verfügung gestellt. Dieses besitzt eine Kommandozeilenunterstützung über das Tool Pack200 und ein neues API. Annotation Processing Tool (neu) apt dient der automatisierten Verarbeitung von Annotations, benötigt eine Implementierung einer Annotation Processor apt -factory com.entwickler.annopf XYZ.java Kompressionstool (neu) AWT Die wesentlichsten Neuigkeiten im AWT sind das Ermitteln der Mausposition auf dem Desktop, das Setzen des Vordergrundfensters und Verbesserungen beim Zugriff auf die Zwischenablage. public final void setalwaysontop(boolean alwaysontop) public void setlocationbyplatform (boolean locationbyplatform) public boolean islocationbyplatform() public void addflavorlistener(flavorlistener listener) public DataFlavor[] getavailabledataflavors() public Object getdata(dataflavor flavor) public FlavorListener[] getflavorlisteners() public boolean isdataflavoravailable(dataflavor flavor) public void removeflavorlistener(flavorlistener listener) public Point java.awt.component.getmouseposition() public Point java.awt.container.getmouseposition (boolean allowchildren) protected java.awt.peer.mouseinfopeer getmouseinfopeer() pack200 Wird für die Weitergabe von Java-Anwendungen im JAR-Format, unpack200 z.b. über das HTTP-Protokoll, angewendet. Die Dateien erhalten in der Regel die Endung.pack.gz, das Format ist besonders effizient zum Packen von Java-class-Dateien Prozessverwaltung Die Klasse ProcessBuilder bietet einen verbesserten Zugriff auf Systemprozesse (Starten, Ändern der Umgebung). Abonnieren Sie jetzt unter Process p = new ProcessBuilder( notepad.exe ).start(); ProcessBuilder pb = new ProcessBuilder( javac ); Map<String, String> env = pb.environment(); env.put( CLASSPATH, C:\Archive\Test.jar ); env.remove( CLASSPATH_OLD ); Netzwerkzugriff Es werden neue zur Unterstützung von Proxy-Servern, der verbesserten Cookie-Verwaltung, zum Setzen von Verbindungs-Timeouts und zum Caching bereitgestellt. public boolean isreachable(networkinterface netif, int ttl, int timeout) JNDI Abkürzungen public void setnameinnamespace(string fullname) Nebenläufigkeit (Concurrency) Für die Programmierung nebenläufiger Threads werden verschiedene Strukturen und Frameworks zur Synchronisation bereitgestellt. Für den Zugriff auf gemeinsam genutzte Daten werden beispielsweise Semaphore und Sperrmechanismen Java 2D JDBC final private Semaphore sem = new Semaphore(1, true); sem.acquireuninterruptibly(); Zur Hardwarebeschleunigung und OpenGL-Unterstützung wurden neue Methoden und Kommandozeilenparameter (man beachte die Klein- und Großschreibung von true/true) hinzugefügt. -Dsun.java2d.opengl=true // stille Aktivierung der OpenGL-Pipeline -Dsun.java2d.opengl=True // zusätzliche Ausgaben (GraphicsConfiguration gc) public void setaccelerationpriority(float priority) ORBD Object Request Broker Daemon CORBA Common Object Request Broker JDWP Java Debug Wire Protocol COS Common Object Services JMX Java Management Extensions DII Dynamic Invocation Interface RMI Remote Method Invocation DSI Dynamic Skeleton Interface JNDI Java Naming and Directory Interface RSC Request Scope PICurrent SASL Simple Authentication and Security JPDA Java Platform Debugger Architecture IDL Interface Definition Language JPLIS Java Programming Language SLP Service Location Protocol IIOP Internet Inter-ORB Protocol JRMP Java Remote Method Protocol SPI Service Provider Interface INS Interoperable Naming Service JSR Java Specification Request IOR Interoperable Object References JSSE Java Secure Socket Extension J2EE Java 2 Platform, Enterprise Edition J2SE Java 2 Platform, Standard Edition JVMDI Java Virtual Machine Debug Interface JAAS Java Authentication and Authorization JVMTI Java Virtual Machine Tool Interface LDAP Lightweight Directory Access Protocol JAXP Java API for XML Processing JCF Java Collection Framework MIB Mobile Information Broadcast Platform JCP Java Community Process OCSP Online Certificate Status Protocol JCPSM Java Community ProcessSM ODBC Open Database Connectivity JDBC Java Database Connectivity OMG Object Management Group JDC Java Developer Connection Es wurden verschiedene RowSets implementiert. Diese können als JavaBean eingesetzt werden und erlauben das Bearbeiten von Daten unterschiedlicher Herkunft, die auf Spalten und Zeilen beruhen. Instrumentation XML und JAXP Die Unterstützung zahlreicher Spezifikationen wurde verbessert bzw. neu hinzugefügt, z.b. XML 1.1, JAXP 1.3, DOM 3 und XML Schema. Crimson wurde durch Xerces ersetzt. Die Apache-Tools wurden über einen speziellen -Namen integriert, um später den Entwickler die neuerer Versionen zu erleichtern. Aus org.apache.xxx wird dadurch z.b. com.sun.org.apache.xxx.internal. Weitere s API Versionsnummern Xerces (inklusive zusätzlicher Bugfixes) XSLTC (inklusive zusätzlicher Bugfixes) Monitoring und Management Dieses neue API (Java Management Extensions (JMX)) erlaubt die Überwachung und das Management der JVM (auch von entfernten Rechnern). Sie können z.b. Laufzeitinformationen zur JVM auslesen und Statistiken zu Threads abrufen. Vorgefertigte erlauben die sofortige von JMX. java -Dcom.sun.management.jmxremote -jar JavaApp.jar jconsole <pid> wobei pid die Prozessnummer der Anwendung ist. ManagementFactory.getMemoryPoolMXBeans(); for(memorypoolmxbean mp: mem) Type: + mp.gettype() +, Verbrauch: + mp.getusage()); Weitere s Swing RMI Für die Gestaltung der Oberflächen gibt es zwei neue Look & Feels. Ocean ist ein neues Motiv für Metal, Synth ist ein über eine XML-Datei konfigurierbares Look & Feel. Weiterhin wurden mit JTable eine Druckunterstützung hinzugefügt, die Anzeige von Pop-up-Menüs verbessert sowie Optionen zum automatischen Scrollen in Text-Areas bereitgestellt. public void setcomponentpopupmenu(jpopupmenu popup) public void setinheritspopupmenu(boolean value) public enum PrintMode NORMAL, FIT_WIDTH public Printable getprintable (PrintMode printmode, MessageFormat headerformat, MessageFormat footerformat) public boolean print(printmode printmode) public boolean print (PrintMode printmode, MessageFormat headerformat, MessageFormat footerformat) (PrintMode printmode, MessageFormat headerformat, MessageFormat footerformat, boolean showprintdialog, PrintRequestAttributeSet attr, boolean interactive) public static final int UPDATE_WHEN_ON_EDT = 0; public static final int NEVER_UPDATE = 1; public static final int ALWAYS_UPDATE = 2; public int getupdatepolicy() Stub- können nun dynamisch erzeugt werden, sodass der RMI Compiler nicht mehr benötigt wird. Die Protokolle SSL und TLS werden über neue Socketfactory- unterstützt. JavaBeans Zur Arbeit mit Eigenschaftseditoren wurden neue Methoden hinzugefügt und bereits vorhandene Konstruktoren öffentlich public PropertyEditor createpropertyeditor(object bean) PropertyEditorSupport Bitmanipulation Die Wrapperklassen Character, Integer, Long und Short besitzen neue Methoden zur Bitmanipulation. Es werden nicht von jedem Wrapper alle Methoden zur Verfügung gestellt. Die folgenden Methoden sind z.b. in der Klasse Integer enthalten. public static int numberofleadingzeros(int i) public static int numberoftrailingzeros(int i) public static int rotateleft(int i, int distance) public static int rotateright(int i, int distance) Javadoc Zur Erzeugung der Java-Sourcecode-Dokumentation gibt es drei neue Tags und einige neue Der angegebene Text wird als reiner Text Der angegebene Text wird als reiner Text interpretiert und als Code arg Der Inline-Tag erlaubt die Angabe eines Sprachelements und eines Labels. Accessibility Das Accessibiliy API bietet Methoden für alternative Ein- und Ausgabemöglichkeiten wie eine Sprachunterstützung oder die Internet & Enterprise Technology für Java-Professionals Java-Community-Highlights 9. bis 13. Mai 2005 Frankfurt am Main Mehr Infos: 15. bis 18. November 2004 München Mehr Infos: * Nur solange Vorrat reicht!

4 Abb. 4: Die J4e/Timeanchor-Grundarchitektur mit ULC. Die blaue Box ist ein Servlet Container (ein Zahnrad entspricht einem Servlet). Die rosafarbene Box ist ein EJB Container (hier entspricht ein Zahnrad einem EJB). Listing 3 Dynamisches Erstellen einer GUI-Komponente import com.ulcjava.base.application.*; import com.ulcjava.base.application.event. serializable.iactionlistener; import com.ulcjava.base.application.event.actionevent; import com.ulcjava.base.development.developmentrunner; public class HelloAgain extends AbstractApplication private ULCBoxPane panel = new ULCBoxPane(2, 1); // 2 breit, 1 hoch private ULCButton hellobutton = new ULCButton( Hello ); private ULCButton againbutton = new ULCButton ( Again ); public void start() ULCFrame frame = new ULCFrame( Hello Again ); frame.setdefaultcloseoperation(ulcframe. TERMINATE_ON_CLOSE); hellobutton.addactionlistener (new ShowAgainListener()); againbutton.addactionlistener (new HideAgainListener()); // Positioniere hellobutton in erster (linker) Zelle. panel.set(0, 0, ULCBoxPane.BOX_EXPAND_EXPAND, hellobutton); panel.set(1, 0, ULCBoxPane.BOX_EXPAND_EXPAND, new ULCFiller(70, 0)); Asynchrones Lazy Loading, für den Entwickler völlig transparent, sorgt dafür, dass nur jeweils sichtbare Daten zum Client geschickt werden. Eine Tabelle mit Zeilen erscheint praktisch gleich schnell auf dem Bildschirm wie eine mit hundert Zeilen. Scrollt der Anwender nach unten, werden die neu sichtbaren Datenelemente dynamisch nachgeladen. Einmal heruntergeladene Daten werden gecacht und stehen zu einem späteren Zeitpunkt, ohne einen Server frame.add(ulcboxpane.box_expand_expand, panel); frame.setsize(220, 70); frame.setvisible(true); private class ShowAgainListener implements IActionListener public void actionperformed(actionevent event) // Positioniere againbutton in zweiter (rechter) Zelle. panel.set(1, 0, ULCBoxPane.BOX_EXPAND_EXPAND, againbutton); private class HideAgainListener implements IActionListener public void actionperformed(actionevent event) panel.remove(againbutton); panel.set(1, 0, ULCBoxPane.BOX_EXPAND_EXPAND, new ULCFiller(70, 0)); public static void main(string[] args) DevelopmentRunner.setApplicationClass(HelloAgain.class); DevelopmentRunner.main(args); Roundtrip auszulösen, wieder zur Verfügung. So genannte Enablers erlauben das Ausführen von verschiedenen GUI-Feedback- Funktionen, ohne dass der Server kontaktiert werden muss. Mit einem Enabler lässt sich zum erreichen, dass ein gewisser Button nur aktiv ist, wenn in einer Tabelle eine Zeile selektiert wurde. Dank des clientseitigen Enabler geschieht dies ohne Server Roundtrip und somit ohne merkliche Verzögerung. Das Ausführen von registrierten Event Listeners auf GUI-Komponenten erfolgt in der Regel synchron. Das heißt z.b., dass ein auf einem Button registrierter Action Listener beim Klicken auf den Button die actionperformed(..)-methode auf dem Server ausführt und das GUI bis zum Erhalt der Antwort blockiert. In gewissen Fällen ist aber asynchrone Kommunikation vorzuziehen. Man stelle sich vor, es soll zu einer selektierten Zeile in einer Liste jeweils ein kurzer Hilfetext in einer Statuszeile angezeigt werden. Dies geschieht besser auf asynchrone Weise, da dadurch beim Selektieren von Listeneinträgen keine unnötigen Verzögerungen entstehen. In ULC erreicht man das sehr einfach durch Setzen eines Flag auf der Ebene der Komponente. Synchrone und asynchrone Kommunikation lässt sich innerhalb eines GUI, je nach Anforderung, beliebig mischen. ULC in der Praxis Für die Entwicklung unserer Anwendung definierten wir zuerst eine Grundarchitektur, die wir viel versprechend J4e (sprich Java for e-commerce) nannten [6]. Mit J4e wollten wir eine allgemeine Architektur für die J2EE Anwendungsentwicklung definieren, die für eigene Projekte und für Kundenprojekte als Basis dienen sollte. Abbildung 4 zeigt die wichtigsten Komponenten und Schichten von J4e. Wir entschieden uns dabei für die Servlet-Deployment-Option von ULC. Entsprechend erscheint die ULC-Anwendung als Servlet innerhalb des Präsentationsservers. Das Mischen einer ULC-Anwendung mit weiteren Servlets, HTML-Seiten und konventionellen Servlet-Model-2-Webanwendungen ist problemlos möglich. ULC bietet die nötigen API-Aufrufe und Hooks, um

5 einerseits aus der ULC-Anwendung heraus Web Requests oder JavaScript auszuführen und andererseits mittels JavaScript- Aktionen in der ULC-Anwendung auf dem Server auszulösen. Als Webanwendung ist der erste Einstiegspunkt in unsere Anwendung eine HTML-Seite. Von dort aus lässt sich die ULC-Applikation mittels zweier Hyperlinks starten. Der eine startet Timeanchor, indem die UIEngine mittels dem Java Network Launch Protocol (JNLP) typischerweise Java Web Start auf den Client geladen wird. Der andere startet die Anwendung als Applet. In beiden Fällen sind die generischen JAR-Files der UIEngine der einzige Code, der durch den Client referenziert und heruntergeladen werden muss. Beim Starten kontaktiert nun die UIEngine das ULC Servlet auf dem Server und veranlasst dieses, die gewünschte ULC-Applikationsklasse auf dem Server zu starten. Diese wiederum baut das GUI der Anwendung auf dem Server auf und teilt dem Client die Struktur und Abhängigkeiten der angelegten Half-Objects mit. Die UI Engine erstellt nun eigentliche Swing-Komponenten, verdrahtet sie mit Event Listeners gemäß der ULC-Anwendung auf dem Server und geht in den Event-Abarbeitungsmodus über. Beginnt nun der Anwender mit der ULC-Applikation zu arbeiten, ist die UIEngine darum bemüht, dass ausgeführte Event Listeners auf dem Client jeweils einen Server Roundtrip auslösen, welcher zur Ausführung der jeweiligen Event-Listener-Methoden auf dem Server führt. Auf diese Weise wird ein grafisches Abbild auf dem Client bedient, während die eigentliche Anwendung auf dem Server abläuft. Hello again Im Folgenden wird dieser Ablauf anhand eines s erläutert. Listing 3 beschreibt ein ULC-Programm, welches dynamisch einen ULCButton (auf dem Client durch einen JButton repräsentiert) erscheinen lässt und wieder entfernt. Für das Layout der Komponenten wird eine ULCBox- Pane verwendet. Die ULCBoxPane verwendet intern das GridBagLayout von Swing. Das Layout soll aber nicht Inhalt dieses s sein. Vielmehr soll im Folgenden auf die Interaktion zwischen dem Client und dem Server und auf die Half- Objects für die GUI-Komponenten eingegangen werden. Abbildung 5 zeigt die ULC-Anwendung von Listing 3 nach dem Starten. Durch Klicken auf den Button wird dynamisch ein zweiter Button angelegt und dargestellt (Abb. 6). Ein Klick auf den neu erstellten Button lässt ihn wieder verschwinden. Die Abbildung 7 zeigt in vereinfachter Form die dazu notwendigen Objekte auf dem Client und Server und deren Interaktion, bis und mit Erscheinen des zweiten Buttons. Kleine Unterschiede In ULC entwickelt man in der Regel Mehrbenutzeranwendungen, die in einer Client/ Server-Umgebung zum Laufen kommen. Abb. 5: Das Programm aus Listing 3 nach dem Starten Abb. 6: und nach dem Klicken auf den HELLO- Button. Anhand dieser Tatsache ergeben sich in ULC kleine Unterschiede in der Programmierung im Vergleich zur Single-User- Swing- oder AWT-GUI-Programmierung. Meist existieren mehrere Instanzen einer ULC-Anwendung auf dem Server parallel. Beim Servlet Deployment läuft dabei die ULC-Anwendung als Servlet mit einer eigenen HTTP Session. Bei der EJB- Deployment-Option ist die ULC-Anwendung eine Stateful-Session-Bean-Instanz. In beiden Fällen teilen sich verschiedene ULC-Anwendungen bzw. Anwendungs- Sessions eine virtuelle Maschine und der Einsatz von statischen Variablen muss mit der nötigen Vorsicht geschehen. Ein weiterer Unterschied liegt an der Tatsache, dass der ULC Client und der Server in unterschiedlichen virtuellen Maschinen ablaufen. Das Handling von synchronen (blockierenden) Dialogfenstern muss anders implementiert werden als bei einer Jetzt vormerken! Mai 2005 Congress Center, Frankfurt am Main

6 verschlüsselten (gehashten) Passwort in der Datenbank verglichen. Dies geschieht dank JAAS außerhalb unserer Anwendungslogik durch entsprechende Konfiguration des Application Server (für Timeanchor verwenden wir JBoss [7]). Nach erfolgter Anmeldung lassen sich aus der ULC-Anwendung heraus mittels API-Aufrufen einfach die Identität und Rollen des eingeloggten Anwenders feststellen. Abb. 7: Die ULC-Kommunikation und Half-Objects für das Hello Again - Fat-Client-Anwendung. Bei einer ULC- Anwendung lässt sich kein modaler Dialog auf dem Client zeigen, der auf dem Server den Kontrollfluss an der gewünschten Stelle blockiert. Das Anzeigen von Dialogfenstern und deren GUI Handling sind in ULC in jedem Fall asynchron. Das bedeutet für den Programmierer, dass er auf allen Kontrollelementen, welche ein Schließen des Dialogfensters bewirken sollen, einen entsprechenden Event Listener registriert und das Schließen des Fensters inklusive der gewünschten Folgehandlung in einer Event-Handling-Methode ausführt. Security Mit ULC lassen sich grundsätzlich sehr sichere Anwendungen bauen. Aus verschiedenen Gründen. Einerseits befindet sich keine Präsentations- oder Anwendungslogik auf dem Client. Der Client (die generische UIEngine) lässt sich innerhalb einer Sandbox betreiben, zum wenn die Anwendung als Applet oder mit Java Web Start betrieben wird. Falls nötig, kann die Anwendung signiert werden. Die Kommunikation zwischen UIEngine und Server lässt sich durch entsprechende Konfiguration der Servlet Engine leicht mittels SSL bzw. TLS verschlüsseln (HTTPS). Dies ist für den ULC-Entwickler transparent. Dank der Tatsache, dass ULC sein eigenes kompaktes Protokoll für den Datenaustausch verwendet und die Daten gleichzeitig komprimiert, erreicht man auch ohne HTTPS eine leicht höhere Sicherheit als bei reinen Webanwendungen, wo Zeichenketten wie GET /protected-file?user=joe& password=elvis als Klartext über die Leitung gehen. Für Timeanchor beziehungsweise unsere J4e-Architektur setzen wir JAAS-basierte Authentisierung und Autorisierung ein (Java Authentication and Authorization Service). Ein eigenes JAAS Login Module wird dazu über eine Security Realm innerhalb der Servlet Engine an ein Login- Formular gekoppelt. So konfiguriert stellt nun die Servlet Engine sicher, dass beim Zugriff auf bestimmte Ressourcen (z.b. die ULC-Anwendung) der Anwender zuerst authentisiert wird. Unser Login Module stellt dazu eine Verbindung mit dem Application Server her und authentisiert sich dort wiederum mittels JAAS. Das eingegebene Passwort wird durch den MD5-Algorithmus einwegverschlüsselt und durch den Application Server mit dem ebenfalls und Performance Auch bezüglich Performance wurden wir von ULC nicht enttäuscht. Die weiter oben genannten Optimierungen in ULC bringen sehr viel. Bezüglich Speichereffizienz hilft auch die Tatsache, dass auf dem Server innerhalb einer virtuellen Maschine praktisch beliebig viele ULC-Anwendungs- Sessions ablaufen können. Die einzelnen ULC-Anwendungen auf dem Server können stark von der gemeinsamen Umgebung profitieren und sich zum gecachte Daten, Properties oder Ressourcen teilen. Bei unserer Anwendungsarchitektur war die Performance, d.h. die Möglichkeit zur kostengünstigen, horizontalen Skalierung unserer Anwendung, wichtig. Wichtiger als so genanntes Session Failover, bei dem eine Anwender-Session intakt bleibt, selbst wenn eine Servermaschine plötzlich den Dienst verweigert. Der Verzicht auf Session Failover erlaubt es uns, auf das recht ressourcenintensive HTTP Session Clustering zu verzichten. Die Timeanchor Frontend Server lassen sich ohne großen Overhead auf mehrere Rechner verteilen. Ein vorgeschalteter Proxy-Server (z.b. ein Apache Webserver mit mod_jk2) oder entsprechende Load Balancing Hardware stellt dabei sicher, dass sukzessive Anfragen einer bestehenden Session jeweils auf den gleichen Server geleitet werden (Server Affinity). Eigene in Timeanchor gecachte Daten werden mittels mit UDP Multicast verschickten Nachrichten synchronisiert. Bei dieser Synchronisierung müssen dabei die eigentlichen Daten nicht verschickt werden. Bei einem Update eines auf einem Server gecachten Datenobjekts werden nur die entsprechenden Objekte im Cache der im Cluster teilnehmenden Rechner entfernt. Wir erhalten auf diese Weise ein sehr leichtgewichtiges Clustering der Frontend Server

7 The way to go! ULC eignet sich sehr gut für typische ASPund Intranet-Anwendungen, die ein ansprechendes GUI benötigen und auch anspruchsvolle Workflows implementieren. Es eignet sich aber nicht jede Anwendung für die Entwicklung in ULC. Obwohl dem Programmierer ein recht kompletter Satz an GUI Widgets zur Verfügung steht, kann man nicht alles in einer beliebigen Weise umsetzen. Bei sehr grafiklastigen und interaktiven Anwendungen stößt man zum Teil an die Grenzen. ULC bietet aber auch hier einen Lösungsansatz. Das auf dem Client zur Verfügung stehende Widget Set lässt sich durch den Programmierer erweitern. Spezielle Controls, Editoren oder Viewer können so durch den Anwendungsprogrammierer entwickelt und als Teil der UIEngine auf dem Client zur Ausführung gebracht werden. Die Entscheidung, bei der Implementierung von Timeanchor auf ULC zu setzen, hat sich gelohnt. Durch die von ULC war es möglich, ein Produkt zu entwickeln, welches unsere Erwartungen bezüglich Anwenderfreundlichkeit, Integrierbarkeit und Plattformunterstützung erfüllt. Zur Entwicklung von umfangreichen webbasierten Lösungen ist ULC unseres Erachtens ein Framework mit sehr viel Potenzial. Timeanchor wird nicht die letzte Anwendung sein, bei der wir ULC einsetzen. Thomas Studer ist seit zwei Jahren technischer Leiter und Partner bei der Softwareentwicklungs- und Beratungsfirma Innovatis Group (www.innovatis-group. com). Er entwickelt seit acht Jahren Software in Java und interessiert sich insbesondere für die Architektur und Entwicklung von webbasierten Anwendungen. Links & Literatur [1] [2] [3] Peter Roßbach und Frank Dolibois: Fette Brüder specken ab. Rich Clients mit Canoos ULC, in Java Magazin [4] Peter Leitner: UltraLightClient by Canoo Engineering AG, in JDJ April 2004 (Anmeldung erforderlich): [5] Gerard Meszaros: Pattern: Half-Object + Protocol, in: Pattern Languages of Program Design; hrsg. v. James O. Coplien, Douglas C. Schmidt, Addison-Wesley, 1995, [6] [7] Das neue Eclipse Magazin eclipse Jetzt im Abo erhältlich! S P E C I A L eclipse Deutschland 9,80 Herbst 2004 eclipse special Herbst 2004 Der neue Look Eclipse intern J2EE mit Eclipse Rich Clients mit Eclipse Plug-in-Workshop Alle Infos auf Seite 3 Eclipse SDK 3.0 Final 30 Eclipse Plug-ins + Tools Produkte, Server, Datenbanken Österreich 10,80 Schweiz sfr 19,20 S P E C I A L Sonderausgabe präsentiert von: Neu: Eclipse 3.0 Alle Infos über die Entwicklungsplattform Der neue Look Visual Editor & Texteditor unter der Lupe Eclipse intern Erich Gamma über die Entwicklung von Eclipse 3 Plug-in-Workshop Eigene Adapter in Eclipse erstellen J2EE mit Eclipse Java Development mit Eclipse und Lomboz Rich Clients mit Eclipse 3 Mehr als eine IDE D ULC im Portalserver-Umfeld Wie integriere ich eine in ULC realisierte Rich- Client-Anwendung in ein HTML-basiertes Webportal? Falls sich die Anwendung in ihrem eigenen Fenster bedienen lässt, zum als ULC-Applet in einem eigenen Browser Fenster, gibt es keine Probleme die ULC-Session wird mit dem Öffnen des Fensters initialisiert und ist solange aktiv, bis der Benutzer das ULC-Applet-Fenster schließt. Soll sich ein ULC Applet hingegen nahtlos in eine Portalseite integrieren und nur einen Teil einer sonst in HTML implementierten Seite belegen, stellt sich die Frage, was passiert, wenn der Anwender auf einen HTML-Link außerhalb des Applet klickt. In einem Webportal führt dies oft zu einem Server Roundtrip und einer Folgeseite, die unser ULC-Applet an alter Stelle wieder aufbaut. Der Browser hat allerdings bei diesem Roundtrip unser altes Applet weggeworfen und als Teil der Folgeseite ein neues Applet initialisiert und gestartet. Die zwei Applets haben aus der Sicht des Browsers keine Beziehung zueinander. Für den Benutzer aber schon. Beide Applets repräsentieren die gleiche ULC-Applikationsinstanz auf dem Server. Außerdem soll das neue Applet die ULC-Applikation im gleichen Zustand und mit den gleichen GUI-Komponenten und Daten zeigen, wie dies im alten Applet der Fall war. In einem Webportal-Projekt einer Großfirma hatte ich kürzlich die Gelegenheit, eine Vorabversion der ULC-Portalserver-Integration zu testen. Ein ULC Applet hat neu die Möglichkeit, sich auf eine bestehende ULC-Applikation auf dem Server zu verbinden und dort ein resume auszulösen, welches zum Herunterladen und Darstellen des alten Applet-Zustands führt. Dank der guten Performance von ULC und des Umstands, dass an dieser Stelle das Java-Plugin im Browser bereits geladen ist, geschieht dies sehr schnell. Damit dieses Handling in verschiedenen Browsern zuverlässig funktioniert, insbesondere um eine mögliche Race Condition zwischen Browser und Java-Plug-in zu vermeiden, nimmt ULC das Management des Session Cookie dazu gleich selbst in die Hand und vertraut an dieser Stelle nicht auf den Browser. Jetzt abonnieren & Vorteile sichern! Sie sparen mehr als 10 % gegenüber dem Einzelkauf! 4 Ausgaben pro Jahr Alle Ausgaben mit DVD! Sie verpassen keine Ausgabe! Jetzt bestellen unter:

Softwareentwicklung mit Enterprise JAVA Beans

Softwareentwicklung mit Enterprise JAVA Beans Softwareentwicklung mit Enterprise JAVA Beans Java Enterprise Edition - Überblick Was ist J2EE Java EE? Zunächst mal: Eine Menge von Spezifikationen und Regeln. April 1997: SUN initiiert die Entwicklung

Mehr

Entwicklung von Web-Anwendungen auf JAVA EE Basis

Entwicklung von Web-Anwendungen auf JAVA EE Basis Entwicklung von Web-Anwendungen auf JAVA EE Basis Java Enterprise Edition - Überblick Prof. Dr. Bernhard Schiefer Inhalt der Veranstaltung Überblick Java EE JDBC, JPA, JNDI Servlets, Java Server Pages

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer) Programmieren I Grundlagen von JAVA Dr. Klaus Höppner Hello World in JAVA Hochschule Darmstadt WS 2007/2008 Elementare Datentypen 1 / 17 2 / 17 Eigenschaften von JAVA Prinzipieller Ablauf Plattform-und

Mehr

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten CORBA-Konzept Ziele Common Object Request Broker Architecture CORBA Plattformunabhängige Kommunikation Transparente Verteilung von Objekten CORBA-Konzept Object Management Group Spezifiziert den CORBA-Standard

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

CORBA. Systemprogrammierung WS 2006-2007

CORBA. Systemprogrammierung WS 2006-2007 CORBA Systemprogrammierung WS 2006-2007 Teilnehmer: Bahareh Akherattalab Babak Akherattalab Inhaltsverzeichnis: Verteilte Systeme Vergleich zwischen lokale und verteilte Systeme Verteilte Anwendungen CORBA

Mehr

Web-Services Implementierung mit Java

Web-Services Implementierung mit Java Web-Services Implementierung mit Java J. Heinzelreiter WS 2004/05 Java-APIs für Web-Services (1) Anwendungs-Code JAXR JAXM JAX-RPC SAAJ SOAP/SwA JWSDL WSDL XML/XML-Schema Web-Services/Java - 2 Java-APIs

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

JAVA. Ein kurzer Überblick. Thomas Karp

JAVA. Ein kurzer Überblick. Thomas Karp JAVA Ein kurzer Überblick Thomas Karp WAS IST JAVA? Java ist eine fast rein objektorientierte Sprache nicht JavaScript eine professionelle Sprache eine im Unterricht weit verbreitete Sprache für verschiedene

Mehr

Objektorientierte Software-Entwicklung

Objektorientierte Software-Entwicklung Objektorientierte Software-Entwicklung Priv.-Doz. Dr. Rolf Hennicker 08.01.2003 AWT und Swing AWT (Abstract Window Toolkit) und Swing 2 AWT (Abstract Window Toolkit) und Swing AWT und Swing bieten eine

Mehr

Hello World from CORBA

Hello World from CORBA Hello World from CORBA ein erster Überblick Aufruf einer Objekt-Methode Client gettemperature() Thermometer Objekt- Implementation Thermometer th = new Thermometer(); double t = th.gettemperature(); th

Mehr

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010 Gerald.Ehmayer@borland.com

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010 Gerald.Ehmayer@borland.com Web Services Java Praktikum SS 2010 Gerald.Ehmayer@borland.com 1 Web Services Einführung Definition, Eigenschaften, Anwendungen... JAX-RPC Überblick, Architektur... JAX Übersicht, Architektur Java Praktikum

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Schritt 4: Hallo Enterprise Bean

Schritt 4: Hallo Enterprise Bean Prof. Dr. Th. Letschert FB MNI JEE Schritt 4: Hallo Enterprise Bean Einstieg: EJBs erzeugen und nutzen Meine erstes EJB Projekt Enterprise Beans sind eine Backend Technologie, die mit unterschiedlichen

Mehr

Smartphone Entwicklung mit Android und Java

Smartphone Entwicklung mit Android und Java Smartphone Entwicklung mit Android und Java predic8 GmbH Moltkestr. 40 53173 Bonn Tel: (0228)5552576-0 www.predic8.de info@predic8.de Was ist Android Offene Plattform für mobile Geräte Software Kompletter

Mehr

Module für eine Java-Administrationsschulung

Module für eine Java-Administrationsschulung Module für eine Java-Administrationsschulung Schulungsmodule 1 Java Administration allgemein...2 1.1 Java und die Virtual Machine...2 1.2 Java EE Bestandteile...2 1.3 Java Management Extensions...2 1.4

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Enterprise Java Beans Einführung

Enterprise Java Beans Einführung Enterprise Java Beans Einführung Vorlesung 8 Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht EJBs im JEE Umfeld Verschiedene Typen von EJBs Von der Javaklasse

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg COMMON OBJECT REQUEST BROKER ARCHITECTURE Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg Gliederung Motivation Was ist CORBA? Object Management Architecture (OMA ) Interface Definition Language

Mehr

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu CORBA Common Object Request Broker Architecture Eine kurze Einführung Ying Lu Verlauf der Präsentation Was ist CORBA CORBA-Architektur Ein Beispiel CORBA im Einsatz CORBA im Vergleich Was ist CORBA Begriffe

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen 1 Kapitel 7 Ziele 2 (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen Benutzung von Vererbung zur Erstellung individueller GUI-Klassen durch Erweiterung

Mehr

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Präsentation zur Diplomarbeit von Übersicht Java 2 Enterprise Edition Java Servlets JavaServer Pages Enterprise JavaBeans Framework

Mehr

Android Processes & Services

Android Processes & Services Android Processes & Services Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Ziele heute Arbeitsblatt 4 besprechen (inkl. Repetition)

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

1. Java Grundbegriffe

1. Java Grundbegriffe 1. Java Grundbegriffe Geschichte von Java Programmieren mit Java Interpretieren vs. Kompilieren Java Byte-Code Jave Virtual Machine Arbeitsmaterialien Allgemeine Informatik 2 SS09 Folie 1.1 Java, eine

Mehr

Java und XML/XML und Java. Mario Jeckle DaimlerChrysler Forschungszentrum Ulm mario.jeckle@daimlerchrysler.com mario@jeckle.de www.jeckle.

Java und XML/XML und Java. Mario Jeckle DaimlerChrysler Forschungszentrum Ulm mario.jeckle@daimlerchrysler.com mario@jeckle.de www.jeckle. Java und XML/XML und Java Mario Jeckle DaimlerChrysler Forschungszentrum Ulm mario.jeckle@daimlerchrysler.com mario@jeckle.de www.jeckle.de XML und Programmiersprachen... Java ist... Programmiersprache

Mehr

Dataport IT Bildungs- und Beratungszentrum. HTML- Grundlagen und CSS... 2. XML Programmierung - Grundlagen... 3. PHP Programmierung - Grundlagen...

Dataport IT Bildungs- und Beratungszentrum. HTML- Grundlagen und CSS... 2. XML Programmierung - Grundlagen... 3. PHP Programmierung - Grundlagen... Inhalt HTML- Grundlagen und CSS... 2 XML Programmierung - Grundlagen... 3 PHP Programmierung - Grundlagen... 4 Java - Grundlagen... 5 Java Aufbau... 6 ASP.NET Programmierung - Grundlagen... 7 1 HTML- Grundlagen

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Grundlagen zur nebenläufigen Programmierung in Java

Grundlagen zur nebenläufigen Programmierung in Java Grundlagen zur nebenläufigen Programmierung in Java Karlsruher Entwicklertag 2013 5. Juni 2013 Referent: Christian Kumpe Inhalt des Vortrags Was zeigt dieser Vortrag? Ein einfaches Beispiel mit allerlei

Mehr

Um asynchrone Aufrufe zwischen Browser und Web Anwendung zu ermöglichen, die Ajax Hilfsmittel DWR ist gebraucht.

Um asynchrone Aufrufe zwischen Browser und Web Anwendung zu ermöglichen, die Ajax Hilfsmittel DWR ist gebraucht. Technisches Design Inhalt Design Übersicht Menü und DispatcherServlet DWR Servlet Viewer Servlets Controllers Managers Sicherheit Anwendung Architektur Component Diagram Deployment Diagram Komponente Sequence

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

Web und Mobile Apps Programmieren mit Dart

Web und Mobile Apps Programmieren mit Dart Web und Mobile Apps Programmieren mit Dart Marco Jakob Kalaidos Fachhochschule Schweiz majakob@gmx.ch Abstract: Bisher war es kaum realistisch, im Anfängerunterricht mobile oder webbasierte Applikationen

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Neues ab JDK 1.5. Praktikum aus Softwareentwicklung 2. Java Praktikum SS 2008 Gerald.Ehmayer@borland.com 1

Neues ab JDK 1.5. Praktikum aus Softwareentwicklung 2. Java Praktikum SS 2008 Gerald.Ehmayer@borland.com 1 Neues ab JDK 1.5 Praktikum aus Java Praktikum SS 2008 Gerald.Ehmayer@borland.com 1 Java 5 - Tiger New Features Timeline, Überblick Java Spracherweiterungen Enums, For Loop,.. Java API StringBuilder, Formatter

Mehr

Einsatz von Applikationsservern. Untersucht am Beispiel des Sybase Enterprise Application Server

Einsatz von Applikationsservern. Untersucht am Beispiel des Sybase Enterprise Application Server Einsatz von Applikationsservern Untersucht am Beispiel des Sybase Enterprise Application Server Architektur von Datenbanksystemen Client / Server Modell (2 Schichten Modell) Benutzerschnittstelle Präsentationslogik

Mehr

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool JBoss vorbereiten Wir haben ein zip-archiv mit JBoss 4.0.5 in /opt/jboss-4.0.5.zip hinterlegt. Entpacken Sie dieses in ihrem Homeverzeichnis an

Mehr

Multithreading ab Java 5: Die neuen Concurrency APIs

Multithreading ab Java 5: Die neuen Concurrency APIs Multithreading ab Java 5: Die neuen Concurrency APIs Java Concurrency Spezifiziert in JSR166 Ab Java 5 fester Bestandteil von Java Durch zusätzliche Library auch vor Java 5 vorhanden backport-util-concurrent

Mehr

Implementierung der Jikes Research Virtual Machine

Implementierung der Jikes Research Virtual Machine Fakultät Informatik Institut für technische Informatik, Professur für VLSI-Entwurfssysteme, Diagnostik und Architektur Implementierung der Jikes Research Virtual Machine Hauptseminar Technische Informatik

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Übungen zur Android Entwicklung

Übungen zur Android Entwicklung Übungen zur Android Entwicklung Aufgabe 1 Hello World Entwickeln Sie eine Hello World Android Applikation und laden diese auf den Emulator. Leiten Sie hierfür die Klasse android.app.activity ab und entwerfen

Mehr

Grundlagen der Programmierung UE

Grundlagen der Programmierung UE Grundlagen der Programmierung UE Research and teaching network GdP UE H. Prähofer, R. Wolfinger 1 Vortragende Dr. Herbert Praehofer (G1 u. G2) Mag. Reinhard Wolfinger (G3 u. G4) Institute for System Software

Mehr

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter Remote- und Server-Programmierung Dr. Wolfgang Süß Thorsten Schlachter Remote Method Invocation (RMI) Servlets WebServices 2 Remote Method Invocation (RMI) Das Remote Method Invocation (RMI)-Framework

Mehr

Übungen Informatik I. JAVA - Eclipse. elga Gabler, Holger Vogelsang, Christian Pape. Übungen Informatik 1 1

Übungen Informatik I. JAVA - Eclipse. elga Gabler, Holger Vogelsang, Christian Pape. Übungen Informatik 1 1 Übungen Informatik I JAVA - Eclipse Übungen Informatik 1 1 Integrierte Entwicklungsumgebungen Integrierte Entwicklungsumgebung (IDE): vereint Editor, Compiler, Debugger und andere Entwicklungswerkzeuge

Mehr

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de Das Build Tool Ant Sebastian Mancke, mancke@mancke-software.de Grundlagen Motivation Bei der Übersetzung und Pflege von Software treten viele, gleich bleibende Arbeitsschritte auf. Übersetzen des Codes

Mehr

Programmierkurs Java. Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.

Programmierkurs Java. Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck. Programmierkurs Java Grundlagen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Algorithmen, Maschinen- und Programmiersprachen Algorithmen

Mehr

Web 2.0 Software-Architekturen

Web 2.0 Software-Architekturen Web 2.0 Software-Architekturen Servlets als Controller einer MVC Web Architektur Prof. Dr. Nikolaus Wulff HTTP und HTML Das HyperText TransferProtokoll (HTTP) beschreibt eine einfache verbindungslose Kommunikation,

Mehr

Managed VPSv3 Was ist neu?

Managed VPSv3 Was ist neu? Managed VPSv3 Was ist neu? Copyright 2006 VERIO Europe Seite 1 1 EINFÜHRUNG 3 1.1 Inhalt 3 2 WAS IST NEU? 4 2.1 Speicherplatz 4 2.2 Betriebssystem 4 2.3 Dateisystem 4 2.4 Wichtige Services 5 2.5 Programme

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Effiziente Anwendungs-Entwicklung mittels Business Software Framework BISON Solution

Effiziente Anwendungs-Entwicklung mittels Business Software Framework BISON Solution Effiziente Anwendungs-Entwicklung mittels Business Software Framework BISON Solution Thomas Seiler Product Manager Technology BISON Schweiz AG Agenda Vergleich - Business Software Framework zu.net Framework

Mehr

Oracle Weblogic Administration Grundlagen

Oracle Weblogic Administration Grundlagen Oracle Weblogic Administration Grundlagen Seminarunterlage Version: 1.07 Version 1.07 vom 14. September 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

eclipse - Entwicklungsumgebung und mehr ETIS SS05

eclipse - Entwicklungsumgebung und mehr ETIS SS05 eclipse - Entwicklungsumgebung und mehr ETIS SS05 Gliederung Motivation Geschichte Architektur Platform Runtime Eclipse Platform Java Development Tools (JDE) Plugin Development Environment (PDE) Zusammenfassung

Mehr

Client/Server-Systeme

Client/Server-Systeme Client/Server-Systeme Prof. Dr.-Ing. Wilhelm G. Spruth SS 2005 Teil 16 RMI, DCOM, Webservices cs 1100 ww6 sch 05-97 Remote Method Invocation (RMI) JVM JVM Client Server Stub Java Remote Skeleton Method

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Das Interceptor Muster

Das Interceptor Muster Das Interceptor Muster Implementierung des Interceptor Musters basierend auf OSGi and Friends Benjamin Friedrich Hochschule für Technik und Wirtschaft des Saarlandes Praktische Informatik - Entwurfsmuster

Mehr

Content Management mit JSR-170 und dem Open Source CMS Magnolia

Content Management mit JSR-170 und dem Open Source CMS Magnolia Content Management mit JSR-170 und dem Open Source CMS Magnolia Dr. Ralf Hirning LogicaCMG 2006. All rights reserved Agenda Überblick Features Redaktionsprozess Beispielimplementierung Magnolia Editionen

Mehr

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Eclipse Equinox als Basis für Smart Client Anwendungen Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Übersicht Definition / Architektur Smart Client Smart Client mit RCP / Equinox Gesamtfazit

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Warum EJB Technologie (1)?

Warum EJB Technologie (1)? Datenbanken und Informationssysteme 2 SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS 2004 Folie EJB - 1 Warum EJB Technologie

Mehr

Modul Software Komponenten 10 Komponentenarchitektur

Modul Software Komponenten 10 Komponentenarchitektur Modul Software Komponenten 10 Komponentenarchitektur Teil 3 Peter Sollberger Eine erste CORBA Anwendung Inhalt Dienstag, 4. November Object Request Broker CORBA Architektur und Komponenten (Teil 1) Übung:

Mehr

Lightweight Java in der Automatisierungstechnik

Lightweight Java in der Automatisierungstechnik Lightweight Java in der Automatisierungstechnik Erfahrungen aus dem Anlagenbau Dr. Markus Eiglsperger eig@zuehlke.com Business Driver im Anlagenbau Kosten Modularisierung Vernetzung Agilität Paradigmenwechsel

Mehr

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien CORBA Beispiel einer Middleware-Plattform Christian Fass WS 2013/14 Software Engineering: Basistechnologien Allgemeines Common Object Request Broker Architecture Middleware: Vermittelt zwischen Obekten/Prozessen

Mehr

ENTWICKLUNGS- UND LAUFZEITUMGEBUNG DER CSE: ECLIPSE UND JBOSS. Piotr Kasprzak

ENTWICKLUNGS- UND LAUFZEITUMGEBUNG DER CSE: ECLIPSE UND JBOSS. Piotr Kasprzak ENTWICKLUNGS- UND LAUFZEITUMGEBUNG DER CSE: ECLIPSE UND JBOSS Piotr Kasprzak Agenda Laufzeitumgebung Java EE (J2EE) Motivation APIs / Technologien JBoss Entwicklungsumgebung Eclipse Ausblick Java EE -

Mehr

Internetanbindung von Datenbanken

Internetanbindung von Datenbanken Internetanbindung von Datenbanken Oracle Application Server Oracle Application Server - 1 Gliederung Einführung Oracle Application Server (OAS) Praxis- und Diplomarbeitenverwaltung LiveHTML Kritik Becker,

Mehr

Inhaltsverzeichnis. Enterprise Java im Überblick. Technologien der Java2 Enterprise Edition

Inhaltsverzeichnis. Enterprise Java im Überblick. Technologien der Java2 Enterprise Edition Inhaltsverzeichnis Vorwort 13 I Enterprise Java im Überblick 1 Bedeutung von Enterprise Java und IBM WebSphere 21 1.1 Enterprise Java 23 1.1.1 Anforderungen 23 1.1.2 E-Business 30 1.1.3 Java 36 1.2 IBM

Mehr

Mobile Agenten am Beispiel JADE (Java Agent DEvelopment Framework) Vorstellung in der Übung zu Konzepte Verteilter Systeme

Mobile Agenten am Beispiel JADE (Java Agent DEvelopment Framework) Vorstellung in der Übung zu Konzepte Verteilter Systeme Mobile Agenten am Beispiel JADE (Java Agent DEvelopment Framework) Vorstellung in der Übung zu Konzepte Verteilter Systeme Agenda Mobile Agenten allgemein JADE - Java Agent DEvelopment Framework Anwendungsfall

Mehr

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013 Programmiervorkurs Wintersemester 2012/2013 Organisation: Steffen Gebert, Alexander Wolff Tutoren: Jürgen Zöller, Jonathan Stoll Kontakt (für Organisatorisches, Fehler auf Folien...): Steffen Gebert steffen.gebert@informatik.uni-wuerzburg.de

Mehr

Mobile Application Development

Mobile Application Development Mobile Application Development Android: Einführung Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Lernziele Der/die Kursbesucher/in kann

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Programmierung. Programme, Compiler, virtuelle Maschinen, Java

Programmierung. Programme, Compiler, virtuelle Maschinen, Java Programmierung Programme, Compiler, virtuelle Maschinen, Java Programme Ein Programm ist eine Folge von Anweisungen, die einem Computer sagen, was er tun soll tuwas.c for(int i=0; i=0; i

Mehr

Erste Schritte zum lauffähigen Java Programm

Erste Schritte zum lauffähigen Java Programm Erste Schritte zum lauffähigen Java Programm Diese kleine Einführung ist eine Hilfe für Studenten der Vorlesung SWT I zur Meisterung der sich ergebenden Hürden bei der Erstellung eines ersten kleinen Java-Programms.

Mehr

Grundlagen der Informatik Übungen 1.Termin

Grundlagen der Informatik Übungen 1.Termin Grundlagen der Informatik Übungen 1.Termin Dr. Ing Natalia Currle-Linde Institut für Höchstleistungsrechnen 1 Kurzvorstellung Dr.-Ing. Natalia Currle-Linde linde@hlrs.de Institut für Höchstleistungsrechnen

Mehr

-Testen verteilter Anwendungen

-Testen verteilter Anwendungen -Testen verteilter Anwendungen Seminar Simulation und Bildanalyse mit Java im SS04 Konstantin Tjo, Urs Pricking Testen verteilter Anwendungen 1 Übersicht Einführung in verteilte Anwendungen RMI (Remote

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

1. Der Einstieg in Java

1. Der Einstieg in Java 1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen

Mehr

Projekt AGB-10 Fremdprojektanalyse

Projekt AGB-10 Fremdprojektanalyse Projekt AGB-10 Fremdprojektanalyse 17. Mai 2010 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Produktübersicht 3 3 Grundsätzliche Struktur und Entwurfsprinzipien für das Gesamtsystem 3 3.1 Die Prefuse Library...............................

Mehr

Anwendung eines Enterprise Java Beans

Anwendung eines Enterprise Java Beans Anwendung eines Enterprise Java Beans EJB Server EJB Container Remote Interface Home Interface EJB Object Der EJB Container kümmert sich um die Kommunikation des Beans mit anderen Komponenten, wobei er

Mehr

Android Kurs Online Kurs Entwicklung auf Android-Handys

Android Kurs Online Kurs Entwicklung auf Android-Handys Android Kurs Online Kurs Entwicklung auf Android-Handys Akademie Domani info@akademiedomani.de Allgemeines Programm des Kurses Modul Eins - Programmierung J2ee 1) Grundlegende Java - Programmierung : Grundlegende

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

Internet-basierendes Autorensystem zur Erschließung historischen Kulturguts. Thorsten Ludewig. Juni 2004

Internet-basierendes Autorensystem zur Erschließung historischen Kulturguts. Thorsten Ludewig. Juni 2004 METEOR Internet-basierendes Autorensystem zur Erschließung historischen Kulturguts Thorsten Ludewig Juni 2004 1 Übersicht Was ist METEOR Architektur Technische Realisierung Zusammenfassung Zukünftige Entwicklungen

Mehr

Eclipse Smart Client Beyond Eclipse RCP. Christian Campo, compeople, 24.April 2007

Eclipse Smart Client Beyond Eclipse RCP. Christian Campo, compeople, 24.April 2007 Eclipse Smart Client Beyond Eclipse RCP Christian Campo, compeople, 24.April 2007 1 Übersicht Definition / Architektur Smart Client Smart Client mit RCP Gesamtfazit 2 Fat - Thin - Smart Fat Client lokale

Mehr

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. WebSphere Application Server Teil 2. Schnittstellen

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. WebSphere Application Server Teil 2. Schnittstellen UNIVERSITÄT LEIPZIG Mainframe Internet Integration Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013 WebSphere Application Server Teil 2 Schnittstellen el0100 copyright W. G. Spruth, wgs

Mehr

Komponentenmodelle II

Komponentenmodelle II Komponentenmodelle II DCOM / CORBA Detlef Streitferdt Technische Universität Ilmenau DCOM Architektur Client Proxy Stub Component CoCreateInstance Security Provider DCE RPC Protocol Stack Security Provider

Mehr

CLR CIL MCS ECMA-335. Linux.Ne t. 2005 Albrecht Liebscher, Erlanger Linux Tage

CLR CIL MCS ECMA-335. Linux.Ne t. 2005 Albrecht Liebscher, Erlanger Linux Tage C# CLR CIL MCS ECMA-335 Linux.Ne t Was ist.net? Microsoft Homepage:.NET is the Microsoft Web services strategy to connect information, people, systems and devices through software. Mono Handbuch:.Net besteht

Mehr

Enterprise JavaBeans

Enterprise JavaBeans Enterprise JavaBeans Sebastian Pipping 18. Dezember 2006 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License. Teil I J2EE J2EE Was ist J2EE? Was ist J2EE?

Mehr

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick Vorlesung Objektorientierte Softwareentwicklung Sommersemester este 2008 Kapitel 0. Java-Überblick Was sind die Ziele? Warum Java? Komplexe Anwendungen e-business verteilt zuverlässig sicher mobil persistent

Mehr

Vorteile von Java und Konvergenz Service Creation mit JAIN Network Management mit JMX Fazit

Vorteile von Java und Konvergenz Service Creation mit JAIN Network Management mit JMX Fazit Hochschule für Technik und Architektur Chur Dr. Bruno Studer Studienleiter NDS Telecom, FH-Dozent bruno.studer@fh-htachur.ch 1 GSM: 079/610 51 75 Agenda Vorteile von Java und Konvergenz Service Creation

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2013/2014 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Kommunikations-Middleware Bietet höhere Kommunikations-Dienste

Mehr

InQMy Application Server Flexible Softwareinfrastruktur für verteilte Anwendungen

InQMy Application Server Flexible Softwareinfrastruktur für verteilte Anwendungen InQMy Application Server Flexible Softwareinfrastruktur für verteilte Anwendungen IN-Q-My Title Company (Name) / 1 Agenda Firmenübersicht ebusiness Evolution InQMy Application Server Architektur Zusammenfassung

Mehr

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung Ludwig-Maximilians-Universität München Institut für Informatik Programmierung und Softwaretechnik (PST) Prof. Wirsing 6. Mai 2009 1 Der Name Java

Mehr

Centaurus-Platform - JSP/Servlets für Webhosting

Centaurus-Platform - JSP/Servlets für Webhosting Centaurus-Platform - JSP/Servlets für Webhosting by Thorsten Kamann, Peter Roßbach NOTICE: Die Centaurus-Platform basiert auf einem Tomcat 5 Release. Im Wesentlichen bieten wir sinnvolle Erweiterungen

Mehr

VS12 Slide 1. Verteilte Systeme. Vorlesung 12 Sebastian Iwanowski FH Wedel

VS12 Slide 1. Verteilte Systeme. Vorlesung 12 Sebastian Iwanowski FH Wedel VS12 Slide 1 Verteilte Systeme Vorlesung 12 Sebastian Iwanowski FH Wedel Mögliche Plattformen für Web Services VS12 Slide 2 VS12 Slide 3 Java-Software für verteilte Systeme J2EE: Java 2 Enterprise Edition

Mehr

.NET-Networking 2 Windows Communication Foundation

.NET-Networking 2 Windows Communication Foundation .NET-Networking 2 Windows Communication Foundation Proseminar Objektorientiertes Programmieren mit.net und C# Fabian Raab Institut für Informatik Software & Systems Engineering Agenda Grundproblem Bestandteile

Mehr

Objekt-Orientierte Programmierung

Objekt-Orientierte Programmierung Objekt-Orientierte Programmierung Ein OO-Programm modelliert eine Anwendung als eine Welt von Objekten, die miteinander in Beziehung stehen ( später). Ein Objekt kann andere Objekte erzeugen. Ein Objekt

Mehr

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 A. Beschreibung der Projektarbeit. Welche Aufgabe haben Sie im Rahmen der Projektarbeit gelöst? 2. Mit welchen Tools bzw. Programmen (Anwendung,

Mehr

AS 7 / EAP 6 - Clustering. heinz.wilming@akquinet.de @akquinet h3p://blog.akquinet.de

AS 7 / EAP 6 - Clustering. heinz.wilming@akquinet.de @akquinet h3p://blog.akquinet.de AS 7 / EAP 6 - Clustering heinz.wilming@akquinet.de @akquinet h3p://blog.akquinet.de Was ist die EAP 6? EAP6!= EAP5 +1 JBoss Enterprise ApplicaBon PlaCorm 6 Stabile und unterstützte Pla>orm Basiert auf

Mehr