Einführung in BlazeDS

27. Februar 2009 von Ralph Bergmann in Allgemein, Java, Treffen
Schlagwörter:, , , , , , , ,

Nun ist der Februar schon der kürzeste Monat des Jahres…. müssen wir auch noch zwei Vorträge haben…

Ende Februar, genau genommen am 27. wird uns Alger Werft einen Vortrag über BlazeDS halten.

Der Vortrag:

BlazeDS ist eine server-basierte Remoting- und Messaging-Technologie für Java Webapplikationen. Adobe Flex und Adobe AIR-Anwendungen steht mit BlazeDS eine einfache Verbindung zu Back-End-Daten mittels Remote Procedure Calls sowie Push-Daten in Echtzeit zur Verfügung. Mit BlazeDS können somit reaktionsschnelle Rich-Internet-Anwendungen (RIA) auf Basis der Flash Platform und JavaEE erstellt werden.

Inhalte des Vortrags:

  • Java Klassen als Remote Objects
  • Messaging – Kommunikation zwischen Anwendungen
  • Integration von Spring und EJB3 mit Factories
  • Spring BlazeDS Integration von SpringSource
  • Vergleich mit Live Cycle Data Services
  • Alternativen

Der Redner:

Alger Werft ist Computer Scientist bei der Adobe Systems Engineering GmbH in Hamburg. Dort befasst er sich mit Infrastrukturen für Online Services auf Basis der Flash Platform. Darüber hinaus gilt sein Interesse Webapplikationen im JavaEE-Umfeld.
GameDuell

Zum trinken:

Das Getränkekontingent wird gesponsert von GameDuell – Deutschlands größter Spieleseite im Internet.
We are hiring! www.gameduell.de/jobs

Der Treffpunkt:

Wir treffen uns im newthinking store, Tucholskystrasse 48, 10117 Berlin.

Der Ablauf:

18:30 Tür auf, Zeit für etwas Networking
19:00 Vortrag
danach gehts zum Social Event ins Restaurant Kyo

JEditorPane mit Zeilenhervorhebung

7. Februar 2009 von Jan in Java, Java Code Beispiele
Schlagwörter:, ,

Ich habe für meinen Editor eine Möglichkeit gesucht die aktuelle Zeile unter dem Cursor vollständig mit einer anderen Hintergrundfarbe hervorzuheben. Diese Möglichkeit habe ich folgendermassen realisiert:

Zusammenfassung:

Der JEditorPane füge ich einen speziellen CaretListener hinzu der bei Veränderungen des Cursors einen wiederum für die aktuelle Zeile einen Highlighter einrichtet. Das besondere ist der als innere Klasse realisierte HightlighterPainter. Dieser ist so entwickelt, dass er die ganze Zeile unabhängig von der Zeichenanzahl also auf die sichtbare Breite des Editors hervorhebt.

Hier nun der Quelltext des CaretListeners:

package sqlrunner.text;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
 
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.plaf.TextUI;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
import javax.swing.text.LayeredHighlighter;
import javax.swing.text.Position;
import javax.swing.text.Utilities;
import javax.swing.text.View;
 
public class HighlightCurrentLineCaretListener implements CaretListener {
 
    static final Color DEFAULT_COLOR = new Color(230, 230, 250);
 
    private Highlighter.HighlightPainter painter;
 
    private Object highlight;
 
    public HighlightCurrentLineCaretListener() {
 
        this(null);
    }
 
    public HighlightCurrentLineCaretListener(Color highlightColor) {
 
        Color c = highlightColor != null ? highlightColor : DEFAULT_COLOR;
        this.painter = new LineHighlightPainter(c);
    }
 
    public void caretUpdate(CaretEvent evt) {
 
        final JTextComponent comp = (JTextComponent) evt.getSource();
        if (comp != null && this.highlight != null) {
            comp.getHighlighter().removeHighlight(this.highlight);
            this.highlight = null;
        }
        int pos = comp.getCaretPosition();
        final Element elem = Utilities.getParagraphElement(comp, pos);
        int start = elem.getStartOffset();
        int end = elem.getEndOffset();
        try {
            this.highlight = comp.getHighlighter().addHighlight(start,
                                                                end,
                                                                this.painter);
            comp.repaint();
        } catch (BadLocationException ex) {
            ex.printStackTrace();
        }
    }
 
