Contentcompression für CSS abschalten

Beim Erstellen von eigenen Skins für JD11 kommt man schnell an den Punkt, wo einem nicht mehr klar ist, warum die von einem Skin betroffenen Elemente sich nicht so darstellen, wie man es gewünscht hat.

Sieht man sich den Quellcode der erzeugten CSS Infromationen der Seiten an stolpert man über kryptische Namen, die bei der Erzeugung der Seiten angelegt werden, um die CSS-Infos (speichertechnisch) klein zu halten.

.AFInstructionText, .x0, .AFFieldText, .x6, .xk, .xl, .xm, .x23, .x24, .x2d, .x2f, .x2h, .x1u.x2n .x25, .x1u.p_AFDisabled.x2n .x25, .x1u.x2p .x25, .x1u.x2q .x25, .x1u.x2r .x25, .x1u.x2s .x25, .x22.x2n .x24, .x22.p_AFDisabled.x2n .x24, .x22.x2p .x24, .x22.x2q .x24, .x22.x2r .x24, .x22.x2s .x24, .x1t.x2n .x26, .x1t.p_AFDisabled.x2n .x26, .x1t.x2p .x26, .AFFieldTextLTR, .x94, .AFPhoneFieldText, .x96, .AFPostalCodeFieldText, .x98, .AFAddressFieldText, .x9a, .PortletSubHeaderText, .xbz, .PortletText1, .xc0, .PortletText2, .xc1, .PortletText3, .xc2, .PortletText4, .xc3, .portlet-font, .xc4, .portlet-msg-info, .xc6, .portlet-form-input-field, .xcn, .portlet-form-field, .xcs {
color:#000000;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
font-weight:normal;
}
.AFInstructionTextDisabled, .x1, .AFFieldTextDisabled, .x7, .x1u.p_AFDisabled.x2p .x25, .x1u.p_AFDisabled.x2q .x25, .x1u.p_AFDisabled.x2r .x25, .x1u.p_AFDisabled.x2s .x25, .x22.p_AFDisabled.x2p .x24, .x22.p_AFDisabled.x2q .x24, .x22.p_AFDisabled.x2r .x24, .x22.p_AFDisabled.x2s .x24, .x1t.p_AFDisabled.x2p .x26, .x61, .p_InContextBrandingText, .x8r, .AFFieldTextLTRDisabled, .x95, .AFPhoneFieldTextDisabled, .x97, .AFPostalCodeFieldTextDisabled, .x99, .AFAddressFieldTextDisabled, .x9b, .OraHGridNavRowInactiveLink, .xa5, .OraNavBarInactiveLink, .xac, .portlet-font-dim, .xc5 {
color:#7E807A;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
font-weight:normal;
}
.AFDataText, .x2, .PortletHeaderText, .xbs {
color:#000000;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
font-weight:bold;
}

Leider werden so einige zusammenhänge ebenfalls verschleiert. Unter JD10.1.3 konnte diese Komprimierung durch einen Eintrag in der web.xml abgeschaltet werden:


<context-param>

<paramname>oracle.adfinternal.view.faces.DISABLE_CONTENT_COMPRESSION</param-name>
<param-value>true</param-value>

</context-param>

