Openhab2 rules problem - concurrent lock & scheduled job

My journey to migrate from OH1 to OH2 continues, working through rules the following no longer works:

import org.joda.time.*
import java.util.concurrent.locks.ReentrantLock
import java.util.Date
import java.util.Calendar

val int LANDING_DELAY_SECONDS = 15
var Timer landing_hwTimer = null
var ReentrantLock landing_hwLock = new ReentrantLock(false)

rule "Landing Motion"
when
    Item LandingMotion changed from CLOSED to OPEN
then
    logInfo("lightsLanding", "Landing Motion Timer lights ON")
	
	//if (TimeOfDay.state.toString == "Evening" || TimeOfDay.state.toString == "Night"  || TimeOfDay.state.toString == "Dawn"){
	if (Elevation.state < 1.6){
		logInfo("lightsLanding", "Landing Motion Night Time")
		sendCommand(LandingLightLoadLevelStatus, 80)
	}
	
	landing_hwLock.lock
	if (landing_hwTimer != null) {
		landing_hwTimer.cancel
	    logInfo("lightsLanding", "Landing Motion Timer Cancel")
	}
	
	landing_hwTimer = createTimer(now.plusSeconds(LANDING_DELAY_SECONDS)) [
		landing_hwTimer = null
		logInfo("lightsLanding", "Landing Motion Timer lights OFF")
		if (TimeOfDay.state.toString == "Evening") {
			sendCommand(LandingLightLoadLevelStatus, 10)
		}
		else {
			sendCommand(LandingLightStatus, OFF)
		}
	]
	landing_hwLock.unlock		
end

giving the following exception:

2016-11-18 06:19:51.281 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2016-11-18T06:19:51.262Z: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ {
  <null>.landing_hwTimer = <XNullLiteralImplCustom>
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1a508
} ] threw an unhandled Exception: 
java.lang.RuntimeException: The name '<XFeatureCallImplCustom>.state' cannot be resolved to an item or type.
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:112)[127:org.eclipse.smarthome.model.script:0.9.0.201611161058]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:763)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:219)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:759)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:219)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:900)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:225)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:457)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:243)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29)[143:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
	at com.sun.proxy.$Proxy124.apply(Unknown Source)[:]
	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:38)[127:org.eclipse.smarthome.model.script:0.9.0.201611161058]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)[102:org.eclipse.smarthome.core.scheduler:0.9.0.201611161058]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)[102:org.eclipse.smarthome.core.scheduler:0.9.0.201611161058]

Thanks
James

You no longer need to import joda but that isn’t the problem.

Does Elevation have a value? You could get this error is Elevation.state == NULL.

Are you certain that Elevation exists?

When transitioning to OH 2 Items which have always had a state (i.e. have never been Undefined) suddenly are Undefined and Rules that assume they will always have a state may fail.

The only line in the above that could cause this error is the if(Elevation.state < 1.6) so that needs to be the focus.

Indeed it was; I’m not sure why it wasn’t there before, but it is now and the rules are working.

Many thanks!