cancel
Showing results for 
Search instead for 
Did you mean: 

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

abrugger
Champ in-the-making
Champ in-the-making
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 6

rivarola
Champ on-the-rise
Champ on-the-rise
Ce n'est malheureusement pas possible actuellement (voir thread http://forum.alfresco-fr.org/viewtopic.php?pid=2769#p2769).

xantrax
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Champ on-the-rise
Champ on-the-rise
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.
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.