Open Office sur une machine distante

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

Open Office sur une machine distante

Lors de l'utilisation de nombreux sites Share, avec beaucoup d'ajout/modification de nombreux documents on arrive vite à une saturation des ressources CPU du serveur hébergeant Alfresco.
Si on étudie les process qui tournent sur le serveur on s'aperçoit que OpenOffice (soffice.bin) peut utiliser beaucoup de CPU et pendant un certain temps … (certains fichiers XLS complexes (600ko, onglets, formules…)  peuvent monopoliser un Xeon bi-pro 4ghz pendant plus de 5 mn !!)

Afin de fluidifier l'utilisation de la plateforme (et ainsi ne pas pénaliser l'ensemble des utilisateurs utilisant la plateforme Share) il est conseillé de faire au moins 2 choses :
    - séparer la jvm d'Alfresco de celle de Share … (c'est assez simple et déjà expliqué…)
    - déplacer le processus Open Office sur une autre machine … (c'est aussi expliqué mais pas trés simple ….  Smiley Very Happy )

J'ai essayé de faire un petit récap dans ce post..
Ce test a été réalisé avec 2 vm sous Windows et un alfresco entreprise 3.4.8, et une community 3.4 …. mais il est aisé de le transposer sous d'autres environnements…

1) Installer Open Office sur une machine et préparer un script de lancement (startOOO.cmd) de la forme (remplacer les chemins, le nom de la machine et les ports par vos valeurs  Smiley Very Happy ) :


"C:\Program Files\OpenOffice.org 3\program\soffice"   -accept=socket,host=vmoffice,port=8100;urp;StarOffice.ServiceManager -nologo -headless

2) Configurer Alfresco :
Il y a 2 façons de configurer Alfresco et Open Office : OOODirect et JodConverter (en version Entreprise)

Après étude, il s'avère que les 2 façons utilisent JodConverter mais pas à la même version : OOODirect utilise JodConverter 2.1, et JodConverter utilise JodConverter 3.0

