IRC Log tutorials.de Java Chat 04.04.2007 20 Uhr

Thomas Darimont

Erfahrenes Mitglied
[20:21] tom: So dann mal hallo zusammen
[20:21] GSMaster: hallöchen
[20:21] tom: na dann lasst uns mal loslegen
[20:21] split: thema: neuerungen in java 5 und 6?
[20:21] tom: ich würde vorschlagen, dass wir uns einfach mal ein thema rauspicken
[20:21] tom: jo zum Beispiel
[20:22] split: okay
[20:22] tobee: ähm ich bin glaub ich hier völlig falsch, sorry
[20:22] mkoeni1: StAX ?
[20:22] tom: also wer von euch hat denn schon was mit den Neuerungen in Java 5 bzw. Java 6 gemacht?
[20:22] mkoeni1: oder ist das zu schwer ?
[20:22] tom: Kein problem
[20:22] tobee: schau aber gerne ( und halt jetzt meine klappe ;) )
[20:23] split: Die JAva 5 Neuerungen kenn ich eingentlich alle - aber Java 6 würde mich interessieren, vorallem in Verbindung mit den neuen Scripting-Möglichkeiten
[20:23] mkoeni1: auch gut
[20:24] tom: Also alle Neuerungen in Java 6 gibts beispielsweise hier:
[20:24] tom: http://java.sun.com/javase/6/webnotes/features.html
[20:24] tom: Was ich dort am interessantesten finde ist die möglichkeit sich mit einer JMX Console zur Laufzeit an eine Java Anwendung zu attachen ohne diese vorher mit einem besonderen Parameter
[20:24] tom: (unter Java 5 -Dcom.sun.management.jmxremote) starten zu müssen
[20:25] tom: Ansonsten vielleicht sachen die man noch nicht so viel gesehen hat:
[20:26] tom: Im collectionsframework gibts jetzt eine neue Queue Klasse (Deque) die das anfügen/löschen sowohl am Kopf als auch am Schwanz unterstützt
[20:26] *** GSMaster (GSMaster@user-A027506.ipt.aol.com) has signed off IRC (Connection reset by peer).
[20:26] tom: Mit einem NavigatableSet / NavigatableMap kann man "Fuzzy" in einem Set/ einer Map suchen
[20:27] tom: außerdem kann man diese (geordneten) Strukturen sowohl aufwärts als auch abwärts abwandern
[20:27] tom: auch nett :)
[20:28] tom: Auch arrays kann man nun "einfacher" vergrößern
[20:28] tom: Beispiel aus der Doku:
[20:28] tom: Alt:
[20:28] tom: int[] newArray = new int[newLength];
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);

[20:28] tom: neu:
[20:28] tom: int[] newArray = Arrays.copyOf(a, newLength);


