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.
Advertisements

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">
...