Ante la necesidad de cambiar el estado de lectura/escritura de Alfresco de forma automática (para realizar los backup) he realizado unos scripts basándome en el jythonJmxClient.py de matthew@thebitsource.com.
La idea consiste en conectarme vía JMX a la instancia de alfresco para cambiar el atributo server.transaction.allow-writes del mbean Alfresco:Type=Configuration,Category=sysAdmin,id1=default.
Para esto me valgo del script jythonJmxClient.py, pero añadiéndole un nuevo método, def do_setAttribute(self, line). Este método será el que nos permita cambiar el valor del atributo:
def do_setAttribute(self, line):
"""setAttribute -m|--mbeanpath <path to mbeanr> -a|--attribute <name of attribute>
Set the mbean server for a specific attribute"""
#annoying option parsing stuff - need cmd2
parser = optparse.OptionParser(conflict_handler="error")
parser.add_option('-m', '--mbeanpath', dest='mbp', type='string')
parser.add_option('-a', '--attribute', dest='attr')
parser.add_option('-v', '--value', dest='val')
(options, args) = parser.parse_args(line.split())
value = javax.management.Attribute(options.attr,options.val)
obn = javax.management.ObjectName(options.mbp);
remote.setAttribute(obn, value);
Antes que nada, debemos activar la conexión JMX en nuestro servidor de aplicaciones (tomcat en mi caso) añadiendo las siguientes opciones:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9696 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/opt/alfresco/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/opt/alfresco/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false"
Estos son los scripts que vamos a utilizar:
- estado_alfresco.py (encargado de llamar al script jython de conexion jmx y de pasarle los parámetros adecuados).
- jythonJmxClientAlfresco.py (script en jython para la conexión jmx).
- read_only.txt (fichero de texto con parámetros para conexión y valores a cambiar para poner alfresco en sólo lectura).
- read_write.txt (fichero de texto con parámetros para conexión y valores a cambiar para poner alfresco en lectura/escritura).
- ver_estado.txt (fichero de texto con parámetros para conexión y valores a consultar para ver su estado).
De este modo, si queremos poner alfresco en sólo lectura, haremos la siguiente llamada:
estado_alfresco.py read_only
para ponerlo en lectura/escritura:
estado_alfresco.py read_write
y para ver su estado:
estado_alfresco.py ver_estado
En cada caso imprimirá por pantalla el cambio realizado y su resultado.
Nota: No lo he comentado, pero para que funcione hay que tener instalado jython en el sistema.
No hay comentarios:
Publicar un comentario