SlideShare a Scribd company logo
Developing with the Taverna Code An introduction to the T2 Platform Tom Oinn, tomoinn@crypticsquid.com, 7th October 2008 Updated 4th November 2008
A warning! In this presentation ‘Taverna’ is distinct from ‘The Taverna Workbench’. ‘Taverna’ should be interpreted as ‘the functionality provided by the core components’ Workflow creation and modification Workflow enactment, monitoring, provenance ... and many more ‘Taverna’ in this context applies to the version 2 of the codebase in cases where a distinction is significant. ‘Service’ is used in the sense of a software component providing a service rather than any particular technology such as SOAP or REST. ‘Services’ here are plain Java objects.
The Problem Taverna (both 1.x and 2) is complex Inherent complexity	 Wide ranging functionality Mechanistic complexity Loaded through Raven to resolve dependency issues Plug-in mechanism Many different extension points Requires unusual knowledge of classloading to resolve issues Taverna is valuable Developers want to use Taverna to: Extend Taverna through plug-in implementations Embed and use Taverna in other systems The complexity obscures the value
Application Development Support
Application Support Guiding principles: Do not require knowledge of classloading Do not require a specific application environment Allow minimal code Provide ‘exactly as much’ functionality as required Explicitly support common usage patterns Prevent dependency on implementation Extensibility and openness
What’s in an application? An application using Taverna will contain: The Taverna API jars Support jars used by the application The application code itself Applies to all applications Command Line GUI Web app Axis service ... Platform Libraries, T2 interfaces Application Specific Libraries for your code T2 Core API Platform API, Spring etc. Platform service APIs ... ... ... Your Application Code
Taverna Implementation Classes The application must also contain... Implementations of the enactor, workflow model and similar. Loaded through Raven Inherit and implement Taverna APIs from the parent class loader Raven Class Loaders Implementations of T2 Interfaces Platform Libraries, T2 interfaces T2 Core Impl Implementation Dependencies T2 Core API Platform API, Spring etc. Platform service APIs
Plug-ins Taverna is plug-in based Each plug-in is isolated in its own class loader and contains: Plug-in specific libraries The extension point implementation code The plug-in inherits the Taverna APIs from the parent class loader These APIs include the extension point interfaces A plug-in can contain many extension point implementations Platform Libraries, T2 interfaces Plug-in Class Loaders 1..n T2 Core API Platform API, Spring etc. Platform service APIs Plug-in specific libraries (not T2 APIs) ... ... ... ... Plug-in Implementation
Service Beans Configured instances Implement service APIs Use T2 implementation classes from Raven Act as a bridge between Raven driven implementations and application code Think of as a ‘toolbox’ for working with Taverna facilities Configured, linked and instantiated through Spring XML configuration Set shown here is indicative We will provide more than this 3rd parties can also provide components here Raven Class Loaders Implementations of T2 Interfaces Platform Libraries, T2 interfaces Workflow Exporter Reference Service T2 Core Impl Implementation Dependencies T2 Core API Platform API, Spring etc. Platform service APIs Workflow Parser Enactor Edit Kit Monitor Factory Activity Kit ... Plug-in Service XML Context Configuration
Root Class Loader from Application, Web-App, Web Service ... Raven Class Loaders Platform Libraries, T2 interfaces Application Specific Libraries for your code Your Application Code Implementations of T2 Interfaces Workflow Exporter Plug-in Class Loaders 1..n T2 Core API Platform API, Spring etc. Platform service APIs ... ... ... T2 Core Impl Implementation Dependencies Workflow Parser Plug-in specific libraries (not T2 APIs) ... ... ... ... Edit Kit Activity Kit Plug-in Implementation Reference Service Enactor Classes only available through services Classes available to all code Service Beans Monitor Factory ... XML Context Configuration Plug-in Service Final Taverna Application Structure
Using the platform 1-2-3 Initialize platform (once per application) Downloads implementation code where required Configures and instantiates service beans Configures plug-in manager, loads plug-ins Specified by Spring XML based configuration files We will provide base configurations as part of the platform Fetch appropriate service bean(s) by name The standard Taverna platform will define a set of base services and their service names Use service bean(s) to access Taverna functionality Code purely against interface based APIs – service beans perform any object instantiation such as creation of new workflow model instances.
An example use of the platform to load a workflow, acquire input data, run the workflow and handle the output. I’m using pseudo-code here rather than Java but in general one line of pseudo-code will correspond to one line of Java, not taking into account standard Java constructs such as casting, type declarations etc. for brevity. Also consider that the final ‘base’ set of service beans is not yet defined, so service names and interfaces are illustrative rather than definitive. A short example
initialization & workflow loading plat = new T2Platform(“path/to/conf.xml”); loader = plat.getBean(“t2.workflow.loader”); workflow = loader.parseWorkflow(“http://foo.com/wf.xml”); The ‘loader’ here is a platform service bean, a tool in the toolbox defined by the platform. This particular tool can be used to create a new workflow model from an XML definition, in this case from a URL. Important point – only one explicit object instantiation: the platform itself. In a web application or web service this would already have been provided in the servlet context, but for conventional applications we need it explicitly.  Aside – the workflow model in Taverna 2 is read-only. If we wanted to modify the model we just loaded we would need an appropriate ‘workflow editor’ service. In our current code this is the Edits interface.
Data registration ref_service = plat.getBean(“t2.reference.service”); input1 = ref_service.register(new File(“some.data”)); input2 = ref_service.register(“string value”); ‘ref_service’ is a Reference Service. This is the component of Taverna used to register data and obtain an internal identifier for it. This identifier is then used as input when running the workflow. Two inputs are registered: ‘input1’ is data held in a file locally ‘input2’ is a literal string value The real Reference Service interface is slightly more complex as it registers data asynchronously but the principle is the same. As before there is no direct object construction (other than the file), so no direct link to any implementation classes.
Enactment enactor = plat.getBean(“t2.enactor”); wf_instance = enactor.createInstance(workflow); wf_instance.push(“input1”,input1); wf_instance.push(“input2”,input2); Following the same pattern as before, we obtain an enactor service bean from the platform. This tool creates workflow instances from workflow definitions. In this particular example we’re ignoring the workflow context, following the ‘minimal code’ principle the service bean API would include this simple version and use some sensible default context. Having obtained the workflow instance we can push the previously registered data into its (in this case two) inputs. Workflows in T2 are pipeline based, so the act of pushing data in starts the enactment, there is no explicit ‘start’ operation (except for cases where there are no workflow inputs).
Handling results result = wf_instance.blocking_fetch(“output”); System.out.println(ref_service.getAsString(result)); I’m taking some liberty with the ‘real’ API here but the principle is the same. We don’t have a blocking fetch method at the moment but maybe we should! We call a method on the workflow instance to fetch the output which will block until it’s available. The result is in the form of an internal identifier in the reference system, so we then use the reference service to render the data referenced by that identifier to a string and print it to the console.
The entire application plat = new T2Platform(“path/to/conf.xml”); loader = plat.getBean(“t2.workflow.loader”); workflow = loader.parseWorkflow(“http://foo.com/wf.xml”); ref_service = plat.getBean(“t2.reference.service”); input1 = ref_service.register(new File(“some.data”)); input2 = ref_service.register(“string value”); enactor = plat.getBean(“t2.enactor”); wf_instance = enactor.createInstance(workflow); wf_instance.push(“input1”,input1); wf_instance.push(“input2”,input2); result = wf_instance.blocking_fetch(“output”); System.out.println(ref_service.getAsString(result));
Conclusion Going back to the ‘guiding principles’ does this code satisfy them? There’s no reference to classloading, and the application would just run from the normal command line. There’s no more code than required to do the job. This is a simple example and didn’t address various issues such as context configuration, but those issues weren’t in the summary of the application either so their corresponding absence in the code is another sign of success. The code never refers to implementation types, it is therefore resilient in the face of implementation updates and changes. The code is almost self documenting. We can’t make any statements about the extensibility of the platform, but all the other requirements are satisfied.
Plug-in Support
Plug-in Management In Taverna 1.x Plug-in code is used to extend Taverna Includes all ‘base’ functionality such as web service invocation, http references etc. Plug-in development issues No tooling support Testing is problematic Problems with optional maven dependencies Can’t use libraries which are not maven artifacts Plug-in usage issues Insufficient  metadata to property describe plug-in functionality Plug-in management service API missing Plug-ins have no presence in the code once loaded
Plug-in Development Provide tool support Plug-in description generator Plug-in verifier Plug-in registry Modified class loading strategy Single class loader per plug-in Allow mix of artifact and non-artifact jars Use Raven to fetch artifact jars, but not to obtain class loaders Testing is a special case of application development See previous section We can provide archetypes for integration tests using the platform to simplify testing
Plug-in Description Plain text description Short name Version, triple numeric with periods Development status (enumeration, for example ‘alpha | beta | stable’ to be decided) Author list Author name Author affiliation (optional) Author email (optional) Author URL (optional) Author Icon (optional, 128x128 true colour PNG with transparency) Tag list Free text tag Homepage URL (can be generated by tooling along with the page itself) Related link list Link description Link URI (most likely HTTP but potentially other reference) Icon, 128x128 true colour PNG with transparency Plugin manager background image (arbitrary size, true colour PNG with transparency, used as a background for the plugin manager panel for this plugin) Core API version targeted specified as an artifact (group, artifact, version) SPI implementation list Plain text description Short name
New plug-in manager structure Consumer Code i.e. Taverna Workbench Install, list, enable, disable... plugins Consume SPI instances, receive notification of addition / removal SPI Registry Instance Registry SPI Registry Instance Registry Plugin Manager Service Bean Get artifact / jar Raven Repository Non-artifact Repository Artifact Cache Jar Cache Download Manager
Plug-in Manager Implications Most places in application code explicitly referencing artifacts and raven will now reference the plug-in manager Code using SPI and instance registries is unchanged Workflow serializer changes to reference plugin rather than artifact specifier Plug-ins can be disabled on the fly Plug-in manager appears as infrastructure bean in platform Plug-in management functionality is generic Part of the generic platform rather than the Taverna specific part
Plug-in Manager Implementation The plug-in manager is instantiated and configured through Spring Plug-in manager and related components are available in the root class loader for an application Exposed as named beans in the Spring context Applications access infrastructure properties through the Spring context Access through interfaces not implementation types Next slide shows actual implementation components in the current code
classname Implementation Structure SPI Registry Key:  property base Component Plug-in Manager file path base/pgrp/pid-pver/jars/jarname.jar system artifact set Raven base base base Jar Manager POM.xml Parser Plug-in Parser base/artifacts/agrp/aid-aver.jar base/artifacts/agrp/aid-aver.pom base/artifacts/agrp/aid-aver.jar base/pgrp/pid-pver.xml Download Manager
Where Next?
Timescale 1st November – Initial generic platform implementation Early version released to public CVS 4th November 1st December – Specification of Taverna specific platform services Early implementation of enactor, workflow loader and reference service components expected mid-November 1st January – Initial implementation of Taverna services 16th & 17th February – 2 day Developer Workshop in Manchester Sign up at http://spreadsheets.google.com/viewform?key=pGRSW--IktWUFVQVLleNzIw&hl=en

More Related Content

What's hot

Mike Taulty OData (NxtGen User Group UK)
Mike Taulty OData (NxtGen User Group UK)Mike Taulty OData (NxtGen User Group UK)
Mike Taulty OData (NxtGen User Group UK)
ukdpe
 
.NET Core, ASP.NET Core Course, Session 18
 .NET Core, ASP.NET Core Course, Session 18 .NET Core, ASP.NET Core Course, Session 18
.NET Core, ASP.NET Core Course, Session 18
aminmesbahi
 
Microsoft Search Server 2008 - Technical Overview
Microsoft Search Server 2008 - Technical OverviewMicrosoft Search Server 2008 - Technical Overview
Microsoft Search Server 2008 - Technical Overview
ukdpe
 
Java servlets
Java servletsJava servlets
Java servlets
yuvarani p
 
TNAPS 3 Architecture
TNAPS 3 ArchitectureTNAPS 3 Architecture
TNAPS 3 Architecture
tncor
 
A Short Java RMI Tutorial
A Short Java RMI TutorialA Short Java RMI Tutorial
A Short Java RMI Tutorial
Guo Albert
 
.NET Core, ASP.NET Core Course, Session 14
.NET Core, ASP.NET Core Course, Session 14.NET Core, ASP.NET Core Course, Session 14
.NET Core, ASP.NET Core Course, Session 14
aminmesbahi
 
.NET Core, ASP.NET Core Course, Session 8
.NET Core, ASP.NET Core Course, Session 8.NET Core, ASP.NET Core Course, Session 8
.NET Core, ASP.NET Core Course, Session 8
aminmesbahi
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
Emprovise
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
vikram singh
 
Java rmi
Java rmiJava rmi
Java rmi
Tanmoy Barman
 
JAVA Servlets
JAVA ServletsJAVA Servlets
JAVA Servlets
deepak kumar
 
Rmi
RmiRmi
Java Servlets
Java ServletsJava Servlets
Java Servlets
Nitin Pai
 
Tech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM WorkflowsTech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM Workflows
51 lecture
 
Remote Method Invocation in JAVA
Remote Method Invocation in JAVARemote Method Invocation in JAVA
Remote Method Invocation in JAVA
Jalpesh Vasa
 
Chapter 3 servlet & jsp
Chapter 3 servlet & jspChapter 3 servlet & jsp
Chapter 3 servlet & jsp
Jafar Nesargi
 
An Introduction To Java Web Technology
An Introduction To Java Web TechnologyAn Introduction To Java Web Technology
An Introduction To Java Web Technology
vikram singh
 
.NET Core, ASP.NET Core Course, Session 13
.NET Core, ASP.NET Core Course, Session 13.NET Core, ASP.NET Core Course, Session 13
.NET Core, ASP.NET Core Course, Session 13
aminmesbahi
 
Java servlet life cycle - methods ppt
Java servlet life cycle - methods pptJava servlet life cycle - methods ppt
Java servlet life cycle - methods ppt
kamal kotecha
 

What's hot (20)

Mike Taulty OData (NxtGen User Group UK)
Mike Taulty OData (NxtGen User Group UK)Mike Taulty OData (NxtGen User Group UK)
Mike Taulty OData (NxtGen User Group UK)
 
.NET Core, ASP.NET Core Course, Session 18
 .NET Core, ASP.NET Core Course, Session 18 .NET Core, ASP.NET Core Course, Session 18
.NET Core, ASP.NET Core Course, Session 18
 
Microsoft Search Server 2008 - Technical Overview
Microsoft Search Server 2008 - Technical OverviewMicrosoft Search Server 2008 - Technical Overview
Microsoft Search Server 2008 - Technical Overview
 
Java servlets
Java servletsJava servlets
Java servlets
 
TNAPS 3 Architecture
TNAPS 3 ArchitectureTNAPS 3 Architecture
TNAPS 3 Architecture
 
A Short Java RMI Tutorial
A Short Java RMI TutorialA Short Java RMI Tutorial
A Short Java RMI Tutorial
 
.NET Core, ASP.NET Core Course, Session 14
.NET Core, ASP.NET Core Course, Session 14.NET Core, ASP.NET Core Course, Session 14
.NET Core, ASP.NET Core Course, Session 14
 
.NET Core, ASP.NET Core Course, Session 8
.NET Core, ASP.NET Core Course, Session 8.NET Core, ASP.NET Core Course, Session 8
.NET Core, ASP.NET Core Course, Session 8
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
 
Java rmi
Java rmiJava rmi
Java rmi
 
JAVA Servlets
JAVA ServletsJAVA Servlets
JAVA Servlets
 
Rmi
RmiRmi
Rmi
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Tech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM WorkflowsTech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM Workflows
 
Remote Method Invocation in JAVA
Remote Method Invocation in JAVARemote Method Invocation in JAVA
Remote Method Invocation in JAVA
 
Chapter 3 servlet & jsp
Chapter 3 servlet & jspChapter 3 servlet & jsp
Chapter 3 servlet & jsp
 
An Introduction To Java Web Technology
An Introduction To Java Web TechnologyAn Introduction To Java Web Technology
An Introduction To Java Web Technology
 
.NET Core, ASP.NET Core Course, Session 13
.NET Core, ASP.NET Core Course, Session 13.NET Core, ASP.NET Core Course, Session 13
.NET Core, ASP.NET Core Course, Session 13
 
Java servlet life cycle - methods ppt
Java servlet life cycle - methods pptJava servlet life cycle - methods ppt
Java servlet life cycle - methods ppt
 

Viewers also liked

Is the sweetness in the sugar sector for real
Is the sweetness in the sugar sector for realIs the sweetness in the sugar sector for real
Is the sweetness in the sugar sector for real
Shailesh Saraf
 
Getting Started With Studio 3.0
Getting Started With Studio 3.0Getting Started With Studio 3.0
Getting Started With Studio 3.0
guestac8878b7
 
Amstel Ppt Week 4
Amstel Ppt Week 4Amstel Ppt Week 4
Amstel Ppt Week 4Groep1
 
Cool Tools for Techies
Cool Tools for TechiesCool Tools for Techies
Cool Tools for Techies
bstern1217
 
Internet Safety
Internet SafetyInternet Safety
Internet Safety
guest5b56d6
 
Entrega Final Composicion Arq9
Entrega Final Composicion Arq9Entrega Final Composicion Arq9
Entrega Final Composicion Arq9
sel hdz
 
Porcentaje de una cantidad
Porcentaje de una cantidadPorcentaje de una cantidad
Porcentaje de una cantidad
María Pizarro
 

Viewers also liked (7)

Is the sweetness in the sugar sector for real
Is the sweetness in the sugar sector for realIs the sweetness in the sugar sector for real
Is the sweetness in the sugar sector for real
 
Getting Started With Studio 3.0
Getting Started With Studio 3.0Getting Started With Studio 3.0
Getting Started With Studio 3.0
 
Amstel Ppt Week 4
Amstel Ppt Week 4Amstel Ppt Week 4
Amstel Ppt Week 4
 
Cool Tools for Techies
Cool Tools for TechiesCool Tools for Techies
Cool Tools for Techies
 
Internet Safety
Internet SafetyInternet Safety
Internet Safety
 
Entrega Final Composicion Arq9
Entrega Final Composicion Arq9Entrega Final Composicion Arq9
Entrega Final Composicion Arq9
 
Porcentaje de una cantidad
Porcentaje de una cantidadPorcentaje de una cantidad
Porcentaje de una cantidad
 

Similar to The Taverna 2 Platform

Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
Tim Burks
 
Learn Advanced JAVA at ASIT
Learn Advanced JAVA at ASITLearn Advanced JAVA at ASIT
Learn Advanced JAVA at ASIT
ASIT
 
Mba ebooks ! Edhole
Mba ebooks ! EdholeMba ebooks ! Edhole
Mba ebooks ! Edhole
Edhole.com
 
Free Ebooks Download edhole.com
Free Ebooks Download edhole.comFree Ebooks Download edhole.com
Free Ebooks Download edhole.com
Edhole.com
 
Create Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integrationCreate Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integration
Rutul Shah
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...
Databricks
 
Example Of Import Java
Example Of Import JavaExample Of Import Java
Example Of Import Java
Melody Rios
 
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for DevelopersMSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
Dave Bost
 
Pfm technical-inside
Pfm technical-insidePfm technical-inside
Pfm technical-inside
iyatomi takehiro
 
Overview Of .Net 4.0 Sanjay Vyas
Overview Of .Net 4.0   Sanjay VyasOverview Of .Net 4.0   Sanjay Vyas
Overview Of .Net 4.0 Sanjay Vyas
rsnarayanan
 
Workflow Management with Espresso Workflow
Workflow Management with Espresso WorkflowWorkflow Management with Espresso Workflow
Workflow Management with Espresso Workflow
Rolf Kremer
 
Intro to flask
Intro to flaskIntro to flask
Intro to flask
Mohamed Essam
 
Wwf
WwfWwf
2014-10-30 Taverna 3 status
2014-10-30 Taverna 3 status2014-10-30 Taverna 3 status
2014-10-30 Taverna 3 status
Stian Soiland-Reyes
 
Microservices with Netflix OSS and Spring Cloud
Microservices with Netflix OSS and Spring CloudMicroservices with Netflix OSS and Spring Cloud
Microservices with Netflix OSS and Spring Cloud
acogoluegnes
 
Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes
 Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes
Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes
distributed matters
 
Express node js
Express node jsExpress node js
Express node js
Yashprit Singh
 
Web container and Apache Tomcat
Web container and Apache TomcatWeb container and Apache Tomcat
Web container and Apache Tomcat
Auwal Amshi
 
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
AWS Chicago
 
Intro to Rack
Intro to RackIntro to Rack
Intro to Rack
Rubyc Slides
 

Similar to The Taverna 2 Platform (20)

Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
 
Learn Advanced JAVA at ASIT
Learn Advanced JAVA at ASITLearn Advanced JAVA at ASIT
Learn Advanced JAVA at ASIT
 
Mba ebooks ! Edhole
Mba ebooks ! EdholeMba ebooks ! Edhole
Mba ebooks ! Edhole
 
Free Ebooks Download edhole.com
Free Ebooks Download edhole.comFree Ebooks Download edhole.com
Free Ebooks Download edhole.com
 
Create Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integrationCreate Home Directories on Storage Using WFA and ServiceNow integration
Create Home Directories on Storage Using WFA and ServiceNow integration
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...
 
Example Of Import Java
Example Of Import JavaExample Of Import Java
Example Of Import Java
 
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for DevelopersMSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
 
Pfm technical-inside
Pfm technical-insidePfm technical-inside
Pfm technical-inside
 
Overview Of .Net 4.0 Sanjay Vyas
Overview Of .Net 4.0   Sanjay VyasOverview Of .Net 4.0   Sanjay Vyas
Overview Of .Net 4.0 Sanjay Vyas
 
Workflow Management with Espresso Workflow
Workflow Management with Espresso WorkflowWorkflow Management with Espresso Workflow
Workflow Management with Espresso Workflow
 
Intro to flask
Intro to flaskIntro to flask
Intro to flask
 
Wwf
WwfWwf
Wwf
 
2014-10-30 Taverna 3 status
2014-10-30 Taverna 3 status2014-10-30 Taverna 3 status
2014-10-30 Taverna 3 status
 
Microservices with Netflix OSS and Spring Cloud
Microservices with Netflix OSS and Spring CloudMicroservices with Netflix OSS and Spring Cloud
Microservices with Netflix OSS and Spring Cloud
 
Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes
 Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes
Microservices with Netflix OSS & Spring Cloud - Arnaud Cogoluègnes
 
Express node js
Express node jsExpress node js
Express node js
 
Web container and Apache Tomcat
Web container and Apache TomcatWeb container and Apache Tomcat
Web container and Apache Tomcat
 
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 
Intro to Rack
Intro to RackIntro to Rack
Intro to Rack
 

Recently uploaded

"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Demystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through StorytellingDemystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through Storytelling
Enterprise Knowledge
 
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
AlexanderRichford
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
Fwdays
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
LizaNolte
 
Getting the Most Out of ScyllaDB Monitoring: ShareChat's Tips
Getting the Most Out of ScyllaDB Monitoring: ShareChat's TipsGetting the Most Out of ScyllaDB Monitoring: ShareChat's Tips
Getting the Most Out of ScyllaDB Monitoring: ShareChat's Tips
ScyllaDB
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
zjhamm304
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
DianaGray10
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
Containers & AI - Beauty and the Beast!?!
Containers & AI - Beauty and the Beast!?!Containers & AI - Beauty and the Beast!?!
Containers & AI - Beauty and the Beast!?!
Tobias Schneck
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
FilipTomaszewski5
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
Ortus Solutions, Corp
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
Pablo Gómez Abajo
 
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxAI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
Sunil Jagani
 

Recently uploaded (20)

"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Demystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through StorytellingDemystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through Storytelling
 
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
 
Getting the Most Out of ScyllaDB Monitoring: ShareChat's Tips
Getting the Most Out of ScyllaDB Monitoring: ShareChat's TipsGetting the Most Out of ScyllaDB Monitoring: ShareChat's Tips
Getting the Most Out of ScyllaDB Monitoring: ShareChat's Tips
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
Containers & AI - Beauty and the Beast!?!
Containers & AI - Beauty and the Beast!?!Containers & AI - Beauty and the Beast!?!
Containers & AI - Beauty and the Beast!?!
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
 
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxAI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
 

The Taverna 2 Platform

  • 1. Developing with the Taverna Code An introduction to the T2 Platform Tom Oinn, tomoinn@crypticsquid.com, 7th October 2008 Updated 4th November 2008
  • 2. A warning! In this presentation ‘Taverna’ is distinct from ‘The Taverna Workbench’. ‘Taverna’ should be interpreted as ‘the functionality provided by the core components’ Workflow creation and modification Workflow enactment, monitoring, provenance ... and many more ‘Taverna’ in this context applies to the version 2 of the codebase in cases where a distinction is significant. ‘Service’ is used in the sense of a software component providing a service rather than any particular technology such as SOAP or REST. ‘Services’ here are plain Java objects.
  • 3. The Problem Taverna (both 1.x and 2) is complex Inherent complexity Wide ranging functionality Mechanistic complexity Loaded through Raven to resolve dependency issues Plug-in mechanism Many different extension points Requires unusual knowledge of classloading to resolve issues Taverna is valuable Developers want to use Taverna to: Extend Taverna through plug-in implementations Embed and use Taverna in other systems The complexity obscures the value
  • 5. Application Support Guiding principles: Do not require knowledge of classloading Do not require a specific application environment Allow minimal code Provide ‘exactly as much’ functionality as required Explicitly support common usage patterns Prevent dependency on implementation Extensibility and openness
  • 6. What’s in an application? An application using Taverna will contain: The Taverna API jars Support jars used by the application The application code itself Applies to all applications Command Line GUI Web app Axis service ... Platform Libraries, T2 interfaces Application Specific Libraries for your code T2 Core API Platform API, Spring etc. Platform service APIs ... ... ... Your Application Code
  • 7. Taverna Implementation Classes The application must also contain... Implementations of the enactor, workflow model and similar. Loaded through Raven Inherit and implement Taverna APIs from the parent class loader Raven Class Loaders Implementations of T2 Interfaces Platform Libraries, T2 interfaces T2 Core Impl Implementation Dependencies T2 Core API Platform API, Spring etc. Platform service APIs
  • 8. Plug-ins Taverna is plug-in based Each plug-in is isolated in its own class loader and contains: Plug-in specific libraries The extension point implementation code The plug-in inherits the Taverna APIs from the parent class loader These APIs include the extension point interfaces A plug-in can contain many extension point implementations Platform Libraries, T2 interfaces Plug-in Class Loaders 1..n T2 Core API Platform API, Spring etc. Platform service APIs Plug-in specific libraries (not T2 APIs) ... ... ... ... Plug-in Implementation
  • 9. Service Beans Configured instances Implement service APIs Use T2 implementation classes from Raven Act as a bridge between Raven driven implementations and application code Think of as a ‘toolbox’ for working with Taverna facilities Configured, linked and instantiated through Spring XML configuration Set shown here is indicative We will provide more than this 3rd parties can also provide components here Raven Class Loaders Implementations of T2 Interfaces Platform Libraries, T2 interfaces Workflow Exporter Reference Service T2 Core Impl Implementation Dependencies T2 Core API Platform API, Spring etc. Platform service APIs Workflow Parser Enactor Edit Kit Monitor Factory Activity Kit ... Plug-in Service XML Context Configuration
  • 10. Root Class Loader from Application, Web-App, Web Service ... Raven Class Loaders Platform Libraries, T2 interfaces Application Specific Libraries for your code Your Application Code Implementations of T2 Interfaces Workflow Exporter Plug-in Class Loaders 1..n T2 Core API Platform API, Spring etc. Platform service APIs ... ... ... T2 Core Impl Implementation Dependencies Workflow Parser Plug-in specific libraries (not T2 APIs) ... ... ... ... Edit Kit Activity Kit Plug-in Implementation Reference Service Enactor Classes only available through services Classes available to all code Service Beans Monitor Factory ... XML Context Configuration Plug-in Service Final Taverna Application Structure
  • 11. Using the platform 1-2-3 Initialize platform (once per application) Downloads implementation code where required Configures and instantiates service beans Configures plug-in manager, loads plug-ins Specified by Spring XML based configuration files We will provide base configurations as part of the platform Fetch appropriate service bean(s) by name The standard Taverna platform will define a set of base services and their service names Use service bean(s) to access Taverna functionality Code purely against interface based APIs – service beans perform any object instantiation such as creation of new workflow model instances.
  • 12. An example use of the platform to load a workflow, acquire input data, run the workflow and handle the output. I’m using pseudo-code here rather than Java but in general one line of pseudo-code will correspond to one line of Java, not taking into account standard Java constructs such as casting, type declarations etc. for brevity. Also consider that the final ‘base’ set of service beans is not yet defined, so service names and interfaces are illustrative rather than definitive. A short example
  • 13. initialization & workflow loading plat = new T2Platform(“path/to/conf.xml”); loader = plat.getBean(“t2.workflow.loader”); workflow = loader.parseWorkflow(“http://foo.com/wf.xml”); The ‘loader’ here is a platform service bean, a tool in the toolbox defined by the platform. This particular tool can be used to create a new workflow model from an XML definition, in this case from a URL. Important point – only one explicit object instantiation: the platform itself. In a web application or web service this would already have been provided in the servlet context, but for conventional applications we need it explicitly. Aside – the workflow model in Taverna 2 is read-only. If we wanted to modify the model we just loaded we would need an appropriate ‘workflow editor’ service. In our current code this is the Edits interface.
  • 14. Data registration ref_service = plat.getBean(“t2.reference.service”); input1 = ref_service.register(new File(“some.data”)); input2 = ref_service.register(“string value”); ‘ref_service’ is a Reference Service. This is the component of Taverna used to register data and obtain an internal identifier for it. This identifier is then used as input when running the workflow. Two inputs are registered: ‘input1’ is data held in a file locally ‘input2’ is a literal string value The real Reference Service interface is slightly more complex as it registers data asynchronously but the principle is the same. As before there is no direct object construction (other than the file), so no direct link to any implementation classes.
  • 15. Enactment enactor = plat.getBean(“t2.enactor”); wf_instance = enactor.createInstance(workflow); wf_instance.push(“input1”,input1); wf_instance.push(“input2”,input2); Following the same pattern as before, we obtain an enactor service bean from the platform. This tool creates workflow instances from workflow definitions. In this particular example we’re ignoring the workflow context, following the ‘minimal code’ principle the service bean API would include this simple version and use some sensible default context. Having obtained the workflow instance we can push the previously registered data into its (in this case two) inputs. Workflows in T2 are pipeline based, so the act of pushing data in starts the enactment, there is no explicit ‘start’ operation (except for cases where there are no workflow inputs).
  • 16. Handling results result = wf_instance.blocking_fetch(“output”); System.out.println(ref_service.getAsString(result)); I’m taking some liberty with the ‘real’ API here but the principle is the same. We don’t have a blocking fetch method at the moment but maybe we should! We call a method on the workflow instance to fetch the output which will block until it’s available. The result is in the form of an internal identifier in the reference system, so we then use the reference service to render the data referenced by that identifier to a string and print it to the console.
  • 17. The entire application plat = new T2Platform(“path/to/conf.xml”); loader = plat.getBean(“t2.workflow.loader”); workflow = loader.parseWorkflow(“http://foo.com/wf.xml”); ref_service = plat.getBean(“t2.reference.service”); input1 = ref_service.register(new File(“some.data”)); input2 = ref_service.register(“string value”); enactor = plat.getBean(“t2.enactor”); wf_instance = enactor.createInstance(workflow); wf_instance.push(“input1”,input1); wf_instance.push(“input2”,input2); result = wf_instance.blocking_fetch(“output”); System.out.println(ref_service.getAsString(result));
  • 18. Conclusion Going back to the ‘guiding principles’ does this code satisfy them? There’s no reference to classloading, and the application would just run from the normal command line. There’s no more code than required to do the job. This is a simple example and didn’t address various issues such as context configuration, but those issues weren’t in the summary of the application either so their corresponding absence in the code is another sign of success. The code never refers to implementation types, it is therefore resilient in the face of implementation updates and changes. The code is almost self documenting. We can’t make any statements about the extensibility of the platform, but all the other requirements are satisfied.
  • 20. Plug-in Management In Taverna 1.x Plug-in code is used to extend Taverna Includes all ‘base’ functionality such as web service invocation, http references etc. Plug-in development issues No tooling support Testing is problematic Problems with optional maven dependencies Can’t use libraries which are not maven artifacts Plug-in usage issues Insufficient metadata to property describe plug-in functionality Plug-in management service API missing Plug-ins have no presence in the code once loaded
  • 21. Plug-in Development Provide tool support Plug-in description generator Plug-in verifier Plug-in registry Modified class loading strategy Single class loader per plug-in Allow mix of artifact and non-artifact jars Use Raven to fetch artifact jars, but not to obtain class loaders Testing is a special case of application development See previous section We can provide archetypes for integration tests using the platform to simplify testing
  • 22. Plug-in Description Plain text description Short name Version, triple numeric with periods Development status (enumeration, for example ‘alpha | beta | stable’ to be decided) Author list Author name Author affiliation (optional) Author email (optional) Author URL (optional) Author Icon (optional, 128x128 true colour PNG with transparency) Tag list Free text tag Homepage URL (can be generated by tooling along with the page itself) Related link list Link description Link URI (most likely HTTP but potentially other reference) Icon, 128x128 true colour PNG with transparency Plugin manager background image (arbitrary size, true colour PNG with transparency, used as a background for the plugin manager panel for this plugin) Core API version targeted specified as an artifact (group, artifact, version) SPI implementation list Plain text description Short name
  • 23. New plug-in manager structure Consumer Code i.e. Taverna Workbench Install, list, enable, disable... plugins Consume SPI instances, receive notification of addition / removal SPI Registry Instance Registry SPI Registry Instance Registry Plugin Manager Service Bean Get artifact / jar Raven Repository Non-artifact Repository Artifact Cache Jar Cache Download Manager
  • 24. Plug-in Manager Implications Most places in application code explicitly referencing artifacts and raven will now reference the plug-in manager Code using SPI and instance registries is unchanged Workflow serializer changes to reference plugin rather than artifact specifier Plug-ins can be disabled on the fly Plug-in manager appears as infrastructure bean in platform Plug-in management functionality is generic Part of the generic platform rather than the Taverna specific part
  • 25. Plug-in Manager Implementation The plug-in manager is instantiated and configured through Spring Plug-in manager and related components are available in the root class loader for an application Exposed as named beans in the Spring context Applications access infrastructure properties through the Spring context Access through interfaces not implementation types Next slide shows actual implementation components in the current code
  • 26. classname Implementation Structure SPI Registry Key: property base Component Plug-in Manager file path base/pgrp/pid-pver/jars/jarname.jar system artifact set Raven base base base Jar Manager POM.xml Parser Plug-in Parser base/artifacts/agrp/aid-aver.jar base/artifacts/agrp/aid-aver.pom base/artifacts/agrp/aid-aver.jar base/pgrp/pid-pver.xml Download Manager
  • 28. Timescale 1st November – Initial generic platform implementation Early version released to public CVS 4th November 1st December – Specification of Taverna specific platform services Early implementation of enactor, workflow loader and reference service components expected mid-November 1st January – Initial implementation of Taverna services 16th & 17th February – 2 day Developer Workshop in Manchester Sign up at http://spreadsheets.google.com/viewform?key=pGRSW--IktWUFVQVLleNzIw&hl=en

Editor's Notes

  1. Taverna != Taverna Workbench.
  2. Developers don’t in general really ‘get’ classloading, not helped by confusing error messages when things go wrong. This is currently the main problem people hit when using Taverna’s code, they don’t understand the need for Raven and friends, and when they do appreciate it they have trouble using it.Applications using Taverna will already potentially have an environment in which they run, this could be an application server, from the classpath, within an Axis application or similar. We should allow this to remain, and cope with the potential classloading issues.If the developer just wants to load a workflow, run it and get the results they shouldn’t have to deal with all the configuration, editing etc. Conversely if the developer needs to drill down deeply into the models this should also be possible. A lot of this comes down to service selection within the platform and convenience wrappers for common tasksProvide a sensible API containing interfaces, do not let the developers get hold of the (changeable) implementation.The platform is used to provide Taverna to the developer, but it could be used to provide other functionality in a similar fashion such as services from the rest of OMII-UK. Make sure this is possible.
  3. This code is pretty much ‘real’. While the reference service can throw a spectrum of exceptions they’re all runtime derived. This is partly so that code which can’t handle the exceptions anyway (and which would just re-throw them) doesn’t get cluttered. It’s the same approach used in the Spring project itself and while there are problems it’s not an entirely unreasonable way to go about things.
  4. We’re ignoring monitoring, provenance capture and security here. The idea is that if the developer doesn’t want to bother with them they why force her? I’m assuming that there would be another method on the ‘enactor’ object that would allow us to specify a context explicitly, and that it’s in the context that things like the monitor would be specified.
  5. We support optional dependencies by fetching jar files with raven but actually manually creating the class loader rather than relying on raven’s native mechanism. This means that we can reference artifacts in the plug-in description for ease of use, but that all jar files (artifact and non artifact) will be merged in a single URL class loader subclass carrying the plug-in metadata. Dependency analysis happens at the plug-in creation stage, adding an artifact to the dependencies for the plug-in will add all its transitive dependencies but from that point in the pom parsing is no longer used by the plug-in manager.
  6. Shows dependency injection structure used when configuring a full plug-in manager instance.