Cuando vamos a tener un sistema con gran cantidad de usuarios (miles) y con necesidades importantes de transformación de formatos o incluso para lanzar una reindexación completa de ficheros, metadatos y contenido de los ficheros, puede ser útil escalar, ampliar nuestra infraestructura de Alfresco para usar recursos que tengamos disponibles en otras máquinas.
En este artículo voy a enseñar como configurar Alfresco Enterprise para usar un Open Office corriendo como servidor en un servidor remoto.
- En el servidor dedicado donde ejecutaremos Open Office, que tiene la IP 192.168.0.30 ejecutamos el siguiente comando, poniendo la IP que será en la que “escuche” el proceso:
[bash]
/usr/bin/soffice -headless -nofirststartwizard -accept="socket,host=192.168.0.30,port=8100;urp;StarOffice.ServiceManager" &
[/bash]
- En el servidor Alfresco, en el fichero alfresco-global.properties:
[bash]
### External executable locations ###
ooo.exe=/backup/alfresco/alfresco-enterprise-3.4.3/openoffice/program/soffice.bin
ooo.enabled=false
ooo.port=8100
ooo.server=192.168.0.30
img.root=/backup/alfresco/alfresco-enterprise-3.4.3/common
img.dyn=${img.root}/lib
img.exe=${img.root}/bin/convert
swf.exe=/backup/alfresco/alfresco-enterprise-3.4.3/common/bin/pdf2swf
jodconverter.enabled=true
jodconverter.officeHome=/backup/alfresco/alfresco-enterprise-3.4.3/openoffice
jodconverter.portNumbers=8100
[/bash]
Recuerda, en el archivo anterior, activar “jodconverter.enabled=true” y añadir el valor “ooo.server” con la IP donde estará el servidor dedicado con Open Office.
- También creamos el siguiente fichero tomcat/shared/classes/alfresco/extension/remote-openoffice-context.xml con el contenido:
[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="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="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>
<bean id="openOfficeConnectionTester" class="org.alfresco.util.OpenOfficeConnectionTester">
<property name="connection">
<ref bean="openOfficeConnection"/>
</property>
<property name="strict">
<value>false</value>
</property>
</bean>
</beans>
[/xml]
Hechos esos cambios debemos reiniciar el servidor de aplicaciones y listo. Asegúrate que desde el servidor de Alfresco se llega al puerto de OpenOffice remoto por ejemplo haciendo “telnet 192.168.0.30 8100”, también puedes ver el tráfico que se genera entre los servidores lanzando el comando “tcpdump -nni eth0|grep 8100” en el servidor de OpenOffice.
Recuerda que esta es una funcionalidad de escalabilidad adicional que está disponible en Alfresco Enterprise. Yo la he probado con la versión 3.4.3.
Un artículo muy “bonico” 🙂
Una pregunta, ¿no sería igual activar el sistema directamente ooo en lugar de JODConverter al ser por enlace remoto?, o más aún, ¿has probado a que ambos sistemas estén en false, conectaría remotamente de todas formas?
O sea:
ooo.enabled=false
jodconverter.enabled=false
Si, he probado todas las opciones y solo funciona como indico en el articulo. Tiene sentido que se canalice con jodconcerter.
Gracias Fer.
Buenas Toni, siempre interesante, lo malo es que no seas rubia y alocada, pero nadie es perfecto 😛
Algunas personas hablan de no usar Openoffice como tal, sino implementar un conversor a texto plano usando solo algunas de sus librerias ¿Qué opinión te merece?
Que cachondo! XD
Lo que comentas podría ser posible dependiendo para lo que uses Open Office y lo que quieras de la aplicación que tu comentas. Alfresco se apoya en OO para transformaciones de ficheros y para extraer el texto de ficheros ofimáticos (formatos que ya conocemos), enviar ese texto a Lucene y poder indexarlo. Supongo que hay otras librerías que son menos pesadas que hacen eso pero igual no lo hacen con la misma calidad. Lo desconozco. Lo que está claro es que se podría modificar el transformer para que use otra cosa que no sea OO, pero lógicamente no estaría soportado.
Saludos.
Great write-up. I’ve usually been curious about what people towering issues currently being exhibited during pretty much just about every one.
Hola Tony,
Llevo varios días con problemas alfresco-openoffice, y me gustaría hacerte varias preguntas: ¿qué versión de OpenOffice usas? ¿soporta accesos concurrentes?
Si en el arranque de OO pones “host=192.168.0.30”, ¿no estaría aceptando sólo las conexiones de la propia máquina?
Muchas gracias por el artículo,
saludos
Hola, uso la versión 3.2 de OO en Linux.
Si pones esa ip significa que el puerto se levantará escuchando en esa IP, y todas las máquinas de la red que vean esa IP y puedan acceder a ese puerto, podrán acceder a Open Office (si no hay firewall filtrando).
Saludos.
¡Hola!
Esta funcionalidad también funciona para la versión Community?
Hola Lucas, supongo que si aunque para la community no está el Jodconverter igual se puede implementar.