JD11TP3 mit JDK1.6

Um die Geschwindigkeit (insgesamt) zu steigern, kann TP3 auch mit JDK 1.6_04 oder höher betrieben werden. Da heißt nicht, dass der Code zwingend gegen dieses JDK kompiliert wird, sondern nur, das TP3 darunter läuft. TP3 ist zwar offiziell nicht für JDK1.6 freigegeben, aber einige Posts, z.B. http://forums.oracle.com/forums/thread.jspa?messageID=2306557, belegen, dass es ohne größere Probleme geht wenn man von 64-Bit Systemen absieht.

Da JDK 1.6 nicht mitgeliefert wird, sollte man es von hier herunterladen und installieren. Für das weitere gehe ich davon aus, dass das JDK im Pfad c:javajdk1.6.0_04 installiert wurde.

Jetzt muss nur von die Konfigurationsdatei von JD11 angepasst werden. Diese ist unter /jdev/bin/jdev.conf zu finden. Bei mir sieht sie so aus:

##############################################################################<br />
#<br />
# Oracle JDeveloper Launcher Configuration File<br />
# Copyright 2000-2007 Oracle Corporation.<br />
# All Rights Reserved.<br />
#<br />
##############################################################################</p>
<p>##############################################################################<br />
#Hier den Pfad zum verwendenden JDK eintragen<br />
SetJavaHome D:/java/jdk1.6.0_04/<br />
##############################################################################</p>
<p>IncludeConfFile ../../ide/bin/ide.conf</p>
<p>#<br />
# MaxPermSize is required to run JDeveloper with Sun Microsystems virtual<br />
# machine (-client and -server). The default value is 64M, which isn't<br />
# enough to run JDeveloper successfully (3459434). With the default value,<br />
# JDeveloper will end up running out of memory at some point in time.<br />
# This option is ignored by OJVM (-ojvm). For technical details, see:<br />
# http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html<br />
#<br />
AddVMOption -XX:MaxPermSize=160M</p>
<p>#<br />
# Replace heavyweight AWT controls with lightweight implementations.<br />
#<br />
AddVMOption -Xbootclasspath/p:../lib/lwawt.jar<br />

Ich habe die Zeilen 9-12 hinzugefügt. Natürlich sollte JDev nicht laufen, wenn man die Zeile SetJavaHome c:/java/jdk1.6.0_04/ hinzufügt!

Beim Start nach der Änderung wird ein Hinweisdialog eingeblendet, der darauf hinweist, dass das JDK nicht zugelassen ist und es zu Problemen kommen kann. Will man den Hinweis nur einmal sehn, kann man den Hacken in der CheckBox setzten.

jkd1

Damit wird beim nächsten Start von JDev nicht mehr nachgefragt.

Logausgaben in das Application-Log

Um Logausgaben in das Applicationlog zu schreiben, kann der Servletcontext verwendet werden

FacesContext fc = FacesContext.getCurrentInstance();
ServletContext sc = (ServletContext) fc.getExternalContext().getContext();
sc.log("My log message for Application.log");

Es sthet auch eine Log-Methode zur Verfügung, die auch noch eine Exception logged.

ADFrc Table single/multi Selection

Aktuell beschäftige ich mit JSF und Oracle ADFrc. Die Aufgabe war die neuen RC-Tabellen für unsere Anwendungen anzupassen bzw. die Neuerungen so zu beschreiben, das die Anwendungsentwickler sie einfach verwenden können.
Nach einigen Recherchen in Netz und in schon vorhandenen Blogs ist hier meine Lösung:

  1. ADFrc Tabellen benötigen keine Checkboxen mehr um einzelne oder mehrere Zeilen für eine Weiterbearbeitung zu markieren
  2. Der Selection-Modus wird am Tabellenelement als RowSelection eingestellt
  3. Die Bearbeitung der Selektion erfolgt über eine Managed Bean (hier TableSelector)
  4. Die Erstellung der Bean kann aus JDev heraus durch drücken des kleinen Dreieck am Ende der Zeile Bindings zusammen mit der Erstellung Property für die Tabelle erfolgen. Dazu muss dann der Button ‘new…’ gedrückt werden. Ist bereits eine Bean vorhanden, kann diese ausgewählt werden.
  5. Soll mit jeder Selektion in der Tabelle eine Änderung in der GUI erfolgen (z.B. Rückmeldung welche Zeile ausgewählt wurde) sollte in der Bean noch ein SelectionListener eingetragen werden
  6. Der Code sorgt dafür, das die ausgewhälte Zeile als aktuelle Zeile des Datenmodell markiert wird
    public void doSelection(SelectionEvent selectionEvent)
    {
        // Add event code here...
        JSFUtils.resloveMethodExpression("#{bindings.UvgoaeZiffernView.collectionModel.makeCurrent}",
        null, new Class[] { SelectionEvent.class },
        new Object[] { selectionEvent });
    }

  7. Für die eigentliche Bearbeitung der Selektion kann dann noch eine Action Methode in der Bean definiert werden:
    public String anzeigenAuswahl()
    {
        // Add event code here...
        RichTable table = getZiffernTable();
        Iterator selection = table.getSelectedRowKeys().iterator();
        DCIteratorBinding rowiter = ADFUtils.findIterator("UvgoaeZiffernViewIterator");
        Object oldKey = table.getRowKey();
        while (selection.hasNext())
        {
            List rowKey = (List)selection.next();
            UvgoaeZiffernViewRow row =
                (UvgoaeZiffernViewRow)rowiter.findRowByKeyString(((Key)rowKey.get(0))
                .toStringFormat(true));
            logger.info("Selected Row = " + rowKey + " Leistung = " + row.getLeistungKurz());
            table.setRowKey(rowKey);
        }
        return "anzeigenZiffer";
    }

  8. Diese muss nun nur noch an einen Button gebunden werden

Die dargestellte Methode gibt nur eine Meldung pro selektierter Zeile aus, zeigt aber den Zugriff auf die Daten des unterliegenden Datenmodell.