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 ….
)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
) :
"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.0Nous 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]