    /**
     * Simple highlight painter that fills a highlighted area with
     * a solid color.
     */
    public static class LineHighlightPainter extends
        LayeredHighlighter.LayerPainter {
 
        private Color color;
 
        /**
         * Constructs a new highlight painter. If <code>c</code> is null,
         * the JTextComponent will be queried for its selection color.
         *
         * @param c
         *            the color for the highlight
         */
        public LineHighlightPainter(Color c) {
 
            this.color = c;
        }
 
        /**
         * Returns the color of the highlight.
         *
         * @return the color
         */
        public Color getColor() {
 
            return this.color;
        }
 
        // --- HighlightPainter methods ---------------------------------------
        /**
         * Paints a highlight.
         *
         * @param g
         *            the graphics context
         * @param offs0
         *            the starting model offset &gt;= 0
         * @param offs1
         *            the ending model offset &gt;= offs1
         * @param bounds
         *            the bounding box for the highlight
         * @param c
         *            the editor
         */
        public void paint(Graphics g, int offs0, int offs1, Shape bounds,
                          JTextComponent c) {
 
            final Rectangle alloc = bounds.getBounds();
            try {
                // --- determine locations ---
                TextUI mapper = c.getUI();
                final Rectangle p0 = mapper.modelToView(c, offs0);
                final Rectangle p1 = mapper.modelToView(c, offs1);
 
                // --- render ---
                if (getColor() == null) {
                    g.setColor(c.getSelectionColor());
                } else {
                    g.setColor(getColor());
                }
                final Rectangle r = p0.union(p1);
                g.fillRect(r.x, r.y, r.width, r.height);
            } catch (BadLocationException e) {
                // can't render
            }
        }
 
        // --- LayerPainter methods ----------------------------
        /**
         * Paints a portion of a highlight.
         *
         * @param g
         *            the graphics context
         * @param offs0
         *            the starting model offset &gt;= 0
         * @param offs1
         *            the ending model offset &gt;= offs1
         * @param bounds
         *            the bounding box of the view, which is not
         *            necessarily the region to paint.
         * @param c
         *            the editor
         * @param view
         *            View painting for
         * @return region drawing occured in
         */
        @Override
        public Shape paintLayer(Graphics g, int offs0, int offs1, Shape bounds,
                                JTextComponent c, View view) {
 
            if (getColor() == null) {
                g.setColor(c.getSelectionColor());
            } else {
                g.setColor(getColor());
            }
            // Should only render part of View.
            try {
                // --- determine locations ---
                Shape shape = view.modelToView(
                                               offs0,
                                               Position.Bias.Forward,
                                               offs1,
                                               Position.Bias.Backward,
                                               bounds);
                Rectangle r = shape instanceof Rectangle ? (Rectangle) shape
                        : shape.getBounds();
                g.fillRect(r.x, r.y, c.getWidth(), r.height);
                return r;
            } catch (BadLocationException e) {
                // can't render
            }
            return null;
        }
    }
}

Diesen CaretListener muss man nun mit:

textComp.addCaretListener(new HighlightCurrentLineCaretListener());

der Textkomponente hinzufügen. Hat bei mir ausgezeichnet funktioniert. Ich habe diesen Code unter Mac OS X und Windows getestet und er läuft abwärts bis Java 5.

  • Kommentare deaktiviert

Nachlese JBoss jBPM und Drools

6. Februar 2009 von Ralph Bergmann in Allgemein
Schlagwörter:, , , , , ,

Am Mittwoch hatte uns Bernd Rücker einen Einblick in JBoss jBPM und Drools gegeben.

Es war für uns der erste Vortrag im newthinking store. Ja ich muss gestehen, ich war gespannt, wie viele den Weg finden werden und ob wir den Laden zum “platzen” bringen :-)

Der Vortrag selbst war – auch, weil ich mit dem Thema noch keine Berührungen hatte – sehr interessant. Und obwohl Bernd mit seinem Hals zu kämpfen hatte, hielt er den Abend durch und stand danach noch fleißig Rede und Antwort.

Vorstellung JBoss jBPM und Drools – Geschäftsprozesse und Regeln mit Open Source Java

4. Februar 2009 von Ralph Bergmann in Allgemein, Java, Treffen
Schlagwörter:, , , , , , , , , ,

Habt Ihr schon genug von JBoss und Co? Nein?! Na dann kanns ja munter weiter gehen :-)

Weil es terminlich so gut passt, wird am 04.02. Bernd Rücker uns einen Vortrag zum Thema “JBoss jBPM und Drools” halten.

Der Vortrag:

Themen wie Business Process Management (BPM) und Business Rules Management (BRM) sind heute in aller Munde. Nicht selten wird das Thema aber nur auf der ‘Power Point’-Ebene beleuchtet. Mit dem Vortrag möchte ich die Konzepte ganz konkret an den Open Source Projekten JBoss jBPM und JBoss Drools erläutern und anhand von funktionierenden Code-Beispielen zeigen, wie damit auch in ‘ganz normalen’ Java-Projekten Nutzen gestiftet werden kann. Und Beispiele erfolgreicher Praxisprojekte gibt es inzwischen auch zahlreich.
Ein kleiner Blick in die Innereien von jBPM soll dabei die Angst vor diesen Projekten nehmen, die auch nur mit normalen Java-Wasser kochen.

Der Redner:

Bernd Rücker ist Berater und Geschäftsführer bei der camunda services GmbH (www.camunda.com). Er verfügt über mehrjährige Projekterfahrung als Entwickler, Softwarearchitekt und Coach im Umfeld von Unternehmensanwendungen in Java EE. Sein besonderes Interesse liegt dabei im Bereich BPM & SOA sowie deren praktische Umsetzung. Er ist als Trainer für BPM- & SOA-Themen sowie JBoss-Technologie-Schulungen im Einsatz. Des Weiteren ist Bernd Rücker Autor eines EJB3-Buches, zahlreicher Fachartikel, Sprecher auf Konferenzen aber auch Committer im JBoss jBPM Projekt.
Zur Zeit schreibt er an einem Buch zur BPMN und verbringt einen Teil seiner Zeit bei United Internet (1&1, gmx.de, web.de), wo er mit am Aufbau der 1&1 SOA Platform beteiligt ist. Diese basiert auf JBoss ESB und jBPM.

Der Treffpunkt:

Wir treffen uns im newthinking store, Tucholskystrasse 48, 10117 Berlin.

Der Ablauf:

18:30 Tür auf, Zeit für etwas Networking
19:00 Vortrag
danach gehts zum Social Event ins Restaurant Kyo