CentOS6.6(32bit)上に、libreoffice6.0.7をインストールしております。
この環境下において、libreofficeをサービス化した上で、Webサーバ(Apache+Tomcat)より、
jodconverter-2.2.2.jarを使用して、xlsファイルからpdfファイルへの変換処理を行うようにしているのですが、先日、libreofficeへconnectはしているのですが、disconnectが行えていない状態となっていました。
(Tomcatのログにdisconnectのログが出力されなくなっておりました)
現象自体は、libreofficeのサービス再起動により回復しております。
jodconverterを使用して、同様のことを行われている方のなかで、
同じような事象が起こったケースはございませんでしょうか。
以前同じような内容で別の者が質問させていただいた現象と似たような現象ですが、
前回発生時の対処として、Apache、tomcat、libreofficeサービスの再起動を夜間に毎日行うようにし
複数同時に処理を行わないよう制御を追加しております。
その他、考えうる原因および解決方法等、ご存じの方がいらっしゃいましたら、
ご教示いただけますと幸いです。
Webサーバ情報
Apache:httpd-2.2.15-39.el6.centos.i686.rpm
Tomcat:apache-tomcat-7.0.50.tar.gz
libreofficeをheadlessモードでサービス化
サービス化スクリプトは下記の通りです。
. /etc/rc.d/init.d/functions
libreoffice="/opt/libreoffice6.0/program/soffice.bin"
libreoffice_args=’–accept=“socket,host=127.0.0.1,port=8100;urp” --headless --nologo --norestore --nodefault --invisible’
prog=$(basename $libreoffice)
sysconfig="/etc/sysconfig/$prog"
lockfile="/var/lock/subsys/libreoffice-headless"
pidfile="/var/run/${prog}.pid"
start() {
echo -n $"Starting $prog: "
daemon “$libreoffice $libreoffice_args &”
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
pidof soffice.bin > $pidfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc -p $pidfile $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case “$1” in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
rh_status_q || exit 0
$1
;;
status)
rh_status || exit 0
;;
*)
echo $“Usage: $0 {start|stop|status|restart}”
exit 2
esac
参考までに、下記にjavaの変換処理部分のロジックを記載致します。
//LiberOfficeへの接続設定(localhostの8100番)
OpenOfficeConnection con = new SocketOpenOfficeConnection(8100);
try {
// LiberOfficeに接続
con.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(con);
//ExcelからPDF変換
converter.convert(in , new DefaultDocumentFormatRegistry().getFormatByFileExtension("xls"),
out, new DefaultDocumentFormatRegistry().getFormatByFileExtension("pdf"));
} catch (Exception e) {
throw new LgException(e);
} finally {
//LibreOfficeから切断
con.disconnect();
}
上記ロジックの前に排他制御の処理を行っております。