2013-12-13
Programmatic full-reset of adf input components contained in af:switcher
Solution: First of all requery the data that is used inside the ui input components.
Then access the Faces Context and set the ViewRoot to a newly created UiView. This can be found in the utility Java Class JSFUtils provided by Duncan Mills and Steve Muench. As an excerpt:
public static final void refreshCurrentPage() {
FacesContext context = getFacesContext();
String currentView = getRootViewId();
ViewHandler vh = context.getApplication().getViewHandler();
UIViewRoot x = vh.createView(context, currentView);
x.setViewId(currentView);
context.setViewRoot(x);
}
Issue: This does not seem to refresh components, that are dynamically generated inside an af:switcher. After recursive logging of the components that are refreshed, it seems to be that the org.apache.myfaces.trinidad.component.UIXSwitcher children are not accessed.
Solution 2: I assume that internally the "refreshCurrentPage" uses the same functionality, that is used by the getChildren() method derived by the javax.faces.component.UIComponent class. Unfortunetaly this method returns null for the UIXSwitcher component. Therefore you should use the getFacetsAndChildren() method (which works for the UIXSwitcher since there are only facet subnodes) and write your own refresh code that could look something like this:
private void resetValueInputItems(AdfFacesContext adfFacesContext,
UIComponent component) {
Iterator<UIComponent> items = component.getFacetsAndChildren();
while(items.hasNext()){
UIComponent item = items.next();
resetValueInputItems(adfFacesContext, item);
if (item instanceof RichInputText) {
RichInputText input = (RichInputText)item;
if (!input.isDisabled()) {
input.resetValue();
adfFacesContext.addPartialTarget(input);
}
} else if (item instanceof RichInputDate) {
RichInputDate input = (RichInputDate)item;
if (!input.isDisabled()) {
input.resetValue();
adfFacesContext.addPartialTarget(input);
}
} else if (item instanceof RichSelectOneChoice){
RichSelectOneChoice lov = (RichSelectOneChoice) item;
if (!lov.isDisabled()) {
lov.resetValue();
adfFacesContext.addPartialTarget(lov);
}
}
}
AdfFacesContext.getCurrentInstance().addPartialTarget(component);
}
Result: Each component resets its Value, even those that are contained inside a af:switcher component.
2013-11-25
Titel: Segen oder Fluch? – Oracle Trace- und Logdateien!
Trace- und Logdateien sind ein Segen, wenn man nach der Ursache für Probleme in Datenbank, Net Services, Applicationserver oder anderen Oracle Komponenten sucht. Sie können aber auch zum Fluch werden, wenn man sie gar nicht benötigt. Unablässig protokolliert die Oracle-Software alle Aktivitäten. Die Dateien füllen langsam und unmerklich den Plattenplatz. Und dann steht plötzlich die Datenbank wegen „no space left on device“ oder der Applicationserver hängt, weil die Logdatei zu groß geworden ist.
Mit Einführung des Automatic Diagnostic Repositories (ADR) für die Datenbanksysteme hat Oracle einen Anfang gemacht Log- und Tracedateien automatisch zu kürzen bzw. aufzuräumen.
Doch die Gefahr ist nicht gebannt: Längst nicht alle Logdateien werden zentral im ADR abgelegt. Auch an anderen Speicherorten finden sich Logdateien, die nicht durch Oracle Prozesse aufgeräumt werden. Und selbst im ADR bleiben einige Logdateien ungekürzt oder werden zu lange vorgehalten.
Ein einleitendes Manuskript ist zu finden unter: 2013-K-DB-Appelbaum-Segen oder Fluch-Oracle Log&Tracedateien -Manuskript.pdf
Im Vortrag auf der DOAG 2013 Konferenz habe ich aus unseren Erfahrungen im Rahmen unserer Oracle Administration Services wichtige Best Practices an die Hand dargestellt, wo welche Dateien zu finden sind und wie für diese Rotation und Löschen eingerichtet werden können.
Ich habe Trace- und Logdatein und ebenso die Auditdateien bei Datenbank, Listener, Grid/Cloud Control, Agent, Application-/Weblogicserver und bei anderen Oracle Komponenten betrachtet. Erforderliche Skripte habe ich sowohl für Unix/Linux als auch für Windows Installationen vorgestellt.
Die Präsentation ist zu finden unter: 2013-K-DB-Appelbaum-Segen oder Fluch-Oracle Log&Tracedateien-Präsentation.pdf
Bei Interesse an den Skripten können Sie mich gerne kontaktieren.
2013-11-18
Man trifft sich, auf der DOAG 2013 Konferenz
Die Oracle Community trifft sich und auch TEAM ist mit einem Stand und zwei Vorträgen wieder dabei! Besuchen Sie uns und lernen Sie das umfassende Consulting-Angebot von TEAM kennen. Es gibt jede Menge aktuelle Themenschwerpunkte, über die wir uns gerne mit Ihnen an unserem Stand 204 in der 2. Etage (gelb) unterhalten möchten!
Auch zum immer wieder brisanten Thema Lizenz-Compliance, dem sich die DOAG ganz aktuell mit einem digitalen Lizenzguide widmet, sind wir als offizieller Oracle LMS JPE Partner sicher ein qualifizierter Ansprechpartner. Als in Oracle LMS Audits erfahrener und von Oracle qualifizierter Mitarbeiter diskutiere ich, Ralf Appelbaum, gerne mit Ihnen an unserem Messestand als Hersteller unabhängiger Berater Ihre Vorbehalte zu diesem Thema.
Besuchen Sie TEAM bei folgenden, spannenden Vorträgen zum Stream - Middleware & SOA sowie Oracle Datenbank:
Migration auf Knopfdruck – Macht das überhaupt Sinn?
Donnerstag, 21. November 2013, um 12:00 Uhr im Raum 5
Referent: Markus Klenke, TEAM GmbH
Detail Informationen finden Sie hier.
Segen oder Fluch? – Oracle Trace- und Logdateien!
Donnerstag, 21. November 2013, um 10:00 Uhr im Raum 19
Referent: Ralf Appelbaum, TEAM GmbH
Detail-Informationen finden Sie hier.
Wer nicht recht weiß, welche Vorträge er auf der Doag 2013 sonst noch besuchen soll, nutze doch einfach den
iConfGuide von TEAM, der bringt den Überblick
Mit dem von TEAM auf Basis von Oracle ADF entwickelten iConfGuide stellen Sie ganz bequem aus 400 Vorträgen Ihr ganz persönliches Programm zusammen - und das auf Ihrem iPhone (optimiert) oder SmartPhone! Schauen Sie rein: iconfguide.doag.org
2013-10-10
Tooltips vom Converter bei ADF af:inputText Feldern unterdrücken
Wenn der Kunde aber wünscht "...bitte nicht anzeigen, die Benutzer wissen, was sie da eintragen..." ist uns das Befehl.
Dieses Posting im Oracle Forum zeigt den Weg, wie es auf af:inputDate Feldern mit dem automatisch gesetzten convertDateTime Converter funktioniert: https://forums.oracle.com/message/10101349#10101349
Das funktioniert analog natürlich auch z.B. für ein af:inputText Feld, auf dem ein Converter manuell eingestellt wurde!
1.) Javascript Funktion in den Code
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<af:resource type="javascript">
function blockHint(event) {
var source = event.getSource();
source.getPeer().ShouldShowHint = function() {
return false;
}
}
</af:resource>
...
2.) Funktion innerhalb des af:inputText mit einem af:clientListener auf den Typ focus aufrufen lassen.
...
<af:inputText id="it6"
simple="true"
rows="1"
columns="#{row.length.value}"
maximumLength="#{row.length.value}"
value="#{row.zahl}"
contentStyle="text-align:right;">
<af:clientListener method="blockHint"
type="focus"/>
<f:convertNumber pattern="#"
type="number"/>
</af:inputText>
...
Fertig.
