Hallo zusammen,
hier mal eine Frage zum Umgang mit Bibliotheken, die von Teilen einer Anwendung in unterschiedlichen Versionen verwendet werden:
Das Scenario:
Gegeben ist eine Webanwendung (nachfolgend Basisanwendung genannt), bestehend aus ein paar Java Servlets, die auf einem Tomcat Server zum Einsatz kommt (wobei das Ganze auch auf eine Java Standalone Anwendung bezogen werden kann). Diese bedient sich ca. 60 Fremdbibliotheken, die unter WEB-INF\lib (oder einfach im Classpath) liegen. Darunter befinden sich Jars aus diversen Frameworks (Spring, Log4j), Jars aus dem Apache Commons Projekt, Jars für IBMs Websphere MQ (MQ classes for Java),usw.
Jetzt muss diese Basisanwendung erweitert werden, wozu ein Third-Party Framework (nachfolgend "TP-Framework" genannt) eingesetzt werden muss, welches ebenfalls eine Menge an Fremdbibliotheken (71 Jars) mitbringt.
Das Problem hierbei:
Basisanwendung und das TP-Framework nutzen gleiche Bibliotheken, wobei diese sich teilweise in den Versionen unterscheiden.
Hier mal ein paar Beispiele:
Basisanwendung <=> TP-Framework
=============================================
com.ibm.mq-6.0.2.5.jar <=> com.ibm.mq-6.0.2.0.jar
connector-1.0.1.jar <=> connector-1.0.jar
dom4j-1.6.1.jar <=> dom4j-1.5.2.jar
slf4j-api-1.6.1.jar <=> slf4j-api-1.5.6.jar
xalan-2.7.1.jar <=> xalan-2.7.0.jar
xercesImpl-2.10.0.jar <=> xercesImpl-2.8.1.jar
xmlsec-1.4.3.jar <=> xmlsec-1.4.5.jar
Die Frage hierbei:
Wie kriege ich dieses Wirrwarr der doppelten Jars in unterschiedlichen Versionen in den Griff und wie vermeide ich Probleme, wenn die Klassen dieser Jars nicht kompatibel sind oder es Unterschiede in der Implementierung gibt ?
Wir haben dieses Problem bereits in einem Projekt leidvoll erfahren müssen, als wir bei Verwendung einer "falschen" (andere JAR Version, die sich lediglich im Minor Code unterschied!!!) XML-Parser Bibliothek ein fehlerhaftes Verhalten in der betroffenen Anwendung bekamen. Die Analyse hat damals elendig viel Zeit gekostet und trat natürlich nur beim Kunden auf.
Ich sehe zwei Lösungsmöglichkeiten:
1) Ich behalte die Bibliotheken der Basisanwendung und schmeiße die Fremdbibliotheken des TP-Frameworks raus, bzw. stelle Sie nicht in den Classpath der Anwendung (bzw. in das WEB-INF/lib Verzeichnis der Webanwendung). Dann bete ich, dass das TP-Fw funktioniert und das auch bei zukünftigen Änderungen so bleibt.
Vorteil: Ich kann das Fw direkt in die Basisanwendung einbinden, habe es also sehr einfach.
Nachteil: Das Fw funktioniert nicht, weil es Probleme mit den Jars der Basisanwendung kriegt.
2) Ich verlagere das TP-Fw in eine neue Webanwendung, um dieses mit den Original Fremdbibliotheken aus der Auslieferung zu nutzen und stelle darin die in der Basisanwendung benötigten Funktionen des TP-Frameworks per Servlet zur Verfügung.
Vorteil: Kompatibilitätsprobleme kann es nicht geben, da Basisanwendung und das Fw die "eigenen" Fremdbibliotheken verwenden.
Nachteil: Overhead bei der Entwicklung (deutlich höherer Aufwand) und beim Betrieb (da teilweise sehr große XML Nachrichten von einer zur anderen Anwendung zu übertragen sind).
Keine der Lösungen scheint mir ideal zu sein.
Kennt noch jemand eine dritte Lösung oder kann mir zu einer der aufgezeigten Lösungen raten (vlt. weil ich mir bei den aufgezeigten Bibliotheken über derlei Probleme keine Sorgen machen muss) ?
Bin gespannt, ob sich jemand meines Themas annimmt und sich irgendwelche Java "Profis" melden, die derlei Probleme vlt. schon gelöst haben.
Viele Grüße und Danke vorab für jede Hilfe
Holger
hier mal eine Frage zum Umgang mit Bibliotheken, die von Teilen einer Anwendung in unterschiedlichen Versionen verwendet werden:
Das Scenario:
Gegeben ist eine Webanwendung (nachfolgend Basisanwendung genannt), bestehend aus ein paar Java Servlets, die auf einem Tomcat Server zum Einsatz kommt (wobei das Ganze auch auf eine Java Standalone Anwendung bezogen werden kann). Diese bedient sich ca. 60 Fremdbibliotheken, die unter WEB-INF\lib (oder einfach im Classpath) liegen. Darunter befinden sich Jars aus diversen Frameworks (Spring, Log4j), Jars aus dem Apache Commons Projekt, Jars für IBMs Websphere MQ (MQ classes for Java),usw.
Jetzt muss diese Basisanwendung erweitert werden, wozu ein Third-Party Framework (nachfolgend "TP-Framework" genannt) eingesetzt werden muss, welches ebenfalls eine Menge an Fremdbibliotheken (71 Jars) mitbringt.
Das Problem hierbei:
Basisanwendung und das TP-Framework nutzen gleiche Bibliotheken, wobei diese sich teilweise in den Versionen unterscheiden.
Hier mal ein paar Beispiele:
Basisanwendung <=> TP-Framework
=============================================
com.ibm.mq-6.0.2.5.jar <=> com.ibm.mq-6.0.2.0.jar
connector-1.0.1.jar <=> connector-1.0.jar
dom4j-1.6.1.jar <=> dom4j-1.5.2.jar
slf4j-api-1.6.1.jar <=> slf4j-api-1.5.6.jar
xalan-2.7.1.jar <=> xalan-2.7.0.jar
xercesImpl-2.10.0.jar <=> xercesImpl-2.8.1.jar
xmlsec-1.4.3.jar <=> xmlsec-1.4.5.jar
Die Frage hierbei:
Wie kriege ich dieses Wirrwarr der doppelten Jars in unterschiedlichen Versionen in den Griff und wie vermeide ich Probleme, wenn die Klassen dieser Jars nicht kompatibel sind oder es Unterschiede in der Implementierung gibt ?
Wir haben dieses Problem bereits in einem Projekt leidvoll erfahren müssen, als wir bei Verwendung einer "falschen" (andere JAR Version, die sich lediglich im Minor Code unterschied!!!) XML-Parser Bibliothek ein fehlerhaftes Verhalten in der betroffenen Anwendung bekamen. Die Analyse hat damals elendig viel Zeit gekostet und trat natürlich nur beim Kunden auf.
Ich sehe zwei Lösungsmöglichkeiten:
1) Ich behalte die Bibliotheken der Basisanwendung und schmeiße die Fremdbibliotheken des TP-Frameworks raus, bzw. stelle Sie nicht in den Classpath der Anwendung (bzw. in das WEB-INF/lib Verzeichnis der Webanwendung). Dann bete ich, dass das TP-Fw funktioniert und das auch bei zukünftigen Änderungen so bleibt.
Vorteil: Ich kann das Fw direkt in die Basisanwendung einbinden, habe es also sehr einfach.
Nachteil: Das Fw funktioniert nicht, weil es Probleme mit den Jars der Basisanwendung kriegt.
2) Ich verlagere das TP-Fw in eine neue Webanwendung, um dieses mit den Original Fremdbibliotheken aus der Auslieferung zu nutzen und stelle darin die in der Basisanwendung benötigten Funktionen des TP-Frameworks per Servlet zur Verfügung.
Vorteil: Kompatibilitätsprobleme kann es nicht geben, da Basisanwendung und das Fw die "eigenen" Fremdbibliotheken verwenden.
Nachteil: Overhead bei der Entwicklung (deutlich höherer Aufwand) und beim Betrieb (da teilweise sehr große XML Nachrichten von einer zur anderen Anwendung zu übertragen sind).
Keine der Lösungen scheint mir ideal zu sein.
Kennt noch jemand eine dritte Lösung oder kann mir zu einer der aufgezeigten Lösungen raten (vlt. weil ich mir bei den aufgezeigten Bibliotheken über derlei Probleme keine Sorgen machen muss) ?
Bin gespannt, ob sich jemand meines Themas annimmt und sich irgendwelche Java "Profis" melden, die derlei Probleme vlt. schon gelöst haben.
Viele Grüße und Danke vorab für jede Hilfe
Holger
Zuletzt bearbeitet von einem Moderator: