Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Oddjob scheduler and task execution framework.
Java Other
tag: oddjob-1.1.0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.



** Please note that many jobs are not serialisation compatible with previous 
versions. You may need to delete persistent stores before upgrading. **

Changes in 1.1.0
- Fixed a bug where a timer with skipMissedRuns re-ran again when the timer
  was started and stopped before the end of the current scheduled interval.
- Added ability to configure Oddjob from a URL.
- Removed the async property from Stop job. A separate trigger can be used
  instead which is much more explicit.
- Added a 'forceComplete' action that will force a job to be COMPLETE.
- Added support Proxying Callables in Oddjob.
- The ContextClassLoader is now always set correctly before running a job.
- The repeat job has been re-written to no longer support schedules just 
  simple repeats.
- Fixed bug with not registering Out Parameters in SQL Job.
- Moved the Struts Webapp to JSF 2.1 with MyFaces 2.1.4 and JSF AJAX is 
  now used to update just the main sections of the web view.
- The CSS for the Webapp has been improved.
- Fixed bug whereby explorer wouldn't close when Oddjob is killed with 

Still To Do for 1.1.0

Deferred to A Later Version
- Look at having a start job and a run job. The run job could use
  Oddjobs ComponentResolver to wrap a Runnable or Service. It could be
  structural and expose the child so properties and Log could be viewed.
- Add Security to the WebApp (with a Read Only role).  
- Include a Jetty Oddball to allow connecting to an Oddjob server from a 
  browser without the need for a separate Servlet Container.
- Improve the AJAX JSF front end to be more AJAXy.
- Introduce the idea of Read only configuration that can't be modified if
  it's been loaded from a non modifiable resource, i.e. from the class path.
- Check a configuration hasn't been modified by someone else before a 
  modification is saved back from designer.
- Add Undo functionality to Oddjob configuration.
- Document conversions. Possibly include conversions in the Reference.
- Improve the <rename> job. Follow Ant's lead of changing to a <move> job and
  copy some of it's feature including; overwrite, force, failonerror, verbose,
  preservelastmodified. Add the ability to back up the moved files like Linux does.
- Introduce a FilterType that can filter files by modified date, created date,
  or match against a regular expression.
- Should structural jobs COMPLETE when they have no child? Need to look at what 
  happens when they are destroyed to ensure they don't complete as their children 
  are removed.

Changes in 1.0.0
- A new append type has been introduced that allows a file to be appended to.
- Corrected millisecond date format to be yyyy-MM-dd HH:mm:ss.SSS (decimal 
  point not colon).
- Fixed bug with stopping wrapped jobs via thread interrupt.
- Reworked state so components can have different state. Services and structural jobs
  now have different states to Jobs.
- JMX server now has a read only mode.
- JMX server will now use the Platform MBean Server if no URL
  is provided.
- Fixed bug in foreach where @Inject didn't work.
- foreach now has purgeAfter and preLoad properties that introduce the idea
  of an execution window for values.
- Support for opening several Oddjob Explorers from one Oddjob has been added
  by the introduction of a MultiExplorerLauncher job. This is now the default 
  job for the explorer element.
- A DelimitedType has been introduced to support more flexible String to 
  String array conversion than just CSV.
- foreach now provides a file attribute for configuration and it supports the
  Design Inside action for configuration. It was necessary to introduce a
  root foreach element in the inner configuration.
- fix bug where Oddjob leaves configuration input streams open.
- Echo can now echo any array of String using the lines property.
- XML can now provide an ArooaConfiguration that also supports
  inline editing and saving back into the original configuration that
  the xml property of the arooa:configuration type did not.
- foreach supports execution of it's children in parallel.
- Schedules have been refactored. Element names have changed and merged:
    dayOfYear -> yearly
    monthOfYear -> yearly
    dayOfMonth -> monthly, which now has weekOfMonth and dayOfWeek to allow
      things like the last Friday of the month to be specified more easily.
    dayOfWeek ->  weekly
    time -> daily, also introduced a new time schedule that is a single
      once only time.
    dayAfter -> day-after, also introduced day-before to improve scheduling
     around holidays.
- Removed Ids from Values. This is because they over complicated 
  configuration via the GUI. Introduced a new IdentifiableValueType, 
  with tag <identify>, that can used to register a value if required.
- Scheduling jobs (Timer and Retry) that are still ACTIVE go to READY
  if stopped. This ensures they can be restarted without a reset, which had caused
  their schedules to be reset, instead of picking up where they left off.
