Anja Le Blanc wrote:
Hi All,
Hello,
Sorry to pick up an old thread again. But is there a workaround to have
a global variable in the current version of Taverna (2.1 Beta 2)?
I want to have a Beanshell which runs iteratively and always does one
thing, but the first time the inputs come in some configuration it
should also do something else (only the first time) - so I need to
remember a previous state somewhere.
Yes there is quite an easy workaround. You can use System.setProperty
and System.getProperty in your beanshell.
As an example, here is a workflow that uses two beanshells, one to set
and one to get a property. The one to get the property is configured to
run after the property setter. It is able to read the property that has
been set.
Please note that this is not the best way to pass data between services.
Because it is done "behind the scenes" it will not be kept in any
provenance databases.
Best regards,
Anja
Alan
<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1"
producedBy="taverna-2.1-beta-2"><dataflow
id="a41a45d2-cbb9-4c64-b817-5b7767995e63"
role="top"><name>Workflow61</name><inputPorts><port><name>input</name><depth>0</depth><granularDepth>0</granularDepth><annotations
/></port></inputPorts><outputPorts><port><name>result</name></port></outputPorts><processors><processor><name>propertySetter</name><inputPorts><port><name>in</name><depth>0</depth></port></inputPorts><outputPorts
/><annotations
/><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>beanshell-activity</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.activities.beanshell.BeanshellActivity</class><inputMap><map
from="in" to="in" /></inputMap><outputMap /><configBean
encoding="xstream"><net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean
xmlns="">
<script>System.setProperty("anja", in);</script>
<dependencies />
<classLoaderSharing>workflow</classLoaderSharing>
<localDependencies />
<artifactDependencies />
<inputs>
<net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
<handledReferenceSchemes />
<translatedElementType>java.lang.String</translatedElementType>
<allowsLiteralValues>true</allowsLiteralValues>
<name>in</name>
<depth>0</depth>
<mimeTypes>
<string>text/plain</string>
</mimeTypes>
</net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
</inputs>
<outputs />
</net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean></configBean><annotations
/></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class><configBean
encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig
xmlns="">
<maxJobs>1</maxJobs>
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class><configBean
encoding="xstream"><null xmlns=""
/></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class><configBean
encoding="xstream"><null xmlns=""
/></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class><configBean
encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig
xmlns="">
<backoffFactor>1.0</backoffFactor>
<initialDelay>1000</initialDelay>
<maxDelay>5000</maxDelay>
<maxRetries>0</maxRetries>
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean
encoding="xstream"><null xmlns=""
/></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy><cross><port
name="in" depth="0"
/></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>propertyGetter</name><inputPorts
/><outputPorts><port><name>out</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations
/><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>beanshell-activity</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.activities.beanshell.BeanshellActivity</class><inputMap
/><outputMap><map from="out" to="out" /></outputMap><configBean
encoding="xstream"><net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean
xmlns="">
<script>out = System.getProperty("anja");</script>
<dependencies />
<classLoaderSharing>workflow</classLoaderSharing>
<localDependencies />
<artifactDependencies />
<inputs />
<outputs>
<net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
<granularDepth>0</granularDepth>
<name>out</name>
<depth>0</depth>
<mimeTypes>
<string>text/plain</string>
</mimeTypes>
</net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
</outputs>
</net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean></configBean><annotations
/></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class><configBean
encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig
xmlns="">
<maxJobs>1</maxJobs>
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class><configBean
encoding="xstream"><null xmlns=""
/></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class><configBean
encoding="xstream"><null xmlns=""
/></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class><configBean
encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig
xmlns="">
<backoffFactor>1.0</backoffFactor>
<initialDelay>1000</initialDelay>
<maxDelay>5000</maxDelay>
<maxRetries>0</maxRetries>
</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>0.8</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean
encoding="xstream"><null xmlns=""
/></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy
/></iteration></iterationStrategyStack></processor></processors><conditions><condition
control="propertySetter" target="propertyGetter"
/></conditions><datalinks><datalink><sink
type="processor"><processor>propertySetter</processor><port>in</port></sink><source
type="dataflow"><port>input</port></source></datalink><datalink><sink
type="dataflow"><port>result</port></sink><source
type="processor"><processor>propertyGetter</processor><port>out</port></source></datalink></datalinks><annotations
/></dataflow></workflow>------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
taverna-users mailing list
[email protected]
[email protected]
Web site: http://www.taverna.org.uk
Mailing lists: http://www.taverna.org.uk/taverna-mailing-lists/