Je suis entrain de tester Alfreso et notament la...

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

Je suis entrain de tester Alfreso et notament la...

Je suis entrain de tester Alfreso et notament la possibilité de pouvoir définir son propre model/propriétés.
Pour cela il faut définir le custom model ds un fichier XML puis redeployer l'application (le war) pour que les modifs soient prisent en compte.

Est-il possible de modifier un custom model au runtime? c-a-d que je dois donner la possibilité à un super utilisateur  de pouvoir définir des nouveaux types de documents ou de spaces, sans devoir redeployer l'application Alfresco via une GUI.

Cela n'est apparement pas prévu en standard ni dans la console d'administration, ni dans l'API?

Antony
6 Replies
rivarola
Active Member

Re: Je suis entrain de tester Alfreso et notament la...

Ce n'est malheureusement pas possible actuellement (voir thread http://forum.alfresco-fr.org/viewtopic.php?pid=2769#p2769).
xantrax
Member II

Re: Je suis entrain de tester Alfreso et notament la...

Salut Antony,

met ce code dans une nouvelle page jsp (le mieux c'est de la mettre dans un sous repertoire exemple: _dev du repertoire jsp d'alfresco).

<%@page import="java.util.*,java.io.*,org.alfresco.repo.dictionary.*,org.alfresco.service.cmr.dictionary.DictionaryException,org.alfresco.service.namespace.*" %>
<%



org.springframework.context.ApplicationContext ctx = org.springframework.web.jsf.FacesContextUtils.getWebApplicationContext(javax.faces.context.FacesContext.getCurrentInstance());
//out.print(ctx.toString());


org.alfresco.repo.dictionary.DictionaryDAO dao = (org.alfresco.repo.dictionary.DictionaryDAO)ctx.getBean("dictionaryDAO");

String bootstrapModel ;

bootstrapModel =request.getParameter("model") ;
if ( bootstrapModel != null )
{


java.io.InputStream modelStream = getClass().getClassLoader().getResourceAsStream(bootstrapModel);

  if (modelStream == null) {
                throw new DictionaryException("Could not find bootstrap model " + bootstrapModel);
            }
              
        M2Model model = M2Model.createModel(modelStream);

         dao.putModel(model);
%>
  <br>
  reload MODEL <%=bootstrapModel%> OK  <%= new Date().toString() %>

<%}
else
{
   %>
   usage: http://localhost:8080/alfresco/faces/jsp/_dev/reloadModel.jsp?model=nom du fichier.
   <br>
   example : http://localhost:8080/alfresco/faces/jsp/_dev/reloadModel.jsp?model=chemin de ton nouveau model
<% }

%>
ensuite tu lance dans le browseur ta page de la maniére suivante

http://localhost:8080/alfresco/faces/jsp/_dev/reloadModel.jsp?model=chemin de ton nouveau model

Voila. Ca peu ne pas marcher à tous les coups mais c'est déjà mieux que rien Smiley Wink
abrugger
Member II

Re: Je suis entrain de tester Alfreso et notament la...

Pourquoi 'Ca peu ne pas marcher à tous les coups'?

Il est dons possible de loader un model dynamiquement?

Est ce que apres un stop/start les changements sont perdus?

Antony
xantrax
Member II

Re: Je suis entrain de tester Alfreso et notament la...

De temps en temps il faut appeler plusieurs fois la jsp pour que cela ce recharge (je sais pas pourquoi Smiley Wink).
Sinon oui il est tout à fait possible de recharger un modele dynamiquement via le code suivant
InputStream is =getClass().getClassLoader().getResourceAsStream("chemin vers un ficher de config d'un modele");
M2Model model = M2Model.createModel(is); //création du modele
dictionaryDAO.putModel(model); //chargement
Pour recharger un modele pendant qu'alfresco tourne tu peux le faire soit via une jsp (voir post d'avant) soit via une classe java indépendante d'alfresco et que tu lance comme une appli normale.

Le fait de stopper et redemarrer ne va rien détruire au contraire lors du redémarrage tous les fichier de config sont rechargés grâce au fichier web.xml qui charge  les fichiers de config jsf (face-…..xml) et les fichiers de config Spring (web-client-application-context.xml…).

voici les passages du fichier web.xml qui résume ce que je raconte Smiley Happy
fichier de config jsf
<context-param>
      <param-name>javax.faces.CONFIG_FILES</param-name>
      <param-value>/WEB-INF/faces-config-app.xml,/WEB-INF/faces-config-beans.xml,/WEB-INF/faces-config-navigation.xml,/WEB-INF/faces-config-common.xml,/WEB-INF/faces-config-repo.xml,/WEB-INF/faces-config-wcm.xml,/WEB-INF/faces-config-enterprise.xml,WEB-INF/faces-config-custom.xml</param-value>
   </context-param>
autres fichiers de config

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
         classpath:alfresco/web-client-application-context.xml
         classpath:web-services-application-context.xml
         classpath:alfresco/web-api-application-context.xml
         classpath:alfresco/application-context.xml
      </param-value>
      <description>Spring config file locations</description>
   </context-param>
dans le fichier application-context.xml tu trouve la ligne
<import resource="classpath*:alfresco/extension/*-context.xml"/>
ce qui te permet de définir un fichier custom-model-context.xml dans le repertoire alfresco/extension/ qui reprenda les chemins de tes fichiers de modele
comme ca

<beans>

    <!– Registration of new models –>
    <bean id="myModels" parent="dictionaryModelBootstrap">
        <property name="models">
            <list>
      <!– New Aspect Model –>
      <!–
        <value>alfresco/extension/gesdos/IdentificationModel.xml</value>
      <value>chemin de fichier modele</value>
                        ……………….
                         ………………
            </list>
        </property>
    </bean>
</beans>
.
abrugger
Member II

Re: Je suis entrain de tester Alfreso et notament la...

Certes mais ce que tu expliques ici c la possibilité de recharger un model existant.
Ce que je veux faire c pouvoir modifier voir ajouter un model, et donc modifier/ajouter les fichiers XML correspondant…ce qui ne me semble pas possible pour le moment car cela implique de modifier le war file…

Merci pour la réponse

Antony
rivarola
Active Member

Re: Je suis entrain de tester Alfreso et notament la...

Je sais qu'Alfresco bosse dessus. En fait charger un nouveau modèle est très simple mais il faut gérer les conflits et ne pas planter la machine en cas de problème. Idéalement il faut aussi permettre la modification de modèle voire la suppression, et faire en sorte que ça marche toujours, en particulier avec les vieux documents (relation modèle <–> document à étudier).
Avec un peu de chance ou pourrait l'avoir à la fin de l'année.