0 votes

instanciation d'un spring bean en dehors du conteneur (pour les tests)

J'ai ce qui suit dans mon 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>

alors dans mon code j'ai :

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
SqlMapClient sqlclient = (SqlMapClient) ctx.getBean("myMapClient");

En procédant ainsi, j'obtiens l'erreur suivante :

Erreur lors de la création d'un bean avec le nom myMapClient' défini dans la classe ressource du chemin [applicationContext.xml] : Invocation de la méthode init a échoué ; l'exception imbriquée exception est java.lang.NoClassDefFoundError : com/iplanet/ias/admin/common/ASException

Je ne comprends pas pourquoi il cherche cette classe ? J'essaie de tout faire en dehors du conteneur. Donc il ne devrait même pas chercher cette classe... mais néanmoins, juste pour que ça marche, j'ai essayé de chercher une classe appelée ASException pour pouvoir la mettre dans le classpath mais je n'ai pas trouvé la classe ASException.

Des conseils ?

Images de la trace de la pile et de mes librairies de test de compilation et de test d'exécution. alt textalt textalt text

Modifier Solution : Même si je pensais que tout était à l'extérieur du conteneur... il y avait UNE chose qui n'était pas à l'extérieur du conteneur.
Remarquez la propriété configLocation :

<property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>

Le contenu réel de sql-map-config-oracle.xml est le suivant

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

Le matériel JNDI n'a pas besoin d'être là !

sql-map-config-oracle.xml devrait simplement être :

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

1voto

non sequitor Points 4092

Vous avez certainement un problème de dépendance d'exécution comme l'a dit @Cletus. org.springframework.orm.ibatis.SqlMapClientFactoryBean a été compilé avec com.iplanet.ias.admin.common.ASException mais maintenant vous ne l'avez pas dans votre classpath -- Spring ne peut pas le trouver. Vous devriez regarder les sources de SqlMapClientFactoryBean pour voir où ASException est appelé -- Spring devrait avoir une dist avec toutes ses dépendances, vous pouvez aussi regarder là-dedans en faisant votre recherche.

0voto

cletus Points 276888

Cette classe a été trouvée pendant la compilation mais pas pendant l'exécution :

com/iplanet/ias/admin/common/ASException

Ainsi, lorsque vous exécutez le programme, il ne semble pas pouvoir trouver cette classe, qui appartient à l'application Sun ou au serveur portail que vous utilisez. En bref, il s'agit d'une erreur de classpath.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X