- Parallel is now completely asynchronous so that it doesn't wait for it's children.
  Waiting for children can still be achieved by nesting in a <state:join> job.
  State transitions are now predictable (seen release notes for version 0.30.0). 
- Fixed problems in <state:cascade> that cause an exception when attempting
  to drag and drop children. 
- Problems with scheduling around Daylight Saving Times have been fixed.
- Changed Echo text property to be XML text rather than an attribute to allow
  multiline echos in one echo job.
- Explorer and Designer have been tidied up. Shortcut keys now work.
  Escape and Ctrl-Enter accelerator keys have been added to dialogs. Node
  selection is more intelligent after a selected node is removed or modified.
  The root node is automatically in focus when the job tree is loaded.
- Logging messages have been tidied up. The job name has been removed from log
  messages and added to the Log4j Mapped Diagnostic Context instead with the
  key 'ojname'.
- Upgraded Apache commons-io to be 2.1
- Upgraded HSQL to 2.2.5

Changes in 0.30.0
- Properties Panel of Explorer now updates on Job completion.
- Explorer dialog positioning has been improved.
- Job sleep and stop now use State synchronisation as race conditions were
  causing tests to fail.
- Upgraded Ant libs to 1.8.2.
- Oddjob now unpacks into an oddjob directory without version numbers. This 
  is so oddballs can unpack from a zip file easily.
- The Arooa Descriptor format has been simplified.
- Throttling can now be applied to parallel execution to reduce the number
  of simultaneously running jobs.
- Found the bug with dragging configuration with id's. Ids are no longer 'lost'.
- Log4j version has been updated to 1.2.16 and support the TRACE level added.
- Child and Parent Oddjobs can now share properties and values.
- Properties can now override existing properties with the override attribute.
  The environment suffix can only now be used with PropertiesJob now, not
  the PropertiesType.
- Added an Unload Action. This allows a configuration to be unloaded from
  oddjob without using Hard Reset.
- Added an AddJob action. This allows a job to be added to Oddjob without
  the need to use the designer on the parent job, which destroys the 
  state of any jobs already run for that parent.
- Allowed Parallel not to wait for it's children to complete. Not sure if
  this is a good idea - maybe should keep thread driven and event driven
  jobs separate. Also this introduces an uncertainty with the state
  sequence as parallel can now go READY - EXECUTING - READY - EXECUTING
  depending on how quickly the child executes. This will need thinking about
  for the next version.
- Converted Oddjob's date format to ISO 8601 - i.e. yyyy-mm-dd. Unlike the old
  format that used the names of the month, this ensures that an Oddjob 
  configuration created on a JVM in one locale can be used on a JVM with any 
  other locale.
- Converted dayofweek/monthofyear/dayofyear to number formats for the same
- A new ConvertType has been introduced to force conversions.
- The <class> element has become <bean>, and <class-for> has become <class>. 
  This seemed more appropriate, especially for Spring users, but I was 
  beginning to regret it after changing a 100 or so tests.
- BufferType now resets it's contents when configured.
- Removed depricated client/server tags. Now only namespaced 
  jmx:client/jmx:server tags are allowed.
- An Input job has been added that allows Oddjob to ask for user input, 
  either from the console or from OddjobExplorer.
- A command line parser for Exec has been implemented which allows for quotes 
  and arguments over multiple lines.
- More Examples have been added to the Reference.
- A mechanism for including XML Files in the reference has been implemented. 
  This allows examples to be wrapped in a unit test.
- Changed the reference to be Descriptor driven. All properties are 
  included whether they are documented or not.
- Changed the reference format to have summary sections for properties and 
- Echo job no longer throws an exception when there no text. It prints a 
  blank line instead.
- Fixed bugs with the merging of list types.
- Added conversion from String to String[] that treats string as a CSV.

