Le framework Spring - chargeur de classe de la relation

J'ai un problème qui est probablement lié au Printemps /chargeur de classe de la relation.

Je vous prie de m'excuser pour le niveau de verbosité de la question maintenant.

J'ai un certain nombre de legs applications java qui ont été à l'origine écrit et prévu pour fonctionner à l'intérieur d'une JVM dédiée. Nous avons décidé, après examen de l'utilisation des ressources que des économies pourraient être réalisées par l'exécution de plusieurs applications au sein d'une seule JVM. Dans ce contexte, j'ai écrit un conteneur gestionnaire spécialement conçu pour notre environnement qui est capable d'exécuter chaque application dans un conteneur (ou bac à sable). La base de cette capacité à isoler des conteneurs est bien sûr un class loader personnalisé.

Tout fonctionne bien jusqu'à ce que nous sommes venus à travers une application qui utilise le framework Spring. J'ai un Ressort fichier de configuration avec les fragments ci-dessous.

<bean id="MDDStructurPackager" class="abc.def.mdd.msg.alarm.huawei.MDDPackagerAlarmM2000">
    <property name="logger">
        <ref local="Logger"/>
    </property>
    <property name="realm">
        <value>unpack</value>
    </property>
</bean>

<bean id="Jakarta" class="abc.def.mdd.channel.corba.M2000AlarmChannel">
    <constructor-arg>
        <ref bean="MDDStructurPackager"/>
    </constructor-arg>
    <property name="interactionLayer">
        <ref local="MDDInteractionLayer"/>
    </property>
    <property name="logger">
        <ref local="Logger"/>
    </property>
    <property name="tempFile" value="/opt/app/abcdef/rt_dev/var/cache/dat/Huawei_M2000_Jakarta.dat"/>
    <property name="host" value="M2000Jakarta.ior"/>
    <property name="irpReference" value="clarity"/>
    <property name="name" value="M2000Jakarta"/>
    <property name="realm" value="Jakarta"/>
	<property name="natAddress" value="99.999.99.9" />
</bean>

Ce qui suit est un fragment du fichier journal que le Printemps est l'instanciation de la les haricots.

