Erreur lors insertion class dans fichier jar shared/lib
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-24-2011 04:57 AM
Bonjour,
Je tente le déploiement de mes extensions (repository+share) en utilisant la méthode à priori conseillée d'un fichier jar sous tomcat/shared/lib/mon-extension.jar.
L'ensemble des fichiers de configuration (xml, js, ftl…) sous alfresco/extension et alfresco/web-extension sont bien pris en compte.
Cependant, je rencontre l'erreur suivante au chargement tomcat concernant la prise en compte des classes associées à un bean lorsqu'elles sont ajoutées dans WEB-INF/classes de ce jar :
Lorsque les fichiers classes associées à mon bean Xml2HtmlParserContentTransformer sont ajoutées sous webapps/alfresco/WEB-INF/classes, il n'y a aucune erreur et l'application fonctionne correctement. Mais je ne souhaite pas avoir à déployer sous webapps/alfresco.
Aurai-je fait une erreur de configuration ou se peut-il qu'il y ait un bug dans le mécanisme de surcharge par jar ?
Merci.
Je tente le déploiement de mes extensions (repository+share) en utilisant la méthode à priori conseillée d'un fichier jar sous tomcat/shared/lib/mon-extension.jar.
L'ensemble des fichiers de configuration (xml, js, ftl…) sous alfresco/extension et alfresco/web-extension sont bien pris en compte.
Cependant, je rencontre l'erreur suivante au chargement tomcat concernant la prise en compte des classes associées à un bean lorsqu'elles sont ajoutées dans WEB-INF/classes de ce jar :
19:55:52,832 ERROR [web.context.ContextLoader] Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmxUrl' defined in class path resource [alfresco/core-services-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public final java.lang.String $Proxy4.subsituteHost(java.lang.String)] threw exception; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.alfresco.repo.content.transform.Xml2HtmlParserContentTransformer] for bean with name 'transformer.XmlParser' defined in URL [jar:file:/home/alfuser/alfresco-3.4.0/tomcat/shared/lib/mon-extension.jar!/alfresco/extension/xmlparser-transformer-context.xml]; nested exception is java.lang.ClassNotFoundException: org.alfresco.repo.content.transform.Xml2HtmlParserContentTransformerRelated cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'LuceneFullTextSearchIndexer' defined in class path resource [alfresco/core-services-context.xml]: Cannot resolve reference to bean 'luceneFullTextSearchIndexer' while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'luceneFullTextSearchIndexer' defined in class path resource [alfresco/core-services-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.alfresco.repo.content.transform.Xml2HtmlParserContentTransformer] for bean with name 'transformer.XmlParser' defined in URL [jar:file:/home/alfuser/alfresco-3.4.0/tomcat/shared/lib/mon-extension.jar!/alfresco/extension/xmlparser-transformer-context.xml]; nested exception is java.lang.ClassNotFoundException: org.alfresco.repo.content.transform.Xml2HtmlParserContentTransformer
Lorsque les fichiers classes associées à mon bean Xml2HtmlParserContentTransformer sont ajoutées sous webapps/alfresco/WEB-INF/classes, il n'y a aucune erreur et l'application fonctionne correctement. Mais je ne souhaite pas avoir à déployer sous webapps/alfresco.
Aurai-je fait une erreur de configuration ou se peut-il qu'il y ait un bug dans le mécanisme de surcharge par jar ?
Merci.
Labels:
- Labels:
-
Archive
7 REPLIES 7

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-25-2011 03:34 AM
Les classes ne doivent pas etre dans WEB-INF/lib d'un jar.
Le jar doit uniquement reproduire l'arborescence (les . deviennent des /), et posséder un META-INF.
Voir :
Preter également attention :
- au fait que si votre classe possède des inner classes, elles doivent aussi être dans le jar.
- à l'arbre des classloaders et au dépendances introduites par l'ordre de chargement.
Le jar doit uniquement reproduire l'arborescence (les . deviennent des /), et posséder un META-INF.
Voir :
man jar
Preter également attention :
- au fait que si votre classe possède des inner classes, elles doivent aussi être dans le jar.
- à l'arbre des classloaders et au dépendances introduites par l'ordre de chargement.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-25-2011 09:04 AM
Bonjour,
Pour une meilleure compréhension, voici le contenu de mon jar (avant zippage) :
Les classes sont donc bien dans WEB-INF/classes du jar.
Le jar étant positionné dans tomcat/shared/lib, celui-ci est à priori chargé dans les derniers (après webapp/alfresco/WEB-INF/classes et webapp/alfresco/WEB-INF/lib d'après
Des idées sur le non fonctionnement ?
Quelqu'un a-t-il déjà réussi à déployer des classes d'extensions dans des jar ?
Pour une meilleure compréhension, voici le contenu de mon jar (avant zippage) :
\alfresco\extension\…\alfresco\messages\…\alfresco\web-extension\…\META-INF\components\…\WEB-INF\classes\org\alfresco\repo\content\transform\Xml2HtmlParserContentTransformer$1.class\WEB-INF\classes\org\alfresco\repo\content\transform\Xml2HtmlParserContentTransformer.class\WEB-INF\classes\org\alfresco\repo\content\transform\Xml2HtmlParserContentTransformerTest.class
Les classes sont donc bien dans WEB-INF/classes du jar.
Le jar étant positionné dans tomcat/shared/lib, celui-ci est à priori chargé dans les derniers (après webapp/alfresco/WEB-INF/classes et webapp/alfresco/WEB-INF/lib d'après
Des idées sur le non fonctionnement ?
Quelqu'un a-t-il déjà réussi à déployer des classes d'extensions dans des jar ?

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-25-2011 11:19 AM
comme je vous ai dit tout a l'heure, votre jar ne doit pas contenir de repertoire WEB-INF/classes. vous devez avoir directement un repertoire org, puis un répertoire alfresco, … à la racine du jar zippé et au bout de l'arborescence vos classes.
En outre, le lien que vous mentionnez concerne tomcat 5.5. Je suppose que vous tournez sur un tomcat 6.
En outre, le lien que vous mentionnez concerne tomcat 5.5. Je suppose que vous tournez sur un tomcat 6.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-25-2011 12:01 PM
Effectivement, WEB-INF/classes n'a rien à faire dans un jar.
Je reteste sans.
Je reteste sans.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-25-2011 03:14 PM
Sans WEB-INF/classes dans le jar, ma classe semble etre bien reconnue, cependant, c'est maintenant une autre classe qui n'est pas trouvée :
Encore une fois, ce problème n'apparait pas si les 3 fichiers .class de mon extension sont déployées sous webapps/alfresco/WEB-INF/classes.
Des idées ?
21:04:28,182 ERROR [web.context.ContextLoader] Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmxUrl' defined in class path resource [alfresco/core-services-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public final java.lang.String $Proxy4.subsituteHost(java.lang.String)] threw exception; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.alfresco.repo.content.transform.Xml2HtmlParserContentTransformer] for bean with name 'transformer.XmlParser' defined in URL [jar:file:/home/alfuser/alfresco-3.4.0/tomcat/shared/lib/share-Michelin.jar!/alfresco/extension/xmlparser-transformer-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/alfresco/repo/content/transform/AbstractContentTransformer2Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'LuceneFullTextSearchIndexer' defined in class path resource [alfresco/core-services-context.xml]: Cannot resolve reference to bean 'luceneFullTextSearchIndexer' while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'luceneFullTextSearchIndexer' defined in class path resource [alfresco/core-services-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.alfresco.repo.content.transform.Xml2HtmlParserContentTransformer] for bean with name 'transformer.XmlParser' defined in URL [jar:file:/home/alfuser/alfresco-3.4.0/tomcat/shared/lib/share-Michelin.jar!/alfresco/extension/xmlparser-transformer-context.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/alfresco/repo/content/transform/AbstractContentTransformer2
Encore une fois, ce problème n'apparait pas si les 3 fichiers .class de mon extension sont déployées sous webapps/alfresco/WEB-INF/classes.
Des idées ?

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-28-2011 09:02 AM
Preter également attention :
- au fait que si votre classe possède des inner classes, elles doivent aussi être dans le jar.
- à l'arbre des classloaders et au dépendances introduites par l'ordre de chargement.
Le point 2 contient la réponse. le modèle de classloading est, par défaut, delegation au parent.
Peut etre que dans votre cas un AMP sera + approprié.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2011 05:00 AM
Merci.
Effectivement, problème d'ordre de chargement des classes.
J'en conclue que pour étendre Alfresco l'on ne peut pas tout faire par le mécanisme de fichier jar dans shared/lib.
Je voulais à tout prix me passer de AMP qui nécessite de surcharger webapps mais apparemment c'est le seul moyen.
Effectivement, problème d'ordre de chargement des classes.
J'en conclue que pour étendre Alfresco l'on ne peut pas tout faire par le mécanisme de fichier jar dans shared/lib.
Je voulais à tout prix me passer de AMP qui nécessite de surcharger webapps mais apparemment c'est le seul moyen.
