5

Joda DateTime ライブラリを使用するエンタープライズ アプリケーションがあります。アプリケーションは JBoss 7.2.0 Alpha1 コンテナーにデプロイされます。ドメイン モデルの一部のクラスには、DateTime 型のフィールドに @Past 注釈があります。これらの制約を検証するために、hibernate-validator によって提供される制約バリデーターを使用したいと考えています。したがって、ear ファイルの MANIFEST.MF に依存関係 'org.hibernate.validator' を追加しました。Joda ライブラリのバージョン 2.0 を使用しています。そのため、joda-time-2.0.jar ファイルを ear にパッケージ化しました。JBoss 7 のモジュールとして利用可能なバージョン 1.6.2 は使用していません。

DateTime フィールドを持つオブジェクトを検証すると、次の例外がスローされます。

10:51:41,140 ERROR [org.acme.GlobalExceptionHandler] (EJB default - 10) Exception caught by global exception handler: javax.validation.UnexpectedTypeException: No validator could be found for type: org.joda.time.DateTime
at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:383) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
at org.hibernate.validator.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:364) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:313) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:144) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:117) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:84) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:452) [hibernate-validator-4.2.0.Final.jar:4.2.0.Final]

いくつかのデバッグの後、「ConstraintTree.findSuitableValidatorTypes」の「TypeUtils.isAssignable( validatorType, type )」への呼び出しが失敗することを検出しました。これは、利用可能なバリデータ型が、JBoss に同梱されている Joda ライブラリではなく、JBoss に同梱されている Joda ライブラリから取得されているためです。 ear ファイルにパッケージ化されています。

クラスローディングに関して何か間違ったことをしていると思います。誰でもヒントを教えてもらえますか?

4

2 に答える 2

3

jboss-deployment-structure.xmlをearファイルに追加してみましたか?このようにして、Jodaタイムモジュールを除外できるはずです。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.joda.time"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7も参照してください

于 2012-07-26T14:03:53.440 に答える
2

Hardy のアイデアに従って、これを含むアプリケーションのWEB-INFフォルダーにjboss-deployment-structure.xmlを作成するという問題を解決しました。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.hibernate.validator" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

org.joda.timeを除外する代わりに、org.hibernate.validatorを除外しました。これがあなたにとってもうまくいくことを願っています。

于 2012-07-26T16:29:07.450 に答える