0

私は過去数日間、これに苦労してきました。コンテナー外で DAO をテストしようとしていますが、テスト ケースの実行中に次のエラーが発生します。

クラス パス リソース [applicationContext.xml] で定義された名前が 'SqlMapClient' の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException です

NB を使用してテストを実行しています。上記のクラスがテスト ケースの実行時のクラス パスにある必要があると人々は言っています。しかし、その瓶が実際にどこにあるのか、私は絶対に見つけることができません...?? コンテナーのクラスパスにあるすべての jar と、プロジェクトの lib フォルダーにある jar を、単体テストのランタイム クラスパスに含めました。それでも同じエラーが発生します。

このJARのグーグルも機能しませんでした。

たぶん、誰かがこのフリーキンジャーをどこから入手できるか知っている. そしてうまくいけば、それは私の問題を解決しました。

4

1 に答える 1

2

これはあなたの質問に直接答えるものではありませんが、2つのアドバイスがあります。まず、Springを使用していることがわかったので、前の質問で述べたように、JNDIデータソースを検索するために独自の使用をやめることをお勧めします。代わりに、そのためにSpring機能を使用してから、データソースをBeanに挿入する必要があります。JDNIデータソースを取得するには、次のようなSpringを使用します。ServiceLocatorJndiObjectFactoryBean

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:/comp/env/jdbc/myDS</value>
    </property>
</bean>

次に、コンテナの外部で実行する場合(通常はテストを実行する場合)、JNDIデータソースを使用しないことをお勧めします。代わりに、Spring機能を使用して別の方法でDAOにデータソースを提供する必要があります(たとえば、を使用するDriverManagerDataSourceと、テストの実行時に実際の接続プールは必要ありません)。これにより、テストに適したiPlanetを起動せずにテストを実行できます(iPlanetの接続プールをテストしたくない場合は、DAOをテストしたい)。

したがって、applicationContext-test.xmlデータアクセス用の別の構成でテスト中に使用するを作成します。以下に、DriverManagerDataSource:の設定例を示します。

<bean id="dataSource"
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="..."/>
    <property name="url" value="..."/>
    <property name="username" value="..."/>
    <property name="password" value="..."/>
</bean>

これは実際に推奨されるアプローチです(さまざまなオプションの詳細については、「JDBCを使用したデータアクセス」の章を確認してください)。

PS:どこcom/iplanet/ias/admin/common/ASExceptionから来たのかわかりませんが、明らかにiPlanet自体の1つです。本当に知りたい場合は、iPlanetインストールのすべてのjarファイル、特に起動スクリプトで参照されているjarファイルを検索してください。ただし、その後はJNDIの問題に直面することになると思いますので、注意してください。

于 2009-11-12T07:36:07.520 に答える