Unter JD11 hat sich der Syntax leicht geändert (siehe forums.oracle.com/forums/thread.jspa?messageID=2432817&tstart=0#2432817) und lautet nun


<context-param>

<param-name>org.apache.myfaces.trinidad.DISABLE_CONTENT_COMPRESSION</param-name>
<param-value>true</param-value>

</context-param>

Hier das Resultat (wie oben mit der neuen Einstellung):

.AFInstructionText, .AFFieldText, .af_outputText, .af_outputFormatted, .af_outputDocument, .af_inputChoice_content, .af_inputChoice_content-input, .af_selectManyCheckbox_content, .af_selectOneChoice_content, .af_selectOneRadio_content, .af_inputText.AFFieldTextMarker .af_inputText_content, .af_inputText.p_AFDisabled.AFFieldTextMarker .af_inputText_content, .af_inputText.AFFieldTextLTRMarker .af_inputText_content, .af_inputText.AFPhoneFieldTextMarker .af_inputText_content, .af_inputText.AFPostalCodeFieldTextMarker .af_inputText_content, .af_inputText.AFAddressFieldTextMarker .af_inputText_content, .af_inputChoice.AFFieldTextMarker .af_inputChoice_content-input, .af_inputChoice.p_AFDisabled.AFFieldTextMarker .af_inputChoice_content-input, .af_inputChoice.AFFieldTextLTRMarker .af_inputChoice_content-input, .af_inputChoice.AFPhoneFieldTextMarker .af_inputChoice_content-input, .af_inputChoice.AFPostalCodeFieldTextMarker .af_inputChoice_content-input, .af_inputChoice.AFAddressFieldTextMarker .af_inputChoice_content-input, .af_inputNumberSpinbox.AFFieldTextMarker .af_inputNumberSpinbox_content, .af_inputNumberSpinbox.p_AFDisabled.AFFieldTextMarker .af_inputNumberSpinbox_content, .af_inputNumberSpinbox.AFFieldTextLTRMarker .af_inputNumberSpinbox_content, .AFFieldTextLTR, .AFPhoneFieldText, .AFPostalCodeFieldText, .AFAddressFieldText, .PortletSubHeaderText, .PortletText1, .PortletText2, .PortletText3, .PortletText4, .portlet-font, .portlet-msg-info, .portlet-form-input-field, .portlet-form-field {
color:#000000;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
font-weight:normal;
}
.AFInstructionTextDisabled, .AFFieldTextDisabled, .af_inputText.p_AFDisabled.AFFieldTextLTRMarker .af_inputText_content, .af_inputText.p_AFDisabled.AFPhoneFieldTextMarker .af_inputText_content, .af_inputText.p_AFDisabled.AFPostalCodeFieldTextMarker .af_inputText_content, .af_inputText.p_AFDisabled.AFAddressFieldTextMarker .af_inputText_content, .af_inputChoice.p_AFDisabled.AFFieldTextLTRMarker .af_inputChoice_content-input, .af_inputChoice.p_AFDisabled.AFPhoneFieldTextMarker .af_inputChoice_content-input, .af_inputChoice.p_AFDisabled.AFPostalCodeFieldTextMarker .af_inputChoice_content-input, .af_inputChoice.p_AFDisabled.AFAddressFieldTextMarker .af_inputChoice_content-input, .af_inputNumberSpinbox.p_AFDisabled.AFFieldTextLTRMarker .af_inputNumberSpinbox_content, .af_menuButtons_text-disabled, .p_InContextBrandingText, .AFFieldTextLTRDisabled, .AFPhoneFieldTextDisabled, .AFPostalCodeFieldTextDisabled, .AFAddressFieldTextDisabled, .OraHGridNavRowInactiveLink, .OraNavBarInactiveLink, .portlet-font-dim {
color:#7E807A;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
font-weight:normal;
}
.AFDataText, .PortletHeaderText {
color:#000000;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
font-weight:bold;
}

Danke an Frank Nimphius für diese Info!

Damit gestaltet sich die Suche etwas einfacher.

Embedded OC4J startet nicht mit FAILED_IN_CONFIG

Manchmal (die genauen Zusammenhänge habe ich noch nicht herausgefunden) startet der Embedded OC4J Container nicht mehr mit einem Fehler

SCHWERWIEGEND: Server exiting: ApplicationServer entered state FAILED_IN_CONFIG

der auf ein Problem mit der Authentifizierung hinweist. Das passiert auch dann, wenn keine Security verwendet wird. Bevor der Container mit dieser Meldung abbricht, hat er schon eine weitere Meldung ausgegeben:

05.03.2008 09:25:00 oracle.security.jps.internal.credstore.ssp.CsfWalletManager openWallet
SCHWERWIEGEND: Could not open wallet. null
java.io.IOException: Could not open wallet. null
at oracle.security.pki.OracleWallet.open(OracleWallet)
at oracle.security.jps.internal.credstore.ssp.CsfWalletManager.openWallet(CsfWalletManager.java:136)
at oracle.security.jps.internal.credstore.ssp.SspCredentialStore.(SspCredentialStore.java:139)
at oracle.security.jps.internal.credstore.ssp.SspCredentialStoreProvider.getInstance(SspCredentialStoreProvider.java:109)
at oracle.security.jps.internal.credstore.ssp.SspCredentialStoreProvider.getInstance(SspCredentialStoreProvider.java:47)
at oracle.security.jps.internal.core.runtime.ContextFactoryImpl.findServiceInstance(ContextFactoryImpl.java:139)
at oracle.security.jps.internal.core.runtime.ContextFactoryImpl.getContext(ContextFactoryImpl.java:170)
at oracle.security.jps.internal.core.runtime.ContextFactoryImpl.getContext(ContextFactoryImpl.java:191)
at oracle.security.jps.internal.core.runtime.JpsContextFactoryImpl.getContext(JpsContextFactoryImpl.java:129)
at oracle.security.jps.internal.core.runtime.JpsContextFactoryImpl.getContext(JpsContextFactoryImpl.java:124)
at oracle.security.jps.internal.policystore.PolicyUtil$1.run(PolicyUtil.java:590)
at oracle.security.jps.internal.policystore.PolicyUtil$1.run(PolicyUtil.java:585)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.internal.policystore.PolicyUtil.getDefaultPolicyStore(PolicyUtil.java:584)
at oracle.security.jps.internal.policystore.PolicyDelegationController.(PolicyDelegationController.java:244)
at oracle.security.jps.internal.policystore.PolicyDelegationController.(PolicyDelegationController.java:238)
at oracle.security.jps.internal.policystore.JavaPolicyProvider.(JavaPolicyProvider.java:103)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at oracle.security.jazn.JAZNConfig.setJAASPolicyProvider(JAZNConfig.java:2054)
at oracle.security.jazn.JAZNConfig.setSecurityProperties(JAZNConfig.java:2130)
at oracle.security.jazn.JAZNConfig.setSecurityProperties(JAZNConfig.java:2149)
at com.evermind.server.OC4JServer.main(OC4JServer.java:420)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at oracle.classloader.util.MainClass.invoke(MainClass.java:128)
at oracle.oc4j.loader.boot.BootStrap.main(BootStrap.java:41)

Diese gibt den Grund an, nämlich dass die Wallet-Datei nicht geöffnet werden konnte. Ein blick ins Dateisystem ins Verzeichnis

[USERDIR]AnwendungsdatenJDevelopersystem11.1.1.0.22.47.96o.j2eeembedded-oc4jconfigoc4j-credstore

Bild

Zeigt, dass die Datei leer ist (0 KB).

Es gibt nun zwei Möglichkeiten das Problem zu lösen:

  1. Löschen des Verzeichnis embedded-oc4j aus dem oben genannten Pfad. Beim nächsten Start wird es dann neu mit Standardeinstellungen neu angelegt. Dabei gehen aber leider z.B. Änderungen an den Logging-Einstellungen verloren!
  2. man kopiert die Datei cwallet.sso aus dem aktuellen Projekt in das Verzeichnis. Im aktuellen Projekt findet sich die Datei meist im Verzeichnis [Workspacename]/src/META-INF, wobei [Workspacename] das Verzeichnis ist, in dem die *.jws des Projektes zu finden ist.

Fehlende Dokumentation zugänglich machen

Leider hat Oracle bei einigen Jar’s vergessen die Dokumentation in die Libraries einzutragen. Dies führt dazu, dass des öfteren die folgende Meldung erscheint, wenn man mittels F1 die Hilfe aufruft:

Bild

Dies ist vor allem deshalb ärgerlich, da man die Definition der Library nicht ändern kann. Ein entsprechender ER ist bereits über Frank Nimphius erstellt (dieser Thread). In dem Thread wird auch die Lösung beschrieben, wie man die Dokumentation doch zugänglich macht.

Dazu wird eine neue Library z.B. mit dem Namen “Missing Doc” erstellt (im Projekt oder als SystemLibrary damit sie auch für andere Projekte bereit steht):

  1. Tools-> Manage Libraries… auswählen
  2. Button “New…” drücken und als Location <install-pfad>/jdev/system auswählen
  3. im Dialog dann den ‘Doc Path’ markieren und den Button ‘Add URL…’ drücken
  4. Bild
  5. Dann dei URL zur fehlenden Dokumentation eintragen.
  6. Befindet sich die Dokumentation auf dem lokalen Rechner, kann diese über ‘Add Entry…’ hinzugefügt werden.

Jetzt braucht nur noch die neue Library zum Projekt hinzugefügt werden und die Hilfe über F1 liefert wieder Ergebnisse.

Logausgaben im Logwindow aktivieren

Unter JD11TP3 werden nach dem Start des Embedded-Servers keine Logausgaben mehr in das Log-Window geschreiben. Die Ursache dafür, ist in der Konfigurationsdatei des Embedded-Servers für das Logging zu suchen. Die Datei dei diese Einstellungen beinhaltet heisst j2ee-logging.xml und ist für den Embedded-OC4J Container unter dem Verzeichnis:
UserverzsichisAnwendungsdatenJDevelopersystem11.1.1.0.22.47.96o.j2eeembedded-oc4jconfig
zu finden.
Das Original sieht nach der Installation so aus (in Teilen)

<logging_configuration>
   <log_handlers>
      <log_handler name="console-handler" class="oracle.oc4j.util.ConsoleHandler" level="WARNING"/>
      <log_handler name="oc4j-handler" class="oracle.core.ojdl.logging.ODLHandlerFactory">
...

Leider scheint es so, als ob die Klasse oracle.oc4j.util.ConsoleHandler nicht gefunden wird vom Embedded-OC4J Container. Daher sollte man die Klasse ändern in java.util.logging.ConsoleHandler. Passt man auch noch das Level an (z.B. auf FINE) erhält man wieder alle Meldungen.
Das Resultat sieht dann (in Teilen) so aus:

<logging_configuration>
   <log_handlers>
      <log_handler name="console-handler" class="java.util.logging.ConsoleHandler" level="FINE"/>
      <log_handler name="oc4j-handler" class="oracle.core.ojdl.logging.ODLHandlerFactory">
...