From: Andreas S. <sch...@us...> - 2002-08-14 23:40:12
|
User: schaefera Date: 02/08/14 16:40:10 Modified: varia/src/main/org/jboss/varia/scheduler AbstractScheduleProvider.java ScheduleManager.java SingleScheduleProvider.java Log: Added the new Email to JMS Converter so that a MDB can get emails from a Mail Server. Revision Changes Path 1.4 +18 -4 contrib/varia/src/main/org/jboss/varia/scheduler/AbstractScheduleProvider.java Index: AbstractScheduleProvider.java =================================================================== RCS file: /cvsroot/jboss/contrib/varia/src/main/org/jboss/varia/scheduler/AbstractScheduleProvider.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AbstractScheduleProvider.java 31 Jul 2002 04:08:08 -0000 1.3 +++ AbstractScheduleProvider.java 14 Aug 2002 23:40:09 -0000 1.4 @@ -23,7 +23,7 @@ * extends="org.jboss.system.ServiceMBean" * * @author <a href="mailto:an...@jb...">Andreas Schaefer</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public abstract class AbstractScheduleProvider extends ServiceMBeanSupport @@ -76,7 +76,12 @@ } /** - * Add the Schedules to the Schedule Manager + * Add the Schedules to the Schedule Manager. + * + * This is a callback method for the Schedule Manager + * which indicates to the Provider that it can start adding + * Schedules. Therefore this method should not be called + * by a client directly. * * @jmx:managed-operation */ @@ -87,12 +92,19 @@ * Stops the Provider from providing and * causing him to remove all Schedules * + * This is a callback method for the Schedule Manager + * which indicates to the Provider that it can start adding + * Schedules. Therefore this method should not be called + * by a client directly. + * * @jmx:managed-operation */ public abstract void stopProviding(); /** - * Add a single Schedule add the Schedule Manager + * Add a single Schedule add the Schedule Manager. This is + * a convenience method for the providers to add a single + * schedule add the Schedule Manager. * * @param pTarget Object Name of the target MBean (receiver * of the time notification) @@ -142,7 +154,9 @@ } /** - * Remove a Schedule from the Schedule Manager + * Remove a Schedule from the Schedule Manager. This + * is a convenience method for the providers to remove a + * schedule at the Schedule Manager. * * @param pID Identification of the Schedule **/ 1.3 +85 -65 contrib/varia/src/main/org/jboss/varia/scheduler/ScheduleManager.java Index: ScheduleManager.java =================================================================== RCS file: /cvsroot/jboss/contrib/varia/src/main/org/jboss/varia/scheduler/ScheduleManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ScheduleManager.java 31 Jul 2002 04:08:08 -0000 1.2 +++ ScheduleManager.java 14 Aug 2002 23:40:09 -0000 1.3 @@ -14,7 +14,9 @@ import java.util.Iterator; import javax.management.MalformedObjectNameException; +import javax.management.InstanceNotFoundException; import javax.management.JMException; +import javax.management.MBeanException; import javax.management.MBeanServer; import javax.management.Notification; import javax.management.timer.TimerNotification; @@ -36,7 +38,7 @@ * extends="org.jboss.system.ServiceMBean" * * @author <a href="mailto:an...@jb...">Andreas Schaefer</a> - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ */ public class ScheduleManager extends ServiceMBeanSupport @@ -69,7 +71,7 @@ private boolean mScheduleIsStarted = false; private boolean mWaitForNextCallToStop = false; private boolean mStartOnStart = false; - private boolean mIsRestartPending = false; + private boolean mIsPaused = false; /** * List of registered providers to inform them when the @@ -293,7 +295,7 @@ lInstance.stop(); } catch( JMException jme ) { - log.error( "Could not start a Schedule", jme ); + log.error( "Could not stop a Schedule", jme ); } mSchedules.remove( new Integer( pIdentification ) ); } @@ -321,23 +323,30 @@ } /** - * @jmx:managed-attribute - * - * @return True if the schedule is up and running. If you want to start the schedule - * with another values by using {@ #startSchedule} you have to stop the schedule - * first with {@ #stopSchedule} and wait until this method returns false. - */ - public boolean isStarted() { - return mScheduleIsStarted; + * @return True if all the Schedules are paused meaning that even when the notifications + * are sent to the listener they are ignored. ATTENTION: this applies to all registered + * Schedules and any notifications are lost during pausing + **/ + public boolean isPaused() { + return mIsPaused; } - + /** - * @jmx:managed-attribute + * Pauses or restarts the Schedules which either suspends the + * notifications or start transfering them to the target * - * @return True if any attributes are changed but the Schedule is not restarted yet. - */ - public boolean isRestartPending() { - return mIsRestartPending; + * @param pIsPaused True when the Schedules are paused or + * false when they resumes + **/ + public void setPaused( boolean pIsPaused ) { + mIsPaused = pIsPaused; + } + + /** + * @return True if the Schedule Manager is started + **/ + public boolean isStarted() { + return getState() == STARTED; } /** @@ -491,45 +500,47 @@ if( mSchedule.mRemainingRepetitions > 0 ) { mSchedule.mRemainingRepetitions--; } - Object[] lArguments = new Object[ mSchedule.mSchedulableMBeanArguments.length ]; - for( int i = 0; i < lArguments.length; i++ ) { - switch( mSchedule.mSchedulableMBeanArguments[ i ] ) { - case NOTIFICATION: - lArguments[ i ] = pNotification; - break; - case DATE: - lArguments[ i ] = lTimeStamp; - break; - case REPETITIONS: - lArguments[ i ] = new Long( mSchedule.mRemainingRepetitions ); - break; - case SCHEDULER_NAME: - lArguments[ i ] = getServiceName(); - break; - default: - lArguments[ i ] = null; + if( !mIsPaused ) { + Object[] lArguments = new Object[ mSchedule.mSchedulableMBeanArguments.length ]; + for( int i = 0; i < lArguments.length; i++ ) { + switch( mSchedule.mSchedulableMBeanArguments[ i ] ) { + case NOTIFICATION: + lArguments[ i ] = pNotification; + break; + case DATE: + lArguments[ i ] = lTimeStamp; + break; + case REPETITIONS: + lArguments[ i ] = new Long( mSchedule.mRemainingRepetitions ); + break; + case SCHEDULER_NAME: + lArguments[ i ] = getServiceName(); + break; + default: + lArguments[ i ] = null; + } + } + log.debug( "MBean Arguments are: " + java.util.Arrays.asList( lArguments ) ); + log.debug( "MBean Arguments Types are: " + java.util.Arrays.asList( mSchedule.mSchedulableMBeanArgumentTypes ) ); + try { + getServer().invoke( + mSchedule.mTarget, + mSchedule.mMethodName, + lArguments, + mSchedule.mSchedulableMBeanArgumentTypes + ); + } + catch( javax.management.JMRuntimeException jmre ) { + log.error( "Invoke of the Schedulable MBean failed", jmre ); + } + catch( javax.management.JMException jme ) { + log.error( "Invoke of the Schedulable MBean failed", jme ); + } + log.debug( "Remaining Repititions: " + mSchedule.mRemainingRepetitions + + ", wait for next call to stop: " + mWaitForNextCallToStop ); + if( mSchedule.mRemainingRepetitions == 0 || mWaitForNextCallToStop ) { + mSchedule.stop(); } - } - log.debug( "MBean Arguments are: " + java.util.Arrays.asList( lArguments ) ); - log.debug( "MBean Arguments Types are: " + java.util.Arrays.asList( mSchedule.mSchedulableMBeanArgumentTypes ) ); - try { - getServer().invoke( - mSchedule.mTarget, - mSchedule.mMethodName, - lArguments, - mSchedule.mSchedulableMBeanArgumentTypes - ); - } - catch( javax.management.JMRuntimeException jmre ) { - log.error( "Invoke of the Schedulable MBean failed", jmre ); - } - catch( javax.management.JMException jme ) { - log.error( "Invoke of the Schedulable MBean failed", jme ); - } - log.debug( "Remaining Repititions: " + mSchedule.mRemainingRepetitions + - ", wait for next call to stop: " + mWaitForNextCallToStop ); - if( mSchedule.mRemainingRepetitions == 0 || mWaitForNextCallToStop ) { - mSchedule.stop(); } } } @@ -651,7 +662,6 @@ long lNow = new Date().getTime() + 100; int lSkipRepeats = (int) ( ( lNow - mStartDate.getTime() ) / mPeriod ) + 1; log.debug( "Old start date: " + mStartDate + ", now: " + new Date( lNow ) + ", Skip repeats: " + lSkipRepeats ); -//AS log.info( "Old start date: " + mStartDate + ", now: " + new Date( lNow ) + ", Skip repeats: " + lSkipRepeats ); if( mInitialRepetitions > 0 ) { // If not infinit loop if( lSkipRepeats >= mInitialRepetitions ) { @@ -723,16 +733,26 @@ mTimer, mListener ); - getServer().invoke( - mTimer, - "removeNotification", - new Object[] { - new Integer( mNotificationID ) - }, - new String[] { - "java.lang.Integer" , + try { + getServer().invoke( + mTimer, + "removeNotification", + new Object[] { + new Integer( mNotificationID ) + }, + new String[] { + "java.lang.Integer" , + } + ); + } + catch( MBeanException mbe ) { + Exception e = mbe.getTargetException(); + // If target exception is InstanceNotFoundException then + // the notification is already removed so ignore it + if( !( e instanceof InstanceNotFoundException ) ) { + throw mbe; } - ); + } } public int getID() { 1.2 +29 -46 contrib/varia/src/main/org/jboss/varia/scheduler/SingleScheduleProvider.java Index: SingleScheduleProvider.java =================================================================== RCS file: /cvsroot/jboss/contrib/varia/src/main/org/jboss/varia/scheduler/SingleScheduleProvider.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SingleScheduleProvider.java 28 Jul 2002 21:08:28 -0000 1.1 +++ SingleScheduleProvider.java 14 Aug 2002 23:40:09 -0000 1.2 @@ -29,7 +29,7 @@ * extends="org.jboss.varia.scheduler.AbstractScheduleProviderMBean" * * @author <a href="mailto:an...@jb...">Andreas Schaefer</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class SingleScheduleProvider extends AbstractScheduleProvider @@ -73,11 +73,6 @@ // SchedulerMBean Methods // ------------------------------------------------------------------------- - /** - * Add the Schedule to the Schedule Manager - * - * @jmx:managed-operation - */ public void startProviding() throws JMException { @@ -91,12 +86,6 @@ ); } - /** - * Stops the Provider from providing causing - * the provider to remove the Schedule - * - * @jmx:managed-operation - */ public void stopProviding() { try { removeSchedule( mScheduleID ); @@ -109,39 +98,31 @@ /** * @jmx:managed-attribute * - * @return Object Name if a Schedulalbe MBean is set + * @return Object Name of the Target MBean for the timer notifications */ - public String getSchedulableMBean() { + public String getTargetName() { return mSchedulableMBean == null ? null : mSchedulableMBean.toString(); } /** - * Sets the fully qualified JMX MBean name of the Schedulable MBean to be called. - * <b>Attention: </b>if set the all values set by {@link #setSchedulableClass}, - * {@link #setSchedulableArguments} and {@link #setSchedulableArgumentTypes} are - * cleared and not used anymore. Therefore only use either Schedulable Class or - * Schedulable MBean. If {@link #setSchedulableMBeanMethod} is not set then the - * schedule method as in the {@link Schedulable#perform} will be called with the - * same arguments. Also note that the Object Name will not be checked if the - * MBean is available. If the MBean is not available it will not be called but - * the remaining repetitions will be decreased. + * Sets the fully qualified JMX MBean Object Name of the Schedulable MBean to be called. * * @jmx:managed-attribute * - * @param pSchedulableMBean JMX MBean Object Name which should be called. + * @param pTargetObjectName JMX MBean Object Name which should be called. * * @throws InvalidParameterException If the given value is an valid Object Name. */ - public void setSchedulableMBean( String pSchedulableMBean ) + public void setTargetName( String pTargetObjectName ) throws InvalidParameterException { - if( pSchedulableMBean == null ) { + if( pTargetObjectName == null ) { throw new InvalidParameterException( "Schedulable MBean must be specified" ); } try { - mSchedulableMBean = new ObjectName( pSchedulableMBean ); + mSchedulableMBean = new ObjectName( pTargetObjectName ); } catch( MalformedObjectNameException mone ) { log.error( "Schedulable MBean Object Name is malformed", mone ); @@ -150,9 +131,11 @@ } /** - * @return Schedulable MBean Method description if set + * @return Method description of the target MBean to be called + * + * @jmx:managed-attribute **/ - public String getSchedulableMBeanMethod() { + public String getTargetMethod() { return mSchedulableMBeanMethod; } @@ -181,43 +164,43 @@ * * @jmx:managed-attribute * - * @param pSchedulableMBeanMethod Name of the method to be called optional followed + * @param pTargetMethod Name of the method to be called optional followed * by method arguments (see above). * * @throws InvalidParameterException If the given value is not of the right * format */ - public void setSchedulableMBeanMethod( String pSchedulableMBeanMethod ) + public void setTargetMethod( String pTargetMethod ) throws InvalidParameterException { - if( pSchedulableMBeanMethod == null ) { + if( pTargetMethod == null ) { mSchedulableMBeanMethod = null; return; } - int lIndex = pSchedulableMBeanMethod.indexOf( '(' ); + int lIndex = pTargetMethod.indexOf( '(' ); String lMethodName = ""; if( lIndex < 0 ) { - lMethodName = pSchedulableMBeanMethod.trim(); + lMethodName = pTargetMethod.trim(); mMethodSignature = new String[ 0 ]; } else if( lIndex > 0 ) { - lMethodName = pSchedulableMBeanMethod.substring( 0, lIndex ).trim(); + lMethodName = pTargetMethod.substring( 0, lIndex ).trim(); } if( lMethodName.equals( "" ) ) { lMethodName = "perform"; } if( lIndex >= 0 ) { - int lIndex2 = pSchedulableMBeanMethod.indexOf( ')' ); + int lIndex2 = pTargetMethod.indexOf( ')' ); if( lIndex2 < lIndex ) { throw new InvalidParameterException( "Schedulable MBean Method: closing bracket must be after opening bracket" ); } - if( lIndex2 < pSchedulableMBeanMethod.length() - 1 ) { - String lRest = pSchedulableMBeanMethod.substring( lIndex2 + 1 ).trim(); + if( lIndex2 < pTargetMethod.length() - 1 ) { + String lRest = pTargetMethod.substring( lIndex2 + 1 ).trim(); if( lRest.length() > 0 ) { throw new InvalidParameterException( "Schedulable MBean Method: nothing should be after closing bracket" ); } } - String lArguments = pSchedulableMBeanMethod.substring( lIndex + 1, lIndex2 ).trim(); + String lArguments = pTargetMethod.substring( lIndex + 1, lIndex2 ).trim(); if( lArguments.equals( "" ) ) { mMethodSignature = new String[ 0 ]; } else { @@ -229,7 +212,7 @@ } } mSchedulableMBeanMethodName = lMethodName; - mSchedulableMBeanMethod = pSchedulableMBeanMethod; + mSchedulableMBeanMethod = pTargetMethod; } /** @@ -238,7 +221,7 @@ * @return Schedule Period between two scheduled calls in Milliseconds. It will always * be bigger than 0 except it returns -1 then the schedule is stopped. */ - public long getSchedulePeriod() { + public long getPeriod() { return mSchedulePeriod; } @@ -252,7 +235,7 @@ * * @throws InvalidParameterException If the given value is less or equal than 0 */ - public void setSchedulePeriod( long pPeriod ) { + public void setPeriod( long pPeriod ) { if( pPeriod <= 0 ) { throw new InvalidParameterException( "Schedulable Period may be not less or equals than 0" ); } @@ -265,7 +248,7 @@ * @return Date (and time) of the first scheduled. For value see {@link #setInitialStartDate} * method. */ - public String getInitialStartDate() { + public String getStartDate() { return mStartDateString; } @@ -295,7 +278,7 @@ * your JBoss server then it will start at the next Noon (the same if started * before Noon or the next day if start after Noon). */ - public void setInitialStartDate( String pStartDate ) { + public void setStartDate( String pStartDate ) { mStartDateString = pStartDate == null ? "" : pStartDate.trim(); if( mStartDateString.equals( "" ) ) { mStartDate = new Date( 0 ); @@ -328,7 +311,7 @@ * * @return Number of scheduled calls initially. If -1 then there is not limit. */ - public long getInitialRepetitions() { + public long getRepetitions() { return mInitialRepetitions; } @@ -342,7 +325,7 @@ * * @throws InvalidParameterException If the given value is less or equal than 0 */ - public void setInitialRepetitions( long pNumberOfCalls ) { + public void setRepetitions( long pNumberOfCalls ) { if( pNumberOfCalls <= 0 ) { pNumberOfCalls = -1; } |