Hallo Leute!
Als Fortsetzung zum Eintrag "Openoffice via Java-Uno anbinden" habe ich inzwischen neue schmerzliche Erfahrungen mit UNO sammeln müssen.
Nachdem die Anbindung zwar funktioniert hat, stellte sich heraus, dass die Anbindung in einer Tomcat-Applikation nicht stabil läuft. Häufig tritt folgender Fehler auf:
java.lang.IllegalAccessError: tried to access field com.sun.star.lib.util.WeakMap$Entry.key from class com.sun.star.lib.util.WeakMap
WeakMap.cleanUp:at com.sun.star.lib.util.WeakMap.cleanUp(WeakMap.java
WeakMap.put:at com.sun.star.lib.util.WeakMap.put(WeakMap.java
UnoRuntime.getEnvironment:at com.sun.star.uno.UnoRuntime.getEnvironment(UnoRuntime.java
UnoRuntime.getBridgeByName:at com.sun.star.uno.UnoRuntime.getBridgeByName(UnoRuntime.java
BridgeFactory.createBridge:at com.sun.star.comp.bridgefactory.BridgeFactory.createBridge(BridgeFactory.java
UrlResolver$_UrlResolver.resolve:at com.sun.star.comp.urlresolver.UrlResolver$_UrlResolver.resolve(UrlResolver.java
BootstrapUtils.bootstrap:169Nach einiger Recherche im Internet fand ich die Lösung hier:
http://www.nabble.com/-udk-dev--IllegalAccessError-in-WeakMap-tf2672247.html#a7451826Das Problem ist also, daß die UNO-Klassen mit verschiedenen Classloadern geladen werden. Jetzt wurde es mir auch klar: unsere Bootstrap-Utils haben einen Classloader gebaut, um das Problem mit den Native-Libraries zu lösen und ausserdem gibt es die Jarfiles nochmal im lib-Verzeichnis der Webapplikation.
Leider kann man nicht einfach Jarfiles mittels Bootstrap-Utils laden, weil dann die Normale Webapplikation die Klassen nicht kennt.
Im Moment kenne ich nur eine Lösung, man muß den CLASSPATH auf das OpenOffice-Verzeichnis setzen und Tomcat so starten (catalina.sh ändern), daß dieser CLASSPATH benutzt wird (ich arbeite im Moment mit Tomcat 4.1 - evtl. gibt es in Tomcat 5 eine bessere Lösung?).
Tja so sieht es aus. Jedwede dynamische Lösung ist damit vom Tisch. Schaun' wir mal, vielleicht ergibt sich in den nächsten Tagen noch was besseres.
Ciao
larsfrommars