0

我的 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 类。

任何指针?

堆栈跟踪和我的编译测试/运行测试库的图像 替代文字 替代文字 替代文字

编辑 解决方案:即使我认为一切都在容器之外......有一件东西不在容器之外。
注意属性 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>
4

2 回答 2

1

正如@Cletus 所说,你肯定有一个运行时依赖问题org.springframework.orm.ibatis.SqlMapClientFactoryBeancom.iplanet.ias.admin.common.ASException但现在你的类路径中没有它——Spring 找不到它。您应该查看源代码SqlMapClientFactoryBean以查看ASException调用的位置——Spring 应该有一个包含所有依赖项的 dist,您也可以在进行调查时查看那里。

于 2009-11-12T15:00:11.750 回答
0

这个类是在编译期间找到的,但在运行期间没有找到:

com/iplanet/ias/admin/common/ASException

因此,当您运行该程序时,它似乎找不到属于您正在使用的 Sun 应用程序或门户服务器的此类。简而言之:这是一个类路径错误。

于 2009-11-12T03:04:28.067 回答