2009-11-11 2 views
0

내 코드에서

<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> 

다음 내 applicaionContext.xml에 다음 한 내가 가진 :

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 클래스를 찾을 수 없습니다.

모든 포인터?

스택 추적의 이미지 내 컴파일 테스트/실행 테스트 libs와 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.SqlMapClientFactoryBeancom.iplanet.ias.admin.common.ASException으로 컴파일되었지만 클래스 경로에 포함되어 있지 않으므로 런타임 의존성 문제가 발생했습니다. Spring에서 찾을 수 없습니다. SqlMapClientFactoryBean의 소스를보고 ASException이 호출 된 곳을 확인해야합니다. - Spring은 모든 의존성이있는 dist가 있어야하며 조사를 할 때 거기를 볼 수도 있습니다.

+0

은 src와 함께 springframework를 다운로드했습니다. 모든 클래스에서 문자열 'AsException'을 검색 한 src 폴더 .... found nada. – Omnipresent

+0

이렇게 자세히 살펴보면 컨테이너 별 오류 * iplanet *은 Sun 브랜드의 서버 (Glassfish 등)입니다. Netbeans의 Tomcat 인스턴스와 같이 "컨테이너가 부족합니다"를 테스트하는 경우 여기에 컨테이너 참조가있는 것처럼 보입니다. 나는'ias'가 iPlanet Application Server이고'ASException' 응용 프로그램 서버 예외를 얻고 있다고 생각합니다. 새로운 Netbeans 프로젝트 가져 오기 ur 코드, Spring iBatis 종속성 및 Spring (물론 그 종속성) 및 Spring 코드에서 찾을 수없는 ur 코드 종속성을 만들 것입니다. –

+0

글쎄,'ASEXception'을 얻지는 못했지만, 무슨 뜻인지 안다. - 오히려 안다. –

0

이 클래스는 컴파일하는 동안 발견 된 아니라 :

com/iplanet/ias/admin/common/ASException 

을 그래서 당신은 프로그램을 실행하는 경우 ,이 클래스는 현재 사용중인 Sun 응용 프로그램 또는 포털 서버에 속합니다. 즉, 클래스 경로 오류입니다.

+0

컴파일에서 어떻게 발견 되었습니까? ... 오류가 콩을 초기화 할 때 발생합니다. 컴파일시에 발생하지 않을 것입니다. ... 어떤 jar 파일이 필요한지는 모르겠지만 항아리가 컴파일과 클래스 패스 모두에서 누락되었다고 생각합니다. 그냥 실행하지 마십시오 (또는 확실하지 않습니다) – Omnipresent

+1

ClassNotFoundException과 ClassDefNotFoundError를 구별하는 것이 중요합니다. 첫 번째 문제는 리플렉션을 통해 클래스를 인스턴스화하려고 시도했지만 찾을 수없는 경우 발생합니다. 두 번째는 런타임에 더 이상 존재하지 않는 클래스에 대해 일부 코드가 컴파일 되었기 때문에 발생합니다. 그것이 당신이 가진 것입니다. 그래서 당신은 아마 당신이 필요로하는 항아리를 모두 포함하고 있지 않다는 것을 알게 될 것입니다. 하나의 항아리를 포함하고 있지만 항아리가 의존하는 항아리는 아닙니다. – cletus