2009-11-11 31 views
0

我在applicaionContext.xml以下实例化的Spring bean容器(用于测试)外

<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"); 

做这给了我下面的错误:

Error creating bean with name 'myMapClient' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException

我不明白为什么要找那个班?我正试图在容器外做一切事情。所以它甚至不应该寻找那个类......但是只是为了使它工作我试着寻找类ASException,所以我可以把它放在类路径上,但没有我在哪里可以找到ASException类。

任何指针?堆栈跟踪的

图片和我的编译测试/运行测试库 alt text http://i34.tinypic.com/ve63wp.jpg alt text http://i33.tinypic.com/15q6yhv.jpg alt text http://i36.tinypic.com/30cu9g8.jpg

编辑 解决方案: 尽管我以为一切都在容器外......有一两件事,不在容器外面。
通知物业configLocation:SQL-地图配置,oracle.xml的

<property name="configLocation" value="classpath: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-地图配置,oracle.xml应该简单地:

<sqlMapConfig> 
    <settings enhancementEnabled="true" useStatementNamespaces="true" /> 
     <sqlMap resource="somemapping.xml"/> 
</sqlMapConfig> 

回答

1

由于@Cletus表示org.springframework.orm.ibatis.SqlMapClientFactoryBean已编译为com.iplanet.ias.admin.common.ASException,但是现在您的类路径中没有它--Spring找不到它,您肯定会遇到运行时相关性问题。您应该查看SqlMapClientFactoryBean的源代码,以查看ASException的调用位置--Spring应该具有所有依赖关系的dist,您还可以在进行调查时查看其中的内容。

+0

用src下载完整的springframework。搜索src文件夹的字符串'AsException'在所有类....发现nada。 – Omnipresent 2009-11-12 15:51:13

+0

所以仔细看看这个必须是容器特定的错误* iplanet *是服务器等的Sun品牌(Glassfish等)。如果你在Netbeans的Tomcat实例中测试这个“out of container”,看起来你仍然有一些容器参考。我认为'ias'是iPlanet应用程序服务器,并且您正在收到'ASException'应用程序服务器异常。我会创建一个新的NetBeans项目导入代码,Spring iBatis依赖项和Spring当然(及其依赖项)以及在Spring中没有找到的代码依赖项。 – 2009-11-12 17:51:21

+0

没有得到'ASEXception',但你知道我的意思 - 而不是得到:) – 2009-11-12 17:53:24

0

这个类在编译过程中被发现,但没有运行期间:

com/iplanet/ias/admin/common/ASException 

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

+0

你怎么能确定它在编译时被发现?..错误发生在bean的初始化..哪些不会发生在编译时反正吧? ...即使我不知道它需要哪个jar文件,但我认为从编译和运行classpaths中都缺少jar。不只是运行(或者我们无法确定) – Omnipresent 2009-11-12 04:38:47

+1

区分ClassNotFoundException和ClassDefNotFoundError很重要。例如,当你试图通过反射实例化一个类并且找不到时,就会发生第一个。第二种情况发生是因为某些代码是针对在运行时不再存在的类进行编译的。这就是你的。所以你可能会发现你没有包括你需要的所有罐子。就像你包括一个jar而不是它依赖的jar等 – cletus 2009-11-12 05:44:03

相关问题