DEBUG [Sud de l'Agent 1] (DefaultSingletonBeanRegistry.java:162) - la Création d'instance partagée de singleton bean "MDDStructurPackager'

DEBUG [Sud de l'Agent 1] (AbstractAutowireCapableBeanFactory.java:378) - la Création d'instance de bean "MDDStructurPackager'

DEBUG [Sud de l'Agent 1] (AbstractAutowireCapableBeanFactory.java:453) - avec Impatience la mise en cache bean "MDDStructurPackager' pour permettre de résoudre les éventuelles références circulaires

DEBUG [Sud de l'Agent 1] (AbstractBeanFactory.java:213) - de Retour en cache instance du singleton bean "Logger"

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:242) - prise en BeanInfo pour la classe [abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:258) - mise en Cache PropertyDescriptors pour la classe [abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété de "classe" de type [java.lang.Class]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "colectionDate" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "composant" de type [abc.def.mdd.msg.MDDComponent]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété 'fileType' de type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "listCommonWords" du type [java.util.ArrayList]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "listHeader" du type [java.util.ArrayList]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "logger" de type [abc.def.mdd.enregistreur.Enregistreur]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "mapDelimiter" du type [java.util.Carte]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "mapElement" du type [java.util.Carte]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "namePackager" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "nameSpaceXMLSchema" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "nodeName" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "packageXMLSchema" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "processingLayerListener" du type [abc.def.mdd.canal.ProcessingLayerListener]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "royaume" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (CachedIntrospectionResults.java:267) - haricot propriété "statesObject" du type [java.lang.Chaîne]

DEBUG [Sud de l'Agent 1] (AbstractAutowireCapableBeanFactory.java:406) - Terminé la création de l'instance de bean "MDDStructurPackager'

DEBUG [Sud de l'Agent 1] (DefaultSingletonBeanRegistry.java:162) - la Création d'instance partagée de singleton bean "ListAlarmChannel'

DEBUG [Sud de l'Agent 1] (AbstractAutowireCapableBeanFactory.java:378) - la Création d'instance de bean "ListAlarmChannel'

DEBUG [Sud de l'Agent 1] (AbstractAutowireCapableBeanFactory.java:453) - avec Impatience la mise en cache bean "ListAlarmChannel' pour permettre de résoudre les éventuelles références circulaires

DEBUG [Sud de l'Agent 1] (DefaultSingletonBeanRegistry.java:162) - la Création d'instance partagée de singleton bean "Jakarta'

DEBUG [Sud de l'Agent 1] (AbstractAutowireCapableBeanFactory.java:378) - la Création d'instance de bean "Jakarta'

DEBUG [Sud de l'Agent 1] (AbstractBeanFactory.java:213) - de Retour en cache instance du singleton bean "MDDStructurPackager'

INFO: CORBA_HUAWEI_M2KJKT_ALARM (23447542): Ajout d' "/opt/app/abcdef/rt_dev/lib/logkit-1.2.jar" le chemin de classe.

INFO: CORBA_HUAWEI_M2KJKT_ALARM (23447542): Ajout d' "/opt/app/abcdef/rt_dev/lib/avalon-framework-4.1.5.jar" le chemin de classe.

INFO: CORBA_HUAWEI_M2KJKT_ALARM (23447542): Ajout d' "/opt/app/abcdef/rt_dev/lib/concurrent-1.3.2.jar" le chemin de classe.

INFO: CORBA_HUAWEI_M2KJKT_ALARM (23447542): Ajout d' "/opt/app/abcdef/rt_dev/lib/antlr-2.7.2.jar" le chemin de classe.

DEBUG [Sud de l'Agent 1] (ConstructorResolver.java:195) -
Ignorant du constructeur [publique abc.def.mdd.canal.corba.M2000AlarmChannel(
java.lang.Chaîne,
int,
java.lang.Chaîne,
java.lang.Chaîne,
com.citycorp.mdd.msg.MDDComponent
) throws java.lang.Exception
]
de bean "Jakarta': org.springframework.les haricots.usine.UnsatisfiedDependencyException:
Erreur lors de la création de haricots avec le nom "Jakarta" défini dans le fichier [/opt/app/abcdef/rt_dev/etc/HUAWEI_M2KJKT_ALARM.xml]:
Insatisfait de la dépendance exprimée à travers argument du constructeur avec l'index 0 de type [java.lang.String]:
Impossible de convertir constructeur de la valeur de l'argument de type [abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000] de type [java.lang.String]:
Impossible de convertir une valeur de type [abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000] de type [java.lang.String];
nested exception java.lang.IllegalArgumentException:
Ne peut pas convertir une valeur de type [abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000] de type [java.lang.String]:
l'absence de correspondance des éditeurs ou stratégie de conversion trouvé


Suivent les signatures des constructeurs pour l'abc.def.mdd.canal.corba.M2000AlarmChannel classe:

public M2000AlarmChannel( MDDComponent composante )

public M2000AlarmChannel( String host, int port, String username, String password, MDDComponent composante )

La classe abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000 implémente MDDComponent (haricot MDDStructurPackager).



Comme vous pouvez le voir, le Printemps est l'instanciation de certains des haricots ie. MDDStructurPackager sans problème.

Le problème, c'est l'instanciation de la "Jakarta" de haricot.

Les implications de lignes:

 


Erreur lors de la création de haricots avec le nom "Jakarta" défini dans le fichier [/opt/app/abcdef/rt_dev/etc/HUAWEI_M2KJKT_ALARM.xml]:


Insatisfait de la dépendance exprimée à travers argument du constructeur avec l'index 0 de type [java.lang.String]:


Impossible de convertir constructeur de la valeur de l'argument de type [abc.def.mdd.msg.l'alarme.huawei.MDDPackagerAlarmM2000] de type [java.lang.String]:



ne sont pas claires. Je ne suis pas sûr que les raisons pour le type de confusion lors de la tentative de déterminer le constructeur approprié. Il est possible que le problème est associé avec le chargement de l'interface MDDComponent. Si il a été chargé à deux reprises, par différents chargeurs de classe qui ne sont pas liés dans la hiérarchie des chargeurs de classe que vous pouvez imaginer les problèmes associés à la détermination de la bonne constructeur.

Toutes les idées reçues avec gratitude, je suis à saisir les pailles.

Merci
Bryan

OriginalL'auteur | 2009-02-16