ApplicationContext et webscript

cancel
Showing results for 
Search instead for 
Did you mean: 
alexiss
Member II

ApplicationContext et webscript

Bonjour,
en fait je voudrais pouvoir utiliser une instance de ApplicationContext dans une classe qui est ensuite utiliser par un webscript. j'ai d'abord coulut utliser la classe ApplicationContextHelper mais elle n'était pas dans le jar , donc j'ai recopier le bout de code qui m'intéressait, mais lorsque je dois récupérer le context,


ApplicationContext ctx ;
ClassPathXmlApplicationContext instance;
String[] CONFIG_LOCATIONS = new String[] { "classpath:alfresco/application-context.xml" };
instance = new ClassPathXmlApplicationContext(CONFIG_LOCATIONS);
ctx=instance;
final ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
                     

j'obtiens l'erreur suivante :

org.springframework.beans.factory.BeanDefinitionStoreException: Error registring bean with name 'webscript.org.alfresco.audit.get' defined in file [….module-context.xml]: Could not resolve parent bean definition 'webscript' ; nested exception is org.springframework.beans.facory.NoSuchBeanDefinitionException: No bean named 'webscript' is defined

et voici module-context.xml :

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>   

   <!– Bean pour la classe pour executer les requetes Hibernate –>
    <bean id="beanWsAuditDAO" class="org.alfresco.module.auditscript.WsAuditDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
      <!–
        <property name="contentStore">
            <ref bean="auditFileContentStore"/>
        </property>
      –>
    </bean>  
   
   
   <!–  Bean pour le DeclarativeWebScript avec injection de la classe requetes Hibernate –>
   <bean id="webscript.org.alfresco.audit.simple.get" class="org.alfresco.module.auditscript.WebScript" parent="webscript">
      <property name="wsAuditDAO">
            <ref bean="beanWsAuditDAO"/>
        </property>
   </bean>
  
</beans>   

je vois pas trop ce que je dois faire donc si vous avez une idée  :idea: hésitez pas. ou si vous voyez un autre moyen de récupérer un ApplicationContext, je suis preneur aussi .
merci d'avance
6 Replies
cleseach
Active Member II

Re: ApplicationContext et webscript

Bonjour,

Je n'ai pas de réponse à votre question "comment récupérer un ApplicationContext".

D'après ce que je vois dans vos extraits de code, votre problème est plutôt de pouvoir récupérer le ServiceRegistry.
Pourquoi alors ne pas utiliser les principes d'injection Spring ?

Cordialement,
Charles Le Seac'h
alexiss
Member II

Re: ApplicationContext et webscript

Merci de votre réponse Charles,
Vous lisez dans mon code come dans un livre Smiley Happy , je cherche effectivement à récupérer le service registry, et la raison pour laquel je n'ai pas penser à faire une injection avec spring et que je suis nouveau dans alfresco et que je n'ai pas encore les bons réflexes.
merci beaucoup en tout cas je vais continuer mes recherches dans ce sens
alexiss
Member II

Re: ApplicationContext et webscript

bon alors après recherche j'ai trouver qu'il fallait faire comme ceci :

ClassPathResource cpr=new ClassPathResource("tomcat/webapps/alfresco/WEB-INF/classes/alfresco/public-services-context.xml");
bf = new XmlBeanFactory(cpr);
ServiceRegistry serviceRegistry = (ServiceRegistry) bf.getBean(ServiceRegistry.SERVICE_REGISTRY);

or, qd je test  j'ai une erreur me disant que le fichier n'existe pas. j'ai essayé en mettant le chemin complet, en utilisant core-services-context.xml, mais rien n'y fait, le fichier n'existe pas. je ne vois vraiment pas où se trouve le problème,si une âme charitable voit où se trouve l'erreur qu'elle n'hésite pas  Smiley Happy 

edit :
bon alors après d'autre recherche, il semble que je doit également ajouter le fichier dans le CLASSPATH.ce que j'ai fait et j'ai bien adresse/public-services-context.xml dans mon classpath. du coup je relance en mettant ClassPathResource("public-services-context.xml"), et ça veux toujours pas .

enfin bon je sèche, j'ai pourtant l'impression que c'est pas grand chose, tout ce que je veux c'est pouvoir récupérer un ServiceRegistry sniff :cry:

re edit :

bon alors j'ai résolut le problème du chemin introuvable par le classepath en fait il faut mettre ça à la place :
String path = System.getProperty("user.dir" );
Resource cpr = new FileSystemResource(path+"\\tomcat\\webapps\\alfresco\\WEB-INF\\classes\\alfresco\\application-context.xml");

parcontre il me trouve pas le bean… j'ai essayer de me balader un peu partout, mais j'arrive pas à trouver le bean dans lequel est définit service registry. j'en ai trouver un avec registryservice, mais j'ai pas trouver de moyen de passer de l'un à l'autre donc je sais pas si y'a vraiment un rapport.

voilà donc en gros si quelqu'un sait ou est le fichier xml qui contient la définition de serviceregistry, je suis preneur  Smiley Happy
alexiss
Member II

Re: ApplicationContext et webscript

je sais que ça se fait pas trop, mais je vais mettre la dernière phrase de mon poste précédent ici, sinon ça va passer à la trappe.
si quelqu'un sait où se trouve le fichier xml où est défini le serviceregistry, se serait très gentil de sa part de m'en faire profiter  Smiley Happy
cleseach
Active Member II

Re: ApplicationContext et webscript

Bonjour,

A la lecture de vos derniers posts, je me dis que je n'ai pas été assez précis dans ma première réponse. J'illustre donc.

Imaginons que vous ayez besoin du ServiceRegistry dans votre classe org.alfresco.module.auditscript.WsAuditDAO.
Plutôt que de chercher à le récupérer de manière hasardeuse, vous allez pouvoir écrire une définition du bean en XML comme suit :
<bean id="beanWsAuditDAO" class="org.alfresco.module.auditscript.WsAuditDAO">
  <property name="sessionFactory">
    <ref bean="sessionFactory"/>
  </property>
  <property name="serviceRegistry">
    <ref bean="ServiceRegistry"/>
  </property>
</bean>

Dans votre classe, après avoir défini la propriété serviceRegistry (et le mutateur associé), vous pourrez directement utiliser cet objet. C'est vraiment magique Spring, non ? Ca demande juste un peu de temps pour comprendre les grands principes, mais quelle économie de temps au final !

Concernant votre question redondante : lisez public-services-context.xml

Cordialement,
Charles Le Seac'h
alexiss
Member II

Re: ApplicationContext et webscript

Bonjour,
je vous remercie de votre réponse …qui effectivement fonctionne beaucoup mieux, et plus simplement que tout ce que j'avais essayer avant. je vous remercie aussi de votre patience, je suis nouveau et j'en suis encore à découvrir certaine chose, comme l'injection en spring. :roll:
encore merci
cordialement
AlexisS