私は私のapplicaionContext.xmlで以下を持っています
<bean id="IbatisDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@123.210.85.56:1522:ORCL"/>
<property name="username" value="mydb"/>
<property name="password" value="mydbpwd"/>
</bean>
<bean id="myMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>
<property name="dataSource" ref="IbatisDataSource"/>
</bean>
次に、私のコードには次のものがあります。
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
SqlMapClient sqlclient = (SqlMapClient) ctx.getBean("myMapClient");
これを行うと、次のエラーが発生します。
クラス パス リソース [applicationContext.xml] で定義された名前が 'myMapClient' の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException です
なぜそのクラスを探しているのかわかりませんか?私はコンテナの外ですべてをやろうとしています。したがって、そのクラスを探すべきではありません...しかし、それを機能させるために、ASExceptionというクラスを探してみたので、クラスパスに配置できましたが、ASExceptionクラスを見つけることができませんでした。
ポインタはありますか?
スタック トレースと私のコンパイル テスト/実行テスト ライブラリの画像
解決策の編集
: すべてがコンテナーの外側にあると思っていましたが、コンテナーの外側にないものが 1 つあります。
プロパティ configLocation に注目してください。
<property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>
sql-map-config-oracle.xml の実際の内容は
<sqlMapConfig>
<settings enhancementEnabled="true" useStatementNamespaces="true" />
<transactionManager type="JDBC">
<dataSource type="JNDI">
<property name="DataSource" value="my/jndi/mydb" />
</dataSource>
</transactionManager>
<sqlMap resource="somemapping.xml"/>
</sqlMapConfig>
JNDI はそこにある必要はありません。
sql-map-config-oracle.xml は単純に次のようにする必要があります。
<sqlMapConfig>
<settings enhancementEnabled="true" useStatementNamespaces="true" />
<sqlMap resource="somemapping.xml"/>
</sqlMapConfig>