Nous allons donc utiliser OOODirect qui permet (sans modifications de codes) d'utiliser un openOffice distant sur une machine distante :

  • Dans le répertoire extension de configuration (shared/classes/extension), configurer un remote-openoffice-context.xml de la forme suivante

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

    <beans>
       <bean id="openOfficeConnection" class="org.alfresco.repo.management.subsystems.SubsystemProxyFactory">
          <property name="sourceApplicationContextFactory">
             <ref bean="OOoDirect" />
          </property>
          <property name="interfaces">
             <list>
                <!– Utilisation du parametrage defini dans le subsystem OOODirect –>
                <value>net.sf.jooreports.openoffice.connection.OpenOfficeConnection</value>
             </list>
          </property>
       </bean>

    <bean id="transformer.OpenOffice" class="org.alfresco.repo.content.transform.RemoteOpenOfficeContentTransformer" parent="baseContentTransformer" >
       <property name="connection">
          <ref bean="openOfficeConnection" />
       </property>
       <property name="documentFormatsConfiguration">
          <value>classpath:alfresco/mimetype/openoffice-document-formats.xml</value>
       </property>
    </bean>
    </beans>

  • Configurer
    un sous Système OOoDirect 
    : pour cela créer un sous répertoire subsystems/OOoDirect/default/default sous le répertoire conf/extension et configurer les 2 fichiers suivants
  • openoffice-transform.properties

    # External executable locations
    ooo.exe="./soffice.exe"

    ooo.enabled=true
    ooo.port=8100
    ooo.server=vmoffice

    openoffice-transform-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 id="openOfficeStartupBootstrap" class="org.alfresco.util.exec.RuntimeExecBootstrapBean">
          <property name="startupCommands">
             <list>
                <ref bean="openOfficeStartupCommand" />
             </list>
          </property>
          <property name="failOnError">
             <value>false</value>
          </property>
          <property name="enabled">
            <!– Empeche alfresco de demarrer un process OpenOffice –>
             <value>false</value>
          </property>
       </bean>

       <!–  We have to convert the user directory to an Open Office compatible URI –>
       <bean id="userInstallationURI" class="org.alfresco.util.OpenOfficeURI">
          <constructor-arg>
             <value>${ooo.user}</value>
          </constructor-arg>
       </bean>

       <bean id="openOfficeStartupCommand" class="org.alfresco.util.exec.RuntimeExec">
          <property name="commandsAndArguments">
             <map>
                <entry key=".*">
                   <list>
                      <value>${ooo.exe}</value>
                      <value>-accept=socket,host=127.0.0.1,port=${ooo.port};urp;StarOffice.ServiceManager</value>
                      <bean class="org.alfresco.util.StringAppendingFactoryBean">
                         <property name="items">
                            <list>
                               <value>-env:UserInstallation=</value>
                               <ref bean="userInstallationURI" />
                            </list>
                         </property>
                      </bean>
                      <value>-nologo</value>
                      <value>-headless</value>
                      <value>-nofirststartwizard</value>
                      <value>-nocrashrep</value>
                      <value>-norestore</value>
                   </list>
                </entry>
             </map>
          </property>
          <property name="waitForCompletion">
             <value>false</value>
          </property>
          <property name="errorCodes">
             <value>2</value>
          </property>
       </bean>

    <!– connection OpenOffice distant –>
    <bean id="openOfficeConnection" class="net.sf.jooreports.openoffice.connection.SocketOpenOfficeConnection">
       <constructor-arg type="java.lang.String" value="${ooo.server}"/>
       <constructor-arg type="int" value="${ooo.port}"/>
    </bean>


       <bean id="openOfficeConnectionTester" class="org.alfresco.util.OpenOfficeConnectionTester">
          <property name="connection">
             <ref bean="openOfficeConnection" />
          </property>
          <property name="strict">
             <value>false</value>
          </property>
       </bean>

       <bean id="openOfficeConnectionTesterJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
          <property name="jobClass">
             <value>org.alfresco.util.OpenOfficeConnectionTester$OpenOfficeConnectionTesterJob</value>
          </property>
          <property name="jobDataAsMap">
             <map>
                <entry key="openOfficeConnectionTester">
                   <ref bean="openOfficeConnectionTester" />
                </entry>
             </map>
          </property>
       </bean>

       <bean id="openOfficeConnectionTesterTrigger" class="org.alfresco.util.CronTriggerBean">
          <property name="jobDetail">
             <ref bean="openOfficeConnectionTesterJobDetail" />
          </property>
          <property name="scheduler">
             <ref bean="schedulerFactory" />
          </property>
          <property name="cronExpression">
             <value>${openOffice.test.cronExpression}</value>
          </property>
       </bean>

       <bean id="extracter.worker.OpenOffice" class="org.alfresco.repo.content.metadata.DefaultOpenOfficeMetadataWorker">
          <property name="mimetypeService">
             <ref bean="mimetypeService" />
          </property>
          <property name="connection">
             <ref bean="openOfficeConnection" />
          </property>
       </bean>

       <bean id="transformer.worker.OpenOffice" class="org.alfresco.repo.content.transform.OpenOfficeContentTransformerWorker">
          <property name="mimetypeService">
             <ref bean="mimetypeService" />
          </property>
          <property name="connection">
             <ref bean="openOfficeConnection" />
          </property>
          <property name="documentFormatsConfiguration">
             <value>classpath:alfresco/mimetype/openoffice-document-formats.xml</value>
          </property>
       </bean>

    </beans>
Redémarrer Alfresco et surveiller les logs.
Si tout va bien, nous aurons réparti les charges CPU sur les 2 machines, la plateforme sera beaucoup plus fluide à utiliser au quotidien avec l'interface Share et les conversions ne "plomberont" plus tous les utilisateurs connectés …

[img]http://d16.e-loader.net/mfqtmu8Pzg.JPG[/img]
2 Replies
rguinot
Customer

Re: Open Office sur une machine distante

A noter que des '"limites" ont récemment été ajoutées, avant de pouvoir éviter les lourdes transformations,

voir http://wiki.alfresco.com/wiki/Content_Transformation_Limits

JODConverter a aussi un autre avantage : pouvoir s'addresser à plusieurs instances d'Openoffice, et pouvoir "recycler" périodiquement les instances d'Openoffice.
sburky
Member II

Re: Open Office sur une machine distante

je suis bien d'accord…. mais il ne permet pas de déplacer OpenOffice sur une autre machine …