[20:29] tom: Ansonsten gibts nun von Haus aus Unterstützung für JAX WS (Webservices)
[20:29] tom: Beispiel gibts hier:
[20:29] tom: http://www.tutorials.de/forum/java/268800-einfache-webservices-unter-java-6-mustang.html
[20:30] tom: Ach ja Instrumentation erlaubt nun auch das retransformen von Klassen zur Laufzeit
[20:30] tom: eine Verwendung ist dafür Beispielsweise
[20:30] tom: http://www.tutorials.de/forum/java/...-einer-laufenden-anwendung-rausschreiben.html
[20:30] *** reima (reima@user-58185AD8.dip0.t-ipconnect.de) has joined #java.
[20:30] reima: hi
[20:30] tom: hi
[20:31] tom: Ansonsten hat sich an einen anderen Stellen viel in Java 6 getan
[20:32] tom: Auch nett, das File API wurde nun endlich dahingehend erweitert, dass man auch den freien Speicher auf beliebigen Laufwerken ermitteln kann
[20:32] tom: Musste zuvor immer über native Libs oder über kleine Hacks (AUsgabe von entsprechenden Konsolentools parsen) implementiert werden
[20:33] tom: Ansonsten gibts mit dem Java Compiler API auch zugriff auf den Java Compiler
[20:33] tom: das war früher natürlich auch möglich in dem man das tools.jar in den Classpath gelegt hat
[20:33] tom: javac ist schließlich nichts anderes als auch eien Java Anwendung ;-)
[20:34] tom: Hier:
[20:34] tom: http://www.javalobby.org/java/forums/m91985882.html
[20:34] tom: gibts ein Beispiel dazu
[20:36] tom: Ansonsten hat sich hinsichtlich Performance einiges in Java 6 getan
[20:36] tom: in Kürze kommt auch ein entsprechendes Whitepaper dazu raus
[20:36] tom: http://java.sun.com/performance/reference/whitepapers/6_performance.html
[20:37] tom: Unter http://developers.sun.com/learning/javaoneonline/2006/
[20:38] tom: findet man aber einige Vorträge die die Performanceverbesserungen in Java 6 detailiert erklären
[20:38] tom: http://developers.sun.com/learning/javaoneonline/2006/coreplatform/
[20:38] *** tobee (tobee@user-24A4C0A8.dip.t-dialin.net) has signed off IRC (Tutorials.de - User helfen Usern!).
[20:38] tom: Ebenso gibts dort detailierte informationen zu Scripting
[20:38] tom: http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-1382.pdf
[20:39] tom: Ein kleines Beispiel dazu gibts hier:
[20:39] tom: http://www.tutorials.de/forum/java/234794-mustang-script-engines-unterstuetzung.html
[20:39] tom: Sagt auch mal jemand was dazu?
[20:39] tom: ;-)
[20:40] mkoeni1: es gibt viel zu tun packen wirs an ;-)
[20:40] reima: Äh... ja... also... Scripting mit Java ist sehr sexy ;)
[20:40] tom: Jep
[20:40] reima: Vor allem weil man eine Vielzahl von Sprachen einbinden kann
[20:40] reima: Unter anderem auch Ruby :)
[20:40] tom: Jep
[20:41] tom: Gibt ja auch genug: http://www.robert-tolksdorf.de/vmlanguages.html
[20:41] split: Wofür ist das Scripting mit Java eigenlich genau gut? Sorry, ich hab mich damit noch gar nicht beschäftigt :)
[20:41] reima: Es muss nur eine Java-Implementierung existieren, die dem Standard JSR-schlagmichtot entspricht
[20:41] tom: Nun damit kannst du abläufe dynamisch gestalten... Beispiel
[20:42] tom: in einer Anwendung werden waren verkauft
[20:42] tom: und du möchtest nun dein rabattsystem sehr flexibel gestalten
[20:42] tom: anstatt nun alle möglichen rabattierungsregeln fest im system zu hinterlegen
[20:43] tom: lagerst du die rabatt berechnung in ein script aus
[20:43] tom: das kann man dann ändern ohne die anwendung neu kompilieren zu müssen
[20:43] reima: Sogar ohne die Anwendung neu starten zu müssen, wenn's sein muss :)
[20:43] tom: das bekommt man natürlich mit anderen techniken genauso hin (jedoch mit wesentlich mehr aufwand)
[20:43] tom: jap
[20:43] split: achso, java ruft das script auf und rechnet mit dessen rückgabewert(?) weiter...
[20:43] tom: jap
[20:44] reima: Man kann dem Script Java-Objekte bereitstellen und ebenso von Java auf Objekte aus dem Script zugreifen
[20:45] split: okay... und welche sprachen werden unterstützt? :)
[20:45] tom: Bei Scripting in Java kannst du auch einen kontext aufbauen über den das script mit der "äußeren" Anwendung kommunizieren kann / Methoden aufrufen kann etc
[20:45] reima: Im Lieferumfang ist soweit ich weiß Rhino dabei, das ist die ECMAScript-Implementation (JavaScript) von Mozilla
[20:46] tom: Jap
[20:46] split: kann man sich das so in etwa (ein bisschen) wie die kommunikation applets<->javascript vorstellen?
[20:46] reima: Ansonsten gibt es noch Ruby, Python...
[20:47] tom: nicht ganz ... die kommunikation läuft innerhalb einer jvm ... bei applet und javascript im browser kommuniziert der browserprozess mit dem jvm prozess im browserprozess ;-)
[20:47] tom: jo
[20:47] tom: JRuby, Jython
[20:47] tom: etc siehe vmlangauges linl ;-)
[20:47] tom: es gibt mehr Sprachen für die JVM als Sprachen für die .Net CLR ;-)
[20:48] tom: Weiter=
[20:48] reima: Das sind jetzt aber nur die Sprachen, für die es einen JVM-Compiler gibt, oder? Das heißt ja noch nicht, dass sie auch der JSR-223 (hab grad nachgeschaut ;)) genügen
[20:48] tom: Das ist richtig, das sind aber auch Scripting sprachen drunter die 223 kompatibel sind
[20:49] reima: Da gab's mal so eine schöne Liste, wo nur die kompatiblen drin waren...
[20:49] tom: Man kann natürlich seine lieblingssprache für 223 bereit machen:
[20:49] tom: http://www.javaworld.com/javaworld/jw-04-2006/jw-0424-scripting.html
[20:49] tom: AFAIK ist das https://scripting.dev.java.net/
[20:49] tom: ist aber leider offline
[20:50] reima: Ah, genau
[20:50] tom: Hier müsste das auch drinen stehen
[20:50] tom: http://blogs.sun.com/sundararajan/resource/Scripting_Sundar_Hyderabad07.pdf
[20:51] tom: ah ja
[20:51] tom: jruby, groovy, beanshell, jacl, jaskell, java,
jawk,jelly,jexl,jruby,javascript,jython,ognl,pnuts,scheme,sl
eep,xpath,xslt ....
[20:52] tom: Weiter?
[20:52] reima: Von mir aus gern
[20:52] mkoeni1: passt schon ;-)
[20:52] tom: Themen?
[20:52] mkoeni1: Unterschiede SAX und StAX
[20:53] tom: SAX Push-Parser und StAX ist ein Pull Parser
[20:53] tom: SAX ist ein Event basierter Push Parser
[20:53] mkoeni1: ich bin dabei ein XML-File zu parsen und verschwende einen Gedanken an an die Technik
[20:54] tom: der Parser parsed das Dokument und während des parses eines Elements wird ein "event" getriggert das die die handleXXXX Methode ines DocumentHandlers aufruft...
[20:54] mkoeni1: ok
[20:55] tom: die Programmsteuerung wird indirekt durch den Parser bestimmt / getriggert -> der Parser drückt quasi den Methodenaufruf an...
[20:55] mkoeni1: ok
[20:55] tom: Stax ist ein Pull Parser bei dem der Verwender die volle Kontrolle über den Parsing mechanismus hat
[20:55] mkoeni1: in wie fern ?
[20:55] tom: der Verwender "zieht" praktisch die Elemente aus dem Dokument ... in dem er einen Cursor auf Element / Attribut / Character-Ebene bewegt
[20:56] tom: der Verwender hat die Kontrolle wie das Dokument verarbeitet wird
[20:56] mkoeni1: ok
[20:56] mkoeni1: das reicht Danke ;-)
[20:57] tom: SAX Parser eigenen sich für das schnelle einlesen von mittelgroßen Dokumenten (bis max > 15mb)
[20:57] tom: hier wird auch im hintergrund eine entsprechende Objektstruktur (ähnlich zu einem DOM Parser) aufgebaut was den speicher ziemlich schnell vollhaut
[20:57] mkoeni1: meine Dokumente bewegen sich im kB Bereich ;-)
[20:58] tom: Mit einem StAX basiertem parser hingegen kann man auch mit etwas geschick mehrere 100mb große XML Dokumente parsen...
[20:58] tom: wenn man das muss...
[20:58] mkoeni1: Nein das bedarf es nicht
[20:58] mkoeni1: Trotzdem Danke
[20:59] tom: Okay, weiter?
[20:59] tom: Themen?
[20:59] split: ich hätte da noch ne kurze - ganz andre - frage...
[20:59] tom: ja?
[20:59] reima: Ist eigentlich beim JDK inzwischen ein XML-Parser dabei oder braucht man eine Fremdbibliothek? Musste mich damit noch nie beschäftigen, aber wär gut zu wissen :)
[20:59] tom: da ist Xerces dabei
[20:59] tom: du brauchst eigentlich keine Fremdbibliothek
[21:00] tom: jedoch arbeiten diese parser direkt mit dem w3c DOM Objekt Model...
[21:00] reima: Der von Apache?
[21:00] tom: das ist ziemlich nhandlich
[21:00] tom: Xerces ist der von apache ;-)
[21:00] reima: Ah, okay
[21:00] tom: in Java 1.4 gabs nen anderen XML Parser der hieß crimson...
[21:00] tom: der war aber super langsam...
[21:00] reima: Und Xerces ist dabei seit 1.5?
[21:00] split: ist es möglich, eine einzige socket-verbindung mit - sagen wir - mehreren kanälen auszustatten, um mehrere daten gleichzeitig auszutauschen (z.B. zwei dateien gleichzeitig übermitteln)
[21:01] tom: Andere XML bibliotheken wie JDOM / Dom4J haben da ein wesentlich anwenderfreundlicheres API
[21:01] tom: klar
[21:01] tom: MultiPlexing
[21:01] tom: ist hier das stichwort
[21:01] split: MultiPlexing ist mir ein Begriff - doch wie kann man das mit Java umsetzen? Gibt's fertige Bibliotheken?
[21:01] tom: Siehe
[21:01] tom: http://www.onjava.com/pub/a/onjava/2004/09/01/nio.html
[21:02] tom: Ich kenne dazu jetzt keine Bilbiothek
[21:02] tom: aber mit java.nio ist das relativ einfach zu bauen
[21:02] tom: hab da mal ein Beispiel gemacht
[21:02] tom: wenn ich das noch finde poste ich das die tage mal
[21:03] split: wäre super, danke! (brauch ich für das abschlussprojekt meiner ausbildung :))
[21:03] tom: Weiter?
[21:03] split: sonst fällt mir so ganz spontan nix mehr ein...
[21:03] tom: Sonster noch was`
[21:04] tom: Macht eigentlich jemand von den Anwesenden hier auch etwas mit .Net ?
[21:04] mkoeni1: Nein, im Augenblick nicht
[21:04] reima: Nur wenn ich's nicht verhindern kann
[21:04] split: Nein - nicht aus Inakzeptanz *g* sondern aus Zeitgründen...
[21:04] tom: hehe
[21:04] reima: crazy-weasel! Das war dein Stichwort! ;)
[21:05] mkoeni1: Hast du noch Lust was über Axis2 zu sagen Tom ?
[21:05] tom: Was genau?
[21:05] mkoeni1: wenn nicht macht es auch nichts
[21:05] mkoeni1: In ein paar Tagen kommt ein Büchlein raus ;-)
[21:06] tom: Hab im studivz mal einen Vergleich zu Axis 2 und XFire geposted
[21:06] tom: schau mal hier:
Axis2
- XML Processing basiert auf AXIOM Axis Object Model (wrapper um StAX)
- Unterstützung für SOAP 1.1/1.2
- Tools verfügbar (Plugins für Eclipse, IntelliJ IDEA)
- Unterstützung für Databinding
- Databinding Austauschbar (JAXB2, JaxMe, JBiX, XMLBeans)
- WS Basic Profile 1.1 kompatibel)
- Play's well with others
- sehr flexibler / erweiterbar.

XFire
- XML Processing basiert auf StAX
- Unterstützung für SOAP 1.1/1.2
- Tools verfügbar (Plugins für Eclipse)
- Unterstützung für Databinding
- Databinding Austauschbar (JAXB2, JaxMe, JBiX, XMLBeans)
- WS Basic Profile 1.1 kompatibel)
- Play's well with others (Spring Integration)
- Schlanker Kern

Weiterhin gibts hier:
http://wso2.org/library/588
einen relativ aktuellen (January 29, 2007) Performance Vergleich.
[21:07] mkoeni1: einen einfachen WebService mit dem ADB zum Beispiel
[21:07] mkoeni1: ein WSDL file dazu und eine aar
[21:07] mkoeni1: daraus basteln
[21:08] mkoeni1: steht ja alles oben. OK Danke erstmal für die Sachen
[21:08] tom: Hmmm
[21:08] tom: zu axis 2 hab ich jetzt kein Beispiel..
[21:08] mkoeni1: passt schon ;-)
[21:08] tom: http://www.tutorials.de/forum/java/236622-webservices-mit-spring-und-axis.html
[21:08] tom: hab aber eins für AXIS 1.3
[21:09] tom: Ein Axis 2 Beispiel bau ich dann die tage mal...
[21:09] mkoeni1: Migration ?
[21:09] tom: also du willst ein WSDL vorgeben und daraus die Service-Interfaces generieren... contract first design
[21:09] mkoeni1: ich habe gelesen das Team um Axis2 ist komplett anderst als bei Axis
[21:09] tom: Jop
[21:09] mkoeni1: ja
[21:10] tom: Die Architektur von AXIS 2 unterscheidet sich auch signifikant von der von AXIS 1.x
[21:11] tom: Hier haben wir aber auch einen Netten Artikel zu AXIS 2
[21:11] tom: http://www-128.ibm.com/developerworks/webservices/library/ws-soa-axis2-1/
[21:11] tom: http://www.tutorials.de/forum/j2ee/...yment-model-der-axis2-webservice-runtime.html
[21:12] tom: Weiter?
[21:12] mkoeni1: Danke mir reichts erstmal ;-)
[21:12] tom: Sonst noch jemand?
[21:12] mkoeni1: Hab genügend Lesematerial zusammen
[21:12] split: ja ganz kurz noch
[21:13] tom: Dann würd ich mal sagen wars das mal wieder ...ne gute Stunde fein fein, wie die Zeit verfliegt ;-)
[21:13] tom: okay?
[21:13] tom: Das chatlog Poste ich dann im Forum... bitte um entsprechende Kommentare... vielleicht bekommen wir dann das nächste mal ein paar Leute mehr zusammen :)
[21:14] split: Annotiations... Ich hab mich damit noch nicht wirklich beschäftigt und auch noch nicht wirklich gebraucht, aber was kann man mit selbst erstellten Annotiations so alles machen? (ich weiß, Java bietet bereits fertige Annotiations an, aber man kann solche ja auch selbst machen?)
[21:15] tom: Nun du kannst beispielsweise mit einer annotation namens @Transactional an einem POJO sagen, dass alle Methodenaufrufe an Instanzen dieser Klasse in einenr Transaktion laufen müssen
[21:15] tom: oder du kannst Persistenzmapping Informationen angeben
[21:16] tom: oder Internationalisierung darüber steuern
[21:16] *** n00ki3 (n00ki3@470C6CAA.A073E82B.FDE3C4BE.IP) has joined #java.
[21:16] tom: @Secure könnte Methodenaufrufe in einem besonderen Sicherheitskontext laufen lassen
[21:16] tom: etc.
[21:16] tom: und und und...
[21:17] tom: da gibts haufenweise Verwendungsmöglichkeiten...
[21:17] split: Wie und wo definiert man (eigene) Annotiations eigentlich? Oder gibt es nur die "fertigen" von Java?
[21:17] reima: Schau mal hier: http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html
[21:17] tom: public @interface SuppressWarnings {
[21:18] tom: man definiert annotations indem man @interface als Typspezfizierer verwendet
[21:18] split: Ah super :) Okay, danke!
[21:18] tom: zusätzlich sagt man dann noch wo man diese annotation überall verwenden darf
[21:18] tom: @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
[21:18] tom: und ob sie zur Laufzeit oder nur zu Kompilezeit zur Verfügung steht
[21:19] tom: Das macht man dann über die RetentionPolicy ...
[21:19] tom: bzw. über @Retention
[21:19] split: Okay... dankeschön :)
[21:19] *** n00ki3 (n00ki3@470C6CAA.A073E82B.FDE3C4BE.IP) has signed off IRC (Tutorials.de - User helfen Usern!).
[21:20] tom: So dann würd ich mal sagen machen wir wieder Schluss, wenns was gebracht hat können wir das gerne öfters machen.
[21:20] reima: Man definiert also den Verwendungszweck einer Annotation über eine Annotation... das nenn ich mal konsequent
[21:20] split: *gg*
[21:20] tom: Klar
[21:20] tom: Eat your own dogfood ;-)
[21:21] mkoeni1: Ich fands lehreich. Danke soweit
[21:21] split: Okay... ich bedankt mich für die vielen Antworten, muss mich jetzt aber leider verabschieden :)
[21:21] tom: kk
[21:21] tom: Bis zum nächsten mal
 

Neue Beiträge

Zurück