2017-10-31 7 views
0

Meine Spring-Anwendung wird in Weblogic 11g ordnungsgemäß eingesetzt. Wenn ich jedoch versuche, auf Weblogic 12c zu deployen, bekomme ich nacheinander ClassNotFoundException.Die Bereitstellung der Spring-Anwendung schlägt auf Weblogic fehl 12c

Zuerst bekomme ich java.lang.ClassNotFoundException: com.querydsl.core.types.Expression, die ich gelöst habe, indem ich die fehlende Abhängigkeit hinzugefügt habe. Dann bekomme ich vertraute Ausnahme, aber dieses Mal war die fehlende Klasse aus Paket com.mysema.querydsl. Nachdem ich diese Abhängigkeit eingeführt habe, bekomme ich die folgende Ausnahme: java.lang.ClassNotFoundException: org.apache.abdera.writer.Writer.

Warum wurde die Anwendung nach der Migration zu Weblogic 12c vollständig unterbrochen (da Spring nicht mit dem Container gekoppelt werden sollte)?

Hier sind alle Abhängigkeiten des Projekts vor der Migration:

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <spring.version>4.3.2.RELEASE</spring.version> 
    <spring-data-jpa.version>1.10.2.RELEASE</spring-data-jpa.version> 
    <spring-security.version>4.1.3.RELEASE</spring-security.version> 
    <cxf.version>3.1.7</cxf.version> 
    <jackson.version>1.9.13</jackson.version> 
    <esapi.version>2.1.0.1</esapi.version> 
    <hibernate-entitymanager.version>5.1.1.Final</hibernate-entitymanager.version> 
    <hibernate-commons-annotations.version>5.0.1.Final</hibernate-commons-annotations.version> 
    <spring-boot-starter-jdbc.version>1.5.2.RELEASE</spring-boot-starter-jdbc.version> 
    <slf4j.version>1.7.21</slf4j.version> 
    <log4j.version>1.2.17</log4j.version> 
    <log.directory>logs</log.directory> 
</properties> 

<dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>3.0-alpha-1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <!-- Security --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-core</artifactId> 
      <version>${spring-security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>${spring-security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>${spring-security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-acl</artifactId> 
      <version>${spring-security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-ldap</artifactId> 
      <version>${spring-security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.auth0</groupId> 
      <artifactId>java-jwt</artifactId> 
      <version>2.2.0</version> 
     </dependency> 


     <!-- DB --> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>${spring-data-jpa.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-jdbc</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-orm</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate-entitymanager.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.common</groupId> 
      <artifactId>hibernate-commons-annotations</artifactId> 
      <version>${hibernate-commons-annotations.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!-- DB end --> 

     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <!-- Oracle JDBC --> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc7</artifactId> 
      <version>12.1.0.1.0</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 
    </dependencies> 
+0

Können Sie noch '' hinzufügen, um auch die Versionen von Deps zu haben? – pirho

+0

Btw: Gibt es einen Grund, dass ' Servlet-Api' in Standard ist '' anstelle von ' bereitgestellt'? – pirho

+0

Ich aktualisierte die Frage, um die Versionen zu enthalten –

Antwort

0

Das allgemeine Problem ist, dass Weblogic viele Bibliotheken gebündelt hat. Wenn eine Anwendung bereitgestellt wird, lädt der Klassenlader möglicherweise den mit Weblogic gebündelten oder die Anwendung.

Weblogic 12c enthält zusätzliche Bibliotheken, die gebündelt werden. Daher wird möglicherweise eine Ausnahme ausgelöst, da das Jar eine ältere Version derselben Bibliothek enthält und einige Klassen/Methoden möglicherweise nicht in diesem Jar enthalten sind.

Die Problemumgehung besteht darin, EAR bereitzustellen, die Ihre WAR-Datei packt und die bevorzugten Bibliotheken angibt. Auf diese Weise werden Ihre Bibliotheken anstelle der Vorgängerversion von Weblogic geladen.

Um EAR zu implementieren, müssen Sie ein neues Maven-Modul mit Ohrverpackung erstellen und weblogic-application.xml hinzufügen, das unter src/application/META-INF abgelegt werden muss.

Die Datei muss auf bevorzugte Pakete angeben, die sich aus der Anwendung und nicht Weblogic zum Beispiel geladen werden soll:

<prefer-application-packages> 
    <package-name>com.querydsl.*</package-name> 
    ... 
</prefer-application-packages> 

Im EAR Modul in seiner pom.xml Sie angeben müssen, dass diese Datei enthalten sein muss durch die folgenden Informationen in Ohr-Plugin bietet:

 <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.10.1</version> 
      <configuration> 
       <defaultLibBundleDir>lib</defaultLibBundleDir> 
       <earSourceDirectory>src/application</earSourceDirectory> 
       <modules> 
        <webModule> 
         <groupId>your-group-id</groupId> 
         <artifactId>your-artifact-id</artifactId> 
         <contextRoot>/**yourContext**</contextRoot> 
        </webModule> 
       </modules> 
      </configuration> 
     </plugin> 
    </plugins> 

Letzte Sache, die WAR-Modul haben weblogic.xml muss unter/src/main/resources mit zwei Abschnitten erstellt:

<context-root>**yourContext**</context-root> 
<container-descriptor> 
    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
</container-descriptor> 

Der "yourContext" muss mit dem im maven-ear-plugin angegebenen übereinstimmen und sollte der Webkontext der Anwendung sein.

Verwandte Themen