Changes in 0.29.0
- Introduced a new XMLConfigurationType to allow ArooaConfiguration
objects to be created in configurations.
- Changed the foreach job to use an ArooaConfiguration instead of
just text xml.
- Removed xml and input properties from Oddjob as these can now
be set with the XMLConfigurationType.
- Changed the persisting of Oddjobs again. Now Oddjob is persisted
but the last reset is remembered in applied to the child job
before running.
- Allow Values to have ids as well as components.
- Fixed bug in services where they were only applied for a components 
- Changed class loading to use services instead of the context class loader.
- BufferType can now take a String or List of Strings. It will now also return an 
array of Strings if required.
- Added a BeanReport which produces a simple tabular report on the properties of
- Changed SQL persistence to use a BLOB data type, and to use the correct
ClassLoader when restoring jobs.
- Added support for Prepared and Callable statements to SQL job.
- Added an FTP Oddball.
- Added loading of user properties via oddball.properites.
- Fixed problems where accelerator keys aren't associated with actions 
in Explorer
- A new mail Oddball has been added.
- Examples now use new Net and Mail Oddballs.
- Arrays now convert to a list.
- SQL Date, Time and Timstamp conversions have been added.
- Date type has a format property.
- BigDecimal conversions added.
- SQLJob changed to cope with scripts.
- SQLJob now has different possible result processor including 
a result sheet and bean capture.
- A simple pipeline processing paradime, called BeanBus, has been added to
support changeable result processors for SQLJob.
- Changed BSF to Java 1.6 javax.scripting. The bsf Oddball has been removed.
- stdout, stderr, logout and tee types added to capture output.
- Provide a BeanView that provides Titles for properties (work in progress).
- Competing for work functionality has been added with GrabJob and Keeper.
- Basic archiving support has been added using the idea of Silhouettes.
- Dynamic definition of beans is now possible using MagicBeanDescriptorFactory.
- Changed to preferring long element names to be hyphenated rather than 
camel case. i.e. filePersister is now file-persister.
- Removed setting of ContextClassLoader for Oddjob except for launch classpath.
- Reworked properties yet again. Now normal java properties can be referenced in
attribute expressions, and will be used first before component properties.
- JMXClient is now LogEnabled.
- The remote structural handler now uses a single notification with all child 
state, which means the JMX client can cope with missed structural events.
- Stopping jobs now waits for a job to stop before returning. Destroying jobs
now calls stop, so that jobs are stopped before they are deleted/dragged etc.
- State locking has been reworked to be stricter. this means the order of events is now 
completely predictable, but the risk of deadlock has been increased. So far however no
deadlocking has been observed.
- Stafeful now include as lastJobStateEvent method.
- state:cascade and state:join jobs have been added.
- Upgraded the Spring Oddball to Spring-3.0.3.
- The Default Executors now uses an unlimited thread pool for immediate 
execution - i.e. Parallel jobs.

Changes in 0.28.0
- Allowed Explorer Actions to be pluggable.
- Introduced a Loadable method allows Oddjob, and the foreach job, to be 
loaded without running.
- Changed Resetable interface to include return status.
- Fixed a bug in Timer where the ScheduleContext wasn't reset.
- Changed cut and paste of Oddjob nodes to act like other simple 
- Added a Design Inside action for Oddjob nodes so they can be designed like 
  other jobs.
- Added a check job which is analogous to the unix test command for text and 
- Added a modified flag to ConfigurationSession. 
- Oddjob Explorer now indicates the name of the current configuration (Oddjob) in
the title bar with a * when it's modified.
- Oddjob Explorer now warns when closing a session that contains modifications.
- AntJob can now be stopped but this is a real bodge. The log throws an Exception
causing the build to fail!
- Fixed bug in Designer where Value type fields were not updated.
- Cut and Paste Errors in OddjobExplorer now display in a dialog, not the
error log.
- JMX handlers are now pluggable.
- Changed JMX client handling to allow for missing or different 
version ClientHandlers to allow for a miss match between client and server.
- Improved automatic type conversion to allow for the conversion of any super type. 
- Improved conversion of arrays.
- Added general enum conversions.
- Added the ValueFactory interface and conversion for simple value wrappers.
- State now includes a DESTROYED state. Trigger and Mirror now throw an exception
if their watched job moves to this state.
- A JMX Server can now take an environment map which allows security properties
to be set. A simple security ValueFactory has been created that provides
a JMX simple security environment.
- A JMX Client can now take an environment map which allows security credentials
to be set. A username password ValueFactory has been created that provides
the client credentials for JMX security.
- The JMX Client now detects network failure via a heart beat, and causes the client
to enter an EXCEPTION state.
- Job Synchronisation has now been merged with state change which is much
simpler and elegant.
- Split out the code to create more Oddballs, oj-ant, oj-bsf, 
oj-hsql. Created a new oj-assembly project to build them all.
- Added basic autowiring and use it to improve the setting of Executors 
in the timer jobs.

Known Issues
- Setting a remote property does not work on a remote bean which is a
DynaBean, such as VariablesJob. This is probably because the DynaClass 
used for the MBeans doesn't fake properties like the BeanUtils LazyDynaClass 
- Setting remote nested properties doesn't work. Setting a top level property is
fine but with a property such as x.y BeanUtils will bring x across the network
and set y on the local copy.
- An XML namespace can not be removed from designer once it has been introduced.

Something went wrong with that request. Please try again.