2009-11-11 37 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

相關問題