1 /* 2 * Copyright (c) 2002-2014, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.portal.service.daemon; 35 36 import fr.paris.lutece.portal.service.plugin.PluginService; 37 import fr.paris.lutece.portal.service.util.AppLogService; 38 39 import java.util.Date; 40 41 42 /** 43 * This class performs methods to manage threads of execution for a given daemon instance 44 */ 45 public final class DaemonThread implements Runnable 46 { 47 private DaemonEntry _entry; 48 private String _strDaemonName; 49 50 /** 51 * Constructor Creates the thread of execution from informations contained 52 * in DaemonEntry structure 53 * @param entry The entry 54 */ 55 public DaemonThread( DaemonEntry entry ) 56 { 57 _entry = entry; 58 } 59 60 /** 61 * Execution process of the daemon associated with the thread 62 * This methods is called for regular interval 63 */ 64 @Override 65 public void run( ) 66 { 67 if ( _entry.isRunning( ) ) 68 { 69 if ( _strDaemonName == null ) 70 { 71 _strDaemonName = "Daemon " + _entry.getId( ); 72 } 73 74 Thread currentThread = Thread.currentThread( ); 75 String strPooledThreadName = currentThread.getName( ); 76 currentThread.setName( "Lutece-Daemon-" + _entry.getId( ) ); 77 78 Daemon daemon = _entry.getDaemon( ); 79 AppLogService.info( _strDaemonName + " - starts processing." ); 80 81 try 82 { 83 _entry.setLastRunDate( new Date( ) ); 84 85 if ( PluginService.isPluginEnable( daemon.getPluginName( ) ) ) 86 { 87 daemon.run( ); 88 _entry.setLastRunLogs( daemon.getLastRunLogs( ) ); 89 } 90 else 91 { 92 _entry.setLastRunLogs( "Plugin not enabled" ); 93 } 94 } 95 catch ( Throwable t ) 96 { 97 AppLogService.error( "Could not process Daemon: " + _entry.getId( ), t ); 98 } 99 100 AppLogService.info( _strDaemonName + " - end of process." ); 101 currentThread.setName( strPooledThreadName ); 102 } 103 else 104 { 105 AppDaemonService.cancelScheduledThread( _entry.getId( ) ); 106 } 107 } 108 }