7

Weblogicサーバー10.3.5を含むOracleのOEPEディストリビューションを使用してWebアプリケーションを開発しています。WLSには、2.5.6.SEC01のように見える独自のバージョンのSpringが含まれています。ただし、3.1リリースに固有のSpringおよびSpringSecurity機能を使用しようとしています。

Maven POMは、Springバージョンを3.1.1.RELEASEのプロパティとして定義します(そのプロパティはセクションにプラグインされています。つまり、次のようになります。

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

組み込みのSpringを除外する2つの別々の方法をweblogic.xmlで試しました(1つは以下にコメント化されていますが、両方を試しましたのでご安心ください)。

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>com.oracle.ojdbc16.*</wls:package-name>
        <wls:package-name>antlr.*</wls:package-name>
        <wls:package-name>javax.persistence.*</wls:package-name>
        <wls:package-name>org.apache.commons.*</wls:package-name>
        <wls:package-name>org.springframework.*</wls:package-name>
        <wls:package-name>org.hibernate.*</wls:package-name>
        <wls:package-name>org.apache.xerces.*</wls:package-name>
    </wls:prefer-application-packages>
    <!-- <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> -->
</wls:container-descriptor>

自分のバージョンのSpringを使用するには、いったい何をしなければならないのでしょうか。

4

3 に答える 3

6

私も同じ問題を抱えていました。解決策は、weblogic-application.xml を EAR プロジェクトの META-INF フォルダーに作成することでした。これがコードです。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
    <prefer-application-packages>
        <package-name>org.apache.*</package-name>
        <package-name>org.springframework.*</package-name>
    </prefer-application-packages>
</weblogic-application>

おそらく問題は、weblogic-application.xml を EAR プロジェクトにではなく、WAR プロジェクトに weblogic.xml を使用していることです。

それが役に立てば幸い。

于 2012-09-26T00:36:11.993 に答える
2

Spring Framework を使用している場合、Spring Integration プロジェクトの場合でも、ほとんどの場合、Spring Bean を EAR ではなくWARにデプロイします。12c (12.2.1 を含む) までは、特定の構成がなければ、せいぜい Spring フレームワーク 3.0.5 と Spring Integration 2.2.6 にとどまります。より高い Spring バージョンを使用しようとすると、デプロイ時に失敗する可能性があります。

weblogic.application.ModuleException: java.lang.NoSuchMethodError: org.springframework.core.MethodParameter.getNestedParameterType()Ljava/lang/Class;

Oracle-JRF に埋め込まれた Spring Framework がクラスローダーによって選択されるためです。

マルチサーバー ドメインでは、特定のサーバー インスタンスに JRF をデプロイしなくても問題は解決しませんが、JRF を使用しないドメイン全体で問題は解決します。

代わりに、次のようにWEB-INF/weblogic.xmlデプロイメント記述子でprefer-web-inf-classesパラメータを使用するのがコツです。

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.8/weblogic-web-app.xsd">
    <wls:container-descriptor>
        <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
    </wls:container-descriptor>
</wls:weblogic-web-app>

また、JRF インスツルメンテーションを使用して、WebLogic ドメインで Spring Framework 4.2 の利点を享受できます。もちろん、Spring コア 4.2 と関連する依存関係を WAR ファイル アセンブリに含めることを忘れないでください (つまり、ビルドされた .war に WEB-INF/lib/spring*.jar が含まれていることを確認してください)。

于 2015-11-16T17:29:48.443 に答える